@askexenow/exe-os 0.9.359 → 0.9.362

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 (451) hide show
  1. package/deploy/compose/docker-compose.yml +7 -1
  2. package/deploy/compose/generate-env.ts +23 -4
  3. package/deploy/compose/sso-edge/default.conf.template +35 -0
  4. package/deploy/compose/sso-edge/sso-redirect.conf +23 -2
  5. package/deploy/stack-manifests/v0.9.json +228 -2
  6. package/dist/.dist-verified.json +3 -3
  7. package/dist/{active-agent-DMKNHGSG.js → active-agent-3FV5V7SS.js} +9 -8
  8. package/dist/{active-agent-Y3DCBD7J.js → active-agent-BPNEBKHI.js} +9 -8
  9. package/dist/{agentic-ontology-3233PNKV.js → agentic-ontology-RCVCJ6WB.js} +1 -1
  10. package/dist/{backfill-gate-DA7UT6UD.js → backfill-gate-LRX77SUD.js} +3 -2
  11. package/dist/{backfill-metadata-4DS4A5U3.js → backfill-metadata-Y3DGVCK5.js} +12 -11
  12. package/dist/{background-jobs-XGTLESKM.js → background-jobs-Z6KHCWES.js} +3 -2
  13. package/dist/{backup-verify-JNYKXIU2.js → backup-verify-TZPPUCLU.js} +5 -4
  14. package/dist/{behavior-injection-CGAMI552.js → behavior-injection-JMGGWCWG.js} +21 -13
  15. package/dist/{behaviors-57AMN5IP.js → behaviors-TT6CMEKC.js} +20 -12
  16. package/dist/bin/age-ontology-load.js +3 -2
  17. package/dist/bin/agentic-ontology-backfill.js +14 -13
  18. package/dist/bin/agentic-reflection-backfill.js +15 -14
  19. package/dist/bin/agentic-semantic-label.js +14 -13
  20. package/dist/bin/backfill-conversations.js +16 -14
  21. package/dist/bin/backfill-responses.js +16 -14
  22. package/dist/bin/backfill-vectors.js +20 -18
  23. package/dist/bin/bulk-sync-postgres.js +27 -24
  24. package/dist/bin/cc-doctor.js +13 -11
  25. package/dist/bin/cleanup-stale-review-tasks.js +31 -28
  26. package/dist/bin/cli.js +157 -47
  27. package/dist/bin/customer-readiness.js +10 -1
  28. package/dist/bin/deferred-daemon-restart.js +127 -104
  29. package/dist/bin/exe-agent-config.js +9 -8
  30. package/dist/bin/exe-agent.js +17 -16
  31. package/dist/bin/exe-assign.js +18 -16
  32. package/dist/bin/exe-boot.js +62 -49
  33. package/dist/bin/exe-call.js +10 -9
  34. package/dist/bin/exe-cloud.js +29 -26
  35. package/dist/bin/exe-config-dump.js +9 -8
  36. package/dist/bin/exe-dispatch.js +31 -28
  37. package/dist/bin/exe-doctor.js +14 -10
  38. package/dist/bin/exe-export-behaviors.js +22 -14
  39. package/dist/bin/exe-forget.js +14 -13
  40. package/dist/bin/exe-gateway.js +13 -12
  41. package/dist/bin/exe-grant.js +6 -6
  42. package/dist/bin/exe-healthcheck.js +13 -11
  43. package/dist/bin/exe-heartbeat.js +33 -30
  44. package/dist/bin/exe-kill.js +36 -33
  45. package/dist/bin/exe-launch-agent.js +126 -44
  46. package/dist/bin/exe-mcp.js +165 -1
  47. package/dist/bin/exe-memory-reads.js +12 -11
  48. package/dist/bin/exe-new-employee.js +20 -17
  49. package/dist/bin/exe-os-mcp-proxy.js +9 -8
  50. package/dist/bin/exe-pending-messages.js +32 -29
  51. package/dist/bin/exe-pending-notifications.js +31 -28
  52. package/dist/bin/exe-pending-reviews.js +31 -28
  53. package/dist/bin/exe-preflight.js +1 -1
  54. package/dist/bin/exe-rename.js +10 -9
  55. package/dist/bin/exe-review.js +35 -32
  56. package/dist/bin/exe-search.js +13 -12
  57. package/dist/bin/exe-session-cleanup.js +36 -33
  58. package/dist/bin/exe-settings.js +28 -25
  59. package/dist/bin/exe-start-codex.js +27 -19
  60. package/dist/bin/exe-start-opencode.js +23 -15
  61. package/dist/bin/exe-start.sh +11 -7
  62. package/dist/bin/exe-status.js +32 -29
  63. package/dist/bin/exe-support.js +5 -4
  64. package/dist/bin/exe-team.js +9 -8
  65. package/dist/bin/exe-watchdog.js +115 -30
  66. package/dist/bin/git-sweep.js +32 -29
  67. package/dist/bin/graph-backfill.js +14 -13
  68. package/dist/bin/graph-export.js +13 -12
  69. package/dist/bin/import-history.js +16 -15
  70. package/dist/bin/install.js +392 -201
  71. package/dist/bin/intercom-check.js +4 -4
  72. package/dist/bin/mcp-sessions.js +2 -2
  73. package/dist/bin/orchestration-metrics.js +10 -9
  74. package/dist/bin/postgres-agentic-reflection-backfill.js +5 -4
  75. package/dist/bin/postgres-agentic-semantic-backfill.js +4 -3
  76. package/dist/bin/reconcile-backlog.js +2 -2
  77. package/dist/bin/registry-proxy.js +1 -1
  78. package/dist/bin/scan-tasks.js +31 -28
  79. package/dist/bin/setup.js +7 -4
  80. package/dist/bin/shard-migrate.js +13 -12
  81. package/dist/bin/stack-update.js +45 -14
  82. package/dist/bin/update.js +4 -3
  83. package/dist/bin/vps-health-gate.js +1 -1
  84. package/dist/{boot-generation-4D3CTT7X.js → boot-generation-XABYKF5P.js} +9 -8
  85. package/dist/{boot-review-sections-NDFE5443.js → boot-review-sections-2X5TFIGU.js} +30 -27
  86. package/dist/{branch-hygiene-HNSOUDJE.js → branch-hygiene-Z4IBWAOX.js} +2 -1
  87. package/dist/{branding-6FHWZQYQ.js → branding-7MZDHTKN.js} +3 -2
  88. package/dist/build-manifest.json +1249 -1069
  89. package/dist/{capability-cards-OBB7BMMX.js → capability-cards-O5UXDOOA.js} +8 -7
  90. package/dist/{capacity-monitor-QLPEL6S5.js → capacity-monitor-IPXM726A.js} +32 -29
  91. package/dist/{catchup-brief-EN7QR6MP.js → catchup-brief-EBIGDXOK.js} +36 -33
  92. package/dist/{chunk-WRP5AG4D.js → chunk-23KWUA7Z.js} +2 -2
  93. package/dist/{chunk-PDRIIEFV.js → chunk-2FA4PYYX.js} +1 -1
  94. package/dist/chunk-2PRAXZWM.js +261 -0
  95. package/dist/{chunk-R6LNQAUG.js → chunk-327Q53AS.js} +34 -1
  96. package/dist/{chunk-MBULOZJF.js → chunk-32FEF5BW.js} +2 -2
  97. package/dist/{chunk-2YGAKBRG.js → chunk-35FD67ZB.js} +3 -3
  98. package/dist/{chunk-R62ITJDQ.js → chunk-3C7NE4JE.js} +1 -1
  99. package/dist/{chunk-YBX3G5OP.js → chunk-3ICF4IAZ.js} +1 -1
  100. package/dist/{chunk-CVTWQZOR.js → chunk-3L2QU5ZF.js} +14 -2
  101. package/dist/{chunk-I5AVZOL2.js → chunk-3YBJ36UX.js} +2 -2
  102. package/dist/{chunk-NKDKB2RT.js → chunk-465RCKVI.js} +6 -6
  103. package/dist/{chunk-QROIFRKI.js → chunk-4AFD4R35.js} +5 -5
  104. package/dist/{chunk-OSID72CN.js → chunk-4L33OFU4.js} +25 -1
  105. package/dist/{chunk-A6VIK3SS.js → chunk-4P2BFNSB.js} +2 -2
  106. package/dist/{chunk-SIGAQQHW.js → chunk-4R2WD6T3.js} +2 -2
  107. package/dist/{chunk-HPHF5VTT.js → chunk-4U56FZ7B.js} +4 -4
  108. package/dist/{chunk-2KLVTRY2.js → chunk-54USDN5Q.js} +1 -1
  109. package/dist/{chunk-CAEWPEBA.js → chunk-5C6ZIJ7J.js} +1 -1
  110. package/dist/{chunk-46RPEWTH.js → chunk-5H3RHWRE.js} +1 -1
  111. package/dist/chunk-5OPAUFLP.js +126 -0
  112. package/dist/{chunk-EHM4E62N.js → chunk-6DTALXOA.js} +1 -1
  113. package/dist/chunk-6EM6USV7.js +1332 -0
  114. package/dist/{chunk-JE34CB5H.js → chunk-6N3HUOV3.js} +2 -2
  115. package/dist/{chunk-6KREY2Q7.js → chunk-6QJXFLNN.js} +5 -5
  116. package/dist/{chunk-G37RG543.js → chunk-6UZDGEGQ.js} +1 -1
  117. package/dist/{chunk-APR556TY.js → chunk-6Y3KUO7Q.js} +190 -29
  118. package/dist/{chunk-2EAYZ3BK.js → chunk-7H3AZNQ7.js} +9 -9
  119. package/dist/{chunk-C5YZMYQH.js → chunk-7SY2NOMQ.js} +1 -1
  120. package/dist/{chunk-OAYTQ4RY.js → chunk-AL4HXKDJ.js} +55 -12
  121. package/dist/{chunk-VY5VU7SX.js → chunk-AOMFYUPT.js} +2 -2
  122. package/dist/{chunk-EX2SSLNU.js → chunk-AQO3BT3I.js} +12 -12
  123. package/dist/chunk-ARX6TAGN.js +102 -0
  124. package/dist/chunk-B6PFGUYJ.js +159 -0
  125. package/dist/{chunk-FASR2WLT.js → chunk-BDLRTLXY.js} +1 -1
  126. package/dist/chunk-BJEQBKGH.js +218 -0
  127. package/dist/{chunk-BCZF3AGJ.js → chunk-BRIZ6OZ3.js} +34 -44
  128. package/dist/{chunk-OMXJMOBD.js → chunk-BRZR76TS.js} +66 -0
  129. package/dist/{chunk-XV42EAVK.js → chunk-BT2PUK3S.js} +1 -1
  130. package/dist/{chunk-6EOLGE7T.js → chunk-CVYDJ2TW.js} +1 -1
  131. package/dist/{chunk-WCP4OQUL.js → chunk-CXQ724WH.js} +2 -2
  132. package/dist/{chunk-F3QTF4T7.js → chunk-CY5NVDTH.js} +3 -3
  133. package/dist/{chunk-3ODATKWH.js → chunk-D5CY4E7I.js} +1 -1
  134. package/dist/{chunk-W5YV2PZE.js → chunk-DKRDU2AX.js} +16 -16
  135. package/dist/{chunk-SNWV44E5.js → chunk-DSKEYEL2.js} +12 -5
  136. package/dist/{chunk-VXL7PJ56.js → chunk-E3YI6FVJ.js} +5 -24
  137. package/dist/{chunk-6SK4MM5B.js → chunk-E7PL3T2U.js} +1 -1
  138. package/dist/{chunk-IOEUAQWP.js → chunk-EEZOBN6X.js} +1 -1
  139. package/dist/{chunk-AHMUF6RO.js → chunk-G2M7WQ2M.js} +0 -2
  140. package/dist/{chunk-SKGMF2SO.js → chunk-GBNB4EWD.js} +22 -1
  141. package/dist/{chunk-UZ5RJYL3.js → chunk-HAXCUCJC.js} +1 -1
  142. package/dist/{chunk-VMR6M6GN.js → chunk-HISFWAAK.js} +1 -1
  143. package/dist/{chunk-DKRSKC5R.js → chunk-HKQ7UTSE.js} +1 -1
  144. package/dist/chunk-HLQ4MS42.js +257 -0
  145. package/dist/{chunk-EA5FVACM.js → chunk-HLU52KTO.js} +29 -18
  146. package/dist/{chunk-QWVXN224.js → chunk-HPXFKUGU.js} +350 -65
  147. package/dist/{chunk-2OVTGZYH.js → chunk-HSKABJE6.js} +46 -3
  148. package/dist/{chunk-NE57GONM.js → chunk-I3SF6QGV.js} +1 -1
  149. package/dist/chunk-J6KMGEJW.js +238 -0
  150. package/dist/chunk-JKKZGDLP.js +182 -0
  151. package/dist/{chunk-3ZEVMZ4G.js → chunk-JYKZVAS6.js} +1 -1
  152. package/dist/{chunk-4DYJ6NOK.js → chunk-KA4WVDLX.js} +2 -2
  153. package/dist/{chunk-QH2XAUZ5.js → chunk-KBI4FVBZ.js} +1 -1
  154. package/dist/{chunk-VAY6IXWY.js → chunk-KDMVVHZH.js} +1 -1
  155. package/dist/{chunk-4FQIWAXA.js → chunk-KID6T2A4.js} +10 -10
  156. package/dist/{chunk-HNPHPGGF.js → chunk-KIKB6FY3.js} +2 -2
  157. package/dist/{chunk-STFR72YH.js → chunk-LCDW2HUL.js} +1 -1
  158. package/dist/{chunk-RFUTLZ2U.js → chunk-LG37UBBE.js} +4 -4
  159. package/dist/{chunk-3QWOO74G.js → chunk-LLZNPOGB.js} +97 -3
  160. package/dist/chunk-M67ARGXY.js +175 -0
  161. package/dist/chunk-MPVXHYD5.js +85 -0
  162. package/dist/{chunk-RXL7A7JH.js → chunk-MZYNW5OY.js} +1 -1
  163. package/dist/{chunk-DQ75MEPU.js → chunk-MZZN5GFC.js} +1 -1
  164. package/dist/{chunk-X2F6Q7TW.js → chunk-NAHCSQWT.js} +1 -1
  165. package/dist/{chunk-AL7JMA54.js → chunk-NE4QI2GX.js} +2 -2
  166. package/dist/chunk-NGDXBN3M.js +254 -0
  167. package/dist/{chunk-HDSDXGLV.js → chunk-NO5KHKKB.js} +1 -1
  168. package/dist/chunk-NOKJCF27.js +437 -0
  169. package/dist/{chunk-PLOEFBFW.js → chunk-O32HTNRX.js} +3 -3
  170. package/dist/{chunk-UPM5JP6G.js → chunk-OZNCAMS3.js} +47 -4
  171. package/dist/{chunk-XLEYCOHX.js → chunk-P7CV4SHQ.js} +398 -58
  172. package/dist/{chunk-G2KK64UB.js → chunk-PDJWHL63.js} +101 -19
  173. package/dist/{chunk-W3XUU36X.js → chunk-PF7EQSE5.js} +5 -5
  174. package/dist/{chunk-QX7RWICL.js → chunk-PU7UYQRC.js} +1 -1
  175. package/dist/{chunk-A5WEEND7.js → chunk-PUMH7JSB.js} +3 -3
  176. package/dist/{chunk-POZGQQEZ.js → chunk-PV5BIXT6.js} +1 -1
  177. package/dist/{chunk-TG7JYSEA.js → chunk-Q2VQNAPU.js} +5 -2
  178. package/dist/{chunk-Z2PAVJJ4.js → chunk-Q7J2SQJ6.js} +127 -29
  179. package/dist/{chunk-4JERP7NT.js → chunk-QAEWWYHL.js} +29 -1
  180. package/dist/{chunk-6JTKIXLU.js → chunk-QCJT265O.js} +1 -1
  181. package/dist/{chunk-OY2PWHYR.js → chunk-QI25QRUP.js} +2 -2
  182. package/dist/chunk-QILQ5FCG.js +198 -0
  183. package/dist/{chunk-LRETL4I3.js → chunk-QJBX3MBV.js} +3 -3
  184. package/dist/{chunk-57GRYGDU.js → chunk-QP53XLC5.js} +1 -1
  185. package/dist/{chunk-JBAMYKBL.js → chunk-QQMYD4M7.js} +1 -1
  186. package/dist/{chunk-SHEWTDPC.js → chunk-QY3TM2T3.js} +4 -4
  187. package/dist/{chunk-WA2MJGPT.js → chunk-QYRI25IP.js} +3 -3
  188. package/dist/{chunk-QLFN3MUW.js → chunk-RCOIKTHM.js} +1 -1
  189. package/dist/{chunk-ITRKRKS7.js → chunk-RFKRCVGW.js} +1 -1
  190. package/dist/{chunk-HK7SQDKJ.js → chunk-RNSAVQEU.js} +2 -2
  191. package/dist/{chunk-44WFVMZ5.js → chunk-RUUX2ZST.js} +1 -1
  192. package/dist/{chunk-DWKH2H7W.js → chunk-RWKX2TK5.js} +1 -1
  193. package/dist/{chunk-MCNDZU5W.js → chunk-RYRNY6IF.js} +2 -2
  194. package/dist/{chunk-5I3YC7ER.js → chunk-SC6WDF3Q.js} +2 -2
  195. package/dist/chunk-SLBOKYYQ.js +197 -0
  196. package/dist/{chunk-74R44E4S.js → chunk-SQM4ZTL2.js} +246 -96
  197. package/dist/{chunk-KIXNMTGC.js → chunk-SRFRUN66.js} +5 -5
  198. package/dist/chunk-SXKIGBNF.js +61 -0
  199. package/dist/chunk-T2RZU7JA.js +2607 -0
  200. package/dist/{chunk-2I23RPSI.js → chunk-TKDITWDN.js} +9 -0
  201. package/dist/{chunk-5UAMBMNR.js → chunk-TN2E6ZCM.js} +44 -34
  202. package/dist/{chunk-SQBNN44X.js → chunk-TP7RXGMP.js} +49 -15
  203. package/dist/{chunk-GSVQBBE5.js → chunk-TY4JLBFO.js} +2 -2
  204. package/dist/{chunk-7QRMFYOV.js → chunk-UHPMK6QZ.js} +17 -3
  205. package/dist/{chunk-LPKTGK7L.js → chunk-UO5QJ2RX.js} +4 -4
  206. package/dist/{chunk-VCCZQDCU.js → chunk-URNVIZXU.js} +3 -3
  207. package/dist/{chunk-OIS5VIAH.js → chunk-UWEFIIEG.js} +6 -2
  208. package/dist/{chunk-IQWAYXVF.js → chunk-V5I5N7NC.js} +3 -3
  209. package/dist/{chunk-GD7VXXW6.js → chunk-V6YLIDLK.js} +801 -180
  210. package/dist/chunk-VAOUB2TK.js +23 -0
  211. package/dist/{chunk-XVTKJEI2.js → chunk-VDMFVUSY.js} +3 -3
  212. package/dist/{chunk-RJ67HG2P.js → chunk-VWTUKKUF.js} +4 -4
  213. package/dist/{chunk-4WSUP4CC.js → chunk-W3LKIQJ2.js} +43 -17
  214. package/dist/{chunk-EUQF3JOH.js → chunk-WBG7XYVR.js} +1 -1
  215. package/dist/{chunk-YKRNH5LU.js → chunk-WH2VVEGD.js} +1 -1
  216. package/dist/{chunk-NP2Y7P3I.js → chunk-WP2TGH5R.js} +1 -1
  217. package/dist/chunk-WT4RI36X.js +23 -0
  218. package/dist/{chunk-LXG37RB2.js → chunk-XJIRUTGJ.js} +1 -1
  219. package/dist/chunk-XRCX6R5S.js +57 -0
  220. package/dist/{chunk-XWWNRFRF.js → chunk-XSYQ5EPE.js} +11 -11
  221. package/dist/{chunk-HKK7LLS5.js → chunk-XTGR3LMF.js} +34 -3
  222. package/dist/{chunk-HLEZ5O5P.js → chunk-XUB4GFPN.js} +17 -15
  223. package/dist/chunk-YZUHSV24.js +277 -0
  224. package/dist/{chunk-6WHYSLGF.js → chunk-Z67DIJKT.js} +1 -1
  225. package/dist/{chunk-6LY3QSJA.js → chunk-ZI3HA3XW.js} +11 -6
  226. package/dist/{chunk-YEOIPUFO.js → chunk-ZR4CQBAP.js} +1 -1
  227. package/dist/{chunk-VNK3MNZE.js → chunk-ZZEKOI2M.js} +1 -1
  228. package/dist/{cleanup-graph-garbage-XFGY4EEE.js → cleanup-graph-garbage-6F22Y5SD.js} +13 -12
  229. package/dist/{cloud-sync-shutdown-XCOATIJW.js → cloud-sync-shutdown-FWERMZB5.js} +8 -7
  230. package/dist/{co-activation-XNBLOGK3.js → co-activation-UEEDCM5U.js} +8 -7
  231. package/dist/{co-occurrence-HO4PGQC4.js → co-occurrence-W6OPFRSY.js} +11 -10
  232. package/dist/{code-context-index-5RY66SWZ.js → code-context-index-DWR6HS35.js} +7 -5
  233. package/dist/consent-passphrase-Z64GFJXK.js +23 -0
  234. package/dist/{conversation-entity-extractor-5G5DGRJU.js → conversation-entity-extractor-LWUIH3UB.js} +3 -3
  235. package/dist/{conversation-wiki-populator-RZKG6PK4.js → conversation-wiki-populator-5EGRW2UZ.js} +1 -1
  236. package/dist/{crdt-sync-6TD7LSZW.js → crdt-sync-NHJX3ZJD.js} +5 -4
  237. package/dist/{crm-webhook-WZAV5776.js → crm-webhook-OY467ATC.js} +2 -2
  238. package/dist/{cto-delegation-gate-UHMYFM4D.js → cto-delegation-gate-XH4YSQVC.js} +30 -27
  239. package/dist/{daemon-auth-SXZHLUYS.js → daemon-auth-OCHW2U6B.js} +3 -2
  240. package/dist/{daemon-orchestration-DT5M2ZAR.js → daemon-orchestration-7425ZVNH.js} +35 -32
  241. package/dist/{daemon-ready-56VAPZU6.js → daemon-ready-VGPSRI3Z.js} +1 -1
  242. package/dist/{daemon-restart-circuit-breaker-5V6B6NLS.js → daemon-restart-circuit-breaker-SMTWFX27.js} +25 -3
  243. package/dist/db-backend-ODVJ3Q3D.js +7 -0
  244. package/dist/{db-restore-events-ZLD2HRQV.js → db-restore-events-TFCZ4CPM.js} +2 -1
  245. package/dist/{doc-graph-extractor-FNCYPFKY.js → doc-graph-extractor-RR2VSO4W.js} +11 -10
  246. package/dist/{documents-GKDZDUED.js → documents-TRZ4R2ZW.js} +18 -16
  247. package/dist/dreaming-MAMZAPYW.js +63 -0
  248. package/dist/{exe-drift-QTKD2FHT.js → exe-drift-VBWB5E6S.js} +9 -8
  249. package/dist/{exe-export-ESJ6KP6J.js → exe-export-XJJTVVT7.js} +21 -13
  250. package/dist/{exe-import-N4X3GEQB.js → exe-import-G6O7JFNZ.js} +21 -13
  251. package/dist/{exe-key-KZCCHX3W.js → exe-key-A2WJLLTM.js} +116 -99
  252. package/dist/exe-org-HXF4XBB3.js +672 -0
  253. package/dist/{exe-snapshot-SCRPHCPZ.js → exe-snapshot-TL3TLKLR.js} +38 -33
  254. package/dist/{fast-db-init-6H67K76Q.js → fast-db-init-SO2XUQ7T.js} +1 -1
  255. package/dist/{founder-context-C7X7IRDA.js → founder-context-IOCADC66.js} +4 -3
  256. package/dist/{founder-monitor-envelope-DHSUMBWU.js → founder-monitor-envelope-SMILO4BT.js} +7 -5
  257. package/dist/gateway/index.js +23 -22
  258. package/dist/{gateway-client-7LMZKHTH.js → gateway-client-JA2BH7QO.js} +1 -1
  259. package/dist/{git-staleness-JCKVMWPO.js → git-staleness-I6WT7EXV.js} +8 -7
  260. package/dist/{global-procedures-BR7WGSE7.js → global-procedures-3RMO6C3C.js} +9 -8
  261. package/dist/{graph-auto-extract-EOXWQRBZ.js → graph-auto-extract-NKTYPD2I.js} +11 -10
  262. package/dist/{graph-rag-5FVC5JXH.js → graph-rag-EOGPZOYI.js} +3 -3
  263. package/dist/{hook-integrity-TYGDD7OE.js → hook-integrity-RTBF2BL2.js} +1 -1
  264. package/dist/{hook-prefetch-2CN3MK4H.js → hook-prefetch-V5KCGW2N.js} +31 -28
  265. package/dist/hooks/bug-report-worker.js +35 -32
  266. package/dist/hooks/codex-stop-task-finalizer.js +36 -33
  267. package/dist/hooks/commit-complete.js +34 -31
  268. package/dist/hooks/error-recall.js +16 -15
  269. package/dist/hooks/exe-heartbeat-hook.js +10 -9
  270. package/dist/hooks/ingest-worker.js +12 -10
  271. package/dist/hooks/ingest.js +19 -18
  272. package/dist/hooks/instructions-loaded.js +11 -10
  273. package/dist/hooks/manifest.json +20 -20
  274. package/dist/hooks/notification.js +11 -10
  275. package/dist/hooks/post-compact.js +11 -115
  276. package/dist/hooks/post-tool-combined.js +11 -11
  277. package/dist/hooks/pre-compact.js +38 -64
  278. package/dist/hooks/pre-tool-use.js +95 -36
  279. package/dist/hooks/prompt-submit.js +50 -47
  280. package/dist/hooks/session-end.js +39 -36
  281. package/dist/hooks/session-start.js +64 -18
  282. package/dist/hooks/stop.js +40 -37
  283. package/dist/hooks/subagent-stop.js +35 -32
  284. package/dist/hooks/summary-worker.js +41 -38
  285. package/dist/index.js +45 -42
  286. package/dist/inrun-inbox-DRKVDPLY.js +29 -0
  287. package/dist/{installer-VPNTM3X6.js → installer-G67M3DME.js} +11 -10
  288. package/dist/{installer-YDLSXGD2.js → installer-L3ZKMOPU.js} +11 -10
  289. package/dist/{installer-7UV3CNWZ.js → installer-QBWZSYDG.js} +11 -10
  290. package/dist/{intercom-queue-KHKJJYCQ.js → intercom-queue-R5LSXD3V.js} +30 -27
  291. package/dist/{key-backup-status-YMS7YGWO.js → key-backup-status-3RC6XTUX.js} +2 -1
  292. package/dist/lib/agent-config.js +3 -2
  293. package/dist/lib/cloud-sync.js +27 -24
  294. package/dist/lib/config.js +6 -1
  295. package/dist/lib/consolidation.js +14 -13
  296. package/dist/lib/crypto.js +4 -3
  297. package/dist/lib/database.js +8 -7
  298. package/dist/lib/db-backup.js +4 -3
  299. package/dist/lib/db-checkpoint-worker.js +1 -1
  300. package/dist/lib/db-daemon-client.js +7 -5
  301. package/dist/lib/db-read-worker-client.js +1 -1
  302. package/dist/lib/db-read-worker.js +1 -1
  303. package/dist/lib/db-write-worker-client.js +4 -2
  304. package/dist/lib/db-write-worker.js +21 -3
  305. package/dist/lib/db.js +8 -7
  306. package/dist/lib/device-registry.js +3 -2
  307. package/dist/lib/embed-worker.js +2 -1
  308. package/dist/lib/embedder.js +7 -5
  309. package/dist/lib/employee-templates.js +10 -9
  310. package/dist/lib/employees.js +8 -7
  311. package/dist/lib/error-detector.js +1 -1
  312. package/dist/lib/exe-daemon-client.js +16 -6
  313. package/dist/lib/exe-daemon.js +342 -168
  314. package/dist/lib/hybrid-search.js +13 -12
  315. package/dist/lib/identity-templates.js +3 -1
  316. package/dist/lib/identity.js +8 -7
  317. package/dist/lib/keychain.js +41 -3
  318. package/dist/lib/license.js +12 -3
  319. package/dist/lib/messaging.js +31 -28
  320. package/dist/lib/platform-support.js +25 -0
  321. package/dist/lib/post-tool-memory.js +6 -4
  322. package/dist/lib/preflight.js +29 -0
  323. package/dist/lib/registry-proxy.js +1 -1
  324. package/dist/lib/reminders.js +9 -8
  325. package/dist/lib/schedules.js +13 -12
  326. package/dist/lib/session-registry.js +10 -9
  327. package/dist/lib/session-wrappers.js +7 -3
  328. package/dist/lib/skill-learning.js +21 -13
  329. package/dist/lib/status-brief.js +8 -3
  330. package/dist/lib/store.js +12 -11
  331. package/dist/lib/task-router.js +9 -8
  332. package/dist/lib/tasks.js +32 -29
  333. package/dist/lib/tmux-routing.js +45 -29
  334. package/dist/lib/tmux-status.js +7 -3
  335. package/dist/lib/token-spend.js +9 -8
  336. package/dist/lib/ws-client.js +1 -1
  337. package/dist/{license-gate-YXUSNA2I.js → license-gate-6R3F3NQR.js} +5 -4
  338. package/dist/{license-sync-XFDOXL3Z.js → license-sync-VBJCXBAP.js} +4 -3
  339. package/dist/linux-systemd-LRW3BYSS.js +38 -0
  340. package/dist/mailbox-inbox-CP2VRBXZ.js +10 -0
  341. package/dist/mailbox-outbox-HXI7DYNC.js +19 -0
  342. package/dist/mcp/register-tools.js +110 -94
  343. package/dist/mcp/server.js +113 -97
  344. package/dist/mcp/tools/complete-reminder.js +10 -9
  345. package/dist/mcp/tools/create-reminder.js +10 -9
  346. package/dist/mcp/tools/create-task.js +38 -31
  347. package/dist/mcp/tools/deactivate-behavior.js +22 -14
  348. package/dist/mcp/tools/list-reminders.js +10 -9
  349. package/dist/mcp/tools/list-tasks.js +34 -31
  350. package/dist/mcp/tools/send-message.js +33 -30
  351. package/dist/mcp/tools/update-task.js +33 -30
  352. package/dist/{mcp-http-config-HIP5CEDV.js → mcp-http-config-BWX7AMAZ.js} +9 -8
  353. package/dist/{mcp-session-identity-RTNZ2ZLW.js → mcp-session-identity-GOBGICLI.js} +30 -27
  354. package/dist/{memory-cards-KG4TPNKK.js → memory-cards-4EXX3BQS.js} +12 -11
  355. package/dist/{memory-graph-extractor-6HTBLO2N.js → memory-graph-extractor-OYVZIJ3R.js} +12 -11
  356. package/dist/{memory-poisoning-defense-3ZT57RSJ.js → memory-poisoning-defense-AHOD2EBX.js} +8 -7
  357. package/dist/{memory-pressure-watchdog-ZOZBIMKC.js → memory-pressure-watchdog-COJC3OYS.js} +31 -28
  358. package/dist/{memory-queue-W54BYW7V.js → memory-queue-4VN3DTOE.js} +3 -2
  359. package/dist/memory-queue-client-OI4LDT4W.js +18 -0
  360. package/dist/{memory-reflection-EQC4FXSW.js → memory-reflection-V2SNAUIB.js} +8 -7
  361. package/dist/{monitor-grants-BDLVFVDR.js → monitor-grants-W3ISOLMC.js} +6 -4
  362. package/dist/{monitor-identity-GLFZSEAH.js → monitor-identity-AN3B5QIN.js} +3 -2
  363. package/dist/{notification-ledger-NZ4HO3M5.js → notification-ledger-J6Q2GAYU.js} +117 -53
  364. package/dist/{notifications-74YECZ4V.js → notifications-56TP36IK.js} +30 -27
  365. package/dist/{orchestration-events-KRQI4ED5.js → orchestration-events-CKQ756NA.js} +9 -8
  366. package/dist/{orchestration-phase-KVF42ZKU.js → orchestration-phase-ZJ4XVNFO.js} +3 -2
  367. package/dist/orchestrator-ERSQ3KNT.js +55 -0
  368. package/dist/org-brief-session-FSZ3QJDN.js +45 -0
  369. package/dist/org-consent-policy-BN7MKCZ2.js +68 -0
  370. package/dist/org-join-HTQ57JYH.js +35 -0
  371. package/dist/org-key-admin-4W6LZ5KZ.js +242 -0
  372. package/dist/org-key-pin-OTOKAELD.js +37 -0
  373. package/dist/{org-membership-B32NS5NI.js → org-membership-SML6GCHP.js} +11 -7
  374. package/dist/org-partner-config-XQGOB7EJ.js +25 -0
  375. package/dist/org-partner-runtime-RNNUL5IN.js +44 -0
  376. package/dist/org-row-visibility-JZFJ3YRJ.js +18 -0
  377. package/dist/{pipeline-router-6ZZV7JMA.js → pipeline-router-IUENNTAY.js} +9 -8
  378. package/dist/{plan-limits-B7AZKZ6U.js → plan-limits-ZUII366B.js} +11 -10
  379. package/dist/postinstall-failure-A7WTAXD6.js +20 -0
  380. package/dist/{project-boot-WEQSKDD7.js → project-boot-3DFY5F35.js} +7 -2
  381. package/dist/{projection-worker-LRFFQ6JB.js → projection-worker-MBWUPB5O.js} +5 -4
  382. package/dist/{prospective-memory-A4GDTIWG.js → prospective-memory-GHE5ORN4.js} +8 -7
  383. package/dist/push-notifications-PTQ5DHCD.js +60 -0
  384. package/dist/{reranker-YVTLJCFC.js → reranker-NUIGAPA3.js} +3 -2
  385. package/dist/{retrieval-health-PK2ODTXM.js → retrieval-health-XHCERQPG.js} +1 -1
  386. package/dist/{review-polling-JFWRNQF6.js → review-polling-CYBCBHZA.js} +31 -28
  387. package/dist/runtime/index.js +41 -38
  388. package/dist/{session-events-VMQBCUH3.js → session-events-X33W4JNA.js} +31 -28
  389. package/dist/{session-kill-telemetry-Z3W256T5.js → session-kill-telemetry-I2F5PUIW.js} +31 -28
  390. package/dist/session-lineage-AGOHSXIS.js +66 -0
  391. package/dist/{session-scope-2ADEVY3C.js → session-scope-WXP4F7OF.js} +30 -27
  392. package/dist/setup-wizard-2CTVITIX.js +35 -0
  393. package/dist/{shard-manager-DFLCDZT5.js → shard-manager-YEOHEOHL.js} +4 -3
  394. package/dist/{skill-refinement-APBYOSGX.js → skill-refinement-VDR5OT4V.js} +9 -8
  395. package/dist/{stack-promote-SZYIPTFT.js → stack-promote-XVC7FRJW.js} +6 -5
  396. package/dist/{stack-release-EYRDEGPD.js → stack-release-6PWAACRM.js} +101 -80
  397. package/dist/{stack-update-YWK2YXP6.js → stack-update-24VRBQ3U.js} +9 -4
  398. package/dist/{steward-gate-CIOBPNX6.js → steward-gate-2ZNYDVFO.js} +9 -8
  399. package/dist/{support-inbox-OAWGFRKW.js → support-inbox-ZHKLDETT.js} +5 -4
  400. package/dist/{task-enforcement-YAU6ZGDC.js → task-enforcement-GQDUTIFY.js} +37 -28
  401. package/dist/task-request-inbox-BFXNUU44.js +64 -0
  402. package/dist/{task-scope-44N7XP5N.js → task-scope-ERHPHLUM.js} +30 -27
  403. package/dist/{tasks-crud-IWVDREXG.js → tasks-crud-NVNF3NRA.js} +30 -27
  404. package/dist/tasks-notify-DXLU5VCT.js +60 -0
  405. package/dist/{tasks-review-VDFWFETP.js → tasks-review-BST6N34P.js} +30 -27
  406. package/dist/{telemetry-upload-3X5ESEKM.js → telemetry-upload-NY3EKOGY.js} +13 -12
  407. package/dist/{token-budget-WZGO22ME.js → token-budget-CLB3GUIX.js} +9 -8
  408. package/dist/{tool-capability-index-IFNZ6QUS.js → tool-capability-index-WZWVBI2R.js} +1 -1
  409. package/dist/{tool-telemetry-F7RWUNVK.js → tool-telemetry-PALAZUXT.js} +1 -1
  410. package/dist/tui/App.js +44 -41
  411. package/dist/{tui-data-KT7YGVQS.js → tui-data-CNFSRZP7.js} +30 -27
  412. package/dist/{typed-messages-TKDGVPHS.js → typed-messages-RCMPEKJN.js} +1 -1
  413. package/dist/{update-support-ZVRMECNQ.js → update-support-ZVB3CNGY.js} +24 -22
  414. package/dist/{work-state-heartbeat-CA4CN7DQ.js → work-state-heartbeat-O7UMB6SE.js} +1 -1
  415. package/dist/{worker-gate-52MVKYGZ.js → worker-gate-6DQQWDNB.js} +3 -2
  416. package/dist/{workflow-engine-ZAFBPVUP.js → workflow-engine-5ZULFH7O.js} +2 -2
  417. package/dist/{worktree-NNVXVV6A.js → worktree-ZWA35PKW.js} +10 -9
  418. package/dist/{worktree-sweep-IM2ZQG6Z.js → worktree-sweep-5LCVT46V.js} +11 -10
  419. package/package.json +8 -20
  420. package/postinstall.mjs +124 -0
  421. package/release-notes.json +18 -16
  422. package/stack.release.schema.json +4 -0
  423. package/dist/chunk-AFNRE2RV.js +0 -408
  424. package/dist/chunk-OSKWCKUC.js +0 -6
  425. package/dist/chunk-S3FIQCSM.js +0 -232
  426. package/dist/chunk-W6UB2AWP.js +0 -656
  427. package/dist/dreaming-WPMQJAXW.js +0 -60
  428. package/dist/exe-org-UK77DUU4.js +0 -73
  429. package/dist/memory-queue-client-RRNW2IFZ.js +0 -16
  430. package/dist/orchestrator-WV2YCHTK.js +0 -52
  431. package/dist/push-notifications-GOFTDDWW.js +0 -15
  432. package/dist/setup-wizard-26B36FMC.js +0 -14
  433. package/dist/tasks-notify-WK5HA77D.js +0 -57
  434. /package/dist/{chunk-YL2JH3XV.js → chunk-6C4UAKMS.js} +0 -0
  435. /package/dist/{chunk-YMCIZCNK.js → chunk-BN26LSME.js} +0 -0
  436. /package/dist/{chunk-WTH4CSAP.js → chunk-DFQEUZSI.js} +0 -0
  437. /package/dist/{chunk-FVWI2AR4.js → chunk-FIPUVCKC.js} +0 -0
  438. /package/dist/{chunk-ZMYXQU4L.js → chunk-L4LPJMPV.js} +0 -0
  439. /package/dist/{chunk-COHHVCFA.js → chunk-UELGUVNL.js} +0 -0
  440. /package/dist/{chunk-U7RZIY74.js → chunk-X7LY3IOB.js} +0 -0
  441. /package/dist/{chunk-BGYCUZYK.js → chunk-YAZ5ECEG.js} +0 -0
  442. /package/dist/{chunk-DSGFX3RT.js → chunk-YWN3XMPU.js} +0 -0
  443. /package/dist/{chunk-YMUZWC33.js → chunk-YYB5PMTK.js} +0 -0
  444. /package/dist/{core-memory-AATZRQEY.js → core-memory-BZFPVS43.js} +0 -0
  445. /package/dist/{entity-boost-HLFG2CH3.js → entity-boost-VXXED26D.js} +0 -0
  446. /package/dist/{memory-isolation-CF6FYSXD.js → memory-isolation-3PIOWLYP.js} +0 -0
  447. /package/dist/{message-queue-client-AX6KQK7T.js → message-queue-client-5XW7ZOK2.js} +0 -0
  448. /package/dist/{oauth-server-VE5ELXTF.js → oauth-server-KW5M437C.js} +0 -0
  449. /package/dist/{webhook-pipe-A4X4SCMW.js → webhook-pipe-QJRFZVKA.js} +0 -0
  450. /package/dist/{wiki-acl-GNIXYWHJ.js → wiki-acl-RXFV5OEU.js} +0 -0
  451. /package/dist/{wiki-client-7RRYRSPS.js → wiki-client-57QWZIHQ.js} +0 -0
