@askexenow/exe-os 0.9.398 → 0.9.399

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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 1,
3
- "verified_at": "2026-09-24T11:52:34.443Z",
4
- "manifest_sha256": "7b8c54c8ce8e0172d6d6311bc731e12b4772e56462e20a073bc8425913ca7274",
5
- "package_version": "0.9.398"
3
+ "verified_at": "2026-09-24T13:34:02.618Z",
4
+ "manifest_sha256": "0641c145777ca52c128a84da481fd2ead5656d1bece22ab281df880a71b31a40",
5
+ "package_version": "0.9.399"
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-IPOLLLJH.js");
801
+ const { parseReleaseArgs, runStackRelease } = await import("../stack-release-VA2YEHFL.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-NV2ZQEVL.js");
805
+ const { runStackPromoteCli } = await import("../stack-promote-IULD63IF.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-NWBAQUC6.js");
808
+ const { runStackGenerateManifestCli } = await import("../stack-generate-manifest-ZSRLWHYI.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");
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  registryProxyOptionsFromEnv,
4
4
  runRegistryProxy
5
- } from "../chunk-XQH5BKEC.js";
5
+ } from "../chunk-HMC5FHIJ.js";
6
6
  import {
7
7
  isMainModule
8
8
  } from "../chunk-6Y4B3QF6.js";
@@ -47,7 +47,7 @@ import {
47
47
  verifyManifestImagesAvailable,
48
48
  warnUnmanagedManifestServices,
49
49
  withStackUpdateOperationLock
50
- } from "../chunk-WHQADJV7.js";
50
+ } from "../chunk-D2L47SAE.js";
51
51
  import "../chunk-EC5H53YD.js";
52
52
  import {
53
53
  runVerifyStack
@@ -63,7 +63,7 @@ import {
63
63
  import {
64
64
  logResult,
65
65
  runHealthGate
66
- } from "../chunk-UPGKO5UD.js";
66
+ } from "../chunk-U2L6NZ2E.js";
67
67
  import "../chunk-L25OAFOU.js";
68
68
  import "../chunk-RT57D7C4.js";
69
69
  import "../chunk-FTZET5YX.js";
@@ -8,7 +8,7 @@ import {
8
8
  logResult,
9
9
  main,
10
10
  runHealthGate
11
- } from "../chunk-UPGKO5UD.js";
11
+ } from "../chunk-U2L6NZ2E.js";
12
12
  import "../chunk-MLKGABMK.js";
