@askexenow/exe-os 0.9.383 → 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 (430) hide show
  1. package/delivery/catalog.json +1254 -0
  2. package/deploy/compose/generate-env.ts +65 -9
  3. package/deploy/compose/setup.sh +205 -7
  4. package/dist/.dist-verified.json +3 -3
  5. package/dist/{active-agent-LFY5P5EX.js → active-agent-F5V4E4UL.js} +4 -4
  6. package/dist/{active-agent-BV4OE3GI.js → active-agent-YTBB4ZQM.js} +4 -4
  7. package/dist/{agent-defs-generator-IC2DVSI4.js → agent-defs-generator-7TFISIJQ.js} +3 -3
  8. package/dist/{agent-loop-GSUZJZBJ.js → agent-loop-EZ7LDAGD.js} +1 -1
  9. package/dist/{agentic-ontology-V3PFEFVZ.js → agentic-ontology-XVTUVV7W.js} +1 -1
  10. package/dist/{artifact-backup-EXBY3YQS.js → artifact-backup-TF6YWQT2.js} +3 -3
  11. package/dist/{backfill-metadata-NTCC7EMS.js → backfill-metadata-J6MXIDCW.js} +8 -8
  12. package/dist/{backup-verify-D3RU5JXC.js → backup-verify-6DVBQMDP.js} +1 -1
  13. package/dist/{behavior-injection-GWRLUR34.js → behavior-injection-XDA7ZCYN.js} +14 -13
  14. package/dist/{behavior-promotion-YSEL7K5K.js → behavior-promotion-4VLQ7LXK.js} +13 -12
  15. package/dist/{behaviors-FHQKACTI.js → behaviors-SCCZP7RZ.js} +12 -11
  16. package/dist/bin/agentic-ontology-backfill.js +9 -9
  17. package/dist/bin/agentic-reflection-backfill.js +10 -10
  18. package/dist/bin/agentic-semantic-label.js +9 -9
  19. package/dist/bin/backfill-conversations.js +10 -9
  20. package/dist/bin/backfill-responses.js +10 -9
  21. package/dist/bin/backfill-vectors.js +11 -10
  22. package/dist/bin/bulk-sync-postgres.js +20 -19
  23. package/dist/bin/cc-doctor.js +11 -10
  24. package/dist/bin/cleanup-stale-review-tasks.js +21 -20
  25. package/dist/bin/cli.js +27 -22
  26. package/dist/bin/deferred-daemon-restart.js +105 -104
  27. package/dist/bin/exe-agent-config.js +3 -3
  28. package/dist/bin/exe-agent.js +9 -9
  29. package/dist/bin/exe-assign.js +12 -11
  30. package/dist/bin/exe-boot.js +42 -41
  31. package/dist/bin/exe-call.js +5 -5
  32. package/dist/bin/exe-cloud.js +21 -20
  33. package/dist/bin/exe-config-dump.js +3 -3
  34. package/dist/bin/exe-dispatch.js +22 -21
  35. package/dist/bin/exe-doctor.js +7 -7
  36. package/dist/bin/exe-export-behaviors.js +16 -15
  37. package/dist/bin/exe-forget.js +11 -11
  38. package/dist/bin/exe-gateway.js +9 -9
  39. package/dist/bin/exe-grant.js +6 -6
  40. package/dist/bin/exe-healthcheck.js +11 -10
  41. package/dist/bin/exe-heartbeat.js +33 -27
  42. package/dist/bin/exe-kill.js +27 -26
  43. package/dist/bin/exe-launch-agent.js +34 -33
  44. package/dist/bin/exe-mcp.js +5 -5
  45. package/dist/bin/exe-memory-reads.js +8 -8
  46. package/dist/bin/exe-new-employee.js +9 -9
  47. package/dist/bin/exe-os-mcp-proxy.js +5 -5
  48. package/dist/bin/exe-pending-messages.js +22 -21
  49. package/dist/bin/exe-pending-notifications.js +21 -20
  50. package/dist/bin/exe-pending-reviews.js +22 -21
  51. package/dist/bin/exe-preflight.js +1 -1
  52. package/dist/bin/exe-rename.js +5 -5
  53. package/dist/bin/exe-review.js +26 -25
  54. package/dist/bin/exe-search.js +10 -10
  55. package/dist/bin/exe-session-cleanup.js +27 -26
  56. package/dist/bin/exe-settings.js +20 -19
  57. package/dist/bin/exe-start-codex.js +23 -22
  58. package/dist/bin/exe-start-opencode.js +20 -19
  59. package/dist/bin/exe-status.js +23 -22
  60. package/dist/bin/exe-support.js +3 -3
  61. package/dist/bin/exe-team.js +5 -5
  62. package/dist/bin/exe-watchdog.js +1 -1
  63. package/dist/bin/git-sweep.js +22 -21
  64. package/dist/bin/graph-backfill.js +9 -9
  65. package/dist/bin/graph-export.js +9 -9
  66. package/dist/bin/hooks-cli.js +1 -1
  67. package/dist/bin/import-history.js +12 -12
  68. package/dist/bin/install.js +107 -106
  69. package/dist/bin/intercom-check.js +11 -7
  70. package/dist/bin/mcp-sessions.js +2 -2
  71. package/dist/bin/orchestration-metrics.js +5 -5
  72. package/dist/bin/postgres-agentic-reflection-backfill.js +2 -2
  73. package/dist/bin/postgres-agentic-semantic-backfill.js +1 -1
  74. package/dist/bin/reconcile-backlog.js +2 -2
  75. package/dist/bin/registry-proxy.js +1 -1
  76. package/dist/bin/repair-document-chunks.js +8 -8
  77. package/dist/bin/scan-tasks.js +22 -21
  78. package/dist/bin/setup.js +2 -2
  79. package/dist/bin/shard-migrate.js +9 -9
  80. package/dist/bin/stack-update.js +622 -30
  81. package/dist/bin/verify-stack.js +1 -1
  82. package/dist/bin/vps-health-gate.js +1 -1
  83. package/dist/{boot-generation-OKYUBE3G.js → boot-generation-Q7LGQ3AO.js} +4 -4
  84. package/dist/{boot-review-sections-KFHON3GW.js → boot-review-sections-G5774FR5.js} +20 -19
  85. package/dist/build-manifest.json +1104 -1084
  86. package/dist/{capability-cards-WQHJXAC3.js → capability-cards-I3RHCF4F.js} +3 -3
  87. package/dist/{capacity-monitor-N2NCT6UR.js → capacity-monitor-7I7GDONU.js} +22 -21
  88. package/dist/{catchup-brief-WDEELMAD.js → catchup-brief-3T5PARIR.js} +31 -28
  89. package/dist/{check-image-pullability-5LAYCKW3.js → check-image-pullability-2AIVB4BX.js} +32 -0
  90. package/dist/{chunk-5LRIZHMH.js → chunk-2FKU4ZEO.js} +30 -22
  91. package/dist/{chunk-AH4X72T6.js → chunk-2PZTMSMG.js} +5 -5
  92. package/dist/{chunk-GK6V6AZ3.js → chunk-3B6FLNLV.js} +1 -1
  93. package/dist/{chunk-NY6SBR4O.js → chunk-3FGBBJYM.js} +15 -3
  94. package/dist/{chunk-O5LDG2AV.js → chunk-3OX34OC3.js} +22 -14
  95. package/dist/{chunk-LPBWEQOY.js → chunk-3RGTLZNO.js} +12 -12
  96. package/dist/{chunk-AITTVLVQ.js → chunk-3SUPEE6H.js} +3 -3
  97. package/dist/{chunk-IPA6VOZE.js → chunk-46VSBDUW.js} +2 -2
  98. package/dist/{chunk-642NFHVO.js → chunk-4AAMFWJT.js} +2 -2
  99. package/dist/{chunk-AYOCLUGP.js → chunk-4AR5XKCH.js} +1 -1
  100. package/dist/{chunk-GLQEJOXE.js → chunk-5MVKTNZP.js} +57 -0
  101. package/dist/{chunk-CZKDWW76.js → chunk-5U2IJBFV.js} +197 -27
  102. package/dist/{chunk-NRHFYGQH.js → chunk-6BJCDWSM.js} +1 -1
  103. package/dist/{chunk-WVY5SSAG.js → chunk-6FIC57PH.js} +1 -1
  104. package/dist/{chunk-S6STQE5T.js → chunk-6YDY6ZTD.js} +3 -3
  105. package/dist/{chunk-FPAPXMJA.js → chunk-72V3S44T.js} +12 -9
  106. package/dist/{chunk-DV6W44ZY.js → chunk-7J2ZQ4XN.js} +1 -1
  107. package/dist/{chunk-EYZKJY7K.js → chunk-7UHZBVP3.js} +53 -40
  108. package/dist/{chunk-ZE2GXNVJ.js → chunk-AGC2V7JS.js} +25 -12
  109. package/dist/{chunk-NUAVPYBH.js → chunk-AHESD3KW.js} +1 -1
  110. package/dist/{chunk-2MA6TC4L.js → chunk-ALRHGEAJ.js} +1 -1
  111. package/dist/{chunk-V3F4FWDN.js → chunk-ANVHWV2X.js} +1 -1
  112. package/dist/{chunk-WSEI3KH4.js → chunk-APL7HUE3.js} +15 -12
  113. package/dist/{chunk-PWYSCKTX.js → chunk-AZSTIAVL.js} +137 -15
  114. package/dist/chunk-AZXMR25O.js +545 -0
  115. package/dist/{chunk-XK352OKY.js → chunk-B7AMNZTC.js} +2 -2
  116. package/dist/{chunk-5AVXGIMQ.js → chunk-BPVFZ6Q4.js} +2 -2
  117. package/dist/{chunk-XTQ7R2PA.js → chunk-BV2IET6B.js} +73 -17
  118. package/dist/{chunk-3W3PXRTN.js → chunk-CH7BUBP3.js} +7 -7
  119. package/dist/{chunk-KHJAE3DF.js → chunk-CHIUS5QB.js} +10 -10
  120. package/dist/{chunk-HBMATN75.js → chunk-CM7N5MBY.js} +5 -5
  121. package/dist/{chunk-ZGTA4TXQ.js → chunk-CYCIX7AW.js} +2 -2
  122. package/dist/{chunk-RLIZUOTN.js → chunk-D3LXVAIQ.js} +2 -2
  123. package/dist/{chunk-7M2HH4BN.js → chunk-DMUOTCDN.js} +1 -1
  124. package/dist/{chunk-W67YI7WP.js → chunk-DYVLEMKS.js} +1 -1
  125. package/dist/{chunk-4LYVULBC.js → chunk-E3ZM32LF.js} +8 -8
  126. package/dist/{chunk-RXA2LNTL.js → chunk-E7C2WNR5.js} +4 -4
  127. package/dist/{chunk-DCEHRV3W.js → chunk-EGOEB42T.js} +3 -3
  128. package/dist/{chunk-L2PBBNKH.js → chunk-EIOGV75A.js} +2 -2
  129. package/dist/{chunk-F5DBJXTB.js → chunk-ELCRJGCH.js} +2 -2
  130. package/dist/{chunk-RJXOPNXY.js → chunk-ELEGH4DX.js} +115 -13
  131. package/dist/{chunk-AB3WZ2LC.js → chunk-EOTZSAQL.js} +1 -1
  132. package/dist/{chunk-UW22NW2B.js → chunk-EUGEFBGV.js} +3 -3
  133. package/dist/{chunk-36PEAE2S.js → chunk-EYMFVITZ.js} +1 -1
  134. package/dist/{chunk-4KNZKUDK.js → chunk-F4BBMIPG.js} +1 -1
  135. package/dist/{chunk-MCFEV74P.js → chunk-FHIFTSPL.js} +1 -1
  136. package/dist/{chunk-ZU5RWVNU.js → chunk-FMIYFHLE.js} +2 -2
  137. package/dist/{chunk-VTN2S7NH.js → chunk-FVLNNNH6.js} +3 -3
  138. package/dist/{chunk-ZVPVLYBG.js → chunk-GL47M7NY.js} +27 -8
  139. package/dist/{chunk-USRMWZHH.js → chunk-GSLFH4AI.js} +24 -12
  140. package/dist/{chunk-ZYXFGAIV.js → chunk-HA63SH5W.js} +1 -1
  141. package/dist/{chunk-7I4PNLNR.js → chunk-HU3VD4MQ.js} +1 -1
  142. package/dist/{chunk-36Y3O44B.js → chunk-I5XIW2BP.js} +7 -7
  143. package/dist/{chunk-JGNEGWQD.js → chunk-IGJMS7C5.js} +2 -2
  144. package/dist/{chunk-ZJDTQFY6.js → chunk-JA3Y5TV6.js} +1 -1
  145. package/dist/{chunk-YSNN626O.js → chunk-JDDM6C57.js} +1 -1
  146. package/dist/{chunk-BZSV52YR.js → chunk-JFJP6ATJ.js} +1 -1
  147. package/dist/{chunk-3LKQDDJ3.js → chunk-JFTUAV4J.js} +1 -1
  148. package/dist/{chunk-YWHLC4VZ.js → chunk-JJTPPAZY.js} +2513 -373
  149. package/dist/{chunk-PYMLQINV.js → chunk-KILR4FBR.js} +4 -4
  150. package/dist/{chunk-ECQ6KVVW.js → chunk-KTKIFXIP.js} +1 -1
  151. package/dist/{chunk-W6BFHT5C.js → chunk-KXYKSLW4.js} +11 -11
  152. package/dist/{chunk-YVVD25YI.js → chunk-L3VUW5M4.js} +1 -1
  153. package/dist/{chunk-NDN3ZMCW.js → chunk-L63V25HS.js} +6 -5
  154. package/dist/{chunk-BZ3YF6MG.js → chunk-LFBLQE2P.js} +1 -1
  155. package/dist/{chunk-2NIURKEP.js → chunk-LKTN22L6.js} +58 -22
  156. package/dist/{chunk-6BBFHDY3.js → chunk-LR5O2XWZ.js} +5 -5
  157. package/dist/{chunk-3KPJ5URE.js → chunk-LSNBTGW4.js} +1 -1
  158. package/dist/{chunk-KHGFI43T.js → chunk-MB47DRF5.js} +2 -2
  159. package/dist/{chunk-T3KBSR4O.js → chunk-MC4IM2CC.js} +12 -9
  160. package/dist/{chunk-4JF42BVF.js → chunk-MFAOAIUE.js} +4 -1
  161. package/dist/{chunk-T7EM74XC.js → chunk-MKM6D7JM.js} +9 -6
  162. package/dist/{chunk-2XBBXQLT.js → chunk-MOANZQXF.js} +1 -1
  163. package/dist/{chunk-CCUUMZXU.js → chunk-MPZ2AVNS.js} +2 -2
  164. package/dist/{chunk-SVFKV7QN.js → chunk-MROSARM5.js} +1 -1
  165. package/dist/{chunk-WHQQT5XN.js → chunk-MUAWCFW6.js} +5 -1
  166. package/dist/{chunk-MKDZQ5ZA.js → chunk-NF5FOSLD.js} +1 -1
  167. package/dist/{chunk-BKUEPHLH.js → chunk-NKEFYE4R.js} +1 -1
  168. package/dist/{chunk-NKNAKGTM.js → chunk-NVFNADTX.js} +12 -8
  169. package/dist/{chunk-6MILT557.js → chunk-NYLJQ2M2.js} +4 -4
  170. package/dist/{chunk-RNECR5Z6.js → chunk-OBBO6EJR.js} +1 -1
  171. package/dist/{chunk-CMADI6WN.js → chunk-P2UY34XE.js} +5 -5
  172. package/dist/{chunk-UGV5PUQR.js → chunk-P3QQ52QK.js} +2 -2
  173. package/dist/{chunk-6H4SQGT4.js → chunk-P3UX5EH4.js} +4 -4
  174. package/dist/{chunk-DJFM6JCJ.js → chunk-P4PIZOL2.js} +3 -3
  175. package/dist/{chunk-SC2TRT6S.js → chunk-P4XLIPB7.js} +1 -1
  176. package/dist/{chunk-2TPBLZBO.js → chunk-PL4CFSQ7.js} +1 -1
  177. package/dist/{chunk-LLZNPOGB.js → chunk-PLII76NJ.js} +58 -0
  178. package/dist/{chunk-YFP7LPOG.js → chunk-PRDDPQLC.js} +4 -4
  179. package/dist/{chunk-BZ546I4Q.js → chunk-PUBA5B4M.js} +24 -0
  180. package/dist/{chunk-6ODN2IXS.js → chunk-PWC3C5ME.js} +4 -4
  181. package/dist/{chunk-Z5QBRLWR.js → chunk-QFAFKEB5.js} +4 -4
  182. package/dist/{chunk-CL4J4757.js → chunk-QH5ZQ5SJ.js} +26 -0
  183. package/dist/{chunk-XP6ZSSZ6.js → chunk-QNZ4562V.js} +1 -1
  184. package/dist/{chunk-QHMIXDIA.js → chunk-QPTSA4PP.js} +1 -1
  185. package/dist/{chunk-TNUTMT3J.js → chunk-R5E7WNAC.js} +3 -3
  186. package/dist/{chunk-5LZYZGRD.js → chunk-RB3J2WYQ.js} +1 -1
  187. package/dist/{chunk-HPJ5PHDG.js → chunk-RDWIKDMY.js} +2 -2
  188. package/dist/{chunk-TLXFEIBQ.js → chunk-RVO5O5SR.js} +6 -6
  189. package/dist/{chunk-EWGUFJ7F.js → chunk-RZN2LEAK.js} +3 -3
  190. package/dist/{chunk-Q5O2ER4U.js → chunk-S26CV7BE.js} +57 -13
  191. package/dist/{chunk-S5OL3HXO.js → chunk-SDYWZRPN.js} +1 -1
  192. package/dist/{chunk-BOQZXNAW.js → chunk-T5FEAQES.js} +1 -1
  193. package/dist/{chunk-XU57KFD6.js → chunk-T5SM4RXY.js} +5 -1
  194. package/dist/{chunk-S3XJ2C44.js → chunk-TKAU7IJ2.js} +1 -1
  195. package/dist/{chunk-DZ3VKZ3C.js → chunk-TKS5GMYA.js} +1 -1
  196. package/dist/{chunk-TTLPYAM7.js → chunk-TNS63ATU.js} +1 -1
  197. package/dist/{chunk-53YKDX7M.js → chunk-UOPCVFVR.js} +16 -16
  198. package/dist/{chunk-ZHWE25YW.js → chunk-UX2EO653.js} +1 -1
  199. package/dist/{chunk-ERF6YZQA.js → chunk-UXN4BICC.js} +1 -1
  200. package/dist/{chunk-ZTOBDVKB.js → chunk-VF2KRROX.js} +1 -1
  201. package/dist/{chunk-HU36JAK4.js → chunk-VF3BZOZK.js} +5 -2
  202. package/dist/{chunk-BEIYEBTU.js → chunk-VHHX4UCP.js} +1 -1
  203. package/dist/{chunk-S3G7LJDK.js → chunk-VJEJ7JNB.js} +1 -1
  204. package/dist/{chunk-KG3SL2VF.js → chunk-VLBHZ6TF.js} +2 -2
  205. package/dist/{chunk-AOFW3H6S.js → chunk-VOVFUKEB.js} +5 -5
  206. package/dist/{chunk-R3SPFIPE.js → chunk-VROK4X2L.js} +1 -1
  207. package/dist/{chunk-K4BA46H4.js → chunk-W3KPQE7H.js} +4 -4
  208. package/dist/{chunk-6PAFSV4N.js → chunk-W6BZ4UGA.js} +1 -1
  209. package/dist/{chunk-WY7K2GNY.js → chunk-XEBKIWI7.js} +8 -8
  210. package/dist/{chunk-R5PL432W.js → chunk-XSUALA32.js} +2 -2
  211. package/dist/{chunk-SQ7QYLO3.js → chunk-XUZK23V7.js} +11 -6
  212. package/dist/{chunk-ZXQ2SLCZ.js → chunk-YLB365YX.js} +148 -5
  213. package/dist/{chunk-GOOLWD2J.js → chunk-YLFCH3VA.js} +21 -13
  214. package/dist/{chunk-ETIVP2P6.js → chunk-YRQ26MNP.js} +4 -4
  215. package/dist/chunk-YRUZK2QA.js +35 -0
  216. package/dist/{chunk-RQBGLL3Z.js → chunk-ZAEUEDTN.js} +1 -1
  217. package/dist/{chunk-QZW4T3GM.js → chunk-ZBPZDADW.js} +313 -43
  218. package/dist/{chunk-ZLPS3GR7.js → chunk-ZJQ56DZZ.js} +42 -1
  219. package/dist/{chunk-7TDDSOJQ.js → chunk-ZOTTYCP5.js} +3 -3
  220. package/dist/{chunk-PJ2ZJUM2.js → chunk-ZPP63JSQ.js} +1 -1
  221. package/dist/{chunk-XD6D4RNQ.js → chunk-ZT4LFTUJ.js} +1 -1
  222. package/dist/{cleanup-graph-garbage-YZOQQLJI.js → cleanup-graph-garbage-VQAJ2RBT.js} +9 -9
  223. package/dist/{cloud-sync-command-L4P7TIIR.js → cloud-sync-command-J7NEFUY7.js} +2 -2
  224. package/dist/{cloud-sync-db-init-IR3S4ZYH.js → cloud-sync-db-init-KWEMNMGA.js} +1 -1
  225. package/dist/{cloud-sync-shutdown-K46O655Z.js → cloud-sync-shutdown-P63AUTUI.js} +3 -3
  226. package/dist/{co-activation-ZPW3K6F3.js → co-activation-7IHRPBZN.js} +3 -3
  227. package/dist/{co-occurrence-HD7N27HR.js → co-occurrence-R5AG4OAU.js} +7 -7
  228. package/dist/{code-context-index-SQQMEGNQ.js → code-context-index-WFLLZBVB.js} +3 -2
  229. package/dist/{code-context-watcher-SHRFZ3GC.js → code-context-watcher-3QAPHO7N.js} +3 -2
  230. package/dist/{consent-passphrase-BQUOHQGM.js → consent-passphrase-5ZBDJ5G7.js} +2 -2
  231. package/dist/{content-extractor-5FBHNJBI.js → content-extractor-ZLXC6GNR.js} +2 -2
  232. package/dist/{conversation-entity-extractor-NDZS5U3J.js → conversation-entity-extractor-7FRKLLBD.js} +4 -4
  233. package/dist/{crdt-sync-BXDOLDB3.js → crdt-sync-IFRZOEIS.js} +4 -4
  234. package/dist/{crm-webhook-LV3TX3LT.js → crm-webhook-L2S63ASV.js} +2 -2
  235. package/dist/{cto-delegation-gate-DDQRFK4C.js → cto-delegation-gate-3WU7OHX7.js} +20 -19
  236. package/dist/{daemon-orchestration-DKGZA6VZ.js → daemon-orchestration-3VQYKLOR.js} +25 -24
  237. package/dist/{daemon-ready-R6M5FCNV.js → daemon-ready-VZ6ZHA2C.js} +1 -1
  238. package/dist/{dispatch-ack-X4DXUSKP.js → dispatch-ack-UYEAKON5.js} +2 -1
  239. package/dist/{doc-graph-extractor-3QULZX7K.js → doc-graph-extractor-YIR5E7OF.js} +7 -7
  240. package/dist/{documents-PXMQ655U.js → documents-QEHPTYIY.js} +12 -11
  241. package/dist/{dreaming-YDN6SB5W.js → dreaming-LNFE7DTN.js} +26 -25
  242. package/dist/{employee-boot-brief-6A4GLZLX.js → employee-boot-brief-ZTXDYNWM.js} +31 -30
  243. package/dist/{entity-boost-LY5IKPD5.js → entity-boost-R5N6JWXD.js} +1 -1
  244. package/dist/{exe-drift-4GUGVTPD.js → exe-drift-WYSJVZFO.js} +4 -4
  245. package/dist/{exe-export-LNYMMWJ6.js → exe-export-GOLNAEAV.js} +13 -12
  246. package/dist/{exe-import-FAZDYRI2.js → exe-import-U4BSI6OH.js} +13 -12
  247. package/dist/{exe-key-QRLCCKNV.js → exe-key-V42G3NGO.js} +105 -104
  248. package/dist/{exe-org-RQFTK3C2.js → exe-org-U4GLQ6OP.js} +24 -24
  249. package/dist/{exe-snapshot-PAHOT277.js → exe-snapshot-U7ONBYNY.js} +30 -29
  250. package/dist/{fast-db-init-UO7KLV35.js → fast-db-init-W3NGKAEU.js} +1 -1
  251. package/dist/{founder-context-OEB2OB3U.js → founder-context-ZSIBRVDM.js} +2 -2
  252. package/dist/{founder-monitor-envelope-73NOAFUE.js → founder-monitor-envelope-L3IWZLFY.js} +4 -4
  253. package/dist/gateway/index.js +15 -14
  254. package/dist/{gateway-client-YZ62NOC3.js → gateway-client-DJFCVIPT.js} +1 -1
  255. package/dist/{git-staleness-XZ4YA242.js → git-staleness-OF24QXFZ.js} +3 -3
  256. package/dist/{global-procedures-KUXA6TJS.js → global-procedures-WSIOWO43.js} +4 -4
  257. package/dist/{graph-auto-extract-B2ICIL4E.js → graph-auto-extract-IEVVN3L3.js} +7 -7
  258. package/dist/{graph-query-33NOX4G4.js → graph-query-JDZWAVCU.js} +1 -1
  259. package/dist/{graph-rag-YPCBTGO7.js → graph-rag-BKAD2XQA.js} +4 -4
  260. package/dist/{hook-integrity-OKADQMF3.js → hook-integrity-TPWDGX2M.js} +1 -1
  261. package/dist/{hook-prefetch-CULOQNP7.js → hook-prefetch-FD6VGJJA.js} +21 -20
  262. package/dist/hooks/bug-report-worker.js +25 -24
  263. package/dist/hooks/codex-stop-task-finalizer.js +27 -26
  264. package/dist/hooks/commit-complete.js +32 -28
  265. package/dist/hooks/error-recall.js +12 -12
  266. package/dist/hooks/exe-heartbeat-hook.js +5 -5
  267. package/dist/hooks/ingest-worker.js +12 -11
  268. package/dist/hooks/ingest.js +14 -14
  269. package/dist/hooks/instructions-loaded.js +7 -7
  270. package/dist/hooks/manifest.json +20 -20
  271. package/dist/hooks/notification.js +6 -6
  272. package/dist/hooks/post-compact.js +5 -5
  273. package/dist/hooks/post-tool-combined.js +15 -15
  274. package/dist/hooks/pre-compact.js +24 -23
  275. package/dist/hooks/pre-tool-use.js +2 -2
  276. package/dist/hooks/prompt-submit.js +43 -42
  277. package/dist/hooks/session-end.js +29 -28
  278. package/dist/hooks/session-start.js +22 -19
  279. package/dist/hooks/stop.js +30 -29
  280. package/dist/hooks/subagent-stop.js +26 -25
  281. package/dist/hooks/summary-worker.js +29 -28
  282. package/dist/index.js +34 -33
  283. package/dist/{installer-YDH5HHYZ.js → installer-NMOBSEZ2.js} +7 -7
  284. package/dist/{installer-DLXN6MIE.js → installer-OTI5SA43.js} +7 -7
  285. package/dist/{installer-YFNGAHNG.js → installer-SRJGE4GU.js} +7 -7
  286. package/dist/{intercom-queue-2O5ANKO2.js → intercom-queue-4FFXCBHO.js} +20 -19
  287. package/dist/lib/cloud-sync.js +20 -19
  288. package/dist/lib/consolidation.js +10 -10
  289. package/dist/lib/crypto.js +3 -3
  290. package/dist/lib/database.js +3 -3
  291. package/dist/lib/db-backup.js +3 -1
  292. package/dist/lib/db-daemon-client.js +4 -3
  293. package/dist/lib/db-write-worker.js +4 -4
  294. package/dist/lib/db.js +3 -3
  295. package/dist/lib/delivery-catalog.js +431 -0
  296. package/dist/lib/delivery-schemas.js +31 -503
  297. package/dist/lib/device-registry.js +1 -1
  298. package/dist/lib/embedder.js +3 -2
  299. package/dist/lib/employee-templates.js +5 -5
  300. package/dist/lib/employees.js +3 -3
  301. package/dist/lib/exe-daemon-client.js +2 -1
  302. package/dist/lib/exe-daemon.js +162 -97
  303. package/dist/lib/hybrid-search.js +10 -10
  304. package/dist/lib/identity.js +3 -3
  305. package/dist/lib/keychain.js +13 -1
  306. package/dist/lib/license.js +2 -2
  307. package/dist/lib/messaging.js +31 -22
  308. package/dist/lib/post-tool-memory.js +7 -7
  309. package/dist/lib/registry-proxy.js +1 -1
  310. package/dist/lib/reminders.js +4 -4
  311. package/dist/lib/schedules.js +9 -9
  312. package/dist/lib/session-registry.js +5 -5
  313. package/dist/lib/skill-learning.js +13 -12
  314. package/dist/lib/status-brief.js +2 -1
  315. package/dist/lib/store.js +8 -8
  316. package/dist/lib/task-router.js +4 -4
  317. package/dist/lib/tasks.js +22 -21
  318. package/dist/lib/tmux-routing.js +20 -19
  319. package/dist/lib/tmux-status.js +3 -1
  320. package/dist/lib/token-spend.js +4 -4
  321. package/dist/lib/ws-client.js +1 -1
  322. package/dist/{license-gate-2MXPY5DA.js → license-gate-R4JWTWM4.js} +3 -3
  323. package/dist/{license-recheck-7LRDLWFK.js → license-recheck-3MBJ4IJX.js} +1 -1
  324. package/dist/{license-sync-LQ4MVJCQ.js → license-sync-BVSG3WMW.js} +2 -2
  325. package/dist/{local-secret-inventory-3Z36XK6Q.js → local-secret-inventory-JWNBHZZ4.js} +6 -4
  326. package/dist/mailbox-inbox-MTAT4MXX.js +13 -0
  327. package/dist/{mailbox-outbox-DNDDP2HW.js → mailbox-outbox-OY4IU6S4.js} +2 -1
  328. package/dist/mcp/register-tools.js +104 -103
  329. package/dist/mcp/server.js +106 -105
  330. package/dist/mcp/tools/complete-reminder.js +5 -5
  331. package/dist/mcp/tools/create-reminder.js +5 -5
  332. package/dist/mcp/tools/create-task.js +26 -23
  333. package/dist/mcp/tools/deactivate-behavior.js +14 -13
  334. package/dist/mcp/tools/list-reminders.js +5 -5
  335. package/dist/mcp/tools/list-tasks.js +24 -23
  336. package/dist/mcp/tools/send-message.js +23 -22
  337. package/dist/mcp/tools/update-task.js +23 -22
  338. package/dist/{mcp-health-B5EKRCZG.js → mcp-health-4ZHU67LM.js} +9 -3
  339. package/dist/{mcp-http-config-E63VUDME.js → mcp-http-config-VUMSFWFH.js} +5 -5
  340. package/dist/{mcp-session-identity-TFNTAJR7.js → mcp-session-identity-DZHWEJRV.js} +20 -19
  341. package/dist/{memory-cards-T7EX4BGP.js → memory-cards-JVXTMSAT.js} +8 -8
  342. package/dist/{memory-graph-extractor-5BU6M7M2.js → memory-graph-extractor-PPBJMYFJ.js} +8 -8
  343. package/dist/{memory-poisoning-defense-37DM3TAR.js → memory-poisoning-defense-K5Q74XQ4.js} +3 -3
  344. package/dist/{memory-pressure-watchdog-RQV6HOQ4.js → memory-pressure-watchdog-YMJH5CSA.js} +21 -20
  345. package/dist/{memory-queue-client-UKBDOEIU.js → memory-queue-client-4G7HVRSX.js} +3 -2
  346. package/dist/{memory-reflection-PBIAI2RZ.js → memory-reflection-7BZWIHRE.js} +8 -8
  347. package/dist/{monitor-grants-JMKMPLSU.js → monitor-grants-Q7X3MYQP.js} +3 -3
  348. package/dist/{monitor-identity-ENPAVY4O.js → monitor-identity-ZQB4IXEE.js} +2 -2
  349. package/dist/{notification-ledger-X4QCCYEB.js → notification-ledger-XRAXL5OI.js} +24 -21
  350. package/dist/{notifications-CFWVEJ3C.js → notifications-JE3PX55X.js} +20 -19
  351. package/dist/{orchestration-events-Z3AIQATS.js → orchestration-events-JCQ5F5IJ.js} +4 -4
  352. package/dist/{orchestrator-UERD2XBD.js → orchestrator-X65INDTR.js} +22 -21
  353. package/dist/{org-brief-session-KCSOXIO6.js → org-brief-session-3PQ22UIX.js} +16 -15
  354. package/dist/{org-consent-policy-SHTWNGJ7.js → org-consent-policy-VGELJ7K7.js} +7 -6
  355. package/dist/{org-join-6DMHADPH.js → org-join-6TO5ZYUZ.js} +9 -9
  356. package/dist/{org-key-admin-BE5V64ES.js → org-key-admin-XHYVRRAZ.js} +9 -9
  357. package/dist/{org-key-pin-GZ4UH5VE.js → org-key-pin-TTTYGTQL.js} +3 -3
  358. package/dist/{org-membership-BNRVQVP7.js → org-membership-Y7T2BS57.js} +4 -4
  359. package/dist/{org-partner-config-UNXA6DXG.js → org-partner-config-OP4NEUNF.js} +7 -7
  360. package/dist/{org-partner-runtime-JBW5FWJG.js → org-partner-runtime-YNVUNT2R.js} +17 -16
  361. package/dist/{org-row-visibility-YDH3H5HS.js → org-row-visibility-JBBXNYXD.js} +1 -1
  362. package/dist/{pipeline-router-W2NECWQD.js → pipeline-router-EIBB7QNG.js} +4 -4
  363. package/dist/{plan-limits-Y74NOVVZ.js → plan-limits-MEWXYLEN.js} +6 -6
  364. package/dist/{pre-tool-use-impl-WNJJTS7I.js → pre-tool-use-impl-C6KJY22W.js} +35 -34
  365. package/dist/{project-name-RJDSE5O6.js → project-name-UYORSNGE.js} +4 -4
  366. package/dist/{projection-worker-6RGZZLY3.js → projection-worker-WYFDWS57.js} +2 -2
  367. package/dist/{prospective-memory-LTCFFWNL.js → prospective-memory-E6XBQFJA.js} +3 -3
  368. package/dist/{push-notifications-OSA4WUZF.js → push-notifications-M7YU63FY.js} +21 -20
  369. package/dist/{reproject-worktree-memories-3FEBUMTB.js → reproject-worktree-memories-B5XMGJSD.js} +20 -19
  370. package/dist/{reranker-AF7NH7EZ.js → reranker-SRA4BR7N.js} +1 -1
  371. package/dist/{retrieval-health-VKRILNSN.js → retrieval-health-P2JPZUPV.js} +1 -1
  372. package/dist/{review-polling-TFLN4T7C.js → review-polling-KQPN7IQE.js} +21 -20
  373. package/dist/runtime/index.js +25 -24
  374. package/dist/{session-events-SEVCMVVC.js → session-events-6LDDKKY3.js} +21 -20
  375. package/dist/{session-kill-telemetry-XSZB3KWR.js → session-kill-telemetry-5DSRGWCL.js} +21 -20
  376. package/dist/{session-scope-4UGYWAFG.js → session-scope-XG5R3P3D.js} +20 -19
  377. package/dist/{setup-wizard-5N5SZHCB.js → setup-wizard-7QFLZIKT.js} +2 -2
  378. package/dist/{shard-manager-UKWAOC2Y.js → shard-manager-HHHHV2KZ.js} +1 -1
  379. package/dist/{skill-refinement-26YAEXKO.js → skill-refinement-I5RMAHSC.js} +4 -4
  380. package/dist/{stack-generate-manifest-C77FJO5G.js → stack-generate-manifest-AKMZ3AUX.js} +6 -5
  381. package/dist/stack-init-5VKL5PL5.js +136 -0
  382. package/dist/{stack-promote-PV43IV5C.js → stack-promote-34CE2HHF.js} +5 -4
  383. package/dist/{stack-release-43QHVZ3L.js → stack-release-5PGWV5D4.js} +6 -5
  384. package/dist/{stack-update-6BHMJEK4.js → stack-update-ZQQ5YYPJ.js} +18 -3
  385. package/dist/{steward-gate-C6CVSMT7.js → steward-gate-AQJ6KT2C.js} +4 -4
  386. package/dist/{subagent-brief-injection-RUU3DVUH.js → subagent-brief-injection-3GU7YAWY.js} +33 -32
  387. package/dist/{support-inbox-D2P4JESB.js → support-inbox-NY5TB3FN.js} +9 -9
  388. package/dist/{support-outbox-7QGJK3LD.js → support-outbox-KNI3FR3G.js} +3 -2
  389. package/dist/{task-enforcement-MI5NESRP.js → task-enforcement-CAA6D2MH.js} +21 -20
  390. package/dist/{task-request-inbox-ZEFX5V2F.js → task-request-inbox-QBZVU66E.js} +9 -6
  391. package/dist/{task-scope-TTMFQBED.js → task-scope-NHXB4ZRN.js} +22 -19
  392. package/dist/{tasks-crud-3BGB5I55.js → tasks-crud-JHSWL5NM.js} +20 -19
  393. package/dist/{tasks-notify-XMBQWAOM.js → tasks-notify-7PBE4U7T.js} +21 -20
  394. package/dist/{tasks-review-7B2YNLOB.js → tasks-review-PPPVEE62.js} +20 -19
  395. package/dist/{telemetry-upload-M37GZK5Y.js → telemetry-upload-YU2VRNHX.js} +8 -8
  396. package/dist/{token-budget-CQATVFOK.js → token-budget-QCMWKG3K.js} +4 -4
  397. package/dist/{tool-capability-index-RGCEDV44.js → tool-capability-index-7AWQAJRP.js} +1 -1
  398. package/dist/{tool-gates-VXITVRFQ.js → tool-gates-5Q3RSQEG.js} +1 -1
  399. package/dist/{tool-gates-JWVSAYTW.js → tool-gates-QD26D2NE.js} +1 -1
  400. package/dist/{tool-telemetry-4JZ7FOJB.js → tool-telemetry-LTOIC64I.js} +1 -1
  401. package/dist/tui/App.js +30 -29
  402. package/dist/{tui-data-WYTAUJGH.js → tui-data-NDBXD6U7.js} +24 -23
  403. package/dist/{update-support-677WC3GL.js → update-support-BMJM4NG7.js} +17 -16
  404. package/dist/{whatsapp-4BSW74A2.js → whatsapp-QQLDAHUX.js} +2 -2
  405. package/dist/{wiki-acl-OGMGHBOL.js → wiki-acl-W6WDCVCP.js} +1 -1
  406. package/dist/{work-claims-5BS242P4.js → work-claims-6DM32MGO.js} +4 -4
  407. package/dist/{work-state-heartbeat-5ZA3IO24.js → work-state-heartbeat-HG7D4AWJ.js} +1 -1
  408. package/dist/{workflow-engine-OBEVRGMJ.js → workflow-engine-ZWC6CCXE.js} +2 -2
  409. package/dist/{worktree-XC4RBKKR.js → worktree-EMQCPGFE.js} +5 -5
  410. package/dist/{worktree-sweep-IXU4LYC5.js → worktree-sweep-XVUJZBXV.js} +6 -6
  411. package/package.json +13 -6
  412. package/release-notes.json +37 -41
  413. package/dist/mailbox-inbox-XE72D3AX.js +0 -10
  414. /package/dist/{chunk-AD3BEMDA.js → chunk-2KY7WZZF.js} +0 -0
  415. /package/dist/{chunk-VAXC5I2H.js → chunk-2Q2CD6CD.js} +0 -0
  416. /package/dist/{chunk-GEEWKHA4.js → chunk-AJK2PVQW.js} +0 -0
  417. /package/dist/{chunk-XTREZV4R.js → chunk-AWWDKF22.js} +0 -0
  418. /package/dist/{chunk-3SWW7CHT.js → chunk-DN3ZR3UE.js} +0 -0
  419. /package/dist/{chunk-4WU2UNXL.js → chunk-DZN7SDY2.js} +0 -0
  420. /package/dist/{chunk-TBPJ2GNW.js → chunk-GIRD7O5X.js} +0 -0
  421. /package/dist/{chunk-7C33VMAN.js → chunk-JRIH6I7D.js} +0 -0
  422. /package/dist/{chunk-FSI7PM76.js → chunk-M4XY4JRK.js} +0 -0
  423. /package/dist/{chunk-VK3MMYBD.js → chunk-P2VVMGMI.js} +0 -0
  424. /package/dist/{chunk-OBFAJFYQ.js → chunk-Q46NYJ77.js} +0 -0
  425. /package/dist/{chunk-Q7ESNZFY.js → chunk-U2D6PJ5T.js} +0 -0
  426. /package/dist/{chunk-VIDAIUVD.js → chunk-XDVOGDBC.js} +0 -0
  427. /package/dist/{core-memory-E2PKUID3.js → core-memory-O6D5UC3T.js} +0 -0
  428. /package/dist/{memory-isolation-PUONYUJ4.js → memory-isolation-EBFFC6HF.js} +0 -0
  429. /package/dist/{oauth-server-6LCX2VHS.js → oauth-server-ZKBUHDFI.js} +0 -0
  430. /package/dist/{project-boot-AFWDFRTX.js → project-boot-VEYFCCSL.js} +0 -0
