@askexenow/exe-os 0.9.382 → 0.9.384

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 (493) hide show
  1. package/delivery/catalog.json +1254 -0
  2. package/deploy/compose/.env.customer.example +5 -5
  3. package/deploy/compose/.env.example +3 -3
  4. package/deploy/compose/docker-compose.yml +1 -1
  5. package/deploy/compose/generate-env.ts +65 -9
  6. package/deploy/compose/setup.sh +205 -7
  7. package/deploy/compose/sso-edge/default.conf.template +45 -0
  8. package/deploy/compose/sso-edge/sso-redirect.conf +11 -2
  9. package/deploy/stack-manifests/v0.9.30-apps.json +1 -1
  10. package/deploy/stack-manifests/v0.9.json +254 -2
  11. package/dist/.dist-verified.json +3 -3
  12. package/dist/{active-agent-GFUUCFLD.js → active-agent-F5V4E4UL.js} +7 -7
  13. package/dist/{active-agent-LE6FE6SO.js → active-agent-YTBB4ZQM.js} +7 -7
  14. package/dist/{agent-defs-generator-EIUA3SH5.js → agent-defs-generator-7TFISIJQ.js} +6 -6
  15. package/dist/{agent-loop-7ZRH56EX.js → agent-loop-EZ7LDAGD.js} +1 -1
  16. package/dist/{agentic-ontology-67JGSP7G.js → agentic-ontology-XVTUVV7W.js} +1 -1
  17. package/dist/{artifact-backup-NYXAYASJ.js → artifact-backup-TF6YWQT2.js} +5 -5
  18. package/dist/{backfill-gate-KWJQ35YX.js → backfill-gate-FWYLCGNJ.js} +3 -3
  19. package/dist/{backfill-metadata-RQYG2WUJ.js → backfill-metadata-J6MXIDCW.js} +10 -10
  20. package/dist/{background-jobs-6VMD55PK.js → background-jobs-V3DZRFKU.js} +3 -3
  21. package/dist/{backup-verify-HC4YDSGN.js → backup-verify-6DVBQMDP.js} +67 -18
  22. package/dist/{behavior-injection-6HSXP43Q.js → behavior-injection-XDA7ZCYN.js} +21 -20
  23. package/dist/{behavior-promotion-SJDQ2Y3U.js → behavior-promotion-4VLQ7LXK.js} +20 -19
  24. package/dist/{behaviors-6ITLA2CK.js → behaviors-SCCZP7RZ.js} +19 -18
  25. package/dist/bin/age-ontology-load.js +3 -3
  26. package/dist/bin/agentic-ontology-backfill.js +12 -12
  27. package/dist/bin/agentic-reflection-backfill.js +13 -13
  28. package/dist/bin/agentic-semantic-label.js +12 -12
  29. package/dist/bin/backfill-conversations.js +17 -16
  30. package/dist/bin/backfill-responses.js +17 -16
  31. package/dist/bin/backfill-vectors.js +23 -22
  32. package/dist/bin/bulk-sync-postgres.js +28 -27
  33. package/dist/bin/cc-doctor.js +17 -16
  34. package/dist/bin/cleanup-stale-review-tasks.js +29 -28
  35. package/dist/bin/cli.js +35 -26
  36. package/dist/bin/deferred-daemon-restart.js +124 -123
  37. package/dist/bin/exe-actions.js +1 -1
  38. package/dist/bin/exe-agent-config.js +6 -6
  39. package/dist/bin/exe-agent.js +22 -22
  40. package/dist/bin/exe-assign.js +19 -18
  41. package/dist/bin/exe-boot.js +57 -56
  42. package/dist/bin/exe-call.js +7 -7
  43. package/dist/bin/exe-cicd.js +38 -8
  44. package/dist/bin/exe-cloud.js +30 -29
  45. package/dist/bin/exe-config-dump.js +6 -6
  46. package/dist/bin/exe-dispatch.js +30 -29
  47. package/dist/bin/exe-doctor.js +11 -11
  48. package/dist/bin/exe-export-behaviors.js +23 -22
  49. package/dist/bin/exe-forget.js +13 -13
  50. package/dist/bin/exe-gateway.js +47 -14
  51. package/dist/bin/exe-grant.js +6 -6
  52. package/dist/bin/exe-healthcheck.js +17 -16
  53. package/dist/bin/exe-heartbeat.js +41 -35
  54. package/dist/bin/exe-kill.js +35 -34
  55. package/dist/bin/exe-launch-agent.js +43 -42
  56. package/dist/bin/exe-mcp.js +9 -9
  57. package/dist/bin/exe-memory-reads.js +10 -10
  58. package/dist/bin/exe-new-employee.js +11 -11
  59. package/dist/bin/exe-os-mcp-proxy.js +9 -9
  60. package/dist/bin/exe-pending-messages.js +30 -29
  61. package/dist/bin/exe-pending-notifications.js +29 -28
  62. package/dist/bin/exe-pending-reviews.js +30 -29
  63. package/dist/bin/exe-preflight.js +1 -1
  64. package/dist/bin/exe-rename.js +9 -9
  65. package/dist/bin/exe-review.js +34 -33
  66. package/dist/bin/exe-search.js +12 -12
  67. package/dist/bin/exe-session-cleanup.js +35 -34
  68. package/dist/bin/exe-settings.js +29 -28
  69. package/dist/bin/exe-start-codex.js +30 -29
  70. package/dist/bin/exe-start-opencode.js +27 -26
  71. package/dist/bin/exe-status.js +31 -30
  72. package/dist/bin/exe-support.js +5 -5
  73. package/dist/bin/exe-team.js +7 -7
  74. package/dist/bin/exe-verify-running-images.js +1 -1
  75. package/dist/bin/exe-watchdog.js +8 -8
  76. package/dist/bin/generate-hook-manifest.js +7 -1
  77. package/dist/bin/git-sweep.js +30 -29
  78. package/dist/bin/graph-backfill.js +12 -12
  79. package/dist/bin/graph-export.js +11 -11
  80. package/dist/bin/hooks-cli.js +1 -1
  81. package/dist/bin/import-history.js +15 -15
  82. package/dist/bin/install.js +130 -129
  83. package/dist/bin/intercom-check.js +11 -7
  84. package/dist/bin/mcp-sessions.js +2 -2
  85. package/dist/bin/orchestration-metrics.js +7 -7
  86. package/dist/bin/postgres-agentic-reflection-backfill.js +5 -5
  87. package/dist/bin/postgres-agentic-semantic-backfill.js +4 -4
  88. package/dist/bin/reconcile-backlog.js +2 -2
  89. package/dist/bin/registry-proxy.js +1 -1
  90. package/dist/bin/repair-document-chunks.js +161 -0
  91. package/dist/bin/scan-tasks.js +30 -29
  92. package/dist/bin/setup.js +5 -5
  93. package/dist/bin/shard-migrate.js +11 -11
  94. package/dist/bin/stack-update.js +625 -33
  95. package/dist/bin/update.js +96 -22
  96. package/dist/bin/verify-stack.js +2 -2
  97. package/dist/bin/vps-health-gate.js +1 -1
  98. package/dist/{boot-generation-L55QANCX.js → boot-generation-Q7LGQ3AO.js} +6 -6
  99. package/dist/{boot-review-sections-AON5ZCR2.js → boot-review-sections-G5774FR5.js} +28 -27
  100. package/dist/{branch-hygiene-QLD77IMJ.js → branch-hygiene-44WLSOZR.js} +2 -2
  101. package/dist/{branding-I6KIMB7F.js → branding-KMWCY5HZ.js} +3 -3
  102. package/dist/build-manifest.json +1259 -1219
  103. package/dist/{capability-cards-WTOXY7O6.js → capability-cards-I3RHCF4F.js} +5 -5
  104. package/dist/{capacity-monitor-ZLG7FSWM.js → capacity-monitor-7I7GDONU.js} +30 -29
  105. package/dist/{catchup-brief-QHY7D7N2.js → catchup-brief-3T5PARIR.js} +39 -36
  106. package/dist/check-image-pullability-2AIVB4BX.js +338 -0
  107. package/dist/{chunk-CTCCYKOV.js → chunk-2FKU4ZEO.js} +55 -29
  108. package/dist/{chunk-M7O7TGGU.js → chunk-2NW4LRDU.js} +1 -1
  109. package/dist/{chunk-XTFM4KMW.js → chunk-2PZTMSMG.js} +6 -6
  110. package/dist/{chunk-UWX6MMCX.js → chunk-3B6FLNLV.js} +1 -1
  111. package/dist/{chunk-GPJIBLP4.js → chunk-3DAEZILW.js} +1 -1
  112. package/dist/{chunk-NY6SBR4O.js → chunk-3FGBBJYM.js} +15 -3
  113. package/dist/{chunk-C4OZVVSG.js → chunk-3OX34OC3.js} +50 -18
  114. package/dist/{chunk-TXTXC3QG.js → chunk-3RGTLZNO.js} +12 -12
  115. package/dist/{chunk-PYRO25A5.js → chunk-3SUPEE6H.js} +10 -11
  116. package/dist/{chunk-PPMGQFLJ.js → chunk-3XY57PKT.js} +2 -2
  117. package/dist/{chunk-CRHI5QTZ.js → chunk-46VSBDUW.js} +2 -2
  118. package/dist/{chunk-VZT66WWP.js → chunk-4AAMFWJT.js} +2 -2
  119. package/dist/{chunk-4GZTBLJG.js → chunk-4AR5XKCH.js} +1 -1
  120. package/dist/{chunk-IHXW4VUI.js → chunk-5IADGFGR.js} +1 -1
  121. package/dist/{chunk-GLQEJOXE.js → chunk-5MVKTNZP.js} +57 -0
  122. package/dist/{chunk-AVMLC2MR.js → chunk-5U2IJBFV.js} +290 -41
  123. package/dist/{chunk-JUKDL5MF.js → chunk-6BJCDWSM.js} +1 -1
  124. package/dist/{chunk-6WWNK7UX.js → chunk-6FIC57PH.js} +1 -1
  125. package/dist/{chunk-ASUICGPX.js → chunk-6YDY6ZTD.js} +4 -4
  126. package/dist/{chunk-FU5O2REK.js → chunk-72V3S44T.js} +108 -29
  127. package/dist/{chunk-LTIIZHNA.js → chunk-7J2ZQ4XN.js} +1 -1
  128. package/dist/{chunk-7RI2CNXJ.js → chunk-7OTR2OET.js} +1 -1
  129. package/dist/{chunk-ZVBVPX4W.js → chunk-7UHZBVP3.js} +82 -51
  130. package/dist/{chunk-PTY2N23C.js → chunk-AGC2V7JS.js} +26 -13
  131. package/dist/{chunk-44VR3PFW.js → chunk-AHESD3KW.js} +1 -1
  132. package/dist/{chunk-NPGV4MZ3.js → chunk-ALRHGEAJ.js} +1 -1
  133. package/dist/{chunk-WJC6AAJN.js → chunk-ANVHWV2X.js} +2 -2
  134. package/dist/{chunk-AGZSGAEN.js → chunk-APL7HUE3.js} +105 -32
  135. package/dist/{chunk-7UH2JWBF.js → chunk-AZSTIAVL.js} +176 -11
  136. package/dist/chunk-AZXMR25O.js +545 -0
  137. package/dist/{chunk-WPWEBZ37.js → chunk-B7AMNZTC.js} +2 -2
  138. package/dist/{chunk-4CF5KUWH.js → chunk-BPVFZ6Q4.js} +3 -3
  139. package/dist/{chunk-XTQ7R2PA.js → chunk-BV2IET6B.js} +73 -17
  140. package/dist/{chunk-4F5CNI65.js → chunk-C5ISP5FO.js} +2 -2
  141. package/dist/{chunk-NPWNXJ3U.js → chunk-CH7BUBP3.js} +7 -7
  142. package/dist/{chunk-X5Q66EOG.js → chunk-CHIUS5QB.js} +16 -16
  143. package/dist/{chunk-ZG62LIK3.js → chunk-CIPDQRFO.js} +1 -1
  144. package/dist/{chunk-4PYIRIU6.js → chunk-CM7N5MBY.js} +5 -5
  145. package/dist/{chunk-L5YDAFUH.js → chunk-CYCIX7AW.js} +5 -5
  146. package/dist/{chunk-76YRJKKF.js → chunk-D3LXVAIQ.js} +28 -16
  147. package/dist/{chunk-2GNAHBRD.js → chunk-DMUOTCDN.js} +1 -1
  148. package/dist/{chunk-QMUFSRQX.js → chunk-DN3ZR3UE.js} +1 -1
  149. package/dist/{chunk-V3WLC5TJ.js → chunk-DRTJCG6B.js} +1 -1
  150. package/dist/{chunk-275WHBEN.js → chunk-DYVLEMKS.js} +1 -1
  151. package/dist/{chunk-O34F5EP5.js → chunk-DZN7SDY2.js} +1 -1
  152. package/dist/{chunk-ZDIXMHY7.js → chunk-E3ZM32LF.js} +8 -8
  153. package/dist/{chunk-N2HXR5MB.js → chunk-E7C2WNR5.js} +4 -4
  154. package/dist/{chunk-VVGXWVZU.js → chunk-EGOEB42T.js} +3 -3
  155. package/dist/{chunk-QV5CQLQH.js → chunk-EIOGV75A.js} +2 -2
  156. package/dist/{chunk-ZY4IGUOS.js → chunk-ELCRJGCH.js} +3 -3
  157. package/dist/{chunk-5QCIWWFA.js → chunk-ELEGH4DX.js} +130 -14
  158. package/dist/{chunk-S7CTCPSW.js → chunk-EOTZSAQL.js} +1 -1
  159. package/dist/{chunk-PPLQ4ECD.js → chunk-EUGEFBGV.js} +3 -3
  160. package/dist/{chunk-UFNCL6MS.js → chunk-EYMFVITZ.js} +1 -1
  161. package/dist/{chunk-F6H7GP2O.js → chunk-F4BBMIPG.js} +3 -3
  162. package/dist/{chunk-FNEZ4BWT.js → chunk-FEU6QEEL.js} +1 -1
  163. package/dist/{chunk-JKOC2L6P.js → chunk-FHIFTSPL.js} +1 -1
  164. package/dist/{chunk-4RTKETV3.js → chunk-FMIYFHLE.js} +3 -3
  165. package/dist/{chunk-TK544DEW.js → chunk-FVLNNNH6.js} +3 -3
  166. package/dist/{chunk-AY2U4NZ5.js → chunk-GL47M7NY.js} +85 -17
  167. package/dist/{chunk-DN24VTS5.js → chunk-GSLFH4AI.js} +25 -13
  168. package/dist/{chunk-CHO5SNWR.js → chunk-HA63SH5W.js} +1 -1
  169. package/dist/{chunk-4IK2K3B3.js → chunk-HME6ITKV.js} +1 -1
  170. package/dist/{chunk-H2T6TFJZ.js → chunk-HU3VD4MQ.js} +2 -2
  171. package/dist/{chunk-ZW32RI66.js → chunk-I5XIW2BP.js} +49 -11
  172. package/dist/{chunk-3CL2I3RG.js → chunk-IGJMS7C5.js} +2 -2
  173. package/dist/{chunk-BRPO6GOH.js → chunk-JA3Y5TV6.js} +2 -2
  174. package/dist/{chunk-SFFXAPYK.js → chunk-JDDM6C57.js} +1 -1
  175. package/dist/{chunk-W4EGAQXW.js → chunk-JFJP6ATJ.js} +2 -2
  176. package/dist/{chunk-ENCUOZXX.js → chunk-JFTUAV4J.js} +1 -1
  177. package/dist/{chunk-3UOQH2DJ.js → chunk-JJTPPAZY.js} +2568 -345
  178. package/dist/{chunk-A6QBAUJH.js → chunk-KILR4FBR.js} +4 -4
  179. package/dist/{chunk-CGFGNHSP.js → chunk-KTKIFXIP.js} +1 -1
  180. package/dist/{chunk-NCJBPXGM.js → chunk-KXYKSLW4.js} +108 -24
  181. package/dist/{chunk-3MUARHPO.js → chunk-L3VUW5M4.js} +1 -1
  182. package/dist/{chunk-GZOG2MAX.js → chunk-L5EPGGDP.js} +1 -1
  183. package/dist/{chunk-T7VSKWES.js → chunk-L63V25HS.js} +6 -5
  184. package/dist/{chunk-R4VNGRKU.js → chunk-LFBLQE2P.js} +1 -1
  185. package/dist/{chunk-W5MCOZTW.js → chunk-LFUBEHFW.js} +12 -2
  186. package/dist/{chunk-AIBIEP4R.js → chunk-LKTN22L6.js} +61 -25
  187. package/dist/{chunk-3KFQCFQB.js → chunk-LR5O2XWZ.js} +5 -5
  188. package/dist/{chunk-VUOAPKPI.js → chunk-LSNBTGW4.js} +1 -1
  189. package/dist/{chunk-P5U3GAWU.js → chunk-MB47DRF5.js} +2 -2
  190. package/dist/{chunk-HZESME3B.js → chunk-MC4IM2CC.js} +16 -13
  191. package/dist/{chunk-ZKJ5S23O.js → chunk-MFAOAIUE.js} +12 -9
  192. package/dist/{chunk-62J64CHO.js → chunk-MKM6D7JM.js} +26 -7
  193. package/dist/{chunk-ZIG7VPJV.js → chunk-MMS2HBRT.js} +15 -3
  194. package/dist/{chunk-FHSV4BSW.js → chunk-MOANZQXF.js} +12 -4
  195. package/dist/{chunk-RTZZBWQC.js → chunk-MPZ2AVNS.js} +16 -5
  196. package/dist/{chunk-AZ6KLVDX.js → chunk-MROSARM5.js} +2 -2
  197. package/dist/{chunk-RV2FFCDS.js → chunk-MUAWCFW6.js} +6 -2
  198. package/dist/{chunk-K4ESASPL.js → chunk-MUCNYSJP.js} +1 -1
  199. package/dist/{chunk-5QGKMP6T.js → chunk-NF5FOSLD.js} +1 -1
  200. package/dist/{chunk-CKOJP7JI.js → chunk-NKEFYE4R.js} +2 -2
  201. package/dist/{chunk-3SXHEQ7X.js → chunk-NPXIS2RY.js} +1 -1
  202. package/dist/{chunk-A5USSF66.js → chunk-NVFNADTX.js} +12 -8
  203. package/dist/{chunk-VVUO3RJS.js → chunk-NYLJQ2M2.js} +4 -4
  204. package/dist/{chunk-HIVOLPLD.js → chunk-OAFENIHN.js} +1 -1
  205. package/dist/{chunk-PMZHZQ6K.js → chunk-OBBO6EJR.js} +1 -1
  206. package/dist/{chunk-SS6EMDLL.js → chunk-P2UY34XE.js} +6 -6
  207. package/dist/{chunk-Y4T5IUEP.js → chunk-P3QQ52QK.js} +2 -2
  208. package/dist/{chunk-GGEKMY6G.js → chunk-P3UX5EH4.js} +4 -4
  209. package/dist/{chunk-F7IRZU5G.js → chunk-P4PIZOL2.js} +3 -3
  210. package/dist/{chunk-GEPFKUUR.js → chunk-P4XLIPB7.js} +1 -1
  211. package/dist/{chunk-GPUOUUHA.js → chunk-PCV52RYM.js} +1 -1
  212. package/dist/{chunk-XR3773KZ.js → chunk-PL4CFSQ7.js} +1 -1
  213. package/dist/{chunk-LLZNPOGB.js → chunk-PLII76NJ.js} +58 -0
  214. package/dist/{chunk-FT5PPV2C.js → chunk-PRDDPQLC.js} +5 -5
  215. package/dist/{chunk-BZ546I4Q.js → chunk-PUBA5B4M.js} +24 -0
  216. package/dist/{chunk-2TGJ5XCV.js → chunk-PWC3C5ME.js} +4 -4
  217. package/dist/{chunk-A4YCLD3L.js → chunk-QFAFKEB5.js} +40 -4
  218. package/dist/{chunk-CL4J4757.js → chunk-QH5ZQ5SJ.js} +26 -0
  219. package/dist/{chunk-UJWZYK46.js → chunk-QNZ4562V.js} +1 -1
  220. package/dist/{chunk-IPHLUZ37.js → chunk-QPTSA4PP.js} +2 -2
  221. package/dist/{chunk-O3YJTHWI.js → chunk-R5E7WNAC.js} +3 -3
  222. package/dist/{chunk-V3M4LJRA.js → chunk-RB3J2WYQ.js} +1 -1
  223. package/dist/{chunk-IUCWOI4Y.js → chunk-RDWIKDMY.js} +237 -11
  224. package/dist/{chunk-ENN6DY4T.js → chunk-RVO5O5SR.js} +46 -21
  225. package/dist/{chunk-LY4AXCYJ.js → chunk-RZN2LEAK.js} +6 -6
  226. package/dist/{chunk-2YIB75UQ.js → chunk-S26CV7BE.js} +57 -13
  227. package/dist/{chunk-XC36HYP6.js → chunk-SDYWZRPN.js} +1 -1
  228. package/dist/{chunk-PHBU4LGO.js → chunk-SNHYZYGZ.js} +1 -1
  229. package/dist/{chunk-4KTTBKWQ.js → chunk-T5FEAQES.js} +1 -1
  230. package/dist/{chunk-XU57KFD6.js → chunk-T5SM4RXY.js} +5 -1
  231. package/dist/{chunk-KUV5VBAO.js → chunk-TKAU7IJ2.js} +1 -1
  232. package/dist/{chunk-KBR5LIWD.js → chunk-TKS5GMYA.js} +1 -1
  233. package/dist/{chunk-5DFE2NAF.js → chunk-TNS63ATU.js} +96 -22
  234. package/dist/{chunk-RFPMXR6B.js → chunk-U4GMOT4M.js} +1 -1
  235. package/dist/{chunk-CO5ZVE3D.js → chunk-UOPCVFVR.js} +17 -17
  236. package/dist/{chunk-22LNFCDF.js → chunk-UX2EO653.js} +1 -1
  237. package/dist/{chunk-LGC6TBA3.js → chunk-UXN4BICC.js} +2 -2
  238. package/dist/{chunk-7J5X4AK7.js → chunk-VF2KRROX.js} +1 -1
  239. package/dist/{chunk-7THUQU44.js → chunk-VF3BZOZK.js} +5 -2
  240. package/dist/{chunk-M2B35MUK.js → chunk-VHHX4UCP.js} +1 -1
  241. package/dist/{chunk-AZBJXATK.js → chunk-VJEJ7JNB.js} +1 -1
  242. package/dist/{chunk-4TRVALTR.js → chunk-VLBHZ6TF.js} +2 -2
  243. package/dist/{chunk-7BMSBACY.js → chunk-VOVFUKEB.js} +5 -5
  244. package/dist/{chunk-MDPGZS6C.js → chunk-VROK4X2L.js} +1 -1
  245. package/dist/{chunk-J6ABJDZ4.js → chunk-W3KPQE7H.js} +4 -4
  246. package/dist/{chunk-3Q7NEDHB.js → chunk-W6BZ4UGA.js} +48 -9
  247. package/dist/{chunk-IZ3IFLL2.js → chunk-XEBKIWI7.js} +14 -14
  248. package/dist/{chunk-UZDF6FLJ.js → chunk-XHU3KOKJ.js} +1 -1
  249. package/dist/{chunk-PA37MXV5.js → chunk-XSUALA32.js} +2 -2
  250. package/dist/{chunk-GR5WJPKF.js → chunk-XUZK23V7.js} +11 -6
  251. package/dist/{chunk-IDB3EZLW.js → chunk-YLB365YX.js} +148 -5
  252. package/dist/{chunk-JDQ7JU3A.js → chunk-YLFCH3VA.js} +24 -16
  253. package/dist/{chunk-ZJJL2Z23.js → chunk-YRQ26MNP.js} +4 -4
  254. package/dist/chunk-YRUZK2QA.js +35 -0
  255. package/dist/{chunk-7HLJ4BSF.js → chunk-ZAEUEDTN.js} +2 -2
  256. package/dist/{chunk-NY74W3S4.js → chunk-ZBPZDADW.js} +313 -43
  257. package/dist/{chunk-ZLPS3GR7.js → chunk-ZJQ56DZZ.js} +42 -1
  258. package/dist/{chunk-VMZZTFXT.js → chunk-ZOTTYCP5.js} +4 -4
  259. package/dist/{chunk-MP4ST7RO.js → chunk-ZPP63JSQ.js} +51 -11
  260. package/dist/{chunk-N4J5WHO2.js → chunk-ZT4LFTUJ.js} +1 -1
  261. package/dist/{cleanup-graph-garbage-GE2DYOTB.js → cleanup-graph-garbage-VQAJ2RBT.js} +11 -11
  262. package/dist/{cloud-sync-command-T6KF3ARK.js → cloud-sync-command-J7NEFUY7.js} +2 -2
  263. package/dist/{cloud-sync-db-init-RSHCCY74.js → cloud-sync-db-init-KWEMNMGA.js} +1 -1
  264. package/dist/{cloud-sync-shutdown-6IVCSLM5.js → cloud-sync-shutdown-P63AUTUI.js} +5 -5
  265. package/dist/{co-activation-AF7RCJPX.js → co-activation-7IHRPBZN.js} +5 -5
  266. package/dist/{co-occurrence-DMOOGBVV.js → co-occurrence-R5AG4OAU.js} +9 -9
  267. package/dist/{code-context-index-LIDOFKOR.js → code-context-index-WFLLZBVB.js} +10 -9
  268. package/dist/{code-context-watcher-4F7K2N3U.js → code-context-watcher-3QAPHO7N.js} +10 -9
  269. package/dist/{codex-consolidation-SH4UKFBQ.js → codex-consolidation-ONZ2AQFX.js} +2 -2
  270. package/dist/{consent-passphrase-WV7MZPMO.js → consent-passphrase-5ZBDJ5G7.js} +2 -2
  271. package/dist/{content-extractor-DJM5EUDA.js → content-extractor-ZLXC6GNR.js} +2 -2
  272. package/dist/{conversation-entity-extractor-4UG7BKWL.js → conversation-entity-extractor-7FRKLLBD.js} +4 -4
  273. package/dist/{conversation-wiki-populator-OS4C6W54.js → conversation-wiki-populator-YAOVCUGO.js} +1 -1
  274. package/dist/{crdt-sync-VL4KXZB7.js → crdt-sync-IFRZOEIS.js} +4 -4
  275. package/dist/{crm-webhook-IDBJ7X5Y.js → crm-webhook-L2S63ASV.js} +2 -2
  276. package/dist/{cto-delegation-gate-4FLSHSLO.js → cto-delegation-gate-3WU7OHX7.js} +29 -28
  277. package/dist/{daemon-auth-PNKHERLV.js → daemon-auth-OWLFYEFR.js} +3 -3
  278. package/dist/{daemon-orchestration-HFCB6OK4.js → daemon-orchestration-3VQYKLOR.js} +33 -32
  279. package/dist/{daemon-ready-BN6EZLTQ.js → daemon-ready-VZ6ZHA2C.js} +1 -1
  280. package/dist/{db-integrity-events-GYGANKZV.js → db-integrity-events-7NKWS5MT.js} +3 -3
  281. package/dist/{db-restore-events-G6NOQOVE.js → db-restore-events-XYL6CGPC.js} +2 -2
  282. package/dist/{destructive-data-guard-HHWUBIGS.js → destructive-data-guard-JDUJ2ULM.js} +58 -2
  283. package/dist/{dispatch-ack-X4DXUSKP.js → dispatch-ack-UYEAKON5.js} +2 -1
  284. package/dist/{doc-graph-extractor-E36PQUCS.js → doc-graph-extractor-YIR5E7OF.js} +9 -9
  285. package/dist/{documents-SCKKHDR7.js → documents-QEHPTYIY.js} +19 -18
  286. package/dist/{dreaming-Q26JBH56.js → dreaming-LNFE7DTN.js} +34 -33
  287. package/dist/{employee-boot-brief-XU6EI2EO.js → employee-boot-brief-ZTXDYNWM.js} +39 -38
  288. package/dist/{entity-boost-VNQLLR3Q.js → entity-boost-R5N6JWXD.js} +1 -1
  289. package/dist/{exe-drift-YZ6OIUAY.js → exe-drift-WYSJVZFO.js} +6 -6
  290. package/dist/{exe-export-HHRQMLSS.js → exe-export-GOLNAEAV.js} +20 -19
  291. package/dist/{exe-import-5XR4NQAB.js → exe-import-U4BSI6OH.js} +20 -19
  292. package/dist/{exe-key-5XOFVP3I.js → exe-key-V42G3NGO.js} +152 -130
  293. package/dist/{exe-org-TPAX4AAK.js → exe-org-U4GLQ6OP.js} +27 -27
  294. package/dist/{exe-snapshot-GIRP3XCJ.js → exe-snapshot-U7ONBYNY.js} +38 -37
  295. package/dist/{fast-db-init-MGY6VCLG.js → fast-db-init-W3NGKAEU.js} +1 -1
  296. package/dist/{founder-context-WD72OL2P.js → founder-context-ZSIBRVDM.js} +4 -4
  297. package/dist/{founder-monitor-envelope-XGYMHT4W.js → founder-monitor-envelope-L3IWZLFY.js} +7 -7
  298. package/dist/{fts-integrity-PLAL6NMG.js → fts-integrity-PHCKKOBC.js} +3 -3
  299. package/dist/gateway/index.js +23 -22
  300. package/dist/{gateway-client-VO3BRLV5.js → gateway-client-DJFCVIPT.js} +1 -1
  301. package/dist/{git-staleness-KGZABPP3.js → git-staleness-OF24QXFZ.js} +5 -5
  302. package/dist/{global-procedures-KOU6A5E5.js → global-procedures-WSIOWO43.js} +6 -6
  303. package/dist/{graph-auto-extract-OZNRDAHE.js → graph-auto-extract-IEVVN3L3.js} +9 -9
  304. package/dist/{graph-query-36K6VXFF.js → graph-query-JDZWAVCU.js} +1 -1
  305. package/dist/{graph-rag-TZLH3CTQ.js → graph-rag-BKAD2XQA.js} +4 -4
  306. package/dist/{hook-integrity-BWFFISJV.js → hook-integrity-TPWDGX2M.js} +3 -1
  307. package/dist/{hook-prefetch-MFUJRAIM.js → hook-prefetch-FD6VGJJA.js} +29 -28
  308. package/dist/hooks/bug-report-worker.js +34 -33
  309. package/dist/hooks/codex-stop-task-finalizer.js +36 -35
  310. package/dist/hooks/commit-complete.js +40 -36
  311. package/dist/hooks/error-recall.js +15 -15
  312. package/dist/hooks/exe-heartbeat-hook.js +8 -8
  313. package/dist/hooks/ingest-worker.js +21 -20
  314. package/dist/hooks/ingest.js +23 -23
  315. package/dist/hooks/instructions-loaded.js +10 -10
  316. package/dist/hooks/manifest.json +20 -20
  317. package/dist/hooks/notification.js +9 -9
  318. package/dist/hooks/post-compact.js +8 -8
  319. package/dist/hooks/post-tool-combined.js +15 -15
  320. package/dist/hooks/pre-compact.js +33 -32
  321. package/dist/hooks/pre-tool-use.js +2 -2
  322. package/dist/hooks/prompt-submit.js +52 -51
  323. package/dist/hooks/session-end.js +38 -37
  324. package/dist/hooks/session-start.js +25 -22
  325. package/dist/hooks/stop.js +40 -39
  326. package/dist/hooks/subagent-stop.js +36 -35
  327. package/dist/hooks/summary-worker.js +41 -40
  328. package/dist/index.js +43 -42
  329. package/dist/{inrun-inbox-DRKVDPLY.js → inrun-inbox-RGNFFGMU.js} +5 -0
  330. package/dist/{installer-RM4ASY7U.js → installer-NMOBSEZ2.js} +11 -11
  331. package/dist/{installer-IESPHXVH.js → installer-OTI5SA43.js} +11 -11
  332. package/dist/{installer-SQZRVD36.js → installer-SRJGE4GU.js} +11 -11
  333. package/dist/{intercom-queue-DGLAC224.js → intercom-queue-4FFXCBHO.js} +28 -27
  334. package/dist/{key-backup-status-LQPINQ3W.js → key-backup-status-6U7D5GOD.js} +2 -2
  335. package/dist/lib/agent-config.js +3 -3
  336. package/dist/lib/cloud-sync.js +28 -27
  337. package/dist/lib/config.js +4 -2
  338. package/dist/lib/consolidation.js +14 -12
  339. package/dist/lib/crypto.js +5 -3
  340. package/dist/lib/database.js +5 -5
  341. package/dist/lib/db-backup.js +11 -3
  342. package/dist/lib/db-daemon-client.js +11 -10
  343. package/dist/lib/db-write-worker.js +4 -4
  344. package/dist/lib/db.js +5 -5
  345. package/dist/lib/delivery-catalog.js +431 -0
  346. package/dist/lib/delivery-schemas.js +62 -0
  347. package/dist/lib/delivery-truth.js +1 -1
  348. package/dist/lib/device-registry.js +3 -3
  349. package/dist/lib/embed-worker.js +2 -2
  350. package/dist/lib/embedder.js +10 -9
  351. package/dist/lib/employee-templates.js +7 -7
  352. package/dist/lib/employees.js +5 -5
  353. package/dist/lib/exe-daemon-client.js +9 -8
  354. package/dist/lib/exe-daemon.js +186 -117
  355. package/dist/lib/hybrid-search.js +12 -12
  356. package/dist/lib/identity.js +5 -5
  357. package/dist/lib/keychain.js +13 -1
  358. package/dist/lib/license.js +8 -4
  359. package/dist/lib/messaging.js +39 -30
  360. package/dist/lib/post-tool-memory.js +9 -9
  361. package/dist/lib/registry-proxy.js +9 -1
  362. package/dist/lib/reminders.js +6 -6
  363. package/dist/lib/schedules.js +11 -11
  364. package/dist/lib/session-registry.js +7 -7
  365. package/dist/lib/skill-learning.js +20 -19
  366. package/dist/lib/status-brief.js +5 -4
  367. package/dist/lib/store.js +10 -10
  368. package/dist/lib/task-router.js +6 -6
  369. package/dist/lib/tasks.js +30 -29
  370. package/dist/lib/tmux-routing.js +28 -27
  371. package/dist/lib/tmux-status.js +3 -1
  372. package/dist/lib/token-spend.js +6 -6
  373. package/dist/lib/ws-client.js +1 -1
  374. package/dist/{license-gate-E6GTRYBA.js → license-gate-R4JWTWM4.js} +5 -5
  375. package/dist/{license-recheck-RBAO6Z2H.js → license-recheck-3MBJ4IJX.js} +1 -1
  376. package/dist/{license-sync-ZCZ2LIHK.js → license-sync-BVSG3WMW.js} +4 -4
  377. package/dist/local-secret-inventory-JWNBHZZ4.js +20 -0
  378. package/dist/mailbox-inbox-MTAT4MXX.js +13 -0
  379. package/dist/{mailbox-outbox-DNDDP2HW.js → mailbox-outbox-OY4IU6S4.js} +2 -1
  380. package/dist/mcp/register-tools.js +121 -120
  381. package/dist/mcp/server.js +123 -122
  382. package/dist/mcp/tools/complete-reminder.js +7 -7
  383. package/dist/mcp/tools/create-reminder.js +7 -7
  384. package/dist/mcp/tools/create-task.js +35 -32
  385. package/dist/mcp/tools/deactivate-behavior.js +22 -21
  386. package/dist/mcp/tools/list-reminders.js +7 -7
  387. package/dist/mcp/tools/list-tasks.js +33 -32
  388. package/dist/mcp/tools/send-message.js +32 -31
  389. package/dist/mcp/tools/update-task.js +31 -30
  390. package/dist/{mcp-child-registry-DVHYAHPW.js → mcp-child-registry-TIZERM7O.js} +5 -5
  391. package/dist/{mcp-health-B5EKRCZG.js → mcp-health-4ZHU67LM.js} +9 -3
  392. package/dist/{mcp-http-config-ME67QDOF.js → mcp-http-config-VUMSFWFH.js} +12 -12
  393. package/dist/{mcp-session-identity-DNG4ULAE.js → mcp-session-identity-DZHWEJRV.js} +28 -27
  394. package/dist/{memory-cards-WCISXY62.js → memory-cards-JVXTMSAT.js} +10 -10
  395. package/dist/{memory-graph-extractor-GXIK4QUF.js → memory-graph-extractor-PPBJMYFJ.js} +10 -10
  396. package/dist/{memory-poisoning-defense-25LZ5FJI.js → memory-poisoning-defense-K5Q74XQ4.js} +5 -5
  397. package/dist/{memory-pressure-watchdog-XGXI7WGE.js → memory-pressure-watchdog-YMJH5CSA.js} +29 -28
  398. package/dist/{memory-queue-YF7IDSFY.js → memory-queue-2MA67TAA.js} +3 -3
  399. package/dist/{memory-queue-client-QC2OTMJB.js → memory-queue-client-4G7HVRSX.js} +11 -10
  400. package/dist/{memory-reflection-GFGT44NT.js → memory-reflection-7BZWIHRE.js} +10 -10
  401. package/dist/{monitor-grants-Z2SEFE6E.js → monitor-grants-Q7X3MYQP.js} +6 -6
  402. package/dist/{monitor-identity-AEMHCVHV.js → monitor-identity-ZQB4IXEE.js} +2 -2
  403. package/dist/{notification-ledger-ETQBGRP7.js → notification-ledger-XRAXL5OI.js} +32 -29
  404. package/dist/{notifications-LPRCFJYY.js → notifications-JE3PX55X.js} +28 -27
  405. package/dist/{orchestration-events-T2GXV2NG.js → orchestration-events-JCQ5F5IJ.js} +6 -6
  406. package/dist/{orchestration-phase-T2WD45UA.js → orchestration-phase-QKTGQ2YT.js} +3 -3
  407. package/dist/{orchestrator-HY2IB3NA.js → orchestrator-X65INDTR.js} +30 -29
  408. package/dist/{org-brief-session-UWFCFEEB.js → org-brief-session-3PQ22UIX.js} +19 -18
  409. package/dist/{org-consent-policy-XXMST37J.js → org-consent-policy-VGELJ7K7.js} +7 -6
  410. package/dist/{org-join-72QKM7JR.js → org-join-6TO5ZYUZ.js} +12 -12
  411. package/dist/{org-key-admin-YCIAYP7V.js → org-key-admin-XHYVRRAZ.js} +12 -12
  412. package/dist/{org-key-pin-F7BQPI5P.js → org-key-pin-TTTYGTQL.js} +6 -6
  413. package/dist/{org-membership-JQSU4Z5P.js → org-membership-Y7T2BS57.js} +7 -7
  414. package/dist/{org-partner-config-PVJ45SLC.js → org-partner-config-OP4NEUNF.js} +10 -10
  415. package/dist/{org-partner-runtime-U4CTLWLC.js → org-partner-runtime-YNVUNT2R.js} +20 -19
  416. package/dist/{org-row-visibility-WUX4N3FX.js → org-row-visibility-JBBXNYXD.js} +1 -1
  417. package/dist/{pipeline-router-2RMBCBRM.js → pipeline-router-EIBB7QNG.js} +6 -6
  418. package/dist/{plan-limits-Z47XYEJR.js → plan-limits-MEWXYLEN.js} +8 -8
  419. package/dist/{postinstall-failure-O6TSSNJB.js → postinstall-failure-VETYYWEZ.js} +3 -3
  420. package/dist/{pre-tool-use-impl-JPE6XMRJ.js → pre-tool-use-impl-C6KJY22W.js} +60 -49
  421. package/dist/{project-boot-UFQDAFU5.js → project-boot-VEYFCCSL.js} +2 -2
  422. package/dist/{project-name-V4IREGHO.js → project-name-UYORSNGE.js} +6 -6
  423. package/dist/{projection-worker-HAD6H3VJ.js → projection-worker-WYFDWS57.js} +5 -5
  424. package/dist/{prospective-memory-KIF4JLFF.js → prospective-memory-E6XBQFJA.js} +5 -5
  425. package/dist/{push-notifications-GDKRTYXH.js → push-notifications-M7YU63FY.js} +29 -28
  426. package/dist/{reproject-worktree-memories-SG4BZJ3Z.js → reproject-worktree-memories-B5XMGJSD.js} +28 -27
  427. package/dist/{reranker-G2AZ67JP.js → reranker-SRA4BR7N.js} +3 -3
  428. package/dist/{retrieval-health-GBJRXTBZ.js → retrieval-health-P2JPZUPV.js} +4 -4
  429. package/dist/{review-polling-VUZPAAGT.js → review-polling-KQPN7IQE.js} +29 -28
  430. package/dist/runtime/index.js +37 -36
  431. package/dist/{session-events-BI6NIFIR.js → session-events-6LDDKKY3.js} +29 -28
  432. package/dist/{session-kill-telemetry-HPBDOPHT.js → session-kill-telemetry-5DSRGWCL.js} +29 -28
  433. package/dist/{session-mcp-config-WFZAH6R5.js → session-mcp-config-F7RCERUG.js} +3 -3
  434. package/dist/{session-scope-UB3HA5E7.js → session-scope-XG5R3P3D.js} +28 -27
  435. package/dist/{setup-wizard-6XULOT3L.js → setup-wizard-7QFLZIKT.js} +5 -5
  436. package/dist/{shard-manager-DYEJ6ETD.js → shard-manager-HHHHV2KZ.js} +3 -3
  437. package/dist/{skill-refinement-MKBQIWZ6.js → skill-refinement-I5RMAHSC.js} +6 -6
  438. package/dist/{stack-generate-manifest-7ODQ6W2O.js → stack-generate-manifest-AKMZ3AUX.js} +246 -13
  439. package/dist/stack-init-5VKL5PL5.js +136 -0
  440. package/dist/{stack-promote-3UKJBJSP.js → stack-promote-34CE2HHF.js} +7 -6
  441. package/dist/{stack-release-5CVXMJM5.js → stack-release-5PGWV5D4.js} +123 -12
  442. package/dist/{stack-update-Z53KG2P5.js → stack-update-ZQQ5YYPJ.js} +20 -5
  443. package/dist/{steward-gate-OKUYYIX6.js → steward-gate-AQJ6KT2C.js} +6 -6
  444. package/dist/{subagent-brief-injection-T2CVQLAS.js → subagent-brief-injection-3GU7YAWY.js} +50 -42
  445. package/dist/{subagent-spawn-ledger-E6U3OY6Z.js → subagent-spawn-ledger-52I66CLW.js} +3 -3
  446. package/dist/{supervisor-handoff-SGLEPOCY.js → supervisor-handoff-BWJW6CKZ.js} +4 -4
  447. package/dist/{support-inbox-WJIDCKJC.js → support-inbox-NY5TB3FN.js} +12 -12
  448. package/dist/{support-outbox-G2NG2U5K.js → support-outbox-KNI3FR3G.js} +3 -2
  449. package/dist/{task-enforcement-JL5ADPS6.js → task-enforcement-CAA6D2MH.js} +29 -28
  450. package/dist/{task-request-inbox-54BRRFHZ.js → task-request-inbox-QBZVU66E.js} +9 -6
  451. package/dist/{task-scope-OBPZBID5.js → task-scope-NHXB4ZRN.js} +32 -27
  452. package/dist/{tasks-crud-YBCPT7TY.js → tasks-crud-JHSWL5NM.js} +28 -27
  453. package/dist/{tasks-notify-CEEQSDJF.js → tasks-notify-7PBE4U7T.js} +29 -28
  454. package/dist/{tasks-review-JIEI656P.js → tasks-review-PPPVEE62.js} +28 -27
  455. package/dist/{telemetry-upload-ZZSEZR2U.js → telemetry-upload-YU2VRNHX.js} +10 -10
  456. package/dist/{token-budget-AUFMEMQ2.js → token-budget-QCMWKG3K.js} +6 -6
  457. package/dist/{tool-capability-index-6HLZU437.js → tool-capability-index-7AWQAJRP.js} +1 -1
  458. package/dist/{tool-gates-VXITVRFQ.js → tool-gates-5Q3RSQEG.js} +1 -1
  459. package/dist/{tool-gates-JWVSAYTW.js → tool-gates-QD26D2NE.js} +1 -1
  460. package/dist/{tool-telemetry-RHSEK2TO.js → tool-telemetry-LTOIC64I.js} +1 -1
  461. package/dist/tui/App.js +43 -42
  462. package/dist/{tui-data-PBZNN5YB.js → tui-data-NDBXD6U7.js} +32 -31
  463. package/dist/{update-support-V3ZCJR6L.js → update-support-BMJM4NG7.js} +27 -26
  464. package/dist/{whatsapp-NAM2CRVQ.js → whatsapp-QQLDAHUX.js} +2 -2
  465. package/dist/{wiki-acl-NUBAPLCD.js → wiki-acl-W6WDCVCP.js} +1 -1
  466. package/dist/{work-claims-Q2NU6JON.js → work-claims-6DM32MGO.js} +6 -6
  467. package/dist/{work-state-heartbeat-HAQRV3RK.js → work-state-heartbeat-HG7D4AWJ.js} +1 -1
  468. package/dist/{worker-gate-NUUSQMBT.js → worker-gate-FTMW7GBB.js} +3 -3
  469. package/dist/{workflow-engine-GEWPU5YR.js → workflow-engine-ZWC6CCXE.js} +2 -2
  470. package/dist/{worktree-C7LFMRKW.js → worktree-EMQCPGFE.js} +7 -7
  471. package/dist/{worktree-ownership-guard-4LKMW6PW.js → worktree-ownership-guard-O6JQF2CL.js} +2 -2
  472. package/dist/{worktree-sweep-SYF62ANH.js → worktree-sweep-XVUJZBXV.js} +8 -8
  473. package/package.json +23 -7
  474. package/release-notes.json +39 -12
  475. package/stack.release.json +4 -4
  476. package/dist/mailbox-inbox-XE72D3AX.js +0 -10
  477. /package/dist/{chunk-QIEYJ4KZ.js → chunk-2KY7WZZF.js} +0 -0
  478. /package/dist/{chunk-T3667X2B.js → chunk-2Q2CD6CD.js} +0 -0
  479. /package/dist/{chunk-JZJZYKMW.js → chunk-AJK2PVQW.js} +0 -0
  480. /package/dist/{chunk-ZEGEFBZV.js → chunk-AWWDKF22.js} +0 -0
  481. /package/dist/{chunk-QNTKRGJ6.js → chunk-GIRD7O5X.js} +0 -0
  482. /package/dist/{chunk-FWA4MYTA.js → chunk-JRIH6I7D.js} +0 -0
  483. /package/dist/{chunk-C7H2D7LX.js → chunk-M4XY4JRK.js} +0 -0
  484. /package/dist/{chunk-Q3DN5J6F.js → chunk-P2VVMGMI.js} +0 -0
  485. /package/dist/{chunk-BRAIWGMF.js → chunk-Q46NYJ77.js} +0 -0
  486. /package/dist/{chunk-3LQ2N4H7.js → chunk-U2D6PJ5T.js} +0 -0
  487. /package/dist/{chunk-3O6OGZL3.js → chunk-XDVOGDBC.js} +0 -0
  488. /package/dist/{core-memory-UNCAPGD4.js → core-memory-O6D5UC3T.js} +0 -0
  489. /package/dist/{hook-tamper-log-Z4PWC7N4.js → hook-tamper-log-ARGWCXKJ.js} +0 -0
  490. /package/dist/{memory-isolation-ALPJWLR5.js → memory-isolation-EBFFC6HF.js} +0 -0
  491. /package/dist/{oauth-server-AC2KB7NB.js → oauth-server-ZKBUHDFI.js} +0 -0
  492. /package/dist/{webhook-pipe-W2FVXY7M.js → webhook-pipe-PXH5MBRM.js} +0 -0
  493. /package/dist/{wiki-client-W65IOSWF.js → wiki-client-DD2NVWK2.js} +0 -0
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  resolveExeSession
3
- } from "./chunk-ZVBVPX4W.js";
4
- import "./chunk-JUKDL5MF.js";
5
- import "./chunk-SFFXAPYK.js";
6
- import "./chunk-UJWZYK46.js";
3
+ } from "./chunk-7UHZBVP3.js";
4
+ import "./chunk-6BJCDWSM.js";
5
+ import "./chunk-JDDM6C57.js";
7
6
  import "./chunk-ZKGWHT56.js";
