@askexenow/exe-os 0.9.384 → 0.9.387

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.
Files changed (389) hide show
  1. package/dist/.dist-verified.json +3 -3
  2. package/dist/{active-agent-F5V4E4UL.js → active-agent-B2RK62MI.js} +4 -4
  3. package/dist/{active-agent-YTBB4ZQM.js → active-agent-I3JL4NRS.js} +4 -4
  4. package/dist/{agent-defs-generator-7TFISIJQ.js → agent-defs-generator-JZF6ZPCY.js} +2 -2
  5. package/dist/{agentic-ontology-XVTUVV7W.js → agentic-ontology-Y23IUPRF.js} +1 -1
  6. package/dist/{backfill-metadata-J6MXIDCW.js → backfill-metadata-5YPOOBT6.js} +6 -6
  7. package/dist/{backup-verify-6DVBQMDP.js → backup-verify-7M5WDE64.js} +1 -1
  8. package/dist/{behavior-injection-XDA7ZCYN.js → behavior-injection-4AOTSXRV.js} +9 -9
  9. package/dist/{behavior-promotion-4VLQ7LXK.js → behavior-promotion-YXJNIY4N.js} +8 -8
  10. package/dist/{behaviors-SCCZP7RZ.js → behaviors-7RRWAZE2.js} +7 -7
  11. package/dist/bin/agentic-ontology-backfill.js +7 -7
  12. package/dist/bin/agentic-reflection-backfill.js +8 -8
  13. package/dist/bin/agentic-semantic-label.js +7 -7
  14. package/dist/bin/backfill-conversations.js +6 -6
  15. package/dist/bin/backfill-responses.js +6 -6
  16. package/dist/bin/backfill-vectors.js +6 -6
  17. package/dist/bin/bulk-sync-postgres.js +12 -12
  18. package/dist/bin/cc-doctor.js +9 -9
  19. package/dist/bin/cleanup-stale-review-tasks.js +37 -27
  20. package/dist/bin/cli.js +21 -21
  21. package/dist/bin/customer-readiness.js +55 -25
  22. package/dist/bin/deferred-daemon-restart.js +87 -87
  23. package/dist/bin/exe-agent-config.js +2 -2
  24. package/dist/bin/exe-agent.js +5 -5
  25. package/dist/bin/exe-assign.js +7 -7
  26. package/dist/bin/exe-boot.js +36 -36
  27. package/dist/bin/exe-call.js +4 -4
  28. package/dist/bin/exe-cicd.js +19 -8
  29. package/dist/bin/exe-cloud.js +13 -13
  30. package/dist/bin/exe-config-dump.js +2 -2
  31. package/dist/bin/exe-dispatch.js +16 -16
  32. package/dist/bin/exe-doctor.js +6 -6
  33. package/dist/bin/exe-export-behaviors.js +11 -11
  34. package/dist/bin/exe-forget.js +9 -9
  35. package/dist/bin/exe-gateway.js +8 -8
  36. package/dist/bin/exe-grant.js +1 -1
  37. package/dist/bin/exe-healthcheck.js +9 -9
  38. package/dist/bin/exe-heartbeat.js +21 -21
  39. package/dist/bin/exe-kill.js +20 -20
  40. package/dist/bin/exe-launch-agent.js +26 -26
  41. package/dist/bin/exe-mcp.js +5 -5
  42. package/dist/bin/exe-memory-reads.js +6 -6
  43. package/dist/bin/exe-new-employee.js +8 -8
  44. package/dist/bin/exe-os-mcp-proxy.js +5 -5
  45. package/dist/bin/exe-pending-messages.js +16 -16
  46. package/dist/bin/exe-pending-notifications.js +15 -15
  47. package/dist/bin/exe-pending-reviews.js +16 -16
  48. package/dist/bin/exe-preflight.js +1 -1
  49. package/dist/bin/exe-rename.js +4 -4
  50. package/dist/bin/exe-review.js +51 -49
  51. package/dist/bin/exe-search.js +8 -8
  52. package/dist/bin/exe-session-cleanup.js +21 -21
  53. package/dist/bin/exe-settings.js +12 -12
  54. package/dist/bin/exe-start-codex.js +17 -17
  55. package/dist/bin/exe-start-opencode.js +15 -15
  56. package/dist/bin/exe-status.js +17 -17
  57. package/dist/bin/exe-support.js +3 -3
  58. package/dist/bin/exe-team.js +4 -4
  59. package/dist/bin/exe-verify-running-images.js +1 -1
  60. package/dist/bin/git-sweep.js +17 -17
  61. package/dist/bin/graph-backfill.js +7 -7
  62. package/dist/bin/graph-export.js +7 -7
  63. package/dist/bin/hooks-cli.js +1 -1
  64. package/dist/bin/import-history.js +11 -11
  65. package/dist/bin/install.js +89 -89
  66. package/dist/bin/intercom-check.js +5 -5
  67. package/dist/bin/mcp-sessions.js +2 -2
  68. package/dist/bin/orchestration-metrics.js +4 -4
  69. package/dist/bin/postgres-agentic-reflection-backfill.js +2 -2
  70. package/dist/bin/postgres-agentic-semantic-backfill.js +1 -1
  71. package/dist/bin/pre-build-guard.js +55 -16
  72. package/dist/bin/prune-orphan-chunks.js +41 -7
  73. package/dist/bin/reconcile-backlog.js +5 -3
  74. package/dist/bin/registry-proxy.js +1 -1
  75. package/dist/bin/repair-document-chunks.js +6 -6
  76. package/dist/bin/scan-tasks.js +16 -16
  77. package/dist/bin/setup.js +1 -1
  78. package/dist/bin/shard-migrate.js +6 -6
  79. package/dist/bin/stack-update.js +203 -34
  80. package/dist/bin/verify-stack.js +2 -2
  81. package/dist/bin/vps-health-gate.js +1 -1
  82. package/dist/{boot-generation-Q7LGQ3AO.js → boot-generation-VOFY43WG.js} +3 -3
  83. package/dist/{boot-review-sections-G5774FR5.js → boot-review-sections-WLYE6NUR.js} +14 -14
  84. package/dist/build-manifest.json +910 -910
  85. package/dist/{capability-cards-I3RHCF4F.js → capability-cards-2OBIKKX4.js} +2 -2
  86. package/dist/{capacity-monitor-7I7GDONU.js → capacity-monitor-IBFXHWPY.js} +16 -16
  87. package/dist/{catchup-brief-3T5PARIR.js → catchup-brief-GO6WLIT5.js} +21 -21
  88. package/dist/{chunk-OBBO6EJR.js → chunk-2ARLSZG4.js} +1 -1
  89. package/dist/{chunk-C5ISP5FO.js → chunk-2BKJAOO4.js} +11 -1
  90. package/dist/{chunk-MOANZQXF.js → chunk-2BWLCCHH.js} +1 -1
  91. package/dist/{chunk-GL47M7NY.js → chunk-2GUT5CWI.js} +74 -10
  92. package/dist/{chunk-VHHX4UCP.js → chunk-2XCUUS4V.js} +1 -1
  93. package/dist/{chunk-EOTZSAQL.js → chunk-37TRRK2Y.js} +1 -1
  94. package/dist/{chunk-RDWIKDMY.js → chunk-3EBK6P4M.js} +8 -20
  95. package/dist/{chunk-VF2KRROX.js → chunk-3MF6WQ4C.js} +1 -1
  96. package/dist/{chunk-EUGEFBGV.js → chunk-3UY535CJ.js} +3 -3
  97. package/dist/{chunk-JA3Y5TV6.js → chunk-4K6GSRSY.js} +36 -8
  98. package/dist/{chunk-I5XIW2BP.js → chunk-4LGKDHPX.js} +6 -6
  99. package/dist/{chunk-4AAMFWJT.js → chunk-4LYN5YNO.js} +2 -2
  100. package/dist/{chunk-R3CZWFFC.js → chunk-54FUOVUF.js} +9 -3
  101. package/dist/{chunk-XUZK23V7.js → chunk-5R23LRUP.js} +2 -2
  102. package/dist/{chunk-TNS63ATU.js → chunk-5SPQBSKC.js} +81 -13
  103. package/dist/{chunk-YRQ26MNP.js → chunk-64KFPFTH.js} +2 -2
  104. package/dist/{chunk-JFTUAV4J.js → chunk-6EUXAOZQ.js} +1 -1
  105. package/dist/{chunk-SDYWZRPN.js → chunk-6LU7ZXES.js} +1 -1
  106. package/dist/{chunk-VLBHZ6TF.js → chunk-6N6RGS7J.js} +2 -2
  107. package/dist/{chunk-2FKU4ZEO.js → chunk-6NS3DX36.js} +9 -9
  108. package/dist/{chunk-P2UY34XE.js → chunk-7MYX6M72.js} +4 -4
  109. package/dist/{chunk-E7C2WNR5.js → chunk-7NBSOBWJ.js} +4 -4
  110. package/dist/{chunk-AHESD3KW.js → chunk-AEEW4PCH.js} +1 -1
  111. package/dist/{chunk-MPZ2AVNS.js → chunk-AHVXVA46.js} +1 -1
  112. package/dist/{chunk-KXYKSLW4.js → chunk-AOQDY7HP.js} +186 -29
  113. package/dist/{chunk-AGC2V7JS.js → chunk-B6CBN6EF.js} +1 -1
  114. package/dist/{chunk-C5HUMAA7.js → chunk-B7WVYLAQ.js} +67 -15
  115. package/dist/{chunk-QFAFKEB5.js → chunk-BFOLGB4D.js} +184 -45
  116. package/dist/{chunk-T5FEAQES.js → chunk-BKYIWS2X.js} +1 -1
  117. package/dist/{chunk-E3ZM32LF.js → chunk-CDBII52V.js} +11 -2
  118. package/dist/{chunk-ALRHGEAJ.js → chunk-CI5R7QV7.js} +1 -1
  119. package/dist/{chunk-P3QQ52QK.js → chunk-CWWJEMJ5.js} +2 -2
  120. package/dist/{chunk-PL4CFSQ7.js → chunk-DI4DONAA.js} +1 -1
  121. package/dist/{chunk-ZOTTYCP5.js → chunk-ETUNXGX7.js} +3 -3
  122. package/dist/{chunk-3B6FLNLV.js → chunk-EZH2LGJX.js} +1 -1
  123. package/dist/{chunk-LKTN22L6.js → chunk-FH7WKTVF.js} +21 -17
  124. package/dist/{chunk-LR5O2XWZ.js → chunk-FHSMIHLQ.js} +5 -5
  125. package/dist/{chunk-D3LXVAIQ.js → chunk-GD4OC5TP.js} +237 -74
  126. package/dist/{chunk-R5E7WNAC.js → chunk-GFBEIPLT.js} +3 -3
  127. package/dist/{chunk-NF5FOSLD.js → chunk-GGPYYM2R.js} +1 -1
  128. package/dist/{chunk-MROSARM5.js → chunk-GIO43XOP.js} +1 -1
  129. package/dist/{chunk-VOVFUKEB.js → chunk-GMKDUWTJ.js} +1 -1
  130. package/dist/{chunk-46VSBDUW.js → chunk-GN23NAD6.js} +2 -2
  131. package/dist/{chunk-P4PIZOL2.js → chunk-GXSDFCON.js} +3 -3
  132. package/dist/{chunk-MKM6D7JM.js → chunk-H274T3MD.js} +42 -5
  133. package/dist/{chunk-P2VVMGMI.js → chunk-H2N47OFR.js} +17 -9
  134. package/dist/{chunk-RB3J2WYQ.js → chunk-HIYGHRLV.js} +1 -1
  135. package/dist/{chunk-MC4IM2CC.js → chunk-HQFATN5L.js} +4 -4
  136. package/dist/{chunk-S26CV7BE.js → chunk-HTGSVQJP.js} +2 -2
  137. package/dist/{chunk-FVLNNNH6.js → chunk-I4HK2DHC.js} +2 -2
  138. package/dist/{chunk-APL7HUE3.js → chunk-I6FI4VPQ.js} +182 -28
  139. package/dist/{chunk-XEBKIWI7.js → chunk-IE4IHF5U.js} +7 -7
  140. package/dist/{chunk-BPVFZ6Q4.js → chunk-IOIBJY5D.js} +2 -2
  141. package/dist/{chunk-6YDY6ZTD.js → chunk-IWRCPC65.js} +3 -3
  142. package/dist/{chunk-HA63SH5W.js → chunk-IWY2OGQG.js} +1 -1
  143. package/dist/{chunk-DYVLEMKS.js → chunk-JAUIIIWQ.js} +1 -1
  144. package/dist/{chunk-PLII76NJ.js → chunk-JBUCA4OX.js} +33 -6
  145. package/dist/{chunk-EGOEB42T.js → chunk-JIIWN637.js} +3 -3
  146. package/dist/{chunk-JFJP6ATJ.js → chunk-JKVITSQE.js} +1 -1
  147. package/dist/{chunk-W6BZ4UGA.js → chunk-JORQ5EUU.js} +1 -1
  148. package/dist/{chunk-PWC3C5ME.js → chunk-JW4K6FJA.js} +4 -4
  149. package/dist/{chunk-VF3BZOZK.js → chunk-JY6IU2XF.js} +1 -1
  150. package/dist/{chunk-RVO5O5SR.js → chunk-KVH7IVG6.js} +6 -6
  151. package/dist/{chunk-3OX34OC3.js → chunk-LPMIQZDB.js} +6 -6
  152. package/dist/{chunk-W3KPQE7H.js → chunk-LSPNZX4H.js} +3 -3
  153. package/dist/{chunk-EYMFVITZ.js → chunk-MCEUIG26.js} +1 -1
  154. package/dist/{chunk-4YNA3CM6.js → chunk-MEVMJZST.js} +230 -56
  155. package/dist/{chunk-7J2ZQ4XN.js → chunk-MGWAAKNL.js} +1 -1
  156. package/dist/{chunk-3RGTLZNO.js → chunk-MMHKSDG3.js} +12 -12
  157. package/dist/{chunk-LSNBTGW4.js → chunk-N5STNP44.js} +1 -1
  158. package/dist/{chunk-IGJMS7C5.js → chunk-NBRYSWMU.js} +2 -2
  159. package/dist/{chunk-ZBPZDADW.js → chunk-NHUI52BC.js} +3 -3
  160. package/dist/{chunk-NYLJQ2M2.js → chunk-NPJDYPEW.js} +4 -4
  161. package/dist/{chunk-JJTPPAZY.js → chunk-NR3NACEK.js} +397 -225
  162. package/dist/{chunk-MUCNYSJP.js → chunk-NRLJOV7M.js} +32 -4
  163. package/dist/{chunk-L63V25HS.js → chunk-O6H2WG4X.js} +3 -3
  164. package/dist/{chunk-VJEJ7JNB.js → chunk-OFCTRALK.js} +1 -1
  165. package/dist/{chunk-ZT4LFTUJ.js → chunk-OH5D7YAO.js} +1 -1
  166. package/dist/{chunk-6BJCDWSM.js → chunk-OH6B7ICF.js} +1 -1
  167. package/dist/{chunk-PUBA5B4M.js → chunk-OKQCTYLW.js} +13 -9
  168. package/dist/{chunk-B7AMNZTC.js → chunk-OKVEJAZM.js} +2 -2
  169. package/dist/{chunk-CH7BUBP3.js → chunk-OONTCDVO.js} +3 -2
  170. package/dist/{chunk-NVFNADTX.js → chunk-OP376ITX.js} +3 -3
  171. package/dist/{chunk-JDDM6C57.js → chunk-ORHX5E7L.js} +1 -1
  172. package/dist/{chunk-FMIYFHLE.js → chunk-OT5XROGM.js} +2 -2
  173. package/dist/{chunk-KTKIFXIP.js → chunk-OYDTMTRC.js} +1 -1
  174. package/dist/{chunk-XSUALA32.js → chunk-PHH6LI6T.js} +2 -2
  175. package/dist/{chunk-KILR4FBR.js → chunk-PIDFJGTO.js} +3 -3
  176. package/dist/{chunk-YLFCH3VA.js → chunk-Q7QD323J.js} +97 -26
  177. package/dist/{chunk-P4XLIPB7.js → chunk-QCMOD4Y4.js} +1 -1
  178. package/dist/{chunk-72V3S44T.js → chunk-QSYY4R6R.js} +24 -9
  179. package/dist/{chunk-F4BBMIPG.js → chunk-RBFPPNXS.js} +2 -2
  180. package/dist/{chunk-GSLFH4AI.js → chunk-RO5V6HOB.js} +3 -3
  181. package/dist/{chunk-L3VUW5M4.js → chunk-RSDDZSEG.js} +1 -1
  182. package/dist/{chunk-CYCIX7AW.js → chunk-RSONCRBT.js} +2 -2
  183. package/dist/{chunk-LFUBEHFW.js → chunk-RT57D7C4.js} +39 -1
  184. package/dist/{chunk-UXN4BICC.js → chunk-RVRM6KW5.js} +1 -1
  185. package/dist/{chunk-PRDDPQLC.js → chunk-RWN2YDZ4.js} +4 -4
  186. package/dist/{chunk-3SUPEE6H.js → chunk-S4YBVRQW.js} +3 -3
  187. package/dist/{chunk-MB47DRF5.js → chunk-S6X2K77B.js} +2 -2
  188. package/dist/{chunk-7UHZBVP3.js → chunk-TU63ZMMS.js} +60 -24
  189. package/dist/{chunk-ELCRJGCH.js → chunk-TXCK3FV2.js} +2 -2
  190. package/dist/{chunk-RZN2LEAK.js → chunk-UQUFBENW.js} +3 -3
  191. package/dist/{chunk-2PZTMSMG.js → chunk-UTCTAAI5.js} +5 -5
  192. package/dist/{chunk-YLB365YX.js → chunk-UTJN3XEG.js} +3 -3
  193. package/dist/{chunk-QNZ4562V.js → chunk-VA47XBUX.js} +1 -1
  194. package/dist/{chunk-AZSTIAVL.js → chunk-VBPYYJPC.js} +1 -1
  195. package/dist/{chunk-CHIUS5QB.js → chunk-WN4RLIQA.js} +3 -3
  196. package/dist/{chunk-CM7N5MBY.js → chunk-XDU6WLTZ.js} +5 -5
  197. package/dist/{chunk-LFBLQE2P.js → chunk-Y42HGHXW.js} +1 -1
  198. package/dist/{chunk-P3UX5EH4.js → chunk-YGSWRRFH.js} +3 -3
  199. package/dist/{chunk-FHIFTSPL.js → chunk-YZ3I3PYP.js} +7 -2
  200. package/dist/{chunk-UX2EO653.js → chunk-Z2RU4QH5.js} +1 -1
  201. package/dist/{chunk-UOPCVFVR.js → chunk-ZAUHCQYK.js} +11 -11
  202. package/dist/{chunk-ELEGH4DX.js → chunk-ZUGQPYUY.js} +51 -4
  203. package/dist/{cleanup-graph-garbage-VQAJ2RBT.js → cleanup-graph-garbage-2XC5QBRR.js} +8 -8
  204. package/dist/{cloud-sync-command-J7NEFUY7.js → cloud-sync-command-VFH5JQWR.js} +2 -2
  205. package/dist/{cloud-sync-db-init-KWEMNMGA.js → cloud-sync-db-init-BZPNGF57.js} +1 -1
  206. package/dist/{cloud-sync-shutdown-P63AUTUI.js → cloud-sync-shutdown-6NSOC423.js} +2 -2
  207. package/dist/{co-activation-7IHRPBZN.js → co-activation-FJRUJYTD.js} +2 -2
  208. package/dist/{co-occurrence-R5AG4OAU.js → co-occurrence-BT3MOXL7.js} +6 -6
  209. package/dist/{content-extractor-ZLXC6GNR.js → content-extractor-OGXETBOX.js} +2 -2
  210. package/dist/{conversation-entity-extractor-7FRKLLBD.js → conversation-entity-extractor-QNSSPQWA.js} +4 -4
  211. package/dist/conversations-retention-XTBFJBUM.js +166 -0
  212. package/dist/{crdt-sync-IFRZOEIS.js → crdt-sync-CGMV77SA.js} +1 -1
  213. package/dist/{crm-webhook-L2S63ASV.js → crm-webhook-P75KIKIW.js} +2 -2
  214. package/dist/{cto-delegation-gate-3WU7OHX7.js → cto-delegation-gate-MZFADWVI.js} +15 -15
  215. package/dist/{daemon-orchestration-3VQYKLOR.js → daemon-orchestration-JSG2HFW2.js} +23 -19
  216. package/dist/{doc-graph-extractor-YIR5E7OF.js → doc-graph-extractor-GT37KT2Q.js} +6 -6
  217. package/dist/{documents-QEHPTYIY.js → documents-HA2MACFK.js} +7 -7
  218. package/dist/{dreaming-LNFE7DTN.js → dreaming-B6IMGYKE.js} +19 -19
  219. package/dist/{employee-boot-brief-ZTXDYNWM.js → employee-boot-brief-WULO5JFD.js} +23 -23
  220. package/dist/{entity-boost-R5N6JWXD.js → entity-boost-DLWE2J6N.js} +1 -1
  221. package/dist/{exe-drift-WYSJVZFO.js → exe-drift-ORK26KWM.js} +3 -3
  222. package/dist/{exe-export-GOLNAEAV.js → exe-export-EESPIBX6.js} +8 -8
  223. package/dist/{exe-import-U4BSI6OH.js → exe-import-SJZRARKE.js} +8 -8
  224. package/dist/{exe-key-V42G3NGO.js → exe-key-ZRJ7J4KH.js} +87 -87
  225. package/dist/{exe-org-U4GLQ6OP.js → exe-org-BIPZMGIH.js} +67 -36
  226. package/dist/{exe-snapshot-U7ONBYNY.js → exe-snapshot-RC33YE4G.js} +21 -21
  227. package/dist/{fast-db-init-W3NGKAEU.js → fast-db-init-LSDW3AP3.js} +1 -1
  228. package/dist/{founder-context-ZSIBRVDM.js → founder-context-TVJUSBFS.js} +2 -2
  229. package/dist/{founder-monitor-envelope-L3IWZLFY.js → founder-monitor-envelope-VMQPVKCN.js} +1 -1
  230. package/dist/gateway/index.js +9 -9
  231. package/dist/{git-staleness-OF24QXFZ.js → git-staleness-ZU45ORBY.js} +2 -2
  232. package/dist/{global-procedures-WSIOWO43.js → global-procedures-TSKWM4YS.js} +3 -3
  233. package/dist/{graph-auto-extract-IEVVN3L3.js → graph-auto-extract-6TKT5DXT.js} +6 -6
  234. package/dist/{graph-query-JDZWAVCU.js → graph-query-WGVVDQIA.js} +1 -1
  235. package/dist/{graph-rag-BKAD2XQA.js → graph-rag-E75K54QT.js} +4 -4
  236. package/dist/{hook-integrity-TPWDGX2M.js → hook-integrity-33F4OTV6.js} +1 -1
  237. package/dist/{hook-prefetch-FD6VGJJA.js → hook-prefetch-ZSB2IAIW.js} +16 -16
  238. package/dist/hooks/bug-report-worker.js +19 -19
  239. package/dist/hooks/codex-stop-task-finalizer.js +21 -21
  240. package/dist/hooks/commit-complete.js +19 -19
  241. package/dist/hooks/error-recall.js +11 -11
  242. package/dist/hooks/exe-heartbeat-hook.js +5 -5
  243. package/dist/hooks/ingest-worker.js +8 -8
  244. package/dist/hooks/ingest.js +14 -14
  245. package/dist/hooks/instructions-loaded.js +7 -7
  246. package/dist/hooks/manifest.json +20 -20
  247. package/dist/hooks/notification.js +6 -6
  248. package/dist/hooks/post-compact.js +5 -5
  249. package/dist/hooks/post-tool-combined.js +12 -12
  250. package/dist/hooks/pre-compact.js +19 -19
  251. package/dist/hooks/pre-tool-use.js +2 -2
  252. package/dist/hooks/prompt-submit.js +35 -35
  253. package/dist/hooks/session-end.js +23 -23
  254. package/dist/hooks/session-start.js +26 -18
  255. package/dist/hooks/stop.js +22 -22
  256. package/dist/hooks/subagent-stop.js +22 -22
  257. package/dist/hooks/summary-worker.js +22 -22
  258. package/dist/index.js +25 -25
  259. package/dist/{installer-OTI5SA43.js → installer-PS2GWVJU.js} +7 -7
  260. package/dist/{installer-SRJGE4GU.js → installer-VE4Y7EYQ.js} +7 -7
  261. package/dist/{installer-NMOBSEZ2.js → installer-VTNQNGSP.js} +7 -7
  262. package/dist/{intercom-queue-4FFXCBHO.js → intercom-queue-GIE6URPU.js} +14 -14
  263. package/dist/lib/cloud-sync.js +14 -12
  264. package/dist/lib/consolidation.js +8 -8
  265. package/dist/lib/database.js +2 -2
  266. package/dist/lib/db-backup.js +1 -1
  267. package/dist/lib/db-write-worker-client.js +1 -1
  268. package/dist/lib/db-write-worker.js +11 -7
  269. package/dist/lib/db.js +2 -2
  270. package/dist/lib/delivery-truth.js +5 -1
  271. package/dist/lib/device-registry.js +1 -1
  272. package/dist/lib/employee-templates.js +4 -4
  273. package/dist/lib/employees.js +2 -2
  274. package/dist/lib/exe-daemon.js +90 -88
  275. package/dist/lib/hybrid-search.js +8 -8
  276. package/dist/lib/identity.js +2 -2
  277. package/dist/lib/license.js +8 -4
  278. package/dist/lib/messaging.js +15 -15
  279. package/dist/lib/post-tool-memory.js +6 -6
  280. package/dist/lib/registry-proxy.js +1 -1
  281. package/dist/lib/reminders.js +3 -3
  282. package/dist/lib/schedules.js +7 -7
  283. package/dist/lib/session-registry.js +4 -4
  284. package/dist/lib/skill-learning.js +8 -8
  285. package/dist/lib/status-brief.js +2 -2
  286. package/dist/lib/store.js +6 -6
  287. package/dist/lib/task-router.js +3 -3
  288. package/dist/lib/tasks.js +16 -16
  289. package/dist/lib/tmux-routing.js +14 -14
  290. package/dist/lib/tmux-status.js +3 -1
  291. package/dist/lib/token-spend.js +3 -3
  292. package/dist/{license-gate-R4JWTWM4.js → license-gate-JOBLFMWY.js} +3 -3
  293. package/dist/{license-recheck-3MBJ4IJX.js → license-recheck-BZ32WRVP.js} +1 -1
  294. package/dist/{license-sync-BVSG3WMW.js → license-sync-AXGGCZSG.js} +119 -8
  295. package/dist/{local-secret-inventory-JWNBHZZ4.js → local-secret-inventory-MJT7NJLY.js} +2 -2
  296. package/dist/mcp/register-tools.js +86 -86
  297. package/dist/mcp/server.js +86 -86
  298. package/dist/mcp/tools/complete-reminder.js +4 -4
  299. package/dist/mcp/tools/create-reminder.js +4 -4
  300. package/dist/mcp/tools/create-task.js +19 -19
  301. package/dist/mcp/tools/deactivate-behavior.js +10 -10
  302. package/dist/mcp/tools/list-reminders.js +4 -4
  303. package/dist/mcp/tools/list-tasks.js +19 -19
  304. package/dist/mcp/tools/send-message.js +18 -18
  305. package/dist/mcp/tools/update-task.js +17 -17
  306. package/dist/{mcp-child-registry-TIZERM7O.js → mcp-child-registry-5VUG5ATZ.js} +1 -1
  307. package/dist/{mcp-http-config-VUMSFWFH.js → mcp-http-config-KC732KUS.js} +5 -5
  308. package/dist/{mcp-session-identity-DZHWEJRV.js → mcp-session-identity-BL4MEFRI.js} +14 -14
  309. package/dist/{memory-cards-JVXTMSAT.js → memory-cards-VY5SUEOT.js} +6 -6
  310. package/dist/{memory-graph-extractor-PPBJMYFJ.js → memory-graph-extractor-KUAYIBYB.js} +7 -7
  311. package/dist/{memory-poisoning-defense-K5Q74XQ4.js → memory-poisoning-defense-VLLYEI7P.js} +2 -2
  312. package/dist/{memory-pressure-watchdog-YMJH5CSA.js → memory-pressure-watchdog-Y2WUPNXY.js} +15 -15
  313. package/dist/{memory-reflection-7BZWIHRE.js → memory-reflection-DZRRYMWH.js} +6 -6
  314. package/dist/{notification-ledger-XRAXL5OI.js → notification-ledger-VQKLAZMN.js} +15 -15
  315. package/dist/{notifications-JE3PX55X.js → notifications-NBCKXUKB.js} +14 -14
  316. package/dist/{orchestration-events-JCQ5F5IJ.js → orchestration-events-UE4RLVWY.js} +3 -3
  317. package/dist/{orchestrator-X65INDTR.js → orchestrator-YCS6W4OS.js} +16 -16
  318. package/dist/{org-brief-session-3PQ22UIX.js → org-brief-session-JQHHCCGX.js} +7 -7
  319. package/dist/{org-consent-policy-VGELJ7K7.js → org-consent-policy-DWGDWXMB.js} +1 -1
  320. package/dist/{org-join-6TO5ZYUZ.js → org-join-OFD63DUX.js} +3 -3
  321. package/dist/{org-key-admin-XHYVRRAZ.js → org-key-admin-DFLTIXHU.js} +4 -4
  322. package/dist/{org-membership-Y7T2BS57.js → org-membership-CLP2LDI5.js} +1 -1
  323. package/dist/{org-partner-config-OP4NEUNF.js → org-partner-config-3SEWKDDO.js} +2 -2
  324. package/dist/{org-partner-runtime-YNVUNT2R.js → org-partner-runtime-RC3MYK6L.js} +7 -7
  325. package/dist/{org-row-visibility-JBBXNYXD.js → org-row-visibility-H4CNVBW3.js} +1 -1
  326. package/dist/{pipeline-router-EIBB7QNG.js → pipeline-router-7GDTJB5E.js} +3 -3
  327. package/dist/{plan-limits-MEWXYLEN.js → plan-limits-GCSBJJRA.js} +5 -5
  328. package/dist/{pre-tool-use-impl-C6KJY22W.js → pre-tool-use-impl-DYGSDG3M.js} +91 -57
  329. package/dist/{project-name-UYORSNGE.js → project-name-RHWUY3AE.js} +3 -3
  330. package/dist/{projection-worker-WYFDWS57.js → projection-worker-6CDL4N2W.js} +2 -2
  331. package/dist/{prospective-memory-E6XBQFJA.js → prospective-memory-JDURSUXI.js} +2 -2
  332. package/dist/{push-notifications-M7YU63FY.js → push-notifications-MP3T4GH4.js} +15 -15
  333. package/dist/{reproject-worktree-memories-B5XMGJSD.js → reproject-worktree-memories-WTXQLSLM.js} +14 -14
  334. package/dist/{reranker-SRA4BR7N.js → reranker-FRNSY3NG.js} +1 -1
  335. package/dist/{retrieval-health-P2JPZUPV.js → retrieval-health-EXFGOVKR.js} +1 -1
  336. package/dist/{review-polling-KQPN7IQE.js → review-polling-BFXFQOMG.js} +15 -15
  337. package/dist/runtime/index.js +18 -18
  338. package/dist/{session-events-6LDDKKY3.js → session-events-SKRFRHCQ.js} +15 -15
  339. package/dist/{session-kill-telemetry-5DSRGWCL.js → session-kill-telemetry-HP3FHU55.js} +15 -15
  340. package/dist/{session-scope-XG5R3P3D.js → session-scope-4U36PKCC.js} +14 -14
  341. package/dist/{setup-wizard-7QFLZIKT.js → setup-wizard-KHU7Y623.js} +1 -1
  342. package/dist/{skill-refinement-I5RMAHSC.js → skill-refinement-YWHALWL4.js} +3 -3
  343. package/dist/{stack-generate-manifest-AKMZ3AUX.js → stack-generate-manifest-L44KUZ62.js} +6 -6
  344. package/dist/{stack-promote-34CE2HHF.js → stack-promote-RW7WAQHA.js} +6 -6
  345. package/dist/{stack-release-5PGWV5D4.js → stack-release-7RU2SH65.js} +131 -25
  346. package/dist/{stack-update-ZQQ5YYPJ.js → stack-update-AJD3FZ4U.js} +5 -5
  347. package/dist/{steward-gate-AQJ6KT2C.js → steward-gate-Y4QFNWED.js} +3 -3
  348. package/dist/{subagent-brief-injection-3GU7YAWY.js → subagent-brief-injection-ADDSO74U.js} +26 -26
  349. package/dist/{subagent-spawn-ledger-52I66CLW.js → subagent-spawn-ledger-OI23OT4I.js} +1 -1
  350. package/dist/{support-inbox-NY5TB3FN.js → support-inbox-LSCNMSCF.js} +10 -10
  351. package/dist/{support-outbox-KNI3FR3G.js → support-outbox-MOZSZTI6.js} +2 -2
  352. package/dist/{task-enforcement-CAA6D2MH.js → task-enforcement-W2WDBAIR.js} +15 -15
  353. package/dist/{task-request-inbox-QBZVU66E.js → task-request-inbox-4F3VB2B4.js} +1 -1
  354. package/dist/{task-scope-NHXB4ZRN.js → task-scope-VRVAHE23.js} +20 -14
  355. package/dist/{tasks-crud-JHSWL5NM.js → tasks-crud-JHADSQ4R.js} +14 -14
  356. package/dist/{tasks-notify-7PBE4U7T.js → tasks-notify-KSJORZOP.js} +15 -15
  357. package/dist/{tasks-review-PPPVEE62.js → tasks-review-CBHI5OT7.js} +16 -14
  358. package/dist/{telemetry-upload-YU2VRNHX.js → telemetry-upload-LRM4CG5G.js} +7 -7
  359. package/dist/{token-budget-QCMWKG3K.js → token-budget-IIZGO4PI.js} +3 -3
  360. package/dist/{tool-telemetry-LTOIC64I.js → tool-telemetry-4U4CP4O6.js} +1 -1
  361. package/dist/tui/App.js +47 -25
  362. package/dist/{tui-data-NDBXD6U7.js → tui-data-QGL5G67O.js} +18 -18
  363. package/dist/{update-support-BMJM4NG7.js → update-support-NSJLA64L.js} +13 -13
  364. package/dist/{whatsapp-QQLDAHUX.js → whatsapp-LLGB5RMQ.js} +1 -1
  365. package/dist/{wiki-acl-W6WDCVCP.js → wiki-acl-PIYYQZZX.js} +1 -1
  366. package/dist/{work-claims-6DM32MGO.js → work-claims-3YIDXG3Q.js} +3 -3
  367. package/dist/{work-state-heartbeat-HG7D4AWJ.js → work-state-heartbeat-PFULN6VV.js} +1 -1
  368. package/dist/{workflow-engine-ZWC6CCXE.js → workflow-engine-XMMWRP4D.js} +2 -2
  369. package/dist/{worktree-EMQCPGFE.js → worktree-WILU76HY.js} +4 -4
  370. package/dist/{worktree-sweep-XVUJZBXV.js → worktree-sweep-6ZGHXF3A.js} +5 -5
  371. package/package.json +7 -5
  372. package/release-notes.json +15 -37
  373. package/stack.release.json +11 -11
  374. package/dist/conversations-retention-C4BLKFEL.js +0 -54
  375. /package/dist/{chunk-GIRD7O5X.js → chunk-B7ACMQ2K.js} +0 -0
  376. /package/dist/{chunk-U2D6PJ5T.js → chunk-DOKN63TW.js} +0 -0
  377. /package/dist/{chunk-AJK2PVQW.js → chunk-F47NNIP3.js} +0 -0
  378. /package/dist/{chunk-VROK4X2L.js → chunk-GXQPJA76.js} +0 -0
  379. /package/dist/{chunk-TKAU7IJ2.js → chunk-GY2KEOVK.js} +0 -0
  380. /package/dist/{chunk-DN3ZR3UE.js → chunk-IVQGBWJI.js} +0 -0
  381. /package/dist/{chunk-JRIH6I7D.js → chunk-NQ3ZAYJL.js} +0 -0
  382. /package/dist/{chunk-XDVOGDBC.js → chunk-P2XGESMD.js} +0 -0
  383. /package/dist/{chunk-AWWDKF22.js → chunk-XK7JO45D.js} +0 -0
  384. /package/dist/{chunk-DZN7SDY2.js → chunk-YBD3O77S.js} +0 -0
  385. /package/dist/{chunk-M4XY4JRK.js → chunk-YKTJBFWH.js} +0 -0
  386. /package/dist/{core-memory-O6D5UC3T.js → core-memory-EWFVZB2X.js} +0 -0
  387. /package/dist/{memory-isolation-EBFFC6HF.js → memory-isolation-N3QQAF27.js} +0 -0
  388. /package/dist/{oauth-server-ZKBUHDFI.js → oauth-server-GTRPZOXH.js} +0 -0
  389. /package/dist/{project-boot-VEYFCCSL.js → project-boot-BDMMGYZG.js} +0 -0