@@ -1,5 +1,6 @@
1
1
  import { randomBytes } from "node:crypto";
2
- import { readFileSync } from "node:fs";
2
+ import { existsSync, readFileSync } from "node:fs";
3
+ import { fileURLToPath } from "node:url";
3
4
  // ---------------------------------------------------------------------------
4
5
  // IMAGE PINS — DERIVED FROM THE SIGNED MANIFEST. NEVER HAND-TYPED.
5
6
  //
@@ -26,7 +27,52 @@ const REGISTRY = "ghcr.io/askexe";
26
27
  // own registry constant rather than reusing REGISTRY (bug 58840873).
27
28
  const AUTH_REGISTRY = "update.askexe.com/askexe";
28
29
 
29
- const MANIFEST_PATH = new URL("../stack-manifests/v0.9.json", import.meta.url);
30
+ // Bug cff0de47: the manifest used to be resolved as ONE path relative to this
31
+ // module's own file (`../stack-manifests/v0.9.json`). The documented VPS install
32
+ // copies `deploy/compose/*` into /opt/exe-stack WITHOUT its sibling
33
+ // `deploy/stack-manifests/`, so the relocated generator looked for
34
+ // /opt/stack-manifests/v0.9.json — a directory nobody ever creates — and died at
35
+ // MODULE INITIALIZATION before generating a single line of configuration.
36
+ //
37
+ // Resolution is now an ordered search over EXPLICIT, configurable locations, so
38
+ // relocating this file cannot break it:
39
+ // 1. $EXE_STACK_MANIFEST — explicit override (setup.sh exports it)
40
+ // 2. <this dir>/stack-manifests/… — manifest copied ALONGSIDE the compose files
41
+ // 3. <this dir>/../stack-manifests/…— in-repo / in-package layout
42
+ // A failure names every location searched instead of one phantom path.
43
+ const MANIFEST_FILENAME = "v0.9.json";
44
+ const MANIFEST_PATH_ENV_VAR = "EXE_STACK_MANIFEST";
45
+
46
+ export function manifestSearchPaths(
47
+ env: NodeJS.ProcessEnv = process.env,
48
+ moduleUrl: string = import.meta.url,
49
+ ): string[] {
50
+ const paths: string[] = [];
51
+ const override = (env[MANIFEST_PATH_ENV_VAR] ?? "").trim();
52
+ if (override) paths.push(override);
53
+ paths.push(fileURLToPath(new URL(`./stack-manifests/${MANIFEST_FILENAME}`, moduleUrl)));
54
+ paths.push(fileURLToPath(new URL(`../stack-manifests/${MANIFEST_FILENAME}`, moduleUrl)));
55
+ return paths;
56
+ }
57
+
58
+ export function resolveManifestPath(
59
+ env: NodeJS.ProcessEnv = process.env,
60
+ moduleUrl: string = import.meta.url,
61
+ exists: (p: string) => boolean = existsSync,
62
+ ): string {
63
+ const candidates = manifestSearchPaths(env, moduleUrl);
64
+ for (const candidate of candidates) {
65
+ if (exists(candidate)) return candidate;
66
+ }
67
+ throw new Error(
68
+ `generate-env: the signed stack manifest (${MANIFEST_FILENAME}) was not found. Searched:\n` +
69
+ candidates.map((c) => ` - ${c}`).join("\n") +
70
+ `\nThe manifest is the single source of truth for every image pin, so generation cannot ` +
71
+ `continue without it. Copy deploy/stack-manifests/ next to these compose files, or set ` +
72
+ `${MANIFEST_PATH_ENV_VAR}=/path/to/${MANIFEST_FILENAME}. ` +
73
+ `This is NOT a node/tsx problem.`,
74
+ );
75
+ }
30
76
 