7
+ import "./chunk-QNZ4562V.js";
8
8
  import "./chunk-WT4RI36X.js";
9
9
  import "./chunk-E23LNUWJ.js";
10
10
  import "./chunk-TDF2XKLK.js";
@@ -12,54 +12,55 @@ import "./chunk-EIKATSE4.js";
12
12
  import "./chunk-MJCSEIFI.js";
13
13
  import {
14
14
  listSessions
15
- } from "./chunk-NPGV4MZ3.js";
15
+ } from "./chunk-ALRHGEAJ.js";
16
+ import "./chunk-PUBA5B4M.js";
16
17
  import "./chunk-VI4ATC6I.js";
17
18
  import "./chunk-A27Q27CT.js";
18
- import "./chunk-BZ546I4Q.js";
19
- import "./chunk-VUOAPKPI.js";
20
- import "./chunk-XU57KFD6.js";
21
- import "./chunk-AZBJXATK.js";
22
- import "./chunk-GZOG2MAX.js";
19
+ import "./chunk-LSNBTGW4.js";
20
+ import "./chunk-T5SM4RXY.js";
21
+ import "./chunk-VJEJ7JNB.js";
22
+ import "./chunk-L5EPGGDP.js";
23
23
  import "./chunk-AM7S2TY6.js";