@@ -32,29 +32,29 @@ import {
32
32
  serviceSelectionPath,
33
33
  verifyManifestImagesAvailable,
34
34
  warnUnmanagedManifestServices
35
- } from "../chunk-ZBPZDADW.js";
35
+ } from "../chunk-NHUI52BC.js";
36
36
  import "../chunk-EC5H53YD.js";
37
37
  import {
38
38
  runVerifyStack
39
- } from "../chunk-AGC2V7JS.js";
39
+ } from "../chunk-B6CBN6EF.js";
40
40
  import {
41
41
  assertPreflightGate,
42
42
  runPreflightOnManifest
43
- } from "../chunk-PLII76NJ.js";
44
- import "../chunk-C5HUMAA7.js";
43
+ } from "../chunk-JBUCA4OX.js";
44
+ import "../chunk-B7WVYLAQ.js";
45
45
  import {
46
46
  preDeployBackup
47
47
  } from "../chunk-5DMAMQNU.js";
48
48
  import {
49
49
  logResult,
50
50
  runHealthGate
51
- } from "../chunk-AHESD3KW.js";
51
+ } from "../chunk-AEEW4PCH.js";
52
52
  import "../chunk-L25OAFOU.js";
53
- import "../chunk-LFUBEHFW.js";
53
+ import "../chunk-RT57D7C4.js";
54
54
  import "../chunk-FTZET5YX.js";