31
77
  type ManifestFile = {
32
78
  latest: string;
@@ -34,11 +80,12 @@ type ManifestFile = {
34
80
  };
35
81
 
36
82
  function loadManifestServices(): Record<string, { image?: string }> {
37
- const manifest = JSON.parse(readFileSync(MANIFEST_PATH, "utf8")) as ManifestFile;
83
+ const manifestPath = resolveManifestPath();
84
+ const manifest = JSON.parse(readFileSync(manifestPath, "utf8")) as ManifestFile;
38
85
  const services = manifest.stacks?.[manifest.latest]?.services;
39
86
  if (!services) {
40
87
  throw new Error(
41
- `generate-env: stack manifest ${MANIFEST_PATH.pathname} has no services for latest="${manifest.latest}". ` +
88
+ `generate-env: stack manifest ${manifestPath} has no services for latest="${manifest.latest}". ` +
42
89
  `Refusing to generate a .env with no pins — that is exactly the silent-substitution failure ` +
43
90
  `the manifest-as-single-source-of-truth change exists to prevent.`,
44
91
  );
@@ -192,9 +239,18 @@ export interface GenerateEnvOptions {
192
239
  * a fresh deploy and the checked-in .env.example are unchanged.
193
240
  */
194
241
  disableSignup?: boolean;
242
+ /**
243
+ * The CRM's first administrator (bug cff0de47). When supplied it is written
244
+ * straight into EXE_CRM_ADMIN_EMAIL instead of the CHANGEME_ADMIN_EMAIL placeholder, so the documented first-run path produces
245
+ * a .env that the deploy gate accepts. It is still never GUESSED — no
246
+ * admin@<domain> default — because it must be a real mailbox that also exists
247
+ * in GoTrue.
248
+ */
249
+ adminEmail?: string;
195
250
  }
196
251
 
197
252
  export function generateEnv(options: GenerateEnvOptions): string {
253
+ const adminEmail = (options.adminEmail ?? "").trim();
198
254
  const normalizedDomain = normalizeDomain(options.domain);
199
255
  const normalizedClientName = normalizeClientName(options.clientName);
200
256
  const gatewayWsAuthToken = randomSecret(RANDOM_SECRET_48);
@@ -318,8 +374,8 @@ export function generateEnv(options: GenerateEnvOptions): string {
318
374
  // refused (e51ca54c §10.6b). It cannot be generated — it must be a real
319
375
  // mailbox that also exists in GoTrue — so it ships as SET_MANUALLY rather
320
376
  // than as a random secret or a guessed admin@<domain>.
321
- MANUAL_VALUE_COMMENT,
322
- "EXE_CRM_ADMIN_EMAIL=CHANGEME_ADMIN_EMAIL",
377
+ ...(adminEmail ? [] : [MANUAL_VALUE_COMMENT]),
378
+ `EXE_CRM_ADMIN_EMAIL=${adminEmail || "CHANGEME_ADMIN_EMAIL"}`,
323
379
  `CRM_HOST_PORT=${CRM_HOST_PORT}`,
324
380
  "",
325
381
  "# --- Wiki ---",
@@ -935,7 +991,7 @@ export function joinEnvLines(lines: string[]): string {
935
991
  function printUsage(): void {
936
992
  process.stderr.write(
937
993
  "Usage:\n" +
938
- " npx tsx deploy/compose/generate-env.ts <client-name> <domain> [license-key]\n" +
994
+ " npx tsx deploy/compose/generate-env.ts <client-name> <domain> [license-key] [admin-email]\n" +
939
995
  " npx tsx deploy/compose/generate-env.ts --example\n",
940
996
  );
941
997
  }
@@ -957,13 +1013,13 @@ function main(): void {
957
1013
  return;
958
1014
  }
959
1015
 
960
- const [clientName, domain, licenseKey] = args;
1016
+ const [clientName, domain, licenseKey, adminEmail] = args;
961
1017
  if (!clientName || !domain) {
962
1018
  printUsage();
963
1019
  process.exit(1);
964
1020
  }
965
1021
 
966
- process.stdout.write(generateEnv({ clientName, domain, licenseKey }));
1022
+ process.stdout.write(generateEnv({ clientName, domain, licenseKey, adminEmail }));
967
1023
  }
968
1024
 
969
1025
  if (isCliInvocation()) {
@@ -14,17 +14,106 @@ info() { echo -e "${GREEN}[setup]${NC} $1"; }
14
14
  warn() { echo -e "${YELLOW}[setup]${NC} $1"; }
15
15
  err() { echo -e "${RED}[setup]${NC} $1" >&2; }
16
16
 
17
+ # Read one KEY from .env, empty if absent. Used to decide whether a RE-RUN
18
+ # already has the configuration this run did not pass on the command line.
19
+ get_env_var() {
20
+ [[ -f .env ]] || { echo ""; return 0; }
21
+ local raw
22
+ raw=$(grep -E "^$1=" .env 2>/dev/null | head -n1 | cut -d= -f2- || true)
23
+ # set_env_var writes dotenv DOUBLE-QUOTED values, so undo that quoting here —
24
+ # otherwise a re-run compares `"true"` against `true` and takes the wrong
25
+ # branch. Values written by generate-env.ts are unquoted and pass through.
26
+ if [[ ${#raw} -ge 2 && "$raw" == '"'*'"' ]]; then
27
+ local bs='\' dq='"' dollar='$'
28
+ raw="${raw:1:${#raw}-2}"
29
+ raw="${raw//$dollar$dollar/$dollar}"
30
+ raw="${raw//"$bs$dq"/$dq}"
31
+ raw="${raw//"$bs$bs"/$bs}"
32
+ fi
33
+ printf '%s\n' "$raw"
34
+ }
35
+
36
+ # Set (or append) one KEY=VALUE in .env WITHOUT echoing the value. sed cannot be
37
+ # used safely here: secrets contain /, & and = which are sed metacharacters.
38
+ #
39
+ # COMPOSE INTERPOLATES .env VALUES, so a `$` written raw is not a `$`. An SMTP
40
+ # password of `abc$TOKEN` is read by Compose as the variable TOKEN and becomes
41
+ # `abc` — the credential is silently changed, email verification and password
42
+ # reset stop working, and nothing in the stack reports a wrong password as
43
+ # anything but a failed login. Measured:
44
+ #
45
+ # .env: SMTP_PASS=abc$TOKEN -> docker compose config -> P: abc
46
+ # .env: SMTP_PASS=abc$$TOKEN -> docker compose config -> P: abc$$TOKEN
47
+ #
48
+ # (`docker compose config` re-escapes a literal `$` as `$$` on output, which is
49
+ # how the second line reads back as the intended `abc$TOKEN`.)
50
+ #
51
+ # ESCAPING `$` IS NOT ENOUGH: an UNQUOTED value also loses everything from the
52
+ # first `#`, and its surrounding whitespace. Measured the same way:
53
+ #
54
+ # .env: SMTP_PASS=abc #def -> docker compose config -> P: abc
55
+ # .env: SMTP_PASS="abc #def" -> docker compose config -> P: abc #def
56
+ #
57
+ # So values are written dotenv DOUBLE-QUOTED, with `\`, `"` and `$` escaped.
58
+ # These are literal secrets and hostnames, never expressions — nothing here is
59
+ # meant to interpolate. get_env_var() undoes exactly this quoting.
60
+ set_env_var() {
61
+ local key="$1" value="$2"
62
+ # The replacement side of ${var//x/y} IS expanded, so a literal `$$` written
63
+ # there becomes the shell's PID — `abc$TOKEN` came out as `abc87319TOKEN`.
64
+ # Going through a variable whose value is a single `$` keeps both characters
65
+ # literal, because an expansion's RESULT is not expanded again.
66
+ local dollar='$' bs='\' dq='"'
67
+ # The PATTERN side is quoted: an unquoted `$bs` is a lone backslash, which the
68
+ # pattern matcher reads as an escape character and matches nothing, so `a\b`
69
+ # went out unescaped and Compose read `\b` as a BACKSPACE byte.
70
+ value="${value//"$bs"/$bs$bs}" # backslash first: it escapes the rest
71
+ value="${value//$dq/$bs$dq}"
72
+ value="${value//$dollar/$dollar$dollar}"
73
+ value="$dq$value$dq"
74
+ SEV_KEY="$key" SEV_VALUE="$value" awk '
75
+ $0 ~ "^" ENVIRON["SEV_KEY"] "=" { print ENVIRON["SEV_KEY"] "=" ENVIRON["SEV_VALUE"]; found=1; next }
76
+ { print }
77
+ END { if (!found) print ENVIRON["SEV_KEY"] "=" ENVIRON["SEV_VALUE"] }
78
+ ' .env > .env.setenv.tmp && mv .env.setenv.tmp .env
79
+ chmod 600 .env 2>/dev/null || true
80
+ }
81
+
17
82
  # Parse args
18
- CLIENT="" DOMAIN="" LICENSE=""
83
+ CLIENT="" DOMAIN="" LICENSE="" ADMIN_EMAIL="" TUNNEL_TOKEN=""
84
+ SMTP_HOST="" SMTP_PORT="" SMTP_USER="" SMTP_PASS="" NO_EMAIL="no"
19
85
  while [[ $# -gt 0 ]]; do
20
86
  case $1 in
21
87
  --client) CLIENT="$2"; shift 2;;
22
88
  --domain) DOMAIN="$2"; shift 2;;
23
89
  --license) LICENSE="$2"; shift 2;;
90
+ --admin-email) ADMIN_EMAIL="$2"; shift 2;;
91
+ --tunnel-token) TUNNEL_TOKEN="$2"; shift 2;;
92
+ --smtp-host) SMTP_HOST="$2"; shift 2;;
93
+ --smtp-port) SMTP_PORT="$2"; shift 2;;
94
+ --smtp-user) SMTP_USER="$2"; shift 2;;
95
+ --smtp-pass) SMTP_PASS="$2"; shift 2;;
96
+ --no-email) NO_EMAIL="yes"; shift 1;;
24
97
  *) err "Unknown arg: $1"; exit 1;;