@@ -0,0 +1,238 @@
1
+ // src/lib/preflight.ts
2
+ import { spawnSync } from "child_process";
3
+ import { readFileSync } from "fs";
4
+ var TMUX_MIN_MAJOR = 3;
5
+ var TMUX_MIN_MINOR = 2;
6
+ function parseTmuxVersion(raw) {
7
+ const text = (raw ?? "").trim();
8
+ if (!text) return null;
9
+ const m = /^tmux\s+(\d+)\.(\d+)([a-z]*)/i.exec(text);
10
+ if (!m) return null;
11
+ const major = Number.parseInt(m[1] ?? "", 10);
12
+ const minor = Number.parseInt(m[2] ?? "", 10);
13
+ if (!Number.isFinite(major) || !Number.isFinite(minor)) return null;
14
+ return { major, minor, suffix: m[3] ?? "", raw: text };
15
+ }
16
+ function tmuxVersionSatisfies(v) {
17
+ if (v.major !== TMUX_MIN_MAJOR) return v.major > TMUX_MIN_MAJOR;
18
+ return v.minor >= TMUX_MIN_MINOR;
19
+ }
20
+ function detectDistroFamily(osReleaseContent) {
21
+ if (!osReleaseContent) return "unknown";
22
+ const fields = /* @__PURE__ */ new Map();
23
+ for (const line of osReleaseContent.split("\n")) {
24
+ const eq = line.indexOf("=");
25
+ if (eq <= 0) continue;
26
+ const key = line.slice(0, eq).trim();
27
+ const value = line.slice(eq + 1).trim().replace(/^["']|["']$/g, "").toLowerCase();
28
+ fields.set(key, value);
29
+ }
30
+ const tokens = [
31
+ ...(fields.get("ID") ?? "").split(/\s+/),
32
+ ...(fields.get("ID_LIKE") ?? "").split(/\s+/)
33
+ ].filter(Boolean);
34
+ for (const t of tokens) {
35
+ if (["debian", "ubuntu", "linuxmint", "pop", "raspbian"].includes(t)) return "debian";
36
+ if (["rhel", "fedora", "centos", "rocky", "almalinux", "amzn"].includes(t)) return "rhel";
37
+ if (["arch", "archarm", "manjaro", "endeavouros"].includes(t)) return "arch";
38
+ if (["suse", "opensuse", "sles", "opensuse-leap", "opensuse-tumbleweed"].includes(t)) return "suse";
39
+ if (["alpine"].includes(t)) return "alpine";
40
+ }
41
+ return "unknown";
42
+ }
43
+ function readOsRelease() {
44
+ try {
45
+ return readFileSync("/etc/os-release", "utf8");
46
+ } catch {
47
+ return null;
48
+ }
49
+ }
50
+ function installCommand(pkg, ctx) {
51
+ if (ctx.platform === "darwin") {
52
+ return pkg === "tmux" ? "brew install tmux" : null;
53
+ }
54
+ if (ctx.platform !== "linux") return null;
55
+ if (pkg === "tmux") {
56
+ switch (ctx.family) {
57
+ case "debian":
58
+ return "sudo apt update && sudo apt install -y tmux";
59
+ case "rhel":
60
+ return "sudo dnf install -y tmux";
61
+ case "arch":
62
+ return "sudo pacman -S --noconfirm tmux";
63
+ case "suse":
64
+ return "sudo zypper install -y tmux";
65
+ case "alpine":
66
+ return "sudo apk add tmux";
67
+ default:
68
+ return null;
69
+ }
70
+ }
71
+ switch (ctx.family) {
72
+ case "debian":
73
+ return "sudo apt install -y libsecret-tools gnome-keyring";
74
+ case "rhel":
75
+ return "sudo dnf install -y libsecret gnome-keyring";
76
+ case "arch":
77
+ return "sudo pacman -S --noconfirm libsecret gnome-keyring";
78
+ case "suse":
79
+ return "sudo zypper install -y libsecret-tools gnome-keyring";
80
+ case "alpine":
81
+ return "sudo apk add libsecret gnome-keyring";
82
+ default:
83
+ return null;
84
+ }
85
+ }
86
+ function assessTmux(probe, ctx) {
87
+ const fix = installCommand("tmux", ctx);
88
+ if (probe.errorCode === "ENOENT") {
89
+ return {
90
+ name: "tmux",
91
+ state: "missing",
92
+ required: true,
93
+ detail: "not found on PATH. exe-os runs every agent in a tmux session, so without it sessions never start \u2014 and the session list reads as empty rather than erroring.",
94
+ fix: fix ?? "install tmux with your package manager"
95
+ };
96
+ }
97
+ if (probe.errorCode) {
98
+ return {
99
+ name: "tmux",
100
+ state: "unknown",
101
+ required: true,
102
+ detail: `could not run \`tmux -V\` (${probe.errorCode}) \u2014 tmux may well be installed; not treating this as missing.`
103
+ };
104
+ }
105
+ const parsed = parseTmuxVersion(probe.stdout ?? "");
106
+ if (!parsed) {
107
+ const seen = (probe.stdout ?? "").trim() || (probe.stderr ?? "").trim();
108
+ return {
109
+ name: "tmux",
110
+ state: "unknown",
111
+ required: true,
112
+ detail: `tmux is installed but \`tmux -V\` printed something unrecognised${seen ? ` (${seen})` : ""} \u2014 assuming it is fine. exe-os needs ${TMUX_MIN_MAJOR}.${TMUX_MIN_MINOR}+ for \`new-session -e\`.`
113
+ };
114
+ }
115
+ if (!tmuxVersionSatisfies(parsed)) {
116
+ return {
117
+ name: "tmux",
118
+ state: "too-old",
119
+ required: true,
120
+ detail: `tmux ${parsed.major}.${parsed.minor}${parsed.suffix} is too old. exe-os passes each agent's environment with \`tmux new-session -e KEY=VAL\`, and \`-e\` was added in tmux ${TMUX_MIN_MAJOR}.${TMUX_MIN_MINOR}. On this version EVERY employee spawn fails with "unknown flag -e".`,
121
+ // apt on Ubuntu 20.04 / Debian 11 will hand back the same too-old build,
122
+ // so quoting the install command here would send the user in a circle.
123
+ fix: ctx.family === "debian" ? "your distro's tmux package is older than 3.2 (Ubuntu 20.04 ships 3.0a, Debian 11 ships 3.1c) \u2014 upgrade the distro (Ubuntu 22.04+/Debian 12+ ship 3.2a+), or build tmux from source" : fix ?? "upgrade tmux to 3.2 or newer"
124
+ };
125
+ }
126
+ return {
127
+ name: "tmux",
128
+ state: "ok",
129
+ required: true,
130
+ detail: `tmux ${parsed.major}.${parsed.minor}${parsed.suffix}`
131
+ };
132
+ }
133
+ function assessKeyring(probe, ctx) {
134
+ if (ctx.platform !== "linux") {
135
+ return { name: "keyring", state: "ok", required: false, detail: "OS keychain is built in on this platform" };
136
+ }
137
+ const fix = installCommand("keyring", ctx);
138
+ if (probe.errorCode === "ENOENT") {
139
+ return {
140
+ name: "keyring",
141
+ state: "missing",
142
+ required: false,
143
+ detail: "`secret-tool` not found, so there is no Secret Service to store the master key in. The key will go in a machine-bound encrypted file instead.",
144
+ fix: fix ?? "install libsecret's CLI tools and a keyring daemon"
145
+ };
146
+ }
147
+ if (probe.errorCode) {
148
+ return {
149
+ name: "keyring",
150
+ state: "unknown",
151
+ required: false,
152
+ detail: `could not run \`secret-tool\` (${probe.errorCode}) \u2014 not drawing a conclusion about key custody from that.`
153
+ };
154
+ }
155
+ if (ctx.serviceReachable === false) {
156
+ return {
157
+ name: "keyring",
158
+ state: "missing",
159
+ required: false,
160
+ detail: "`secret-tool` is installed but no Secret Service is answering (the keyring daemon is not running). The key will go in a machine-bound encrypted file instead.",
161
+ fix: "start your keyring daemon for this session (e.g. `gnome-keyring-daemon --start`), then re-run `exe-os setup`"
162
+ };
163
+ }
164
+ if (ctx.serviceReachable === void 0) {
165
+ return {
166
+ name: "keyring",
167
+ state: "unknown",
168
+ required: false,
169
+ detail: "`secret-tool` is installed; did not probe whether a Secret Service is answering."
170
+ };
171
+ }
172
+ return { name: "keyring", state: "ok", required: false, detail: "Secret Service is reachable" };
173
+ }
174
+ function prereqLines(findings) {
175
+ const notable = findings.filter((f) => f.state !== "ok");
176
+ if (notable.length === 0) return [];
177
+ const out = ["System check:"];
178
+ for (const f of notable) {
179
+ const marker = f.state === "unknown" ? "?" : f.required ? "\u2717" : "\u26A0";
180
+ const label = f.state === "missing" ? f.required ? "MISSING (required)" : "missing" : f.state === "too-old" ? "TOO OLD" : "could not check";
181
+ out.push(` ${marker} ${f.name} \u2014 ${label}`);
182
+ out.push(` ${f.detail}`);
183
+ if (f.fix) out.push(` Fix: ${f.fix}`);
184
+ }
185
+ out.push("");
186
+ out.push(" Setup will continue \u2014 none of the above blocks it. Nothing here is");
187
+ out.push(" a guess about your machine: anything we could not determine is");
188
+ out.push(' reported as "could not check" rather than as a problem.');
189
+ return out;
190
+ }
191
+ function probeCommand(cmd, args, timeoutMs = 3e3) {
192
+ try {
193
+ const r = spawnSync(cmd, args, { encoding: "utf8", timeout: timeoutMs });
194
+ if (r.error) {
195
+ const code = r.error.code;
196
+ return { errorCode: code ?? "ESPAWN", stderr: r.error.message };
197
+ }
198
+ return {
199
+ exitCode: r.status,
200
+ stdout: (r.stdout ?? "").toString(),
201
+ stderr: (r.stderr ?? "").toString()
202
+ };
203
+ } catch (err) {
204
+ return { errorCode: err.code ?? "ESPAWN" };
205
+ }
206
+ }
207
+ function runPrereqPreflight(deps = {}) {
208
+ const platform = deps.platform ?? process.platform;
209
+ const family = deps.family ?? (platform === "linux" ? detectDistroFamily(readOsRelease()) : "unknown");
210
+ const ctx = { platform, family };
211
+ const findings = [
212
+ assessTmux((deps.probeTmux ?? (() => probeCommand("tmux", ["-V"])))(), ctx)
213
+ ];
214
+ if (!deps.skipKeyring) {
215
+ findings.push(
216
+ assessKeyring((deps.probeSecretTool ?? (() => probeCommand("secret-tool", ["--version"])))(), {
217
+ ...ctx,
218
+ serviceReachable: deps.secretServiceReachable
219
+ })
220
+ );
221
+ }
222
+ return findings;
223
+ }
224
+
225
+ export {
226
+ TMUX_MIN_MAJOR,
227
+ TMUX_MIN_MINOR,
228
+ parseTmuxVersion,
229
+ tmuxVersionSatisfies,
230
+ detectDistroFamily,
231
+ readOsRelease,
232
+ installCommand,
233
+ assessTmux,
234
+ assessKeyring,
235
+ prereqLines,
236
+ probeCommand,
237
+ runPrereqPreflight
238
+ };
@@ -0,0 +1,182 @@
1
+ // src/lib/key-dir.ts
2
+ import { statSync, readFileSync } from "fs";
3
+ import { execFileSync } from "child_process";
4
+ import path from "path";
5
+ import os from "os";
6
+ var INSTALL_DIR_NAME = ".exe-os";
7
+ var KeyDirRefusalError = class extends Error {
8
+ code = "EXE_KEY_DIR_REFUSED";
9
+ constructor(message) {
10
+ super(message);
11
+ this.name = "KeyDirRefusalError";
12
+ }
13
+ };
14
+ var KEY_DIR_REFUSAL_HINT = "Run exe-os as the user that owns the install (without sudo), or set EXE_OS_DIR to that install's directory explicitly. exe-os will never adopt another user's key directory.";
15
+ function realOwnerUidOf(p) {
16
+ try {
17
+ return statSync(p).uid;
18
+ } catch {
19
+ return null;
20
+ }
21
+ }
22
+ function resolveKeyDirStrict(ctx) {
23
+ if (ctx.envDir) return ctx.envDir;
24
+ const ownerUidOf = ctx.ownerUidOf ?? realOwnerUidOf;
25
+ if (ctx.uid === 0 && ctx.sudoUser && ctx.sudoHome && typeof ctx.sudoUid === "number") {
26
+ const sudoDir = path.join(ctx.sudoHome, INSTALL_DIR_NAME);
27
+ const owner2 = ownerUidOf(sudoDir);
28
+ if (owner2 !== null) {
29
+ if (owner2 !== ctx.sudoUid && owner2 !== 0) {
30
+ throw new KeyDirRefusalError(
31
+ `refusing to use ${sudoDir}: it is owned by uid ${owner2}, not by SUDO_USER=${ctx.sudoUser} (uid ${ctx.sudoUid}). ${KEY_DIR_REFUSAL_HINT}`
32
+ );
33
+ }
34
+ return sudoDir;
35
+ }
36
+ }
37
+ const selfDir = path.join(ctx.selfHome, INSTALL_DIR_NAME);
38
+ const owner = ownerUidOf(selfDir);
39
+ if (owner !== null && ctx.uid >= 0 && owner !== ctx.uid) {
40
+ throw new KeyDirRefusalError(
41
+ `refusing to use ${selfDir}: it is owned by uid ${owner}, not by the current user (uid ${ctx.uid}). ` + KEY_DIR_REFUSAL_HINT
42
+ );
43
+ }
44
+ return selfDir;
45
+ }
46
+ function parsePasswdLine(line, user) {
47
+ const fields = line.split(":");
48
+ if (fields[0] !== user) return null;
49
+ const uid = Number(fields[2]);
50
+ const home = fields[5]?.trim() ?? "";
51
+ if (!Number.isInteger(uid) || !home) return null;
52
+ return { uid, home };
53
+ }
54
+ function lookupPasswd(user) {
55
+ try {
56
+ const entry = execFileSync("getent", ["passwd", user], { encoding: "utf8", timeout: 3e3 });
57
+ const parsed = parsePasswdLine(entry.trim(), user);
58
+ if (parsed) return parsed;
59
+ } catch {
60
+ }
61
+ try {
62
+ for (const line of readFileSync("/etc/passwd", "utf8").split("\n")) {
63
+ const parsed = parsePasswdLine(line.trim(), user);
64
+ if (parsed) return parsed;
65
+ }
66
+ } catch {
67
+ }
68
+ if (process.platform === "darwin") {
69
+ try {
70
+ const home = execFileSync("dscl", [".", "-read", `/Users/${user}`, "NFSHomeDirectory"], {
71
+ encoding: "utf8",
72
+ timeout: 3e3
73
+ }).split(":").slice(1).join(":").trim();
74
+ const uid = Number(
75
+ execFileSync("id", ["-u", user], { encoding: "utf8", timeout: 3e3 }).trim()
76
+ );
77
+ if (home && Number.isInteger(uid)) return { uid, home };
78
+ } catch {
79
+ }
80
+ }
81
+ return null;
82
+ }
83
+ var emittedNotices = /* @__PURE__ */ new Set();
84
+ function noticeOnce(key, message) {
85
+ if (emittedNotices.has(key)) return;
86
+ emittedNotices.add(key);
87
+ process.stderr.write(message.endsWith("\n") ? message : `${message}
88
+ `);
89
+ }
90
+ function describeInstallAmbiguity(ctx, chosen) {
91
+ if (ctx.envDir) return null;
92
+ const ownerUidOf = ctx.ownerUidOf ?? realOwnerUidOf;
93
+ const candidates = [];
94
+ if (ctx.sudoHome) candidates.push(path.join(ctx.sudoHome, INSTALL_DIR_NAME));
95
+ candidates.push(path.join(ctx.selfHome, INSTALL_DIR_NAME));
96
+ const other = candidates.find((c) => c !== chosen && ownerUidOf(c) !== null);
97
+ if (!other) return null;
98
+ return `[exe-os] Two exe-os installs exist on this host. Using: ${chosen}
99
+ [exe-os] NOT using: ${other}
100
+ [exe-os] Both the encryption key and the memory database come from the install above. If that is the wrong one, set EXE_OS_DIR=${other} explicitly (or run without sudo).`;
101
+ }
102
+ function currentKeyDirContext() {
103
+ const envDir = process.env.EXE_OS_DIR || process.env.EXE_MEM_DIR || void 0;
104
+ const uid = typeof process.getuid === "function" ? process.getuid() : -1;
105
+ let selfHome = os.homedir();
106
+ if (uid === 0) {
107
+ let passwdHome = "";
108
+ try {
109
+ passwdHome = os.userInfo().homedir;
110
+ } catch {
111
+ passwdHome = "";
112
+ }
113
+ selfHome = passwdHome || "/root";
114
+ }
115
+ const ctx = {
116
+ envDir,
117
+ uid,
118
+ selfHome,
119
+ // Recorded, never read by the resolver — see KeyDirContext.homeBase.
120
+ homeBase: process.platform === "darwin" ? "/Users" : "/home"
121
+ };
122
+ if (uid === 0) {
123
+ const sudoUser = process.env.SUDO_USER ?? "";
124
+ if (sudoUser) {
125
+ const entry = lookupPasswd(sudoUser);
126
+ if (entry) {
127
+ ctx.sudoUser = sudoUser;
128
+ ctx.sudoHome = entry.home;
129
+ ctx.sudoUid = entry.uid;
130
+ } else {
131
+ noticeOnce(
132
+ `sudo-user-unresolved:${sudoUser}`,
133
+ `[exe-os] Running as root under sudo, but user "${sudoUser}" could not be resolved in the passwd database (getent, /etc/passwd${process.platform === "darwin" ? ", dscl" : ""} all failed).
134
+ [exe-os] Falling back to root's own install at ${path.join(selfHome, INSTALL_DIR_NAME)}. Set EXE_OS_DIR explicitly if that is not the install you meant.`
135
+ );
136
+ }
137
+ }
138
+ }
139
+ return ctx;
140
+ }
141
+ function resolveInstallDir() {
142
+ const ctx = currentKeyDirContext();
143
+ const dir = resolveKeyDirStrict(ctx);
144
+ const ambiguity = describeInstallAmbiguity(ctx, dir);
145
+ if (ambiguity) noticeOnce(`ambiguous:${dir}`, ambiguity);
146
+ if (ctx.envDir && ctx.uid >= 0) {
147
+ const owner = (ctx.ownerUidOf ?? realOwnerUidOf)(ctx.envDir);
148
+ if (owner !== null && owner !== ctx.uid) {
149
+ noticeOnce(
150
+ `env-dir-foreign:${ctx.envDir}`,
151
+ `[exe-os] WARNING: ${ctx.envDir} is owned by uid ${owner}, not by the current user (uid ${ctx.uid}).
152
+ [exe-os] It was used because EXE_OS_DIR names it explicitly. Everything in it \u2014 the master key and its recovery phrase \u2014 belongs to that user, not to you.`
153
+ );
154
+ }
155
+ }
156
+ return dir;
157
+ }
158
+ var REFUSED_DIR_MARKER = "exe-os-REFUSED";
159
+ function refusedQuarantineDir(uid) {
160
+ return path.join(os.tmpdir(), `${REFUSED_DIR_MARKER}-${uid}-${process.pid}`);
161
+ }
162
+ function isRefusedQuarantinePath(p) {
163
+ return p.includes(REFUSED_DIR_MARKER);
164
+ }
165
+ function getKeyDirSafe() {
166
+ try {
167
+ return { dir: resolveInstallDir(), error: null };
168
+ } catch (err) {
169
+ return { dir: null, error: err instanceof Error ? err.message : String(err) };
170
+ }
171
+ }
172
+
173
+ export {
174
+ KeyDirRefusalError,
175
+ KEY_DIR_REFUSAL_HINT,
176
+ resolveKeyDirStrict,
177
+ currentKeyDirContext,
178
+ resolveInstallDir,
179
+ refusedQuarantineDir,
180
+ isRefusedQuarantinePath,
181
+ getKeyDirSafe
182
+ };
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  clean,
3
3
  stableId
4
- } from "./chunk-BGYCUZYK.js";
4
+ } from "./chunk-YAZ5ECEG.js";
5
5
 