24
- import "./chunk-4CF5KUWH.js";
24
+ import "./chunk-BPVFZ6Q4.js";
25
25
  import "./chunk-CVYC6DUW.js";
26
- import "./chunk-WJC6AAJN.js";
27
- import "./chunk-4IK2K3B3.js";
28
- import "./chunk-ZKJ5S23O.js";
29
- import "./chunk-GPUOUUHA.js";
26
+ import "./chunk-ANVHWV2X.js";
27
+ import "./chunk-HME6ITKV.js";
28
+ import "./chunk-MFAOAIUE.js";
29
+ import "./chunk-PCV52RYM.js";
30
30
  import "./chunk-BTSWFMEH.js";
31
- import "./chunk-ZG62LIK3.js";
32
- import "./chunk-IMYGYIAI.js";
31
+ import "./chunk-CIPDQRFO.js";
33
32
  import "./chunk-NLEW62VC.js";
34
- import "./chunk-GPJIBLP4.js";
35
- import "./chunk-V3WLC5TJ.js";
33
+ import "./chunk-IMYGYIAI.js";
34
+ import "./chunk-3DAEZILW.js";
35
+ import "./chunk-DRTJCG6B.js";
36
36
  import {
37
37
  getProjectName
38
- } from "./chunk-22LNFCDF.js";
38
+ } from "./chunk-UX2EO653.js";
39
39
  import "./chunk-HYZV25LY.js";