25
98
  esac
26
99
  done
27
- [[ -z "$CLIENT" || -z "$DOMAIN" ]] && { err "Usage: ./setup.sh --client <name> --domain <domain>"; exit 1; }
100
+ [[ -z "$CLIENT" || -z "$DOMAIN" ]] && { err "Usage: ./setup.sh --client <name> --domain <domain> --admin-email <you@your-domain> [--tunnel-token <token>] [--smtp-host <host> --smtp-user <user> --smtp-pass <pass> | --no-email] [--license <key>]"; exit 1; }
101
+ # bug cff0de47: the CRM seeds its FIRST workspace owner from EXE_CRM_ADMIN_EMAIL.
102
+ # Without it the CRM boots healthy with no workspace and no user, and the first
103
+ # sign-in is refused with no way in. Ask for it here rather than deploying a
104
+ # stack nobody can log into (preflight refuses it either way).
105
+ if [[ -z "$ADMIN_EMAIL" ]]; then
106
+ if [[ -t 0 ]]; then
107
+ read -r -p " Admin email (owns the CRM/wiki; must be a real mailbox): " ADMIN_EMAIL
108
+ fi
109
+ fi
110
+ if [[ -z "$ADMIN_EMAIL" ]]; then
111
+ err "--admin-email is required. It becomes EXE_CRM_ADMIN_EMAIL: the mailbox that"
112
+ err "owns this stack. The CRM seeds its first workspace for exactly this address;"
113
+ err "without it the CRM comes up healthy but empty and NOBODY can sign in."
114
+ err " ./setup.sh --client $CLIENT --domain $DOMAIN --admin-email you@$DOMAIN${LICENSE:+ --license $LICENSE}"
115
+ exit 1
116
+ fi
28
117
 