13
13
  export {
14
14
  checkCRM,
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 2,
3
- "generated_at": "2026-09-24T11:52:34.381Z",
3
+ "generated_at": "2026-09-24T13:34:02.549Z",
4
4
  "files": [
5
5
  {
6
6
  "path": "active-agent-5DC75ZP3.js",
@@ -179,7 +179,7 @@
179
179
  },
180
180
  {
181
181
  "path": "bin/cli.js",
182
- "sha256": "b77dc63e36653abf9a02ea0ea4022b64cc65b129a283ce43c074c4df145b2628",
182
+ "sha256": "126dc845c65374fe949027c51dafc318d3aef3f46b9add8be441eb2bd28afa29",
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": "1e2fe55179d669fde86a7c9e96b56a4eef7545b77a53dcf94ad1d02dd3a46970",
527
+ "sha256": "ef7f87a4159c34e04eb402448fe00acf341988c84d9a0acc91447d9a3b80f297",
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": "1cfee44bb87f820cacf84d0498124785e492dd8fccf44d0e4dd474bc84accf54",
552
+ "sha256": "210be160ba3bce18fdbce55661bab94e24cfc8b8d7beca65318b4bbdbe104f4c",
553
553
  "bytes": 131487
554
554
  },
555
555
  {
@@ -569,7 +569,7 @@
569
569
  },
570
570
  {
571
571
  "path": "bin/vps-health-gate.js",
572
- "sha256": "c58daf835e7bc741c64f1d7bf1f0a84c2de09c86ec67a083d9c7eeb5b1a5a39c",
572
+ "sha256": "76697c844cf1215d82a207802cfcd91e0bc83d24a2cd4e4ec9eba76724eef108",
573
573
  "bytes": 333
574
574
  },
575
575
  {
@@ -1007,11 +1007,6 @@
1007
1007
  "sha256": "0429e46b5f42871f6a94700f559468dd5775c0bb204d5c720f6bc15ca4cc924b",
1008
1008
  "bytes": 176
1009
1009
  },
1010
- {
1011
- "path": "chunk-CBLI4ANF.js",
1012
- "sha256": "361fca0086b36b4945f23793f1138b8a09d18c18bd8d478d922fafd09b2a207e",
1013
- "bytes": 3766
1014
- },
1015
1010
  {
1016
1011
  "path": "chunk-CBPNZFSU.js",
1017
1012
  "sha256": "cbd3cf6d4db00f17cd9c7dc4419ab837738d3e22dfa1554201f33ce6ccf9936d",
@@ -1072,6 +1067,11 @@
1072
1067
  "sha256": "29a6acbbaa627ae4d7852dd16a33f341809f3d82940b40c67c35d39d99fdf2c4",
1073
1068
  "bytes": 1090
1074
1069
  },
1070
+ {
1071
+ "path": "chunk-D2L47SAE.js",
1072
+ "sha256": "0430ed5601d2d38ec8b25824516e53625dc4d21b0835c294bb1753ca3ebe534d",
1073
+ "bytes": 264545
1074
+ },
1075
1075
  {
1076
1076
  "path": "chunk-DKD6JKIQ.js",
1077
1077
  "sha256": "e344368afae46f4f8059618d353fa907cbf3e1d72133d1d325b40e476192d057",
@@ -1242,6 +1242,11 @@
1242
1242
  "sha256": "0e8678ecd10db44714ef9a25fcab116b0cb3f86b6de9e384ac5bf2effb0dc3c0",
1243
1243
  "bytes": 2405
1244
1244
  },
1245
+ {
1246
+ "path": "chunk-HMC5FHIJ.js",
1247
+ "sha256": "ac7f86432e2314d38e58dd96113855765114ef007ba97d7beb5643ed9e024b45",
1248
+ "bytes": 44776
1249
+ },
1245
1250
  {
1246
1251
  "path": "chunk-HME6ITKV.js",
1247
1252
  "sha256": "d820c2d874d6841b5c9c1186ba98c24aa25d559b9be05a29ae2373e7f70e7960",
@@ -1837,6 +1842,11 @@
1837
1842
  "sha256": "e8225781fb28b322cb141fa15ddd198ab2b7c507a662764722cf3b65f2201c8f",
1838
1843
  "bytes": 34017
1839
1844
  },
1845
+ {
1846
+ "path": "chunk-U2L6NZ2E.js",
1847
+ "sha256": "14a60b6adfac48dd28c173fada3e2297b093a422c3a40cd642e68ffc6530ee93",
1848
+ "bytes": 7587
1849
+ },
1840
1850
  {
1841
1851
  "path": "chunk-UAPWTGRP.js",
1842
1852
  "sha256": "21f3d1f0da3b0d7030edcc3ed1341223fc24f0df14b683c9c23e7d374484726d",
@@ -1877,11 +1887,6 @@
1877
1887
  "sha256": "d3cadd12eb766d34de74356f826811799682297bf5312bebe86aa91064ffa73e",
1878
1888
  "bytes": 7304
1879
1889
  },
1880
- {
1881
- "path": "chunk-UPGKO5UD.js",
1882
- "sha256": "f61c6df45d6b59d3b9c2490fe0b632b56d8aec3448590796716785b193a787d9",
1883
- "bytes": 7587
1884
- },
1885
1890
  {
1886
1891
  "path": "chunk-UQDCXE5D.js",
1887
1892
  "sha256": "74fe9e9ec90657d5c47300b1b42f249b0e5742eaaab48c8446d1b4d602b5c609",
@@ -1917,6 +1922,11 @@
1917
1922
  "sha256": "788270b6657fdd208ecb5fa9cb6b5156e1ae86295058f976edb144ecedcb88fb",
1918
1923
  "bytes": 7321
1919
1924
  },
1925
+ {
1926
+ "path": "chunk-VFFQHEMC.js",
1927
+ "sha256": "99a17a341cc3d2ce64c9d1cbe321d5d73491aaeed2469cc4a6fdf29863eada73",
1928
+ "bytes": 3766
1929
+ },
1920
1930
  {
1921
1931
  "path": "chunk-VFVF3FHG.js",
1922
1932
  "sha256": "52b2cd3712889eccc11d34dfa4bab3ac38a1e6985c1982d0975456c58c89cba6",
@@ -1982,11 +1992,6 @@
1982
1992
  "sha256": "4a905397d309c73ed4ad5d1ec488309541be3eec2fc6021d275f433ca92cc7a9",
1983
1993
  "bytes": 2265
1984
1994
  },
1985
- {
1986
- "path": "chunk-WHQADJV7.js",
1987
- "sha256": "446ba9ab30ceea004e1a3dad1b636c5aed85d4973f7dc380b38fb6708e159b4a",
1988
- "bytes": 261909
1989
- },
1990
1995
  {
1991
1996
  "path": "chunk-WT4RI36X.js",
1992
1997
  "sha256": "7ce4fd5dee79504398f6549a7fadeceafaadaea2cd94ef9bcc310280306147c6",
@@ -2022,11 +2027,6 @@
2022
2027
  "sha256": "6fc117949d9d045871820e93e789e377a928ac69b031ecb40fd000516567a795",
2023
2028
  "bytes": 1571
2024
2029
  },
2025
- {
2026
- "path": "chunk-XQH5BKEC.js",
2027
- "sha256": "5bea4844691d58c9f52bec5f4ca86fdc53107ef09890b07042fccb598aa82fee",
2028
- "bytes": 44776
2029
- },
2030
2030
  {
2031
2031
  "path": "chunk-YQ7V5UGG.js",
2032
2032
  "sha256": "5bfdc4401ae0a9ed15c7124861214dba3ba3be58cca81ffab4dc167c3043d2e5",
@@ -2579,7 +2579,7 @@
2579
2579
  },
2580
2580
  {
2581
2581
  "path": "hooks/manifest.json",
2582
- "sha256": "27f7225ea6049da0da758b157422fa47933a321ff9b512d9088ec0d30ed00c1a",
2582
+ "sha256": "0ad3b5ab94638e0110791448a12e4b6079e248d99976ba200ee1d148340c873c",
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": "e1ca2eb0676da6e017f7e083753c11e252dbe4ae4d2dbede506a5ddf04dd1976",
2887
+ "sha256": "180512d6cb7cfa3b7c3e512ac755c038f7f245a291aa1f26b4e8186a69ed46fc",
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-NWBAQUC6.js",
3477
- "sha256": "6947112c61d95363a5d30ad44dbc0234dd157836875da1454f7d898c906cdd8b",
3476
+ "path": "stack-generate-manifest-ZSRLWHYI.js",
3477
+ "sha256": "d0046b964d66f6f434db5160cb6ed39fefea401a3f2b09212f3974fcc7cd4ba8",
3478
3478
  "bytes": 56960
3479
3479
  },
3480
3480
  {
@@ -3483,19 +3483,19 @@
3483
3483
  "bytes": 4761
3484
3484
  },
3485
3485
  {
3486
- "path": "stack-promote-NV2ZQEVL.js",
3487
- "sha256": "40e091a1ab242432060b6c1d8e9f048d3d197522b0d936d8a87a496a4b943c31",
3486
+ "path": "stack-promote-IULD63IF.js",
3487
+ "sha256": "e0af957eac14bf04f434d67693e15381ddc83eb89e1a6a1fa38dac3b4558a731",
3488
3488
  "bytes": 7425
3489
3489
  },
3490
3490
  {
3491
- "path": "stack-release-IPOLLLJH.js",
3492
- "sha256": "ca088b7d663ca543a10a38455d8de41c193b624c2027136f7d05aac99447989d",
3491
+ "path": "stack-release-VA2YEHFL.js",
3492
+ "sha256": "b5a2c2b004bbe71ee5b56ba6a00229a6e19e15d1809fc109ab604107ab63137a",
3493
3493
  "bytes": 117404
3494
3494
  },
3495
3495
  {
3496
- "path": "stack-update-5LT2U7IP.js",
3497
- "sha256": "9c823b5e0204438e868a7123bdbc69988e0fdb58f14de742007f727884b2cf75",
3498
- "bytes": 7863
3496
+ "path": "stack-update-KDUPWDNR.js",
3497
+ "sha256": "5e419b8e379e7bd15e8d8b4e1ef4dce328c8a8d3e45e9276519584dc120cba9a",
3498
+ "bytes": 7921
3499
3499
  },
3500
3500
  {
3501
3501
  "path": "stalled-dispatch-escalation-MHLYH2PT.js",
@@ -276,6 +276,40 @@ function assessRetainedHealthAfter(before, after) {
276
276
  }
277
277
  return [...new Set(failures)];
278
278
  }
279
+ async function settleRetainedCrmEdgeHealth(before, initial, capture, pause = (milliseconds) => new Promise((resolve) => setTimeout(resolve, milliseconds)), now = () => performance.now()) {
280
+ const edge = "exe-sso-edge";
281
+ const prior = before.containers.get(edge);
282
+ let current = initial;
283
+ const maySettle = (snapshot) => {
284
+ const observed = snapshot.get(edge);
285
+ const regressions = assessRetainedHealthAfter(before, snapshot);
286
+ return !before.critical.has(edge) && !!prior?.id && prior.health === "healthy" && retainedContainerIsHealthy(prior) && observed?.id === prior.id && observed.state === "running" && observed.health === "unhealthy" && (prior.restartCount === null || observed.restartCount === prior.restartCount) && regressions.length === 1 && regressions[0] === edge;
287
+ };
288
+ if (!maySettle(current)) return current;
289
+ if (!prior) return current;
290
+ const deadline = now() + 12e4;
291
+ while (now() < deadline) {
292
+ await pause(Math.min(5e3, deadline - now()));
293
+ const remainingMs = deadline - now();
294
+ if (remainingMs <= 0) return current;
295
+ current = capture(remainingMs);
296
+ const observed = current.get(edge);
297
+ if (observed && observed.id !== prior.id)
298
+ throw new Error("--retain-compose SSO edge identity changed during CRM health recovery");
299
+ if (observed && prior.restartCount !== null && observed.restartCount !== prior.restartCount) throw new Error("--retain-compose SSO edge restarted during CRM health recovery");
300
+ if (observed && observed.health !== "healthy" && observed.health !== "unhealthy")
301
+ throw new Error("--retain-compose SSO edge health unobservable during CRM recovery");
302
+ if (now() >= deadline)
303
+ throw new Error("--retain-compose SSO edge health recovery timed out");
304
+ const regressions = assessRetainedHealthAfter(before, current);
305
+ if (regressions.length === 0) {
306
+ const recovered = current.get(edge);
307
+ if (recovered && recovered.id === prior.id && recovered.state === "running" && recovered.health === "healthy" && (prior.restartCount === null || recovered.restartCount === prior.restartCount)) return current;
308
+ }
309
+ if (!maySettle(current)) return current;
310
+ }
311
+ return current;
312
+ }
279
313
 
280
314
  // src/lib/stack-lock-derive.ts
281
315
  import { spawnSync } from "child_process";
@@ -4608,9 +4642,11 @@ Push the missing image(s) to the registry, or re-run with --break-glass <reason>
4608
4642
  }
4609
4643
  }