55
- import "../chunk-TNS63ATU.js";
55
+ import "../chunk-5SPQBSKC.js";
56
56
  import "../chunk-A7XLR3K7.js";
57
- import "../chunk-DZN7SDY2.js";
57
+ import "../chunk-YBD3O77S.js";
58
58
  import {
59
59
  SYSTEMD_DAEMON_UNIT,
60
60
  SYSTEMD_WATCHDOG_UNIT
@@ -251,6 +251,27 @@ function checkGoTrueSecurity(envContent) {
251
251
  }
252
252
  return { check: "gotrue_security", status: "pass", message: "GoTrue auth settings are secure" };
253
253
  }
254
+ function smtpConfigFindings({
255
+ smtpUser,
256
+ smtpPass,
257
+ smtpFrom,
258
+ smtpPortRaw,
259
+ credentialsAlreadyChecked = false
260
+ }) {
261
+ const findings = [];
262
+ if (!credentialsAlreadyChecked) {
263
+ if (smtpUser === "") findings.push("SMTP_USER is empty \u2014 GoTrue cannot authenticate to the SMTP server");
264
+ if (smtpPass === "") findings.push("SMTP_PASS is empty \u2014 GoTrue cannot authenticate to the SMTP server");
265
+ }
266
+ if (smtpFrom === "") findings.push("SMTP_FROM is empty \u2014 GoTrue needs a sender address");
267
+ const portNum = Number(smtpPortRaw);
268
+ if (smtpPortRaw !== "" && (!Number.isInteger(portNum) || portNum <= 0 || portNum > 65535)) {
269
+ findings.push(`SMTP_PORT="${smtpPortRaw}" is not a valid port`);
270
+ } else if (![25, 465, 587, 2525].includes(portNum)) {
271
+ findings.push(`SMTP_PORT=${portNum} is unusual (typical: 587 STARTTLS / 465 implicit TLS / 25) \u2014 confirm the provider expects it`);
272
+ }
273
+ return findings;
274
+ }
254
275
  function checkSmtpRecovery(envContent) {
255
276
  const env = parseEnvFile(envContent);
256
277
  const autoconfirm = env.get("GOTRUE_MAILER_AUTOCONFIRM");
@@ -260,7 +281,15 @@ function checkSmtpRecovery(envContent) {
260
281
  const smtpFrom = (env.get("SMTP_FROM") ?? env.get("GOTRUE_SMTP_ADMIN_EMAIL") ?? "").trim();
261
282
  const smtpPortRaw = (env.get("SMTP_PORT") ?? env.get("GOTRUE_SMTP_PORT") ?? "587").trim();
262
283
  if (autoconfirm === "true") {
263
- return { check: "smtp_recovery", status: "pass", message: "GOTRUE_MAILER_AUTOCONFIRM=true \u2014 auth email flows disabled by design" };
284
+ if (smtpHost === "") {
285
+ return { check: "smtp_recovery", status: "pass", message: "GOTRUE_MAILER_AUTOCONFIRM=true and no SMTP host configured \u2014 auth email flows disabled by design" };
286
+ }
287
+ const findings = smtpConfigFindings({ smtpUser, smtpPass, smtpFrom, smtpPortRaw });
288
+ return {
289
+ check: "smtp_recovery",
290
+ status: "warn",
291
+ message: "GOTRUE_MAILER_AUTOCONFIRM=true while SMTP_HOST is set \u2014 these contradict: email flows are disabled, yet an SMTP server is configured. This is intentional on an invite-only stack; on a stack that was switched from --no-email to SMTP it means recovery mail is off and nobody was told. " + (findings.length > 0 ? `The SMTP config here is ALSO incomplete: ${findings.join("; ")}. Fix those before setting GOTRUE_MAILER_AUTOCONFIRM=false.` : "The SMTP config itself looks complete, so setting GOTRUE_MAILER_AUTOCONFIRM=false would enable recovery mail.")
292
+ };
264
293
  }
265
294
  if (smtpHost === "") {
266
295
  return {
@@ -280,14 +309,7 @@ function checkSmtpRecovery(envContent) {
280
309
  message: `SMTP_HOST is set but ${missingCreds.join(" and ")} ${isPlural ? "are" : "is"} empty \u2014 GoTrue cannot authenticate to the SMTP server, so recovery/signup emails will SILENTLY never send. Set ${missingCreds.join(", ")} in .env (or GOTRUE_MAILER_AUTOCONFIRM=true to disable email flows).`
281
310
  };
282
311
  }
283
- const warns = [];
284
- if (smtpFrom === "") warns.push("SMTP_FROM is empty \u2014 GoTrue needs a sender address");
285
- const portNum = Number(smtpPortRaw);
286
- if (smtpPortRaw !== "" && (!Number.isInteger(portNum) || portNum <= 0 || portNum > 65535)) {
287
- warns.push(`SMTP_PORT="${smtpPortRaw}" is not a valid port`);
288
- } else if (![25, 465, 587, 2525].includes(portNum)) {
289
- warns.push(`SMTP_PORT=${portNum} is unusual (typical: 587 STARTTLS / 465 implicit TLS / 25) \u2014 confirm the provider expects it`);
290
- }
312
+ const warns = smtpConfigFindings({ smtpUser, smtpPass, smtpFrom, smtpPortRaw, credentialsAlreadyChecked: true });
291
313
  if (warns.length > 0) {
292
314
  return { check: "smtp_recovery", status: "warn", message: `SMTP host + credentials are set, but: ${warns.join("; ")}.` };
293
315
  }
@@ -707,17 +729,101 @@ function collectPendingImageMovements(rendered, deployed, servicesToRecreate) {
707
729
  }
708
730
  return movements.sort((a, b) => a.service.localeCompare(b.service));
709
731
  }
710
- function collectRenderedEnvDrift(templateConfigJson, liveConfigJson) {
711
- const template = parseComposeServiceEnvKeys(templateConfigJson);
712
- const live = parseComposeServiceEnvKeys(liveConfigJson);
732
+ function collectRenderedEnvDrift(intendedConfigJson, deployed) {
733
+ const intended = parseComposeServiceEnvKeys(intendedConfigJson);
713
734
  const drift = [];
714
- for (const [service, keys] of template) {
715
- const liveKeys = live.get(service);
716
- if (!liveKeys) continue;
717
- const missingKeys = [...keys].filter((k) => !liveKeys.has(k)).sort();
735
+ const unverified = [];
736
+ for (const [service, keys] of intended) {
737
+ if (!deployed.deployedServices.has(service)) continue;
738
+ const containerKeys = deployed.envKeys.get(service);
739
+ if (!containerKeys) {
740
+ unverified.push(service);
741
+ continue;
742
+ }
743
+ const missingKeys = [...keys].filter((k) => !containerKeys.has(k)).sort();
718
744
  if (missingKeys.length > 0) drift.push({ service, missingKeys });
719
745
  }
720
- return drift.sort((a, b) => a.service.localeCompare(b.service));
746
+ return {
747
+ drift: drift.sort((a, b) => a.service.localeCompare(b.service)),
748
+ unverified: unverified.sort()
749
+ };
750
+ }
751
+ var DEPLOYED_ENV_INSPECT_FORMAT = '{{index .Config.Labels "com.docker.compose.service"}} {{json .Config.Env}}';
752
+ function deployedEnvInspectArgs(containerIds) {
753
+ return ["inspect", "--format", DEPLOYED_ENV_INSPECT_FORMAT, ...containerIds];
754
+ }
755
+ function parseDeployedContainerIds(stdout) {
756
+ const ids = /* @__PURE__ */ new Map();
757
+ for (const line of stdout.split("\n")) {
758
+ const trimmed = line.trim();
759
+ if (!trimmed) continue;
760
+ try {
761
+ const parsed = JSON.parse(trimmed);
762
+ for (const entry of Array.isArray(parsed) ? parsed : [parsed]) {
763
+ const row = entry;
764
+ if (row?.Service && row.ID) ids.set(row.Service, row.ID);
765
+ }
766
+ } catch {
767
+ }
768
+ }
769
+ return ids;
770
+ }
771
+ function parseDeployedServices(stdout) {
772
+ const services = /* @__PURE__ */ new Set();
773
+ for (const line of stdout.split("\n")) {
774
+ const trimmed = line.trim();
775
+ if (!trimmed) continue;
776
+ try {
777
+ const parsed = JSON.parse(trimmed);
778
+ for (const entry of Array.isArray(parsed) ? parsed : [parsed]) {
779
+ const row = entry;
780
+ if (row?.Service) services.add(row.Service);
781
+ }
782
+ } catch {
783
+ }
784
+ }
785
+ return services;
786
+ }
787
+ function parseContainerEnvKeys(stdout) {
788
+ const out = /* @__PURE__ */ new Map();
789
+ for (const line of stdout.split("\n")) {
790
+ const trimmed = line.trim();
791
+ if (!trimmed) continue;
792
+ const tab = trimmed.indexOf(" ");
793
+ if (tab === -1) continue;
794
+ const service = trimmed.slice(0, tab).trim();
795
+ if (!service) continue;
796
+ let entries;
797
+ try {
798
+ entries = JSON.parse(trimmed.slice(tab + 1));
799
+ } catch {
800
+ continue;
801
+ }
802
+ if (!Array.isArray(entries)) continue;
803
+ const keys = /* @__PURE__ */ new Set();
804
+ for (const entry of entries) keys.add(String(entry).split("=")[0]);
805
+ out.set(service, keys);
806
+ }
807
+ return out;
808
+ }
809
+ function readDeployedServiceEnv(capture, psStdout) {
810
+ const deployedServices = parseDeployedServices(psStdout);
811
+ const ids = parseDeployedContainerIds(psStdout);
812
+ if (ids.size === 0) return { deployedServices, envKeys: /* @__PURE__ */ new Map() };
813
+ let inspected = /* @__PURE__ */ new Map();
814
+ try {
815
+ inspected = parseContainerEnvKeys(capture(deployedEnvInspectArgs([...ids.values()])));
816
+ } catch (err) {
817
+ console.warn(
818
+ `[stack-config-update] \u26A0 Could not read container environments (${err instanceof Error ? err.message : String(err)}) \u2014 the rendered-env check is UNVERIFIED this run.`
819
+ );
820
+ }
821
+ const envKeys = /* @__PURE__ */ new Map();
822
+ for (const service of deployedServices) {
823
+ const keys = inspected.get(service);
824
+ if (keys) envKeys.set(service, keys);
825
+ }
826
+ return { deployedServices, envKeys };
721
827
  }
722
828
  function parseComposeServiceEnvKeys(configJson) {
723
829
  const out = /* @__PURE__ */ new Map();
@@ -831,6 +937,12 @@ Set them in ${envFile}, then re-run.`
831
937
  );
832
938
  }
833
939
  }
940
+ var STACK_VERSION_SOURCE_LABEL = {
941
+ "target-flag": "--target (operator-supplied)",
942
+ "lock-file": ".exe-stack-lock.json (what the updater last committed)",
943
+ "env-file": "STACK_VERSION in the stack .env",
944
+ "manifest-latest": "the manifest's LATEST release \u2014 no deployed version resolved"
945
+ };
834
946
  function defaultComposeCapture(args) {
835
947
  const result = spawnSync2("docker", args, { encoding: "utf8", timeout: 12e4 });
836
948
  if (result.status !== 0) {
@@ -851,7 +963,7 @@ async function runStackConfigUpdate(options) {
851
963
  `Config-only delivery aborted: this mode UPDATES an existing install, and ${!existsSync2(options.composeFile) ? options.composeFile : options.envFile} does not exist. Run a normal stack update to install.`
852
964
  );
853
965
  }
854
- const { release, stackVersion } = await resolveSignedRelease(options);
966
+ const { release, stackVersion, stackVersionSource } = await resolveSignedRelease(options);
855
967
  const stagedComposeRaw = readFileSync2(templatePath, "utf8");
856
968
  const stagedAssetDigests = collectConfigAssetDigests(path2.dirname(templatePath));
857
969
  assertStagedConfigMatchesManifest({
@@ -893,8 +1005,34 @@ async function runStackConfigUpdate(options) {
893
1005
  });
894
1006
  const composeChanged = stagedComposeRaw !== currentComposeRaw;
895
1007
  if (!composeChanged && assetChanges.length === 0) {
896
- console.log("[stack-config-update] Host compose template and config assets already match the packaged config \u2014 nothing to deliver.");
897
- return { status: "no-change", stackVersion, changed: [], added: [], removed: [], envDrift: [], assets: [] };
1008
+ const envVerdict = collectRenderedEnvDrift(
1009
+ beforeConfigJson,
1010
+ readDeployedServiceEnv(capture, capture([...composeArgs, ...DEPLOYED_IMAGE_PS_ARGS]))
1011
+ );
1012
+ console.log(
1013
+ "[stack-config-update] Host compose template and config assets already match the packaged config \u2014 nothing to DELIVER. That is a statement about FILES ON DISK."
1014
+ );
1015
+ for (const d of envVerdict.drift) {
1016
+ console.warn(
1017
+ `[stack-config-update] \u26A0 CONTAINER DRIFT: ${d.service} is RUNNING without env key(s) the current config renders: ${d.missingKeys.join(", ")}. The files are current; the container is not. Recreate that service \u2014 config-only delivery has nothing to write here.`
1018
+ );
1019
+ }
1020
+ if (envVerdict.unverified.length > 0) {
1021
+ console.warn(
1022
+ `[stack-config-update] \u26A0 UNVERIFIED: the container environment could not be read for ${envVerdict.unverified.join(", ")}, so "already current" is asserted about files alone for them.`
1023
+ );
1024
+ }
1025
+ return {
1026
+ status: "no-change",
1027
+ stackVersion,
1028
+ stackVersionSource,
1029
+ changed: [],
1030
+ added: [],
1031
+ removed: [],
1032
+ envDrift: envVerdict.drift,
1033
+ envUnverified: envVerdict.unverified,
1034
+ assets: []
1035
+ };
898
1036
  }
899
1037
  console.log(`[stack-config-update] Compose template: ${composeChanged ? "REFRESH" : "already current"}`);
900
1038
  if (assetChanges.length > 0) {
@@ -925,12 +1063,13 @@ async function runStackConfigUpdate(options) {
925
1063
  beforeHashes,
926
1064
  parseComposeConfigHashes(capture([...scratchArgs, "config", "--hash=*"]))
927
1065
  );
928
- const envDrift = collectRenderedEnvDrift(afterConfigJson, beforeConfigJson);
1066
+ const psJson = capture([...composeArgs, ...DEPLOYED_IMAGE_PS_ARGS]);
1067
+ const envVerdict = collectRenderedEnvDrift(afterConfigJson, readDeployedServiceEnv(capture, psJson));
929
1068
  const assetServices = assetChanges.length > 0 ? servicesMountingPaths(afterConfigJson, configDir, assetChanges.map((a) => a.rel)) : [];
930
1069
  const wouldRecreate = [.../* @__PURE__ */ new Set([...changeSet.changed, ...assetServices])].sort();
931
1070
  const pending = collectPendingImageMovements(
932
1071
  parseComposeImages(afterConfigJson),
933
- parseDeployedImages(capture([...composeArgs, ...DEPLOYED_IMAGE_PS_ARGS])),
1072
+ parseDeployedImages(psJson),
934
1073
  wouldRecreate
935
1074
  );
936
1075
  console.log("[stack-config-update] DRY RUN \u2014 nothing written, no container touched.");
@@ -940,7 +1079,16 @@ async function runStackConfigUpdate(options) {
940
1079
  console.log(` services added by the template: ${changeSet.added.join(", ") || "none"}`);
941
1080
  console.log(` services no longer in the template: ${changeSet.removed.join(", ") || "none"}`);
942
1081
  console.log(` services recreated for a changed asset: ${assetServices.join(", ") || "none"}`);
943
- for (const d of envDrift) console.log(` rendered env keys added to ${d.service}: ${d.missingKeys.join(", ")}`);
1082
+ for (const d of envVerdict.drift) {
1083
+ console.log(
1084
+ ` env keys the ${d.service} CONTAINER is missing and this config renders: ${d.missingKeys.join(", ")}`
1085
+ );
1086
+ }
1087
+ if (envVerdict.unverified.length > 0) {
1088
+ console.log(
1089
+ ` \u26A0 UNVERIFIED \u2014 container environment unreadable for: ${envVerdict.unverified.join(", ")}. No rendered-env verdict was reached for those services; this is NOT "no drift".`
1090
+ );
1091
+ }
944
1092
  if (assetChanges.length > 0 && assetServices.length === 0) {
945
1093
  console.log(" \u26A0 assets would be delivered that NO service mounts \u2014 they would not be served.");
946
1094
  }
@@ -956,10 +1104,12 @@ async function runStackConfigUpdate(options) {
956
1104
  // for a PENDING movement exactly as it does for a rendered one.
957
1105
  status: movements.length > 0 || pending.length > 0 ? "aborted" : "no-change",
958
1106
  stackVersion,
1107
+ stackVersionSource,
959
1108
  changed: wouldRecreate,
960
1109
  added: changeSet.added,
961
1110
  removed: changeSet.removed,
962
- envDrift,
1111
+ envDrift: envVerdict.drift,
1112
+ envUnverified: envVerdict.unverified,
963
1113
  assets: assetChanges
964
1114
  };
965
1115
  } finally {
@@ -990,20 +1140,26 @@ async function resolveSignedRelease(options) {
990
1140
  );
991
1141
  reportStackManifestSource(loaded);
992
1142
  const lockFile = options.lockFile ?? path2.join(path2.dirname(options.envFile), ".exe-stack-lock.json");
993
- const deployedVersion = readCurrentStackVersion(lockFile) ?? readEnvValue(readFileSync2(options.envFile, "utf8"), "STACK_VERSION");
1143
+ const lockVersion = readCurrentStackVersion(lockFile);
1144
+ const envVersion = lockVersion ? void 0 : readEnvValue(readFileSync2(options.envFile, "utf8"), "STACK_VERSION");
1145
+ const deployedVersion = lockVersion ?? envVersion;
994
1146
  if (!options.targetVersion && !deployedVersion) {
995
1147
  console.warn(
996
1148
  `[stack-config-update] \u26A0 Could not determine the DEPLOYED stack version: ${lockFile} records none and ${options.envFile} carries no STACK_VERSION. Falling back to the manifest's latest release (${loaded.manifest.latest}) \u2014 its config digests and the deploy audit will describe THAT release, not necessarily what this host runs. Pass --target to name the deployed version.`
997
1149
  );
998
1150
  }
999
1151
  const stackVersion = options.targetVersion ?? deployedVersion ?? loaded.manifest.latest;
1152
+ const stackVersionSource = options.targetVersion ? "target-flag" : lockVersion ? "lock-file" : envVersion ? "env-file" : "manifest-latest";
1153
+ console.log(
1154
+ `[stack-config-update] Deployed stack version ${stackVersion} \u2014 source: ${STACK_VERSION_SOURCE_LABEL[stackVersionSource]}` + (stackVersionSource === "target-flag" ? "." : ". UNVERIFIED against the running containers: nothing stamps a deployed stack version on a container, so this is a claim about a FILE.")
1155
+ );
1000
1156
  const release = loaded.manifest.stacks[stackVersion];
1001
1157
  if (!release) {
1002
1158
  console.warn(
1003
1159
  `[stack-config-update] The signed manifest has no release entry for the deployed version ${stackVersion}; config provenance cannot be checked against it.`
1004
1160
  );
1005
1161
  }
1006
- return { manifest: loaded.manifest, release, stackVersion };
1162
+ return { manifest: loaded.manifest, release, stackVersion, stackVersionSource };
1007
1163
  }
1008
1164
  function readEnvValue(envRaw, key) {
1009
1165
  for (const line of envRaw.split("\n")) {
@@ -1474,6 +1630,19 @@ async function main(args = process.argv.slice(2)) {
1474
1630
  }
1475
1631
  const result2 = await runStackConfigUpdate(configOnlyOptionsFromCli(opts, readOnly));
1476
1632
  console.log(`[stack-config-update] ${result2.status} \u2014 ${result2.changed.length} service(s) recreated, ${result2.assets.length} asset(s) delivered.`);
1633
+ for (const d of result2.envDrift) {
1634
+ console.log(
1635
+ `[stack-config-update] \u26A0 CONTAINER DRIFT \u2014 ${d.service} is running without env key(s) this config renders: ${d.missingKeys.join(", ")}`
1636
+ );
1637
+ }
1638
+ if (result2.envUnverified.length > 0) {
1639
+ console.log(
1640
+ `[stack-config-update] \u26A0 UNVERIFIED \u2014 no container env verdict for ${result2.envUnverified.join(", ")}. This is NOT "no drift".`
1641
+ );
1642
+ }
1643
+ console.log(
1644
+ `[stack-config-update] Deployed version ${result2.stackVersion} claimed from ${STACK_VERSION_SOURCE_LABEL[result2.stackVersionSource]}.`
1645
+ );
1477
1646
  return;
1478
1647
  }
1479
1648
  let usingPackagedCheckTemplates = false;
@@ -7,8 +7,8 @@ import {
7
7
  checkSsoSessionContract,
8
8
  parseComposeServiceNames,
9
9
  runVerifyStack
10
- } from "../chunk-AGC2V7JS.js";
11
- import "../chunk-LFUBEHFW.js";
10
+ } from "../chunk-B6CBN6EF.js";
11
+ import "../chunk-RT57D7C4.js";
12
12
  import "../chunk-FTZET5YX.js";
13
13
  import "../chunk-6Y4B3QF6.js";
14
14
  import "../chunk-MLKGABMK.js";
@@ -8,7 +8,7 @@ import {
8
8
  logResult,
9
9
  main,
10
10
  runHealthGate
11
- } from "../chunk-AHESD3KW.js";
11
+ } from "../chunk-AEEW4PCH.js";
12
12
  import "../chunk-MLKGABMK.js";
13
13
  export {
14
14
  checkCRM,
@@ -3,12 +3,12 @@ import {
3
3
  bumpBootGeneration,
4
4
  getBootGeneration,
5
5
  getCachedBootGeneration
6
- } from "./chunk-JFTUAV4J.js";
7
- import "./chunk-GL47M7NY.js";
6
+ } from "./chunk-6EUXAOZQ.js";
7
+ import "./chunk-2GUT5CWI.js";
8
8
  import "./chunk-BBMTVAE3.js";
9
9
  import "./chunk-TKDITWDN.js";
10
10
  import "./chunk-5YEUPUV4.js";
11
- import "./chunk-72V3S44T.js";
11
+ import "./chunk-QSYY4R6R.js";
12
12
  import "./chunk-YYB5PMTK.js";
13
13
  import "./chunk-L5CGXEZC.js";
14
14
  import "./chunk-QH5ZQ5SJ.js";
@@ -1,25 +1,25 @@
1
1
  import {
2
2
  queryTaskRows
3
- } from "./chunk-7UHZBVP3.js";
4
- import "./chunk-6BJCDWSM.js";
5
- import "./chunk-JDDM6C57.js";
3
+ } from "./chunk-TU63ZMMS.js";
4
+ import "./chunk-OH6B7ICF.js";
5
+ import "./chunk-ORHX5E7L.js";
6
6
  import "./chunk-ZKGWHT56.js";
