@askexenow/exe-os 0.9.382 → 0.9.384

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (493) hide show
  1. package/delivery/catalog.json +1254 -0
  2. package/deploy/compose/.env.customer.example +5 -5
  3. package/deploy/compose/.env.example +3 -3
  4. package/deploy/compose/docker-compose.yml +1 -1
  5. package/deploy/compose/generate-env.ts +65 -9
  6. package/deploy/compose/setup.sh +205 -7
  7. package/deploy/compose/sso-edge/default.conf.template +45 -0
  8. package/deploy/compose/sso-edge/sso-redirect.conf +11 -2
  9. package/deploy/stack-manifests/v0.9.30-apps.json +1 -1
  10. package/deploy/stack-manifests/v0.9.json +254 -2
  11. package/dist/.dist-verified.json +3 -3
  12. package/dist/{active-agent-GFUUCFLD.js → active-agent-F5V4E4UL.js} +7 -7
  13. package/dist/{active-agent-LE6FE6SO.js → active-agent-YTBB4ZQM.js} +7 -7
  14. package/dist/{agent-defs-generator-EIUA3SH5.js → agent-defs-generator-7TFISIJQ.js} +6 -6
  15. package/dist/{agent-loop-7ZRH56EX.js → agent-loop-EZ7LDAGD.js} +1 -1
  16. package/dist/{agentic-ontology-67JGSP7G.js → agentic-ontology-XVTUVV7W.js} +1 -1
  17. package/dist/{artifact-backup-NYXAYASJ.js → artifact-backup-TF6YWQT2.js} +5 -5
  18. package/dist/{backfill-gate-KWJQ35YX.js → backfill-gate-FWYLCGNJ.js} +3 -3
  19. package/dist/{backfill-metadata-RQYG2WUJ.js → backfill-metadata-J6MXIDCW.js} +10 -10
  20. package/dist/{background-jobs-6VMD55PK.js → background-jobs-V3DZRFKU.js} +3 -3
  21. package/dist/{backup-verify-HC4YDSGN.js → backup-verify-6DVBQMDP.js} +67 -18
  22. package/dist/{behavior-injection-6HSXP43Q.js → behavior-injection-XDA7ZCYN.js} +21 -20
  23. package/dist/{behavior-promotion-SJDQ2Y3U.js → behavior-promotion-4VLQ7LXK.js} +20 -19
  24. package/dist/{behaviors-6ITLA2CK.js → behaviors-SCCZP7RZ.js} +19 -18
  25. package/dist/bin/age-ontology-load.js +3 -3
  26. package/dist/bin/agentic-ontology-backfill.js +12 -12
  27. package/dist/bin/agentic-reflection-backfill.js +13 -13
  28. package/dist/bin/agentic-semantic-label.js +12 -12
  29. package/dist/bin/backfill-conversations.js +17 -16
  30. package/dist/bin/backfill-responses.js +17 -16
  31. package/dist/bin/backfill-vectors.js +23 -22
  32. package/dist/bin/bulk-sync-postgres.js +28 -27
  33. package/dist/bin/cc-doctor.js +17 -16
  34. package/dist/bin/cleanup-stale-review-tasks.js +29 -28
  35. package/dist/bin/cli.js +35 -26
  36. package/dist/bin/deferred-daemon-restart.js +124 -123
  37. package/dist/bin/exe-actions.js +1 -1
  38. package/dist/bin/exe-agent-config.js +6 -6
  39. package/dist/bin/exe-agent.js +22 -22
  40. package/dist/bin/exe-assign.js +19 -18
  41. package/dist/bin/exe-boot.js +57 -56
  42. package/dist/bin/exe-call.js +7 -7
  43. package/dist/bin/exe-cicd.js +38 -8
  44. package/dist/bin/exe-cloud.js +30 -29
  45. package/dist/bin/exe-config-dump.js +6 -6
  46. package/dist/bin/exe-dispatch.js +30 -29
  47. package/dist/bin/exe-doctor.js +11 -11
  48. package/dist/bin/exe-export-behaviors.js +23 -22
  49. package/dist/bin/exe-forget.js +13 -13
  50. package/dist/bin/exe-gateway.js +47 -14
  51. package/dist/bin/exe-grant.js +6 -6
  52. package/dist/bin/exe-healthcheck.js +17 -16
  53. package/dist/bin/exe-heartbeat.js +41 -35
  54. package/dist/bin/exe-kill.js +35 -34
  55. package/dist/bin/exe-launch-agent.js +43 -42
  56. package/dist/bin/exe-mcp.js +9 -9
  57. package/dist/bin/exe-memory-reads.js +10 -10
  58. package/dist/bin/exe-new-employee.js +11 -11
  59. package/dist/bin/exe-os-mcp-proxy.js +9 -9
  60. package/dist/bin/exe-pending-messages.js +30 -29
  61. package/dist/bin/exe-pending-notifications.js +29 -28
  62. package/dist/bin/exe-pending-reviews.js +30 -29
  63. package/dist/bin/exe-preflight.js +1 -1
  64. package/dist/bin/exe-rename.js +9 -9
  65. package/dist/bin/exe-review.js +34 -33
  66. package/dist/bin/exe-search.js +12 -12
  67. package/dist/bin/exe-session-cleanup.js +35 -34
  68. package/dist/bin/exe-settings.js +29 -28
  69. package/dist/bin/exe-start-codex.js +30 -29
  70. package/dist/bin/exe-start-opencode.js +27 -26
  71. package/dist/bin/exe-status.js +31 -30
  72. package/dist/bin/exe-support.js +5 -5
  73. package/dist/bin/exe-team.js +7 -7
  74. package/dist/bin/exe-verify-running-images.js +1 -1
  75. package/dist/bin/exe-watchdog.js +8 -8
  76. package/dist/bin/generate-hook-manifest.js +7 -1
  77. package/dist/bin/git-sweep.js +30 -29
  78. package/dist/bin/graph-backfill.js +12 -12
  79. package/dist/bin/graph-export.js +11 -11
  80. package/dist/bin/hooks-cli.js +1 -1
  81. package/dist/bin/import-history.js +15 -15
  82. package/dist/bin/install.js +130 -129
  83. package/dist/bin/intercom-check.js +11 -7
  84. package/dist/bin/mcp-sessions.js +2 -2
  85. package/dist/bin/orchestration-metrics.js +7 -7
  86. package/dist/bin/postgres-agentic-reflection-backfill.js +5 -5
  87. package/dist/bin/postgres-agentic-semantic-backfill.js +4 -4
  88. package/dist/bin/reconcile-backlog.js +2 -2
  89. package/dist/bin/registry-proxy.js +1 -1
  90. package/dist/bin/repair-document-chunks.js +161 -0
  91. package/dist/bin/scan-tasks.js +30 -29
  92. package/dist/bin/setup.js +5 -5
  93. package/dist/bin/shard-migrate.js +11 -11
  94. package/dist/bin/stack-update.js +625 -33
  95. package/dist/bin/update.js +96 -22
  96. package/dist/bin/verify-stack.js +2 -2
  97. package/dist/bin/vps-health-gate.js +1 -1
  98. package/dist/{boot-generation-L55QANCX.js → boot-generation-Q7LGQ3AO.js} +6 -6
  99. package/dist/{boot-review-sections-AON5ZCR2.js → boot-review-sections-G5774FR5.js} +28 -27
  100. package/dist/{branch-hygiene-QLD77IMJ.js → branch-hygiene-44WLSOZR.js} +2 -2
  101. package/dist/{branding-I6KIMB7F.js → branding-KMWCY5HZ.js} +3 -3
  102. package/dist/build-manifest.json +1259 -1219
  103. package/dist/{capability-cards-WTOXY7O6.js → capability-cards-I3RHCF4F.js} +5 -5
  104. package/dist/{capacity-monitor-ZLG7FSWM.js → capacity-monitor-7I7GDONU.js} +30 -29
  105. package/dist/{catchup-brief-QHY7D7N2.js → catchup-brief-3T5PARIR.js} +39 -36
  106. package/dist/check-image-pullability-2AIVB4BX.js +338 -0
  107. package/dist/{chunk-CTCCYKOV.js → chunk-2FKU4ZEO.js} +55 -29
  108. package/dist/{chunk-M7O7TGGU.js → chunk-2NW4LRDU.js} +1 -1
  109. package/dist/{chunk-XTFM4KMW.js → chunk-2PZTMSMG.js} +6 -6
  110. package/dist/{chunk-UWX6MMCX.js → chunk-3B6FLNLV.js} +1 -1
  111. package/dist/{chunk-GPJIBLP4.js → chunk-3DAEZILW.js} +1 -1
  112. package/dist/{chunk-NY6SBR4O.js → chunk-3FGBBJYM.js} +15 -3
  113. package/dist/{chunk-C4OZVVSG.js → chunk-3OX34OC3.js} +50 -18
  114. package/dist/{chunk-TXTXC3QG.js → chunk-3RGTLZNO.js} +12 -12
  115. package/dist/{chunk-PYRO25A5.js → chunk-3SUPEE6H.js} +10 -11
  116. package/dist/{chunk-PPMGQFLJ.js → chunk-3XY57PKT.js} +2 -2
  117. package/dist/{chunk-CRHI5QTZ.js → chunk-46VSBDUW.js} +2 -2
  118. package/dist/{chunk-VZT66WWP.js → chunk-4AAMFWJT.js} +2 -2
  119. package/dist/{chunk-4GZTBLJG.js → chunk-4AR5XKCH.js} +1 -1
  120. package/dist/{chunk-IHXW4VUI.js → chunk-5IADGFGR.js} +1 -1
  121. package/dist/{chunk-GLQEJOXE.js → chunk-5MVKTNZP.js} +57 -0
  122. package/dist/{chunk-AVMLC2MR.js → chunk-5U2IJBFV.js} +290 -41
  123. package/dist/{chunk-JUKDL5MF.js → chunk-6BJCDWSM.js} +1 -1
  124. package/dist/{chunk-6WWNK7UX.js → chunk-6FIC57PH.js} +1 -1
  125. package/dist/{chunk-ASUICGPX.js → chunk-6YDY6ZTD.js} +4 -4
  126. package/dist/{chunk-FU5O2REK.js → chunk-72V3S44T.js} +108 -29
  127. package/dist/{chunk-LTIIZHNA.js → chunk-7J2ZQ4XN.js} +1 -1
  128. package/dist/{chunk-7RI2CNXJ.js → chunk-7OTR2OET.js} +1 -1
  129. package/dist/{chunk-ZVBVPX4W.js → chunk-7UHZBVP3.js} +82 -51
  130. package/dist/{chunk-PTY2N23C.js → chunk-AGC2V7JS.js} +26 -13
  131. package/dist/{chunk-44VR3PFW.js → chunk-AHESD3KW.js} +1 -1
  132. package/dist/{chunk-NPGV4MZ3.js → chunk-ALRHGEAJ.js} +1 -1
  133. package/dist/{chunk-WJC6AAJN.js → chunk-ANVHWV2X.js} +2 -2
  134. package/dist/{chunk-AGZSGAEN.js → chunk-APL7HUE3.js} +105 -32
  135. package/dist/{chunk-7UH2JWBF.js → chunk-AZSTIAVL.js} +176 -11
  136. package/dist/chunk-AZXMR25O.js +545 -0
  137. package/dist/{chunk-WPWEBZ37.js → chunk-B7AMNZTC.js} +2 -2
  138. package/dist/{chunk-4CF5KUWH.js → chunk-BPVFZ6Q4.js} +3 -3
  139. package/dist/{chunk-XTQ7R2PA.js → chunk-BV2IET6B.js} +73 -17
  140. package/dist/{chunk-4F5CNI65.js → chunk-C5ISP5FO.js} +2 -2
  141. package/dist/{chunk-NPWNXJ3U.js → chunk-CH7BUBP3.js} +7 -7
  142. package/dist/{chunk-X5Q66EOG.js → chunk-CHIUS5QB.js} +16 -16
  143. package/dist/{chunk-ZG62LIK3.js → chunk-CIPDQRFO.js} +1 -1
  144. package/dist/{chunk-4PYIRIU6.js → chunk-CM7N5MBY.js} +5 -5
  145. package/dist/{chunk-L5YDAFUH.js → chunk-CYCIX7AW.js} +5 -5
  146. package/dist/{chunk-76YRJKKF.js → chunk-D3LXVAIQ.js} +28 -16
  147. package/dist/{chunk-2GNAHBRD.js → chunk-DMUOTCDN.js} +1 -1
  148. package/dist/{chunk-QMUFSRQX.js → chunk-DN3ZR3UE.js} +1 -1
  149. package/dist/{chunk-V3WLC5TJ.js → chunk-DRTJCG6B.js} +1 -1
  150. package/dist/{chunk-275WHBEN.js → chunk-DYVLEMKS.js} +1 -1
  151. package/dist/{chunk-O34F5EP5.js → chunk-DZN7SDY2.js} +1 -1
  152. package/dist/{chunk-ZDIXMHY7.js → chunk-E3ZM32LF.js} +8 -8
  153. package/dist/{chunk-N2HXR5MB.js → chunk-E7C2WNR5.js} +4 -4
  154. package/dist/{chunk-VVGXWVZU.js → chunk-EGOEB42T.js} +3 -3
  155. package/dist/{chunk-QV5CQLQH.js → chunk-EIOGV75A.js} +2 -2
  156. package/dist/{chunk-ZY4IGUOS.js → chunk-ELCRJGCH.js} +3 -3
  157. package/dist/{chunk-5QCIWWFA.js → chunk-ELEGH4DX.js} +130 -14
  158. package/dist/{chunk-S7CTCPSW.js → chunk-EOTZSAQL.js} +1 -1
  159. package/dist/{chunk-PPLQ4ECD.js → chunk-EUGEFBGV.js} +3 -3
  160. package/dist/{chunk-UFNCL6MS.js → chunk-EYMFVITZ.js} +1 -1
  161. package/dist/{chunk-F6H7GP2O.js → chunk-F4BBMIPG.js} +3 -3
  162. package/dist/{chunk-FNEZ4BWT.js → chunk-FEU6QEEL.js} +1 -1
  163. package/dist/{chunk-JKOC2L6P.js → chunk-FHIFTSPL.js} +1 -1
  164. package/dist/{chunk-4RTKETV3.js → chunk-FMIYFHLE.js} +3 -3
  165. package/dist/{chunk-TK544DEW.js → chunk-FVLNNNH6.js} +3 -3
  166. package/dist/{chunk-AY2U4NZ5.js → chunk-GL47M7NY.js} +85 -17
  167. package/dist/{chunk-DN24VTS5.js → chunk-GSLFH4AI.js} +25 -13
  168. package/dist/{chunk-CHO5SNWR.js → chunk-HA63SH5W.js} +1 -1
  169. package/dist/{chunk-4IK2K3B3.js → chunk-HME6ITKV.js} +1 -1
  170. package/dist/{chunk-H2T6TFJZ.js → chunk-HU3VD4MQ.js} +2 -2
  171. package/dist/{chunk-ZW32RI66.js → chunk-I5XIW2BP.js} +49 -11
  172. package/dist/{chunk-3CL2I3RG.js → chunk-IGJMS7C5.js} +2 -2
  173. package/dist/{chunk-BRPO6GOH.js → chunk-JA3Y5TV6.js} +2 -2
  174. package/dist/{chunk-SFFXAPYK.js → chunk-JDDM6C57.js} +1 -1
  175. package/dist/{chunk-W4EGAQXW.js → chunk-JFJP6ATJ.js} +2 -2
  176. package/dist/{chunk-ENCUOZXX.js → chunk-JFTUAV4J.js} +1 -1
  177. package/dist/{chunk-3UOQH2DJ.js → chunk-JJTPPAZY.js} +2568 -345
  178. package/dist/{chunk-A6QBAUJH.js → chunk-KILR4FBR.js} +4 -4
  179. package/dist/{chunk-CGFGNHSP.js → chunk-KTKIFXIP.js} +1 -1
  180. package/dist/{chunk-NCJBPXGM.js → chunk-KXYKSLW4.js} +108 -24
  181. package/dist/{chunk-3MUARHPO.js → chunk-L3VUW5M4.js} +1 -1
  182. package/dist/{chunk-GZOG2MAX.js → chunk-L5EPGGDP.js} +1 -1
  183. package/dist/{chunk-T7VSKWES.js → chunk-L63V25HS.js} +6 -5
  184. package/dist/{chunk-R4VNGRKU.js → chunk-LFBLQE2P.js} +1 -1
  185. package/dist/{chunk-W5MCOZTW.js → chunk-LFUBEHFW.js} +12 -2
  186. package/dist/{chunk-AIBIEP4R.js → chunk-LKTN22L6.js} +61 -25
  187. package/dist/{chunk-3KFQCFQB.js → chunk-LR5O2XWZ.js} +5 -5
  188. package/dist/{chunk-VUOAPKPI.js → chunk-LSNBTGW4.js} +1 -1
  189. package/dist/{chunk-P5U3GAWU.js → chunk-MB47DRF5.js} +2 -2
  190. package/dist/{chunk-HZESME3B.js → chunk-MC4IM2CC.js} +16 -13
  191. package/dist/{chunk-ZKJ5S23O.js → chunk-MFAOAIUE.js} +12 -9
  192. package/dist/{chunk-62J64CHO.js → chunk-MKM6D7JM.js} +26 -7
  193. package/dist/{chunk-ZIG7VPJV.js → chunk-MMS2HBRT.js} +15 -3
  194. package/dist/{chunk-FHSV4BSW.js → chunk-MOANZQXF.js} +12 -4
  195. package/dist/{chunk-RTZZBWQC.js → chunk-MPZ2AVNS.js} +16 -5
  196. package/dist/{chunk-AZ6KLVDX.js → chunk-MROSARM5.js} +2 -2
  197. package/dist/{chunk-RV2FFCDS.js → chunk-MUAWCFW6.js} +6 -2
  198. package/dist/{chunk-K4ESASPL.js → chunk-MUCNYSJP.js} +1 -1
  199. package/dist/{chunk-5QGKMP6T.js → chunk-NF5FOSLD.js} +1 -1
  200. package/dist/{chunk-CKOJP7JI.js → chunk-NKEFYE4R.js} +2 -2
  201. package/dist/{chunk-3SXHEQ7X.js → chunk-NPXIS2RY.js} +1 -1
  202. package/dist/{chunk-A5USSF66.js → chunk-NVFNADTX.js} +12 -8
  203. package/dist/{chunk-VVUO3RJS.js → chunk-NYLJQ2M2.js} +4 -4
  204. package/dist/{chunk-HIVOLPLD.js → chunk-OAFENIHN.js} +1 -1
  205. package/dist/{chunk-PMZHZQ6K.js → chunk-OBBO6EJR.js} +1 -1
  206. package/dist/{chunk-SS6EMDLL.js → chunk-P2UY34XE.js} +6 -6
  207. package/dist/{chunk-Y4T5IUEP.js → chunk-P3QQ52QK.js} +2 -2
  208. package/dist/{chunk-GGEKMY6G.js → chunk-P3UX5EH4.js} +4 -4
  209. package/dist/{chunk-F7IRZU5G.js → chunk-P4PIZOL2.js} +3 -3
  210. package/dist/{chunk-GEPFKUUR.js → chunk-P4XLIPB7.js} +1 -1
  211. package/dist/{chunk-GPUOUUHA.js → chunk-PCV52RYM.js} +1 -1
  212. package/dist/{chunk-XR3773KZ.js → chunk-PL4CFSQ7.js} +1 -1
  213. package/dist/{chunk-LLZNPOGB.js → chunk-PLII76NJ.js} +58 -0
  214. package/dist/{chunk-FT5PPV2C.js → chunk-PRDDPQLC.js} +5 -5
  215. package/dist/{chunk-BZ546I4Q.js → chunk-PUBA5B4M.js} +24 -0
  216. package/dist/{chunk-2TGJ5XCV.js → chunk-PWC3C5ME.js} +4 -4
  217. package/dist/{chunk-A4YCLD3L.js → chunk-QFAFKEB5.js} +40 -4
  218. package/dist/{chunk-CL4J4757.js → chunk-QH5ZQ5SJ.js} +26 -0
  219. package/dist/{chunk-UJWZYK46.js → chunk-QNZ4562V.js} +1 -1
  220. package/dist/{chunk-IPHLUZ37.js → chunk-QPTSA4PP.js} +2 -2
  221. package/dist/{chunk-O3YJTHWI.js → chunk-R5E7WNAC.js} +3 -3
  222. package/dist/{chunk-V3M4LJRA.js → chunk-RB3J2WYQ.js} +1 -1
  223. package/dist/{chunk-IUCWOI4Y.js → chunk-RDWIKDMY.js} +237 -11
  224. package/dist/{chunk-ENN6DY4T.js → chunk-RVO5O5SR.js} +46 -21
  225. package/dist/{chunk-LY4AXCYJ.js → chunk-RZN2LEAK.js} +6 -6
  226. package/dist/{chunk-2YIB75UQ.js → chunk-S26CV7BE.js} +57 -13
  227. package/dist/{chunk-XC36HYP6.js → chunk-SDYWZRPN.js} +1 -1
  228. package/dist/{chunk-PHBU4LGO.js → chunk-SNHYZYGZ.js} +1 -1
  229. package/dist/{chunk-4KTTBKWQ.js → chunk-T5FEAQES.js} +1 -1
  230. package/dist/{chunk-XU57KFD6.js → chunk-T5SM4RXY.js} +5 -1
  231. package/dist/{chunk-KUV5VBAO.js → chunk-TKAU7IJ2.js} +1 -1
  232. package/dist/{chunk-KBR5LIWD.js → chunk-TKS5GMYA.js} +1 -1
  233. package/dist/{chunk-5DFE2NAF.js → chunk-TNS63ATU.js} +96 -22
  234. package/dist/{chunk-RFPMXR6B.js → chunk-U4GMOT4M.js} +1 -1
  235. package/dist/{chunk-CO5ZVE3D.js → chunk-UOPCVFVR.js} +17 -17
  236. package/dist/{chunk-22LNFCDF.js → chunk-UX2EO653.js} +1 -1
  237. package/dist/{chunk-LGC6TBA3.js → chunk-UXN4BICC.js} +2 -2
  238. package/dist/{chunk-7J5X4AK7.js → chunk-VF2KRROX.js} +1 -1
  239. package/dist/{chunk-7THUQU44.js → chunk-VF3BZOZK.js} +5 -2
  240. package/dist/{chunk-M2B35MUK.js → chunk-VHHX4UCP.js} +1 -1
  241. package/dist/{chunk-AZBJXATK.js → chunk-VJEJ7JNB.js} +1 -1
  242. package/dist/{chunk-4TRVALTR.js → chunk-VLBHZ6TF.js} +2 -2
  243. package/dist/{chunk-7BMSBACY.js → chunk-VOVFUKEB.js} +5 -5
  244. package/dist/{chunk-MDPGZS6C.js → chunk-VROK4X2L.js} +1 -1
  245. package/dist/{chunk-J6ABJDZ4.js → chunk-W3KPQE7H.js} +4 -4
  246. package/dist/{chunk-3Q7NEDHB.js → chunk-W6BZ4UGA.js} +48 -9
  247. package/dist/{chunk-IZ3IFLL2.js → chunk-XEBKIWI7.js} +14 -14
  248. package/dist/{chunk-UZDF6FLJ.js → chunk-XHU3KOKJ.js} +1 -1
  249. package/dist/{chunk-PA37MXV5.js → chunk-XSUALA32.js} +2 -2
  250. package/dist/{chunk-GR5WJPKF.js → chunk-XUZK23V7.js} +11 -6
  251. package/dist/{chunk-IDB3EZLW.js → chunk-YLB365YX.js} +148 -5
  252. package/dist/{chunk-JDQ7JU3A.js → chunk-YLFCH3VA.js} +24 -16
  253. package/dist/{chunk-ZJJL2Z23.js → chunk-YRQ26MNP.js} +4 -4
  254. package/dist/chunk-YRUZK2QA.js +35 -0
  255. package/dist/{chunk-7HLJ4BSF.js → chunk-ZAEUEDTN.js} +2 -2
  256. package/dist/{chunk-NY74W3S4.js → chunk-ZBPZDADW.js} +313 -43
  257. package/dist/{chunk-ZLPS3GR7.js → chunk-ZJQ56DZZ.js} +42 -1
  258. package/dist/{chunk-VMZZTFXT.js → chunk-ZOTTYCP5.js} +4 -4
  259. package/dist/{chunk-MP4ST7RO.js → chunk-ZPP63JSQ.js} +51 -11
  260. package/dist/{chunk-N4J5WHO2.js → chunk-ZT4LFTUJ.js} +1 -1
  261. package/dist/{cleanup-graph-garbage-GE2DYOTB.js → cleanup-graph-garbage-VQAJ2RBT.js} +11 -11
  262. package/dist/{cloud-sync-command-T6KF3ARK.js → cloud-sync-command-J7NEFUY7.js} +2 -2
  263. package/dist/{cloud-sync-db-init-RSHCCY74.js → cloud-sync-db-init-KWEMNMGA.js} +1 -1
  264. package/dist/{cloud-sync-shutdown-6IVCSLM5.js → cloud-sync-shutdown-P63AUTUI.js} +5 -5
  265. package/dist/{co-activation-AF7RCJPX.js → co-activation-7IHRPBZN.js} +5 -5
  266. package/dist/{co-occurrence-DMOOGBVV.js → co-occurrence-R5AG4OAU.js} +9 -9
  267. package/dist/{code-context-index-LIDOFKOR.js → code-context-index-WFLLZBVB.js} +10 -9
  268. package/dist/{code-context-watcher-4F7K2N3U.js → code-context-watcher-3QAPHO7N.js} +10 -9
  269. package/dist/{codex-consolidation-SH4UKFBQ.js → codex-consolidation-ONZ2AQFX.js} +2 -2
  270. package/dist/{consent-passphrase-WV7MZPMO.js → consent-passphrase-5ZBDJ5G7.js} +2 -2
  271. package/dist/{content-extractor-DJM5EUDA.js → content-extractor-ZLXC6GNR.js} +2 -2
  272. package/dist/{conversation-entity-extractor-4UG7BKWL.js → conversation-entity-extractor-7FRKLLBD.js} +4 -4
  273. package/dist/{conversation-wiki-populator-OS4C6W54.js → conversation-wiki-populator-YAOVCUGO.js} +1 -1
  274. package/dist/{crdt-sync-VL4KXZB7.js → crdt-sync-IFRZOEIS.js} +4 -4
  275. package/dist/{crm-webhook-IDBJ7X5Y.js → crm-webhook-L2S63ASV.js} +2 -2
  276. package/dist/{cto-delegation-gate-4FLSHSLO.js → cto-delegation-gate-3WU7OHX7.js} +29 -28
  277. package/dist/{daemon-auth-PNKHERLV.js → daemon-auth-OWLFYEFR.js} +3 -3
  278. package/dist/{daemon-orchestration-HFCB6OK4.js → daemon-orchestration-3VQYKLOR.js} +33 -32
  279. package/dist/{daemon-ready-BN6EZLTQ.js → daemon-ready-VZ6ZHA2C.js} +1 -1
  280. package/dist/{db-integrity-events-GYGANKZV.js → db-integrity-events-7NKWS5MT.js} +3 -3
  281. package/dist/{db-restore-events-G6NOQOVE.js → db-restore-events-XYL6CGPC.js} +2 -2
  282. package/dist/{destructive-data-guard-HHWUBIGS.js → destructive-data-guard-JDUJ2ULM.js} +58 -2
  283. package/dist/{dispatch-ack-X4DXUSKP.js → dispatch-ack-UYEAKON5.js} +2 -1
  284. package/dist/{doc-graph-extractor-E36PQUCS.js → doc-graph-extractor-YIR5E7OF.js} +9 -9
  285. package/dist/{documents-SCKKHDR7.js → documents-QEHPTYIY.js} +19 -18
  286. package/dist/{dreaming-Q26JBH56.js → dreaming-LNFE7DTN.js} +34 -33
  287. package/dist/{employee-boot-brief-XU6EI2EO.js → employee-boot-brief-ZTXDYNWM.js} +39 -38
  288. package/dist/{entity-boost-VNQLLR3Q.js → entity-boost-R5N6JWXD.js} +1 -1
  289. package/dist/{exe-drift-YZ6OIUAY.js → exe-drift-WYSJVZFO.js} +6 -6
  290. package/dist/{exe-export-HHRQMLSS.js → exe-export-GOLNAEAV.js} +20 -19
  291. package/dist/{exe-import-5XR4NQAB.js → exe-import-U4BSI6OH.js} +20 -19
  292. package/dist/{exe-key-5XOFVP3I.js → exe-key-V42G3NGO.js} +152 -130
  293. package/dist/{exe-org-TPAX4AAK.js → exe-org-U4GLQ6OP.js} +27 -27
  294. package/dist/{exe-snapshot-GIRP3XCJ.js → exe-snapshot-U7ONBYNY.js} +38 -37
  295. package/dist/{fast-db-init-MGY6VCLG.js → fast-db-init-W3NGKAEU.js} +1 -1
  296. package/dist/{founder-context-WD72OL2P.js → founder-context-ZSIBRVDM.js} +4 -4
  297. package/dist/{founder-monitor-envelope-XGYMHT4W.js → founder-monitor-envelope-L3IWZLFY.js} +7 -7
  298. package/dist/{fts-integrity-PLAL6NMG.js → fts-integrity-PHCKKOBC.js} +3 -3
  299. package/dist/gateway/index.js +23 -22
  300. package/dist/{gateway-client-VO3BRLV5.js → gateway-client-DJFCVIPT.js} +1 -1
  301. package/dist/{git-staleness-KGZABPP3.js → git-staleness-OF24QXFZ.js} +5 -5
  302. package/dist/{global-procedures-KOU6A5E5.js → global-procedures-WSIOWO43.js} +6 -6
  303. package/dist/{graph-auto-extract-OZNRDAHE.js → graph-auto-extract-IEVVN3L3.js} +9 -9
  304. package/dist/{graph-query-36K6VXFF.js → graph-query-JDZWAVCU.js} +1 -1
  305. package/dist/{graph-rag-TZLH3CTQ.js → graph-rag-BKAD2XQA.js} +4 -4
  306. package/dist/{hook-integrity-BWFFISJV.js → hook-integrity-TPWDGX2M.js} +3 -1
  307. package/dist/{hook-prefetch-MFUJRAIM.js → hook-prefetch-FD6VGJJA.js} +29 -28
  308. package/dist/hooks/bug-report-worker.js +34 -33
  309. package/dist/hooks/codex-stop-task-finalizer.js +36 -35
  310. package/dist/hooks/commit-complete.js +40 -36
  311. package/dist/hooks/error-recall.js +15 -15
  312. package/dist/hooks/exe-heartbeat-hook.js +8 -8
  313. package/dist/hooks/ingest-worker.js +21 -20
  314. package/dist/hooks/ingest.js +23 -23
  315. package/dist/hooks/instructions-loaded.js +10 -10
  316. package/dist/hooks/manifest.json +20 -20
  317. package/dist/hooks/notification.js +9 -9
  318. package/dist/hooks/post-compact.js +8 -8
  319. package/dist/hooks/post-tool-combined.js +15 -15
  320. package/dist/hooks/pre-compact.js +33 -32
  321. package/dist/hooks/pre-tool-use.js +2 -2
  322. package/dist/hooks/prompt-submit.js +52 -51
  323. package/dist/hooks/session-end.js +38 -37
  324. package/dist/hooks/session-start.js +25 -22
  325. package/dist/hooks/stop.js +40 -39
  326. package/dist/hooks/subagent-stop.js +36 -35
  327. package/dist/hooks/summary-worker.js +41 -40
  328. package/dist/index.js +43 -42
  329. package/dist/{inrun-inbox-DRKVDPLY.js → inrun-inbox-RGNFFGMU.js} +5 -0
  330. package/dist/{installer-RM4ASY7U.js → installer-NMOBSEZ2.js} +11 -11
  331. package/dist/{installer-IESPHXVH.js → installer-OTI5SA43.js} +11 -11
  332. package/dist/{installer-SQZRVD36.js → installer-SRJGE4GU.js} +11 -11
  333. package/dist/{intercom-queue-DGLAC224.js → intercom-queue-4FFXCBHO.js} +28 -27
  334. package/dist/{key-backup-status-LQPINQ3W.js → key-backup-status-6U7D5GOD.js} +2 -2
  335. package/dist/lib/agent-config.js +3 -3
  336. package/dist/lib/cloud-sync.js +28 -27
  337. package/dist/lib/config.js +4 -2
  338. package/dist/lib/consolidation.js +14 -12
  339. package/dist/lib/crypto.js +5 -3
  340. package/dist/lib/database.js +5 -5
  341. package/dist/lib/db-backup.js +11 -3
  342. package/dist/lib/db-daemon-client.js +11 -10
  343. package/dist/lib/db-write-worker.js +4 -4
  344. package/dist/lib/db.js +5 -5
  345. package/dist/lib/delivery-catalog.js +431 -0
  346. package/dist/lib/delivery-schemas.js +62 -0
  347. package/dist/lib/delivery-truth.js +1 -1
  348. package/dist/lib/device-registry.js +3 -3
  349. package/dist/lib/embed-worker.js +2 -2
  350. package/dist/lib/embedder.js +10 -9
  351. package/dist/lib/employee-templates.js +7 -7
  352. package/dist/lib/employees.js +5 -5
  353. package/dist/lib/exe-daemon-client.js +9 -8
  354. package/dist/lib/exe-daemon.js +186 -117
  355. package/dist/lib/hybrid-search.js +12 -12
  356. package/dist/lib/identity.js +5 -5
  357. package/dist/lib/keychain.js +13 -1
  358. package/dist/lib/license.js +8 -4
  359. package/dist/lib/messaging.js +39 -30
  360. package/dist/lib/post-tool-memory.js +9 -9
  361. package/dist/lib/registry-proxy.js +9 -1
  362. package/dist/lib/reminders.js +6 -6
  363. package/dist/lib/schedules.js +11 -11
  364. package/dist/lib/session-registry.js +7 -7
  365. package/dist/lib/skill-learning.js +20 -19
  366. package/dist/lib/status-brief.js +5 -4
  367. package/dist/lib/store.js +10 -10
  368. package/dist/lib/task-router.js +6 -6
  369. package/dist/lib/tasks.js +30 -29
  370. package/dist/lib/tmux-routing.js +28 -27
  371. package/dist/lib/tmux-status.js +3 -1
  372. package/dist/lib/token-spend.js +6 -6
  373. package/dist/lib/ws-client.js +1 -1
  374. package/dist/{license-gate-E6GTRYBA.js → license-gate-R4JWTWM4.js} +5 -5
  375. package/dist/{license-recheck-RBAO6Z2H.js → license-recheck-3MBJ4IJX.js} +1 -1
  376. package/dist/{license-sync-ZCZ2LIHK.js → license-sync-BVSG3WMW.js} +4 -4
  377. package/dist/local-secret-inventory-JWNBHZZ4.js +20 -0
  378. package/dist/mailbox-inbox-MTAT4MXX.js +13 -0
  379. package/dist/{mailbox-outbox-DNDDP2HW.js → mailbox-outbox-OY4IU6S4.js} +2 -1
  380. package/dist/mcp/register-tools.js +121 -120
  381. package/dist/mcp/server.js +123 -122
  382. package/dist/mcp/tools/complete-reminder.js +7 -7
  383. package/dist/mcp/tools/create-reminder.js +7 -7
  384. package/dist/mcp/tools/create-task.js +35 -32
  385. package/dist/mcp/tools/deactivate-behavior.js +22 -21
  386. package/dist/mcp/tools/list-reminders.js +7 -7
  387. package/dist/mcp/tools/list-tasks.js +33 -32
  388. package/dist/mcp/tools/send-message.js +32 -31
  389. package/dist/mcp/tools/update-task.js +31 -30
  390. package/dist/{mcp-child-registry-DVHYAHPW.js → mcp-child-registry-TIZERM7O.js} +5 -5
  391. package/dist/{mcp-health-B5EKRCZG.js → mcp-health-4ZHU67LM.js} +9 -3
  392. package/dist/{mcp-http-config-ME67QDOF.js → mcp-http-config-VUMSFWFH.js} +12 -12
  393. package/dist/{mcp-session-identity-DNG4ULAE.js → mcp-session-identity-DZHWEJRV.js} +28 -27
  394. package/dist/{memory-cards-WCISXY62.js → memory-cards-JVXTMSAT.js} +10 -10
  395. package/dist/{memory-graph-extractor-GXIK4QUF.js → memory-graph-extractor-PPBJMYFJ.js} +10 -10
  396. package/dist/{memory-poisoning-defense-25LZ5FJI.js → memory-poisoning-defense-K5Q74XQ4.js} +5 -5
  397. package/dist/{memory-pressure-watchdog-XGXI7WGE.js → memory-pressure-watchdog-YMJH5CSA.js} +29 -28
  398. package/dist/{memory-queue-YF7IDSFY.js → memory-queue-2MA67TAA.js} +3 -3
  399. package/dist/{memory-queue-client-QC2OTMJB.js → memory-queue-client-4G7HVRSX.js} +11 -10
  400. package/dist/{memory-reflection-GFGT44NT.js → memory-reflection-7BZWIHRE.js} +10 -10
  401. package/dist/{monitor-grants-Z2SEFE6E.js → monitor-grants-Q7X3MYQP.js} +6 -6
  402. package/dist/{monitor-identity-AEMHCVHV.js → monitor-identity-ZQB4IXEE.js} +2 -2
  403. package/dist/{notification-ledger-ETQBGRP7.js → notification-ledger-XRAXL5OI.js} +32 -29
  404. package/dist/{notifications-LPRCFJYY.js → notifications-JE3PX55X.js} +28 -27
  405. package/dist/{orchestration-events-T2GXV2NG.js → orchestration-events-JCQ5F5IJ.js} +6 -6
  406. package/dist/{orchestration-phase-T2WD45UA.js → orchestration-phase-QKTGQ2YT.js} +3 -3
  407. package/dist/{orchestrator-HY2IB3NA.js → orchestrator-X65INDTR.js} +30 -29
  408. package/dist/{org-brief-session-UWFCFEEB.js → org-brief-session-3PQ22UIX.js} +19 -18
  409. package/dist/{org-consent-policy-XXMST37J.js → org-consent-policy-VGELJ7K7.js} +7 -6
  410. package/dist/{org-join-72QKM7JR.js → org-join-6TO5ZYUZ.js} +12 -12
  411. package/dist/{org-key-admin-YCIAYP7V.js → org-key-admin-XHYVRRAZ.js} +12 -12
  412. package/dist/{org-key-pin-F7BQPI5P.js → org-key-pin-TTTYGTQL.js} +6 -6
  413. package/dist/{org-membership-JQSU4Z5P.js → org-membership-Y7T2BS57.js} +7 -7
  414. package/dist/{org-partner-config-PVJ45SLC.js → org-partner-config-OP4NEUNF.js} +10 -10
  415. package/dist/{org-partner-runtime-U4CTLWLC.js → org-partner-runtime-YNVUNT2R.js} +20 -19
  416. package/dist/{org-row-visibility-WUX4N3FX.js → org-row-visibility-JBBXNYXD.js} +1 -1
  417. package/dist/{pipeline-router-2RMBCBRM.js → pipeline-router-EIBB7QNG.js} +6 -6
  418. package/dist/{plan-limits-Z47XYEJR.js → plan-limits-MEWXYLEN.js} +8 -8
  419. package/dist/{postinstall-failure-O6TSSNJB.js → postinstall-failure-VETYYWEZ.js} +3 -3
  420. package/dist/{pre-tool-use-impl-JPE6XMRJ.js → pre-tool-use-impl-C6KJY22W.js} +60 -49
  421. package/dist/{project-boot-UFQDAFU5.js → project-boot-VEYFCCSL.js} +2 -2
  422. package/dist/{project-name-V4IREGHO.js → project-name-UYORSNGE.js} +6 -6
  423. package/dist/{projection-worker-HAD6H3VJ.js → projection-worker-WYFDWS57.js} +5 -5
  424. package/dist/{prospective-memory-KIF4JLFF.js → prospective-memory-E6XBQFJA.js} +5 -5
  425. package/dist/{push-notifications-GDKRTYXH.js → push-notifications-M7YU63FY.js} +29 -28
  426. package/dist/{reproject-worktree-memories-SG4BZJ3Z.js → reproject-worktree-memories-B5XMGJSD.js} +28 -27
  427. package/dist/{reranker-G2AZ67JP.js → reranker-SRA4BR7N.js} +3 -3
  428. package/dist/{retrieval-health-GBJRXTBZ.js → retrieval-health-P2JPZUPV.js} +4 -4
  429. package/dist/{review-polling-VUZPAAGT.js → review-polling-KQPN7IQE.js} +29 -28
  430. package/dist/runtime/index.js +37 -36
  431. package/dist/{session-events-BI6NIFIR.js → session-events-6LDDKKY3.js} +29 -28
  432. package/dist/{session-kill-telemetry-HPBDOPHT.js → session-kill-telemetry-5DSRGWCL.js} +29 -28
  433. package/dist/{session-mcp-config-WFZAH6R5.js → session-mcp-config-F7RCERUG.js} +3 -3
  434. package/dist/{session-scope-UB3HA5E7.js → session-scope-XG5R3P3D.js} +28 -27
  435. package/dist/{setup-wizard-6XULOT3L.js → setup-wizard-7QFLZIKT.js} +5 -5
  436. package/dist/{shard-manager-DYEJ6ETD.js → shard-manager-HHHHV2KZ.js} +3 -3
  437. package/dist/{skill-refinement-MKBQIWZ6.js → skill-refinement-I5RMAHSC.js} +6 -6
  438. package/dist/{stack-generate-manifest-7ODQ6W2O.js → stack-generate-manifest-AKMZ3AUX.js} +246 -13
  439. package/dist/stack-init-5VKL5PL5.js +136 -0
  440. package/dist/{stack-promote-3UKJBJSP.js → stack-promote-34CE2HHF.js} +7 -6
  441. package/dist/{stack-release-5CVXMJM5.js → stack-release-5PGWV5D4.js} +123 -12
  442. package/dist/{stack-update-Z53KG2P5.js → stack-update-ZQQ5YYPJ.js} +20 -5
  443. package/dist/{steward-gate-OKUYYIX6.js → steward-gate-AQJ6KT2C.js} +6 -6
  444. package/dist/{subagent-brief-injection-T2CVQLAS.js → subagent-brief-injection-3GU7YAWY.js} +50 -42
  445. package/dist/{subagent-spawn-ledger-E6U3OY6Z.js → subagent-spawn-ledger-52I66CLW.js} +3 -3
  446. package/dist/{supervisor-handoff-SGLEPOCY.js → supervisor-handoff-BWJW6CKZ.js} +4 -4
  447. package/dist/{support-inbox-WJIDCKJC.js → support-inbox-NY5TB3FN.js} +12 -12
  448. package/dist/{support-outbox-G2NG2U5K.js → support-outbox-KNI3FR3G.js} +3 -2
  449. package/dist/{task-enforcement-JL5ADPS6.js → task-enforcement-CAA6D2MH.js} +29 -28
  450. package/dist/{task-request-inbox-54BRRFHZ.js → task-request-inbox-QBZVU66E.js} +9 -6
  451. package/dist/{task-scope-OBPZBID5.js → task-scope-NHXB4ZRN.js} +32 -27
  452. package/dist/{tasks-crud-YBCPT7TY.js → tasks-crud-JHSWL5NM.js} +28 -27
  453. package/dist/{tasks-notify-CEEQSDJF.js → tasks-notify-7PBE4U7T.js} +29 -28
  454. package/dist/{tasks-review-JIEI656P.js → tasks-review-PPPVEE62.js} +28 -27
  455. package/dist/{telemetry-upload-ZZSEZR2U.js → telemetry-upload-YU2VRNHX.js} +10 -10
  456. package/dist/{token-budget-AUFMEMQ2.js → token-budget-QCMWKG3K.js} +6 -6
  457. package/dist/{tool-capability-index-6HLZU437.js → tool-capability-index-7AWQAJRP.js} +1 -1
  458. package/dist/{tool-gates-VXITVRFQ.js → tool-gates-5Q3RSQEG.js} +1 -1
  459. package/dist/{tool-gates-JWVSAYTW.js → tool-gates-QD26D2NE.js} +1 -1
  460. package/dist/{tool-telemetry-RHSEK2TO.js → tool-telemetry-LTOIC64I.js} +1 -1
  461. package/dist/tui/App.js +43 -42
  462. package/dist/{tui-data-PBZNN5YB.js → tui-data-NDBXD6U7.js} +32 -31
  463. package/dist/{update-support-V3ZCJR6L.js → update-support-BMJM4NG7.js} +27 -26
  464. package/dist/{whatsapp-NAM2CRVQ.js → whatsapp-QQLDAHUX.js} +2 -2
  465. package/dist/{wiki-acl-NUBAPLCD.js → wiki-acl-W6WDCVCP.js} +1 -1
  466. package/dist/{work-claims-Q2NU6JON.js → work-claims-6DM32MGO.js} +6 -6
  467. package/dist/{work-state-heartbeat-HAQRV3RK.js → work-state-heartbeat-HG7D4AWJ.js} +1 -1
  468. package/dist/{worker-gate-NUUSQMBT.js → worker-gate-FTMW7GBB.js} +3 -3
  469. package/dist/{workflow-engine-GEWPU5YR.js → workflow-engine-ZWC6CCXE.js} +2 -2
  470. package/dist/{worktree-C7LFMRKW.js → worktree-EMQCPGFE.js} +7 -7
  471. package/dist/{worktree-ownership-guard-4LKMW6PW.js → worktree-ownership-guard-O6JQF2CL.js} +2 -2
  472. package/dist/{worktree-sweep-SYF62ANH.js → worktree-sweep-XVUJZBXV.js} +8 -8
  473. package/package.json +23 -7
  474. package/release-notes.json +39 -12
  475. package/stack.release.json +4 -4
  476. package/dist/mailbox-inbox-XE72D3AX.js +0 -10
  477. /package/dist/{chunk-QIEYJ4KZ.js → chunk-2KY7WZZF.js} +0 -0
  478. /package/dist/{chunk-T3667X2B.js → chunk-2Q2CD6CD.js} +0 -0
  479. /package/dist/{chunk-JZJZYKMW.js → chunk-AJK2PVQW.js} +0 -0
  480. /package/dist/{chunk-ZEGEFBZV.js → chunk-AWWDKF22.js} +0 -0
  481. /package/dist/{chunk-QNTKRGJ6.js → chunk-GIRD7O5X.js} +0 -0
  482. /package/dist/{chunk-FWA4MYTA.js → chunk-JRIH6I7D.js} +0 -0
  483. /package/dist/{chunk-C7H2D7LX.js → chunk-M4XY4JRK.js} +0 -0
  484. /package/dist/{chunk-Q3DN5J6F.js → chunk-P2VVMGMI.js} +0 -0
  485. /package/dist/{chunk-BRAIWGMF.js → chunk-Q46NYJ77.js} +0 -0
  486. /package/dist/{chunk-3LQ2N4H7.js → chunk-U2D6PJ5T.js} +0 -0
  487. /package/dist/{chunk-3O6OGZL3.js → chunk-XDVOGDBC.js} +0 -0
  488. /package/dist/{core-memory-UNCAPGD4.js → core-memory-O6D5UC3T.js} +0 -0
  489. /package/dist/{hook-tamper-log-Z4PWC7N4.js → hook-tamper-log-ARGWCXKJ.js} +0 -0
  490. /package/dist/{memory-isolation-ALPJWLR5.js → memory-isolation-EBFFC6HF.js} +0 -0
  491. /package/dist/{oauth-server-AC2KB7NB.js → oauth-server-ZKBUHDFI.js} +0 -0
  492. /package/dist/{webhook-pipe-W2FVXY7M.js → webhook-pipe-PXH5MBRM.js} +0 -0
  493. /package/dist/{wiki-client-W65IOSWF.js → wiki-client-DD2NVWK2.js} +0 -0