29
118
  SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
30
119
  cd "$SCRIPT_DIR"
@@ -59,13 +148,44 @@ else
59
148
  # so any failure of the generator silently deployed ancient images that bypass
60
149
  # the manifest's digest-pinning entirely. There is NO safe inline fallback for
61
150
  # image tags — fail loudly instead and let the operator install node/npx.
151
+ # Bug cff0de47: generate-env.ts reads the SIGNED STACK MANIFEST at module
152
+ # initialization. The documented install copies deploy/compose/* into
153
+ # /opt/exe-stack without its sibling deploy/stack-manifests/, so the generator
154
+ # died on a manifest path that exists only inside the npm package — and the
155
+ # error below blamed node/tsx, sending the operator to debug the wrong thing.
156
+ # Locate the manifest explicitly and hand the generator its path.
157
+ if [[ -z "${EXE_STACK_MANIFEST:-}" ]]; then
158
+ for candidate in \
159
+ "$SCRIPT_DIR/stack-manifests/v0.9.json" \
160
+ "$SCRIPT_DIR/../stack-manifests/v0.9.json" \
161
+ "$(npm root -g 2>/dev/null)/@askexenow/exe-os/deploy/stack-manifests/v0.9.json"; do
162
+ if [[ -f "$candidate" ]]; then EXE_STACK_MANIFEST="$candidate"; break; fi
163
+ done
164
+ fi
165
+ if [[ -z "${EXE_STACK_MANIFEST:-}" || ! -f "${EXE_STACK_MANIFEST}" ]]; then
166
+ err "Stack manifest v0.9.json not found. Searched:"
167
+ err " - \$EXE_STACK_MANIFEST (${EXE_STACK_MANIFEST:-unset})"
168
+ err " - $SCRIPT_DIR/stack-manifests/v0.9.json"
169
+ err " - $SCRIPT_DIR/../stack-manifests/v0.9.json"
170
+ err " - \$(npm root -g)/@askexenow/exe-os/deploy/stack-manifests/v0.9.json"
171
+ err ""
172
+ err "The manifest is the single source of truth for every image pin, so .env"
173
+ err "cannot be generated without it. This is NOT a node/tsx problem."
174
+ err "Fix: run 'exe-os stack-init --dir $SCRIPT_DIR' (it copies the compose files"
175
+ err "AND the manifest), or set EXE_STACK_MANIFEST=/path/to/v0.9.json."
176
+ exit 1
177
+ fi
178
+ info "Using stack manifest: $EXE_STACK_MANIFEST"
179
+ export EXE_STACK_MANIFEST
62
180
  if command -v node >/dev/null 2>&1 && command -v npx >/dev/null 2>&1; then