7
- import "./chunk-QNZ4562V.js";
7
+ import "./chunk-VA47XBUX.js";
8
8
  import "./chunk-WT4RI36X.js";
9
9
  import "./chunk-E23LNUWJ.js";
10
10
  import "./chunk-TDF2XKLK.js";
11
11
  import "./chunk-EIKATSE4.js";
12
12
  import "./chunk-MJCSEIFI.js";
13
- import "./chunk-ALRHGEAJ.js";
14
- import "./chunk-PUBA5B4M.js";
13
+ import "./chunk-CI5R7QV7.js";
14
+ import "./chunk-OKQCTYLW.js";
15
15
  import "./chunk-VI4ATC6I.js";
16
16
  import "./chunk-A27Q27CT.js";
17
- import "./chunk-LSNBTGW4.js";
17
+ import "./chunk-N5STNP44.js";
18
18
  import "./chunk-T5SM4RXY.js";
19
- import "./chunk-VJEJ7JNB.js";
19
+ import "./chunk-OFCTRALK.js";
20
20
  import "./chunk-L5EPGGDP.js";
21
21
  import "./chunk-AM7S2TY6.js";
22
- import "./chunk-BPVFZ6Q4.js";
22
+ import "./chunk-IOIBJY5D.js";
23
23
  import "./chunk-CVYC6DUW.js";