@@ -0,0 +1,545 @@
1
+ import {
2
+ parseInstant
3
+ } from "./chunk-YRUZK2QA.js";
4
+
5
+ // src/lib/delivery-schemas.ts
6
+ import { z } from "zod";
7
+ var DeliverySchemaError = class extends Error {
8
+ code;
9
+ path;
10
+ detail;
11
+ constructor(code, path, detail) {
12
+ super(`[${code}] ${path}: ${detail}`);
13
+ this.name = "DeliverySchemaError";
14
+ this.code = code;
15
+ this.path = path;
16
+ this.detail = detail;
17
+ }
18
+ };
19
+ function assertNoDuplicateKeys(raw) {
20
+ const stack = [];
21
+ let i = 0;
22
+ while (i < raw.length) {
23
+ const c = raw[i];
24
+ if (c === '"') {
25
+ const start = i;
26
+ i += 1;
27
+ while (i < raw.length) {
28
+ if (raw[i] === "\\") {
29
+ i += 2;
30
+ continue;
31
+ }
32
+ if (raw[i] === '"') break;
33
+ i += 1;
34
+ }
35
+ const literal = raw.slice(start, i + 1);
36
+ i += 1;
37
+ const top = stack[stack.length - 1];
38
+ if (top?.isObject && top.expectKey) {
39
+ let key;
40
+ try {
41
+ key = JSON.parse(literal);
42
+ } catch {
43
+ return;
44
+ }
45
+ if (top.keys.has(key)) {
46
+ throw new DeliverySchemaError(
47
+ "duplicate_key",
48
+ `$.${key}`,
49
+ `key "${key}" appears more than once in the same object; JSON.parse would keep only the last value`
50
+ );
51
+ }
52
+ top.keys.add(key);
53
+ top.expectKey = false;
54
+ }
55
+ continue;
56
+ }
57
+ if (c === "{") {
58
+ stack.push({ isObject: true, keys: /* @__PURE__ */ new Set(), expectKey: true });
59
+ } else if (c === "[") {
60
+ stack.push({ isObject: false, keys: /* @__PURE__ */ new Set(), expectKey: false });
61
+ } else if (c === "}" || c === "]") {
62
+ stack.pop();
63
+ } else if (c === ",") {
64
+ const top = stack[stack.length - 1];
65
+ if (top?.isObject) top.expectKey = true;
66
+ }
67
+ i += 1;
68
+ }
69
+ }
70
+ function parseJsonStrict(raw) {
71
+ let value;
72
+ try {
73
+ value = JSON.parse(raw);
74
+ } catch (e) {
75
+ throw new DeliverySchemaError(
76
+ "json_parse",
77
+ "$",
78
+ e instanceof Error ? e.message : String(e)
79
+ );
80
+ }
81
+ assertNoDuplicateKeys(raw);
82
+ return value;
83
+ }
84
+ var GIT_SHA_RE = /^[0-9a-f]{40}$/;
85
+ var OCI_DIGEST_RE = /^sha256:[0-9a-f]{64}$/;
86
+ var NPM_INTEGRITY_RE = /^sha512-[A-Za-z0-9+/]{86}==$/;
87
+ var RELEASE_TAG_RE = /^askexe-v(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)$/;
88
+ var SEMVER_RE = /^(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)$/;
89
+ var UTC_TIMESTAMP_RE = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d{1,3})?Z$/;
90
+ var PLATFORM_RE = /^[a-z0-9]+\/[a-z0-9]+(\/v[0-9]+)?$/;
91
+ var SHA256_HEX_RE = /^[0-9a-f]{64}$/;
92
+ var gitSha = z.string().regex(GIT_SHA_RE, "must be a lowercase 40-hex commit SHA");
93
+ var ociDigest = z.string().regex(OCI_DIGEST_RE, "must be sha256:<64 lowercase hex>");
94
+ var npmIntegrity = z.string().regex(NPM_INTEGRITY_RE, "must be an npm SHA-512 integrity string");
95
+ var releaseTag = z.string().regex(RELEASE_TAG_RE, "must be askexe-vMAJOR.MINOR.PATCH");
96
+ var semver = z.string().regex(SEMVER_RE, "must be MAJOR.MINOR.PATCH");
97
+ function isRealUtcInstant(v) {
98
+ if (!UTC_TIMESTAMP_RE.test(v)) return false;
99
+ const ms = Date.parse(v);
100
+ if (!Number.isFinite(ms)) return false;
101
+ return new Date(ms).toISOString().slice(0, 19) === v.slice(0, 19);
102
+ }
103
+ var utcTimestamp = z.string().refine(isRealUtcInstant, "must be a real ISO-8601 UTC instant ending in Z");
104
+ var platform = z.string().regex(PLATFORM_RE, "must be an OCI platform string, e.g. linux/amd64");
105
+ var sha256Hex = z.string().regex(SHA256_HEX_RE, "must be 64 lowercase hex characters");
106
+ var nonEmpty = z.string().min(1);
107
+ var repositoryName = z.string().regex(/^[A-Za-z0-9._-]+\/[A-Za-z0-9._-]+$/);
108
+ var CHANNELS = ["canary", "stable"];
109
+ var channel = z.enum(CHANNELS);
110
+ var RELEASE_STATES = [
111
+ "INTENT",
112
+ "BUILDING",
113
+ "CANDIDATE",
114
+ "VERIFIED",
115
+ "RELEASED",
116
+ "PROPOSED",
117
+ "SIGNED",
118
+ "PUBLISHED",
119
+ "DEPLOYED",
120
+ "VERIFIED_DEPLOYMENT",
121
+ "BLOCKED",
122
+ "ABANDONED",
123
+ "SUPERSEDED_BY"
124
+ ];
125
+ var ReleaseStateSchema = z.enum(RELEASE_STATES);
126
+ var RECOVERABLE_TERMINAL_STATES = ["BLOCKED"];
127
+ function isRecoverableTerminal(state) {
128
+ return RECOVERABLE_TERMINAL_STATES.includes(state);
129
+ }
130
+ var SCAN_RESULTS = ["pass", "policy_fail", "engine_error", "stale_database"];
131
+ var ScanEvidenceSchema = z.strictObject({
132
+ engine: nonEmpty,
133
+ engineVersion: nonEmpty,
134
+ databaseVersion: nonEmpty,
135
+ reportSha256: sha256Hex,
136
+ /**
137
+ * WHAT was scanned, named by the same identity the artifact is published
138
+ * under. An OCI digest for an image, an SHA-512 integrity for an npm tarball,
139
+ * a SHA-256 for a binary — because an exe-os release is npm AND images, and a
140
+ * contract that can only express "scanned this image digest" cannot record
141
+ * that the tarball was scanned at all.
142
+ *
143
+ * The descriptor refines this further: it must match an artifact THIS release
144
+ * actually ships. A scan of bytes we do not publish is not evidence.
145
+ */
146
+ scannedDigest: z.union([ociDigest, npmIntegrity, sha256Hex]),
147
+ result: z.enum(SCAN_RESULTS),
148
+ completedAt: utcTimestamp
149
+ });
150
+ var NOT_APPLICABLE_CLASSIFICATIONS = [
151
+ "documentation_only",
152
+ "paths_not_affected",
153
+ "artifact_not_produced"
154
+ ];
155
+ var PassedCheckSchema = z.strictObject({
156
+ name: nonEmpty,
157
+ conclusion: z.literal("success"),
158
+ headSha: gitSha
159
+ });
160
+ var NotApplicableCheckSchema = z.strictObject({
161
+ name: nonEmpty,
162
+ conclusion: z.literal("skipped"),
163
+ headSha: gitSha,
164
+ /** Mandatory. A skip with no accountable classification is not evidence. */
165
+ notApplicable: z.strictObject({
166
+ classification: z.enum(NOT_APPLICABLE_CLASSIFICATIONS),
167
+ /** Free text for the human who has to audit this later. */
168
+ reason: nonEmpty,
169
+ /** The role accountable for the classification. Not a department. */
170
+ approvedBy: nonEmpty
171
+ })
172
+ });
173
+ var RequiredCheckSchema = z.discriminatedUnion("conclusion", [
174
+ PassedCheckSchema,
175
+ NotApplicableCheckSchema
176
+ ]);
177
+ var EvidenceSchema = z.strictObject({
178
+ requiredChecks: z.array(RequiredCheckSchema).min(1),
179
+ scans: z.array(ScanEvidenceSchema).min(1),
180
+ identityReportSha256: sha256Hex,
181
+ smokeReportSha256: sha256Hex
182
+ });
183
+ var ReferenceSchema = z.strictObject({
184
+ digest: ociDigest,
185
+ mediaType: nonEmpty
186
+ });
187
+ var PlatformDigestSchema = z.strictObject({
188
+ platform,
189
+ digest: ociDigest
190
+ });
191
+ var OciImageArtifactSchema = z.strictObject({
192
+ componentId: nonEmpty,
193
+ type: z.literal("oci-image"),
194
+ registry: nonEmpty,
195
+ repositoryPath: nonEmpty,
196
+ versionAlias: nonEmpty,
197
+ digest: ociDigest,
198
+ mediaType: nonEmpty,
199
+ platforms: z.array(PlatformDigestSchema).min(1),
200
+ sbom: ReferenceSchema.optional(),
201
+ provenance: ReferenceSchema.optional()
202
+ });
203
+ var NpmPackageArtifactSchema = z.strictObject({
204
+ componentId: nonEmpty,
205
+ type: z.literal("npm-package"),
206
+ registry: nonEmpty,
207
+ packageName: nonEmpty,
208
+ versionAlias: nonEmpty,
209
+ integrity: npmIntegrity,
210
+ provenance: ReferenceSchema.optional()
211
+ });
212
+ var BinaryArtifactSchema = z.strictObject({
213
+ componentId: nonEmpty,
214
+ type: z.literal("binary"),
215
+ releaseAsset: nonEmpty,
216
+ versionAlias: nonEmpty,
217
+ sha256: sha256Hex,
218
+ platform,
219
+ provenance: ReferenceSchema.optional()
220
+ });
221
+ var DesktopBundleArtifactSchema = z.strictObject({
222
+ componentId: nonEmpty,
223
+ type: z.literal("desktop-bundle"),
224
+ releaseAsset: nonEmpty,
225
+ versionAlias: nonEmpty,
226
+ sha256: sha256Hex,
227
+ platform,
228
+ signed: z.boolean(),
229
+ provenance: ReferenceSchema.optional()
230
+ });
231
+ var ArtifactSchema = z.discriminatedUnion("type", [
232
+ OciImageArtifactSchema,
233
+ NpmPackageArtifactSchema,
234
+ BinaryArtifactSchema,
235
+ DesktopBundleArtifactSchema
236
+ ]);
237
+ var BuildInputsSchema = z.strictObject({
238
+ toolchain: z.record(z.string(), nonEmpty),
239
+ baseImages: z.array(z.strictObject({ ref: nonEmpty, digest: ociDigest })),
240
+ lockfiles: z.array(z.strictObject({ path: nonEmpty, sha256: sha256Hex })),
241
+ /**
242
+ * The version injected into the build workspace, plus the revision of the
243
+ * transformation that injected it. Recorded so a released artifact's version
244
+ * is traceable WITHOUT a bump-only commit mutating the tagged source tree.
245
+ */
246
+ generatedVersion: z.strictObject({
247
+ version: semver,
248
+ transformationRevision: gitSha
249
+ })
250
+ });
251
+ var ROLLBACK_CLASSES = ["safe", "forward_only", "irreversible"];
252
+ var CompatibilitySchema = z.strictObject({
253
+ updaterFloor: semver,
254
+ apiRequirements: z.array(z.strictObject({ name: nonEmpty, range: nonEmpty })),
255
+ migrationIds: z.array(nonEmpty),
256
+ rollback: z.enum(ROLLBACK_CLASSES)
257
+ });
258
+ var WorkflowIdentitySchema = z.strictObject({
259
+ repository: repositoryName,
260
+ path: nonEmpty,
261
+ /** The FULL 40-char commit of the trusted reusable workflow — never `@v1`. */
262
+ workflowSha: gitSha,
263
+ runId: nonEmpty,
264
+ attempt: z.number().int().min(1),
265
+ event: nonEmpty,
266
+ evaluatedSourceSha: gitSha
267
+ });
268
+ var DESCRIPTOR_SCHEMA_VERSION = 1;
269
+ var ReleaseDescriptorSchema = z.strictObject({
270
+ schemaVersion: z.literal(DESCRIPTOR_SCHEMA_VERSION),
271
+ /** Full commit SHA of the trusted contract this release was produced under. */
272
+ contractRevision: gitSha,
273
+ /** Numeric GitHub repository ID — survives rename and transfer. */
274
+ repositoryId: z.number().int().positive(),
275
+ repository: repositoryName,
276
+ sourceSha: gitSha,
277
+ sourceTree: gitSha,
278
+ tag: releaseTag,
279
+ version: semver,
280
+ channel,
281
+ intentId: nonEmpty,
282
+ workflow: WorkflowIdentitySchema,
283
+ artifacts: z.array(ArtifactSchema).min(1),
284
+ buildInputs: BuildInputsSchema,
285
+ compatibility: CompatibilitySchema,
286
+ evidence: EvidenceSchema
287
+ }).superRefine((d, ctx) => {
288
+ if (d.tag !== `askexe-v${d.version}`) {
289
+ ctx.addIssue({
290
+ code: "custom",
291
+ path: ["version"],
292
+ message: `version "${d.version}" does not match tag "${d.tag}"`
293
+ });
294
+ }
295
+ if (d.workflow.evaluatedSourceSha !== d.sourceSha) {
296
+ ctx.addIssue({
297
+ code: "custom",
298
+ path: ["workflow", "evaluatedSourceSha"],
299
+ message: "workflow evaluated a different source SHA than the descriptor claims"
300
+ });
301
+ }
302
+ if (d.buildInputs.generatedVersion.version !== d.version) {
303
+ ctx.addIssue({
304
+ code: "custom",
305
+ path: ["buildInputs", "generatedVersion", "version"],
306
+ message: "generated build version does not match the released version"
307
+ });
308
+ }
309
+ const seen = /* @__PURE__ */ new Set();
310
+ d.artifacts.forEach((a, i) => {
311
+ if (seen.has(a.componentId)) {
312
+ ctx.addIssue({
313
+ code: "custom",
314
+ path: ["artifacts", i, "componentId"],
315
+ message: `duplicate componentId "${a.componentId}"`
316
+ });
317
+ }
318
+ seen.add(a.componentId);
319
+ const expectedAlias = a.type === "oci-image" ? d.tag : d.version;
320
+ if (a.versionAlias !== expectedAlias) {
321
+ ctx.addIssue({
322
+ code: "custom",
323
+ path: ["artifacts", i, "versionAlias"],
324
+ message: `versionAlias "${a.versionAlias}" must be "${expectedAlias}" for a ${a.type} artifact of ${d.tag}`
325
+ });
326
+ }
327
+ });
328
+ d.evidence.requiredChecks.forEach((c, i) => {
329
+ if (c.headSha !== d.sourceSha) {
330
+ ctx.addIssue({
331
+ code: "custom",
332
+ path: ["evidence", "requiredChecks", i, "headSha"],
333
+ message: `check "${c.name}" was evaluated on ${c.headSha}, not on the released source ${d.sourceSha}`
334
+ });
335
+ }
336
+ });
337
+ const artifactDigests = new Set(
338
+ d.artifacts.flatMap((a) => {
339
+ if (a.type === "oci-image") return [a.digest, ...a.platforms.map((p) => p.digest)];
340
+ if (a.type === "npm-package") return [a.integrity];
341
+ return [a.sha256];
342
+ })
343
+ );
344
+ d.evidence.scans.forEach((scan, i) => {
345
+ if (!artifactDigests.has(scan.scannedDigest)) {
346
+ ctx.addIssue({
347
+ code: "custom",
348
+ path: ["evidence", "scans", i, "scannedDigest"],
349
+ message: `scan targeted ${scan.scannedDigest}, which is not an artifact digest of this release`
350
+ });
351
+ }
352
+ });
353
+ });
354
+ var ReleaseIntentSchema = z.strictObject({
355
+ intentId: nonEmpty,
356
+ repositoryId: z.number().int().positive(),
357
+ repository: repositoryName,
358
+ sourceSha: gitSha,
359
+ channel,
360
+ /** The component IDs this intent is obliged to produce. A short set is a failure. */
361
+ expectedComponents: z.array(nonEmpty).min(1),
362
+ state: ReleaseStateSchema,
363
+ attempt: z.number().int().min(1),
364
+ queuedAt: utcTimestamp,
365
+ deadlineAt: utcTimestamp,
366
+ /** Reserved version, once allocated. Reservation survives a failed attempt. */
367
+ reservedVersion: semver.optional(),
368
+ /**
369
+ * The furthest stage this intent actually completed and verified.
370
+ *
371
+ * §6.5 requires "rerun the same intent from its LAST VERIFIED STAGE", and
372
+ * `state` alone cannot express that: the moment an attempt fails, `state`
373
+ * becomes `BLOCKED` and the stage it had reached is gone. Keeping the resume
374
+ * point only in the controller's own storage works right up until an intent
375
+ * crosses a process or repository boundary, at which point the trip silently
376
+ * costs you the resume and the retry rebuilds bytes that were already
377
+ * verified — which §6.5 explicitly forbids.
378
+ */
379
+ lastVerifiedStage: ReleaseStateSchema.optional(),
380
+ /**
381
+ * The one terminal outcome `state` cannot express: this commit was audited and
382
+ * owes no release at all (a documentation-only change).
383
+ *
384
+ * It used to also carry BLOCKED / ABANDONED / SUPERSEDED_BY, which are already
385
+ * `state` values — so a record could say `state: BLOCKED, disposition:
386
+ * ABANDONED` and the contract permitted the contradiction. One fact belongs in
387
+ * one field; the duplicates are gone rather than merely discouraged.
388
+ */
389
+ disposition: z.literal("NO_RELEASE_REQUIRED").optional(),
390
+ /** Required when state is SUPERSEDED_BY: the successor containing this commit. */
391
+ supersededBy: gitSha.optional(),
392
+ blockedReason: nonEmpty.optional(),
393
+ /**
394
+ * Lease held by the controller currently advancing this intent.
395
+ *
396
+ * §3 requires fencing tokens for leases, and without the lease ON the intent
397
+ * two controllers reading the same wire object cannot tell it is already
398
+ * claimed — they both proceed, and the fencing token that was supposed to
399
+ * settle the race exists only inside one of them. The token increases
400
+ * monotonically; a writer presenting a token older than the recorded one is
401
+ * refused.
402
+ */
403
+ lease: z.strictObject({
404
+ holder: nonEmpty,
405
+ fencingToken: z.number().int().min(1),
406
+ expiresAt: utcTimestamp
407
+ }).optional()
408
+ }).superRefine((i, ctx) => {
409
+ if (i.state === "SUPERSEDED_BY" && !i.supersededBy) {
410
+ ctx.addIssue({
411
+ code: "custom",
412
+ path: ["supersededBy"],
413
+ message: "state SUPERSEDED_BY requires supersededBy to name the successor commit"
414
+ });
415
+ }
416
+ if (i.supersededBy && i.state !== "SUPERSEDED_BY") {
417
+ ctx.addIssue({
418
+ code: "custom",
419
+ path: ["state"],
420
+ message: `supersededBy is set but state is ${i.state}, not SUPERSEDED_BY`
421
+ });
422
+ }
423
+ if (i.state === "BLOCKED" && !i.blockedReason) {
424
+ ctx.addIssue({
425
+ code: "custom",
426
+ path: ["blockedReason"],
427
+ message: "state BLOCKED requires blockedReason \u2014 an unexplained block cannot be actioned"
428
+ });
429
+ }
430
+ const deadlineMs = parseInstant(i.deadlineAt);
431
+ const queuedMs = parseInstant(i.queuedAt);
432
+ if (deadlineMs === null || queuedMs === null) {
433
+ ctx.addIssue({
434
+ code: "custom",
435
+ path: ["deadlineAt"],
436
+ message: "deadlineAt and queuedAt must name real instants before they can be ordered"
437
+ });
438
+ } else if (deadlineMs < queuedMs) {
439
+ ctx.addIssue({
440
+ code: "custom",
441
+ path: ["deadlineAt"],
442
+ message: "deadlineAt precedes queuedAt"
443
+ });
444
+ }
445
+ });
446
+ var StackCompositionSchema = z.strictObject({
447
+ channel,
448
+ sequence: z.number().int().min(0),
449
+ compositionHash: sha256Hex,
450
+ previousSequence: z.number().int().min(0).nullable(),
451
+ /**
452
+ * MUST be sorted ascending by `componentId`, and the hasher MUST fold them in
453
+ * that order.
454
+ *
455
+ * `services` is an array, so `[a,b]` and `[b,a]` would otherwise be two
456
+ * documents describing one identical stack, each hashing differently. That
457
+ * would replace the clock with array order as a spurious release trigger —
458
+ * precisely the bug the absent timestamp above exists to prevent. Mandating
459
+ * the order in the CONTRACT, rather than only canonicalizing inside one
460
+ * hasher, means any independent implementation computes the same hash.
461
+ */
462
+ services: z.array(
463
+ z.strictObject({
464
+ componentId: nonEmpty,
465
+ digest: ociDigest,
466
+ version: semver
467
+ })
468
+ ).min(1).refine(
469
+ (svcs) => svcs.every((s, i) => i === 0 || svcs[i - 1].componentId < s.componentId),
470
+ { message: "services must be sorted ascending by componentId, with no duplicates" }
471
+ ),
472
+ compatibility: z.strictObject({
473
+ result: z.enum(["pass", "fail"]),
474
+ detail: nonEmpty.optional()
475
+ })
476
+ });
477
+ function issuePath(issue) {
478
+ if (issue.path.length === 0) return "$";
479
+ return `$.${issue.path.map((p) => typeof p === "number" ? `[${p}]` : String(p)).join(".").replace(/\.\[/g, "[")}`;
480
+ }
481
+ function parseReleaseDescriptor(raw) {
482
+ const value = parseJsonStrict(raw);
483
+ if (typeof value === "object" && value !== null && "schemaVersion" in value && value.schemaVersion !== DESCRIPTOR_SCHEMA_VERSION) {
484
+ throw new DeliverySchemaError(
485
+ "unsupported_schema_version",
486
+ "$.schemaVersion",
487
+ `this build understands schemaVersion ${DESCRIPTOR_SCHEMA_VERSION}, got ${String(
488
+ value.schemaVersion
489
+ )}`
490
+ );
491
+ }
492
+ return parseWith(ReleaseDescriptorSchema, value, "descriptor");
493
+ }
494
+ function parseWith(schema, value, label) {
495
+ const result = schema.safeParse(value);
496
+ if (!result.success) {
497
+ const first = result.error.issues[0];
498
+ throw new DeliverySchemaError(
499
+ "schema_invalid",
500
+ first ? issuePath(first) : "$",
501
+ first?.message ?? `${label} failed validation`
502
+ );
503
+ }
504
+ return result.data;
505
+ }
506
+ function parseEvidence(raw) {
507
+ return parseWith(EvidenceSchema, parseJsonStrict(raw), "evidence");
508
+ }
509
+ function parseReleaseIntent(raw) {
510
+ return parseWith(ReleaseIntentSchema, parseJsonStrict(raw), "release intent");
511
+ }
512
+ function parseStackComposition(raw) {
513
+ return parseWith(StackCompositionSchema, parseJsonStrict(raw), "stack composition");
514
+ }
515
+
516
+ export {
517
+ DeliverySchemaError,
518
+ parseJsonStrict,
519
+ GIT_SHA_RE,
520
+ OCI_DIGEST_RE,
521
+ NPM_INTEGRITY_RE,
522
+ RELEASE_TAG_RE,
523
+ SEMVER_RE,
524
+ UTC_TIMESTAMP_RE,
525
+ PLATFORM_RE,
526
+ SHA256_HEX_RE,
527
+ CHANNELS,
528
+ RELEASE_STATES,
529
+ ReleaseStateSchema,
530
+ RECOVERABLE_TERMINAL_STATES,
531
+ isRecoverableTerminal,
532
+ SCAN_RESULTS,
533
+ NOT_APPLICABLE_CLASSIFICATIONS,
534
+ EvidenceSchema,
535
+ ArtifactSchema,
536
+ ROLLBACK_CLASSES,
537
+ DESCRIPTOR_SCHEMA_VERSION,
538
+ ReleaseDescriptorSchema,
539
+ ReleaseIntentSchema,
540
+ StackCompositionSchema,
541
+ parseReleaseDescriptor,
542
+ parseEvidence,
543
+ parseReleaseIntent,
544
+ parseStackComposition
545
+ };
@@ -3,11 +3,11 @@ import {
3
3
  } from "./chunk-CBPNZFSU.js";
