@askexenow/exe-os 0.9.372 → 0.9.374

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 (470) hide show
  1. package/deploy/compose/.env.customer.example +45 -10
  2. package/deploy/compose/.env.example +46 -9
  3. package/deploy/compose/docker-compose.yml +136 -18
  4. package/deploy/compose/generate-env.ts +142 -34
  5. package/deploy/compose/sso-edge/default.conf.template +78 -7
  6. package/deploy/compose/sso-edge/sso-redirect.conf +109 -13
  7. package/deploy/stack-manifests/v0.9.30-apps.json +1 -1
  8. package/deploy/stack-manifests/v0.9.json +4 -4
  9. package/dist/.dist-verified.json +3 -3
  10. package/dist/{active-agent-GRT5MKD5.js → active-agent-ONPPEWQV.js} +7 -6
  11. package/dist/{active-agent-L2ZSSXDK.js → active-agent-UJKMG7LJ.js} +7 -6
  12. package/dist/{agent-defs-generator-M4ZNYIVX.js → agent-defs-generator-ZWI6DXOE.js} +6 -5
  13. package/dist/{agent-loop-FOK2IRZQ.js → agent-loop-OYHJKNYH.js} +1 -1
  14. package/dist/{agentic-ontology-DMPRDEUX.js → agentic-ontology-WHFJ3QFS.js} +1 -1
  15. package/dist/{artifact-backup-767STHSW.js → artifact-backup-WXZNB7KE.js} +2 -1
  16. package/dist/{backfill-gate-VX2RZTQV.js → backfill-gate-KWJQ35YX.js} +3 -2
  17. package/dist/{backfill-metadata-ZMEHJQ5M.js → backfill-metadata-3OUSQD5V.js} +8 -7
  18. package/dist/{background-jobs-LTPWCMA3.js → background-jobs-6VMD55PK.js} +3 -2
  19. package/dist/{backup-verify-EX2K732J.js → backup-verify-ZKTUYLTA.js} +4 -3
  20. package/dist/{behavior-injection-22AGMS25.js → behavior-injection-M6UYZCMW.js} +17 -15
  21. package/dist/{behaviors-DVFXAWF5.js → behaviors-ZJ45TFBJ.js} +21 -13
  22. package/dist/bin/age-ontology-load.js +3 -2
  23. package/dist/bin/agentic-ontology-backfill.js +10 -9
  24. package/dist/bin/agentic-reflection-backfill.js +11 -10
  25. package/dist/bin/agentic-semantic-label.js +10 -9
  26. package/dist/bin/backfill-conversations.js +13 -11
  27. package/dist/bin/backfill-responses.js +13 -11
  28. package/dist/bin/backfill-vectors.js +17 -15
  29. package/dist/bin/bulk-sync-postgres.js +22 -20
  30. package/dist/bin/cc-doctor.js +10 -9
  31. package/dist/bin/cleanup-stale-review-tasks.js +29 -26
  32. package/dist/bin/cli.js +36 -26
  33. package/dist/bin/deferred-daemon-restart.js +114 -110
  34. package/dist/bin/exe-agent-config.js +6 -5
  35. package/dist/bin/exe-agent.js +127 -33
  36. package/dist/bin/exe-assign.js +15 -13
  37. package/dist/bin/exe-boot.js +57 -54
  38. package/dist/bin/exe-call.js +8 -7
  39. package/dist/bin/exe-cloud.js +24 -22
  40. package/dist/bin/exe-config-dump.js +6 -5
  41. package/dist/bin/exe-dispatch.js +30 -27
  42. package/dist/bin/exe-doctor.js +14 -10
  43. package/dist/bin/exe-export-behaviors.js +19 -17
  44. package/dist/bin/exe-forget.js +10 -9
  45. package/dist/bin/exe-gateway.js +199 -19
  46. package/dist/bin/exe-grant.js +5 -5
  47. package/dist/bin/exe-healthcheck.js +10 -9
  48. package/dist/bin/exe-heartbeat.js +35 -32
  49. package/dist/bin/exe-kill.js +34 -31
  50. package/dist/bin/exe-launch-agent.js +126 -54
  51. package/dist/bin/exe-mcp.js +6 -5
  52. package/dist/bin/exe-memory-reads.js +8 -7
  53. package/dist/bin/exe-new-employee.js +12 -11
  54. package/dist/bin/exe-os-mcp-proxy.js +6 -5
  55. package/dist/bin/exe-pending-messages.js +30 -27
  56. package/dist/bin/exe-pending-notifications.js +29 -26
  57. package/dist/bin/exe-pending-reviews.js +30 -27
  58. package/dist/bin/exe-rename.js +8 -7
  59. package/dist/bin/exe-repo-truth.js +1 -1
  60. package/dist/bin/exe-review.js +33 -30
  61. package/dist/bin/exe-search.js +9 -8
  62. package/dist/bin/exe-session-cleanup.js +35 -32
  63. package/dist/bin/exe-settings.js +24 -22
  64. package/dist/bin/exe-start-codex.js +137 -55
  65. package/dist/bin/exe-start-opencode.js +121 -23
  66. package/dist/bin/exe-status.js +31 -28
  67. package/dist/bin/exe-support.js +5 -4
  68. package/dist/bin/exe-team.js +7 -6
  69. package/dist/bin/exe-watchdog.js +31 -11
  70. package/dist/bin/generate-hook-manifest.js +44 -7
  71. package/dist/bin/git-sweep.js +31 -28
  72. package/dist/bin/graph-backfill.js +89 -35
  73. package/dist/bin/graph-export.js +9 -8
  74. package/dist/bin/import-history.js +14 -13
  75. package/dist/bin/install.js +137 -113
  76. package/dist/bin/intercom-check.js +5 -5
  77. package/dist/bin/mcp-sessions.js +2 -2
  78. package/dist/bin/orchestration-metrics.js +7 -6
  79. package/dist/bin/postgres-agentic-reflection-backfill.js +5 -4
  80. package/dist/bin/postgres-agentic-semantic-backfill.js +4 -3
  81. package/dist/bin/pre-publish.js +1 -1
  82. package/dist/bin/reconcile-backlog.js +2 -2
  83. package/dist/bin/registry-proxy.js +1 -1
  84. package/dist/bin/scan-tasks.js +29 -26
  85. package/dist/bin/setup.js +5 -4
  86. package/dist/bin/shard-migrate.js +9 -8
  87. package/dist/bin/stack-update.js +40 -9
  88. package/dist/bin/verify-stack.js +2 -2
  89. package/dist/bin/vps-health-gate.js +1 -1
  90. package/dist/{boot-generation-OHXH4YC5.js → boot-generation-JKVZ4ZAT.js} +6 -5
  91. package/dist/{boot-review-sections-N5IXIGSS.js → boot-review-sections-2M6BTG73.js} +28 -25
  92. package/dist/{branch-hygiene-KCGXRAWP.js → branch-hygiene-U5GFRSTP.js} +31 -7
  93. package/dist/{branding-GH43W3PU.js → branding-I6KIMB7F.js} +3 -2
  94. package/dist/budget-fallback-XJRPMP2D.js +11 -0
  95. package/dist/build-manifest.json +1318 -1233
  96. package/dist/{capability-cards-4PXVLIVS.js → capability-cards-5IMJT6J7.js} +5 -4
  97. package/dist/{capacity-monitor-FKMQXORX.js → capacity-monitor-SAXCQK7O.js} +30 -27
  98. package/dist/{catchup-brief-SN5EKO4N.js → catchup-brief-U2TXBLHD.js} +34 -31
  99. package/dist/{chunk-CNC57JCS.js → chunk-23MVDXLY.js} +4 -4
  100. package/dist/{chunk-V4XAKXXF.js → chunk-2AJGV5UL.js} +1 -1
  101. package/dist/{chunk-FBYAXTDM.js → chunk-2ZOEC4KC.js} +10 -2
  102. package/dist/{chunk-ELXFSIIM.js → chunk-32YV32VA.js} +2 -2
  103. package/dist/{chunk-44C7QNZS.js → chunk-3KDCORDO.js} +1 -1
  104. package/dist/{chunk-JTB5V6BV.js → chunk-3SXHEQ7X.js} +1 -1
  105. package/dist/{chunk-HDW4XPDV.js → chunk-3UUX5OY4.js} +1 -1
  106. package/dist/{chunk-7PSLK36P.js → chunk-44TLJZJ5.js} +1 -1
  107. package/dist/{chunk-JTWTBX2M.js → chunk-4EN3IZ3Q.js} +2 -1
  108. package/dist/{chunk-KPMC7PY7.js → chunk-4HKTO2SV.js} +1 -1
  109. package/dist/{chunk-CDUB5Q6J.js → chunk-4IK2K3B3.js} +1 -1
  110. package/dist/{chunk-GH6YJOOC.js → chunk-4SJ4LK4V.js} +6 -6
  111. package/dist/{chunk-PVEM537A.js → chunk-4YLBKEL5.js} +2 -2
  112. package/dist/chunk-4YNA3CM6.js +872 -0
  113. package/dist/{chunk-KYFFVTGO.js → chunk-55BEFF4V.js} +3 -3
  114. package/dist/{chunk-SEP5ITFQ.js → chunk-636LKCKE.js} +2 -2
  115. package/dist/{chunk-QTI4QAWA.js → chunk-6EZQUNE6.js} +338 -5
  116. package/dist/{chunk-WAEKYKTK.js → chunk-6RKKVPYF.js} +1 -1
  117. package/dist/{chunk-VX2F4ZUY.js → chunk-6SCGLHJ7.js} +3 -3
  118. package/dist/{chunk-MEGRQ53A.js → chunk-6VHOQ3IM.js} +51 -6
  119. package/dist/{chunk-HIIXCAEE.js → chunk-6YVUR3OU.js} +3 -3
  120. package/dist/{chunk-L6ZNURWN.js → chunk-7GE2EQ23.js} +1 -1
  121. package/dist/{chunk-2CWS374F.js → chunk-7RI2CNXJ.js} +1 -1
  122. package/dist/{chunk-OL3QP3AU.js → chunk-7TSBV3SD.js} +1 -1
  123. package/dist/{chunk-DSOQUQTV.js → chunk-A27Q27CT.js} +27 -0
  124. package/dist/{chunk-5AHRZI3R.js → chunk-AETLDRZB.js} +1 -1
  125. package/dist/{chunk-RNLF3CBB.js → chunk-AKLJ4JH3.js} +1 -1
  126. package/dist/{chunk-XHYHX6F7.js → chunk-AKLQSC6W.js} +329 -164
  127. package/dist/chunk-ANLFH23R.js +261 -0
  128. package/dist/{chunk-QLA3RTH4.js → chunk-AWWKRZMB.js} +5 -5
  129. package/dist/{chunk-ERVQTR7P.js → chunk-BBSIEYF5.js} +17 -3
  130. package/dist/{chunk-IPMUWYRQ.js → chunk-BJ7AVSY6.js} +2 -2
  131. package/dist/{chunk-HV6Y6F4X.js → chunk-C2L622QJ.js} +89 -3
  132. package/dist/{chunk-TX3Q2GIL.js → chunk-C5HUMAA7.js} +24 -1
  133. package/dist/{chunk-QTYJPWJN.js → chunk-CBCGDEJA.js} +7 -7
  134. package/dist/{chunk-XXSNLM6R.js → chunk-DB55JZHU.js} +1 -1
  135. package/dist/{chunk-LAZKEJMS.js → chunk-DIXXEE3S.js} +840 -607
  136. package/dist/{chunk-FB343XQX.js → chunk-DJ7YXOTU.js} +2 -2
  137. package/dist/{chunk-YFCNWQAM.js → chunk-DJOIMFKV.js} +2 -2
  138. package/dist/{chunk-UTDMTQNH.js → chunk-DSJI76XL.js} +92 -14
  139. package/dist/{chunk-EEXX4UMQ.js → chunk-DZKPOSFD.js} +1 -1
  140. package/dist/{chunk-WSOA3WMC.js → chunk-E426DOSY.js} +161 -4
  141. package/dist/{chunk-ZISQOOER.js → chunk-EKE37MO4.js} +3 -3
  142. package/dist/{chunk-RIECV7SR.js → chunk-EKYYMIVT.js} +1 -1
  143. package/dist/{chunk-HIVZ53YB.js → chunk-EXTZSNWL.js} +2 -2
  144. package/dist/{chunk-YYA5LXCT.js → chunk-FNEZ4BWT.js} +1 -1
  145. package/dist/chunk-FTZET5YX.js +313 -0
  146. package/dist/chunk-GHR4ZPJ7.js +70 -0
  147. package/dist/{chunk-MINXPXAB.js → chunk-GJI77VDO.js} +3 -3
  148. package/dist/{chunk-AAMGHW5W.js → chunk-GLQEJOXE.js} +1 -0
  149. package/dist/{chunk-ADNBOKYZ.js → chunk-GM7TLYOK.js} +60 -18
  150. package/dist/{chunk-RUWWES2K.js → chunk-GNUAL43X.js} +2 -2
  151. package/dist/{chunk-QZL6E4UB.js → chunk-GOMQ7PVQ.js} +2 -2
  152. package/dist/{chunk-GB3AHV5F.js → chunk-GQOEWNVM.js} +1 -1
  153. package/dist/{chunk-NQZUSEAR.js → chunk-GS7LIT34.js} +246 -17
  154. package/dist/{chunk-XTWHNLGD.js → chunk-GZOG2MAX.js} +1 -1
  155. package/dist/{chunk-E5HAY3DQ.js → chunk-HDLAB7W3.js} +1 -1
  156. package/dist/{chunk-E5QQZDQN.js → chunk-HNWS7YHN.js} +358 -136
  157. package/dist/{chunk-VV5EZZNT.js → chunk-HTBEVCO2.js} +1 -1
  158. package/dist/{chunk-OZBII5E3.js → chunk-I4DNJFDR.js} +4 -4
  159. package/dist/{chunk-SI5SZAJA.js → chunk-IBS2FAI4.js} +21 -4
  160. package/dist/{chunk-J5EYOBFF.js → chunk-IHXW4VUI.js} +1 -1
  161. package/dist/{chunk-RUVO3NJC.js → chunk-IN6CAM4F.js} +9 -3
  162. package/dist/{chunk-53PYNYTW.js → chunk-IRVOXUSK.js} +5 -5
  163. package/dist/{chunk-THM7J6UI.js → chunk-JHI5WMK5.js} +5 -5
  164. package/dist/{chunk-3KTQWMHI.js → chunk-JSMDRKPJ.js} +12 -4
  165. package/dist/chunk-JTVIANUB.js +131 -0
  166. package/dist/{chunk-2ADYTOHQ.js → chunk-K4ESASPL.js} +1 -1
  167. package/dist/{chunk-YWUQVHDL.js → chunk-KTCXJWJG.js} +1 -1
  168. package/dist/{chunk-RGUDGC6A.js → chunk-KTU3EAWK.js} +5 -5
  169. package/dist/{chunk-DKBPCOU4.js → chunk-L6RXG36J.js} +2 -2
  170. package/dist/{chunk-T4EK56WI.js → chunk-LDNYSMPZ.js} +1 -1
  171. package/dist/{chunk-RIK5GRWI.js → chunk-LGS2V2XD.js} +3 -3
  172. package/dist/{chunk-JKXZGRWR.js → chunk-LP4GB656.js} +2 -2
  173. package/dist/{chunk-H74466TM.js → chunk-M7O7TGGU.js} +1 -1
  174. package/dist/chunk-MJCSEIFI.js +54 -0
  175. package/dist/{chunk-IDZPQG2D.js → chunk-MOGA4Q7F.js} +2 -2
  176. package/dist/{chunk-OYQNNKNS.js → chunk-MXPNVSXI.js} +37 -14
  177. package/dist/{chunk-UVW7YFAF.js → chunk-N7VEP5B3.js} +4 -4
  178. package/dist/{chunk-HHE2HV3V.js → chunk-NBXDXKLC.js} +1 -1
  179. package/dist/{chunk-LDL3S7AC.js → chunk-NKETJCB5.js} +7 -3
  180. package/dist/{chunk-ECHLVLA7.js → chunk-NMH5ZQPU.js} +1 -1
  181. package/dist/{chunk-U3XLRMJD.js → chunk-NT7W4RXD.js} +1 -1
  182. package/dist/{chunk-UQUUNGTP.js → chunk-NUK7EEN5.js} +11 -9
  183. package/dist/{chunk-GBNB4EWD.js → chunk-ORM7ZFKC.js} +16 -0
  184. package/dist/{chunk-O4ZFRK6W.js → chunk-OVEQE6YS.js} +244 -49
  185. package/dist/{chunk-4ZJ5BPY6.js → chunk-PB5S7YOF.js} +2 -2
  186. package/dist/{chunk-JR23BL74.js → chunk-PDVXWXTL.js} +4 -4
  187. package/dist/{chunk-3CIMDFXG.js → chunk-PFQ3VEEM.js} +1 -1
  188. package/dist/{chunk-SBJV2PCU.js → chunk-PHBU4LGO.js} +1 -1
  189. package/dist/{chunk-W25RLOQ2.js → chunk-PLZSZOZN.js} +3 -3
  190. package/dist/{chunk-THIJIOE2.js → chunk-PY3FOMRN.js} +18 -6
  191. package/dist/{chunk-AAUWFXOX.js → chunk-Q3AXXKDF.js} +3 -3
  192. package/dist/{chunk-VKXS2YGN.js → chunk-QHJR7IMX.js} +2 -2
  193. package/dist/chunk-QLZ46RCK.js +45 -0
  194. package/dist/{chunk-UHPMK6QZ.js → chunk-R3CZWFFC.js} +10 -2
  195. package/dist/{chunk-6XEYELCA.js → chunk-R4CBHKZ2.js} +1 -1
  196. package/dist/{chunk-5APCDDJZ.js → chunk-R522MWAR.js} +9 -9
  197. package/dist/chunk-RH4AH3YB.js +80 -0
  198. package/dist/{chunk-AMKSDKMK.js → chunk-S2WBS6BG.js} +22 -35
  199. package/dist/{chunk-WUKQVNLP.js → chunk-SEQIPGLU.js} +1 -1
  200. package/dist/{chunk-7WQRFSZI.js → chunk-SL6KQYDU.js} +26 -6
  201. package/dist/chunk-SLLLOOEI.js +103 -0
  202. package/dist/{chunk-5N4SG5NB.js → chunk-T35RCQFE.js} +3 -3
  203. package/dist/{chunk-7V6M3QUS.js → chunk-T3QUKNLI.js} +1 -1
  204. package/dist/{chunk-CW2UCKHS.js → chunk-TADAO3HV.js} +2 -2
  205. package/dist/{chunk-5DCCKHDY.js → chunk-TAMDAOCU.js} +109 -13
  206. package/dist/{chunk-ZXB56YR2.js → chunk-TFKCERAK.js} +101 -23
  207. package/dist/{chunk-RBYHJDAT.js → chunk-TQAZTRQ3.js} +3 -3
  208. package/dist/{chunk-OKGIOWOB.js → chunk-U6SUKSZR.js} +2 -2
  209. package/dist/{chunk-23QKEUF6.js → chunk-U73AC5AN.js} +34 -12
  210. package/dist/{chunk-PM6WSWVU.js → chunk-UBK7HK3J.js} +3 -3
  211. package/dist/{chunk-H37FSTF2.js → chunk-UBMZ3YQU.js} +1 -1
  212. package/dist/{chunk-JJUGI2YL.js → chunk-UCFC2AEI.js} +1 -1
  213. package/dist/{chunk-6IWLAQ7O.js → chunk-UCUOGVDX.js} +4 -0
  214. package/dist/{chunk-E7UCDSUE.js → chunk-UKLN57Q5.js} +2 -2
  215. package/dist/{chunk-ZYCLSEZT.js → chunk-ULIBLJ6W.js} +33 -11
  216. package/dist/{chunk-RLR6VVKV.js → chunk-UM3N6VND.js} +4 -4
  217. package/dist/{chunk-ZNUJFX7L.js → chunk-UQGSBM3U.js} +1 -1
  218. package/dist/{chunk-ZZXMB5F2.js → chunk-UZDF6FLJ.js} +1 -1
  219. package/dist/{chunk-LNOS24GV.js → chunk-V3WLC5TJ.js} +2 -95
  220. package/dist/{chunk-UXLO7VHX.js → chunk-VI4ATC6I.js} +1 -1
  221. package/dist/{chunk-77JP3LK4.js → chunk-VKJGHAZT.js} +92 -21
  222. package/dist/{chunk-7R73IAHU.js → chunk-VMTZ4RUW.js} +67 -150
  223. package/dist/{chunk-TGPQMMQP.js → chunk-VYQ7B7DI.js} +30 -17
  224. package/dist/{chunk-E2WEFZOR.js → chunk-W75GTHR3.js} +1 -1
  225. package/dist/{chunk-UKLF7F3Z.js → chunk-WJG344NC.js} +9 -9
  226. package/dist/{chunk-MBNIJXKI.js → chunk-WMEYJT4R.js} +18 -4
  227. package/dist/{chunk-R6FLELV6.js → chunk-XFTEX77S.js} +3 -3
  228. package/dist/{chunk-MDGYXUOV.js → chunk-XH7YL7JM.js} +1 -1
  229. package/dist/{chunk-JOO35RHR.js → chunk-XL5MFGMR.js} +3 -3
  230. package/dist/{chunk-OW5RZIDW.js → chunk-XNNECNDL.js} +95 -33
  231. package/dist/{chunk-5AHDQCTB.js → chunk-XXFKSJYA.js} +6 -6
  232. package/dist/{chunk-TGEPLJ66.js → chunk-XXOPG4BW.js} +3 -3
  233. package/dist/{chunk-PGLPUP37.js → chunk-XZ65ST2I.js} +1 -1
  234. package/dist/{chunk-3TTKAT6V.js → chunk-YKC7QDZH.js} +9 -4
  235. package/dist/{chunk-KXYFBBZR.js → chunk-YMP2QSOP.js} +20 -3
  236. package/dist/{chunk-TK4MI6F6.js → chunk-YSLGFPWX.js} +6 -6
  237. package/dist/{chunk-X2P43TB2.js → chunk-YTSXPJUQ.js} +1 -1
  238. package/dist/{chunk-HECXZGGZ.js → chunk-ZCERWHY2.js} +33 -35
  239. package/dist/{chunk-IVU3WN7S.js → chunk-ZG62LIK3.js} +74 -4
  240. package/dist/{chunk-GU62SNDH.js → chunk-ZGYNKA3O.js} +744 -111
  241. package/dist/{chunk-QMSEL5YS.js → chunk-ZIG7VPJV.js} +28 -76
  242. package/dist/{chunk-WZJVGA5I.js → chunk-ZL4AGWAH.js} +258 -13
  243. package/dist/{chunk-QR624DER.js → chunk-ZSODLMFV.js} +2 -2
  244. package/dist/{cleanup-graph-garbage-IPYDS5OX.js → cleanup-graph-garbage-DPJGO52H.js} +11 -10
  245. package/dist/{cloud-sync-command-JLNVG7H4.js → cloud-sync-command-JPNTT4OQ.js} +2 -2
  246. package/dist/{cloud-sync-db-init-JXUF6GI3.js → cloud-sync-db-init-V2LWIUQU.js} +1 -1
  247. package/dist/{cloud-sync-shutdown-Z4SBP6PL.js → cloud-sync-shutdown-BNALPWGX.js} +5 -4
  248. package/dist/{co-activation-74RDFTKS.js → co-activation-CMNSWS6B.js} +5 -4
  249. package/dist/{co-occurrence-CN3TBYVR.js → co-occurrence-WRI2NAN6.js} +9 -8
  250. package/dist/{code-context-index-D4MJ4VFX.js → code-context-index-NOJSHLPN.js} +12 -6
  251. package/dist/code-context-watcher-VZNZU3BO.js +118 -0
  252. package/dist/{codex-consolidation-PPXNBXCV.js → codex-consolidation-SH4UKFBQ.js} +2 -1
  253. package/dist/{conversation-entity-extractor-QGTLH4BP.js → conversation-entity-extractor-74252CAO.js} +4 -4
  254. package/dist/{conversation-wiki-populator-EBUZXYEU.js → conversation-wiki-populator-OS4C6W54.js} +1 -1
  255. package/dist/conversations-retention-C4BLKFEL.js +54 -0
  256. package/dist/coordinator-notice-MHUY7AQB.js +55 -0
  257. package/dist/{crdt-sync-7T4WCOKD.js → crdt-sync-B3JN6AIV.js} +1 -1
  258. package/dist/{crm-webhook-FTW3XZTO.js → crm-webhook-GYWQRFET.js} +2 -2
  259. package/dist/{cto-delegation-gate-SZCE34LB.js → cto-delegation-gate-LQHVLEMW.js} +29 -26
  260. package/dist/{daemon-auth-SSPY5ODS.js → daemon-auth-QZHEO7IQ.js} +3 -2
  261. package/dist/{daemon-orchestration-IGPHVNFR.js → daemon-orchestration-5HIQALZH.js} +36 -34
  262. package/dist/{daemon-ready-OT2VQLS7.js → daemon-ready-P2BR2XP5.js} +1 -1
  263. package/dist/{db-integrity-events-5DTASXJF.js → db-integrity-events-2DTFO37N.js} +3 -2
  264. package/dist/{db-restore-events-2FI4ZMKA.js → db-restore-events-G6NOQOVE.js} +2 -1
  265. package/dist/{destructive-data-guard-6I5MDFVD.js → destructive-data-guard-BVFWPPIS.js} +1 -1
  266. package/dist/doc-graph-extractor-PQHDHQPQ.js +367 -0
  267. package/dist/{documents-URULIXGM.js → documents-C4SSPJMC.js} +15 -13
  268. package/dist/{dreaming-VIZO3QDO.js → dreaming-XAO3FCBV.js} +33 -30
  269. package/dist/{employee-boot-brief-XLOG4ULP.js → employee-boot-brief-W4OHUMRQ.js} +37 -34
  270. package/dist/{exe-drift-TLQM3IHD.js → exe-drift-AG2KMKD5.js} +6 -5
  271. package/dist/{exe-export-7YWYWJHY.js → exe-export-IC5BT335.js} +17 -15
  272. package/dist/{exe-import-DW6VAUKW.js → exe-import-A35ZLDPG.js} +17 -15
  273. package/dist/{exe-key-TLJP2B4Y.js → exe-key-TCMJNYLA.js} +116 -112
  274. package/dist/{exe-org-LU46N36E.js → exe-org-JXCR3JYZ.js} +24 -23
  275. package/dist/{exe-snapshot-QHUZRS62.js → exe-snapshot-SV6SRIG6.js} +36 -33
  276. package/dist/{fast-db-init-SCTOOIUT.js → fast-db-init-L2RGKJWH.js} +1 -1
  277. package/dist/{founder-context-ZFZC4UHO.js → founder-context-D4HFIESJ.js} +4 -3
  278. package/dist/{founder-monitor-envelope-5KTKNL5G.js → founder-monitor-envelope-TFKRGCFE.js} +5 -4
  279. package/dist/{fts-integrity-LKAZEZJE.js → fts-integrity-4YB34KWX.js} +3 -2
  280. package/dist/gateway/index.js +19 -17
  281. package/dist/{git-main-guard-TN27QBAI.js → git-main-guard-VTW4N3CM.js} +7 -1
  282. package/dist/{git-staleness-GSGP344N.js → git-staleness-TN7CYGFG.js} +5 -4
  283. package/dist/{global-procedures-YAR7G4C6.js → global-procedures-YFDEIOG7.js} +7 -6
  284. package/dist/{graph-auto-extract-GNQS64F5.js → graph-auto-extract-3YR3TYRW.js} +9 -8
  285. package/dist/{graph-rag-RMSFLUOB.js → graph-rag-Z2KCJTPK.js} +6 -4
  286. package/dist/{hook-integrity-CF567MVN.js → hook-integrity-KGAV6ZC2.js} +14 -4
  287. package/dist/{hook-prefetch-36BK4F7U.js → hook-prefetch-K5DN3TOQ.js} +29 -26
  288. package/dist/hooks/bug-report-worker.js +34 -30
  289. package/dist/hooks/codex-stop-task-finalizer.js +36 -32
  290. package/dist/hooks/commit-complete.js +33 -30
  291. package/dist/hooks/error-recall.js +12 -11
  292. package/dist/hooks/exe-heartbeat-hook.js +8 -7
  293. package/dist/hooks/ingest-worker.js +23 -11
  294. package/dist/hooks/ingest.js +18 -17
  295. package/dist/hooks/instructions-loaded.js +10 -9
  296. package/dist/hooks/manifest.json +20 -20
  297. package/dist/hooks/notification.js +9 -8
  298. package/dist/hooks/post-compact.js +8 -7
  299. package/dist/hooks/post-tool-combined.js +26 -15
  300. package/dist/hooks/pre-compact.js +33 -30
  301. package/dist/hooks/pre-tool-use.js +404 -46
  302. package/dist/hooks/prompt-submit.js +57 -47
  303. package/dist/hooks/session-end.js +40 -41
  304. package/dist/hooks/session-start.js +21 -20
  305. package/dist/hooks/stop.js +40 -37
  306. package/dist/hooks/subagent-stop.js +38 -35
  307. package/dist/hooks/summary-worker.js +39 -36
  308. package/dist/hyde-MP4QNMU5.js +80 -0
  309. package/dist/index.js +44 -39
  310. package/dist/{installer-LUN4HQIC.js → installer-54HTN5RE.js} +8 -7
  311. package/dist/{installer-OC5VXNC7.js → installer-LK35OX6R.js} +8 -7
  312. package/dist/{installer-MPRFUQJE.js → installer-LLWKZI2S.js} +8 -7
  313. package/dist/intercom-ack-VCW755TN.js +13 -0
  314. package/dist/{intercom-queue-6DZ7BANV.js → intercom-queue-5NOT2RKI.js} +28 -25
  315. package/dist/{key-backup-status-6L2ARCXW.js → key-backup-status-LQPINQ3W.js} +2 -1
  316. package/dist/lib/agent-config.js +3 -2
  317. package/dist/lib/cloud-sync.js +26 -20
  318. package/dist/lib/config.js +2 -1
  319. package/dist/lib/consolidation.js +17 -10
  320. package/dist/lib/database.js +7 -4
  321. package/dist/lib/db-backup.js +17 -2
  322. package/dist/lib/db-daemon-client.js +8 -6
  323. package/dist/lib/db-write-worker-client.js +3 -1
  324. package/dist/lib/db-write-worker.js +20 -3
  325. package/dist/lib/db.js +7 -4
  326. package/dist/lib/device-registry.js +3 -2
  327. package/dist/lib/embed-worker.js +2 -1
  328. package/dist/lib/embedder.js +8 -6
  329. package/dist/lib/employee-templates.js +8 -7
  330. package/dist/lib/employees.js +5 -4
  331. package/dist/lib/exe-daemon-client.js +7 -5
  332. package/dist/lib/exe-daemon.js +467 -221
  333. package/dist/lib/hybrid-search.js +11 -8
  334. package/dist/lib/identity.js +5 -4
  335. package/dist/lib/license.js +4 -3
  336. package/dist/lib/messaging.js +29 -26
  337. package/dist/lib/post-tool-memory.js +16 -2
  338. package/dist/lib/registry-proxy.js +3 -1
  339. package/dist/lib/reminders.js +6 -5
  340. package/dist/lib/schedules.js +9 -8
  341. package/dist/lib/session-registry.js +7 -6
  342. package/dist/lib/skill-learning.js +16 -14
  343. package/dist/lib/stack-invariants.js +17 -1
  344. package/dist/lib/status-brief.js +5 -4
  345. package/dist/lib/store.js +10 -7
  346. package/dist/lib/task-router.js +6 -5
  347. package/dist/lib/tasks.js +31 -27
  348. package/dist/lib/tmux-routing.js +40 -25
  349. package/dist/lib/tmux-status.js +3 -1
  350. package/dist/lib/tmux-transport.js +2 -1
  351. package/dist/lib/token-spend.js +6 -5
  352. package/dist/lib/transport.js +3 -2
  353. package/dist/{license-gate-ESER24PJ.js → license-gate-JVMB6OFD.js} +5 -4
  354. package/dist/{license-sync-JVG5KNIY.js → license-sync-5VYS2F2W.js} +4 -3
  355. package/dist/mcp/register-tools.js +113 -109
  356. package/dist/mcp/server.js +118 -114
  357. package/dist/mcp/tools/complete-reminder.js +7 -6
  358. package/dist/mcp/tools/create-reminder.js +7 -6
  359. package/dist/mcp/tools/create-task.js +34 -30
  360. package/dist/mcp/tools/deactivate-behavior.js +18 -16
  361. package/dist/mcp/tools/list-reminders.js +7 -6
  362. package/dist/mcp/tools/list-tasks.js +34 -30
  363. package/dist/mcp/tools/send-message.js +32 -29
  364. package/dist/mcp/tools/update-task.js +32 -28
  365. package/dist/mcp-child-registry-OTG4MWO7.js +25 -0
  366. package/dist/{mcp-http-config-6K6IKH5F.js → mcp-http-config-DQWL7U2Z.js} +6 -5
  367. package/dist/{mcp-session-identity-LRC6WJSD.js → mcp-session-identity-277GASTQ.js} +28 -25
  368. package/dist/{memory-cards-V3OZHIYP.js → memory-cards-3S2ZQPR7.js} +17 -8
  369. package/dist/{memory-graph-extractor-JC2Z64L4.js → memory-graph-extractor-A6DFEFIN.js} +10 -9
  370. package/dist/{memory-poisoning-defense-YM4QJHCX.js → memory-poisoning-defense-ZVP4H6DY.js} +5 -4
  371. package/dist/{memory-pressure-watchdog-6F6KEQHN.js → memory-pressure-watchdog-6W5F6R7H.js} +29 -26
  372. package/dist/{memory-queue-QJNWKWKG.js → memory-queue-YF7IDSFY.js} +3 -2
  373. package/dist/{memory-queue-client-COA4ABEV.js → memory-queue-client-ADSDP6OX.js} +9 -7
  374. package/dist/{memory-reflection-QXHJPYPC.js → memory-reflection-BKB2YOE6.js} +52 -6
  375. package/dist/{monitor-grants-BW2WL4IU.js → monitor-grants-EV747HMW.js} +4 -3
  376. package/dist/{notification-ledger-6QRLQW4Q.js → notification-ledger-CLGM7ODF.js} +30 -27
  377. package/dist/{notifications-7B6D7Y5C.js → notifications-MACUZPYP.js} +28 -25
  378. package/dist/{oauth-server-TZFNQAFS.js → oauth-server-AYM37SQ4.js} +25 -4
  379. package/dist/{orchestration-events-GY5VP5LU.js → orchestration-events-N7LYMUGA.js} +6 -5
  380. package/dist/{orchestration-phase-UDS24CVQ.js → orchestration-phase-T2WD45UA.js} +3 -2
  381. package/dist/{orchestrator-JVPVOYWA.js → orchestrator-4X24EWHV.js} +30 -27
  382. package/dist/{org-brief-session-GRV5R5E3.js → org-brief-session-FZOFMO5U.js} +13 -12
  383. package/dist/{org-consent-policy-3FHHSYXV.js → org-consent-policy-O5E6HXBL.js} +1 -1
  384. package/dist/{org-join-BY4PV6UO.js → org-join-POWUG25F.js} +8 -7
  385. package/dist/{org-key-admin-WSCPT2CZ.js → org-key-admin-E7EMDOZZ.js} +9 -8
  386. package/dist/{org-key-pin-5WUSPGVN.js → org-key-pin-WHWHVWUO.js} +4 -3
  387. package/dist/{org-membership-ESALTLLN.js → org-membership-WRT2IHJK.js} +5 -4
  388. package/dist/{org-partner-config-YKHPDPZR.js → org-partner-config-B7T4CL2T.js} +7 -6
  389. package/dist/{org-partner-runtime-UJDGECZ4.js → org-partner-runtime-FODONVTM.js} +13 -12
  390. package/dist/{org-row-visibility-V5DXIHTE.js → org-row-visibility-VX4AVV5Q.js} +1 -1
  391. package/dist/{pipeline-router-YY5FQKTY.js → pipeline-router-6GGT2ZW3.js} +6 -5
  392. package/dist/{plan-limits-OVX6SN6B.js → plan-limits-FUN76LYY.js} +8 -7
  393. package/dist/{platform-procedures-I57ITMDC.js → platform-procedures-7YSCLF4Z.js} +1 -1
  394. package/dist/{postinstall-failure-B2JHNFPM.js → postinstall-failure-O6TSSNJB.js} +3 -2
  395. package/dist/{project-boot-LXLU2J32.js → project-boot-3Q65LCIP.js} +2 -1
  396. package/dist/project-name-LJVFMYTQ.js +30 -0
  397. package/dist/{projection-worker-D2472IOD.js → projection-worker-4OANGP5K.js} +5 -4
  398. package/dist/{prospective-memory-JXO2A6PL.js → prospective-memory-KR3P4T6N.js} +5 -4
  399. package/dist/{push-notifications-HR3FZRDI.js → push-notifications-NCZLH6DI.js} +29 -26
  400. package/dist/ref-provenance-gate-M4AQO4OT.js +269 -0
  401. package/dist/{reproject-worktree-memories-OSS3PGRF.js → reproject-worktree-memories-PWYKPB2U.js} +106 -23
  402. package/dist/{reranker-IMZRPYJ2.js → reranker-6V3C2AO4.js} +3 -2
  403. package/dist/resolve-image-labels-ZI6UBW5W.js +15 -0
  404. package/dist/{retrieval-health-W7OD44FE.js → retrieval-health-5D7O6VH6.js} +4 -3
  405. package/dist/{review-polling-2INP7H6M.js → review-polling-QW3LJ4KN.js} +29 -26
  406. package/dist/runtime/index.js +38 -34
  407. package/dist/{session-events-G4XUPVWV.js → session-events-T45SSTMF.js} +31 -26
  408. package/dist/{session-kill-telemetry-W7MHWJTQ.js → session-kill-telemetry-QSPVJGBF.js} +29 -26
  409. package/dist/{session-mcp-config-F7KATWOF.js → session-mcp-config-SC5BLWZG.js} +3 -2
  410. package/dist/{session-scope-LG2J4EMQ.js → session-scope-KRWE54C4.js} +28 -25
  411. package/dist/{setup-wizard-YQJI3SVM.js → setup-wizard-GP3TBTPF.js} +5 -4
  412. package/dist/{shard-manager-UROHZE46.js → shard-manager-OE36A4MY.js} +3 -2
  413. package/dist/{skill-refinement-RA37U756.js → skill-refinement-C7JTMLJG.js} +6 -5
  414. package/dist/stack-generate-manifest-MFMDWRUP.js +810 -0
  415. package/dist/{stack-promote-IYBRXHTA.js → stack-promote-EKSCYY63.js} +8 -6
  416. package/dist/{stack-release-OXWLVVG6.js → stack-release-2GZAAFO4.js} +8 -6
  417. package/dist/{stack-update-2CZEROPK.js → stack-update-J6JXSTAZ.js} +51 -5
  418. package/dist/{steward-gate-LTNFB3FY.js → steward-gate-BFCCMCSW.js} +6 -5
  419. package/dist/{subagent-brief-injection-OHLWLECQ.js → subagent-brief-injection-ED36PLYY.js} +44 -36
  420. package/dist/{subagent-spawn-ledger-USYZXU3M.js → subagent-spawn-ledger-E6U3OY6Z.js} +3 -2
  421. package/dist/{supervisor-handoff-CSJQMI53.js → supervisor-handoff-SGLEPOCY.js} +12 -3
  422. package/dist/{support-inbox-4KCEPAZQ.js → support-inbox-YW47SYJF.js} +20 -5
  423. package/dist/{task-enforcement-LGXWXGVZ.js → task-enforcement-CECTQX4U.js} +29 -26
  424. package/dist/{task-request-inbox-WHCOSUCP.js → task-request-inbox-Q5T4N5K7.js} +1 -1
  425. package/dist/{task-scope-KXF7Y6KA.js → task-scope-ERVEUEYU.js} +28 -25
  426. package/dist/{tasks-crud-5EM55WRZ.js → tasks-crud-ZRQNJXQ2.js} +28 -25
  427. package/dist/{tasks-notify-VFMAURTN.js → tasks-notify-MIZH4C2O.js} +29 -26
  428. package/dist/{tasks-review-MHGMBHUZ.js → tasks-review-Z7J2P6DG.js} +28 -25
  429. package/dist/{telemetry-upload-6NRTN7QJ.js → telemetry-upload-LVQUQYFP.js} +10 -9
  430. package/dist/{token-budget-LZPOYTRP.js → token-budget-BU4NOVZF.js} +6 -5
  431. package/dist/{tool-capability-index-ED5OAPMW.js → tool-capability-index-7F42MOJT.js} +1 -1
  432. package/dist/{tool-gates-7PLIOLAL.js → tool-gates-JWVSAYTW.js} +1 -1
  433. package/dist/{tool-gates-2OZY3GZM.js → tool-gates-VXITVRFQ.js} +1 -1
  434. package/dist/{tool-telemetry-ZX7VSAXK.js → tool-telemetry-O27EVMBR.js} +1 -1
  435. package/dist/tui/App.js +43 -40
  436. package/dist/{tui-data-CC5POSUV.js → tui-data-TPWWBIUQ.js} +28 -25
  437. package/dist/{update-support-KH6NSQON.js → update-support-F2F5537B.js} +22 -20
  438. package/dist/{whatsapp-QW3X7OCN.js → whatsapp-YM4A2CSK.js} +3 -1
  439. package/dist/{work-claims-MNK7PEPW.js → work-claims-B73X5NE7.js} +6 -5
  440. package/dist/{work-state-heartbeat-YEWT5NMZ.js → work-state-heartbeat-P4YX6E2R.js} +1 -1
  441. package/dist/{worker-gate-BOQSIU2Z.js → worker-gate-BEEIIVWA.js} +3 -2
  442. package/dist/{workflow-engine-MUUD7ZEX.js → workflow-engine-5X46PFCW.js} +4 -2
  443. package/dist/{worktree-GOGT2LZP.js → worktree-W47CIMJ6.js} +9 -6
  444. package/dist/worktree-ownership-guard-OUWJROW2.js +88 -0
  445. package/dist/{worktree-sweep-46VWPVQT.js → worktree-sweep-BNBD4RFX.js} +8 -7
  446. package/package.json +14 -5
  447. package/release-notes.json +5 -5
  448. package/src/commands/exe/call.md +1 -1
  449. package/stack.release.json +6 -0
  450. package/dist/chunk-KZXMP6JG.js +0 -319
  451. package/dist/chunk-TCTED52S.js +0 -120
  452. package/dist/chunk-W2IRQJ6R.js +0 -67
  453. package/dist/doc-graph-extractor-VPTRIEKN.js +0 -149
  454. package/dist/project-name-ILJTETUE.js +0 -14
  455. /package/dist/{chunk-3Y5THOU6.js → chunk-6WIFPD2P.js} +0 -0
  456. /package/dist/{chunk-7XGXRD22.js → chunk-AISULNGL.js} +0 -0
  457. /package/dist/{chunk-3F2UB4IQ.js → chunk-DN4YVV4Z.js} +0 -0
  458. /package/dist/{chunk-WV3TOOL7.js → chunk-KQ6RJWRW.js} +0 -0
  459. /package/dist/{chunk-HR2R2QER.js → chunk-M4IRPXSZ.js} +0 -0
  460. /package/dist/{chunk-ORA5BWCV.js → chunk-NRG7KZIP.js} +0 -0
  461. /package/dist/{chunk-7UTJA6HF.js → chunk-VZAFWPAY.js} +0 -0
  462. /package/dist/{chunk-VJSDGDNS.js → chunk-WSQASFLP.js} +0 -0
  463. /package/dist/{chunk-FZQWVQJG.js → chunk-YO4BO2CL.js} +0 -0
  464. /package/dist/{core-memory-6WBNT2HL.js → core-memory-7I7RE2SJ.js} +0 -0
  465. /package/dist/{entity-boost-MT336PI3.js → entity-boost-3UWGXG5O.js} +0 -0
  466. /package/dist/{memory-isolation-EJ45IXBH.js → memory-isolation-2TUZ7Z4K.js} +0 -0
  467. /package/dist/{message-queue-client-MVBTYCSV.js → message-queue-client-XQN7QABL.js} +0 -0
  468. /package/dist/{webhook-pipe-UQSEHFPO.js → webhook-pipe-W2FVXY7M.js} +0 -0
  469. /package/dist/{wiki-acl-WXRJGZ5Q.js → wiki-acl-IBQLLBTS.js} +0 -0
  470. /package/dist/{wiki-client-AXNM5FWY.js → wiki-client-W65IOSWF.js} +0 -0