24
24
  import "./chunk-ANVHWV2X.js";
25
25
  import "./chunk-HME6ITKV.js";
@@ -31,25 +31,25 @@ import "./chunk-NLEW62VC.js";
31
31
  import "./chunk-IMYGYIAI.js";
32
32
  import "./chunk-3DAEZILW.js";
33
33
  import "./chunk-DRTJCG6B.js";
34
- import "./chunk-UX2EO653.js";
34
+ import "./chunk-Z2RU4QH5.js";
35
35
  import "./chunk-HYZV25LY.js";
36
36
  import "./chunk-GJV3WDWM.js";
37
37
  import "./chunk-MP2AFCGL.js";
38
38
  import "./chunk-YRUZK2QA.js";
39
- import "./chunk-GL47M7NY.js";
39
+ import "./chunk-2GUT5CWI.js";
40
40
  import "./chunk-BBMTVAE3.js";
41
41
  import "./chunk-TKDITWDN.js";
42
42
  import "./chunk-5YEUPUV4.js";
43
- import "./chunk-72V3S44T.js";
43
+ import "./chunk-QSYY4R6R.js";
44
44
  import "./chunk-YYB5PMTK.js";
45
45
  import "./chunk-L5CGXEZC.js";
46
46
  import "./chunk-QH5ZQ5SJ.js";
47
47
  import "./chunk-ZQEJ4IX2.js";
48
48
  import "./chunk-FXU7JOXK.js";
49
49
  import "./chunk-WNBZJSQT.js";
50
- import "./chunk-TNS63ATU.js";
50
+ import "./chunk-5SPQBSKC.js";
51
51
  import "./chunk-A7XLR3K7.js";
52
- import "./chunk-DZN7SDY2.js";
52
+ import "./chunk-YBD3O77S.js";
53
53
  import "./chunk-A7JYF4RG.js";
54
54
  import "./chunk-ARX6TAGN.js";
55
55
  import "./chunk-MMS2HBRT.js";