40
40
  import "./chunk-GJV3WDWM.js";
41
41
  import "./chunk-MP2AFCGL.js";
42
+ import "./chunk-YRUZK2QA.js";
42
43
  import {
43
44
  isCoordinatorName
44
- } from "./chunk-AY2U4NZ5.js";
45
+ } from "./chunk-GL47M7NY.js";
45
46
  import "./chunk-BBMTVAE3.js";
46
47
  import "./chunk-TKDITWDN.js";
47
48
  import "./chunk-5YEUPUV4.js";
48
- import "./chunk-FU5O2REK.js";
49
+ import "./chunk-72V3S44T.js";
49
50
  import "./chunk-YYB5PMTK.js";
50
51
  import "./chunk-L5CGXEZC.js";
51
- import "./chunk-CL4J4757.js";
52
+ import "./chunk-QH5ZQ5SJ.js";
52
53
  import "./chunk-ZQEJ4IX2.js";
53
54
  import "./chunk-FXU7JOXK.js";
54
55
  import "./chunk-WNBZJSQT.js";
55
- import "./chunk-5DFE2NAF.js";
56
+ import "./chunk-TNS63ATU.js";
56
57
  import "./chunk-A7XLR3K7.js";
57
- import "./chunk-O34F5EP5.js";
58
+ import "./chunk-DZN7SDY2.js";
58
59
  import "./chunk-A7JYF4RG.js";
