@camstack/agent 1.1.50 → 1.1.51
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/{chunk-P6AJ6S7H.mjs → chunk-67UOSAWB.mjs} +2 -2
- package/dist/{chunk-Y6BUFOWG.mjs → chunk-KPUXW5YX.mjs} +84 -55
- package/dist/chunk-KPUXW5YX.mjs.map +1 -0
- package/dist/cli.js +113 -72
- package/dist/cli.js.map +1 -1
- package/dist/cli.mjs +30 -18
- package/dist/cli.mjs.map +1 -1
- package/dist/index.js +83 -54
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +2 -2
- package/dist/starter.js +83 -54
- package/dist/starter.js.map +1 -1
- package/dist/starter.mjs +1 -1
- package/package.json +5 -5
- package/dist/chunk-Y6BUFOWG.mjs.map +0 -1
- /package/dist/{chunk-P6AJ6S7H.mjs.map → chunk-67UOSAWB.mjs.map} +0 -0
package/dist/index.mjs
CHANGED
package/dist/starter.js
CHANGED
|
@@ -83,6 +83,7 @@ var require_dist = __commonJS({
|
|
|
83
83
|
planBoot: () => planBoot,
|
|
84
84
|
readDevUploadManifest: () => readDevUploadManifest,
|
|
85
85
|
readRestartIntentMarker: () => readRestartIntentMarker,
|
|
86
|
+
readSeedVersion: () => readSeedVersion,
|
|
86
87
|
readServerRootState: () => readServerRootState,
|
|
87
88
|
registerActiveRootResolver: () => registerActiveRootResolver,
|
|
88
89
|
restartIntentMarkerPath: () => restartIntentMarkerPath,
|
|
@@ -294,7 +295,34 @@ var require_dist = __commonJS({
|
|
|
294
295
|
}
|
|
295
296
|
return null;
|
|
296
297
|
}
|
|
297
|
-
function
|
|
298
|
+
function parse(version) {
|
|
299
|
+
const dashIdx = version.indexOf("-");
|
|
300
|
+
const base = dashIdx === -1 ? version : version.slice(0, dashIdx);
|
|
301
|
+
const prerelease = dashIdx === -1 ? null : version.slice(dashIdx + 1);
|
|
302
|
+
const nums = base.split(".").map((seg) => {
|
|
303
|
+
const n = Number.parseInt(seg, 10);
|
|
304
|
+
return Number.isNaN(n) ? 0 : n;
|
|
305
|
+
});
|
|
306
|
+
return { nums, prerelease };
|
|
307
|
+
}
|
|
308
|
+
function compareSemver(a, b) {
|
|
309
|
+
const pa = parse(a);
|
|
310
|
+
const pb = parse(b);
|
|
311
|
+
const len = Math.max(pa.nums.length, pb.nums.length);
|
|
312
|
+
for (let i = 0; i < len; i++) {
|
|
313
|
+
const na = pa.nums[i] ?? 0;
|
|
314
|
+
const nb = pb.nums[i] ?? 0;
|
|
315
|
+
if (na < nb) return -1;
|
|
316
|
+
if (na > nb) return 1;
|
|
317
|
+
}
|
|
318
|
+
if (pa.prerelease === null && pb.prerelease === null) return 0;
|
|
319
|
+
if (pa.prerelease === null) return 1;
|
|
320
|
+
if (pb.prerelease === null) return -1;
|
|
321
|
+
if (pa.prerelease < pb.prerelease) return -1;
|
|
322
|
+
if (pa.prerelease > pb.prerelease) return 1;
|
|
323
|
+
return 0;
|
|
324
|
+
}
|
|
325
|
+
function planBoot(state, isValidVersion, now, seedVersion = null) {
|
|
298
326
|
if (state === null) {
|
|
299
327
|
return { kind: "baked", reason: "no server-root state", stateToWrite: null };
|
|
300
328
|
}
|
|
@@ -340,6 +368,19 @@ var require_dist = __commonJS({
|
|
|
340
368
|
}
|
|
341
369
|
if (next.currentVersion !== null) {
|
|
342
370
|
if (isValidVersion(next.currentVersion)) {
|
|
371
|
+
if (!changed && seedVersion !== null && compareSemver(seedVersion, next.currentVersion) > 0) {
|
|
372
|
+
return {
|
|
373
|
+
kind: "baked",
|
|
374
|
+
reason: `baked seed ${seedVersion} is newer than active data-root ${next.currentVersion} \u2014 adopting the image seed`,
|
|
375
|
+
stateToWrite: {
|
|
376
|
+
...next,
|
|
377
|
+
currentVersion: null,
|
|
378
|
+
previousVersion: null,
|
|
379
|
+
pendingBoot: null,
|
|
380
|
+
rolledBack: null
|
|
381
|
+
}
|
|
382
|
+
};
|
|
383
|
+
}
|
|
343
384
|
return {
|
|
344
385
|
kind: "data-root",
|
|
345
386
|
version: next.currentVersion,
|
|
@@ -388,33 +429,6 @@ var require_dist = __commonJS({
|
|
|
388
429
|
stateToWrite: changed ? next : null
|
|
389
430
|
};
|
|
390
431
|
}
|
|
391
|
-
function parse(version) {
|
|
392
|
-
const dashIdx = version.indexOf("-");
|
|
393
|
-
const base = dashIdx === -1 ? version : version.slice(0, dashIdx);
|
|
394
|
-
const prerelease = dashIdx === -1 ? null : version.slice(dashIdx + 1);
|
|
395
|
-
const nums = base.split(".").map((seg) => {
|
|
396
|
-
const n = Number.parseInt(seg, 10);
|
|
397
|
-
return Number.isNaN(n) ? 0 : n;
|
|
398
|
-
});
|
|
399
|
-
return { nums, prerelease };
|
|
400
|
-
}
|
|
401
|
-
function compareSemver(a, b) {
|
|
402
|
-
const pa = parse(a);
|
|
403
|
-
const pb = parse(b);
|
|
404
|
-
const len = Math.max(pa.nums.length, pb.nums.length);
|
|
405
|
-
for (let i = 0; i < len; i++) {
|
|
406
|
-
const na = pa.nums[i] ?? 0;
|
|
407
|
-
const nb = pb.nums[i] ?? 0;
|
|
408
|
-
if (na < nb) return -1;
|
|
409
|
-
if (na > nb) return 1;
|
|
410
|
-
}
|
|
411
|
-
if (pa.prerelease === null && pb.prerelease === null) return 0;
|
|
412
|
-
if (pa.prerelease === null) return 1;
|
|
413
|
-
if (pb.prerelease === null) return -1;
|
|
414
|
-
if (pa.prerelease < pb.prerelease) return -1;
|
|
415
|
-
if (pa.prerelease > pb.prerelease) return 1;
|
|
416
|
-
return 0;
|
|
417
|
-
}
|
|
418
432
|
var fs3 = __toESM2(require("fs"));
|
|
419
433
|
var path3 = __toESM2(require("path"));
|
|
420
434
|
function detectWorkspaceRoot(fromDir) {
|
|
@@ -433,6 +447,7 @@ var require_dist = __commonJS({
|
|
|
433
447
|
dir = parent;
|
|
434
448
|
}
|
|
435
449
|
}
|
|
450
|
+
var fs4 = __toESM2(require("fs"));
|
|
436
451
|
var path4 = __toESM2(require("path"));
|
|
437
452
|
var import_node_url = require("url");
|
|
438
453
|
var HOST_EXTERNAL_SPECIFIERS = [
|
|
@@ -476,6 +491,19 @@ var require_dist = __commonJS({
|
|
|
476
491
|
};
|
|
477
492
|
registerHooks(hooks);
|
|
478
493
|
}
|
|
494
|
+
function readSeedVersion(seedEntry) {
|
|
495
|
+
try {
|
|
496
|
+
const pkgJsonPath = path4.join(path4.dirname(seedEntry), "..", "package.json");
|
|
497
|
+
const raw = JSON.parse(fs4.readFileSync(pkgJsonPath, "utf-8"));
|
|
498
|
+
if (typeof raw === "object" && raw !== null) {
|
|
499
|
+
const version = raw["version"];
|
|
500
|
+
if (typeof version === "string") return version;
|
|
501
|
+
}
|
|
502
|
+
return null;
|
|
503
|
+
} catch {
|
|
504
|
+
return null;
|
|
505
|
+
}
|
|
506
|
+
}
|
|
479
507
|
function runNodeStarter2(options) {
|
|
480
508
|
const env = options.env ?? process.env;
|
|
481
509
|
const now = options.now ?? Date.now;
|
|
@@ -504,7 +532,8 @@ var require_dist = __commonJS({
|
|
|
504
532
|
if (reason !== null) console.warn(`[starter] version ${version} invalid: ${reason}`);
|
|
505
533
|
return reason === null;
|
|
506
534
|
};
|
|
507
|
-
const
|
|
535
|
+
const seedVersion = readSeedVersion(options.seedEntry);
|
|
536
|
+
const plan = planBoot(state, isValidVersion, now, seedVersion);
|
|
508
537
|
if (plan.stateToWrite !== null) {
|
|
509
538
|
try {
|
|
510
539
|
writeServerRootState(rootDir, plan.stateToWrite);
|
|
@@ -539,7 +568,7 @@ var require_dist = __commonJS({
|
|
|
539
568
|
options.loadEntry(options.seedEntry);
|
|
540
569
|
}
|
|
541
570
|
var import_node_child_process = require("child_process");
|
|
542
|
-
var
|
|
571
|
+
var fs5 = __toESM2(require("fs"));
|
|
543
572
|
var path5 = __toESM2(require("path"));
|
|
544
573
|
var import_node_util = require("util");
|
|
545
574
|
var execFileAsync = (0, import_node_util.promisify)(import_node_child_process.execFile);
|
|
@@ -552,7 +581,7 @@ var require_dist = __commonJS({
|
|
|
552
581
|
var RESTART_REASON_PREFIX = "server-update";
|
|
553
582
|
function readPackageVersion(pkgJsonPath) {
|
|
554
583
|
try {
|
|
555
|
-
const raw = JSON.parse(
|
|
584
|
+
const raw = JSON.parse(fs5.readFileSync(pkgJsonPath, "utf-8"));
|
|
556
585
|
if (typeof raw === "object" && raw !== null) {
|
|
557
586
|
const version = raw["version"];
|
|
558
587
|
if (typeof version === "string") return version;
|
|
@@ -626,7 +655,7 @@ var require_dist = __commonJS({
|
|
|
626
655
|
const rootDir = this.rootDir();
|
|
627
656
|
const raw = readServerRootState(rootDir);
|
|
628
657
|
if (raw !== null) return { state: raw, corrupt: false };
|
|
629
|
-
return { state: emptyServerRootState(), corrupt:
|
|
658
|
+
return { state: emptyServerRootState(), corrupt: fs5.existsSync(stateFilePath(rootDir)) };
|
|
630
659
|
}
|
|
631
660
|
updateState(state) {
|
|
632
661
|
if (this.inFlight === "checking") return "checking";
|
|
@@ -768,7 +797,7 @@ var require_dist = __commonJS({
|
|
|
768
797
|
}
|
|
769
798
|
if (isDevChannelVersion(target)) {
|
|
770
799
|
const uploadsDir = devUploadVersionDir(this.rootDir(), target);
|
|
771
|
-
if (!
|
|
800
|
+
if (!fs5.existsSync(uploadsDir)) {
|
|
772
801
|
return {
|
|
773
802
|
accepted: false,
|
|
774
803
|
targetVersion: target,
|
|
@@ -823,15 +852,15 @@ var require_dist = __commonJS({
|
|
|
823
852
|
async stageAndActivate(target) {
|
|
824
853
|
const rootDir = this.rootDir();
|
|
825
854
|
const vDir = versionsDir(rootDir);
|
|
826
|
-
|
|
855
|
+
fs5.mkdirSync(vDir, { recursive: true });
|
|
827
856
|
const stagingDir = path5.join(vDir, `.staging-${target}-${process.pid}-${this.now()}`);
|
|
828
|
-
|
|
857
|
+
fs5.mkdirSync(stagingDir, { recursive: true });
|
|
829
858
|
try {
|
|
830
859
|
const devDir = devUploadVersionDir(rootDir, target);
|
|
831
860
|
const registry = this.env["CAMSTACK_NPM_REGISTRY"];
|
|
832
861
|
const installArgs = ["install", "--omit=dev", "--no-audit", "--no-fund", "--loglevel=error"];
|
|
833
|
-
if (
|
|
834
|
-
|
|
862
|
+
if (fs5.existsSync(devDir)) {
|
|
863
|
+
fs5.writeFileSync(
|
|
835
864
|
path5.join(stagingDir, "package.json"),
|
|
836
865
|
JSON.stringify(this.buildDevUploadsPackageJson(devDir, target), null, 2),
|
|
837
866
|
"utf-8"
|
|
@@ -841,7 +870,7 @@ var require_dist = __commonJS({
|
|
|
841
870
|
timeoutMs: NPM_INSTALL_TIMEOUT_MS
|
|
842
871
|
});
|
|
843
872
|
} else {
|
|
844
|
-
|
|
873
|
+
fs5.writeFileSync(
|
|
845
874
|
path5.join(stagingDir, "package.json"),
|
|
846
875
|
JSON.stringify({ name: "camstack-node-root", private: true }, null, 2),
|
|
847
876
|
"utf-8"
|
|
@@ -852,7 +881,7 @@ var require_dist = __commonJS({
|
|
|
852
881
|
);
|
|
853
882
|
}
|
|
854
883
|
const entry = rootEntryPath(stagingDir, this.spec);
|
|
855
|
-
if (!
|
|
884
|
+
if (!fs5.existsSync(entry)) {
|
|
856
885
|
throw new Error(`staged closure is missing the root entry (${entry})`);
|
|
857
886
|
}
|
|
858
887
|
const stagedVersion = readPackageVersion(
|
|
@@ -864,14 +893,14 @@ var require_dist = __commonJS({
|
|
|
864
893
|
);
|
|
865
894
|
}
|
|
866
895
|
const dest = versionDir(rootDir, target);
|
|
867
|
-
if (
|
|
896
|
+
if (fs5.existsSync(dest)) {
|
|
868
897
|
const aside = `${dest}.evicted-${this.now()}`;
|
|
869
|
-
await
|
|
870
|
-
await
|
|
898
|
+
await fs5.promises.rename(dest, aside);
|
|
899
|
+
await fs5.promises.rm(aside, { recursive: true, force: true }).catch(() => void 0);
|
|
871
900
|
}
|
|
872
|
-
await
|
|
901
|
+
await fs5.promises.rename(stagingDir, dest);
|
|
873
902
|
} catch (err) {
|
|
874
|
-
await
|
|
903
|
+
await fs5.promises.rm(stagingDir, { recursive: true, force: true }).catch(() => void 0);
|
|
875
904
|
throw err;
|
|
876
905
|
}
|
|
877
906
|
}
|
|
@@ -902,7 +931,7 @@ var require_dist = __commonJS({
|
|
|
902
931
|
}
|
|
903
932
|
const fileRef = (filename) => {
|
|
904
933
|
const abs = path5.join(devDir, filename);
|
|
905
|
-
if (!
|
|
934
|
+
if (!fs5.existsSync(abs)) {
|
|
906
935
|
throw new Error(`dev-uploads tarball listed in the manifest is missing: ${abs}`);
|
|
907
936
|
}
|
|
908
937
|
return `file:${abs}`;
|
|
@@ -1072,7 +1101,7 @@ var require_dist = __commonJS({
|
|
|
1072
1101
|
const vDir = versionsDir(this.rootDir());
|
|
1073
1102
|
let entries;
|
|
1074
1103
|
try {
|
|
1075
|
-
entries =
|
|
1104
|
+
entries = fs5.readdirSync(vDir);
|
|
1076
1105
|
} catch {
|
|
1077
1106
|
return;
|
|
1078
1107
|
}
|
|
@@ -1081,14 +1110,14 @@ var require_dist = __commonJS({
|
|
|
1081
1110
|
const full = path5.join(vDir, entry);
|
|
1082
1111
|
if (entry.startsWith(".")) {
|
|
1083
1112
|
try {
|
|
1084
|
-
const ageMs = this.now() -
|
|
1113
|
+
const ageMs = this.now() - fs5.statSync(full).mtimeMs;
|
|
1085
1114
|
if (ageMs < _RootUpdateService.STALE_TRANSIENT_MS) continue;
|
|
1086
1115
|
} catch {
|
|
1087
1116
|
continue;
|
|
1088
1117
|
}
|
|
1089
1118
|
}
|
|
1090
1119
|
try {
|
|
1091
|
-
|
|
1120
|
+
fs5.rmSync(full, { recursive: true, force: true });
|
|
1092
1121
|
this.logger.debug("pruned server-root version dir", { meta: { entry } });
|
|
1093
1122
|
} catch (err) {
|
|
1094
1123
|
this.logger.warn("failed to prune server-root version dir", {
|
|
@@ -1109,15 +1138,15 @@ var require_dist = __commonJS({
|
|
|
1109
1138
|
const dir = devUploadsDir(this.rootDir());
|
|
1110
1139
|
let entries;
|
|
1111
1140
|
try {
|
|
1112
|
-
entries =
|
|
1141
|
+
entries = fs5.readdirSync(dir);
|
|
1113
1142
|
} catch {
|
|
1114
1143
|
return;
|
|
1115
1144
|
}
|
|
1116
1145
|
const graveyard = path5.join(dir, ".sweeping");
|
|
1117
1146
|
try {
|
|
1118
|
-
for (const residue of
|
|
1147
|
+
for (const residue of fs5.readdirSync(graveyard)) {
|
|
1119
1148
|
try {
|
|
1120
|
-
|
|
1149
|
+
fs5.rmSync(path5.join(graveyard, residue), { recursive: true, force: true });
|
|
1121
1150
|
} catch {
|
|
1122
1151
|
}
|
|
1123
1152
|
}
|
|
@@ -1129,11 +1158,11 @@ var require_dist = __commonJS({
|
|
|
1129
1158
|
);
|
|
1130
1159
|
const doomed = byNewestFirst.slice(keepCount);
|
|
1131
1160
|
if (doomed.length === 0) return;
|
|
1132
|
-
|
|
1161
|
+
fs5.mkdirSync(graveyard, { recursive: true });
|
|
1133
1162
|
for (const entry of doomed) {
|
|
1134
1163
|
const aside = path5.join(graveyard, `${entry}-${this.now()}`);
|
|
1135
1164
|
try {
|
|
1136
|
-
|
|
1165
|
+
fs5.renameSync(path5.join(dir, entry), aside);
|
|
1137
1166
|
} catch (err) {
|
|
1138
1167
|
this.logger.warn("failed to move dev-uploads entry aside for sweep", {
|
|
1139
1168
|
meta: { entry, error: err instanceof Error ? err.message : String(err) }
|
|
@@ -1141,7 +1170,7 @@ var require_dist = __commonJS({
|
|
|
1141
1170
|
continue;
|
|
1142
1171
|
}
|
|
1143
1172
|
try {
|
|
1144
|
-
|
|
1173
|
+
fs5.rmSync(aside, { recursive: true, force: true });
|
|
1145
1174
|
this.logger.debug("swept dev-uploads entry", { meta: { entry } });
|
|
1146
1175
|
} catch {
|
|
1147
1176
|
}
|