63
181
  # Run via npx tsx (the project is pure ESM — require() is forbidden).
64
- if ! npx --yes tsx "$SCRIPT_DIR/generate-env.ts" "$CLIENT" "$DOMAIN" "${LICENSE:-}" > .env 2>/tmp/exe-generate-env.err; then
182
+ if ! npx --yes tsx "$SCRIPT_DIR/generate-env.ts" "$CLIENT" "$DOMAIN" "${LICENSE:-}" "$ADMIN_EMAIL" > .env 2>/tmp/exe-generate-env.err; then
65
183
  rm -f .env
66
184
  err "generate-env.ts failed — refusing to write a .env with stale fallback image tags."
67
185
  err "Generator error:"; cat /tmp/exe-generate-env.err >&2 || true
68
- err "Fix node/tsx and re-run setup.sh (the inline fallback was removed: bug 716c0f6e)."
186
+ err "If the error above is about a missing manifest, see EXE_STACK_MANIFEST"
187
+ err "(currently: $EXE_STACK_MANIFEST). Otherwise fix node/tsx and re-run"
188
+ err "setup.sh (the inline fallback was removed: bug 716c0f6e)."
69
189
  exit 1
70
190
  fi
71
191
  else
@@ -80,6 +200,79 @@ else
80
200
  info ".env generated with auto-generated secrets (chmod 600)"