59
60
  import "./chunk-ARX6TAGN.js";
60
- import "./chunk-ZIG7VPJV.js";
61
- import "./chunk-HSGBZSCA.js";
61
+ import "./chunk-MMS2HBRT.js";
62
62
  import "./chunk-RH4AH3YB.js";
63
+ import "./chunk-HSGBZSCA.js";
63
64
  import "./chunk-JKKZGDLP.js";
64
65
  import "./chunk-MLKGABMK.js";
65
66
 
@@ -10,16 +10,16 @@ import {
10
10
  runSetupWizard,
11
11
  validateModel,
12
12
  wslKeyCustodyLines
13
- } from "./chunk-76YRJKKF.js";
13
+ } from "./chunk-D3LXVAIQ.js";
14
14
  import "./chunk-J6KMGEJW.js";
15
- import "./chunk-7RI2CNXJ.js";
15
+ import "./chunk-7OTR2OET.js";
16
16
  import "./chunk-SO7KTH3Q.js";
17
17
  import "./chunk-WNBZJSQT.js";
18
- import "./chunk-AVMLC2MR.js";
18
+ import "./chunk-5U2IJBFV.js";
19
19
  import "./chunk-ARX6TAGN.js";
20
- import "./chunk-ZIG7VPJV.js";
21
- import "./chunk-HSGBZSCA.js";
20
+ import "./chunk-MMS2HBRT.js";
22
21
  import "./chunk-RH4AH3YB.js";