6
6
  // src/lib/reflection-checkpoints.ts
7
7
  function parsePayload(payload) {
@@ -8,11 +8,11 @@ import {
8
8
  import {
9
9
  loadLicense,
10
10
  readCachedLicenseToken
11
- } from "./chunk-2OVTGZYH.js";
11
+ } from "./chunk-HSKABJE6.js";
12
12
  import {
13
13
  EXE_AI_DIR,
14
14
  loadConfig
15
- } from "./chunk-BCZF3AGJ.js";
15
+ } from "./chunk-BRIZ6OZ3.js";
16
16
 
17
17
  // src/bin/exe-support.ts
18
18
  import { mkdirSync, readFileSync, unlinkSync, writeFileSync } from "fs";
@@ -263,7 +263,7 @@ async function runRegistryProxy(options = registryProxyOptionsFromEnv()) {
263
263
  await new Promise((resolve) => server.listen(options.port, options.host, resolve));
264
264
  console.log(`exe-registry-proxy listening on ${options.host ?? "0.0.0.0"}:${options.port}`);
265
265
  console.log(`proxying /v2/${options.allowedNamespace ?? "askexe"}/* -> ${options.upstream ?? "https://ghcr.io"}`);
266
- const { licenseSyncConfigFromEnv, startLicenseSyncScheduler } = await import("./license-sync-XFDOXL3Z.js");
266
+ const { licenseSyncConfigFromEnv, startLicenseSyncScheduler } = await import("./license-sync-VBJCXBAP.js");
267
267
  const syncConfig = licenseSyncConfigFromEnv();
268
268
  if (syncConfig) {
269
269
  startLicenseSyncScheduler(syncConfig);
@@ -9,7 +9,7 @@ import {
9
9
  } from "./chunk-WNBZJSQT.js";
10
10
  import {
11
11
  EXE_AI_DIR
12
- } from "./chunk-BCZF3AGJ.js";
12
+ } from "./chunk-BRIZ6OZ3.js";
13
13
  import {
14
14
  atomicWriteJsonSync,
15
15
  ensurePrivateDirSync
@@ -11,7 +11,7 @@ import {
11
11
  buildSystemStateExclusionFilter,
12
12
  buildWikiScopeFilter,
13
13
  searchMemories
14
- } from "./chunk-W5YV2PZE.js";
14
+ } from "./chunk-DKRDU2AX.js";
15
15
  import {
16
16
  blobToVector
17
17
  } from "./chunk-OTVEIJUQ.js";
@@ -24,7 +24,7 @@ import {
24
24
  } from "./chunk-GJV3WDWM.js";
25
25
  import {
26
26
  getClient
27
- } from "./chunk-EA5FVACM.js";
27
+ } from "./chunk-HLU52KTO.js";
28
28
 