4610
4644
  if (retainedHealthBaseline) {
4611
- const after = parseRetainedContainerHealth(
4612
- (options.composePsCapture ?? defaultComposePsCapture)(composeArgs)
4645
+ const capture = (timeoutMs) => parseRetainedContainerHealth(
4646
+ (options.composePsCapture ?? defaultComposePsCapture)(composeArgs, timeoutMs)
4613
4647
  );
4648
+ const initial = capture();
4649
+ const after = Object.keys(plan.release.services).length === 1 && Object.hasOwn(plan.release.services, "crm") ? await settleRetainedCrmEdgeHealth(retainedHealthBaseline, initial, capture) : initial;
4614
4650
  const regressions = assessRetainedHealthAfter(retainedHealthBaseline, after);
4615
4651
  if (regressions.length > 0) {
4616
4652
  throw new Error(`--retain-compose health regression after update: ${regressions.join(", ")}`);
@@ -5014,13 +5050,16 @@ async function verifyReleaseHealth(release, retries, delayMs, env, skipServices)
5014
5050
  await waitForHttpOk(service.healthUrl, retries, delayMs, serviceName, hostHeader);
5015
5051
  }
5016
5052
  }
5017
- var defaultComposePsCapture = (composeArgs) => {
5053
+ function boundedComposePsTimeoutMs(timeoutMs) {
5054
+ return Math.max(1, Math.floor(Math.min(2e4, timeoutMs ?? 2e4)));
5055
+ }
5056
+ var defaultComposePsCapture = (composeArgs, timeoutMs) => {
5018
5057
  let result;
5019
5058
  try {
5020
5059
  result = spawnSync2("docker", [...composeArgs, "ps", "--all", "--format", "json"], {
5021
5060
  encoding: "utf8",
5022
5061
  stdio: ["pipe", "pipe", "pipe"],
5023
- timeout: 2e4
5062
+ timeout: boundedComposePsTimeoutMs(timeoutMs)
5024
5063
  });
5025
5064
  } catch {
5026
5065
  return null;
@@ -5795,6 +5834,7 @@ export {
5795
5834
  expandEnvRefs,
5796
5835
  resolveHealthHost,
5797
5836
  verifyReleaseHealth,
5837
+ boundedComposePsTimeoutMs,
5798
5838
  listHostComposeServices,
5799
5839
  composePsYieldsRecords,
5800
5840
  assertRetainedComposeRunningService,
@@ -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-5LT2U7IP.js");
143
+ const { verifyStackManifestSignature } = await import("./stack-update-KDUPWDNR.js");
144
144
  try {
145
145
  verifyStackManifestSignature(manifest, publicKeyPem);
146
146
  } catch (err) {
@@ -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-5LT2U7IP.js");
215
+ const { rollbackStackUpdate, defaultStackPaths } = await import("./stack-update-KDUPWDNR.js");
216
216
  const paths = defaultStackPaths();
217
217
  await rollbackStackUpdate({
218
218
  manifestRef: paths.manifestRef,
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  canonicalizeStackManifest
3
- } from "./chunk-WHQADJV7.js";
3
+ } from "./chunk-D2L47SAE.js";
4
4
 
5
5
  // src/lib/stack-manifest-write.ts
6
6
  import { readFileSync, statSync, writeFileSync } from "fs";
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 1,
3
- "generatedAt": "2026-09-24T11:52:34.134Z",
3
+ "generatedAt": "2026-09-24T13:34:02.355Z",
4
4
  "hashes": {
5
5
  "bug-report-worker.js": "b9c58e3473028283cd80aa42f2aa845e39914a111b66c1fc268dc5f55d2a48de",
6
6
  "codex-stop-task-finalizer.js": "b7635164b675dd291f945373e7d59b112efdfd5bdeecd59f3126b2a797b9ed0c",
@@ -11,7 +11,7 @@ import {
11
11
  resolveRegistryProxyBuildIdentity,
12
12
  resolveStackManifestChannel,
13
13
  runRegistryProxy
14
- } from "../chunk-XQH5BKEC.js";
14
+ } from "../chunk-HMC5FHIJ.js";
15
15
  import "../chunk-MLKGABMK.js";
16
16
  export {
17
17
  SERVED_VERSION_PATH,
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  writeSignedStackManifest
4
- } from "./chunk-CBLI4ANF.js";
5
- import "./chunk-WHQADJV7.js";
4
+ } from "./chunk-VFFQHEMC.js";
5
+ import "./chunk-D2L47SAE.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-CBLI4ANF.js";
5
- import "./chunk-WHQADJV7.js";
4
+ } from "./chunk-VFFQHEMC.js";
5
+ import "./chunk-D2L47SAE.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-CBLI4ANF.js";
5
- import "./chunk-WHQADJV7.js";
4
+ } from "./chunk-VFFQHEMC.js";
5
+ import "./chunk-D2L47SAE.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-NWBAQUC6.js");
2031
+ const { readProvenanceLabels } = await import("./stack-generate-manifest-ZSRLWHYI.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) {
@@ -25,6 +25,7 @@ import {
25
25
  assertSignedManifestDeliveryGate,
26
26
  backupStackConfig,
27
27
  bootstrapStackHost,
28
+ boundedComposePsTimeoutMs,
28
29
  buildDefaultServiceSelection,
29
30
  buildMigrationComposeArgs,
30
31
  buildReleaseMigrationArgs,
@@ -132,7 +133,7 @@ import {
132
133
  waitForHttpOk,
133
134
  warnUnmanagedManifestServices,
134
135
  withStackUpdateOperationLock
135
- } from "./chunk-WHQADJV7.js";
136
+ } from "./chunk-D2L47SAE.js";
136
137
  import "./chunk-EC5H53YD.js";
137
138
  import "./chunk-YYRI2AGK.js";
138
139
  import "./chunk-L25OAFOU.js";
@@ -172,6 +173,7 @@ export {
172
173
  assertSignedManifestDeliveryGate,
173
174
  backupStackConfig,
174
175
  bootstrapStackHost,
176
+ boundedComposePsTimeoutMs,
175
177
  buildDefaultServiceSelection,
176
178
  buildMigrationComposeArgs,
177
179
  buildReleaseMigrationArgs,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@askexenow/exe-os",
3
- "version": "0.9.398",
3
+ "version": "0.9.399",
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",
@@ -1,44 +1,20 @@
1
1
  {
2
- "current": "0.9.398",
2
+ "current": "0.9.399",
3
3
  "notes": {
4
- "0.9.398": {
5
- "version": "0.9.398",
4
+ "0.9.399": {
5
+ "version": "0.9.399",
6
6
  "date": "2026-09-24",
7
- "features": [
8
- "detect drift in hand-duplicated cross-repo workflows (bug 0efe96d7) (#1377)",
9
- "cut the stack release automatically on drift (founder decision) (#1253)"
10
- ],
7
+ "features": [],
11
8
  "fixes": [
12
- "unlimited_employees gate contradicted a seat-holder's own employeeLimit (cbe83433) (#1525)",
13
- "fail loud on a broken bash oracle instead of passing vacuously (bug e9b8c3d5) (#1536)",
14
- "stop ledger-tamper guard from false-blocking read-only shells (#1529)",
15
- "capture close-guard evidence at fix-time, reuse it at close (#1267)",
16
- "mock-shape guard now detects a mock missing an export (bug 7342f6e1) (#1218)",
17
- "an unreadable event ledger is not an empty history (bug d11c5049) (#1327)",
18
- "seat confers the org's full plan on every axis, employees included (#1528)",
19
- "an unreadable history is not an empty history (bug d11c5049, D15) (#1316)",
20
- "an unreadable checkpoint is not an absent one (bug d11c5049, F1) (#1312)",
21
- "fail closed and say why when the guard cannot run (bug d11c5049) (#1288)",
22
- "assert parity with real commitPatchId/commitEffectHash in the 256-byte sweep (bug 6b66bd54) (#1532)",
23
- "a jobs.json that could not be read is not an empty registry (bug d11c5049) (#1296)",
24
- "a state file that could not be read is not an empty one (bug d11c5049) (#1293)",
25
- "stop taking three different answers from one 30-day token (bugs f855bcbe, 0aef30da, 14a57810, cbe83433) (#1276)",
26
- "batch the 256-byte patch-id sweep into ~7 subprocesses (bug 6b66bd54) (#1531)",
27
- "a failed read is not an ABSORBED verdict (bug d11c5049, D25) (#1310)",
28
- "only a read that SUCCEEDED may authorize a delete (bug d11c5049) (#1289)",
29
- "contain service switcher on mobile",
30
- "close double-side fail-open holes in the mock-effect walker (63e8dfeb, e929d83f) (#1498)",
31
- "merge detectors ask GitHub, not git ancestry (bug b83f8742) (#1495)"
9
+ "settle CRM-backed SSO edge health after retained update (#1544)",
10
+ "give each release-workspace repo its own git identity (#1541)",
11
+ "prune buildx docker-container builder cache, not just the default (bug 0172398e) (#1540)",
12
+ "--write-baseline refuses on an incomplete export-coverage scan (#1539)"
32
13
  ],
33
14
  "security": [],
34
15
  "other": [
35
- "release: v0.9.398 (#1538)",
36
- "release(stack): sign CRM 0.9.68 recovery canary 0.9.58 (#1537)",
37
- "release(stack): sign proxy verification recovery 0.9.57 (#1535)",
38
- "add fixed-source npm-only 0.9.397 publisher (#1534)",
39
- "Scope retained stack verification to delivered containers (#1533)",
40
- "sync mobile switcher to team page",
41
- "release: sign stack 0.9.56 proxy recovery canary"
16
+ "release: bump updater npm metadata to 0.9.399 (#1545)",
17
+ "ci-disk-reclaim install is two files, not one (#1543)"
42
18
  ],
43
19
  "migration_notes": []
44
20
  },
@@ -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.398",
8
- "image": "ghcr.io/askexe/exe-os:v0.9.398",
7
+ "version": "0.9.399",
8
+ "image": "ghcr.io/askexe/exe-os:v0.9.399",
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.398"
113
+ "sourceVersion": "0.9.399"
114
114
  }