22
+ import "./chunk-HSGBZSCA.js";
23
23
  import "./chunk-JKKZGDLP.js";
24
24
  import "./chunk-MLKGABMK.js";
25
25
  export {
@@ -12,12 +12,12 @@ import {
12
12
  isShardingEnabled,
13
13
  listShards,
14
14
  shardExists
15
- } from "./chunk-RV2FFCDS.js";
15
+ } from "./chunk-MUAWCFW6.js";
16
16
  import "./chunk-TKDITWDN.js";
17
17
  import "./chunk-5YEUPUV4.js";
18
- import "./chunk-ZIG7VPJV.js";
19
- import "./chunk-HSGBZSCA.js";
18
+ import "./chunk-MMS2HBRT.js";
20
19
  import "./chunk-RH4AH3YB.js";
20
+ import "./chunk-HSGBZSCA.js";
21
21
  import "./chunk-JKKZGDLP.js";
22
22
  import "./chunk-MLKGABMK.js";
23
23
  export {
@@ -2,20 +2,20 @@ import {
2
2
  incrementSkillSuccess,
3
3
  incrementSkillUsage,
4
4
  runSkillRefinement
5
- } from "./chunk-AZBJXATK.js";
6
- import "./chunk-AY2U4NZ5.js";
5
+ } from "./chunk-VJEJ7JNB.js";
6
+ import "./chunk-GL47M7NY.js";
7
7
  import "./chunk-BBMTVAE3.js";
8
8
  import "./chunk-TKDITWDN.js";
9
9
  import "./chunk-5YEUPUV4.js";
10
- import "./chunk-FU5O2REK.js";
10
+ import "./chunk-72V3S44T.js";
11
11
  import "./chunk-YYB5PMTK.js";
12
12
  import "./chunk-L5CGXEZC.js";
13
- import "./chunk-CL4J4757.js";
13
+ import "./chunk-QH5ZQ5SJ.js";
14
14
  import "./chunk-ZQEJ4IX2.js";
15
15
  import "./chunk-FXU7JOXK.js";
16
- import "./chunk-ZIG7VPJV.js";
17
- import "./chunk-HSGBZSCA.js";
16
+ import "./chunk-MMS2HBRT.js";
18
17
  import "./chunk-RH4AH3YB.js";
18
+ import "./chunk-HSGBZSCA.js";
19
19
  import "./chunk-JKKZGDLP.js";
20
20
  import "./chunk-MLKGABMK.js";
21
21
  export {
@@ -1,20 +1,21 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  writeSignedStackManifest
4
- } from "./chunk-FHSV4BSW.js";
5
- import "./chunk-NY74W3S4.js";
4
+ } from "./chunk-MOANZQXF.js";
5
+ import "./chunk-ZBPZDADW.js";
6
6
  import "./chunk-EC5H53YD.js";
7
7
  import "./chunk-C5HUMAA7.js";
8
8
  import "./chunk-L25OAFOU.js";
9
- import "./chunk-5DFE2NAF.js";
9
+ import "./chunk-LFUBEHFW.js";
10
+ import "./chunk-TNS63ATU.js";
10
11
  import "./chunk-A7XLR3K7.js";
11
- import "./chunk-O34F5EP5.js";
12
- import "./chunk-ZIG7VPJV.js";
13
- import "./chunk-HSGBZSCA.js";
12
+ import "./chunk-DZN7SDY2.js";
13
+ import "./chunk-MMS2HBRT.js";
14
14
  import "./chunk-RH4AH3YB.js";
15
15
  import {
16
16
  isMainModule
17
17
  } from "./chunk-6Y4B3QF6.js";
18
+ import "./chunk-HSGBZSCA.js";
18
19
  import "./chunk-JKKZGDLP.js";
19
20
  import "./chunk-MLKGABMK.js";
20
21
 