81
201
  fi
82
202
 
203
+ # Step 2a: Cloudflare tunnel token.
204
+ #
205
+ # bug cff0de47: the gated deploy at the end of this script REFUSES to run
206
+ # without a tunnel token (the cloudflared service has no compose profile gate,
207
+ # so a stack without a token has no public ingress). The customer guide used to
208
+ # hand the token over in a LATER step than the one that runs this script, so the
209
+ # documented order could never complete on a fresh machine. Take it here.
210
+ if [[ -n "$TUNNEL_TOKEN" ]]; then
211
+ set_env_var CLOUDFLARE_TUNNEL_TOKEN "$TUNNEL_TOKEN"
212
+ info "Cloudflare tunnel token written to .env"
213
+ else
214
+ warn "No --tunnel-token given. The deploy step below REQUIRES CLOUDFLARE_TUNNEL_TOKEN"
215
+ warn "in .env (Zero Trust > Networks > Tunnels > your tunnel > install token)."
216
+ warn "Set it and re-run this script, or re-run with --tunnel-token <token>."
217
+ fi
218
+
219
+ # Step 2a-ii: Email delivery.
220
+ #
221
+ # bug cff0de47: a freshly generated .env ships SMTP_HOST empty and
222
+ # GOTRUE_MAILER_AUTOCONFIRM=false, and the deploy preflight REFUSES that
223
+ # combination — password-reset and email-verification would silently never
224
+ # send. Every fresh install hit it, and the customer guide never mentioned
225
+ # email at all. Ask for it here rather than deploying a stack whose recovery
226
+ # flow is dead, or record the operator's explicit decision to run without email.
227
+ if [[ "$NO_EMAIL" == "yes" ]]; then
228
+ set_env_var GOTRUE_MAILER_AUTOCONFIRM "true"
229
+ warn "Email flows DISABLED (--no-email): GOTRUE_MAILER_AUTOCONFIRM=true."
230
+ warn "Sign-ups are auto-confirmed and there is NO password-reset email."
231
+ warn "Signup stays disabled (invite-only), so this does not open registration."
232
+ elif [[ -n "$SMTP_HOST" ]]; then
233
+ set_env_var SMTP_HOST "$SMTP_HOST"
234
+ if [[ -n "$SMTP_PORT" ]]; then set_env_var SMTP_PORT "$SMTP_PORT"; fi
235
+ if [[ -n "$SMTP_USER" ]]; then set_env_var SMTP_USER "$SMTP_USER"; fi
236
+ if [[ -n "$SMTP_PASS" ]]; then set_env_var SMTP_PASS "$SMTP_PASS"; fi
237
+ # GOTRUE_MAILER_AUTOCONFIRM IS DERIVED FROM THE MAILER DECISION, not left at
238
+ # whatever a previous run wrote. Switching a `--no-email` install to SMTP used
239
+ # to leave AUTOCONFIRM=true behind: setup announced that verification would
240
+ # send while GoTrue kept auto-confirming every account without ever proving
241
+ # the mailbox belonged to the person signing up — and preflight's smtp_recovery
242
+ # check short-circuits on AUTOCONFIRM=true, so nothing downstream said
243
+ # otherwise. Each branch here writes the flag its own decision implies.
244
+ # (codex on PR #1152)
245
+ set_env_var GOTRUE_MAILER_AUTOCONFIRM "false"
246
+ info "SMTP configured ($SMTP_HOST) — email verification and password reset will send."
247
+ elif [[ -n "$(get_env_var SMTP_HOST)" ]]; then
248
+ # A RE-RUN IS NOT A FRESH INSTALL. This script is documented as re-runnable —
249
+ # the customer guide's own tunnel-token retry re-invokes it — and demanding
250
+ # the email flags again on every invocation made that retry fail on a stack
251
+ # that was already configured correctly. Judge the EFFECTIVE configuration in
252
+ # .env, not the flags of this particular run. (codex on PR #1152)
253
+ info "SMTP already configured in .env ($(get_env_var SMTP_HOST)) — keeping it."
254
+ if [[ "$(get_env_var GOTRUE_MAILER_AUTOCONFIRM)" == "true" ]]; then
255
+ # No decision was made THIS run, so this is reported, not silently flipped:
256
+ # SMTP + AUTOCONFIRM=true can be deliberate on an invite-only stack.
257
+ warn "...but GOTRUE_MAILER_AUTOCONFIRM=true, so accounts are auto-confirmed"
258
+ warn "WITHOUT verifying the mailbox. Re-run with --smtp-host to enforce"
259
+ warn "verification, or set GOTRUE_MAILER_AUTOCONFIRM=false in .env."
260
+ fi
261
+ elif [[ "$(get_env_var GOTRUE_MAILER_AUTOCONFIRM)" == "true" ]]; then
262
+ warn "Email flows already DISABLED in .env (GOTRUE_MAILER_AUTOCONFIRM=true) — keeping that choice."
263
+ warn "Sign-ups are auto-confirmed and there is NO password-reset email."
264
+ else
265
+ err "No email delivery configured. A stack with SMTP_HOST empty and"
266
+ err "GOTRUE_MAILER_AUTOCONFIRM=false cannot send password-reset or"
267
+ err "email-verification messages, and the deploy gate refuses it."
268
+ err ""
269
+ err "Either supply SMTP credentials:"
270
+ err " --smtp-host smtp.example.com --smtp-port 587 --smtp-user <user> --smtp-pass <pass>"
271
+ err "or run without email flows (sign-ups auto-confirmed, no password reset):"
272
+ err " --no-email"
273
+ exit 1
274
+ fi
275
+
83
276
  # Step 2b: Host-access consent for the monitor agent.
84
277
  #
85
278
  # exe-monitor-agent reports fleet health to the monitoring hub, but to do so it
@@ -235,7 +428,7 @@ fi
235
428
 
236
429
  if [[ -n "$EXE_CLI" ]]; then
237
430
  info "Step 4+5: Deploying via '$EXE_CLI stack-update' (preflight + proxy auth + health-gated rollout + rollback)..."
238
- if ! "$EXE_CLI" stack-update --yes; then
431
+ if ! "$EXE_CLI" stack-update --yes --domain "$DOMAIN" --admin-email "$ADMIN_EMAIL"; then
239
432
  err "stack-update failed — the gated deploy refused or rolled back. Review the"
240
433
  err "output above. Do NOT bypass with raw 'docker compose up' — fix the cause"
241
434
  err "(preflight RED, image pull, or health failure) and re-run setup.sh."
@@ -249,7 +442,7 @@ else
249
442
  err ""
250
443
  err "Install the CLI and re-run setup.sh:"
251
444
  err " npm install -g exe-os"
252
- err " ./setup.sh --client $CLIENT --domain $DOMAIN${LICENSE:+ --license $LICENSE}"
445
+ err " ./setup.sh --client $CLIENT --domain $DOMAIN --admin-email $ADMIN_EMAIL${LICENSE:+ --license $LICENSE}"
253
446
  exit 1
254
447
  fi
255
448
 
@@ -259,7 +452,12 @@ docker ps --format 'table {{.Names}}\t{{.Status}}'
259
452
  echo ""
260
453
  info "Stack deployed! Next steps:"
261
454
  echo " 1. Configure Cloudflare tunnel (if not done)"
262
- echo " 2. Open https://crm.${DOMAIN} to create admin account"
455
+ # bug cff0de47: this used to say "to create admin account". GoTrue signup is OFF
456
+ # by default (invite-only), so there is no account to create in the CRM UI — the
457
+ # admin is SEEDED from EXE_CRM_ADMIN_EMAIL and must also be created in GoTrue.
458
+ echo " 2. Create the GoTrue user for ${ADMIN_EMAIL} (signup is DISABLED by default —"
459
+ echo " see CUSTOMER-GUIDE.md 'Create Your Admin Account'), then sign in at"
460
+ echo " https://crm.${DOMAIN}"
263
461
  echo " 3. Open https://wiki.${DOMAIN} to set up wiki"
264
462
  echo " 4. Configure WhatsApp: edit gateway.json, restart gateway, pair at https://gateway.${DOMAIN}/pair/<name>"
265
463
  echo " 5. Verify: curl https://crm.${DOMAIN}/healthz && curl https://wiki.${DOMAIN}/api/ping"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 1,
3
- "verified_at": "2026-09-09T09:12:16.097Z",
4
- "manifest_sha256": "c3ae50f3aee170892131cbd9cd4bf821b1a20be63261b2ff9081b3a763993c6b",
5
- "package_version": "0.9.383"
3
+ "verified_at": "2026-09-10T04:33:27.784Z",
4
+ "manifest_sha256": "bc5eed1f8fc614320e0c43011f62df3b11fb4e6c07324618a1eaa44feaa4d45c",
5
+ "package_version": "0.9.384"
6
6
  }
