@askexenow/exe-os 0.9.392 → 0.9.394
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/deploy/stack-manifests/v0.9.json +400 -1
- 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 +69 -17
- package/dist/bin/vps-health-gate.js +1 -1
- package/dist/build-manifest.json +34 -34
- package/dist/{chunk-33CHRORT.js → chunk-5OWHYOIF.js} +1 -1
- package/dist/{chunk-3SXU7KLW.js → chunk-DYFTZWG2.js} +227 -29
- package/dist/{chunk-TVSIS36M.js → chunk-PS77SULS.js} +1 -1
- package/dist/{chunk-PRCJG3PK.js → chunk-RLUDQYOA.js} +1 -1
- package/dist/hooks/manifest.json +1 -1
- package/dist/lib/registry-proxy.js +1 -1
- package/dist/{stack-generate-manifest-QWU7Q4MJ.js → stack-generate-manifest-H6LJQ2HV.js} +2 -2
- package/dist/{stack-promote-26RFMNSB.js → stack-promote-4EF7RNIV.js} +2 -2
- package/dist/{stack-release-7YHSLY7J.js → stack-release-YCNRPK6R.js} +3 -3
- package/dist/{stack-update-DTMW7GMW.js → stack-update-2F464W3N.js} +1 -1
- package/package.json +1 -1
- package/release-notes.json +15 -8
|
@@ -4909,11 +4909,410 @@
|
|
|
4909
4909
|
"composeSha256": "220b251375f372107e8d8d54a9c3e4ceab1f57aae80f4babf2933c3887532263",
|
|
4910
4910
|
"composeOverrideSha256": "af295ca2f75b85788416e4df51cab86d8b773bf4cafe6cf6df9c7c26b9a42d6d"
|
|
4911
4911
|
}
|
|
4912
|
+
},
|
|
4913
|
+
"0.9.53": {
|
|
4914
|
+
"version": "0.9.53",
|
|
4915
|
+
"releasedAt": "2026-09-23T21:55:18.488Z",
|
|
4916
|
+
"npmVersion": "0.9.393",
|
|
4917
|
+
"notes": "Dashboard-only Exe dogfood canary replacing unapplied 0.9.52: npm 0.9.393 scopes retained-Compose health to Dashboard, required core, and rendered dependencies while recording unchanged unrelated red containers and failing new regressions. From live stack 0.9.50, update only Dashboard to v0.9.392. Preserve CRM v0.9.66, Auth v0.6.10, and every other service pin. Signed live base and override Compose bytes are unchanged; no config assets are delivered. Public DEMO remains disabled pending separate CRM rollout.",
|
|
4918
|
+
"services": {
|
|
4919
|
+
"exe-db": {
|
|
4920
|
+
"image": "update.askexe.com/askexe/pgvector:0.8.0-pg16@sha256:a132765ec351c65111b5b675928a3a0515a466a40f97277329db8b8209ad8bc9",
|
|
4921
|
+
"env": "EXE_DB_IMAGE",
|
|
4922
|
+
"composeService": "exe-db",
|
|
4923
|
+
"required": true,
|
|
4924
|
+
"category": "core",
|
|
4925
|
+
"description": "Postgres (pgvector) — digest-pinned (bug 32d6e02f; was tag-only in 0.9.25, regressed from 0.9.24)"
|
|
4926
|
+
},
|
|
4927
|
+
"exe-os": {
|
|
4928
|
+
"image": "update.askexe.com/askexe/exe-os:v0.9.382@sha256:266a59a482865eab9f79497999acb33c1fe1868ec54ea5cd1ce971c492f11bd6",
|
|
4929
|
+
"env": "EXE_OS_IMAGE_TAG",
|
|
4930
|
+
"composeService": "exe-os",
|
|
4931
|
+
"healthUrl": "http://127.0.0.1:8765/health",
|
|
4932
|
+
"required": true,
|
|
4933
|
+
"category": "core",
|
|
4934
|
+
"description": "exe-os daemon + MCP server"
|
|
4935
|
+
},
|
|
4936
|
+
"crm": {
|
|
4937
|
+
"image": "update.askexe.com/askexe/exe-crm:v0.9.66@sha256:38bbae74ddd33dbbd62175a46ad0d3f99ef6c671b0c2187e35398ca9c504c3eb",
|
|
4938
|
+
"env": "CRM_IMAGE_TAG",
|
|
4939
|
+
"composeService": "exe-crm",
|
|
4940
|
+
"healthUrl": "http://127.0.0.1:3000/healthz",
|
|
4941
|
+
"category": "app",
|
|
4942
|
+
"gitSha": "a3d107483304d10b05c9f1ee5e1b0182c4628e65",
|
|
4943
|
+
"description": "Central authentication and recovery with server-validated shared sessions for CRM web and worker."
|
|
4944
|
+
},
|
|
4945
|
+
"wiki": {
|
|
4946
|
+
"image": "update.askexe.com/askexe/exe-wiki:v0.9.37@sha256:8fa22e77c0742fbb690f7b4c8431a186692a20ebd335fb141782df4289dc337f",
|
|
4947
|
+
"env": "WIKI_IMAGE_TAG",
|
|
4948
|
+
"composeService": "exe-wiki",
|
|
4949
|
+
"healthUrl": "http://127.0.0.1:3001/api/ping",
|
|
4950
|
+
"category": "app",
|
|
4951
|
+
"description": "Central hosted authentication and recovery with server-validated shared sessions, membership enforcement, and no product-local credential form.",
|
|
4952
|
+
"gitSha": "713a4370c2b641b8f8b07fd1e7390afa79a9c931"
|
|
4953
|
+
},
|
|
4954
|
+
"gateway": {
|
|
4955
|
+
"image": "update.askexe.com/askexe/exe-gateway:v2026.08.07-c15f093-stamped@sha256:1bc11a2a0ad1f3929d59d2685696f22a72042b9fca9c75e15c02dc7d3c640105",
|
|
4956
|
+
"env": "GATEWAY_IMAGE_TAG",
|
|
4957
|
+
"composeService": "exe-gateway",
|
|
4958
|
+
"healthUrl": "http://127.0.0.1:3100/health",
|
|
4959
|
+
"category": "app",
|
|
4960
|
+
"description": "WhatsApp/messaging gateway — provenance-stamped rebuild of main (outbound message persistence fix); pinned by digest, dated immutable tag.",
|
|
4961
|
+
"gitSha": "c15f093a0f59730bd5c2c73791ff77059dfa7cc1"
|
|
4962
|
+
},
|
|
4963
|
+
"monitorAgent": {
|
|
4964
|
+
"image": "update.askexe.com/askexe/exe-monitor-agent:v2026.08.09-10660eb4-stamped@sha256:29fbd445f79484df04f000603e4ff445e76f0380f86d687a0033e3a0ef7d1b7a",
|
|
4965
|
+
"env": "MONITOR_AGENT_IMAGE_TAG",
|
|
4966
|
+
"composeService": "exe-monitor-agent",
|
|
4967
|
+
"category": "monitoring",
|
|
4968
|
+
"gitSha": "10660eb4abdeffbcba2aad13549aa58e208ac7a3"
|
|
4969
|
+
},
|
|
4970
|
+
"monitorHub": {
|
|
4971
|
+
"image": "update.askexe.com/askexe/exe-monitor-hub:v2026.08.09-10660eb4-stamped@sha256:c9a9218c2713b8dffea7e1cf8c0702a614657d311a7a4e821c6a543bab29bb97",
|
|
4972
|
+
"env": "MONITOR_HUB_IMAGE_TAG",
|
|
4973
|
+
"composeService": "exe-monitor-hub",
|
|
4974
|
+
"healthUrl": "http://127.0.0.1:8090/api/health",
|
|
4975
|
+
"category": "monitoring",
|
|
4976
|
+
"gitSha": "10660eb4abdeffbcba2aad13549aa58e208ac7a3"
|
|
4977
|
+
},
|
|
4978
|
+
"auth": {
|
|
4979
|
+
"image": "update.askexe.com/askexe/exe-auth:v0.6.10@sha256:0260349962d087cd3c33fed1d362029416e82ae9cc60abca7969beac2cb8639f",
|
|
4980
|
+
"env": "AUTH_IMAGE_TAG",
|
|
4981
|
+
"composeService": "exe-auth",
|
|
4982
|
+
"healthUrl": "http://127.0.0.1:3300/",
|
|
4983
|
+
"category": "auth",
|
|
4984
|
+
"description": "GoTrue SSO and privileged license authority bridge; stateless auth proxy.",
|
|
4985
|
+
"gitSha": "29fe7015d90b80c94db3a1e3904852b934071711"
|
|
4986
|
+
},
|
|
4987
|
+
"erp": {
|
|
4988
|
+
"image": "update.askexe.com/askexe/exe-erp:v0.3.17@sha256:ef61b59d94c04189fe2975045a3816d2fecc8efe3027e0ee8c17d0fa2efdbc3b",
|
|
4989
|
+
"env": "ERP_IMAGE_TAG",
|
|
4990
|
+
"composeService": "exe-erp",
|
|
4991
|
+
"healthUrl": "http://127.0.0.1:8069/api/method/ping",
|
|
4992
|
+
"healthHost": "localhost",
|
|
4993
|
+
"required": false,
|
|
4994
|
+
"category": "app",
|
|
4995
|
+
"description": "Enterprise Resource Planning with central hosted authentication and subject-bound organization admission.",
|
|
4996
|
+
"gitSha": "a769ec5e0ae53bc5944715845869715ebbffd63a"
|
|
4997
|
+
},
|
|
4998
|
+
"gotrue": {
|
|
4999
|
+
"image": "update.askexe.com/askexe/gotrue:v2.172.1@sha256:b0dd7aa28dd1f9a8bd31f136c8b912661f701d9b863171e5843cb08f18f49de4",
|
|
5000
|
+
"composeService": "gotrue",
|
|
5001
|
+
"healthUrl": "http://127.0.0.1:9999/health",
|
|
5002
|
+
"category": "infra"
|
|
5003
|
+
},
|
|
5004
|
+
"redis": {
|
|
5005
|
+
"image": "update.askexe.com/askexe/redis:7.4-alpine@sha256:6ab0b6e7381779332f97b8ca76193e45b0756f38d4c0dcda72dbb3c32061ab99",
|
|
5006
|
+
"composeService": "redis",
|
|
5007
|
+
"category": "infra"
|
|
5008
|
+
},
|
|
5009
|
+
"clickhouse": {
|
|
5010
|
+
"image": "update.askexe.com/askexe/clickhouse-server:24.8.4.13-alpine@sha256:88a45f9e328549b2579256c46ee38e5c0e25ae58303d9eb6d9c7ed8d6d2bbf3c",
|
|
5011
|
+
"composeService": "clickhouse",
|
|
5012
|
+
"category": "infra"
|
|
5013
|
+
},
|
|
5014
|
+
"cloudflared": {
|
|
5015
|
+
"image": "update.askexe.com/askexe/cloudflared:2026-07@sha256:ba461b8aa9c042156dbd39c38657fe7431bafa063220eab8d5330a523863da9f",
|
|
5016
|
+
"composeService": "cloudflared",
|
|
5017
|
+
"category": "infra"
|
|
5018
|
+
},
|
|
5019
|
+
"exe-sso-edge": {
|
|
5020
|
+
"image": "update.askexe.com/askexe/nginx:alpine@sha256:20316569d8f81a160065d7d2a5eeffc7ca97d79022462ee255fd23fa103a6b5c",
|
|
5021
|
+
"composeService": "exe-sso-edge",
|
|
5022
|
+
"category": "infra"
|
|
5023
|
+
},
|
|
5024
|
+
"exe-otel-collector": {
|
|
5025
|
+
"image": "update.askexe.com/askexe/otel-collector-contrib:0.114.0@sha256:37fa87091cfaaec7234a27e4e395a40c31c2bfaea97a349a4afef6d9e9681197",
|
|
5026
|
+
"composeService": "exe-otel-collector",
|
|
5027
|
+
"category": "infra"
|
|
5028
|
+
},
|
|
5029
|
+
"dashboard": {
|
|
5030
|
+
"image": "update.askexe.com/askexe/exe-dashboard:v0.9.392@sha256:d151441554c00e216084bd1caf2278e8c41fde188c039e0f167e158a511cbeec",
|
|
5031
|
+
"env": "DASHBOARD_IMAGE_TAG",
|
|
5032
|
+
"composeService": "exe-dashboard",
|
|
5033
|
+
"healthUrl": "http://127.0.0.1:3301/health",
|
|
5034
|
+
"required": false,
|
|
5035
|
+
"category": "optional",
|
|
5036
|
+
"description": "Customer dashboard at dashboard.<apex> — credits, usage, API keys, billing",
|
|
5037
|
+
"gitSha": "e11b25ad567389440da8ed5e566a9c59bce24123"
|
|
5038
|
+
}
|
|
5039
|
+
},
|
|
5040
|
+
"rolloutStage": "canary",
|
|
5041
|
+
"config": {
|
|
5042
|
+
"composeSha256": "220b251375f372107e8d8d54a9c3e4ceab1f57aae80f4babf2933c3887532263",
|
|
5043
|
+
"composeOverrideSha256": "af295ca2f75b85788416e4df51cab86d8b773bf4cafe6cf6df9c7c26b9a42d6d"
|
|
5044
|
+
}
|
|
5045
|
+
},
|
|
5046
|
+
"0.9.54": {
|
|
5047
|
+
"version": "0.9.54",
|
|
5048
|
+
"releasedAt": "2026-09-23T22:31:53.000Z",
|
|
5049
|
+
"npmVersion": "0.9.393",
|
|
5050
|
+
"notes": "CRM DEMO routing canary from the applied Dashboard 0.9.53 baseline. Update only CRM web and worker to v0.9.67 with signed DEMO workspace routing; preserve Dashboard v0.9.392, Auth v0.6.10, and all other pins. Operator DEMO bootstrap remains a separate scoped step after image acceptance.",
|
|
5051
|
+
"services": {
|
|
5052
|
+
"exe-db": {
|
|
5053
|
+
"image": "update.askexe.com/askexe/pgvector:0.8.0-pg16@sha256:a132765ec351c65111b5b675928a3a0515a466a40f97277329db8b8209ad8bc9",
|
|
5054
|
+
"env": "EXE_DB_IMAGE",
|
|
5055
|
+
"composeService": "exe-db",
|
|
5056
|
+
"required": true,
|
|
5057
|
+
"category": "core",
|
|
5058
|
+
"description": "Postgres (pgvector) — digest-pinned (bug 32d6e02f; was tag-only in 0.9.25, regressed from 0.9.24)"
|
|
5059
|
+
},
|
|
5060
|
+
"exe-os": {
|
|
5061
|
+
"image": "update.askexe.com/askexe/exe-os:v0.9.382@sha256:266a59a482865eab9f79497999acb33c1fe1868ec54ea5cd1ce971c492f11bd6",
|
|
5062
|
+
"env": "EXE_OS_IMAGE_TAG",
|
|
5063
|
+
"composeService": "exe-os",
|
|
5064
|
+
"healthUrl": "http://127.0.0.1:8765/health",
|
|
5065
|
+
"required": true,
|
|
5066
|
+
"category": "core",
|
|
5067
|
+
"description": "exe-os daemon + MCP server"
|
|
5068
|
+
},
|
|
5069
|
+
"crm": {
|
|
5070
|
+
"image": "update.askexe.com/askexe/exe-crm:v0.9.67@sha256:56452b7df4361e157e4d727dd71c8ed3f1cffd4b345bbddecf651609c0de9b48",
|
|
5071
|
+
"env": "CRM_IMAGE_TAG",
|
|
5072
|
+
"composeService": "exe-crm",
|
|
5073
|
+
"healthUrl": "http://127.0.0.1:3000/healthz",
|
|
5074
|
+
"category": "app",
|
|
5075
|
+
"gitSha": "9127619259b7ba2ff8963fbf302827e3cf518ece",
|
|
5076
|
+
"description": "Central authentication and recovery with server-validated shared sessions for CRM web and worker."
|
|
5077
|
+
},
|
|
5078
|
+
"wiki": {
|
|
5079
|
+
"image": "update.askexe.com/askexe/exe-wiki:v0.9.37@sha256:8fa22e77c0742fbb690f7b4c8431a186692a20ebd335fb141782df4289dc337f",
|
|
5080
|
+
"env": "WIKI_IMAGE_TAG",
|
|
5081
|
+
"composeService": "exe-wiki",
|
|
5082
|
+
"healthUrl": "http://127.0.0.1:3001/api/ping",
|
|
5083
|
+
"category": "app",
|
|
5084
|
+
"description": "Central hosted authentication and recovery with server-validated shared sessions, membership enforcement, and no product-local credential form.",
|
|
5085
|
+
"gitSha": "713a4370c2b641b8f8b07fd1e7390afa79a9c931"
|
|
5086
|
+
},
|
|
5087
|
+
"gateway": {
|
|
5088
|
+
"image": "update.askexe.com/askexe/exe-gateway:v2026.08.07-c15f093-stamped@sha256:1bc11a2a0ad1f3929d59d2685696f22a72042b9fca9c75e15c02dc7d3c640105",
|
|
5089
|
+
"env": "GATEWAY_IMAGE_TAG",
|
|
5090
|
+
"composeService": "exe-gateway",
|
|
5091
|
+
"healthUrl": "http://127.0.0.1:3100/health",
|
|
5092
|
+
"category": "app",
|
|
5093
|
+
"description": "WhatsApp/messaging gateway — provenance-stamped rebuild of main (outbound message persistence fix); pinned by digest, dated immutable tag.",
|
|
5094
|
+
"gitSha": "c15f093a0f59730bd5c2c73791ff77059dfa7cc1"
|
|
5095
|
+
},
|
|
5096
|
+
"monitorAgent": {
|
|
5097
|
+
"image": "update.askexe.com/askexe/exe-monitor-agent:v2026.08.09-10660eb4-stamped@sha256:29fbd445f79484df04f000603e4ff445e76f0380f86d687a0033e3a0ef7d1b7a",
|
|
5098
|
+
"env": "MONITOR_AGENT_IMAGE_TAG",
|
|
5099
|
+
"composeService": "exe-monitor-agent",
|
|
5100
|
+
"category": "monitoring",
|
|
5101
|
+
"gitSha": "10660eb4abdeffbcba2aad13549aa58e208ac7a3"
|
|
5102
|
+
},
|
|
5103
|
+
"monitorHub": {
|
|
5104
|
+
"image": "update.askexe.com/askexe/exe-monitor-hub:v2026.08.09-10660eb4-stamped@sha256:c9a9218c2713b8dffea7e1cf8c0702a614657d311a7a4e821c6a543bab29bb97",
|
|
5105
|
+
"env": "MONITOR_HUB_IMAGE_TAG",
|
|
5106
|
+
"composeService": "exe-monitor-hub",
|
|
5107
|
+
"healthUrl": "http://127.0.0.1:8090/api/health",
|
|
5108
|
+
"category": "monitoring",
|
|
5109
|
+
"gitSha": "10660eb4abdeffbcba2aad13549aa58e208ac7a3"
|
|
5110
|
+
},
|
|
5111
|
+
"auth": {
|
|
5112
|
+
"image": "update.askexe.com/askexe/exe-auth:v0.6.10@sha256:0260349962d087cd3c33fed1d362029416e82ae9cc60abca7969beac2cb8639f",
|
|
5113
|
+
"env": "AUTH_IMAGE_TAG",
|
|
5114
|
+
"composeService": "exe-auth",
|
|
5115
|
+
"healthUrl": "http://127.0.0.1:3300/",
|
|
5116
|
+
"category": "auth",
|
|
5117
|
+
"description": "GoTrue SSO and privileged license authority bridge; stateless auth proxy.",
|
|
5118
|
+
"gitSha": "29fe7015d90b80c94db3a1e3904852b934071711"
|
|
5119
|
+
},
|
|
5120
|
+
"erp": {
|
|
5121
|
+
"image": "update.askexe.com/askexe/exe-erp:v0.3.17@sha256:ef61b59d94c04189fe2975045a3816d2fecc8efe3027e0ee8c17d0fa2efdbc3b",
|
|
5122
|
+
"env": "ERP_IMAGE_TAG",
|
|
5123
|
+
"composeService": "exe-erp",
|
|
5124
|
+
"healthUrl": "http://127.0.0.1:8069/api/method/ping",
|
|
5125
|
+
"healthHost": "localhost",
|
|
5126
|
+
"required": false,
|
|
5127
|
+
"category": "app",
|
|
5128
|
+
"description": "Enterprise Resource Planning with central hosted authentication and subject-bound organization admission.",
|
|
5129
|
+
"gitSha": "a769ec5e0ae53bc5944715845869715ebbffd63a"
|
|
5130
|
+
},
|
|
5131
|
+
"gotrue": {
|
|
5132
|
+
"image": "update.askexe.com/askexe/gotrue:v2.172.1@sha256:b0dd7aa28dd1f9a8bd31f136c8b912661f701d9b863171e5843cb08f18f49de4",
|
|
5133
|
+
"composeService": "gotrue",
|
|
5134
|
+
"healthUrl": "http://127.0.0.1:9999/health",
|
|
5135
|
+
"category": "infra"
|
|
5136
|
+
},
|
|
5137
|
+
"redis": {
|
|
5138
|
+
"image": "update.askexe.com/askexe/redis:7.4-alpine@sha256:6ab0b6e7381779332f97b8ca76193e45b0756f38d4c0dcda72dbb3c32061ab99",
|
|
5139
|
+
"composeService": "redis",
|
|
5140
|
+
"category": "infra"
|
|
5141
|
+
},
|
|
5142
|
+
"clickhouse": {
|
|
5143
|
+
"image": "update.askexe.com/askexe/clickhouse-server:24.8.4.13-alpine@sha256:88a45f9e328549b2579256c46ee38e5c0e25ae58303d9eb6d9c7ed8d6d2bbf3c",
|
|
5144
|
+
"composeService": "clickhouse",
|
|
5145
|
+
"category": "infra"
|
|
5146
|
+
},
|
|
5147
|
+
"cloudflared": {
|
|
5148
|
+
"image": "update.askexe.com/askexe/cloudflared:2026-07@sha256:ba461b8aa9c042156dbd39c38657fe7431bafa063220eab8d5330a523863da9f",
|
|
5149
|
+
"composeService": "cloudflared",
|
|
5150
|
+
"category": "infra"
|
|
5151
|
+
},
|
|
5152
|
+
"exe-sso-edge": {
|
|
5153
|
+
"image": "update.askexe.com/askexe/nginx:alpine@sha256:20316569d8f81a160065d7d2a5eeffc7ca97d79022462ee255fd23fa103a6b5c",
|
|
5154
|
+
"composeService": "exe-sso-edge",
|
|
5155
|
+
"category": "infra"
|
|
5156
|
+
},
|
|
5157
|
+
"exe-otel-collector": {
|
|
5158
|
+
"image": "update.askexe.com/askexe/otel-collector-contrib:0.114.0@sha256:37fa87091cfaaec7234a27e4e395a40c31c2bfaea97a349a4afef6d9e9681197",
|
|
5159
|
+
"composeService": "exe-otel-collector",
|
|
5160
|
+
"category": "infra"
|
|
5161
|
+
},
|
|
5162
|
+
"dashboard": {
|
|
5163
|
+
"image": "update.askexe.com/askexe/exe-dashboard:v0.9.392@sha256:d151441554c00e216084bd1caf2278e8c41fde188c039e0f167e158a511cbeec",
|
|
5164
|
+
"env": "DASHBOARD_IMAGE_TAG",
|
|
5165
|
+
"composeService": "exe-dashboard",
|
|
5166
|
+
"healthUrl": "http://127.0.0.1:3301/health",
|
|
5167
|
+
"required": false,
|
|
5168
|
+
"category": "optional",
|
|
5169
|
+
"description": "Customer dashboard at dashboard.<apex> — credits, usage, API keys, billing",
|
|
5170
|
+
"gitSha": "e11b25ad567389440da8ed5e566a9c59bce24123"
|
|
5171
|
+
}
|
|
5172
|
+
},
|
|
5173
|
+
"rolloutStage": "canary",
|
|
5174
|
+
"config": {
|
|
5175
|
+
"composeSha256": "220b251375f372107e8d8d54a9c3e4ceab1f57aae80f4babf2933c3887532263",
|
|
5176
|
+
"composeOverrideSha256": "af295ca2f75b85788416e4df51cab86d8b773bf4cafe6cf6df9c7c26b9a42d6d"
|
|
5177
|
+
}
|
|
5178
|
+
},
|
|
5179
|
+
"0.9.55": {
|
|
5180
|
+
"version": "0.9.55",
|
|
5181
|
+
"releasedAt": "2026-09-23T23:14:06.000Z",
|
|
5182
|
+
"npmVersion": "0.9.394",
|
|
5183
|
+
"notes": "CRM DEMO routing canary superseding unapplied stack 0.9.54. The scoped updater now validates, restarts, witnesses, and rolls back CRM web and worker together under the one signed CRM_IMAGE_TAG. From the applied Dashboard 0.9.53 baseline, update only CRM to v0.9.67; preserve Dashboard v0.9.392, Auth v0.6.10, and every other image pin. Operator DEMO bootstrap remains separate after image acceptance.",
|
|
5184
|
+
"services": {
|
|
5185
|
+
"exe-db": {
|
|
5186
|
+
"image": "update.askexe.com/askexe/pgvector:0.8.0-pg16@sha256:a132765ec351c65111b5b675928a3a0515a466a40f97277329db8b8209ad8bc9",
|
|
5187
|
+
"env": "EXE_DB_IMAGE",
|
|
5188
|
+
"composeService": "exe-db",
|
|
5189
|
+
"required": true,
|
|
5190
|
+
"category": "core",
|
|
5191
|
+
"description": "Postgres (pgvector) — digest-pinned (bug 32d6e02f; was tag-only in 0.9.25, regressed from 0.9.24)"
|
|
5192
|
+
},
|
|
5193
|
+
"exe-os": {
|
|
5194
|
+
"image": "update.askexe.com/askexe/exe-os:v0.9.382@sha256:266a59a482865eab9f79497999acb33c1fe1868ec54ea5cd1ce971c492f11bd6",
|
|
5195
|
+
"env": "EXE_OS_IMAGE_TAG",
|
|
5196
|
+
"composeService": "exe-os",
|
|
5197
|
+
"healthUrl": "http://127.0.0.1:8765/health",
|
|
5198
|
+
"required": true,
|
|
5199
|
+
"category": "core",
|
|
5200
|
+
"description": "exe-os daemon + MCP server"
|
|
5201
|
+
},
|
|
5202
|
+
"crm": {
|
|
5203
|
+
"image": "update.askexe.com/askexe/exe-crm:v0.9.67@sha256:56452b7df4361e157e4d727dd71c8ed3f1cffd4b345bbddecf651609c0de9b48",
|
|
5204
|
+
"env": "CRM_IMAGE_TAG",
|
|
5205
|
+
"composeService": "exe-crm",
|
|
5206
|
+
"healthUrl": "http://127.0.0.1:3000/healthz",
|
|
5207
|
+
"category": "app",
|
|
5208
|
+
"gitSha": "9127619259b7ba2ff8963fbf302827e3cf518ece",
|
|
5209
|
+
"description": "Central authentication and recovery with server-validated shared sessions for CRM web and worker."
|
|
5210
|
+
},
|
|
5211
|
+
"wiki": {
|
|
5212
|
+
"image": "update.askexe.com/askexe/exe-wiki:v0.9.37@sha256:8fa22e77c0742fbb690f7b4c8431a186692a20ebd335fb141782df4289dc337f",
|
|
5213
|
+
"env": "WIKI_IMAGE_TAG",
|
|
5214
|
+
"composeService": "exe-wiki",
|
|
5215
|
+
"healthUrl": "http://127.0.0.1:3001/api/ping",
|
|
5216
|
+
"category": "app",
|
|
5217
|
+
"description": "Central hosted authentication and recovery with server-validated shared sessions, membership enforcement, and no product-local credential form.",
|
|
5218
|
+
"gitSha": "713a4370c2b641b8f8b07fd1e7390afa79a9c931"
|
|
5219
|
+
},
|
|
5220
|
+
"gateway": {
|
|
5221
|
+
"image": "update.askexe.com/askexe/exe-gateway:v2026.08.07-c15f093-stamped@sha256:1bc11a2a0ad1f3929d59d2685696f22a72042b9fca9c75e15c02dc7d3c640105",
|
|
5222
|
+
"env": "GATEWAY_IMAGE_TAG",
|
|
5223
|
+
"composeService": "exe-gateway",
|
|
5224
|
+
"healthUrl": "http://127.0.0.1:3100/health",
|
|
5225
|
+
"category": "app",
|
|
5226
|
+
"description": "WhatsApp/messaging gateway — provenance-stamped rebuild of main (outbound message persistence fix); pinned by digest, dated immutable tag.",
|
|
5227
|
+
"gitSha": "c15f093a0f59730bd5c2c73791ff77059dfa7cc1"
|
|
5228
|
+
},
|
|
5229
|
+
"monitorAgent": {
|
|
5230
|
+
"image": "update.askexe.com/askexe/exe-monitor-agent:v2026.08.09-10660eb4-stamped@sha256:29fbd445f79484df04f000603e4ff445e76f0380f86d687a0033e3a0ef7d1b7a",
|
|
5231
|
+
"env": "MONITOR_AGENT_IMAGE_TAG",
|
|
5232
|
+
"composeService": "exe-monitor-agent",
|
|
5233
|
+
"category": "monitoring",
|
|
5234
|
+
"gitSha": "10660eb4abdeffbcba2aad13549aa58e208ac7a3"
|
|
5235
|
+
},
|
|
5236
|
+
"monitorHub": {
|
|
5237
|
+
"image": "update.askexe.com/askexe/exe-monitor-hub:v2026.08.09-10660eb4-stamped@sha256:c9a9218c2713b8dffea7e1cf8c0702a614657d311a7a4e821c6a543bab29bb97",
|
|
5238
|
+
"env": "MONITOR_HUB_IMAGE_TAG",
|
|
5239
|
+
"composeService": "exe-monitor-hub",
|
|
5240
|
+
"healthUrl": "http://127.0.0.1:8090/api/health",
|
|
5241
|
+
"category": "monitoring",
|
|
5242
|
+
"gitSha": "10660eb4abdeffbcba2aad13549aa58e208ac7a3"
|
|
5243
|
+
},
|
|
5244
|
+
"auth": {
|
|
5245
|
+
"image": "update.askexe.com/askexe/exe-auth:v0.6.10@sha256:0260349962d087cd3c33fed1d362029416e82ae9cc60abca7969beac2cb8639f",
|
|
5246
|
+
"env": "AUTH_IMAGE_TAG",
|
|
5247
|
+
"composeService": "exe-auth",
|
|
5248
|
+
"healthUrl": "http://127.0.0.1:3300/",
|
|
5249
|
+
"category": "auth",
|
|
5250
|
+
"description": "GoTrue SSO and privileged license authority bridge; stateless auth proxy.",
|
|
5251
|
+
"gitSha": "29fe7015d90b80c94db3a1e3904852b934071711"
|
|
5252
|
+
},
|
|
5253
|
+
"erp": {
|
|
5254
|
+
"image": "update.askexe.com/askexe/exe-erp:v0.3.17@sha256:ef61b59d94c04189fe2975045a3816d2fecc8efe3027e0ee8c17d0fa2efdbc3b",
|
|
5255
|
+
"env": "ERP_IMAGE_TAG",
|
|
5256
|
+
"composeService": "exe-erp",
|
|
5257
|
+
"healthUrl": "http://127.0.0.1:8069/api/method/ping",
|
|
5258
|
+
"healthHost": "localhost",
|
|
5259
|
+
"required": false,
|
|
5260
|
+
"category": "app",
|
|
5261
|
+
"description": "Enterprise Resource Planning with central hosted authentication and subject-bound organization admission.",
|
|
5262
|
+
"gitSha": "a769ec5e0ae53bc5944715845869715ebbffd63a"
|
|
5263
|
+
},
|
|
5264
|
+
"gotrue": {
|
|
5265
|
+
"image": "update.askexe.com/askexe/gotrue:v2.172.1@sha256:b0dd7aa28dd1f9a8bd31f136c8b912661f701d9b863171e5843cb08f18f49de4",
|
|
5266
|
+
"composeService": "gotrue",
|
|
5267
|
+
"healthUrl": "http://127.0.0.1:9999/health",
|
|
5268
|
+
"category": "infra"
|
|
5269
|
+
},
|
|
5270
|
+
"redis": {
|
|
5271
|
+
"image": "update.askexe.com/askexe/redis:7.4-alpine@sha256:6ab0b6e7381779332f97b8ca76193e45b0756f38d4c0dcda72dbb3c32061ab99",
|
|
5272
|
+
"composeService": "redis",
|
|
5273
|
+
"category": "infra"
|
|
5274
|
+
},
|
|
5275
|
+
"clickhouse": {
|
|
5276
|
+
"image": "update.askexe.com/askexe/clickhouse-server:24.8.4.13-alpine@sha256:88a45f9e328549b2579256c46ee38e5c0e25ae58303d9eb6d9c7ed8d6d2bbf3c",
|
|
5277
|
+
"composeService": "clickhouse",
|
|
5278
|
+
"category": "infra"
|
|
5279
|
+
},
|
|
5280
|
+
"cloudflared": {
|
|
5281
|
+
"image": "update.askexe.com/askexe/cloudflared:2026-07@sha256:ba461b8aa9c042156dbd39c38657fe7431bafa063220eab8d5330a523863da9f",
|
|
5282
|
+
"composeService": "cloudflared",
|
|
5283
|
+
"category": "infra"
|
|
5284
|
+
},
|
|
5285
|
+
"exe-sso-edge": {
|
|
5286
|
+
"image": "update.askexe.com/askexe/nginx:alpine@sha256:20316569d8f81a160065d7d2a5eeffc7ca97d79022462ee255fd23fa103a6b5c",
|
|
5287
|
+
"composeService": "exe-sso-edge",
|
|
5288
|
+
"category": "infra"
|
|
5289
|
+
},
|
|
5290
|
+
"exe-otel-collector": {
|
|
5291
|
+
"image": "update.askexe.com/askexe/otel-collector-contrib:0.114.0@sha256:37fa87091cfaaec7234a27e4e395a40c31c2bfaea97a349a4afef6d9e9681197",
|
|
5292
|
+
"composeService": "exe-otel-collector",
|
|
5293
|
+
"category": "infra"
|
|
5294
|
+
},
|
|
5295
|
+
"dashboard": {
|
|
5296
|
+
"image": "update.askexe.com/askexe/exe-dashboard:v0.9.392@sha256:d151441554c00e216084bd1caf2278e8c41fde188c039e0f167e158a511cbeec",
|
|
5297
|
+
"env": "DASHBOARD_IMAGE_TAG",
|
|
5298
|
+
"composeService": "exe-dashboard",
|
|
5299
|
+
"healthUrl": "http://127.0.0.1:3301/health",
|
|
5300
|
+
"required": false,
|
|
5301
|
+
"category": "optional",
|
|
5302
|
+
"description": "Customer dashboard at dashboard.<apex> — credits, usage, API keys, billing",
|
|
5303
|
+
"gitSha": "e11b25ad567389440da8ed5e566a9c59bce24123"
|
|
5304
|
+
}
|
|
5305
|
+
},
|
|
5306
|
+
"rolloutStage": "canary",
|
|
5307
|
+
"config": {
|
|
5308
|
+
"composeSha256": "220b251375f372107e8d8d54a9c3e4ceab1f57aae80f4babf2933c3887532263",
|
|
5309
|
+
"composeOverrideSha256": "af295ca2f75b85788416e4df51cab86d8b773bf4cafe6cf6df9c7c26b9a42d6d"
|
|
5310
|
+
}
|
|
4912
5311
|
}
|
|
4913
5312
|
},
|
|
4914
5313
|
"signature": {
|
|
4915
5314
|
"keyId": "exe-stack-1",
|
|
4916
5315
|
"alg": "ed25519",
|
|
4917
|
-
"signature": "
|
|
5316
|
+
"signature": "BTPhDNOLpsQWb4XWYhc4B76lw+lAa0+t6RP1wC9B5D/9NNvkFcRTPrrf56YxL2bjBgx1IMWaBi4eM5Fbv2WEDA=="
|
|
4918
5317
|
}
|
|
4919
5318
|
}
|
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-23T23:35:24.863Z",
|
|
4
|
+
"manifest_sha256": "6448e6d55002816a5c2c682844a5a0d84f5f006dc21386948f690951ae6ad15f",
|
|
5
|
+
"package_version": "0.9.394"
|
|
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-YCNRPK6R.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-4EF7RNIV.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-H6LJQ2HV.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
|
@@ -7,6 +7,7 @@ import {
|
|
|
7
7
|
assertRetainedComposeRenderedImage,
|
|
8
8
|
assertRetainedComposeRunningService,
|
|
9
9
|
assertSignedManifestDeliveryGate,
|
|
10
|
+
assessRetainedHealthBefore,
|
|
10
11
|
backupStackConfig,
|
|
11
12
|
bootstrapStackHost,
|
|
12
13
|
builtinStackManifestPublicKeyPath,
|
|
@@ -17,12 +18,14 @@ import {
|
|
|
17
18
|
defaultStackPaths,
|
|
18
19
|
detectDanglingVolumes,
|
|
19
20
|
detectMissingRequiredEnvVars,
|
|
21
|
+
expandComposeServicesWithSidecars,
|
|
20
22
|
listAvailableVersions,
|
|
21
23
|
listHostComposeServices,
|
|
22
24
|
loadServiceSelection,
|
|
23
25
|
loadStackManifestWithFallback,
|
|
24
26
|
parseComposeVolumeNames,
|
|
25
27
|
parseEnv,
|
|
28
|
+
parseRetainedContainerHealth,
|
|
26
29
|
patchEnv,
|
|
27
30
|
printDanglingVolumes,
|
|
28
31
|
printVolumeCleanupResult,
|
|
@@ -33,6 +36,9 @@ import {
|
|
|
33
36
|
reportStackManifestSource,
|
|
34
37
|
requiredImagePinKeys,
|
|
35
38
|
resolveComposeProjectName,
|
|
39
|
+
retainedCompletedDependencies,
|
|
40
|
+
retainedContainerIsHealthy,
|
|
41
|
+
retainedCriticalServices,
|
|
36
42
|
runScopedServiceSelection,
|
|
37
43
|
runStackUpdate,
|
|
38
44
|
saveServiceSelection,
|
|
@@ -41,7 +47,7 @@ import {
|
|
|
41
47
|
verifyManifestImagesAvailable,
|
|
42
48
|
warnUnmanagedManifestServices,
|
|
43
49
|
withStackUpdateOperationLock
|
|
44
|
-
} from "../chunk-
|
|
50
|
+
} from "../chunk-DYFTZWG2.js";
|
|
45
51
|
import "../chunk-EC5H53YD.js";
|
|
46
52
|
import {
|
|
47
53
|
runVerifyStack
|
|
@@ -57,7 +63,7 @@ import {
|
|
|
57
63
|
import {
|
|
58
64
|
logResult,
|
|
59
65
|
runHealthGate
|
|
60
|
-
} from "../chunk-
|
|
66
|
+
} from "../chunk-5OWHYOIF.js";
|
|
61
67
|
import "../chunk-L25OAFOU.js";
|
|
62
68
|
import "../chunk-RT57D7C4.js";
|
|
63
69
|
import "../chunk-FTZET5YX.js";
|
|
@@ -2076,7 +2082,25 @@ function readInstalledVersion(lockFile) {
|
|
|
2076
2082
|
return void 0;
|
|
2077
2083
|
}
|
|
2078
2084
|
}
|
|
2079
|
-
function printChanges(changes, composeFile, envFile) {
|
|
2085
|
+
function printChanges(changes, composeFile, envFile, retainedHealth) {
|
|
2086
|
+
if (retainedHealth) {
|
|
2087
|
+
if (changes.length > 0) {
|
|
2088
|
+
console.log("Planned image tag changes:");
|
|
2089
|
+
for (const c of changes) console.log(` - ${c.service}: ${c.key}
|
|
2090
|
+
${c.before ?? "<unset>"} \u2192 ${c.after}`);
|
|
2091
|
+
}
|
|
2092
|
+
console.log("\nCurrent container health (selected service and required dependencies are gates):");
|
|
2093
|
+
for (const [service, container] of retainedHealth.containers) {
|
|
2094
|
+
const critical = retainedHealth.critical.has(service);
|
|
2095
|
+
const healthy = retainedContainerIsHealthy(container, retainedHealth.completedDependencies?.has(service));
|
|
2096
|
+
const label = critical ? "required for this update" : "unrelated, unchanged baseline";
|
|
2097
|
+
console.log(` ${healthy ? "\u2705" : critical ? "\u274C" : "\u26A0\uFE0F"} ${service}: ${container.state}${container.health ? ` (health: ${container.health})` : ""} \u2014 ${label}`);
|
|
2098
|
+
}
|
|
2099
|
+
const failures = assessRetainedHealthBefore(retainedHealth);
|
|
2100
|
+
if (failures.length > 0) console.log(`
|
|
2101
|
+
\u{1F534} Retained-Compose health gate failed: ${failures.join(", ")}`);
|
|
2102
|
+
return failures.length;
|
|
2103
|
+
}
|
|
2080
2104
|
if (changes.length === 0) {
|
|
2081
2105
|
const running2 = areCliContainersRunning(composeFile, envFile);
|
|
2082
2106
|
if (running2) {
|
|
@@ -2111,6 +2135,24 @@ function printChanges(changes, composeFile, envFile) {
|
|
|
2111
2135
|
}
|
|
2112
2136
|
return 0;
|
|
2113
2137
|
}
|
|
2138
|
+
function captureRetainedHealthForCli(composeFile, envFile, selectedService, requiredCore) {
|
|
2139
|
+
const args = composeArgsForStack(composeFile, envFile);
|
|
2140
|
+
const config = spawnSync3("docker", [...args, "config", "--format", "json"], {
|
|
2141
|
+
encoding: "utf8",
|
|
2142
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
2143
|
+
timeout: 2e4
|
|
2144
|
+
});
|
|
2145
|
+
const companions = expandComposeServicesWithSidecars([selectedService]).slice(1);
|
|
2146
|
+
const critical = retainedCriticalServices(config.status === 0 ? config.stdout : null, selectedService, requiredCore, companions);
|
|
2147
|
+
const completedDependencies = retainedCompletedDependencies(config.stdout, critical, selectedService, requiredCore, companions);
|
|
2148
|
+
const ps = spawnSync3("docker", [...args, "ps", "--all", "--format", "json"], {
|
|
2149
|
+
encoding: "utf8",
|
|
2150
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
2151
|
+
timeout: 2e4
|
|
2152
|
+
});
|
|
2153
|
+
const containers = parseRetainedContainerHealth(ps.status === 0 ? ps.stdout : null);
|
|
2154
|
+
return { critical, completedDependencies, containers };
|
|
2155
|
+
}
|
|
2114
2156
|
function areCliContainersRunning(composeFile, envFile) {
|
|
2115
2157
|
try {
|
|
2116
2158
|
const result = spawnSync3("docker", [...composeArgsForStack(composeFile, envFile), "ps", "-q"], {
|
|
@@ -2411,20 +2453,20 @@ async function main(args = process.argv.slice(2)) {
|
|
|
2411
2453
|
}, plan, liveComposeRaw, envRaw, process.env, retainedComposeFiles.override);
|
|
2412
2454
|
console.log(`[stack-update] Signed live compose retained: base SHA256 ${manifest.stacks[plan.targetVersion]?.config?.composeSha256}` + (retainedComposeFiles.override === null ? " (no override)" : `, override SHA256 ${manifest.stacks[plan.targetVersion]?.config?.composeOverrideSha256}`));
|
|
2413
2455
|
const selectedService = Object.values(plan.release.services)[0];
|
|
2414
|
-
|
|
2415
|
-
|
|
2416
|
-
|
|
2417
|
-
|
|
2418
|
-
|
|
2419
|
-
|
|
2420
|
-
|
|
2421
|
-
|
|
2422
|
-
|
|
2423
|
-
|
|
2424
|
-
|
|
2425
|
-
|
|
2456
|
+
const composeTargets = expandComposeServicesWithSidecars([selectedService.composeService ?? opts.serviceName]);
|
|
2457
|
+
for (const target of composeTargets) {
|
|
2458
|
+
assertRetainedComposeRunningService(composeArgsForStack(opts.composeFile, opts.envFile), target);
|
|
2459
|
+
assertRetainedComposeRenderedImage(
|
|
2460
|
+
composeArgsForStack(opts.composeFile, opts.envFile),
|
|
2461
|
+
target,
|
|
2462
|
+
selectedService.env,
|
|
2463
|
+
plan.changes[0].after,
|
|
2464
|
+
void 0,
|
|
2465
|
+
{ ...process.env, [selectedService.env]: plan.changes[0].after }
|
|
2466
|
+
);
|
|
2467
|
+
}
|
|
2426
2468
|
console.log(
|
|
2427
|
-
`[stack-update] If applied: back up stack config and attempt the configured database/off-host backups; write only ${selectedService.env} in the stack .env; update the stack lock and deploy audit; pull and recreate only ${
|
|
2469
|
+
`[stack-update] If applied: back up stack config and attempt the configured database/off-host backups; write only ${selectedService.env} in the stack .env; update the stack lock and deploy audit; pull and recreate only ${composeTargets.join(", ")}. Compose, bind-mounted assets, gateway overlays, host hardening, and service selection remain unchanged.`
|
|
2428
2470
|
);
|
|
2429
2471
|
}
|
|
2430
2472
|
const targetRelease = manifest.stacks[plan.targetVersion];
|
|
@@ -2511,7 +2553,16 @@ async function main(args = process.argv.slice(2)) {
|
|
|
2511
2553
|
console.log("");
|
|
2512
2554
|
}
|
|
2513
2555
|
}
|
|
2514
|
-
const
|
|
2556
|
+
const retainedHealth = opts.retainCompose && targetRelease ? captureRetainedHealthForCli(
|
|
2557
|
+
opts.composeFile,
|
|
2558
|
+
opts.envFile,
|
|
2559
|
+
Object.values(plan.release.services)[0].composeService ?? opts.serviceName,
|
|
2560
|
+
Object.entries(targetRelease.services).filter(([, service]) => service.required === true && service.category === "core").map(([name, service]) => service.composeService ?? name)
|
|
2561
|
+
) : void 0;
|
|
2562
|
+
const unhealthyCount = printChanges(plan.changes, opts.composeFile, opts.envFile, retainedHealth);
|
|
2563
|
+
if (opts.retainCompose && unhealthyCount > 0 && !opts.check && !opts.dryRun) {
|
|
2564
|
+
throw new Error("--retain-compose refused: selected service or required dependency is unhealthy");
|
|
2565
|
+
}
|
|
2515
2566
|
printBreaking(plan.breakingChanges);
|
|
2516
2567
|
if (opts.verifyImages) {
|
|
2517
2568
|
const started = Date.now();
|
|
@@ -2704,6 +2755,7 @@ export {
|
|
|
2704
2755
|
isProductionControlPlaneApply,
|
|
2705
2756
|
manifestSignatureSkipBanner,
|
|
2706
2757
|
parseArgs as parseStackUpdateArgs,
|
|
2758
|
+
printChanges,
|
|
2707
2759
|
reportPartialRun,
|
|
2708
2760
|
resolveManifestSignaturePolicy,
|
|
2709
2761
|
main as runStackUpdateCli,
|