@askexenow/exe-os 0.9.401 → 0.9.402
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/.dist-verified.json +3 -3
- package/dist/bin/cli.js +3 -3
- package/dist/bin/registry-proxy.js +1 -1
- package/dist/bin/stack-update.js +2 -2
- package/dist/bin/vps-health-gate.js +1 -1
- package/dist/build-manifest.json +36 -36
- package/dist/{chunk-IZXQFETE.js → chunk-4FAJBCUY.js} +1 -1
- package/dist/{chunk-LPQOPT5B.js → chunk-AR2K7SUC.js} +59 -15
- package/dist/{chunk-UX2IGPPW.js → chunk-BPTTQRMJ.js} +1 -1
- package/dist/{chunk-KWULIKOX.js → chunk-FL2QIDNZ.js} +1 -1
- package/dist/hooks/manifest.json +1 -1
- package/dist/lib/registry-proxy.js +1 -1
- package/dist/{stack-generate-manifest-TMLO7F3U.js → stack-generate-manifest-53OIWKJJ.js} +2 -2
- package/dist/{stack-promote-IYD6GDSW.js → stack-promote-43W7XU5A.js} +2 -2
- package/dist/{stack-release-2Q2IYM4M.js → stack-release-TWEFH7RF.js} +3 -3
- package/dist/{stack-update-WRS2QRK4.js → stack-update-SPZKBTHQ.js} +5 -1
- package/package.json +1 -1
- package/release-notes.json +8 -16
- package/stack.release.json +3 -3
package/dist/.dist-verified.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 1,
|
|
3
|
-
"verified_at": "2026-09-
|
|
4
|
-
"manifest_sha256": "
|
|
5
|
-
"package_version": "0.9.
|
|
3
|
+
"verified_at": "2026-09-26T18:51:05.769Z",
|
|
4
|
+
"manifest_sha256": "8453d29aa87d378ca6644b157e4989f87e332b2c6801893aba9385ae4da324b6",
|
|
5
|
+
"package_version": "0.9.402"
|
|
6
6
|
}
|
package/dist/bin/cli.js
CHANGED
|
@@ -798,14 +798,14 @@ ${JSON.stringify(stormAlert, null, 2)}`);
|
|
|
798
798
|
const { runStackUpdateCli } = await import("./stack-update.js");
|
|
799
799
|
await runStackUpdateCli(args.slice(1));
|
|
800
800
|
} else if (args[0] === "release") {
|
|
801
|
-
const { parseReleaseArgs, runStackRelease } = await import("../stack-release-
|
|
801
|
+
const { parseReleaseArgs, runStackRelease } = await import("../stack-release-TWEFH7RF.js");
|
|
802
802
|
const releaseFlags = parseReleaseArgs(args.slice(1));
|
|
803
803
|
await runStackRelease(releaseFlags);
|
|
804
804
|
} else if (args[0] === "stack-promote") {
|
|
805
|
-
const { runStackPromoteCli } = await import("../stack-promote-
|
|
805
|
+
const { runStackPromoteCli } = await import("../stack-promote-43W7XU5A.js");
|
|
806
806
|
await runStackPromoteCli(args.slice(1));
|
|
807
807
|
} else if (args[0] === "stack-generate-manifest") {
|
|
808
|
-
const { runStackGenerateManifestCli } = await import("../stack-generate-manifest-
|
|
808
|
+
const { runStackGenerateManifestCli } = await import("../stack-generate-manifest-53OIWKJJ.js");
|
|
809
809
|
process.exit(await runStackGenerateManifestCli(args.slice(1)));
|
|
810
810
|
} else if (args[0] === "repo-truth") {
|
|
811
811
|
const { runRepoTruthCli } = await import("./exe-repo-truth.js");
|
package/dist/bin/stack-update.js
CHANGED
|
@@ -50,7 +50,7 @@ import {
|
|
|
50
50
|
verifyManifestImagesAvailable,
|
|
51
51
|
warnUnmanagedManifestServices,
|
|
52
52
|
withStackUpdateOperationLock
|
|
53
|
-
} from "../chunk-
|
|
53
|
+
} from "../chunk-AR2K7SUC.js";
|
|
54
54
|
import "../chunk-EC5H53YD.js";
|
|
55
55
|
import {
|
|
56
56
|
runVerifyStack
|
|
@@ -66,7 +66,7 @@ import {
|
|
|
66
66
|
import {
|
|
67
67
|
logResult,
|
|
68
68
|
runHealthGate
|
|
69
|
-
} from "../chunk-
|
|
69
|
+
} from "../chunk-4FAJBCUY.js";
|
|
70
70
|
import "../chunk-L25OAFOU.js";
|
|
71
71
|
import "../chunk-RT57D7C4.js";
|
|
72
72
|
import "../chunk-FTZET5YX.js";
|
package/dist/build-manifest.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 2,
|
|
3
|
-
"generated_at": "2026-09-
|
|
3
|
+
"generated_at": "2026-09-26T18:51:05.708Z",
|
|
4
4
|
"files": [
|
|
5
5
|
{
|
|
6
6
|
"path": "active-agent-3FVEAPPT.js",
|
|
@@ -179,7 +179,7 @@
|
|
|
179
179
|
},
|
|
180
180
|
{
|
|
181
181
|
"path": "bin/cli.js",
|
|
182
|
-
"sha256": "
|
|
182
|
+
"sha256": "ca619c8d0e2db0e7b0865b9beb9ecec95a5f01065f5fa67b062c5e00af2261c0",
|
|
183
183
|
"bytes": 69826
|
|
184
184
|
},
|
|
185
185
|
{
|
|
@@ -524,7 +524,7 @@
|
|
|
524
524
|
},
|
|
525
525
|
{
|
|
526
526
|
"path": "bin/registry-proxy.js",
|
|
527
|
-
"sha256": "
|
|
527
|
+
"sha256": "3bc01618360147984d09607d1ce6a1983c6f587763f9a9ce0d8944f483153896",
|
|
528
528
|
"bytes": 1885
|
|
529
529
|
},
|
|
530
530
|
{
|
|
@@ -549,7 +549,7 @@
|
|
|
549
549
|
},
|
|
550
550
|
{
|
|
551
551
|
"path": "bin/stack-update.js",
|
|
552
|
-
"sha256": "
|
|
552
|
+
"sha256": "0930d7fb000dfb0195941bb35b599148c0bf574934af7ff11d61b92b80526f8a",
|
|
553
553
|
"bytes": 132136
|
|
554
554
|
},
|
|
555
555
|
{
|
|
@@ -569,7 +569,7 @@
|
|
|
569
569
|
},
|
|
570
570
|
{
|
|
571
571
|
"path": "bin/vps-health-gate.js",
|
|
572
|
-
"sha256": "
|
|
572
|
+
"sha256": "51e843f120210c8fdab734dcb7b844a4cc8b3d3b2dbea900f6547bf8061b0b6d",
|
|
573
573
|
"bytes": 333
|
|
574
574
|
},
|
|
575
575
|
{
|
|
@@ -732,6 +732,11 @@
|
|
|
732
732
|
"sha256": "95d9af04c423550e84bb843411c860bc16b99d2c6cdaf4f53892b4ae4ab8e661",
|
|
733
733
|
"bytes": 854
|
|
734
734
|
},
|
|
735
|
+
{
|
|
736
|
+
"path": "chunk-4FAJBCUY.js",
|
|
737
|
+
"sha256": "94c611c2d0cc509991a5fb2e0f3a3c8ab0f550b21599d93e56ca6bf9802fd075",
|
|
738
|
+
"bytes": 7587
|
|
739
|
+
},
|
|
735
740
|
{
|
|
736
741
|
"path": "chunk-4MUU33NJ.js",
|
|
737
742
|
"sha256": "a8c0fb44a5b16c604a8db885b8e4a141c645ba22d2aa512a1e7b2ecf7369b76b",
|
|
@@ -917,6 +922,11 @@
|
|
|
917
922
|
"sha256": "1fe1a2034e1adbd119d854017211729e4d4099d372f2c01203e019ee01e66414",
|
|
918
923
|
"bytes": 28439
|
|
919
924
|
},
|
|
925
|
+
{
|
|
926
|
+
"path": "chunk-AR2K7SUC.js",
|
|
927
|
+
"sha256": "862a533d706fc1f48121a865fd7c674be0c39c139dc6390921f4ce96004417ed",
|
|
928
|
+
"bytes": 274246
|
|
929
|
+
},
|
|
920
930
|
{
|
|
921
931
|
"path": "chunk-ARX6TAGN.js",
|
|
922
932
|
"sha256": "2012774af162979e32828bdd3fc5bbcf8b39ef83320855cc08c21550aa3c2693",
|
|
@@ -962,6 +972,11 @@
|
|
|
962
972
|
"sha256": "b36e68f4464d4936a0b81cc7d73952e13d154218c5900b829208f7dc6d1752f4",
|
|
963
973
|
"bytes": 8793
|
|
964
974
|
},
|
|
975
|
+
{
|
|
976
|
+
"path": "chunk-BPTTQRMJ.js",
|
|
977
|
+
"sha256": "73396a40dbd7bfc35f5787e7e9bb2542381f52fa9b0991b2c3fa15f0c91ca58c",
|
|
978
|
+
"bytes": 3766
|
|
979
|
+
},
|
|
965
980
|
{
|
|
966
981
|
"path": "chunk-BTSWFMEH.js",
|
|
967
982
|
"sha256": "0f59755b7c14d9d84045f88dfa6cabae300fdf510b27d26ba999798aaf7613b1",
|
|
@@ -1147,6 +1162,11 @@
|
|
|
1147
1162
|
"sha256": "a999baf6db449dcd8c856393a0721a50aceb27e74a49f71bbc6b553081d98fc2",
|
|
1148
1163
|
"bytes": 6697
|
|
1149
1164
|
},
|
|
1165
|
+
{
|
|
1166
|
+
"path": "chunk-FL2QIDNZ.js",
|
|
1167
|
+
"sha256": "93dd3dd3fb0c397639a936954a578838776f754852ab26c3b345e0ad169a7e8c",
|
|
1168
|
+
"bytes": 44776
|
|
1169
|
+
},
|
|
1150
1170
|
{
|
|
1151
1171
|
"path": "chunk-FS7XF7SE.js",
|
|
1152
1172
|
"sha256": "7bc1072400b38de7aed6d597c83a46592cec28fe5bb0ced731637dbeae3a3a2e",
|
|
@@ -1312,11 +1332,6 @@
|
|
|
1312
1332
|
"sha256": "c0b3a6372de1ceaaa0ee8077beab90baddb26d44c0fbf933543b963927819e16",
|
|
1313
1333
|
"bytes": 57011
|
|
1314
1334
|
},
|
|
1315
|
-
{
|
|
1316
|
-
"path": "chunk-IZXQFETE.js",
|
|
1317
|
-
"sha256": "5ec76de5963c97e9cf65ca8762ec36cb243baa04db92be02bf5d794b58b0b2a7",
|
|
1318
|
-
"bytes": 7587
|
|
1319
|
-
},
|
|
1320
1335
|
{
|
|
1321
1336
|
"path": "chunk-J4MJ3DVJ.js",
|
|
1322
1337
|
"sha256": "eef1ffda711ee7d7c4007eef11c8accb8a7a7334f0f0a88aa388dc1cf9bf68f0",
|
|
@@ -1402,11 +1417,6 @@
|
|
|
1402
1417
|
"sha256": "b4b541043927616db5d90ebf7ac7a27a470db4e59da6c8a060a6bb1fa82725ba",
|
|
1403
1418
|
"bytes": 2370
|
|
1404
1419
|
},
|
|
1405
|
-
{
|
|
1406
|
-
"path": "chunk-KWULIKOX.js",
|
|
1407
|
-
"sha256": "63a84e20e4831040f39d64196e0491b64afbf335df6df37758a1c5b4d33dd771",
|
|
1408
|
-
"bytes": 44776
|
|
1409
|
-
},
|
|
1410
1420
|
{
|
|
1411
1421
|
"path": "chunk-KZB2B7RM.js",
|
|
1412
1422
|
"sha256": "69dbe01abcb9d3040d540aac97728e34f21bdea474d9a7d50389ddd2f43fc1ea",
|
|
@@ -1437,11 +1447,6 @@
|
|
|
1437
1447
|
"sha256": "97c340d79a55dfa786143f7df0134ea0bea878faaaa25938d1ef05d7e664d5df",
|
|
1438
1448
|
"bytes": 3519
|
|
1439
1449
|
},
|
|
1440
|
-
{
|
|
1441
|
-
"path": "chunk-LPQOPT5B.js",
|
|
1442
|
-
"sha256": "a9c2b1b06163db91f5b283387965033c1eaa379a6abe100f38868fc0947e8da9",
|
|
1443
|
-
"bytes": 272808
|
|
1444
|
-
},
|
|
1445
1450
|
{
|
|
1446
1451
|
"path": "chunk-LSH2UDUX.js",
|
|
1447
1452
|
"sha256": "4b3425c974fb5ccbeaf9229f76f9ee7ed302387be89fef50826419ae4a2300ab",
|
|
@@ -1897,11 +1902,6 @@
|
|
|
1897
1902
|
"sha256": "e90e2cf38ba91adb389b613bf6bf3bba8acd0eb455a496c8ab61d6c92d5de4bd",
|
|
1898
1903
|
"bytes": 27577
|
|
1899
1904
|
},
|
|
1900
|
-
{
|
|
1901
|
-
"path": "chunk-UX2IGPPW.js",
|
|
1902
|
-
"sha256": "f075ec4648083b9c6fd5b12fef427e1a528d995775655cd759dc57a4ba680646",
|
|
1903
|
-
"bytes": 3766
|
|
1904
|
-
},
|
|
1905
1905
|
{
|
|
1906
1906
|
"path": "chunk-V4TZI6EO.js",
|
|
1907
1907
|
"sha256": "697ecdef6991c061baab1e9759bc14aecd28631954b2edfdb721c98c72d41c82",
|
|
@@ -2579,7 +2579,7 @@
|
|
|
2579
2579
|
},
|
|
2580
2580
|
{
|
|
2581
2581
|
"path": "hooks/manifest.json",
|
|
2582
|
-
"sha256": "
|
|
2582
|
+
"sha256": "9ca0a1c0c220c0e5b0548ef590779e2162bed221c117d7297fc3017d09810287",
|
|
2583
2583
|
"bytes": 1841
|
|
2584
2584
|
},
|
|
2585
2585
|
{
|
|
@@ -2884,7 +2884,7 @@
|
|
|
2884
2884
|
},
|
|
2885
2885
|
{
|
|
2886
2886
|
"path": "lib/registry-proxy.js",
|
|
2887
|
-
"sha256": "
|
|
2887
|
+
"sha256": "f75ff994266d2c65a434fcab76b25274332411b0da2173af45d65448b0c9b727",
|
|
2888
2888
|
"bytes": 749
|
|
2889
2889
|
},
|
|
2890
2890
|
{
|
|
@@ -3473,8 +3473,8 @@
|
|
|
3473
3473
|
"bytes": 111
|
|
3474
3474
|
},
|
|
3475
3475
|
{
|
|
3476
|
-
"path": "stack-generate-manifest-
|
|
3477
|
-
"sha256": "
|
|
3476
|
+
"path": "stack-generate-manifest-53OIWKJJ.js",
|
|
3477
|
+
"sha256": "4299bd2de702861ececd5452c6bc1c8e51b4d09b959ba6d62ef4baef00bc26be",
|
|
3478
3478
|
"bytes": 56960
|
|
3479
3479
|
},
|
|
3480
3480
|
{
|
|
@@ -3483,19 +3483,19 @@
|
|
|
3483
3483
|
"bytes": 4761
|
|
3484
3484
|
},
|
|
3485
3485
|
{
|
|
3486
|
-
"path": "stack-promote-
|
|
3487
|
-
"sha256": "
|
|
3486
|
+
"path": "stack-promote-43W7XU5A.js",
|
|
3487
|
+
"sha256": "120716c6304c2b28c36afc6927b687882e8e3ffd3662f28efa6049d6056d53a3",
|
|
3488
3488
|
"bytes": 7425
|
|
3489
3489
|
},
|
|
3490
3490
|
{
|
|
3491
|
-
"path": "stack-release-
|
|
3492
|
-
"sha256": "
|
|
3491
|
+
"path": "stack-release-TWEFH7RF.js",
|
|
3492
|
+
"sha256": "ac9da7724b6bdadeace5685cde290019a7a39ab33c2bd8ae13f7aee8fc2e5c87",
|
|
3493
3493
|
"bytes": 117404
|
|
3494
3494
|
},
|
|
3495
3495
|
{
|
|
3496
|
-
"path": "stack-update-
|
|
3497
|
-
"sha256": "
|
|
3498
|
-
"bytes":
|
|
3496
|
+
"path": "stack-update-SPZKBTHQ.js",
|
|
3497
|
+
"sha256": "d62249adaa05eda4a824ef2867460be65087eafcc1bc854814e90ff81888319b",
|
|
3498
|
+
"bytes": 8231
|
|
3499
3499
|
},
|
|
3500
3500
|
{
|
|
3501
3501
|
"path": "stalled-dispatch-escalation-MHLYH2PT.js",
|
|
@@ -212,7 +212,7 @@ async function main(args) {
|
|
|
212
212
|
console.log("[health-gate] Starting rollback...");
|
|
213
213
|
restorePreDeployBackup();
|
|
214
214
|
try {
|
|
215
|
-
const { rollbackStackUpdate, defaultStackPaths } = await import("./stack-update-
|
|
215
|
+
const { rollbackStackUpdate, defaultStackPaths } = await import("./stack-update-SPZKBTHQ.js");
|
|
216
216
|
const paths = defaultStackPaths();
|
|
217
217
|
await rollbackStackUpdate({
|
|
218
218
|
manifestRef: paths.manifestRef,
|
|
@@ -33,6 +33,15 @@ import { fileURLToPath } from "url";
|
|
|
33
33
|
import { parseDocument as parseYamlDocument } from "yaml";
|
|
34
34
|
|
|
35
35
|
// src/lib/erp-asset-smoke.ts
|
|
36
|
+
var REQUIRED_DESK_BUNDLES = {
|
|
37
|
+
"desk.bundle.js": "javascript",
|
|
38
|
+
"desk.bundle.css": "css"
|
|
39
|
+
};
|
|
40
|
+
var ASSET_PATH_PATTERN = /^\/assets\/[A-Za-z0-9_-]+\/dist\/(?:css|js)\/[^"' >]+$/;
|
|
41
|
+
var CONTENT_TYPE_PATTERN = {
|
|
42
|
+
javascript: /javascript/i,
|
|
43
|
+
css: /(?:^|\/)css/i
|
|
44
|
+
};
|
|
36
45
|
async function verifyErpAssets(port, siteName, fetchPage = fetch) {
|
|
37
46
|
if (!Number.isInteger(port) || port < 1 || port > 65535) {
|
|
38
47
|
throw new Error("ERP asset smoke refused an invalid loopback port");
|
|
@@ -42,7 +51,6 @@ async function verifyErpAssets(port, siteName, fetchPage = fetch) {
|
|
|
42
51
|
}
|
|
43
52
|
const origin = `http://127.0.0.1:${port}`;
|
|
44
53
|
const signal = AbortSignal.timeout(6e4);
|
|
45
|
-
const assetPaths = /* @__PURE__ */ new Set();
|
|
46
54
|
const get = async (path2) => {
|
|
47
55
|
let url = new URL(path2, origin);
|
|
48
56
|
for (let redirects = 0; redirects < 5; redirects++) {
|
|
@@ -56,25 +64,38 @@ async function verifyErpAssets(port, siteName, fetchPage = fetch) {
|
|
|
56
64
|
}
|
|
57
65
|
throw new Error("ERP asset smoke exceeded its redirect limit");
|
|
58
66
|
};
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
67
|
+
const manifestResponse = await get("/assets/assets.json");
|
|
68
|
+
if (manifestResponse.status !== 200) {
|
|
69
|
+
await manifestResponse.body?.cancel();
|
|
70
|
+
throw new Error(`ERP asset smoke: assets.json manifest returned HTTP ${manifestResponse.status}`);
|
|
71
|
+
}
|
|
72
|
+
let manifest;
|
|
73
|
+
try {
|
|
74
|
+
manifest = JSON.parse(await manifestResponse.text());
|
|
75
|
+
} catch {
|
|
76
|
+
throw new Error("ERP asset smoke: assets.json manifest was not valid JSON");
|
|
77
|
+
}
|
|
78
|
+
if (typeof manifest !== "object" || manifest === null || Array.isArray(manifest)) {
|
|
79
|
+
throw new Error("ERP asset smoke: assets.json manifest was not a JSON object");
|
|
80
|
+
}
|
|
81
|
+
const assetPaths = /* @__PURE__ */ new Map();
|
|
82
|
+
for (const [key, kind] of Object.entries(REQUIRED_DESK_BUNDLES)) {
|
|
83
|
+
const value = manifest[key];
|
|
84
|
+
if (typeof value !== "string" || !ASSET_PATH_PATTERN.test(value)) {
|
|
85
|
+
throw new Error(`ERP asset smoke: assets.json manifest is missing the desk ${kind} bundle ("${key}")`);
|
|
68
86
|
}
|
|
69
|
-
|
|
87
|
+
assetPaths.set(value, kind);
|
|
70
88
|
}
|
|
71
|
-
|
|
72
|
-
for (const asset of assetPaths) {
|
|
89
|
+
for (const [asset, kind] of assetPaths) {
|
|
73
90
|
const response = await get(asset);
|
|
74
91
|
await response.body?.cancel();
|
|
75
92
|
if (response.status !== 200) {
|
|
76
93
|
throw new Error(`ERP asset smoke: ${asset} returned HTTP ${response.status}`);
|
|
77
94
|
}
|
|
95
|
+
const contentType = response.headers.get("content-type") ?? "";
|
|
96
|
+
if (!CONTENT_TYPE_PATTERN[kind].test(contentType)) {
|
|
97
|
+
throw new Error(`ERP asset smoke: ${asset} did not return a ${kind} content type (got "${contentType}")`);
|
|
98
|
+
}
|
|
78
99
|
}
|
|
79
100
|
}
|
|
80
101
|
|
|
@@ -1676,6 +1697,26 @@ function parseEnv(raw) {
|
|
|
1676
1697
|
}
|
|
1677
1698
|
return env;
|
|
1678
1699
|
}
|
|
1700
|
+
function unquoteComposeEnvValue(raw) {
|
|
1701
|
+
const trimmed = raw.trim();
|
|
1702
|
+
if (trimmed.length >= 2) {
|
|
1703
|
+
const first = trimmed[0];
|
|
1704
|
+
const last = trimmed[trimmed.length - 1];
|
|
1705
|
+
if (first === '"' && last === '"') {
|
|
1706
|
+
return trimmed.slice(1, -1).replace(/\\(["\\])/g, "$1");
|
|
1707
|
+
}
|
|
1708
|
+
if (first === "'" && last === "'") {
|
|
1709
|
+
return trimmed.slice(1, -1);
|
|
1710
|
+
}
|
|
1711
|
+
}
|
|
1712
|
+
return trimmed;
|
|
1713
|
+
}
|
|
1714
|
+
function resolveComposeEnvValue(env, key, fallback) {
|
|
1715
|
+
const raw = env.get(key);
|
|
1716
|
+
if (raw === void 0) return fallback;
|
|
1717
|
+
const value = unquoteComposeEnvValue(raw);
|
|
1718
|
+
return value !== "" ? value : fallback;
|
|
1719
|
+
}
|
|
1679
1720
|
function patchEnv(raw, updates) {
|
|
1680
1721
|
const seen = /* @__PURE__ */ new Set();
|
|
1681
1722
|
const lines = raw.replace(/\n$/, "").split(/\r?\n/);
|
|
@@ -4798,8 +4839,9 @@ Push the missing image(s) to the registry, or re-run with --break-glass <reason>
|
|
|
4798
4839
|
erpNginxRef,
|
|
4799
4840
|
options.retainedImageIds ?? captureRetainedComposeImageIds
|
|
4800
4841
|
);
|
|
4801
|
-
const
|
|
4802
|
-
const
|
|
4842
|
+
const smokeEnv = parseEnv(readFileSync(options.envFile, "utf8"));
|
|
4843
|
+
const portRaw = resolveComposeEnvValue(smokeEnv, "ERP_API_PORT", "8069");
|
|
4844
|
+
const siteName = resolveComposeEnvValue(smokeEnv, "ERP_SITE_NAME", "erp.askexe.com");
|
|
4803
4845
|
await (options.verifyErpAssets ?? verifyErpAssets)(Number(portRaw), siteName);
|
|
4804
4846
|
}
|
|
4805
4847
|
}
|
|
@@ -5940,6 +5982,8 @@ export {
|
|
|
5940
5982
|
loadStackManifestWithFallback,
|
|
5941
5983
|
reportStackManifestSource,
|
|
5942
5984
|
parseEnv,
|
|
5985
|
+
unquoteComposeEnvValue,
|
|
5986
|
+
resolveComposeEnvValue,
|
|
5943
5987
|
patchEnv,
|
|
5944
5988
|
removeEnvKeys,
|
|
5945
5989
|
expandComposeExpression,
|
|
@@ -140,7 +140,7 @@ async function assertManifestSignature(manifest, publicKeyPem) {
|
|
|
140
140
|
"manifest carries no `signature`. Fleets that enforce EXE_STACK_PUBLIC_KEY reject unsigned manifests, so publishing one would ship a release no host can install. Re-sign with the custodied key: node scripts/sign-stack-manifest.mjs deploy/stack-manifests/v0.9.json"
|
|
141
141
|
);
|
|
142
142
|
}
|
|
143
|
-
const { verifyStackManifestSignature } = await import("./stack-update-
|
|
143
|
+
const { verifyStackManifestSignature } = await import("./stack-update-SPZKBTHQ.js");
|
|
144
144
|
try {
|
|
145
145
|
verifyStackManifestSignature(manifest, publicKeyPem);
|
|
146
146
|
} catch (err) {
|
package/dist/hooks/manifest.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 1,
|
|
3
|
-
"generatedAt": "2026-09-
|
|
3
|
+
"generatedAt": "2026-09-26T18:51:05.342Z",
|
|
4
4
|
"hashes": {
|
|
5
5
|
"bug-report-worker.js": "2336d762dead5c2addcf34771a054ab68946872540defc5259c7c38efea514ab",
|
|
6
6
|
"codex-stop-task-finalizer.js": "1e44c134731e9192114c8b2999bac666755baa36eb242ef9bdd39c81407355f9",
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
writeSignedStackManifest
|
|
4
|
-
} from "./chunk-
|
|
5
|
-
import "./chunk-
|
|
4
|
+
} from "./chunk-BPTTQRMJ.js";
|
|
5
|
+
import "./chunk-AR2K7SUC.js";
|
|
6
6
|
import "./chunk-EC5H53YD.js";
|
|
7
7
|
import "./chunk-YYRI2AGK.js";
|
|
8
8
|
import "./chunk-L25OAFOU.js";
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
writeSignedStackManifest
|
|
4
|
-
} from "./chunk-
|
|
5
|
-
import "./chunk-
|
|
4
|
+
} from "./chunk-BPTTQRMJ.js";
|
|
5
|
+
import "./chunk-AR2K7SUC.js";
|
|
6
6
|
import "./chunk-EC5H53YD.js";
|
|
7
7
|
import "./chunk-YYRI2AGK.js";
|
|
8
8
|
import "./chunk-L25OAFOU.js";
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
writeSignedStackManifest
|
|
4
|
-
} from "./chunk-
|
|
5
|
-
import "./chunk-
|
|
4
|
+
} from "./chunk-BPTTQRMJ.js";
|
|
5
|
+
import "./chunk-AR2K7SUC.js";
|
|
6
6
|
import "./chunk-EC5H53YD.js";
|
|
7
7
|
import {
|
|
8
8
|
assertPreflightGate,
|
|
@@ -2028,7 +2028,7 @@ async function warmProxyCache(imageRef) {
|
|
|
2028
2028
|
async function resolveImageGitShaLabel(ref, dryRun) {
|
|
2029
2029
|
if (!ref || dryRun) return void 0;
|
|
2030
2030
|
try {
|
|
2031
|
-
const { readProvenanceLabels } = await import("./stack-generate-manifest-
|
|
2031
|
+
const { readProvenanceLabels } = await import("./stack-generate-manifest-53OIWKJJ.js");
|
|
2032
2032
|
const labels = await readProvenanceLabels(ref);
|
|
2033
2033
|
return labels["org.exe.git_sha"] ?? labels["org.opencontainers.image.revision"];
|
|
2034
2034
|
} catch (err) {
|
|
@@ -103,6 +103,7 @@ import {
|
|
|
103
103
|
removeEnvKeys,
|
|
104
104
|
reportStackManifestSource,
|
|
105
105
|
requiredImagePinKeys,
|
|
106
|
+
resolveComposeEnvValue,
|
|
106
107
|
resolveComposeProjectName,
|
|
107
108
|
resolveHealthHost,
|
|
108
109
|
resolveManifestImagePin,
|
|
@@ -126,6 +127,7 @@ import {
|
|
|
126
127
|
syncImagePinsWithProcessEnv,
|
|
127
128
|
unmanagedManifestServices,
|
|
128
129
|
unpinnedImageBreakGlassBanner,
|
|
130
|
+
unquoteComposeEnvValue,
|
|
129
131
|
verifyComposeServicesRunning,
|
|
130
132
|
verifyIngressTargetsReachable,
|
|
131
133
|
verifyManifestImagesAvailable,
|
|
@@ -136,7 +138,7 @@ import {
|
|
|
136
138
|
waitForHttpOk,
|
|
137
139
|
warnUnmanagedManifestServices,
|
|
138
140
|
withStackUpdateOperationLock
|
|
139
|
-
} from "./chunk-
|
|
141
|
+
} from "./chunk-AR2K7SUC.js";
|
|
140
142
|
import "./chunk-EC5H53YD.js";
|
|
141
143
|
import "./chunk-YYRI2AGK.js";
|
|
142
144
|
import "./chunk-L25OAFOU.js";
|
|
@@ -254,6 +256,7 @@ export {
|
|
|
254
256
|
removeEnvKeys,
|
|
255
257
|
reportStackManifestSource,
|
|
256
258
|
requiredImagePinKeys,
|
|
259
|
+
resolveComposeEnvValue,
|
|
257
260
|
resolveComposeProjectName,
|
|
258
261
|
resolveHealthHost,
|
|
259
262
|
resolveManifestImagePin,
|
|
@@ -277,6 +280,7 @@ export {
|
|
|
277
280
|
syncImagePinsWithProcessEnv,
|
|
278
281
|
unmanagedManifestServices,
|
|
279
282
|
unpinnedImageBreakGlassBanner,
|
|
283
|
+
unquoteComposeEnvValue,
|
|
280
284
|
verifyComposeServicesRunning,
|
|
281
285
|
verifyIngressTargetsReachable,
|
|
282
286
|
verifyManifestImagesAvailable,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@askexenow/exe-os",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.402",
|
|
4
4
|
"description": "AI employee operating system \u2014 persistent memory, task management, and multi-agent coordination for Claude Code.",
|
|
5
5
|
"license": "SEE LICENSE IN LICENSE",
|
|
6
6
|
"type": "module",
|
package/release-notes.json
CHANGED
|
@@ -1,26 +1,18 @@
|
|
|
1
1
|
{
|
|
2
|
-
"current": "0.9.
|
|
2
|
+
"current": "0.9.402",
|
|
3
3
|
"notes": {
|
|
4
|
-
"0.9.
|
|
5
|
-
"version": "0.9.
|
|
4
|
+
"0.9.402": {
|
|
5
|
+
"version": "0.9.402",
|
|
6
6
|
"date": "2026-09-26",
|
|
7
|
-
"features": [
|
|
8
|
-
"hourly npm release-drift monitor (bug 19aa10d0) (#1558)",
|
|
9
|
-
"retain live Compose for ERP image group (#1542)"
|
|
10
|
-
],
|
|
7
|
+
"features": [],
|
|
11
8
|
"fixes": [
|
|
12
|
-
"
|
|
13
|
-
"
|
|
14
|
-
"
|
|
15
|
-
"self-heal missing native bindings after npm ci (bug fd9f99d0) (#1560)",
|
|
16
|
-
"remove one-off npm publisher workflows, add guard test (bug 19aa10d0) (#1559)",
|
|
17
|
-
"stop stack-release-auto's report job silencing its own alarm (#1556)",
|
|
18
|
-
"publish gate waits on same-SHA race instead of refusing at t=0 (#1557)",
|
|
19
|
-
"add size-based bloat trigger to ci-disk-reclaim git repack (#1555)"
|
|
9
|
+
"resolve quoted ERP smoke-check env values (bug fff7716e) (#1567)",
|
|
10
|
+
"resolve desk bundles via assets.json, not the /app->/login redirect (#1568)",
|
|
11
|
+
"retry only transient GitHub API failures in fail-closed gates (bug ade4dc64) (#1566)"
|
|
20
12
|
],
|
|
21
13
|
"security": [],
|
|
22
14
|
"other": [
|
|
23
|
-
"release: v0.9.
|
|
15
|
+
"release: v0.9.402 (#1569)"
|
|
24
16
|
],
|
|
25
17
|
"migration_notes": []
|
|
26
18
|
},
|
package/stack.release.json
CHANGED
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
"repo": "AskExe/exe-os",
|
|
5
5
|
"service": "exe-os",
|
|
6
6
|
"packageName": "@askexenow/exe-os",
|
|
7
|
-
"version": "0.9.
|
|
8
|
-
"image": "ghcr.io/askexe/exe-os:v0.9.
|
|
7
|
+
"version": "0.9.402",
|
|
8
|
+
"image": "ghcr.io/askexe/exe-os:v0.9.402",
|
|
9
9
|
"imageEnv": "EXE_OS_IMAGE_TAG",
|
|
10
10
|
"imageDigestTodo": "The top-level image names the forthcoming exe-os build and receives its digest after publication. Independently released components, including dashboard, retain verified digest pins; stack publication validates every service pin.",
|
|
11
11
|
"components": {
|
|
@@ -110,5 +110,5 @@
|
|
|
110
110
|
},
|
|
111
111
|
"deploymentScope": "customer",
|
|
112
112
|
"highGhostStack": "0.9.9",
|
|
113
|
-
"sourceVersion": "0.9.
|
|
113
|
+
"sourceVersion": "0.9.402"
|
|
114
114
|
}
|