@@ -8,18 +8,18 @@ import {
8
8
  resolveAgentAttribution,
9
9
  resolveAgentForPayload,
10
10
  writeActiveAgent
11
- } from "./chunk-4KNZKUDK.js";
11
+ } from "./chunk-F4BBMIPG.js";
12
12
  import "./chunk-MUCNYSJP.js";
13
13
  import "./chunk-CVYC6DUW.js";
14
14
  import "./chunk-GJV3WDWM.js";
15
- import "./chunk-ZVPVLYBG.js";
15
+ import "./chunk-GL47M7NY.js";
16
16
  import "./chunk-BBMTVAE3.js";
17
17
  import "./chunk-TKDITWDN.js";
18
18
  import "./chunk-5YEUPUV4.js";
19
- import "./chunk-FPAPXMJA.js";
19
+ import "./chunk-72V3S44T.js";
20
20
  import "./chunk-YYB5PMTK.js";
21
21
  import "./chunk-L5CGXEZC.js";
22
- import "./chunk-CL4J4757.js";
22
+ import "./chunk-QH5ZQ5SJ.js";
23
23
  import "./chunk-ZQEJ4IX2.js";
24
24
  import "./chunk-FXU7JOXK.js";
25
25
  import "./chunk-MMS2HBRT.js";
@@ -7,18 +7,18 @@ import {
7
7
  resolveAgentAttribution,
8
8
  resolveAgentForPayload,
9
9
  writeActiveAgent
10
- } from "./chunk-4KNZKUDK.js";
10
+ } from "./chunk-F4BBMIPG.js";
11
11
  import "./chunk-MUCNYSJP.js";
12
12
  import "./chunk-CVYC6DUW.js";
13
13
  import "./chunk-GJV3WDWM.js";
14
- import "./chunk-ZVPVLYBG.js";
14
+ import "./chunk-GL47M7NY.js";
15
15
  import "./chunk-BBMTVAE3.js";
16
16
  import "./chunk-TKDITWDN.js";
17
17
  import "./chunk-5YEUPUV4.js";
18
- import "./chunk-FPAPXMJA.js";
18
+ import "./chunk-72V3S44T.js";
19
19
  import "./chunk-YYB5PMTK.js";
20
20
  import "./chunk-L5CGXEZC.js";
21
- import "./chunk-CL4J4757.js";
21
+ import "./chunk-QH5ZQ5SJ.js";
22
22
  import "./chunk-ZQEJ4IX2.js";
23
23
  import "./chunk-FXU7JOXK.js";
24
24
  import "./chunk-MMS2HBRT.js";
@@ -5,14 +5,14 @@ import "./chunk-AM7S2TY6.js";
5
5
  import {
6
6
  loadEmployeesSync,
7
7
  validateEmployeeName
8
- } from "./chunk-ZVPVLYBG.js";
8
+ } from "./chunk-GL47M7NY.js";
9
9
  import "./chunk-BBMTVAE3.js";
10
10
  import "./chunk-TKDITWDN.js";
11
11
  import "./chunk-5YEUPUV4.js";
12
- import "./chunk-FPAPXMJA.js";
12
+ import "./chunk-72V3S44T.js";
13
13
  import "./chunk-YYB5PMTK.js";
14
14
  import "./chunk-L5CGXEZC.js";
15
- import "./chunk-CL4J4757.js";
15
+ import "./chunk-QH5ZQ5SJ.js";
16
16
  import "./chunk-ZQEJ4IX2.js";
17
17
  import "./chunk-FXU7JOXK.js";
18
18
  import "./chunk-WNBZJSQT.js";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  agentLoop
3
- } from "./chunk-DZ3VKZ3C.js";
3
+ } from "./chunk-TKS5GMYA.js";
4
4
  import "./chunk-JRLNE3T2.js";
5
5
  import "./chunk-2O2UKMUE.js";
6
6
  import "./chunk-HF25XPZE.js";
@@ -10,7 +10,7 @@ import {
10
10
  insertOntologyForMemory,
11
11
  ontologyPayload,
12
12
  stableId
13
- } from "./chunk-7C33VMAN.js";
13
+ } from "./chunk-JRIH6I7D.js";
14
14
  import "./chunk-MLKGABMK.js";
15
15
  export {
16
16
  ONTOLOGY_YIELD_EVERY,
@@ -7,10 +7,10 @@ import {
7
7
  import {
8
8
  artifactObjectId,
9
9
  encryptSyncBlob
10
- } from "./chunk-PJ2ZJUM2.js";
10
+ } from "./chunk-ZPP63JSQ.js";
11
11
  import "./chunk-TWMWHDOY.js";
12
- import "./chunk-AYOCLUGP.js";
13
- import "./chunk-CZKDWW76.js";
12
+ import "./chunk-4AR5XKCH.js";
13
+ import "./chunk-5U2IJBFV.js";
14
14
  import {
15
15
  EXE_AI_DIR,
16
16
  loadConfigSync
@@ -2,30 +2,30 @@
2
2
  import {
3
3
  disposeStore,
4
4
  initStore
5
- } from "./chunk-53YKDX7M.js";
6
- import "./chunk-XTREZV4R.js";
5
+ } from "./chunk-UOPCVFVR.js";
6
+ import "./chunk-AWWDKF22.js";
7
7
  import "./chunk-CHCA3ZM2.js";
8
8
  import "./chunk-OTVEIJUQ.js";
9
- import "./chunk-BEIYEBTU.js";
9
+ import "./chunk-VHHX4UCP.js";
10
10
  import "./chunk-5MOYSU5A.js";
11
- import "./chunk-RJXOPNXY.js";
11
+ import "./chunk-ELEGH4DX.js";
12
12
  import "./chunk-76CJBM36.js";
13
13
  import "./chunk-MP2AFCGL.js";
14
14
  import {
15
15
  getClient,
16
16
  getEmployeeNamesByRole,
17
17
  loadEmployeesSync
18
- } from "./chunk-ZVPVLYBG.js";
18
+ } from "./chunk-GL47M7NY.js";
19
19
  import "./chunk-BBMTVAE3.js";
20
20
  import "./chunk-TKDITWDN.js";
21
21
  import "./chunk-5YEUPUV4.js";
22
- import "./chunk-FPAPXMJA.js";
22
+ import "./chunk-72V3S44T.js";
23
23
  import "./chunk-YYB5PMTK.js";
24
24
  import "./chunk-L5CGXEZC.js";
25
- import "./chunk-CL4J4757.js";
25
+ import "./chunk-QH5ZQ5SJ.js";
26
26
  import "./chunk-ZQEJ4IX2.js";
27
27
  import "./chunk-FXU7JOXK.js";
28
- import "./chunk-CZKDWW76.js";
28
+ import "./chunk-5U2IJBFV.js";
29
29
  import "./chunk-MMS2HBRT.js";
30
30
  import "./chunk-RH4AH3YB.js";
31
31
  import {
@@ -4,7 +4,7 @@ import {
4
4
  import {
5
5
  getLatestBackup,
6
6
  reasonFromBackupName
7
- } from "./chunk-FPAPXMJA.js";
7
+ } from "./chunk-72V3S44T.js";
8
8
  import "./chunk-YYB5PMTK.js";
9
9
  import "./chunk-MMS2HBRT.js";
10
10
  import "./chunk-RH4AH3YB.js";
@@ -19,20 +19,20 @@ import {
19
19
  selectInjectedBehaviors,
20
20
  selectRelevantBehaviors,
21
21
  selectRelevantBehaviorsWithReasons
22
- } from "./chunk-642NFHVO.js";
23
- import "./chunk-Q5O2ER4U.js";
24
- import "./chunk-L2PBBNKH.js";
22
+ } from "./chunk-4AAMFWJT.js";
23
+ import "./chunk-S26CV7BE.js";
24
+ import "./chunk-EIOGV75A.js";
25
25
  import "./chunk-QGGH7LOU.js";
26
- import "./chunk-53YKDX7M.js";
27
- import "./chunk-XTREZV4R.js";
26
+ import "./chunk-UOPCVFVR.js";
27
+ import "./chunk-AWWDKF22.js";
28
28
  import "./chunk-CHCA3ZM2.js";
29
29
  import "./chunk-OTVEIJUQ.js";
30
- import "./chunk-BEIYEBTU.js";
30
+ import "./chunk-VHHX4UCP.js";
31
31
  import "./chunk-5MOYSU5A.js";
32
- import "./chunk-RJXOPNXY.js";
32
+ import "./chunk-ELEGH4DX.js";
33
33
  import "./chunk-76CJBM36.js";
34
- import "./chunk-S3G7LJDK.js";
35
- import "./chunk-4JF42BVF.js";
34
+ import "./chunk-VJEJ7JNB.js";
35
+ import "./chunk-MFAOAIUE.js";
36
36
  import "./chunk-PCV52RYM.js";
37
37
  import "./chunk-BTSWFMEH.js";
38
38
  import "./chunk-CIPDQRFO.js";
@@ -41,17 +41,18 @@ import "./chunk-IMYGYIAI.js";
41
41
  import "./chunk-3DAEZILW.js";
42
42
  import "./chunk-DRTJCG6B.js";
43
43
  import "./chunk-MP2AFCGL.js";
44
- import "./chunk-ZVPVLYBG.js";
44
+ import "./chunk-YRUZK2QA.js";
45
+ import "./chunk-GL47M7NY.js";
45
46
  import "./chunk-BBMTVAE3.js";
46
47
  import "./chunk-TKDITWDN.js";
47
48
  import "./chunk-5YEUPUV4.js";
48
- import "./chunk-FPAPXMJA.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
- import "./chunk-CZKDWW76.js";
55
+ import "./chunk-5U2IJBFV.js";
55
56
  import "./chunk-A7JYF4RG.js";
56
57
  import "./chunk-ARX6TAGN.js";
57
58
  import "./chunk-MMS2HBRT.js";