@schoolai/shipyard 3.32.0 → 3.33.0-rc.20260923.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/capability-detector-worker.js +8 -8
- package/dist/{chunk-PVN4AJAH.js → chunk-3PJULQHI.js} +2 -2
- package/dist/{chunk-NFVZCZPA.js → chunk-4WJOA7HF.js} +2 -2
- package/dist/{chunk-RBXWUYDC.js → chunk-DQQOVPVK.js} +2 -2
- package/dist/{chunk-ZDJEJI62.js → chunk-ELZLWLTO.js} +2 -2
- package/dist/{chunk-42SK2S4V.js → chunk-FYT3ETTP.js} +2 -2
- package/dist/{chunk-SGFCXJJJ.js → chunk-JYAI3JHY.js} +2 -2
- package/dist/{chunk-7IS6KGWY.js → chunk-M6XAVFHJ.js} +3 -3
- package/dist/{chunk-FARMJBC7.js → chunk-MV7VSD2T.js} +2 -2
- package/dist/{chunk-FARMJBC7.js.map → chunk-MV7VSD2T.js.map} +1 -1
- package/dist/{chunk-RR6V6SNM.js → chunk-VHPNDDB5.js} +100 -17
- package/dist/chunk-VHPNDDB5.js.map +1 -0
- package/dist/{chunk-5TF227G7.js → chunk-WKJAGQU7.js} +3 -3
- package/dist/{chunk-UIBOKFSG.js → chunk-XPOXRIHH.js} +9 -47
- package/dist/chunk-XPOXRIHH.js.map +1 -0
- package/dist/{chunk-MAA2DPW5.js → chunk-ZXYFMJAS.js} +3 -3
- package/dist/cursor-runner.js +3 -3
- package/dist/electron-utility.js +2 -2
- package/dist/{git-repo-M634UEX7.js → git-repo-K45YAY55.js} +3 -3
- package/dist/index.js +4 -4
- package/dist/{login-6YTDDUP4.js → login-SOAGMUHR.js} +3 -3
- package/dist/{mcp-servers-LTYMM2F2.js → mcp-servers-GHDSX3UE.js} +3 -3
- package/dist/{plan-backfill-52OBXJRO.js → plan-backfill-W4FLMVC6.js} +5 -5
- package/dist/{serve-JVTSDF4E.js → serve-SDRQ7JYB.js} +120 -83
- package/dist/{serve-JVTSDF4E.js.map → serve-SDRQ7JYB.js.map} +1 -1
- package/dist/{skills-BX2NZKPN.js → skills-RO2BW4XO.js} +3 -3
- package/dist/{start-TYBSF7PZ.js → start-DHYV7OQM.js} +6 -6
- package/package.json +2 -3
- package/dist/chunk-RR6V6SNM.js.map +0 -1
- package/dist/chunk-UIBOKFSG.js.map +0 -1
- /package/dist/{chunk-PVN4AJAH.js.map → chunk-3PJULQHI.js.map} +0 -0
- /package/dist/{chunk-NFVZCZPA.js.map → chunk-4WJOA7HF.js.map} +0 -0
- /package/dist/{chunk-RBXWUYDC.js.map → chunk-DQQOVPVK.js.map} +0 -0
- /package/dist/{chunk-ZDJEJI62.js.map → chunk-ELZLWLTO.js.map} +0 -0
- /package/dist/{chunk-42SK2S4V.js.map → chunk-FYT3ETTP.js.map} +0 -0
- /package/dist/{chunk-SGFCXJJJ.js.map → chunk-JYAI3JHY.js.map} +0 -0
- /package/dist/{chunk-7IS6KGWY.js.map → chunk-M6XAVFHJ.js.map} +0 -0
- /package/dist/{chunk-5TF227G7.js.map → chunk-WKJAGQU7.js.map} +0 -0
- /package/dist/{chunk-MAA2DPW5.js.map → chunk-ZXYFMJAS.js.map} +0 -0
- /package/dist/{git-repo-M634UEX7.js.map → git-repo-K45YAY55.js.map} +0 -0
- /package/dist/{login-6YTDDUP4.js.map → login-SOAGMUHR.js.map} +0 -0
- /package/dist/{mcp-servers-LTYMM2F2.js.map → mcp-servers-GHDSX3UE.js.map} +0 -0
- /package/dist/{plan-backfill-52OBXJRO.js.map → plan-backfill-W4FLMVC6.js.map} +0 -0
- /package/dist/{skills-BX2NZKPN.js.map → skills-RO2BW4XO.js.map} +0 -0
- /package/dist/{start-TYBSF7PZ.js.map → start-DHYV7OQM.js.map} +0 -0
|
@@ -18,8 +18,8 @@ function getDaemonVersion() {
|
|
|
18
18
|
return cached;
|
|
19
19
|
}
|
|
20
20
|
function readDaemonVersion() {
|
|
21
|
-
if ("3.
|
|
22
|
-
return "3.
|
|
21
|
+
if ("3.33.0".length > 0) {
|
|
22
|
+
return "3.33.0";
|
|
23
23
|
}
|
|
24
24
|
try {
|
|
25
25
|
const here = dirname(fileURLToPath(import.meta.url));
|
|
@@ -48,4 +48,4 @@ function readDaemonVersion() {
|
|
|
48
48
|
export {
|
|
49
49
|
getDaemonVersion
|
|
50
50
|
};
|
|
51
|
-
//# sourceMappingURL=chunk-
|
|
51
|
+
//# sourceMappingURL=chunk-ZXYFMJAS.js.map
|
package/dist/cursor-runner.js
CHANGED
|
@@ -7,12 +7,12 @@ import {
|
|
|
7
7
|
} from "./chunk-FWL2ZIEL.js";
|
|
8
8
|
import {
|
|
9
9
|
buildCursorUserPrompt
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-3PJULQHI.js";
|
|
11
11
|
import {
|
|
12
12
|
ContentBlockSchema,
|
|
13
13
|
HARNESS_SERVER_NAME
|
|
14
|
-
} from "./chunk-
|
|
15
|
-
import "./chunk-
|
|
14
|
+
} from "./chunk-DQQOVPVK.js";
|
|
15
|
+
import "./chunk-MV7VSD2T.js";
|
|
16
16
|
import "./chunk-EHQITHQX.js";
|
|
17
17
|
import "./chunk-FIE2FRIW.js";
|
|
18
18
|
import "./chunk-FKOUB6H6.js";
|
package/dist/electron-utility.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
getDaemonVersion
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-ZXYFMJAS.js";
|
|
5
5
|
import {
|
|
6
6
|
enableNativeCrashReports
|
|
7
7
|
} from "./chunk-RYZH5KM3.js";
|
|
@@ -71,7 +71,7 @@ async function main() {
|
|
|
71
71
|
await loadAuthFromConfig(env);
|
|
72
72
|
crumb("post-auth-load");
|
|
73
73
|
crumb("pre-serve-import");
|
|
74
|
-
const { serve } = await import("./serve-
|
|
74
|
+
const { serve } = await import("./serve-SDRQ7JYB.js");
|
|
75
75
|
crumb("post-serve-import");
|
|
76
76
|
const portQueue = [];
|
|
77
77
|
let acceptor = null;
|
|
@@ -14,9 +14,9 @@ import {
|
|
|
14
14
|
isGhAvailable,
|
|
15
15
|
isGitRepo,
|
|
16
16
|
parseOwnerRepo
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-WKJAGQU7.js";
|
|
18
18
|
import "./chunk-4T2OQAVL.js";
|
|
19
|
-
import "./chunk-
|
|
19
|
+
import "./chunk-VHPNDDB5.js";
|
|
20
20
|
import "./chunk-ZFKJAYAN.js";
|
|
21
21
|
import "./chunk-FIE2FRIW.js";
|
|
22
22
|
import "./chunk-FKOUB6H6.js";
|
|
@@ -38,4 +38,4 @@ export {
|
|
|
38
38
|
isGitRepo,
|
|
39
39
|
parseOwnerRepo
|
|
40
40
|
};
|
|
41
|
-
//# sourceMappingURL=git-repo-
|
|
41
|
+
//# sourceMappingURL=git-repo-K45YAY55.js.map
|
package/dist/index.js
CHANGED
|
@@ -126,7 +126,7 @@ async function loadAuthFromConfig(env) {
|
|
|
126
126
|
async function handleSubcommand() {
|
|
127
127
|
const subcommand = process.argv[2];
|
|
128
128
|
if (subcommand === "login") {
|
|
129
|
-
const { loginCommand } = await import("./login-
|
|
129
|
+
const { loginCommand } = await import("./login-SOAGMUHR.js");
|
|
130
130
|
const hasCheck = process.argv.includes("--check");
|
|
131
131
|
await loginCommand({ check: hasCheck });
|
|
132
132
|
return true;
|
|
@@ -137,7 +137,7 @@ async function handleSubcommand() {
|
|
|
137
137
|
return true;
|
|
138
138
|
}
|
|
139
139
|
if (subcommand === "start") {
|
|
140
|
-
const { startCommand } = await import("./start-
|
|
140
|
+
const { startCommand } = await import("./start-DHYV7OQM.js");
|
|
141
141
|
await startCommand();
|
|
142
142
|
return true;
|
|
143
143
|
}
|
|
@@ -147,7 +147,7 @@ async function handleSubcommand() {
|
|
|
147
147
|
return true;
|
|
148
148
|
}
|
|
149
149
|
if (subcommand === "plan-backfill") {
|
|
150
|
-
const { planBackfillCommand } = await import("./plan-backfill-
|
|
150
|
+
const { planBackfillCommand } = await import("./plan-backfill-W4FLMVC6.js");
|
|
151
151
|
await planBackfillCommand();
|
|
152
152
|
return true;
|
|
153
153
|
}
|
|
@@ -159,7 +159,7 @@ async function main() {
|
|
|
159
159
|
const args = parseCliArgs();
|
|
160
160
|
if (args.serve) {
|
|
161
161
|
await loadAuthFromConfig(env);
|
|
162
|
-
const { serve } = await import("./serve-
|
|
162
|
+
const { serve } = await import("./serve-SDRQ7JYB.js");
|
|
163
163
|
return serve({ isDev: env.SHIPYARD_DEV });
|
|
164
164
|
}
|
|
165
165
|
logger.error("Use `shipyard start` to run the daemon. Use --help for usage.");
|
|
@@ -3,10 +3,10 @@ import {
|
|
|
3
3
|
ensureAuthenticated,
|
|
4
4
|
getSignalingUrl,
|
|
5
5
|
loginCommand
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-JYAI3JHY.js";
|
|
7
7
|
import "./chunk-MM3M2KAC.js";
|
|
8
8
|
import "./chunk-XPYW5WQS.js";
|
|
9
|
-
import "./chunk-
|
|
9
|
+
import "./chunk-MV7VSD2T.js";
|
|
10
10
|
import "./chunk-EHQITHQX.js";
|
|
11
11
|
import "./chunk-FIE2FRIW.js";
|
|
12
12
|
import "./chunk-FKOUB6H6.js";
|
|
@@ -17,4 +17,4 @@ export {
|
|
|
17
17
|
getSignalingUrl,
|
|
18
18
|
loginCommand
|
|
19
19
|
};
|
|
20
|
-
//# sourceMappingURL=login-
|
|
20
|
+
//# sourceMappingURL=login-SOAGMUHR.js.map
|
|
@@ -15,8 +15,8 @@ import {
|
|
|
15
15
|
resolveAuthStatuses,
|
|
16
16
|
resolveClaudeCodeAuthStatuses,
|
|
17
17
|
shouldFetchClaudeAiIntegrations
|
|
18
|
-
} from "./chunk-
|
|
19
|
-
import "./chunk-
|
|
18
|
+
} from "./chunk-FYT3ETTP.js";
|
|
19
|
+
import "./chunk-VHPNDDB5.js";
|
|
20
20
|
import "./chunk-FIE2FRIW.js";
|
|
21
21
|
import "./chunk-FKOUB6H6.js";
|
|
22
22
|
import "./chunk-XVW6VCKW.js";
|
|
@@ -38,4 +38,4 @@ export {
|
|
|
38
38
|
resolveClaudeCodeAuthStatuses,
|
|
39
39
|
shouldFetchClaudeAiIntegrations
|
|
40
40
|
};
|
|
41
|
-
//# sourceMappingURL=mcp-servers-
|
|
41
|
+
//# sourceMappingURL=mcp-servers-GHDSX3UE.js.map
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
import {
|
|
3
3
|
buildTaskStateStore,
|
|
4
4
|
runPlanBackfill
|
|
5
|
-
} from "./chunk-
|
|
6
|
-
import "./chunk-
|
|
7
|
-
import "./chunk-
|
|
8
|
-
import "./chunk-
|
|
5
|
+
} from "./chunk-M6XAVFHJ.js";
|
|
6
|
+
import "./chunk-VHPNDDB5.js";
|
|
7
|
+
import "./chunk-DQQOVPVK.js";
|
|
8
|
+
import "./chunk-MV7VSD2T.js";
|
|
9
9
|
import "./chunk-EHQITHQX.js";
|
|
10
10
|
import {
|
|
11
11
|
logger
|
|
@@ -65,4 +65,4 @@ async function planBackfillCommand(argv = process.argv.slice(3)) {
|
|
|
65
65
|
export {
|
|
66
66
|
planBackfillCommand
|
|
67
67
|
};
|
|
68
|
-
//# sourceMappingURL=plan-backfill-
|
|
68
|
+
//# sourceMappingURL=plan-backfill-W4FLMVC6.js.map
|
|
@@ -12,7 +12,7 @@ import {
|
|
|
12
12
|
guardedSubscribe,
|
|
13
13
|
makeInitialAttemptState,
|
|
14
14
|
shutdownFileWatcherGuard
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-4WJOA7HF.js";
|
|
16
16
|
import {
|
|
17
17
|
TRAILER_SCHEMA_VERSION,
|
|
18
18
|
appendTrailerToMessage,
|
|
@@ -40,13 +40,13 @@ import {
|
|
|
40
40
|
startPlanBackfillForDaemon,
|
|
41
41
|
sync,
|
|
42
42
|
validatePeerId
|
|
43
|
-
} from "./chunk-
|
|
43
|
+
} from "./chunk-M6XAVFHJ.js";
|
|
44
44
|
import {
|
|
45
45
|
loadAuthToken
|
|
46
46
|
} from "./chunk-XPYW5WQS.js";
|
|
47
47
|
import {
|
|
48
48
|
getDaemonVersion
|
|
49
|
-
} from "./chunk-
|
|
49
|
+
} from "./chunk-ZXYFMJAS.js";
|
|
50
50
|
import {
|
|
51
51
|
collectPriorCrashDetail,
|
|
52
52
|
getRecentWasmPanicMessages
|
|
@@ -189,12 +189,12 @@ import {
|
|
|
189
189
|
unresolveReviewThread,
|
|
190
190
|
withLabelAsync,
|
|
191
191
|
writeCursorApiKeyToVault
|
|
192
|
-
} from "./chunk-
|
|
192
|
+
} from "./chunk-XPOXRIHH.js";
|
|
193
193
|
import {
|
|
194
194
|
classifySkill,
|
|
195
195
|
detectSkills,
|
|
196
196
|
resolveDevinConfigHome
|
|
197
|
-
} from "./chunk-
|
|
197
|
+
} from "./chunk-ELZLWLTO.js";
|
|
198
198
|
import {
|
|
199
199
|
buildNodeSpawnEnv,
|
|
200
200
|
nodeSpawnEnvOverlay,
|
|
@@ -212,7 +212,7 @@ import {
|
|
|
212
212
|
removeWorktreeFromCache,
|
|
213
213
|
run,
|
|
214
214
|
runWithTimeout
|
|
215
|
-
} from "./chunk-
|
|
215
|
+
} from "./chunk-WKJAGQU7.js";
|
|
216
216
|
import {
|
|
217
217
|
gitExecSafe
|
|
218
218
|
} from "./chunk-4T2OQAVL.js";
|
|
@@ -233,15 +233,16 @@ import {
|
|
|
233
233
|
resolveStdioEnv,
|
|
234
234
|
setTelemetrySink,
|
|
235
235
|
telemeter
|
|
236
|
-
} from "./chunk-
|
|
236
|
+
} from "./chunk-FYT3ETTP.js";
|
|
237
237
|
import {
|
|
238
238
|
atomicWriteFile,
|
|
239
239
|
findProjectRoot,
|
|
240
240
|
isCorruptionError,
|
|
241
241
|
isEexist,
|
|
242
242
|
isEnoent,
|
|
243
|
+
tryAcquireHeldFileLock,
|
|
243
244
|
withFileLock
|
|
244
|
-
} from "./chunk-
|
|
245
|
+
} from "./chunk-VHPNDDB5.js";
|
|
245
246
|
import {
|
|
246
247
|
createOneShotPool
|
|
247
248
|
} from "./chunk-ZFKJAYAN.js";
|
|
@@ -257,7 +258,7 @@ import {
|
|
|
257
258
|
createAssetResolver,
|
|
258
259
|
toSdkContent,
|
|
259
260
|
toSdkPermissionMode
|
|
260
|
-
} from "./chunk-
|
|
261
|
+
} from "./chunk-3PJULQHI.js";
|
|
261
262
|
import {
|
|
262
263
|
AGENT_IDS,
|
|
263
264
|
AGENT_SYSTEM_CLAUDE_CODE,
|
|
@@ -466,7 +467,7 @@ import {
|
|
|
466
467
|
unsafeAssertSourceId,
|
|
467
468
|
vizFileExtension,
|
|
468
469
|
withPreferredRuntimeAuthMethod
|
|
469
|
-
} from "./chunk-
|
|
470
|
+
} from "./chunk-DQQOVPVK.js";
|
|
470
471
|
import {
|
|
471
472
|
AuthGitHubCallbackRequestSchema,
|
|
472
473
|
AuthGitHubCallbackResponseSchema,
|
|
@@ -514,7 +515,7 @@ import {
|
|
|
514
515
|
VaultKeyPutResponseSchema,
|
|
515
516
|
classifyClaudeCodeCompatibility,
|
|
516
517
|
classifyCodexCompatibility
|
|
517
|
-
} from "./chunk-
|
|
518
|
+
} from "./chunk-MV7VSD2T.js";
|
|
518
519
|
import {
|
|
519
520
|
external_exports as external_exports2
|
|
520
521
|
} from "./chunk-EHQITHQX.js";
|
|
@@ -5118,6 +5119,42 @@ async function detectPriorAbnormalExit(deps) {
|
|
|
5118
5119
|
};
|
|
5119
5120
|
}
|
|
5120
5121
|
|
|
5122
|
+
// src/services/bootstrap/fatal-signal-listeners.ts
|
|
5123
|
+
var FATAL_SYNC_SIGNALS = [
|
|
5124
|
+
"SIGTRAP",
|
|
5125
|
+
"SIGSYS",
|
|
5126
|
+
"SIGILL",
|
|
5127
|
+
"SIGBUS",
|
|
5128
|
+
"SIGSEGV",
|
|
5129
|
+
"SIGFPE"
|
|
5130
|
+
];
|
|
5131
|
+
function countFatalSignalListeners(host) {
|
|
5132
|
+
const counts = {};
|
|
5133
|
+
for (const signal of FATAL_SYNC_SIGNALS) counts[signal] = host.listenerCount(signal);
|
|
5134
|
+
return {
|
|
5135
|
+
SIGTRAP: counts.SIGTRAP ?? 0,
|
|
5136
|
+
SIGSYS: counts.SIGSYS ?? 0,
|
|
5137
|
+
SIGILL: counts.SIGILL ?? 0,
|
|
5138
|
+
SIGBUS: counts.SIGBUS ?? 0,
|
|
5139
|
+
SIGSEGV: counts.SIGSEGV ?? 0,
|
|
5140
|
+
SIGFPE: counts.SIGFPE ?? 0
|
|
5141
|
+
};
|
|
5142
|
+
}
|
|
5143
|
+
function sweepFatalSignalListeners(deps) {
|
|
5144
|
+
const counts = countFatalSignalListeners(deps.host);
|
|
5145
|
+
const offending = FATAL_SYNC_SIGNALS.filter((signal) => counts[signal] > 0);
|
|
5146
|
+
for (const signal of offending) deps.host.removeAllListeners(signal);
|
|
5147
|
+
const removed = offending.reduce((sum, signal) => sum + counts[signal], 0);
|
|
5148
|
+
if (removed > 0) {
|
|
5149
|
+
deps.log({
|
|
5150
|
+
event: "fatal_signal_listeners_removed",
|
|
5151
|
+
removed,
|
|
5152
|
+
signals: Object.fromEntries(offending.map((signal) => [signal, counts[signal]]))
|
|
5153
|
+
});
|
|
5154
|
+
}
|
|
5155
|
+
return removed;
|
|
5156
|
+
}
|
|
5157
|
+
|
|
5121
5158
|
// src/services/bootstrap/sigusr2-stack-dump.ts
|
|
5122
5159
|
import { mkdir as mkdir3, readdir as readdir5, unlink, writeFile as writeFile3 } from "fs/promises";
|
|
5123
5160
|
import { Session } from "inspector/promises";
|
|
@@ -5256,8 +5293,16 @@ function startWedgeHeartbeat(deps) {
|
|
|
5256
5293
|
}
|
|
5257
5294
|
|
|
5258
5295
|
// src/services/bootstrap/wedge-wiring.ts
|
|
5296
|
+
var FATAL_SIGNAL_SWEEP_INTERVAL_MS = 6e4;
|
|
5259
5297
|
function wireWedgeDetection(deps) {
|
|
5260
5298
|
const sigusr2Handle = installSigusr2Handler({ log: deps.log, outDir: deps.outDir });
|
|
5299
|
+
const removedAtBoot = sweepFatalSignalListeners({ host: process, log: deps.log });
|
|
5300
|
+
deps.log({ event: "fatal_signal_listeners_checked", removed: removedAtBoot });
|
|
5301
|
+
const fatalSignalSweep = setInterval(
|
|
5302
|
+
() => sweepFatalSignalListeners({ host: process, log: deps.log }),
|
|
5303
|
+
FATAL_SIGNAL_SWEEP_INTERVAL_MS
|
|
5304
|
+
);
|
|
5305
|
+
fatalSignalSweep.unref();
|
|
5261
5306
|
let heartbeatHandle = null;
|
|
5262
5307
|
if (typeof process.send === "function") {
|
|
5263
5308
|
const sendRef = process.send.bind(process);
|
|
@@ -5272,6 +5317,7 @@ function wireWedgeDetection(deps) {
|
|
|
5272
5317
|
}
|
|
5273
5318
|
return {
|
|
5274
5319
|
stop: () => {
|
|
5320
|
+
clearInterval(fatalSignalSweep);
|
|
5275
5321
|
heartbeatHandle?.stop();
|
|
5276
5322
|
sigusr2Handle.stop();
|
|
5277
5323
|
}
|
|
@@ -6068,7 +6114,7 @@ function nanoid(size = 21) {
|
|
|
6068
6114
|
}
|
|
6069
6115
|
|
|
6070
6116
|
// src/services/bootstrap/signaling.ts
|
|
6071
|
-
var DAEMON_NPM_VERSION = true ? "3.
|
|
6117
|
+
var DAEMON_NPM_VERSION = true ? "3.33.0" : "unknown";
|
|
6072
6118
|
function createDaemonSignaling(config) {
|
|
6073
6119
|
const agentId = config.agentId ?? nanoid();
|
|
6074
6120
|
function send(msg) {
|
|
@@ -17962,7 +18008,7 @@ async function refreshPluginCapabilities(daemon, tokenStore) {
|
|
|
17962
18008
|
const userSettings = await daemon.userSettingsStore.getSettings();
|
|
17963
18009
|
const [updatedMarketplace, updatedMcp, updatedSkills] = await Promise.all([
|
|
17964
18010
|
detectMarketplacePlugins(daemon.capabilities.marketplacePlugins),
|
|
17965
|
-
import("./mcp-servers-
|
|
18011
|
+
import("./mcp-servers-GHDSX3UE.js").then(
|
|
17966
18012
|
(m2) => m2.detectMCPServers(
|
|
17967
18013
|
daemon.capabilities.environments,
|
|
17968
18014
|
tokenStore,
|
|
@@ -17971,7 +18017,7 @@ async function refreshPluginCapabilities(daemon, tokenStore) {
|
|
|
17971
18017
|
readPreferredClaudeAuthMethod(userSettings)
|
|
17972
18018
|
)
|
|
17973
18019
|
),
|
|
17974
|
-
import("./skills-
|
|
18020
|
+
import("./skills-RO2BW4XO.js").then(
|
|
17975
18021
|
(m2) => m2.detectSkills(daemon.capabilities.environments)
|
|
17976
18022
|
)
|
|
17977
18023
|
]);
|
|
@@ -35353,8 +35399,10 @@ function parseQueueKey(queueKey) {
|
|
|
35353
35399
|
|
|
35354
35400
|
// src/services/task/manager/task-manager-composer-settings.ts
|
|
35355
35401
|
var DEPRECATED_COMPOSER_MODEL_FALLBACKS = {
|
|
35356
|
-
"gpt-5.3-codex": "gpt-
|
|
35357
|
-
"gpt-5.5": "gpt-
|
|
35402
|
+
"gpt-5.3-codex": "gpt-6-sol",
|
|
35403
|
+
"gpt-5.5": "gpt-6-sol",
|
|
35404
|
+
"gpt-5.6-sol": "gpt-6-sol",
|
|
35405
|
+
"gpt-5.6-luna": "gpt-6-luna",
|
|
35358
35406
|
"grok-4.5": "grok-4.7",
|
|
35359
35407
|
"grok-4.6": "grok-4.7",
|
|
35360
35408
|
"claude-opus-5": "claude-opus-5-5",
|
|
@@ -35363,6 +35411,10 @@ var DEPRECATED_COMPOSER_MODEL_FALLBACKS = {
|
|
|
35363
35411
|
function normalizeComposerModel(model) {
|
|
35364
35412
|
return DEPRECATED_COMPOSER_MODEL_FALLBACKS[model] ?? canonicalDevinModelId(model);
|
|
35365
35413
|
}
|
|
35414
|
+
function normalizeCachedComposerModel(model) {
|
|
35415
|
+
if (model == null) return null;
|
|
35416
|
+
return DEPRECATED_COMPOSER_MODEL_FALLBACKS[model] ?? model;
|
|
35417
|
+
}
|
|
35366
35418
|
function normalizeComposerSettings(settings, current = {}) {
|
|
35367
35419
|
const fallback = settings.model == null ? void 0 : DEPRECATED_COMPOSER_MODEL_FALLBACKS[settings.model];
|
|
35368
35420
|
const remapped = fallback === void 0 ? settings : { ...settings, model: fallback };
|
|
@@ -88226,9 +88278,8 @@ async function atomicWrite4(filePath, data) {
|
|
|
88226
88278
|
}
|
|
88227
88279
|
|
|
88228
88280
|
// src/services/storage/schedule-store.ts
|
|
88229
|
-
import { mkdir as mkdir34, readFile as readFile44, writeFile as writeFile26 } from "fs/promises";
|
|
88281
|
+
import { lstat as lstat6, mkdir as mkdir34, readFile as readFile44, rmdir, writeFile as writeFile26 } from "fs/promises";
|
|
88230
88282
|
import { dirname as dirname34, join as join77 } from "path";
|
|
88231
|
-
import properLockfile from "proper-lockfile";
|
|
88232
88283
|
var STORE_FILE = "schedules.json";
|
|
88233
88284
|
function emptyState() {
|
|
88234
88285
|
return {
|
|
@@ -88268,7 +88319,32 @@ function notify(listeners, event) {
|
|
|
88268
88319
|
}
|
|
88269
88320
|
}
|
|
88270
88321
|
}
|
|
88271
|
-
function
|
|
88322
|
+
async function reclaimStaleLegacyLockDir(lockPath2, staleMs, log) {
|
|
88323
|
+
let stats;
|
|
88324
|
+
try {
|
|
88325
|
+
stats = await lstat6(lockPath2);
|
|
88326
|
+
} catch (error) {
|
|
88327
|
+
if (isEnoent(error)) return;
|
|
88328
|
+
throw error;
|
|
88329
|
+
}
|
|
88330
|
+
if (!stats.isDirectory() || Date.now() - stats.mtimeMs <= staleMs) return;
|
|
88331
|
+
try {
|
|
88332
|
+
await rmdir(lockPath2);
|
|
88333
|
+
} catch (error) {
|
|
88334
|
+
if (isChangedUnderneath(error)) return;
|
|
88335
|
+
throw error;
|
|
88336
|
+
}
|
|
88337
|
+
log({
|
|
88338
|
+
event: "schedule_store_legacy_lock_reclaimed",
|
|
88339
|
+
lockPath: lockPath2,
|
|
88340
|
+
ageMs: Date.now() - stats.mtimeMs
|
|
88341
|
+
});
|
|
88342
|
+
}
|
|
88343
|
+
function isChangedUnderneath(error) {
|
|
88344
|
+
const code = typeof error === "object" && error !== null ? Reflect.get(error, "code") : void 0;
|
|
88345
|
+
return code === "ENOENT" || code === "ENOTDIR" || code === "ENOTEMPTY" || code === "EEXIST";
|
|
88346
|
+
}
|
|
88347
|
+
function buildScheduleStore(dataDir, options) {
|
|
88272
88348
|
const filePath = join77(dataDir, STORE_FILE);
|
|
88273
88349
|
const lockPath2 = `${filePath}.automation-lock`;
|
|
88274
88350
|
const listeners = /* @__PURE__ */ new Set();
|
|
@@ -88278,37 +88354,31 @@ function buildScheduleStore(dataDir, options = {}) {
|
|
|
88278
88354
|
const retryCount = options.lockRetryCount ?? 100;
|
|
88279
88355
|
async function withScheduleLock(operation) {
|
|
88280
88356
|
await mkdir34(dirname34(filePath), { recursive: true });
|
|
88281
|
-
|
|
88282
|
-
const
|
|
88283
|
-
realpath: false,
|
|
88284
|
-
lockfilePath: lockPath2,
|
|
88285
|
-
stale: staleMs,
|
|
88286
|
-
update: updateMs,
|
|
88287
|
-
retries: {
|
|
88288
|
-
retries: retryCount,
|
|
88289
|
-
factor: 1,
|
|
88290
|
-
minTimeout: retryDelayMs,
|
|
88291
|
-
maxTimeout: retryDelayMs
|
|
88292
|
-
},
|
|
88293
|
-
onCompromised(error) {
|
|
88294
|
-
compromised = error;
|
|
88295
|
-
}
|
|
88296
|
-
});
|
|
88297
|
-
const assertLockHealthy = () => {
|
|
88298
|
-
if (compromised) throw compromised;
|
|
88299
|
-
};
|
|
88357
|
+
const lock = await acquireWithRetries(lockPath2);
|
|
88358
|
+
const assertLockHealthy = () => lock.assertHealthy();
|
|
88300
88359
|
let result;
|
|
88301
88360
|
try {
|
|
88302
88361
|
result = await operation(assertLockHealthy);
|
|
88303
88362
|
assertLockHealthy();
|
|
88304
88363
|
} catch (error) {
|
|
88305
|
-
await release().catch(() => {
|
|
88364
|
+
await lock.release().catch(() => {
|
|
88306
88365
|
});
|
|
88307
88366
|
throw error;
|
|
88308
88367
|
}
|
|
88309
|
-
await release();
|
|
88368
|
+
await lock.release();
|
|
88310
88369
|
return result;
|
|
88311
88370
|
}
|
|
88371
|
+
async function acquireWithRetries(path8) {
|
|
88372
|
+
for (let attempt = 0; attempt <= retryCount; attempt += 1) {
|
|
88373
|
+
await reclaimStaleLegacyLockDir(path8, staleMs, options.log);
|
|
88374
|
+
const lock = await tryAcquireHeldFileLock(path8, { staleMs, refreshMs: updateMs });
|
|
88375
|
+
if (lock) return lock;
|
|
88376
|
+
await new Promise((resolve15) => setTimeout(resolve15, retryDelayMs));
|
|
88377
|
+
}
|
|
88378
|
+
throw Object.assign(new Error(`Schedule store lock is held by another process: ${path8}`), {
|
|
88379
|
+
code: "ELOCKED"
|
|
88380
|
+
});
|
|
88381
|
+
}
|
|
88312
88382
|
async function loadFromDisk() {
|
|
88313
88383
|
let source;
|
|
88314
88384
|
try {
|
|
@@ -88372,42 +88442,9 @@ function buildScheduleStore(dataDir, options = {}) {
|
|
|
88372
88442
|
}
|
|
88373
88443
|
async function tryAcquireRunExecutionLock(runId) {
|
|
88374
88444
|
await mkdir34(dirname34(filePath), { recursive: true });
|
|
88375
|
-
const
|
|
88376
|
-
|
|
88377
|
-
|
|
88378
|
-
try {
|
|
88379
|
-
release = await properLockfile.lock(executionPath, {
|
|
88380
|
-
realpath: false,
|
|
88381
|
-
lockfilePath: `${executionPath}.lock`,
|
|
88382
|
-
stale: staleMs,
|
|
88383
|
-
update: updateMs,
|
|
88384
|
-
retries: 0,
|
|
88385
|
-
onCompromised(error) {
|
|
88386
|
-
compromised = error;
|
|
88387
|
-
}
|
|
88388
|
-
});
|
|
88389
|
-
} catch (error) {
|
|
88390
|
-
if (typeof error === "object" && error !== null && Reflect.get(error, "code") === "ELOCKED") {
|
|
88391
|
-
return null;
|
|
88392
|
-
}
|
|
88393
|
-
throw error;
|
|
88394
|
-
}
|
|
88395
|
-
const assertLockHealthy = () => {
|
|
88396
|
-
if (compromised) throw compromised;
|
|
88397
|
-
};
|
|
88398
|
-
let released = false;
|
|
88399
|
-
return {
|
|
88400
|
-
assertHealthy: assertLockHealthy,
|
|
88401
|
-
async release() {
|
|
88402
|
-
if (released) return;
|
|
88403
|
-
released = true;
|
|
88404
|
-
await release().catch((error) => {
|
|
88405
|
-
if (typeof error !== "object" || error === null || Reflect.get(error, "code") !== "ERELEASED") {
|
|
88406
|
-
throw error;
|
|
88407
|
-
}
|
|
88408
|
-
});
|
|
88409
|
-
}
|
|
88410
|
-
};
|
|
88445
|
+
const executionLockPath = `${filePath}.run-${encodeURIComponent(runId)}.lock`;
|
|
88446
|
+
await reclaimStaleLegacyLockDir(executionLockPath, staleMs, options.log);
|
|
88447
|
+
return tryAcquireHeldFileLock(executionLockPath, { staleMs, refreshMs: updateMs });
|
|
88411
88448
|
}
|
|
88412
88449
|
return {
|
|
88413
88450
|
async create(schedule) {
|
|
@@ -112443,7 +112480,7 @@ async function createDaemon(deps) {
|
|
|
112443
112480
|
env: process.env
|
|
112444
112481
|
});
|
|
112445
112482
|
const _b = await userSettingsStore.getSettings();
|
|
112446
|
-
let cachedComposerModel = _b.composerModel
|
|
112483
|
+
let cachedComposerModel = normalizeCachedComposerModel(_b.composerModel);
|
|
112447
112484
|
let cachedComposerReasoning = _b.composerReasoning ?? null;
|
|
112448
112485
|
let cachedComposerPermission = _b.composerPermission ?? null;
|
|
112449
112486
|
const cachedCompactionByRuntime = new Map(
|
|
@@ -113368,7 +113405,7 @@ async function createDaemon(deps) {
|
|
|
113368
113405
|
if (!cwd) return null;
|
|
113369
113406
|
try {
|
|
113370
113407
|
const { gitExecSafe: gitExecSafe2 } = await import("./git-pool-V73Q53NX.js");
|
|
113371
|
-
const { getRepoDefaultBranch: getRepoDefaultBranch2 } = await import("./git-repo-
|
|
113408
|
+
const { getRepoDefaultBranch: getRepoDefaultBranch2 } = await import("./git-repo-K45YAY55.js");
|
|
113372
113409
|
const branch = await gitExecSafe2(cwd, ["rev-parse", "--abbrev-ref", "HEAD"]) ?? "";
|
|
113373
113410
|
if (!branch || branch === "HEAD") return null;
|
|
113374
113411
|
const pr = branchPrStateCache.get(taskId)?.currentBranchPR;
|
|
@@ -113758,7 +113795,7 @@ async function createDaemon(deps) {
|
|
|
113758
113795
|
checkIsAuthenticated: () => capabilitiesRef.current?.anthropicAuth?.status !== "unauthenticated"
|
|
113759
113796
|
});
|
|
113760
113797
|
taskManager.setPreWarmManager(preWarmManager);
|
|
113761
|
-
const scheduleStore = buildScheduleStore(deps.dataDir);
|
|
113798
|
+
const scheduleStore = buildScheduleStore(deps.dataDir, { log: deps.log });
|
|
113762
113799
|
const rateLimitStore = await buildRateLimitStore(deps.dataDir, {
|
|
113763
113800
|
onError: (err3, ctx) => {
|
|
113764
113801
|
logger.error({ err: err3, ...ctx }, "rate-limit store write failed");
|
|
@@ -113889,7 +113926,7 @@ async function createDaemon(deps) {
|
|
|
113889
113926
|
};
|
|
113890
113927
|
const userSettingsUnsub = userSettingsStore.subscribe((settings) => {
|
|
113891
113928
|
applyStayAwakeSetting(settings.stayAwake);
|
|
113892
|
-
const newModel = settings.composerModel
|
|
113929
|
+
const newModel = normalizeCachedComposerModel(settings.composerModel);
|
|
113893
113930
|
const newReasoning = settings.composerReasoning ?? null;
|
|
113894
113931
|
const initLockedChanged = newModel !== cachedComposerModel || newReasoning !== cachedComposerReasoning;
|
|
113895
113932
|
cachedComposerModel = newModel;
|
|
@@ -116330,7 +116367,7 @@ async function saveCodexSkillsCache(path8, cache2) {
|
|
|
116330
116367
|
}
|
|
116331
116368
|
|
|
116332
116369
|
// src/services/skills-mirror/manager.ts
|
|
116333
|
-
import { lstat as
|
|
116370
|
+
import { lstat as lstat7, mkdir as mkdir44, readlink, stat as stat23, symlink, unlink as unlink18 } from "fs/promises";
|
|
116334
116371
|
import { homedir as homedir16 } from "os";
|
|
116335
116372
|
import { dirname as dirname43, join as join91 } from "path";
|
|
116336
116373
|
|
|
@@ -116406,7 +116443,7 @@ function isPermissionError(err3) {
|
|
|
116406
116443
|
}
|
|
116407
116444
|
async function probeLink(path8) {
|
|
116408
116445
|
try {
|
|
116409
|
-
const st = await
|
|
116446
|
+
const st = await lstat7(path8);
|
|
116410
116447
|
if (st.isSymbolicLink()) {
|
|
116411
116448
|
try {
|
|
116412
116449
|
const currentTarget = await readlink(path8);
|
|
@@ -117856,4 +117893,4 @@ export {
|
|
|
117856
117893
|
decideWorkspaceScope,
|
|
117857
117894
|
serve
|
|
117858
117895
|
};
|
|
117859
|
-
//# sourceMappingURL=serve-
|
|
117896
|
+
//# sourceMappingURL=serve-SDRQ7JYB.js.map
|