@@ -33,6 +34,12 @@ var STACK_SERVICE_SPECS = Object.freeze([
33
34
  origin: "askexe-release",
34
35
  deployment: "stack",
35
36
  ghRepo: "AskExe/exe-os",
37
+ // Confirmed via `gh api repos/AskExe/exe-os/actions/workflows` (2026-09-08):
38
+ // id 274190265, path .github/workflows/release-stack-image.yml. exe-os's
39
+ // repo ALSO runs "Release dashboard image" (id 338670900) at the same tag
40
+ // commit during a stack release — the exact sibling-workflow ambiguity
41
+ // this field exists to eliminate for dashboard below.
42
+ releaseWorkflowFile: "release-stack-image.yml",
36
43
  imageName: "update.askexe.com/askexe/exe-os",
37
44
  sourceImageName: "ghcr.io/askexe/exe-os",
38
45
  // The version tag and the commit tag live in DIFFERENT ghcr repositories:
@@ -51,6 +58,8 @@ var STACK_SERVICE_SPECS = Object.freeze([
51
58
  origin: "askexe-release",
52
59
  deployment: "stack",
53
60
  ghRepo: "AskExe/exe-crm",
61
+ // Confirmed via `gh api repos/AskExe/exe-crm/actions/workflows` (2026-09-08).
62
+ releaseWorkflowFile: "release-stack-image.yml",
54
63
  imageName: "update.askexe.com/askexe/exe-crm",
55
64
  sourceImageName: "ghcr.io/askexe/exe-crm",
56
65
  env: "CRM_IMAGE_TAG",
@@ -65,6 +74,8 @@ var STACK_SERVICE_SPECS = Object.freeze([
65
74
  origin: "askexe-release",
66
75
  deployment: "stack",
67
76
  ghRepo: "AskExe/exe-wiki",
77
+ // Confirmed via `gh api repos/AskExe/exe-wiki/actions/workflows` (2026-09-08).
78
+ releaseWorkflowFile: "release-stack-image.yml",
68
79
  imageName: "update.askexe.com/askexe/exe-wiki",
69
80
  sourceImageName: "ghcr.io/askexe/exe-wiki",
70
81
  env: "WIKI_IMAGE_TAG",
@@ -77,6 +88,11 @@ var STACK_SERVICE_SPECS = Object.freeze([
77
88
  origin: "askexe-release",
78
89
  deployment: "stack",
79
90
  ghRepo: "AskExe/exe-gateway",
91
+ // Confirmed via `gh api repos/AskExe/exe-gateway/actions/workflows`
92
+ // (2026-09-08): the producer here is named "Release image", NOT "Release
93
+ // stack image" like its siblings — exactly why this is a file, not a name
94
+ // pattern shared across the roster.
95
+ releaseWorkflowFile: "release-image.yml",
80
96
  imageName: "update.askexe.com/askexe/exe-gateway",
81
97
  sourceImageName: "ghcr.io/askexe/exe-gateway",
82
98
  env: "GATEWAY_IMAGE_TAG",
@@ -96,6 +112,12 @@ var STACK_SERVICE_SPECS = Object.freeze([
96
112
  // AUTH_REGISTRY constant). Probing ghcr.io for its `sha-*`/version tags
97
113
  // resolves nothing, so provenance is read from — and the pin emitted for —
98
114
  // the one registry the artifact actually exists in.
115
+ // Confirmed via `gh api repos/AskExe/exe-auth/actions/workflows`
116
+ // (2026-09-08): exe-auth has no dedicated release workflow at all — it
117
+ // publishes from its `ci.yml` ("CI") on a `push: tags: ['v*']` trigger.
118
+ // A name pattern would NEVER have matched this producer even before this
119
+ // fix; scoping by file is what makes it checkable at all.
120
+ releaseWorkflowFile: "ci.yml",
99
121
  imageName: "update.askexe.com/askexe/exe-auth",
100
122
  env: "AUTH_IMAGE_TAG",
101
123
  healthUrl: "http://127.0.0.1:3300/api/health",
@@ -108,6 +130,13 @@ var STACK_SERVICE_SPECS = Object.freeze([
108
130
  origin: "askexe-release",
109
131
  deployment: "stack",
110
132
  ghRepo: "AskExe/exe-erp",
133
+ // Confirmed via `gh api repos/AskExe/exe-erp/actions/workflows`
134
+ // (2026-09-08). NOTE (bug e49ac42b adversarial review): this workflow's
135
+ // build-push-action step pushes BOTH the version tag and `sha-<sha>` in
136
+ // one step, then a LATER "Enforce digest pins (fail closed)" step can
137
+ // still fail the run — so `digestByTag` resolving must never be read as
138
+ // "this run's gates passed" (see Guard 5b).
139
+ releaseWorkflowFile: "release-stack-image.yml",
111
140
  imageName: "update.askexe.com/askexe/exe-erp",
112
141
  sourceImageName: "ghcr.io/askexe/exe-erp",
113
142
  env: "ERP_IMAGE_TAG",
@@ -123,6 +152,13 @@ var STACK_SERVICE_SPECS = Object.freeze([
123
152
  origin: "askexe-release",
124
153
  deployment: "stack",
125
154
  ghRepo: "AskExe/exe-monitor",
155
+ // Confirmed via `gh api repos/AskExe/exe-monitor/actions/workflows`
156
+ // (2026-09-08). NOTE (bug e49ac42b adversarial review): this workflow
157
+ // triggers on `push` tags AND `workflow_run` (CI completion) AND
158
+ // `schedule` AND `workflow_dispatch` — querying only `event=push` would
159
+ // exclude the very trigger paths PR #42 deliberately publishes through.
160
+ // Guard queries this workflow file with no `event=` filter at all.
161
+ releaseWorkflowFile: "release-stack-images.yml",
126
162
  imageName: "update.askexe.com/askexe/exe-monitor-hub",
127
163
  sourceImageName: "ghcr.io/askexe/exe-monitor-hub",
128
164
  env: "MONITOR_HUB_IMAGE_TAG",
@@ -134,6 +170,8 @@ var STACK_SERVICE_SPECS = Object.freeze([
134
170
  origin: "askexe-release",
135
171
  deployment: "stack",
136
172
  ghRepo: "AskExe/exe-monitor",
173
+ // Same producer as monitorHub — one workflow builds both images.
174
+ releaseWorkflowFile: "release-stack-images.yml",
137
175
  imageName: "update.askexe.com/askexe/exe-monitor-agent",
138
176
  sourceImageName: "ghcr.io/askexe/exe-monitor-agent",
139
177
  env: "MONITOR_AGENT_IMAGE_TAG",
@@ -153,12 +191,31 @@ var STACK_SERVICE_SPECS = Object.freeze([
153
191
  // `:sha-<sha>` and `:main`, sets no org.opencontainers.image.version, and
154
192
  // neither stack.release.json nor the stack manifest mentions it. Production
155
193
  // is three builds stale and nothing auto-deploys it.
194
+ // FAIL-CLOSED DEFAULT ONLY (bug 61e7096e) — this is stale as of
195
+ // 2026-09-08: release-dashboard-image.yml now calls release-service.yml@v1
196
+ // and stack.release.json's `components.dashboard` describes it. Leaving
197
+ // "none" here is deliberate anyway: a constant like this one is exactly
198
+ // what went stale last time, so it must never by itself be trusted to stay
199
+ // OPEN — it is trusted only to stay CLOSED. The CLI derives the real
200
+ // answer from stack.release.json at run time (`releaseLaneWired` in
201
+ // ServiceFacts) and that is what actually decides Guard 2. If the
202
+ // descriptor entry is ever removed, this default is what re-closes the
203
+ // gate without anyone having to remember to flip a flag back.
156
204
  releaseLane: "none",
205
+ // Wired ahead of the release lane itself (bug e49ac42b): once dashboard is
206
+ // flipped into the release lane, its producer is `.github/workflows/
207
+ // release-dashboard-image.yml` ("Release dashboard image", id 338670900) —
208
+ // a DIFFERENT workflow than exe-os's own "Release stack image"
209
+ // (id 274190265), even though both live in this repo, both match
210
+ // /release/i, and both can run at the same tag commit during a stack
211
+ // release. This is the concrete scenario adversarial review flagged: name
212
+ // matching would let exe-os's release stand in for dashboard's own.
213
+ releaseWorkflowFile: "release-dashboard-image.yml",
157
214
  imageName: "ghcr.io/askexe/exe-dashboard",
158
215
  env: "DASHBOARD_IMAGE_TAG",
159
216
  category: "app",
160
217
  description: "Customer dashboard (credits, usage, keys, billing)",
161
- note: "BLOCKED \u2014 NOT WIRED INTO THE RELEASE LANE (2026-08-20). Give dashboard-image.yml a versioned release tag + org.opencontainers.image.version/.revision stamps, and add it to stack.release.json, then it flows through the identical path as every other service."
218
+ note: "Release lane wiring is now DERIVED from stack.release.json's components.dashboard entry (bug 61e7096e), not asserted here. Dashboard may still fail generation for other, real reasons \u2014 e.g. bug d85b98c7 (the release stamp step refuses to publish from an unclean tree, so no v* dashboard image has ever actually been produced) \u2014 but it will fail with an accurate reason from a later guard, not with a stale claim that the lane doesn't exist."
162
219
  },
163
220
  {
164
221
  key: "exe-build",
@@ -169,6 +226,9 @@ var STACK_SERVICE_SPECS = Object.freeze([
169
226
  // customer manifest is a decision on the record, not an omission.
170
227
  deployment: "control-plane",
171
228
  ghRepo: "AskExe/exe-build",
229
+ // Confirmed via `gh api repos/AskExe/exe-build/actions/workflows`
230
+ // (2026-09-08): named "Release" (path release.yml).
231
+ releaseWorkflowFile: "release.yml",
172
232
  imageName: "update.askexe.com/askexe/exe-build",
173
233
  env: "EXE_BUILD_IMAGE_TAG",
174
234
  category: "control-plane"
@@ -281,10 +341,18 @@ function parseVersionCore(tag) {
281
341
  }
282
342
  return nums.length > 0 ? nums : null;
283
343
  }
344
+ function classifyVersionScheme(tag) {
345
+ const core = parseVersionCore(tag);
346
+ if (!core) return null;
347
+ const looksStamped = typeof tag === "string" && /-stamped\s*$/i.test(tag.trim());
348
+ const firstComponentLooksLikeAYear = (core[0] ?? 0) >= 1e3;
349
+ return looksStamped || firstComponentLooksLikeAYear ? "date-stamped" : "semver";
350
+ }
284
351
  function compareVersionTags(a, b) {
285
352
  const ca = parseVersionCore(a);
286
353
  const cb = parseVersionCore(b);
287
354
  if (!ca || !cb) return null;
355
+ if (classifyVersionScheme(a) !== classifyVersionScheme(b)) return null;
288
356
  const len = Math.max(ca.length, cb.length);
289
357
  for (let i = 0; i < len; i++) {
290
358
  const x = ca[i] ?? 0;
@@ -298,6 +366,9 @@ var REQUIRED_IMAGE_LABELS = Object.freeze([
298
366
  "org.opencontainers.image.version",
299
367
  "org.opencontainers.image.revision"
300
368
  ]);
369
+ function isReleaseLaneWired(spec, facts) {
370
+ return spec.releaseLane !== "none" || facts.releaseLaneWired === true;
371
+ }
301
372
  function evaluateService(spec, facts = {}, options = {}) {
302
373
  const refuse = (reason) => ({ ok: false, service: spec.key, reason });
303
374
  const sourceName = spec.sourceImageName ?? spec.imageName;
@@ -343,7 +414,7 @@ function evaluateService(spec, facts = {}, options = {}) {
343
414
  `no source repo identified \u2014 ${spec.key} is deployed from ${spec.imageName} but no repository in the AskExe org builds it. Identify (or create) the source repo and cut a tagged release. This is a block, not an exemption: the repo name must not be guessed.`
344
415
  );
345
416
  }
346
- if (spec.releaseLane === "none") {
417
+ if (!isReleaseLaneWired(spec, facts)) {
347
418
  return refuse(
348
419
  `not wired into the release lane \u2014 ${spec.ghRepo} builds ${spec.imageName}, but only as floating refs (:main / :sha-<sha>) with no version stamp, and no release descriptor references it. There is no released artifact to pin. Give its workflow a versioned tag plus org.opencontainers.image.version/.revision stamps and add it to the release descriptor.`
349
420
  );
@@ -385,10 +456,45 @@ function evaluateService(spec, facts = {}, options = {}) {
385
456
  }
386
457
  const resolvedDigest = facts.digestByCommit ?? facts.digestByTag;
387
458
  if (!resolvedDigest || !/^sha256:[0-9a-f]{64}$/i.test(resolvedDigest)) {
459
+ const refEntries = [
460
+ { label: `${commitName}:sha-${facts.tagCommit} (commit-addressed)`, classification: facts.digestByCommitClassification },
461
+ { label: `${sourceName}:${facts.latestTag} (version tag)`, classification: facts.digestByTagClassification }
462
+ ];
463
+ const classifiedEntries = refEntries.filter(
464
+ (e) => e.classification !== void 0
465
+ );
466
+ const missingEntries = classifiedEntries.filter((e) => e.classification.classification === "missing");
467
+ const uncertainEntries = classifiedEntries.filter((e) => e.classification.classification !== "missing");
468
+ const kindPhrase = (kind) => kind === "authentication" ? "AUTHENTICATION FAILURE" : "UNAVAILABLE";
469
+ const uncertainDetail = (e) => `${e.label}: ${kindPhrase(e.classification.classification)} \u2014 ${e.classification.detail}`;
470
+ const credentialHint = `Set the matching credential (EXE_REGISTRY_PROXY_PULL_TOKENS or EXE_LICENSE_KEY for update.askexe.com; GHCR_TOKEN for ghcr.io) and re-run before concluding anything about the release workflow.`;
471
+ if (classifiedEntries.length > 0 && missingEntries.length === 0) {
472
+ return refuse(
473
+ `UNVERIFIED, not missing: could not determine whether an artifact exists for release ${facts.latestTag} \u2014 ${uncertainEntries.map(uncertainDetail).join("; ")}. A rejected credential or an unreachable/erroring registry is NOT evidence the release has no artifact. ${credentialHint}`
474
+ );
475
+ }
476
+ if (missingEntries.length > 0 && uncertainEntries.length > 0) {
477
+ return refuse(
478
+ `PARTIALLY VERIFIED for release ${facts.latestTag}: ${missingEntries.map((e) => `${e.label} is confirmed MISSING (${e.classification.detail})`).join("; ")}; ${uncertainEntries.map(uncertainDetail).join("; ")}. Refusing to publish either way (fail-closed), but this is NOT proof that neither artifact exists \u2014 only that one ref does not, and the other could not be checked. ${credentialHint}`
479
+ );
480
+ }
388
481
  return refuse(
389
482
  `no resolvable image for release ${facts.latestTag}: neither ${commitName}:sha-${facts.tagCommit} (commit-addressed) nor ${sourceName}:${facts.latestTag} could be resolved to a digest. A release with no artifact cannot be deployed \u2014 fix the release workflow rather than hand-pinning an older image.`
390
483
  );
391
484
  }
485
+ {
486
+ const gate = facts.releaseGateStatus;
487
+ if (!gate || gate.classification === "unverified") {
488
+ return refuse(
489
+ `UNVERIFIED, not passed: could not determine whether the release that produced ${resolvedDigest} (${commitName}:sha-${facts.tagCommit}${facts.digestByTag ? `, also tagged ${sourceName}:${facts.latestTag}` : ""}) passed its gates \u2014 ${gate?.detail ?? "no release-gate check was performed for this candidate."} This is NOT evidence the release gates passed \u2014 the question was never actually answered. Fix the missing credential (gh CLI auth / GH_TOKEN with 'actions:read' on ${spec.ghRepo}) or, if unverified because no producer workflow is identified for this service, set releaseWorkflowFile in the roster \u2014 and re-run before concluding anything about this release.`
490
+ );
491
+ }
492
+ if (gate.classification !== "passed") {
493
+ return refuse(
494
+ `RELEASE GATES DID NOT PASS for ${resolvedDigest} (${commitName}:sha-${facts.tagCommit}): ${gate.detail} ${facts.digestByTag ? `The version tag ${facts.latestTag} resolving does NOT mean this run's gates passed \u2014 a tag can be pushed by a step that runs before later checks in the same job fail it closed.` : `The version tag ${facts.latestTag} was never published for ${spec.ghRepo} \u2014 that omission IS the gate working as designed, not a resolution failure to fall back past.`} Fix the finding the release gate flagged and cut a new release; a rejected artifact does not become pinnable because SOME reference to it still resolves in the registry.`
495
+ );
496
+ }
497
+ }
392
498
  if (facts.digestByTag && facts.digestByCommit && facts.digestByTag.toLowerCase() !== facts.digestByCommit.toLowerCase()) {
393
499
  return refuse(
394
500
  `TAG/COMMIT MISMATCH: the image tagged ${facts.latestTag} is ${facts.digestByTag}, but the image built from the commit that tag names (${facts.tagCommit}) is ${facts.digestByCommit}. The image called ${facts.latestTag} was not built from the commit called ${facts.latestTag}. A version tag in this registry is not provenance \u2014 refusing to pin either until the release workflow is fixed so the two agree.`
@@ -566,6 +672,27 @@ function repoRoot() {
566
672
  }
567
673
  return process.cwd();
568
674
  }
675
+ var OWN_REPO = "AskExe/exe-os";
676
+ var cachedReleaseDescriptorComponents;
677
+ function ownReleaseDescriptorComponents(root = repoRoot()) {
678
+ if (cachedReleaseDescriptorComponents) return cachedReleaseDescriptorComponents;
679
+ const descriptorPath = path.join(root, "stack.release.json");
680
+ try {
681
+ const parsed = JSON.parse(readFileSync(descriptorPath, "utf8"));
682
+ cachedReleaseDescriptorComponents = new Set(Object.keys(parsed.components ?? {}));
683
+ } catch (err) {
684
+ process.stderr.write(
685
+ `[stack-generate-manifest] WARNING: could not read/parse ${descriptorPath} to derive release-lane wiring (${err instanceof Error ? err.message : String(err)}); treating no service as newly wired.
686
+ `
687
+ );
688
+ cachedReleaseDescriptorComponents = /* @__PURE__ */ new Set();
689
+ }
690
+ return cachedReleaseDescriptorComponents;
691
+ }
692
+ function deriveReleaseLaneWiring(spec, root) {
693
+ if (spec.ghRepo !== OWN_REPO) return void 0;
694
+ return ownReleaseDescriptorComponents(root).has(spec.key);
695
+ }
569
696
  function parseGenerateArgs(argv, root = repoRoot()) {
570
697
  const opts = {
571
698
  manifestPath: path.join(root, "deploy", "stack-manifests", "v0.9.json"),
@@ -597,6 +724,14 @@ async function run(cmd, args) {
597
724
  return { ok: false, stdout: "" };
598
725
  }
599
726
  }
727
+ async function runWithDiagnostics(cmd, args) {
728
+ try {
729
+ const { stdout } = await execFile(cmd, args, { maxBuffer: 16 * 1024 * 1024 });
730
+ return { ok: true, stdout: stdout.toString().trim() };
731
+ } catch (err) {
732
+ return { ok: false, stdout: "", error: err instanceof Error ? err.message : String(err) };
733
+ }
734
+ }
600
735
  var MAX_TAG_PROBES = 50;
601
736
  async function tagCreatorEmail(ghRepo, tag) {
602
737
  const ref = await run("gh", [
@@ -709,6 +844,38 @@ async function resolveImageDigest(ref) {
709
844
  const match = res.stdout.match(/^\s*Digest:\s*(sha256:[0-9a-f]{64})\s*$/m);
710
845
  return match?.[1];
711
846
  }
847
+ async function classifyUnresolvedImage(ref, {
848
+ env = process.env,
849
+ fetchImpl = globalThis.fetch
850
+ } = {}) {
851
+ const { checkImagePullability, credentialHintForRegistry } = await import("./check-image-pullability-2AIVB4BX.js");
852
+ const result = await checkImagePullability({ ref }, { fetchImpl, env });
853
+ if (result.classification === "unverified") {
854
+ return {
855
+ classification: "unavailable",
856
+ detail: `${ref}: ${result.error ?? `no credential was available to check it (${credentialHintForRegistry(result.registry)})`}`
857
+ };
858
+ }
859
+ if (result.classification === "drift") {
860
+ if (result.credentialOffered && (result.status === 401 || result.status === 403)) {
861
+ return {
862
+ classification: "authentication",
863
+ detail: `${ref}: registry rejected the credential it was offered (HTTP ${result.status}) \u2014 this proves the credential is bad, not that the image is missing`
864
+ };
865
+ }
866
+ if (result.status >= 500) {
867
+ return {
868
+ classification: "unavailable",
869
+ detail: `${ref}: registry returned a server error (HTTP ${result.status})`
870
+ };
871
+ }
872
+ return { classification: "missing", detail: `${ref}: registry returned HTTP ${result.status}` };
873
+ }
874
+ return {
875
+ classification: "unavailable",
876
+ detail: `${ref}: registry HEAD succeeded (HTTP ${result.status}) but docker buildx could not resolve a digest`
877
+ };
878
+ }
712
879
  async function readProvenanceLabels(ref) {
713
880
  const { resolveImageLabels } = await import("./resolve-image-labels-N27XXTUG.js");
714
881
  return resolveImageLabels(ref, [
@@ -725,30 +892,93 @@ function loadDeployedState(filePath) {
725
892
  return JSON.parse(readFileSync(filePath, "utf8"));
726
893
  }
727
894
  function unsampledPinnedServices(specs, deployed) {
728
- return specs.filter((spec) => spec.origin !== "upstream-pinned" && spec.ghRepo && spec.releaseLane !== "none").filter((spec) => {
895
+ return specs.filter(
896
+ (spec) => spec.origin !== "upstream-pinned" && spec.ghRepo && isReleaseLaneWired(spec, { releaseLaneWired: deriveReleaseLaneWiring(spec) === true })
897
+ ).filter((spec) => {
729
898
  const entry = deployed[spec.key];
730
899
  if (entry?.ref) return false;
731
900
  if (entry?.absent) return false;
732
901
  return true;
733
902
  }).map((spec) => spec.key);
734
903
  }
904
+ async function checkReleaseGatePassed(ghRepo, workflowFile, tagCommit, latestTag) {
905
+ if (!workflowFile) {
906
+ return {
907
+ classification: "unverified",
908
+ detail: `no producer workflow is identified for ${ghRepo} (releaseWorkflowFile unset in the service roster). Matching runs by NAME (e.g. anything matching /release/i) is not provenance \u2014 this org has multiple workflows whose names match that pattern in the same repository. Identify the exact .github/workflows file that publishes this service's artifact and set releaseWorkflowFile before this can be verified.`
909
+ };
910
+ }
911
+ const res = await runWithDiagnostics("gh", [
912
+ "api",
913
+ `repos/${ghRepo}/actions/workflows/${encodeURIComponent(workflowFile)}/runs?head_sha=${tagCommit}&per_page=100`
914
+ ]);
915
+ if (!res.ok) {
916
+ return {
917
+ classification: "unverified",
918
+ detail: `could not query GitHub Actions runs for ${ghRepo}'s ${workflowFile}@${tagCommit}: ${res.error ?? "gh api call failed"}. Likely missing credential: gh CLI auth (GH_TOKEN / GH_PAT) with 'actions:read' on ${ghRepo} \u2014 or ${workflowFile} does not exist in ${ghRepo} at all (roster drift).`
919
+ };
920
+ }
921
+ let runs;
922
+ try {
923
+ const parsed = JSON.parse(res.stdout || "{}");
924
+ runs = parsed.workflow_runs ?? [];
925
+ } catch {
926
+ return {
927
+ classification: "unverified",
928
+ detail: `GitHub Actions API returned unparseable output for ${ghRepo}'s ${workflowFile}@${tagCommit}.`
929
+ };
930
+ }
931
+ if (runs.length === 0) {
932
+ return {
933
+ classification: "no-run-found",
934
+ detail: `no run of ${workflowFile} (the producer workflow for ${ghRepo}) was found at commit ${tagCommit} (tag ${latestTag}). An image with no producer run behind it cannot be attributed to a release that passed anything.`
935
+ };
936
+ }
937
+ const succeeded = runs.some((r) => r.status === "completed" && r.conclusion === "success");
938
+ if (succeeded) {
939
+ return {
940
+ classification: "passed",
941
+ detail: `${workflowFile} (${ghRepo}) concluded successfully for commit ${tagCommit}.`
942
+ };
943
+ }
944
+ const newest = runs[0];
945
+ return {
946
+ classification: "gate-failed",
947
+ detail: `${workflowFile} (${ghRepo}, event=${newest.event ?? "unknown"}) for commit ${tagCommit} (tag ${latestTag}) did not conclude successfully (status=${newest.status ?? "unknown"}, conclusion=${newest.conclusion ?? "n/a"}${newest.html_url ? `, ${newest.html_url}` : ""}).`
948
+ };
949
+ }
735
950
  async function gatherFacts(spec, previous, deployed) {
736
951
  const facts = {
737
952
  previousImageRef: previous[spec.key],
738
953
  // An `{ absent: true }` marker records that the host is NOT running this
739
954
  // service. It is an answer to the coverage question, not an image, so it
740
955
  // must not flow into the deployed-provenance guards as one.
741
- deployed: deployed[spec.key]?.ref ? deployed[spec.key] : void 0
956
+ deployed: deployed[spec.key]?.ref ? deployed[spec.key] : void 0,
957
+ // Derived from the repo's own release descriptor, never asserted (bug
958
+ // 61e7096e) — see `deriveReleaseLaneWiring` and `isReleaseLaneWired`.
959
+ releaseLaneWired: deriveReleaseLaneWiring(spec)
742
960
  };
743
- if (spec.origin === "upstream-pinned" || !spec.ghRepo || spec.releaseLane === "none") return facts;
961
+ if (spec.origin === "upstream-pinned" || !spec.ghRepo || !isReleaseLaneWired(spec, facts)) return facts;
744
962
  facts.latestTag = await fetchLatestTag(spec.ghRepo);
745
963
  if (!facts.latestTag) return facts;
746
964
  facts.tagCommit = await resolveTagCommit(spec.ghRepo, facts.latestTag);
747
965
  if (!facts.tagCommit) return facts;
748
966
  const source = spec.sourceImageName ?? spec.imageName;
749
967
  const commitSource = spec.commitImageName ?? source;
750
- facts.digestByCommit = await resolveImageDigest(`${commitSource}:sha-${facts.tagCommit}`);
751
- facts.digestByTag = await resolveImageDigest(`${source}:${facts.latestTag}`);
968
+ const commitRef = `${commitSource}:sha-${facts.tagCommit}`;
969
+ facts.digestByCommit = await resolveImageDigest(commitRef);
970
+ if (!facts.digestByCommit) facts.digestByCommitClassification = await classifyUnresolvedImage(commitRef);
971
+ const tagRef = `${source}:${facts.latestTag}`;
972
+ facts.digestByTag = await resolveImageDigest(tagRef);
973
+ if (!facts.digestByTag) facts.digestByTagClassification = await classifyUnresolvedImage(tagRef);
974
+ if (facts.digestByCommit || facts.digestByTag) {
975
+ facts.releaseGateStatus = await checkReleaseGatePassed(
976
+ spec.ghRepo,
977
+ spec.releaseWorkflowFile,
978
+ facts.tagCommit,
979
+ facts.latestTag
980
+ );
981
+ }
752
982
  const resolved = facts.digestByCommit ?? facts.digestByTag;
753
983
  if (!resolved) return facts;
754
984
  facts.labels = await readProvenanceLabels(
@@ -941,8 +1171,11 @@ if (isMainModule(import.meta.url) && process.argv[1]?.includes("stack-generate-m
941
1171
  });
942
1172
  }
943
1173
  export {
1174
+ checkReleaseGatePassed,
1175
+ classifyUnresolvedImage,
944
1176
  commitIsAncestorOfTag,
945
1177
  deployedTagIsOurRelease,
1178
+ deriveReleaseLaneWiring,
946
1179
  fetchLatestTag,
947
1180
  fetchReleaseTags,
948
1181
  gatherFacts,