29
29
  // src/lib/memory-reads.ts
30
30
  import crypto from "crypto";
@@ -566,7 +566,7 @@ async function hybridSearch(queryText, agentId, options) {
566
566
  let rerankerAvailable = false;
567
567
  if (process.env.EXE_IS_DAEMON === "1") {
568
568
  try {
569
- const { isRerankerAvailable } = await import("./reranker-YVTLJCFC.js");
569
+ const { isRerankerAvailable } = await import("./reranker-NUIGAPA3.js");
570
570
  rerankerAvailable = isRerankerAvailable();
571
571
  } catch {
572
572
  }
@@ -635,7 +635,7 @@ async function hybridSearch(queryText, agentId, options) {
635
635
  ]).catch(() => []),
636
636
  includeStructuredCards ? (async () => {
637
637
  try {
638
- const { searchMemoryCards } = await import("./memory-cards-KG4TPNKK.js");
638
+ const { searchMemoryCards } = await import("./memory-cards-4EXX3BQS.js");
639
639
  return await searchMemoryCards(effectiveQuery, agentId, fetchOptions);
640
640
  } catch {
641
641
  return [];
@@ -644,7 +644,7 @@ async function hybridSearch(queryText, agentId, options) {
644
644
  // Reflection insights: patterns, contradictions, summaries across sessions
645
645
  includeStructuredCards ? (async () => {
646
646
  try {
647
- const { searchReflections } = await import("./memory-reflection-EQC4FXSW.js");
647
+ const { searchReflections } = await import("./memory-reflection-V2SNAUIB.js");
648
648
  const insights = await searchReflections(effectiveQuery, agentId, 5, {
649
649
  includeArchived: options?.includeArchived
650
650
  });
@@ -745,7 +745,7 @@ async function hybridSearch(queryText, agentId, options) {
745
745
  let entityBoostRan = false;
746
746
  if (merged.length > 0) {
747
747
  try {
748
- const { applyEntityBoost } = await import("./entity-boost-HLFG2CH3.js");
748
+ const { applyEntityBoost } = await import("./entity-boost-VXXED26D.js");
749
749
  const boosted = await applyEntityBoost(merged, effectiveQuery, getClient());
750
750
  merged = boosted.results;
751
751
  graphContextMap = boosted.graphContext;
@@ -769,7 +769,7 @@ async function hybridSearch(queryText, agentId, options) {
769
769
  try {
770
770
  let rerankedRecords;
771
771
  if (graphContextMap.size > 0) {
772
- const { rerankWithContext } = await import("./reranker-YVTLJCFC.js");
772
+ const { rerankWithContext } = await import("./reranker-NUIGAPA3.js");
773
773
  const candidates = merged.map((m) => ({
774
774
  text: m.raw_text,
775
775
  context: graphContextMap.get(m.id)
@@ -777,7 +777,7 @@ async function hybridSearch(queryText, agentId, options) {
777
777
  const scored = await rerankWithContext(effectiveQuery, candidates, rerankReturnLimit);
778
778
  rerankedRecords = scored.map((s) => merged[s.index]);
779
779
  } else {
780
- const { rerank } = await import("./reranker-YVTLJCFC.js");
780
+ const { rerank } = await import("./reranker-NUIGAPA3.js");
781
781
  rerankedRecords = await rerank(effectiveQuery, merged, rerankReturnLimit);
782
782
  }
783
783
  if (rerankedRecords.length > 0) {
@@ -1191,7 +1191,7 @@ async function lightweightSearch(queryText, agentId, options) {
1191
1191
  }
1192
1192
  if (results.length >= 2) {
1193
1193
  try {
1194
- const { recordCoActivations } = await import("./co-activation-XNBLOGK3.js");
1194
+ const { recordCoActivations } = await import("./co-activation-UEEDCM5U.js");
1195
1195
  const ids = results.slice(0, 10).map((r) => r.id);
1196
1196
  void recordCoActivations(ids).catch((e) => {
1197
1197
  try {
@@ -1207,7 +1207,7 @@ async function lightweightSearch(queryText, agentId, options) {
1207
1207
  }
1208
1208
  if (options?.includeStructuredCards !== true) return results;
1209
1209
  try {
1210
- const { searchMemoryCards } = await import("./memory-cards-KG4TPNKK.js");
1210
+ const { searchMemoryCards } = await import("./memory-cards-4EXX3BQS.js");
1211
1211
  const cardResults = await searchMemoryCards(queryText, agentId, options);
1212
1212
  if (cardResults.length > 0) {
1213
1213
  return rrfMergeMulti([results, cardResults], limit, RRF_K, [1, 0.85]);
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  sendMessage
3
- } from "./chunk-SNWV44E5.js";
3
+ } from "./chunk-DSKEYEL2.js";
4
4
  import {
5
5
  getActiveAgent
6
- } from "./chunk-WRP5AG4D.js";
6
+ } from "./chunk-23KWUA7Z.js";
7
7
 
8
8
  // src/mcp/tools/send-message.ts
9
9
  import { z } from "zod";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  getIdentity,
3
3
  loadEmployeesSync
4
- } from "./chunk-EA5FVACM.js";
4
+ } from "./chunk-HLU52KTO.js";
5
5
 
6
6
  // src/lib/drift-probes.ts
7
7
  var DRIFT_THRESHOLD = 80;
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  embed
3
- } from "./chunk-I5AVZOL2.js";
3
+ } from "./chunk-3YBJ36UX.js";
4
4
  import {
5
5
  reserveVersions,
6
6
  vectorToBlob
7
- } from "./chunk-W5YV2PZE.js";
7
+ } from "./chunk-DKRDU2AX.js";
8
8
  import {
9
9
  getClient
10
- } from "./chunk-EA5FVACM.js";
10
+ } from "./chunk-HLU52KTO.js";
11
11
 
12
12
  // src/lib/documents.ts
13
13
  import crypto from "crypto";
@@ -270,7 +270,7 @@ async function ingestDocument(input) {
270
270
  await client.batch([documentStmt, ...chunkStmts], "write");
271
271
  const embedded = vectors.filter((v) => v !== null).length;
272
272
  const originalTexts = input.chunks.map((c) => c.text);
273
- import("./doc-graph-extractor-FNCYPFKY.js").then(
273
+ import("./doc-graph-extractor-RR2VSO4W.js").then(
274
274
  ({ extractAndStoreDocumentGraph }) => extractAndStoreDocumentGraph(documentId, originalTexts)
275
275
  ).catch((err) => {
276
276
  process.stderr.write(