@askexenow/exe-os 0.9.411 → 0.9.413
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/delivery/catalog.json +29 -38
- package/deploy/compose/.env.customer.example +5 -5
- package/deploy/compose/.env.default +4 -4
- package/deploy/compose/.env.example +5 -5
- package/deploy/compose/docker-compose.yml +1 -1
- package/deploy/stack-manifests/v0.9.json +263 -2
- 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 +39 -14
- package/dist/bin/verify-stack.js +1 -1
- package/dist/bin/vps-health-gate.js +1 -1
- package/dist/build-info.json +3 -3
- package/dist/build-manifest.json +46 -46
- package/dist/{chunk-WC44PNZU.js → chunk-5DLZJ3MY.js} +1 -1
- package/dist/{chunk-HWP3WCLC.js → chunk-OPG237ZQ.js} +154 -50
- package/dist/{chunk-WHUQ44F2.js → chunk-RIKFXHLE.js} +246 -30
- package/dist/{chunk-DRHTRVDT.js → chunk-VBYSAQJD.js} +1 -1
- package/dist/{chunk-54STF27U.js → chunk-W3ABSZ6G.js} +1 -1
- package/dist/hooks/manifest.json +1 -1
- package/dist/lib/registry-proxy.js +1 -1
- package/dist/{stack-generate-manifest-SU6OFFY7.js → stack-generate-manifest-MVJDTU4F.js} +11 -35
- package/dist/{stack-promote-MJF436JD.js → stack-promote-BMGEY6SQ.js} +2 -2
- package/dist/{stack-release-S37R57XC.js → stack-release-64UJ6Y4W.js} +15 -32
- package/dist/{stack-update-XXDRKGGR.js → stack-update-EBATTQPP.js} +3 -1
- package/package.json +9 -4
- package/release-notes.json +24 -53
- package/stack.release.json +5 -5
|
@@ -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-5DLZJ3MY.js";
|
|
5
|
+
import "./chunk-RIKFXHLE.js";
|
|
6
6
|
import "./chunk-EC5H53YD.js";
|
|
7
7
|
import {
|
|
8
8
|
assertPreflightGate,
|
|
@@ -282,6 +282,16 @@ var STACK_RELEASE_REPO_CONFIGS = Object.freeze([
|
|
|
282
282
|
releaseWorkflow: "release-stack-image.yml",
|
|
283
283
|
simpleTag: true,
|
|
284
284
|
defaultBranch: "main"
|
|
285
|
+
},
|
|
286
|
+
{
|
|
287
|
+
serviceKey: "dashboard",
|
|
288
|
+
manifestServiceKey: "dashboard",
|
|
289
|
+
ghRepo: "AskExe/exe-dashboard",
|
|
290
|
+
localDir: "exe-dashboard",
|
|
291
|
+
imageName: "update.askexe.com/askexe/exe-dashboard",
|
|
292
|
+
releaseWorkflow: "release-dashboard-image.yml",
|
|
293
|
+
simpleTag: true,
|
|
294
|
+
defaultBranch: "main"
|
|
285
295
|
}
|
|
286
296
|
]);
|
|
287
297
|
var STACK_RECONCILE_APP_IMAGE_REPOS = Object.freeze([
|
|
@@ -291,37 +301,10 @@ var STACK_RECONCILE_APP_IMAGE_REPOS = Object.freeze([
|
|
|
291
301
|
imageName: "update.askexe.com/askexe/exe-auth",
|
|
292
302
|
ghRepo: "AskExe/exe-auth"
|
|
293
303
|
},
|
|
294
|
-
//
|
|
295
|
-
// G6's reconcile classified an unstamped dashboard image as "no expected
|
|
296
|
-
// source repo mapped here" (third-party, informational), exactly the false
|
|
297
|
-
// pass the "unstamped-third-party" distinction exists to avoid for images
|
|
298
|
-
// this repo family DOES build.
|
|
299
|
-
//
|
|
300
|
-
// 🔴 THE REPO HERE IS THE REPO THE IMAGE IS BUILT IN, NOT THE ONE THAT WILL
|
|
301
|
-
// EVENTUALLY OWN IT. G6 compares this value against the image's org.exe.repo
|
|
302
|
-
// label, which the shared release lane stamps with the repository the build
|
|
303
|
-
// actually ran in. exe-dashboard is still built from `dashboard-page/` INSIDE
|
|
304
|
-
// AskExe/exe-os (.github/workflows/release-dashboard-image.yml passes
|
|
305
|
-
// `context: dashboard-page`); AskExe/exe-dashboard exists but its history
|
|
306
|
-
// extraction is unfinished and nothing is built there yet. The real published
|
|
307
|
-
// ghcr.io/askexe/exe-dashboard:v0.9.382 carries org.exe.repo=AskExe/exe-os
|
|
308
|
-
// (recorded verbatim in release-service.yml's G2 arming note), so naming the
|
|
309
|
-
// destination repo here turns every correctly-stamped dashboard release into
|
|
310
|
-
// a "wrong-repo image (bug 218b10e4 class)" failure — and simultaneously
|
|
311
|
-
// makes that signal useless for the one service it would be reporting on.
|
|
312
|
-
//
|
|
313
|
-
// release-contract-services.mjs's `ghRepo: "AskExe/exe-dashboard"` is a
|
|
314
|
-
// different field with a different meaning: it names the repo that OWNS the
|
|
315
|
-
// service in the migration table. Copying it into this provenance map is how
|
|
316
|
-
// the wrong value got here.
|
|
317
|
-
//
|
|
318
|
-
// When the extraction completes, the lane's `context` flips to `.` and moves
|
|
319
|
-
// to AskExe/exe-dashboard; flip this with it. A test in
|
|
320
|
-
// tests/scripts/image-provenance.test.ts reads that `context` and fails if
|
|
321
|
-
// the two disagree, so this cannot drift silently a second time.
|
|
304
|
+
// Current dashboard pins are published by the standalone repository.
|
|
322
305
|
{
|
|
323
306
|
imageName: "update.askexe.com/askexe/exe-dashboard",
|
|
324
|
-
ghRepo: "AskExe/exe-
|
|
307
|
+
ghRepo: "AskExe/exe-dashboard"
|
|
325
308
|
}
|
|
326
309
|
]);
|
|
327
310
|
|
|
@@ -2028,7 +2011,7 @@ async function warmProxyCache(imageRef) {
|
|
|
2028
2011
|
async function resolveImageGitShaLabel(ref, dryRun) {
|
|
2029
2012
|
if (!ref || dryRun) return void 0;
|
|
2030
2013
|
try {
|
|
2031
|
-
const { readProvenanceLabels } = await import("./stack-generate-manifest-
|
|
2014
|
+
const { readProvenanceLabels } = await import("./stack-generate-manifest-MVJDTU4F.js");
|
|
2032
2015
|
const labels = await readProvenanceLabels(ref);
|
|
2033
2016
|
return labels["org.exe.git_sha"] ?? labels["org.opencontainers.image.revision"];
|
|
2034
2017
|
} catch (err) {
|
|
@@ -97,6 +97,7 @@ import {
|
|
|
97
97
|
printVolumeCleanupResult,
|
|
98
98
|
readCurrentStackVersion,
|
|
99
99
|
readRetainedComposeFiles,
|
|
100
|
+
readStagedComposeTemplate,
|
|
100
101
|
reconcileSsoEdgeConfigDelivery,
|
|
101
102
|
reconcileStackLockFromContainers,
|
|
102
103
|
removeDanglingVolumes,
|
|
@@ -138,7 +139,7 @@ import {
|
|
|
138
139
|
waitForHttpOk,
|
|
139
140
|
warnUnmanagedManifestServices,
|
|
140
141
|
withStackUpdateOperationLock
|
|
141
|
-
} from "./chunk-
|
|
142
|
+
} from "./chunk-RIKFXHLE.js";
|
|
142
143
|
import "./chunk-EC5H53YD.js";
|
|
143
144
|
import "./chunk-YYRI2AGK.js";
|
|
144
145
|
import "./chunk-L25OAFOU.js";
|
|
@@ -250,6 +251,7 @@ export {
|
|
|
250
251
|
printVolumeCleanupResult,
|
|
251
252
|
readCurrentStackVersion,
|
|
252
253
|
readRetainedComposeFiles,
|
|
254
|
+
readStagedComposeTemplate,
|
|
253
255
|
reconcileSsoEdgeConfigDelivery,
|
|
254
256
|
reconcileStackLockFromContainers,
|
|
255
257
|
removeDanglingVolumes,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@askexenow/exe-os",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.413",
|
|
4
4
|
"description": "AI employee operating system — persistent memory, task management, and multi-agent coordination for Claude Code.",
|
|
5
5
|
"license": "SEE LICENSE IN LICENSE",
|
|
6
6
|
"type": "module",
|
|
@@ -91,8 +91,12 @@
|
|
|
91
91
|
"ip-address": "^10.3.1",
|
|
92
92
|
"nanoid": "^5.1.16",
|
|
93
93
|
"picomatch": "^4.0.4",
|
|
94
|
-
"sharp": "^0.35.
|
|
95
|
-
"undici": "^6.
|
|
94
|
+
"sharp": "^0.35.5",
|
|
95
|
+
"undici": "^6.28.1",
|
|
96
|
+
"@grpc/grpc-js": "^1.14.5",
|
|
97
|
+
"simple-git": "^4.0.2",
|
|
98
|
+
"proxy-addr": "^2.0.8",
|
|
99
|
+
"brace-expansion": "^5.0.11",
|
|
96
100
|
"esbuild": ">=0.28.1",
|
|
97
101
|
"hono": ">=4.12.25",
|
|
98
102
|
"@opentelemetry/core": ">=2.8.0",
|
|
@@ -201,7 +205,7 @@
|
|
|
201
205
|
"@aws-sdk/client-s3": "^3.1052.0",
|
|
202
206
|
"@aws-sdk/s3-request-presigner": "^3.1052.0",
|
|
203
207
|
"@libsql/client": "^0.14.0",
|
|
204
|
-
"@modelcontextprotocol/sdk": "^1.
|
|
208
|
+
"@modelcontextprotocol/sdk": "^1.31.0",
|
|
205
209
|
"@opentelemetry/api": "^1.9.1",
|
|
206
210
|
"@opentelemetry/sdk-node": "^0.219.0",
|
|
207
211
|
"@opentelemetry/sdk-trace-base": "^2.8.0",
|
|
@@ -242,6 +246,7 @@
|
|
|
242
246
|
},
|
|
243
247
|
"optionalDependencies": {
|
|
244
248
|
"keytar": "^7.9.0",
|
|
249
|
+
"sharp": "^0.35.5",
|
|
245
250
|
"@whiskeysockets/baileys": "^7.0.0-rc12"
|
|
246
251
|
}
|
|
247
252
|
}
|
package/release-notes.json
CHANGED
|
@@ -1,35 +1,33 @@
|
|
|
1
1
|
{
|
|
2
|
-
"current": "0.9.
|
|
2
|
+
"current": "0.9.413",
|
|
3
3
|
"notes": {
|
|
4
|
-
"0.9.
|
|
5
|
-
"version": "0.9.
|
|
6
|
-
"date": "2026-10-
|
|
7
|
-
"features": [
|
|
8
|
-
|
|
9
|
-
"
|
|
4
|
+
"0.9.413": {
|
|
5
|
+
"version": "0.9.413",
|
|
6
|
+
"date": "2026-10-14",
|
|
7
|
+
"features": [],
|
|
8
|
+
"fixes": [
|
|
9
|
+
"use public HTTPS registry URLs in package-lock"
|
|
10
10
|
],
|
|
11
|
+
"security": [
|
|
12
|
+
"update package-lock and Docker runtime security packages"
|
|
13
|
+
],
|
|
14
|
+
"other": [],
|
|
15
|
+
"migration_notes": []
|
|
16
|
+
},
|
|
17
|
+
"0.9.412": {
|
|
18
|
+
"version": "0.9.412",
|
|
19
|
+
"date": "2026-10-14",
|
|
20
|
+
"features": [],
|
|
11
21
|
"fixes": [
|
|
12
|
-
"
|
|
13
|
-
"
|
|
14
|
-
"
|
|
15
|
-
"
|
|
16
|
-
"
|
|
17
|
-
"
|
|
18
|
-
"ledger-tamper and data-store guard false positives (single-quoted literals, cd-relative rm targets) (#3956)",
|
|
19
|
-
"run backup verification off the daemon event loop (#3959)",
|
|
20
|
-
"retention no longer depends on a backup run completing; torn manifests are not verified (#3955)",
|
|
21
|
-
"destructive find over an ancestor of the audit dir bypassed ledger-tamper (#3957)",
|
|
22
|
-
"retire code-context sync + stream blob pulls to stop CPU-limit kills (#3947)",
|
|
23
|
-
"stop syncing code-context indexes to Exe Cloud (#3948)",
|
|
24
|
-
"purge two-level dispatch residue — managers decompose, coordinator dispatches (bug 23fba96c) (#3044)",
|
|
25
|
-
"walker credits destructuring/spread getter reads (bug 542082b2) (#3946)",
|
|
26
|
-
"treat down serving probe as degraded in mcp_ping status (bug 5c7c2e7b residual) (#3943)"
|
|
22
|
+
"Stack update previews leave existing configuration, service selection and monitor pairing untouched, including rejected signatures and deployment checks.",
|
|
23
|
+
"Existing embeddings-off installations migrate the shipped v0.9.311 worker fallback to the current empty image slot after confirming the worker is neither enabled nor present. Digest and signed-manifest gates remain mandatory; already migrated installations are unchanged.",
|
|
24
|
+
"legacy stack upgrades derive the required telemetry image setting from the signed manifest; multi-platform registry checks allow up to two minutes per attempt and validate Docker 29 descriptor platforms",
|
|
25
|
+
"The accepted monitoring-agent image uses its verified native health probe, allowing legacy upgrades to complete without disabling monitoring checks.",
|
|
26
|
+
"ERP admission verification completes the state-protected Auth browser handoff and validates the resulting native session identity; foreign redirects, insecure callbacks and redirect loops remain fatal.",
|
|
27
|
+
"Rollback to the legacy monitoring hub restores its verified data-volume owner before restart, preserving its users and monitored systems."
|
|
27
28
|
],
|
|
28
29
|
"security": [],
|
|
29
|
-
"other": [
|
|
30
|
-
"release: v0.9.411 (#3967)",
|
|
31
|
-
"version-control local CI npm registry plumbing + DOWN-tick alerting (bug 67c9ac1d) (#3951)"
|
|
32
|
-
],
|
|
30
|
+
"other": [],
|
|
33
31
|
"migration_notes": []
|
|
34
32
|
},
|
|
35
33
|
"0.9.371": {
|
|
@@ -72,33 +70,6 @@
|
|
|
72
70
|
"security": [],
|
|
73
71
|
"other": [],
|
|
74
72
|
"migration_notes": []
|
|
75
|
-
},
|
|
76
|
-
"0.9.368": {
|
|
77
|
-
"version": "0.9.368",
|
|
78
|
-
"date": "2026-08-14",
|
|
79
|
-
"features": [
|
|
80
|
-
"approve/deny on a privileged action now actually decides whether it runs — previously the prompt was cosmetic: no server handler existed, the safety classifier had no caller, and the wait flag was ignored (exe-build #165)",
|
|
81
|
-
"dashboard gains a Drive tab — an admin lens over Exe Drive (#709)",
|
|
82
|
-
"delivery truth: the system now tracks the gap between merged and actually delivered, with liveness checked on a clock rather than assumed (#707)",
|
|
83
|
-
"the watchdog now counts the self-heals it declines to make, so a restart it chose NOT to perform is visible instead of silent (#708)"
|
|
84
|
-
],
|
|
85
|
-
"fixes": [
|
|
86
|
-
"cloud sync no longer starves every stage after the memory push: a deferred slice used to return early with no signal, so the daemon idled a full interval and the fifteen later stages — including DB backup — never ran, while every run reported success (#715)",
|
|
87
|
-
"closing a bug now genuinely requires a verification artifact — the gate existed and was correct, but was never reachable from the client everyone uses, so nothing was ever refused (#710)",
|
|
88
|
-
"behavior-injection truncation is loud instead of silent: agents were storing corrections that were dropped at spawn with no warning, so lessons appeared saved and were never applied (#701)",
|
|
89
|
-
"the installer refuses to run from a linked git worktree, detected structurally, so a temp checkout can no longer re-point global hooks at a directory that will not outlive it (#706)",
|
|
90
|
-
"create_task no longer reports success for a dispatch nobody received (#705)",
|
|
91
|
-
"Codex sessions launch again — we stopped pinning a flag OpenAI's CLI removed, and now feature-detect its flag surface instead (#704)",
|
|
92
|
-
"PreToolUse worktree isolation was inert inside .claude/worktrees (#712)",
|
|
93
|
-
"stopped shipping the crashlooping exe-monitor v0.9.5 build (#711)",
|
|
94
|
-
"admin bug updates: evidence-only updates no longer 400, corrections reach upstream, and oversize text is refused rather than silently truncated (#713, #714)",
|
|
95
|
-
"the dashboard image can serve askexe.com — the one domain it never could (#703)",
|
|
96
|
-
"release gate asserts required contexts off the x64 lane, so a release can no longer deadlock waiting on a runner it is occupying (#700)",
|
|
97
|
-
"device-token chat persists instead of losing every message: device identities carried no org, so writes were refused; the connection now resolves a real tenant or is refused outright (exe-build #164, #166)"
|
|
98
|
-
],
|
|
99
|
-
"security": [],
|
|
100
|
-
"other": [],
|
|
101
|
-
"migration_notes": []
|
|
102
73
|
}
|
|
103
74
|
}
|
|
104
75
|
}
|
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.413",
|
|
8
|
+
"image": "ghcr.io/askexe/exe-os:v0.9.413",
|
|
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": {
|
|
@@ -16,11 +16,11 @@
|
|
|
16
16
|
"note": "Bug 81ca8903: was `ghcr.io/askexe/exe-erp:v0.9.312` \u2014 a tag that has never existed. ERP is versioned on its own 0.x line; v0.9.312 is an EXE-OS version number that bumpVersions() stamped onto this component because rebaseImageTag() rebased every tag-only component image to the exe-os release version regardless of which repo built it. That rebase is now scoped (same commit) so it can no longer forge tags for independently-versioned components. Repinned to the real, current ERP release v0.3.4, digest resolved live from ghcr.io/askexe/exe-erp on 2026-09-01. Digest-pinning is also what makes this entry self-defending: rebaseImageTag() returns any `@sha256:`-bearing ref untouched. Prior intent for the record (bug 790794e8) was v0.2.0-final8, the first ERP image shipping the realtime/socketio entrypoint (exe-erp PR #15); final3/final7 crash-looped exe-erp-websocket on a missing socketio.js. v0.3.4 supersedes it."
|
|
17
17
|
},
|
|
18
18
|
"dashboard": {
|
|
19
|
-
"image": "ghcr.io/askexe/exe-dashboard:v0.9.
|
|
19
|
+
"image": "ghcr.io/askexe/exe-dashboard:v0.9.400@sha256:d6963463d623f2e07b8b1b6cdaa5662b8a7219aa237cd315cfbabcad84f06ee1",
|
|
20
20
|
"env": "DASHBOARD_IMAGE_TAG",
|
|
21
21
|
"composeService": "exe-dashboard",
|
|
22
22
|
"versionLockstep": false,
|
|
23
|
-
"note": "
|
|
23
|
+
"note": "Independently published by AskExe/exe-dashboard from 0e389f1acf35b34c648a846abdc4bcca4d2cd816. Matches the verified v0.9.400 customer manifest pin; source mappings move atomically with this digest."
|
|
24
24
|
},
|
|
25
25
|
"exe-db": {
|
|
26
26
|
"image": "pgvector/pgvector:0.8.0-pg16@sha256:a132765ec351c65111b5b675928a3a0515a466a40f97277329db8b8209ad8bc9",
|
|
@@ -110,5 +110,5 @@
|
|
|
110
110
|
},
|
|
111
111
|
"deploymentScope": "customer",
|
|
112
112
|
"highGhostStack": "0.9.9",
|
|
113
|
-
"sourceVersion": "0.9.
|
|
113
|
+
"sourceVersion": "0.9.413"
|
|
114
114
|
}
|