@@ -0,0 +1,313 @@
1
+ // src/lib/stack-invariants.ts
2
+ import { execFileSync } from "child_process";
3
+ var EXPECTED_GOTRUE_COUNT = 1;
4
+ function isGotrueImage(image) {
5
+ const normalized = image.toLowerCase();
6
+ const repo = (normalized.split("@")[0] ?? "").split(":")[0] ?? "";
7
+ return /(^|\/)gotrue$/.test(repo) || /(^|\/)supabase[/-]gotrue$/.test(repo) || /(^|\/)supabase[/-]auth$/.test(repo) || repo.endsWith("/gotrue");
8
+ }
9
+ function evaluateGotrueInvariant(containers) {
10
+ const instances = containers.filter((c) => isGotrueImage(c.image)).map((c) => c.name).sort();
11
+ if (instances.length === EXPECTED_GOTRUE_COUNT) {
12
+ return {
13
+ pass: true,
14
+ instances,
15
+ detail: `Exactly one GoTrue running (${instances[0]}) \u2014 invariant holds`
16
+ };
17
+ }
18
+ if (instances.length === 0) {
19
+ return {
20
+ pass: false,
21
+ instances,
22
+ detail: "\u{1F534} NO GoTrue container is running \u2014 auth is down for every product on this host"
23
+ };
24
+ }
25
+ return {
26
+ pass: false,
27
+ instances,
28
+ detail: `\u{1F534} ${instances.length} GoTrue containers running (${instances.join(", ")}) \u2014 exactly ONE may serve auth. Two GoTrues sharing a JWT audience and user table is a split-brain identity provider: sessions minted by one cannot be revoked by the other. Stop the extras; the survivor is the exe-os stack's \`gotrue\`. exe-create's instance is on hold until Q4 and is gated behind the \`exe-create-revival\` compose profile in AskExe/exe-db.`
29
+ };
30
+ }
31
+ function listRunningContainers() {
32
+ try {
33
+ const out = execFileSync(
34
+ "docker",
35
+ ["ps", "--format", "{{.Names}} {{.Image}}"],
36
+ { encoding: "utf-8", timeout: 5e3, stdio: ["ignore", "pipe", "ignore"] }
37
+ );
38
+ return out.split("\n").map((line) => line.trim()).filter(Boolean).map((line) => {
39
+ const [name = "", image = ""] = line.split(" ");
40
+ return { name, image };
41
+ });
42
+ } catch {
43
+ return null;
44
+ }
45
+ }
46
+ function checkSingleGotrueInstance(containers = listRunningContainers()) {
47
+ if (containers === null) {
48
+ return {
49
+ pass: true,
50
+ instances: [],
51
+ available: false,
52
+ detail: "n/a \u2014 Docker not reachable from this host"
53
+ };
54
+ }
55
+ return { ...evaluateGotrueInvariant(containers), available: true };
56
+ }
57
+ var CANONICAL_SSO_COOKIE = "exe_access_token";
58
+ var DEAD_SSO_COOKIES = ["exe_sso_token"];
59
+ function stripHtmlComments(html) {
60
+ return html.replace(/<!--[\s\S]*?-->/g, "");
61
+ }
62
+ function evaluateSsoCookieContract(product, url, html) {
63
+ const source = stripHtmlComments(html);
64
+ const hasCookieGate = source.includes("document.cookie");
65
+ const deadCookiesFound = DEAD_SSO_COOKIES.filter((dead) => source.includes(dead));
66
+ const canonicalFound = source.includes(CANONICAL_SSO_COOKIE);
67
+ if (deadCookiesFound.length > 0) {
68
+ return {
69
+ product,
70
+ url,
71
+ pass: false,
72
+ severity: "violation",
73
+ detail: `\u{1F534} references RETIRED cookie ${deadCookiesFound.join(", ")} \u2014 nothing sets that name, so every visit bounces to auth.<apex> and back, forever. The canonical cookie is \`${CANONICAL_SSO_COOKIE}\`. Third occurrence of this exact bug (wiki f1bb40d8, crm 9f60e8e6, erp 3938ac3d).`,
74
+ deadCookiesFound,
75
+ canonicalFound
76
+ };
77
+ }
78
+ if (!hasCookieGate) {
79
+ return {
80
+ product,
81
+ url,
82
+ pass: true,
83
+ severity: "pass",
84
+ detail: "no client-side cookie gate (server-side or edge-gated) \u2014 n/a",
85
+ deadCookiesFound: [],
86
+ canonicalFound
87
+ };
88
+ }
89
+ if (!canonicalFound) {
90
+ return {
91
+ product,
92
+ url,
93
+ pass: true,
94
+ severity: "review",
95
+ detail: `\u{1F7E0} REVIEW: reads document.cookie but the canonical \`${CANONICAL_SSO_COOKIE}\` appears nowhere in the served document. Legitimate when the product gates on its OWN session cookie and bridges to GoTrue server-side (exe-crm gates on \`tokenPair\` and bridges via /api/auth/gotrue-callback). Confirm that is what this is, and not a gate on some third cookie name.`,
96
+ deadCookiesFound,
97
+ canonicalFound
98
+ };
99
+ }
100
+ return {
101
+ product,
102
+ url,
103
+ pass: true,
104
+ severity: "pass",
105
+ detail: `gates on \`${CANONICAL_SSO_COOKIE}\` \u2014 contract holds`,
106
+ deadCookiesFound,
107
+ canonicalFound
108
+ };
109
+ }
110
+ var SSO_EDGE_CONFIG_FILES = [
111
+ "deploy/compose/sso-edge/default.conf.template",
112
+ "deploy/compose/sso-edge/sso-redirect.conf",
113
+ "deploy/nginx/snippets/sso-redirect.conf",
114
+ "deploy/nginx/snippets/sso-redirect.README.md"
115
+ ];
116
+ var SSO_GATE_COOKIE_VAR = "sso_gotrue_cookie";
117
+ function extractSsoGateCookieNames(source, variable = SSO_GATE_COOKIE_VAR) {
118
+ const names = [];
119
+ const mapHeader = new RegExp(`map\\s+\\$http_cookie\\s+\\$${variable}\\s*\\{`, "g");
120
+ let header;
121
+ while ((header = mapHeader.exec(source)) !== null) {
122
+ let depth = 1;
123
+ let i = header.index + header[0].length;
124
+ for (; i < source.length && depth > 0; i++) {
125
+ if (source[i] === "{") depth++;
126
+ else if (source[i] === "}") depth--;
127
+ }
128
+ const body = source.slice(header.index + header[0].length, i - 1);
129
+ for (const arm of body.matchAll(/([A-Za-z0-9_.-]+)=\(/g)) {
130
+ const name = arm[1];
131
+ if (name && !names.includes(name)) names.push(name);
132
+ }
133
+ }
134
+ return names;
135
+ }
136
+ function evaluateSsoEdgeCookieGate(file, source) {
137
+ const cookieNames = extractSsoGateCookieNames(source);
138
+ if (cookieNames.length === 0) {
139
+ return {
140
+ file,
141
+ cookieNames,
142
+ severity: "pass",
143
+ detail: `no \`$${SSO_GATE_COOKIE_VAR}\` map declared \u2014 nothing to check`
144
+ };
145
+ }
146
+ const wrong = cookieNames.filter((n) => n !== CANONICAL_SSO_COOKIE);
147
+ if (wrong.length > 0) {
148
+ const retired = wrong.filter((n) => DEAD_SSO_COOKIES.includes(n));
149
+ return {
150
+ file,
151
+ cookieNames,
152
+ severity: "violation",
153
+ detail: `\u{1F534} the cross-app-logout gate reads ${wrong.map((n) => `\`${n}\``).join(", ")} but the only cookie the stack mints is \`${CANONICAL_SSO_COOKIE}\`` + (retired.length ? ` (${retired.join(", ")} is RETIRED)` : " (that name is never set by anything)") + `. Every request with a live app session is therefore treated as revoked and 401'd into an endless login bounce. Bug 21ae2388 \u2014 the fourth instance of this class. Fix the map regex in ${file}.`
154
+ };
155
+ }
156
+ return {
157
+ file,
158
+ cookieNames,
159
+ severity: "pass",
160
+ detail: `gate reads \`${CANONICAL_SSO_COOKIE}\` \u2014 contract holds`
161
+ };
162
+ }
163
+ var SSO_STATIC_MAP_SOURCE = "request_uri";
164
+ var SSO_STATIC_QUERY_ANCHOR = "(?:[?#]|$)";
165
+ var SSO_STATIC_PROBES = [
166
+ // ── must be exempt: real build output, or the app never boots ────────────
167
+ { uri: "/assets/index-a1b2c3.js", exempt: true, why: "Vite/wiki build output" },
168
+ { uri: "/assets/index-a1b2c3.js?v=9f2c", exempt: true, why: "cache-busted build output" },
169
+ { uri: "/assets/fonts/inter.woff2", exempt: true, why: "nested build output" },
170
+ { uri: "/static/js/main.4f2a.css", exempt: true, why: "CRA/Twenty build output" },
171
+ { uri: "/_next/static/chunks/main.js", exempt: true, why: "Next build output" },
172
+ { uri: "/favicon.ico", exempt: true, why: "browser-initiated root icon" },
173
+ // ── must NOT be exempt: protected app surface behind a catch-all proxy ───
174
+ { uri: "/uploads/customer.png", exempt: false, why: "customer upload \u2014 asset extension, private content" },
175
+ { uri: "/api/export.js", exempt: false, why: "API response dressed as a script" },
176
+ { uri: "/api/v1/report.css?scope=all", exempt: false, why: "API path, asset extension, query string" },
177
+ { uri: "/files/invoice-1041.png", exempt: false, why: "app-served file store" },
178
+ { uri: "/private/files/contract.png", exempt: false, why: "explicitly private file store" },
179
+ { uri: "/uploads/customer.png?v=1", exempt: false, why: "query string must not launder an upload" },
180
+ { uri: "/assets/../api/export.js", exempt: false, why: "raw traversal \u2014 normalizes into the API upstream" },
181
+ { uri: "/assets/%2e%2e/api/export.js", exempt: false, why: "encoded traversal" },
182
+ { uri: "/notes/report.jsx", exempt: false, why: "not an asset extension, not an asset prefix" },
183
+ { uri: "/reports/q3.png", exempt: false, why: "app content outside every build-output prefix" },
184
+ { uri: "/", exempt: false, why: "the document itself is always gated" },
185
+ { uri: "/api/documents", exempt: false, why: "plain API path" }
186
+ ];
187
+ function undecorate(line) {
188
+ return line.replace(/^\s*#\s?/, "");
189
+ }
190
+ function parseStaticMapArms(body) {
191
+ const arms = [];
192
+ let defaultValue = "";
193
+ for (const raw of body.split("\n")) {
194
+ const line = undecorate(raw).trim();
195
+ const def = /^default\s+"([^"]*)"\s*;/.exec(line);
196
+ if (def) {
197
+ defaultValue = def[1] ?? "";
198
+ continue;
199
+ }
200
+ const arm = /^"~(\*?)([^"]*)"\s+"([^"]*)"\s*;/.exec(line);
201
+ if (arm) {
202
+ arms.push({
203
+ caseInsensitive: arm[1] === "*",
204
+ pattern: arm[2] ?? "",
205
+ value: arm[3] ?? ""
206
+ });
207
+ }
208
+ }
209
+ return { arms, defaultValue };
210
+ }
211
+ function extractSsoStaticMaps(source) {
212
+ const blocks = [];
213
+ const header = /map\s+\$([A-Za-z0-9_]+)\s+\$sso_is_static\s*\{/g;
214
+ let m;
215
+ while ((m = header.exec(source)) !== null) {
216
+ let depth = 1;
217
+ let i = m.index + m[0].length;
218
+ for (; i < source.length && depth > 0; i++) {
219
+ if (source[i] === "{") depth++;
220
+ else if (source[i] === "}") depth--;
221
+ }
222
+ const body = source.slice(m.index + m[0].length, i - 1);
223
+ blocks.push({ sourceVar: m[1] ?? "", body, ...parseStaticMapArms(body) });
224
+ }
225
+ return blocks;
226
+ }
227
+ function evaluateStaticMap(block, uri) {
228
+ for (const arm of block.arms) {
229
+ let re;
230
+ try {
231
+ re = new RegExp(arm.pattern, arm.caseInsensitive ? "i" : "");
232
+ } catch {
233
+ continue;
234
+ }
235
+ if (re.test(uri)) return arm.value;
236
+ }
237
+ return block.defaultValue;
238
+ }
239
+ function isSsoStaticExempt(source, uri) {
240
+ const [block] = extractSsoStaticMaps(source);
241
+ if (!block) return false;
242
+ return evaluateStaticMap(block, uri) !== "";
243
+ }
244
+ function evaluateSsoStaticExemption(file, source) {
245
+ const maps = extractSsoStaticMaps(source);
246
+ const sourceVars = maps.map((b) => b.sourceVar);
247
+ if (maps.length === 0) {
248
+ return {
249
+ file,
250
+ sourceVars,
251
+ severity: "pass",
252
+ detail: "no `$sso_is_static` map declared \u2014 nothing to check"
253
+ };
254
+ }
255
+ const wrongKey = sourceVars.filter((v) => v !== SSO_STATIC_MAP_SOURCE);
256
+ if (wrongKey.length > 0) {
257
+ return {
258
+ file,
259
+ sourceVars,
260
+ severity: "violation",
261
+ detail: `\u{1F534} the static-asset exemption is keyed on ${wrongKey.map((v) => `\`$${v}\``).join(", ")} instead of \`$${SSO_STATIC_MAP_SOURCE}\`. \`$sso_is_static\` is read inside the auth_request subrequest, where \`$uri\` is \`/_sso_gate\` and never the original request path \u2014 so the extension regex can never match and the exemption is completely inert. Every static asset is gated, the SPA is handed auth HTML in place of its JS, and the app boots blank. Bug 06a3daae. Fix the map key in ${file}.`
262
+ };
263
+ }
264
+ for (const block of maps) {
265
+ const leaks = SSO_STATIC_PROBES.filter(
266
+ (p) => !p.exempt && evaluateStaticMap(block, p.uri) !== ""
267
+ );
268
+ if (leaks.length > 0) {
269
+ return {
270
+ file,
271
+ sourceVars,
272
+ severity: "violation",
273
+ detail: `\u{1F534} the static-asset exemption is too wide \u2014 it exempts ${leaks.map((p) => `\`${p.uri}\` (${p.why})`).join(", ")}. The gate answers 204 BEFORE any cookie check and each app location is a catch-all \`proxy_pass\`, so these reach the app with no SSO at all and customer content is exposed by URL shape. Scope the exemption to the build-output path prefixes (/_next/static/, /_nuxt/, /assets/, /static/, /build/assets/, root icons) and keep the leading deny arms for /api/, /uploads/ and traversal. Fix the map in ${file}.`
274
+ };
275
+ }
276
+ const missed = SSO_STATIC_PROBES.filter(
277
+ (p) => p.exempt && evaluateStaticMap(block, p.uri) === ""
278
+ );
279
+ if (missed.length > 0) {
280
+ return {
281
+ file,
282
+ sourceVars,
283
+ severity: "violation",
284
+ detail: `\u{1F534} the static-asset exemption is too narrow \u2014 it gates ${missed.map((p) => `\`${p.uri}\` (${p.why})`).join(", ")}. The SPA sets its session cookie only after its JS runs, so serving auth HTML in place of build output leaves a blank page. Remember \`$${SSO_STATIC_MAP_SOURCE}\` carries the query string \u2014 arms need the \`${SSO_STATIC_QUERY_ANCHOR}\` anchor, not a bare \`$\`. Bug 06a3daae. Fix the map regex in ${file}.`
285
+ };
286
+ }
287
+ }
288
+ return {
289
+ file,
290
+ sourceVars,
291
+ severity: "pass",
292
+ detail: `exemption keyed on \`$${SSO_STATIC_MAP_SOURCE}\`, scoped to build-output prefixes; all ${SSO_STATIC_PROBES.length} probes classified correctly \u2014 contract holds`
293
+ };
294
+ }
295
+
296
+ export {
297
+ EXPECTED_GOTRUE_COUNT,
298
+ isGotrueImage,
299
+ evaluateGotrueInvariant,
300
+ listRunningContainers,
301
+ checkSingleGotrueInstance,
302
+ CANONICAL_SSO_COOKIE,
303
+ DEAD_SSO_COOKIES,
304
+ evaluateSsoCookieContract,
305
+ SSO_EDGE_CONFIG_FILES,
306
+ extractSsoGateCookieNames,
307
+ evaluateSsoEdgeCookieGate,
308
+ SSO_STATIC_MAP_SOURCE,
309
+ SSO_STATIC_QUERY_ANCHOR,
310
+ SSO_STATIC_PROBES,
311
+ isSsoStaticExempt,
312
+ evaluateSsoStaticExemption
313
+ };
@@ -0,0 +1,70 @@
1
+ // scripts/lib/resolve-image-labels.mjs
2
+ import { spawnSync } from "child_process";
3
+ var defaultRunner = (cmd, args) => spawnSync(cmd, args, { encoding: "utf8", timeout: 6e4 });
4
+ function repositoryOf(ref) {
5
+ if (typeof ref !== "string") return ref;
6
+ const at = ref.indexOf("@");
7
+ if (at !== -1) return ref.slice(0, at);
8
+ const slash = ref.lastIndexOf("/");
9
+ const colon = ref.lastIndexOf(":");
10
+ if (colon > slash) return ref.slice(0, colon);
11
+ return ref;
12
+ }
13
+ function amd64ChildDigest(rawJson) {
14
+ let doc;
15
+ try {
16
+ doc = typeof rawJson === "string" ? JSON.parse(rawJson) : rawJson;
17
+ } catch {
18
+ return void 0;
19
+ }
20
+ if (!doc || !Array.isArray(doc.manifests)) return void 0;
21
+ const isLinuxAmd64 = (m) => m?.platform?.os === "linux" && m?.platform?.architecture === "amd64";
22
+ const anyAmd64 = (m) => m?.platform?.architecture === "amd64" && m?.platform?.os !== "unknown";
23
+ const pick = doc.manifests.find(isLinuxAmd64) ?? doc.manifests.find(anyAmd64);
24
+ const digest = pick?.digest;
25
+ return typeof digest === "string" && digest.length > 0 ? digest : void 0;
26
+ }
27
+ function resolvePlatformRef(imageRef, { runner } = {}) {
28
+ const run = runner ?? defaultRunner;
29
+ const res = run("docker", ["buildx", "imagetools", "inspect", imageRef, "--raw"]);
30
+ if (!res || res.status !== 0) return imageRef;
31
+ const raw = (res.stdout ?? "").toString();
32
+ const childDigest = amd64ChildDigest(raw);
33
+ if (!childDigest) return imageRef;
34
+ return `${repositoryOf(imageRef)}@${childDigest}`;
35
+ }
36
+ function readLabelOff(platformRef, label, { runner } = {}) {
37
+ const run = runner ?? defaultRunner;
38
+ for (const root of [".Image.Config.Labels", ".Config.Labels"]) {
39
+ const res = run("docker", [
40
+ "buildx",
41
+ "imagetools",
42
+ "inspect",
43
+ platformRef,
44
+ "--format",
45
+ `{{ index ${root} "${label}" }}`
46
+ ]);
47
+ if (!res || res.status !== 0) continue;
48
+ const out = (res.stdout ?? "").toString().trim();
49
+ if (out === "" || out === "<no value>") continue;
50
+ return out;
51
+ }
52
+ return void 0;
53
+ }
54
+ function resolveImageLabels(imageRef, labels, { runner } = {}) {
55
+ const platformRef = resolvePlatformRef(imageRef, { runner });
56
+ const out = {};
57
+ for (const label of labels) out[label] = readLabelOff(platformRef, label, { runner });
58
+ return out;
59
+ }
60
+ function readImageLabel(imageRef, label, opts = {}) {
61
+ return resolveImageLabels(imageRef, [label], opts)[label];
62
+ }
63
+
64
+ export {
65
+ repositoryOf,
66
+ amd64ChildDigest,
67
+ resolvePlatformRef,
68
+ resolveImageLabels,
69
+ readImageLabel
70
+ };
@@ -1,16 +1,16 @@
1
1
  import {
2
2
  extractMemoryGraph
3
- } from "./chunk-RIK5GRWI.js";
3
+ } from "./chunk-LGS2V2XD.js";
4
4
  import {
5
5
  flushBatch,
6
6
  writeMemory
7
- } from "./chunk-OYQNNKNS.js";
7
+ } from "./chunk-MXPNVSXI.js";
8
8
  import {
9
9
  extractKeywords
10
10
  } from "./chunk-CHCA3ZM2.js";