4
4
  import {
5
5
  initStore
6
- } from "./chunk-CO5ZVE3D.js";
6
+ } from "./chunk-UOPCVFVR.js";
7
7
  import {
8
8
  getClient,
9
9
  isInitialized
10
- } from "./chunk-AY2U4NZ5.js";
10
+ } from "./chunk-GL47M7NY.js";
11
11
 
12
12
  // src/lib/schedules.ts
13
13
  import crypto from "crypto";
@@ -3,19 +3,19 @@ import {
3
3
  getClient,
4
4
  isInitialized,
5
5
  loadEmployees
6
- } from "./chunk-AY2U4NZ5.js";
6
+ } from "./chunk-GL47M7NY.js";
7
7
  import {
8
8
  checkLicense,
9
9
  isFeatureAllowed,
10
10
  isPersonalFreeGrandfathered,
11
11
  resolveClientLimits
12
- } from "./chunk-5DFE2NAF.js";
12
+ } from "./chunk-TNS63ATU.js";
13
13
  import {
14
14
  PLAN_LIMITS
15
15
  } from "./chunk-A7XLR3K7.js";
16
16
  import {
17
17
  EXE_AI_DIR
18
- } from "./chunk-ZIG7VPJV.js";
18
+ } from "./chunk-MMS2HBRT.js";
19
19
 
20
20
  // src/lib/plan-limits.ts
21
21
  import { readFileSync, existsSync } from "fs";