11
11
  import {
12
12
  getActiveAgent
13
- } from "./chunk-KYFFVTGO.js";
13
+ } from "./chunk-55BEFF4V.js";
14
14
 
15
15
  // src/mcp/tools/import-conversations.ts
16
16
  import { z } from "zod";
@@ -144,6 +144,7 @@ var TOOL_CATEGORIES = {
144
144
  // orchestration
145
145
  registerCreateTrigger: "orchestration",
146
146
  registerListTriggers: "orchestration",
147
+ registerDeleteTrigger: "orchestration",
147
148
  registerApplyStarterPack: "orchestration",
148
149
  registerLoadSkill: "orchestration",
149
150
  registerExportOrchestration: "orchestration",
@@ -8,6 +8,28 @@ var GRAPH_API_VERSION = "v21.0";
8
8
  var MAX_PARAM_LENGTH = 2e3;
9
9
  var MAX_TRIGGER_DEPTH = 3;
10
10
  var _currentTriggerDepth = 0;
11
+ var TRIGGER_COOLDOWN_MS = (() => {
12
+ const raw = Number(process.env.EXE_TRIGGER_COOLDOWN_MS);
13
+ return Number.isFinite(raw) && raw >= 0 ? raw : 3e4;
14
+ })();
15
+ function triggerCooldownKey(triggerId, record) {
16
+ const rid = record?.["id"] ?? record?.["recordId"] ?? record?.["record_id"] ?? record?.["uuid"];
17
+ const recordPart = rid == null ? "_" : String(rid).slice(0, 200);
18
+ return `${triggerId}:${recordPart}`;
19
+ }
20
+ async function isTriggerFireAllowed(triggerId, record) {
21
+ if (TRIGGER_COOLDOWN_MS <= 0) return true;
22
+ try {
23
+ const { recordTriggerFire } = await import("./lib/database.js");
24
+ const { allowed } = await recordTriggerFire(
25
+ triggerCooldownKey(triggerId, record),
26
+ TRIGGER_COOLDOWN_MS
27
+ );
28
+ return allowed;
29
+ } catch {
30
+ return true;
31
+ }
32
+ }
11
33
  var OUTBOUND_RATE_LIMIT_PER_HOUR = 100;
12
34
  var _outboundWindows = /* @__PURE__ */ new Map();
13
35
  function checkOutboundRateLimit(channel) {
@@ -32,17 +54,24 @@ function sanitizeExternalPayload(text) {
32
54
  sanitized = sanitized.replace(/you\s+are\s+now\s+/gi, "[filtered] ");
33
55
  return sanitized;
34
56
  }
57
+ var UNSAFE_PATH_SEGMENTS = /* @__PURE__ */ new Set(["__proto__", "constructor", "prototype"]);
58
+ function resolveOwnPath(record, segments) {
59
+ let current = record;
60
+ for (const segment of segments) {
61
+ if (current == null || typeof current !== "object") return void 0;
62
+ if (UNSAFE_PATH_SEGMENTS.has(segment)) return void 0;
63
+ if (!Object.hasOwn(current, segment)) return void 0;
64
+ current = current[segment];
65
+ }
66
+ return current;
67
+ }
35
68
  function substituteTemplate(template, record, sanitizeExternal = false) {
36
69
  return template.replace(
37
70
  /\{\{(\w+(?:\.\w+)*)\}\}/g,
38
71
  (_match, dotPath) => {
39
72
  const segments = dotPath.split(".");
40
73
  if (segments[0] === "record") segments.shift();
41
- let current = record;
42
- for (const seg of segments) {
43
- if (current == null || typeof current !== "object") return "";
44
- current = current[seg];
45
- }
74
+ const current = resolveOwnPath(record, segments);
46
75
  if (current == null) return "";
47
76
  const value = String(current);
48
77
  return sanitizeExternal ? sanitizeExternalPayload(value) : value;
@@ -50,12 +79,7 @@ function substituteTemplate(template, record, sanitizeExternal = false) {
50
79
  );
51
80
  }
52
81
  function resolveFieldValue(record, field) {
53
- let current = record;
54
- for (const segment of field.split(".")) {
55
- if (current == null || typeof current !== "object") return void 0;
56
- current = current[segment];
57
- }
58
- return current;
82
+ return resolveOwnPath(record, field.split("."));
59
83
  }
60
84
  function evaluateCondition(condition, record) {
61
85
  const fieldValue = resolveFieldValue(record, condition.field);
@@ -114,6 +138,14 @@ function createNewTrigger(input) {
114
138
  saveTriggers(triggers);
115
139
  return trigger;
116
140
  }
141
+ function deleteTrigger(triggerId) {
142
+ const triggers = loadTriggers();
143
+ const idx = triggers.findIndex((t) => t.id === triggerId);
144
+ if (idx === -1) return false;
145
+ triggers.splice(idx, 1);
146
+ saveTriggers(triggers);
147
+ return true;
148
+ }
117
149
  async function executeSendWhatsapp(params) {
118
150
  if (!checkOutboundRateLimit("whatsapp")) {
119
151
  throw new Error(`Outbound rate limit exceeded for WhatsApp (max ${OUTBOUND_RATE_LIMIT_PER_HOUR}/hour)`);
@@ -266,14 +298,18 @@ To approve, manually run the action via MCP tools.`,
266
298
  baseDir: process.cwd()
267
299
  });
268
300
  }
301
+ function resolveActionParams(action, record) {
302
+ const resolved = {};
303
+ for (const [key, val] of Object.entries(action.params)) {
304
+ resolved[key] = sanitizeParam(substituteTemplate(val, record, true));
305
+ }
306
+ return resolved;
307
+ }
269
308
  async function executeAction(action, record, executor, triggerName) {
270
309
  if (executor) {
271
310
  return executor(action, record);
272
311
  }
273
- const resolvedParams = {};
274
- for (const [key, val] of Object.entries(action.params)) {
275
- resolvedParams[key] = sanitizeParam(substituteTemplate(val, record));
276
- }
312
+ const resolvedParams = resolveActionParams(action, record);
277
313
  if (action.requires_approval) {
278
314
  try {
279
315
  await routeToApproval(action, resolvedParams, triggerName ?? "Unknown trigger");
@@ -309,10 +345,9 @@ async function executeAction(action, record, executor, triggerName) {
309
345
  break;
310
346
  }
311
347
  case "mcp_tool":
312
- console.log(
313
- `[trigger-engine] mcp_tool action: ${JSON.stringify(resolvedParams)}`
348
+ throw new Error(
349
+ `mcp_tool trigger actions are not implemented \u2014 this action did nothing. Requested tool: ${resolvedParams.tool ?? resolvedParams.name ?? "(unspecified)"}. Use a supported action type (send_message, create_task, send_whatsapp, update_wiki, asana), or set requires_approval so the action is queued for a human instead.`
314
350
  );
315
- break;
316
351
  }
317
352
  return { success: true };
318
353
  } catch (err) {
@@ -344,6 +379,12 @@ async function _processCRMEventInner(event, executor, triggersOverride) {
344
379
  if (!trigger.enabled) continue;
345
380
  if (trigger.event !== eventString && trigger.event !== "*") continue;
346
381
  if (!evaluateConditions(trigger.conditions, event.record)) continue;
382
+ if (!await isTriggerFireAllowed(trigger.id, event.record)) {
383
+ console.warn(
384
+ `[trigger-engine] Suppressed "${trigger.name}" on ${eventString}: re-fired within ${TRIGGER_COOLDOWN_MS}ms cooldown for the same record (loop guard).`
385
+ );
386
+ continue;
387
+ }
347
388
  const actionResults = [];
348
389
  for (const action of trigger.actions) {
349
390
  const result = await executeAction(action, event.record, executor, trigger.name);
@@ -376,6 +417,7 @@ export {
376
417
  substituteTemplate,
377
418
  loadTriggers,
378
419
  createNewTrigger,
420
+ deleteTrigger,
379
421
  executeAction,
380
422
  processCRMEvent,
381
423
  isScheduledTrigger
@@ -10,7 +10,7 @@ import {
10
10
  } from "./chunk-E23LNUWJ.js";
11
11
  import {
12
12
  getClient
13
- } from "./chunk-5DCCKHDY.js";
13
+ } from "./chunk-TAMDAOCU.js";
14
14
 
15
15
  // src/lib/work-claims.ts
16
16
  var CLAIM_TTL_MINUTES = 90;
@@ -306,7 +306,7 @@ async function heartbeatClaims(holderSession, ttlMinutes = CLAIM_TTL_MINUTES) {
306
306
  }
307
307
  async function recordClaimEvent(eventType, sessionScope, agentId, payload, severity) {
308
308
  try {
309
- const { recordOrchestrationEventBestEffort } = await import("./orchestration-events-GY5VP5LU.js");
309
+ const { recordOrchestrationEventBestEffort } = await import("./orchestration-events-N7LYMUGA.js");
310
310
  recordOrchestrationEventBestEffort({
311
311
  eventType,
312
312
  source: "work-claims",
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  enqueueMemory
3
- } from "./chunk-CDUB5Q6J.js";
3
+ } from "./chunk-4IK2K3B3.js";
4
4
  import {
5
5
  isClientConnected,
6
6
  sendDaemonRequest
7
- } from "./chunk-UQUUNGTP.js";
7
+ } from "./chunk-NUK7EEN5.js";
8
8
 
9
9
  // src/lib/memory-queue-client.ts
10
10
  async function writeMemoryViaDaemon(entry) {
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  EXE_AI_DIR
3
- } from "./chunk-QMSEL5YS.js";
3
+ } from "./chunk-ZIG7VPJV.js";
4
4
 
5
5
  // src/lib/device-registry.ts
6
6
  import crypto from "crypto";