@askexenow/exe-os 0.9.384 → 0.9.389

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 (481) hide show
  1. package/deploy/compose/.env.askexe-control-plane.example +6 -0
  2. package/deploy/compose/.env.customer.example +1 -1
  3. package/deploy/compose/.env.example +1 -1
  4. package/deploy/compose/docker-compose.yml +16 -0
  5. package/deploy/compose/generate-env.ts +1 -1
  6. package/deploy/compose/sso-edge/sso-redirect.conf +18 -3
  7. package/deploy/stack-manifests/v0.9.json +1160 -1
  8. package/dist/.dist-verified.json +3 -3
  9. package/dist/{active-agent-F5V4E4UL.js → active-agent-RZ24KSJN.js} +8 -6
  10. package/dist/{active-agent-YTBB4ZQM.js → active-agent-YWSWPIEA.js} +8 -6
  11. package/dist/{agent-defs-generator-7TFISIJQ.js → agent-defs-generator-GY3UBREJ.js} +8 -6
  12. package/dist/{agent-heartbeat-CQPGJIFF.js → agent-heartbeat-GUVUUQVM.js} +1 -1
  13. package/dist/{agent-loop-EZ7LDAGD.js → agent-loop-HPNCH3HK.js} +1 -1
  14. package/dist/{agentic-ontology-XVTUVV7W.js → agentic-ontology-RHYNXEKE.js} +1 -1
  15. package/dist/{artifact-backup-TF6YWQT2.js → artifact-backup-HGUFSIJH.js} +19 -6
  16. package/dist/{backfill-metadata-J6MXIDCW.js → backfill-metadata-XLFASEOD.js} +11 -9
  17. package/dist/{backup-verify-6DVBQMDP.js → backup-verify-TUQEICWA.js} +1 -1
  18. package/dist/{behavior-injection-XDA7ZCYN.js → behavior-injection-GXO7ERGN.js} +14 -12
  19. package/dist/{behavior-promotion-4VLQ7LXK.js → behavior-promotion-V63WIZ4N.js} +13 -11
  20. package/dist/{behaviors-SCCZP7RZ.js → behaviors-RMLDPLOF.js} +18 -11
  21. package/dist/bin/agentic-ontology-backfill.js +12 -10
  22. package/dist/bin/agentic-reflection-backfill.js +13 -11
  23. package/dist/bin/agentic-semantic-label.js +12 -10
  24. package/dist/bin/backfill-conversations.js +11 -9
  25. package/dist/bin/backfill-responses.js +11 -9
  26. package/dist/bin/backfill-vectors.js +13 -11
  27. package/dist/bin/bulk-sync-postgres.js +20 -18
  28. package/dist/bin/cc-doctor.js +15 -13
  29. package/dist/bin/cleanup-stale-review-tasks.js +44 -32
  30. package/dist/bin/cli.js +109 -30
  31. package/dist/bin/customer-readiness.js +55 -25
  32. package/dist/bin/deferred-daemon-restart.js +111 -108
  33. package/dist/bin/exe-actions.js +7 -1
  34. package/dist/bin/exe-agent-config.js +8 -6
  35. package/dist/bin/exe-agent.js +18 -16
  36. package/dist/bin/exe-assign.js +13 -11
  37. package/dist/bin/exe-boot.js +49 -47
  38. package/dist/bin/exe-call.js +9 -7
  39. package/dist/bin/exe-cicd.js +19 -8
  40. package/dist/bin/exe-cloud.js +59 -25
  41. package/dist/bin/exe-config-dump.js +8 -6
  42. package/dist/bin/exe-dispatch.js +23 -21
  43. package/dist/bin/exe-doctor.js +11 -8
  44. package/dist/bin/exe-export-behaviors.js +16 -14
  45. package/dist/bin/exe-forget.js +14 -12
  46. package/dist/bin/exe-gateway.js +12 -10
  47. package/dist/bin/exe-grant.js +6 -6
  48. package/dist/bin/exe-healthcheck.js +15 -13
  49. package/dist/bin/exe-heartbeat.js +28 -26
  50. package/dist/bin/exe-kill.js +28 -26
  51. package/dist/bin/exe-launch-agent.js +35 -33
  52. package/dist/bin/exe-mcp.js +9 -7
  53. package/dist/bin/exe-memory-reads.js +11 -9
  54. package/dist/bin/exe-new-employee.js +13 -11
  55. package/dist/bin/exe-os-mcp-proxy.js +9 -7
  56. package/dist/bin/exe-pending-messages.js +23 -21
  57. package/dist/bin/exe-pending-notifications.js +22 -20
  58. package/dist/bin/exe-pending-reviews.js +23 -21
  59. package/dist/bin/exe-preflight.js +1 -1
  60. package/dist/bin/exe-rename.js +9 -7
  61. package/dist/bin/exe-review.js +59 -55
  62. package/dist/bin/exe-search-quality.js +16 -3
  63. package/dist/bin/exe-search.js +13 -11
  64. package/dist/bin/exe-session-cleanup.js +29 -27
  65. package/dist/bin/exe-settings.js +22 -20
  66. package/dist/bin/exe-start-codex.js +23 -21
  67. package/dist/bin/exe-start-opencode.js +21 -19
  68. package/dist/bin/exe-status.js +24 -22
  69. package/dist/bin/exe-support.js +3 -3
  70. package/dist/bin/exe-team.js +8 -6
  71. package/dist/bin/exe-verify-running-images.js +644 -17
  72. package/dist/bin/git-sweep.js +24 -22
  73. package/dist/bin/graph-backfill.js +12 -10
  74. package/dist/bin/graph-export.js +12 -10
  75. package/dist/bin/hooks-cli.js +4 -4
  76. package/dist/bin/import-history.js +16 -14
  77. package/dist/bin/install.js +113 -110
  78. package/dist/bin/intercom-check.js +5 -5
  79. package/dist/bin/mcp-sessions.js +2 -2
  80. package/dist/bin/orchestration-metrics.js +8 -6
  81. package/dist/bin/postgres-agentic-reflection-backfill.js +2 -2
  82. package/dist/bin/postgres-agentic-semantic-backfill.js +1 -1
  83. package/dist/bin/pre-build-guard.js +55 -16
  84. package/dist/bin/pre-publish.js +1 -1
  85. package/dist/bin/prune-orphan-chunks.js +154 -28
  86. package/dist/bin/reconcile-backlog.js +5 -3
  87. package/dist/bin/registry-proxy.js +1 -1
  88. package/dist/bin/repair-document-chunks.js +11 -9
  89. package/dist/bin/scan-tasks.js +23 -21
  90. package/dist/bin/setup.js +3 -3
  91. package/dist/bin/shard-migrate.js +12 -10
  92. package/dist/bin/stack-update.js +622 -43
  93. package/dist/bin/verify-stack.js +2 -2
  94. package/dist/bin/vps-health-gate.js +1 -1
  95. package/dist/{boot-generation-Q7LGQ3AO.js → boot-generation-VCQXVYGT.js} +7 -5
  96. package/dist/{boot-review-sections-G5774FR5.js → boot-review-sections-3QO6Q7MP.js} +21 -19
  97. package/dist/{branch-hygiene-44WLSOZR.js → branch-hygiene-DDXXI6ZA.js} +59 -21
  98. package/dist/bug-landed-reconciler-TQVNOUCU.js +353 -0
  99. package/dist/build-manifest.json +1269 -1194
  100. package/dist/{capability-cards-I3RHCF4F.js → capability-cards-XPDLT6LU.js} +6 -4
  101. package/dist/{capacity-monitor-7I7GDONU.js → capacity-monitor-N3AW242L.js} +23 -21
  102. package/dist/{catchup-brief-3T5PARIR.js → catchup-brief-3PKX7FUP.js} +29 -27
  103. package/dist/{chunk-C5ISP5FO.js → chunk-2BKJAOO4.js} +11 -1
  104. package/dist/{chunk-JJTPPAZY.js → chunk-2CUQHG6H.js} +1609 -1356
  105. package/dist/{chunk-HU3VD4MQ.js → chunk-2Q2GGYBX.js} +1 -1
  106. package/dist/{chunk-CHIUS5QB.js → chunk-36LMIOVU.js} +9 -9
  107. package/dist/{chunk-46VSBDUW.js → chunk-3DCBDG4T.js} +2 -2
  108. package/dist/{chunk-W3KPQE7H.js → chunk-3GL3E4TD.js} +3 -3
  109. package/dist/{chunk-GL47M7NY.js → chunk-3UD3OF3X.js} +202 -117
  110. package/dist/{chunk-WNBZJSQT.js → chunk-3VW5ZP2F.js} +1 -1
  111. package/dist/{chunk-JDDM6C57.js → chunk-3X74IQBU.js} +1 -1
  112. package/dist/{chunk-NVFNADTX.js → chunk-3ZL4MDQ6.js} +18 -4
  113. package/dist/{chunk-R5E7WNAC.js → chunk-4ESNDGMB.js} +3 -3
  114. package/dist/{chunk-CYCIX7AW.js → chunk-4FLLIQRQ.js} +2 -2
  115. package/dist/{chunk-3RGTLZNO.js → chunk-4GAKF7KR.js} +99 -74
  116. package/dist/{chunk-RVO5O5SR.js → chunk-4S3A52AV.js} +38 -10
  117. package/dist/{chunk-7J2ZQ4XN.js → chunk-4VQ3QR6B.js} +29 -28
  118. package/dist/{chunk-MROSARM5.js → chunk-5BJBTFFQ.js} +7 -1
  119. package/dist/chunk-5LQZABW5.js +6 -0
  120. package/dist/chunk-5ONMHTNI.js +236 -0
  121. package/dist/{chunk-APL7HUE3.js → chunk-5QQJUO3F.js} +200 -31
  122. package/dist/{chunk-UOPCVFVR.js → chunk-5RK75SWH.js} +205 -278
  123. package/dist/{chunk-T5FEAQES.js → chunk-5TYJYGS5.js} +1 -1
  124. package/dist/{chunk-P3QQ52QK.js → chunk-5U6EOTZV.js} +3 -3
  125. package/dist/{chunk-ALRHGEAJ.js → chunk-637FL62O.js} +1 -1
  126. package/dist/{chunk-PUBA5B4M.js → chunk-6L4VIYLZ.js} +33 -19
  127. package/dist/{chunk-VF2KRROX.js → chunk-754P2UXM.js} +1 -1
  128. package/dist/{chunk-CM7N5MBY.js → chunk-7FZG7WP4.js} +5 -5
  129. package/dist/{chunk-NYLJQ2M2.js → chunk-7NEBFB3L.js} +4 -4
  130. package/dist/{chunk-E7C2WNR5.js → chunk-AEIOFFFX.js} +5 -5
  131. package/dist/{chunk-VOVFUKEB.js → chunk-AIB2EWO2.js} +5 -5
  132. package/dist/{chunk-EGOEB42T.js → chunk-AP2C4OGS.js} +3 -3
  133. package/dist/{chunk-MPZ2AVNS.js → chunk-ATNV3BVZ.js} +1 -1
  134. package/dist/{chunk-F4BBMIPG.js → chunk-B4XJQBQB.js} +2 -2
  135. package/dist/{chunk-BPVFZ6Q4.js → chunk-B5EGDNG6.js} +2 -2
  136. package/dist/{chunk-AGC2V7JS.js → chunk-B6CBN6EF.js} +1 -1
  137. package/dist/{chunk-KTKIFXIP.js → chunk-B7FDRN7G.js} +1 -1
  138. package/dist/{chunk-C5HUMAA7.js → chunk-B7WVYLAQ.js} +67 -15
  139. package/dist/chunk-BGVP5RMT.js +185 -0
  140. package/dist/{chunk-FVLNNNH6.js → chunk-BNI4LIU5.js} +35 -4
  141. package/dist/{chunk-P4XLIPB7.js → chunk-BU5JRLZT.js} +1 -1
  142. package/dist/{chunk-PHUHIVD5.js → chunk-C6U7XWOC.js} +34 -5
  143. package/dist/chunk-C7GHNJPW.js +8 -0
  144. package/dist/{chunk-4AR5XKCH.js → chunk-CL2MU3OX.js} +1 -1
  145. package/dist/{chunk-ZPP63JSQ.js → chunk-CL3AB7Z2.js} +1 -1
  146. package/dist/{chunk-FHIFTSPL.js → chunk-CP7XUSOF.js} +8 -3
  147. package/dist/{chunk-3OX34OC3.js → chunk-CUDNRHHT.js} +30 -10
  148. package/dist/chunk-CYUUNIEL.js +21 -0
  149. package/dist/{chunk-P2UY34XE.js → chunk-D4C57S2H.js} +5 -5
  150. package/dist/{chunk-XSUALA32.js → chunk-DDYFNBYV.js} +3 -3
  151. package/dist/{chunk-LSNBTGW4.js → chunk-DPYZW42H.js} +1 -1
  152. package/dist/{chunk-FMIYFHLE.js → chunk-E2PRXEZK.js} +9 -3
  153. package/dist/{chunk-L63V25HS.js → chunk-E54SPUYJ.js} +3 -3
  154. package/dist/{chunk-DMUOTCDN.js → chunk-E5CKRHIZ.js} +1 -1
  155. package/dist/{chunk-BV2IET6B.js → chunk-EVMOKRBC.js} +15 -2
  156. package/dist/{chunk-YLFCH3VA.js → chunk-FDWI3T6I.js} +133 -31
  157. package/dist/{chunk-PWC3C5ME.js → chunk-FNJTCJGY.js} +4 -4
  158. package/dist/{chunk-TNS63ATU.js → chunk-FWRPDSO3.js} +350 -50
  159. package/dist/{chunk-JA3Y5TV6.js → chunk-GDLB6BPM.js} +141 -74
  160. package/dist/{chunk-IGJMS7C5.js → chunk-GOVGG7HU.js} +2 -2
  161. package/dist/{chunk-MB47DRF5.js → chunk-GP7CTIUK.js} +2 -2
  162. package/dist/{chunk-L5EPGGDP.js → chunk-GWAN2BDB.js} +4 -4
  163. package/dist/{chunk-YRQ26MNP.js → chunk-H3YF7X4J.js} +12 -5
  164. package/dist/{chunk-VLBHZ6TF.js → chunk-H6PLIFUE.js} +2 -2
  165. package/dist/{chunk-GSLFH4AI.js → chunk-HRNM3N4Y.js} +6 -15
  166. package/dist/chunk-IG2ISRTF.js +48 -0
  167. package/dist/{chunk-MWEIBVBS.js → chunk-IJCWBYA5.js} +14 -1
  168. package/dist/{chunk-NKEFYE4R.js → chunk-IPTUKX3N.js} +1 -1
  169. package/dist/{chunk-RB3J2WYQ.js → chunk-IVE7H6KA.js} +1 -1
  170. package/dist/{chunk-HA63SH5W.js → chunk-IWY2OGQG.js} +1 -1
  171. package/dist/{chunk-BQEZPRUC.js → chunk-IZWMWJZT.js} +64 -46
  172. package/dist/{chunk-AHESD3KW.js → chunk-J4UVI652.js} +1 -1
  173. package/dist/{chunk-PLII76NJ.js → chunk-JBUCA4OX.js} +33 -6
  174. package/dist/{chunk-2PZTMSMG.js → chunk-JOF4HQDF.js} +5 -5
  175. package/dist/{chunk-OBBO6EJR.js → chunk-JQN3QGSF.js} +1 -1
  176. package/dist/{chunk-P4PIZOL2.js → chunk-JWYIH5DR.js} +3 -3
  177. package/dist/{chunk-3XY57PKT.js → chunk-KZLKE7I3.js} +210 -48
  178. package/dist/{chunk-DYVLEMKS.js → chunk-L3GXMYBK.js} +1 -1
  179. package/dist/{chunk-72V3S44T.js → chunk-LUA4SLJY.js} +46 -19
  180. package/dist/{chunk-ZT4LFTUJ.js → chunk-LW3JCBXP.js} +20 -3
  181. package/dist/{chunk-YLB365YX.js → chunk-M5XHN4OM.js} +3 -3
  182. package/dist/{chunk-VHHX4UCP.js → chunk-MDTWARSF.js} +22 -93
  183. package/dist/{chunk-JFJP6ATJ.js → chunk-MWKXQSF6.js} +3 -2
  184. package/dist/{chunk-VJEJ7JNB.js → chunk-N32DVIKY.js} +1 -1
  185. package/dist/{chunk-MUCNYSJP.js → chunk-NRLJOV7M.js} +32 -4
  186. package/dist/{chunk-PL4CFSQ7.js → chunk-NSXJOSH7.js} +1 -1
  187. package/dist/{chunk-NF5FOSLD.js → chunk-NVTG66CK.js} +1 -1
  188. package/dist/chunk-O45GBJEH.js +1500 -0
  189. package/dist/{chunk-4AAMFWJT.js → chunk-OHZSTZXN.js} +4 -2
  190. package/dist/chunk-OSIS7ZQW.js +344 -0
  191. package/dist/{chunk-E3ZM32LF.js → chunk-P22VFGFK.js} +14 -5
  192. package/dist/{chunk-KILR4FBR.js → chunk-PAFLR7WD.js} +3 -3
  193. package/dist/{chunk-R3CZWFFC.js → chunk-PEYQ6MWO.js} +15 -3
  194. package/dist/{chunk-RDWIKDMY.js → chunk-PZR54BEI.js} +8 -20
  195. package/dist/{chunk-2FKU4ZEO.js → chunk-QDBKMEYY.js} +9 -9
  196. package/dist/{chunk-7UHZBVP3.js → chunk-QDVLVLXP.js} +97 -31
  197. package/dist/{chunk-PRDDPQLC.js → chunk-QLXEQRHD.js} +5 -5
  198. package/dist/{chunk-MUAWCFW6.js → chunk-QNPDXV5V.js} +5 -2
  199. package/dist/{chunk-LR5O2XWZ.js → chunk-QUZYLDNJ.js} +5 -5
  200. package/dist/chunk-RBQUXHYK.js +48 -0
  201. package/dist/{chunk-3SUPEE6H.js → chunk-RDMBSHGG.js} +3 -3
  202. package/dist/{chunk-I5XIW2BP.js → chunk-RGUM474V.js} +7 -7
  203. package/dist/{chunk-OAFENIHN.js → chunk-RJ67XAJU.js} +76 -28
  204. package/dist/{chunk-LFUBEHFW.js → chunk-RT57D7C4.js} +39 -1
  205. package/dist/{chunk-MKM6D7JM.js → chunk-RWG7DLOG.js} +42 -5
  206. package/dist/{chunk-P3UX5EH4.js → chunk-RWKAHHIX.js} +3 -3
  207. package/dist/{chunk-XEBKIWI7.js → chunk-RYNT3HB7.js} +12 -12
  208. package/dist/{chunk-EUGEFBGV.js → chunk-S2V272KJ.js} +3 -3
  209. package/dist/{chunk-W6BZ4UGA.js → chunk-SGYEM2PD.js} +1 -1
  210. package/dist/{chunk-VROK4X2L.js → chunk-SJP57MQM.js} +1 -1
  211. package/dist/{chunk-5MVKTNZP.js → chunk-SL4JWAMQ.js} +54 -4
  212. package/dist/{chunk-MOANZQXF.js → chunk-SLMKLEU6.js} +1 -1
  213. package/dist/{chunk-RZN2LEAK.js → chunk-SQA7XCYI.js} +3 -3
  214. package/dist/{chunk-4YNA3CM6.js → chunk-SSFS4NCH.js} +262 -56
  215. package/dist/{chunk-6FIC57PH.js → chunk-T4P2G3PO.js} +1 -1
  216. package/dist/{chunk-5U2IJBFV.js → chunk-TA3B4N24.js} +1 -1
  217. package/dist/{chunk-ZOTTYCP5.js → chunk-TEWWBVQP.js} +40 -4
  218. package/dist/{chunk-SDYWZRPN.js → chunk-TLSFGXXE.js} +1 -1
  219. package/dist/{chunk-L3VUW5M4.js → chunk-TQS2YHLB.js} +1 -1
  220. package/dist/{chunk-KXYKSLW4.js → chunk-TU4M757W.js} +399 -116
  221. package/dist/{chunk-MC4IM2CC.js → chunk-TYD4F4XU.js} +6 -6
  222. package/dist/{chunk-TKS5GMYA.js → chunk-U44Y7RC7.js} +2 -0
  223. package/dist/{chunk-B7AMNZTC.js → chunk-UKBPEEEQ.js} +2 -2
  224. package/dist/{chunk-ZBPZDADW.js → chunk-UWVXQEQQ.js} +467 -78
  225. package/dist/{chunk-P2VVMGMI.js → chunk-V4WH3FV7.js} +35 -16
  226. package/dist/{worktree-ownership-guard-O6JQF2CL.js → chunk-V6F4I2XY.js} +13 -14
  227. package/dist/{chunk-JFTUAV4J.js → chunk-VBKUESIW.js} +1 -1
  228. package/dist/{chunk-AZSTIAVL.js → chunk-VBPYYJPC.js} +1 -1
  229. package/dist/{chunk-LKTN22L6.js → chunk-VIP4LKLO.js} +57 -24
  230. package/dist/{chunk-L5CGXEZC.js → chunk-WAAGVFFN.js} +63 -71
  231. package/dist/{chunk-D3LXVAIQ.js → chunk-WC7AE3PT.js} +244 -103
  232. package/dist/{chunk-EOTZSAQL.js → chunk-WUCUDHKR.js} +1 -1
  233. package/dist/{chunk-VF3BZOZK.js → chunk-X7HZHKY4.js} +50 -3
  234. package/dist/{chunk-LFBLQE2P.js → chunk-XCAKYVKI.js} +1 -1
  235. package/dist/{chunk-UXN4BICC.js → chunk-XMX5J52Z.js} +1 -1
  236. package/dist/{chunk-6YDY6ZTD.js → chunk-XTCXGWTV.js} +9 -4
  237. package/dist/{chunk-XUZK23V7.js → chunk-XW2FW6LS.js} +2 -2
  238. package/dist/{chunk-CH7BUBP3.js → chunk-XWVHUDEK.js} +5 -4
  239. package/dist/{chunk-S26CV7BE.js → chunk-YA5LK6KB.js} +45 -8
  240. package/dist/{chunk-ELCRJGCH.js → chunk-YMRQIENV.js} +2 -2
  241. package/dist/{chunk-QNZ4562V.js → chunk-Z3LXWCB7.js} +1 -1
  242. package/dist/{chunk-EYMFVITZ.js → chunk-Z7I6NQMA.js} +2 -2
  243. package/dist/{chunk-6BJCDWSM.js → chunk-ZB4FS2EG.js} +1 -1
  244. package/dist/{chunk-ZAEUEDTN.js → chunk-ZD6FZ3WL.js} +1 -1
  245. package/dist/{chunk-FEU6QEEL.js → chunk-ZM6EZAVY.js} +1 -0
  246. package/dist/{chunk-2KY7WZZF.js → chunk-ZPA4R2UI.js} +1 -1
  247. package/dist/chunk-ZPPPHVSU.js +285 -0
  248. package/dist/{chunk-ELEGH4DX.js → chunk-ZUGQPYUY.js} +51 -4
  249. package/dist/{chunk-UX2EO653.js → chunk-ZZWFZ46U.js} +66 -8
  250. package/dist/{cleanup-graph-garbage-VQAJ2RBT.js → cleanup-graph-garbage-HFUD5ZQT.js} +12 -10
  251. package/dist/{cloud-sync-command-J7NEFUY7.js → cloud-sync-command-3JHJJKPN.js} +25 -3
  252. package/dist/{cloud-sync-db-init-KWEMNMGA.js → cloud-sync-db-init-2LHIQOSF.js} +1 -1
  253. package/dist/{cloud-sync-shutdown-P63AUTUI.js → cloud-sync-shutdown-ZXAXA3Z7.js} +6 -4
  254. package/dist/{cloud-sync-state-QF3TMMJ4.js → cloud-sync-state-VSQFGPP6.js} +1 -1
  255. package/dist/{co-activation-7IHRPBZN.js → co-activation-NX4EH4AP.js} +6 -4
  256. package/dist/{co-occurrence-R5AG4OAU.js → co-occurrence-5LBYCW3U.js} +10 -8
  257. package/dist/{consent-passphrase-5ZBDJ5G7.js → consent-passphrase-65W3DJIJ.js} +2 -2
  258. package/dist/{content-extractor-ZLXC6GNR.js → content-extractor-OGXETBOX.js} +2 -2
  259. package/dist/{conversation-entity-extractor-7FRKLLBD.js → conversation-entity-extractor-FQCOAH4F.js} +5 -4
  260. package/dist/conversations-retention-XTBFJBUM.js +166 -0
  261. package/dist/{crdt-sync-IFRZOEIS.js → crdt-sync-7TDUBTLH.js} +4 -4
  262. package/dist/{crm-webhook-L2S63ASV.js → crm-webhook-776JTY55.js} +2 -2
  263. package/dist/{cto-delegation-gate-3WU7OHX7.js → cto-delegation-gate-ZNUWVYCN.js} +25 -23
  264. package/dist/{daemon-orchestration-3VQYKLOR.js → daemon-orchestration-76BOFDEP.js} +30 -24
  265. package/dist/{doc-graph-extractor-YIR5E7OF.js → doc-graph-extractor-F724KZJX.js} +10 -8
  266. package/dist/{documents-QEHPTYIY.js → documents-Q24V4GRD.js} +13 -11
  267. package/dist/{dreaming-LNFE7DTN.js → dreaming-IY6NQTSP.js} +27 -25
  268. package/dist/{employee-boot-brief-ZTXDYNWM.js → employee-boot-brief-CCTXO5DQ.js} +35 -29
  269. package/dist/{entity-boost-R5N6JWXD.js → entity-boost-XGOB7HDM.js} +1 -1
  270. package/dist/{exe-drift-WYSJVZFO.js → exe-drift-NEPXLNGP.js} +7 -5
  271. package/dist/{exe-export-GOLNAEAV.js → exe-export-ZHJQFKR2.js} +14 -12
  272. package/dist/{exe-import-U4BSI6OH.js → exe-import-7SVNI4FW.js} +14 -12
  273. package/dist/{exe-key-V42G3NGO.js → exe-key-QJKU56WZ.js} +119 -108
  274. package/dist/{exe-org-U4GLQ6OP.js → exe-org-SJXHLV6K.js} +76 -51
  275. package/dist/{exe-snapshot-U7ONBYNY.js → exe-snapshot-EFWPXTXE.js} +45 -36
  276. package/dist/{fast-db-init-W3NGKAEU.js → fast-db-init-BQZOQNT3.js} +1 -1
  277. package/dist/{founder-context-ZSIBRVDM.js → founder-context-KG2ZAOXY.js} +2 -2
  278. package/dist/{founder-monitor-envelope-L3IWZLFY.js → founder-monitor-envelope-NYB5LLU4.js} +4 -4
  279. package/dist/gateway/index.js +20 -18
  280. package/dist/{gateway-client-DJFCVIPT.js → gateway-client-ODMUXUL3.js} +1 -1
  281. package/dist/{git-staleness-OF24QXFZ.js → git-staleness-OPGEAJA7.js} +6 -4
  282. package/dist/{global-procedures-WSIOWO43.js → global-procedures-3KXY4LL6.js} +8 -6
  283. package/dist/{graph-auto-extract-IEVVN3L3.js → graph-auto-extract-I7H2F5NJ.js} +10 -8
  284. package/dist/{graph-query-JDZWAVCU.js → graph-query-E7JBSNY5.js} +1 -1
  285. package/dist/{graph-rag-BKAD2XQA.js → graph-rag-H24CMFP2.js} +5 -4
  286. package/dist/{hook-integrity-TPWDGX2M.js → hook-integrity-PGQ3OX4S.js} +1 -1
  287. package/dist/{hook-prefetch-FD6VGJJA.js → hook-prefetch-7AZJER6Z.js} +23 -21
  288. package/dist/hook-registration-liveness-NGQRFKAA.js +11 -0
  289. package/dist/hooks/bug-report-worker.js +26 -24
  290. package/dist/hooks/codex-stop-task-finalizer.js +28 -26
  291. package/dist/hooks/commit-complete.js +26 -24
  292. package/dist/hooks/error-recall.js +16 -14
  293. package/dist/hooks/exe-heartbeat-hook.js +9 -7
  294. package/dist/hooks/ingest-worker.js +12 -10
  295. package/dist/hooks/ingest.js +22 -17
  296. package/dist/hooks/instructions-loaded.js +11 -9
  297. package/dist/hooks/manifest.json +20 -20
  298. package/dist/hooks/notification.js +10 -8
  299. package/dist/hooks/post-compact.js +9 -7
  300. package/dist/hooks/post-tool-combined.js +14 -14
  301. package/dist/hooks/pre-compact.js +26 -24
  302. package/dist/hooks/pre-tool-use.js +2 -2
  303. package/dist/hooks/prompt-submit.js +47 -41
  304. package/dist/hooks/session-end.js +38 -42
  305. package/dist/hooks/session-start.js +26 -18
  306. package/dist/hooks/stop.js +29 -27
  307. package/dist/hooks/subagent-stop.js +29 -27
  308. package/dist/hooks/summary-worker.js +32 -30
  309. package/dist/index.js +37 -35
  310. package/dist/{installer-OTI5SA43.js → installer-2ZS3LHCU.js} +12 -9
  311. package/dist/{installer-NMOBSEZ2.js → installer-NH3A3HWC.js} +14 -9
  312. package/dist/{installer-SRJGE4GU.js → installer-UJ73PGRD.js} +21 -9
  313. package/dist/{intercom-queue-4FFXCBHO.js → intercom-queue-OE25GJF2.js} +21 -19
  314. package/dist/lib/agent-config.js +2 -2
  315. package/dist/lib/cloud-sync.js +24 -18
  316. package/dist/lib/consolidation.js +13 -11
  317. package/dist/lib/crypto.js +3 -3
  318. package/dist/lib/database.js +6 -4
  319. package/dist/lib/db-backup.js +1 -1
  320. package/dist/lib/db-write-worker-client.js +3 -1
  321. package/dist/lib/db-write-worker.js +65 -89
  322. package/dist/lib/db.js +6 -4
  323. package/dist/lib/delivery-truth.js +5 -1
  324. package/dist/lib/device-registry.js +1 -1
  325. package/dist/lib/embedder.js +2 -2
  326. package/dist/lib/employee-templates.js +9 -7
  327. package/dist/lib/employees.js +6 -4
  328. package/dist/lib/exe-daemon.js +425 -314
  329. package/dist/lib/file-grep.js +15 -21
  330. package/dist/lib/hybrid-search.js +19 -13
  331. package/dist/lib/identity-templates.js +1 -1
  332. package/dist/lib/identity.js +6 -4
  333. package/dist/lib/keychain.js +1 -1
  334. package/dist/lib/license.js +22 -6
  335. package/dist/lib/messaging.js +22 -20
  336. package/dist/lib/post-tool-memory.js +10 -8
  337. package/dist/lib/registry-proxy.js +1 -1
  338. package/dist/lib/reminders.js +7 -5
  339. package/dist/lib/runtime-table.js +1 -1
  340. package/dist/lib/schedules.js +12 -10
  341. package/dist/lib/session-registry.js +8 -6
  342. package/dist/lib/skill-learning.js +13 -11
  343. package/dist/lib/status-brief.js +2 -2
  344. package/dist/lib/store.js +17 -9
  345. package/dist/lib/task-router.js +7 -5
  346. package/dist/lib/tasks.js +23 -21
  347. package/dist/lib/tmux-routing.js +21 -19
  348. package/dist/lib/tmux-status.js +4 -1
  349. package/dist/lib/token-spend.js +7 -5
  350. package/dist/lib/ws-client.js +1 -1
  351. package/dist/{license-gate-R4JWTWM4.js → license-gate-XQ2KN5I5.js} +3 -3
  352. package/dist/{license-recheck-3MBJ4IJX.js → license-recheck-IIBKR2V5.js} +1 -1
  353. package/dist/{license-sync-BVSG3WMW.js → license-sync-76JVI2M5.js} +151 -8
  354. package/dist/{local-secret-inventory-JWNBHZZ4.js → local-secret-inventory-MJT7NJLY.js} +2 -2
  355. package/dist/{mailbox-inbox-MTAT4MXX.js → mailbox-inbox-BPZP4GIZ.js} +1 -1
  356. package/dist/maintenance-worker-54VZTFIK.js +371 -0
  357. package/dist/mcp/register-tools.js +110 -107
  358. package/dist/mcp/server.js +113 -110
  359. package/dist/mcp/tools/complete-reminder.js +8 -6
  360. package/dist/mcp/tools/create-reminder.js +8 -6
  361. package/dist/mcp/tools/create-task.js +26 -24
  362. package/dist/mcp/tools/deactivate-behavior.js +15 -13
  363. package/dist/mcp/tools/list-reminders.js +8 -6
  364. package/dist/mcp/tools/list-tasks.js +26 -24
  365. package/dist/mcp/tools/send-message.js +25 -23
  366. package/dist/mcp/tools/update-task.js +24 -22
  367. package/dist/{mcp-child-registry-TIZERM7O.js → mcp-child-registry-5VUG5ATZ.js} +1 -1
  368. package/dist/{mcp-http-config-VUMSFWFH.js → mcp-http-config-SKXESWHA.js} +9 -7
  369. package/dist/{mcp-session-identity-DZHWEJRV.js → mcp-session-identity-HYMLJXXA.js} +21 -19
  370. package/dist/{memory-cards-JVXTMSAT.js → memory-cards-PAZDUQ3B.js} +16 -32
  371. package/dist/{memory-graph-extractor-PPBJMYFJ.js → memory-graph-extractor-BC6QKBY6.js} +11 -9
  372. package/dist/{memory-poisoning-defense-K5Q74XQ4.js → memory-poisoning-defense-BRGIHF6J.js} +9 -7
  373. package/dist/{memory-pressure-watchdog-YMJH5CSA.js → memory-pressure-watchdog-HR6TPOMT.js} +22 -20
  374. package/dist/{memory-reflection-7BZWIHRE.js → memory-reflection-LO7VFBL3.js} +38 -59
  375. package/dist/memory-write-repository-J25USX63.js +16 -0
  376. package/dist/{monitor-grants-Q7X3MYQP.js → monitor-grants-YQTO6NWR.js} +3 -3
  377. package/dist/{monitor-identity-ZQB4IXEE.js → monitor-identity-POVTG76Y.js} +2 -2
  378. package/dist/{notification-ledger-XRAXL5OI.js → notification-ledger-KLD6GZTG.js} +22 -20
  379. package/dist/{notifications-JE3PX55X.js → notifications-3R6HNHDR.js} +21 -19
  380. package/dist/{orchestration-events-JCQ5F5IJ.js → orchestration-events-CHY3GOJD.js} +7 -5
  381. package/dist/{orchestrator-X65INDTR.js → orchestrator-GAL3HOAD.js} +23 -21
  382. package/dist/{org-brief-session-3PQ22UIX.js → org-brief-session-LQ2DBYVF.js} +17 -15
  383. package/dist/{org-consent-policy-VGELJ7K7.js → org-consent-policy-KFUP7QPG.js} +5 -5
  384. package/dist/{org-join-6TO5ZYUZ.js → org-join-MXZCIQWX.js} +8 -8
  385. package/dist/{org-key-admin-XHYVRRAZ.js → org-key-admin-4UK6QUT7.js} +9 -9
  386. package/dist/{org-key-pin-TTTYGTQL.js → org-key-pin-ZOX4OM3O.js} +3 -3
  387. package/dist/{org-membership-Y7T2BS57.js → org-membership-D5TPN45F.js} +4 -4
  388. package/dist/{org-partner-config-OP4NEUNF.js → org-partner-config-3FXSYPQA.js} +7 -7
  389. package/dist/{org-partner-runtime-YNVUNT2R.js → org-partner-runtime-TH3LMPII.js} +20 -16
  390. package/dist/{org-row-visibility-JBBXNYXD.js → org-row-visibility-Y5R33C5U.js} +1 -1
  391. package/dist/{pipeline-router-EIBB7QNG.js → pipeline-router-E2JZLDK6.js} +7 -5
  392. package/dist/{plan-limits-MEWXYLEN.js → plan-limits-NYI6R4IK.js} +9 -7
  393. package/dist/{platform-procedures-Z7ZGBJWN.js → platform-procedures-RTD5E3BD.js} +5 -3
  394. package/dist/{pre-tool-use-impl-C6KJY22W.js → pre-tool-use-impl-LT4FRXBP.js} +127 -83
  395. package/dist/{project-boot-VEYFCCSL.js → project-boot-LIMXQKAF.js} +25 -17
  396. package/dist/{project-name-UYORSNGE.js → project-name-V62GWALX.js} +7 -5
  397. package/dist/{projection-worker-WYFDWS57.js → projection-worker-KLE3IZQ2.js} +5 -2
  398. package/dist/{prospective-memory-E6XBQFJA.js → prospective-memory-HRN7JFT2.js} +6 -4
  399. package/dist/{push-notifications-M7YU63FY.js → push-notifications-XC6EQEXF.js} +22 -20
  400. package/dist/{reproject-worktree-memories-B5XMGJSD.js → reproject-worktree-memories-4CAVZSFE.js} +21 -19
  401. package/dist/{reranker-SRA4BR7N.js → reranker-2RU6IIX2.js} +1 -1
  402. package/dist/{retrieval-health-P2JPZUPV.js → retrieval-health-4Q5TOV2S.js} +1 -1
  403. package/dist/{review-polling-KQPN7IQE.js → review-polling-WOWIMBCL.js} +22 -20
  404. package/dist/runtime/index.js +30 -28
  405. package/dist/{session-events-6LDDKKY3.js → session-events-OPMS2C5F.js} +22 -20
  406. package/dist/{session-kill-telemetry-5DSRGWCL.js → session-kill-telemetry-3GWATSIX.js} +22 -20
  407. package/dist/{session-scope-XG5R3P3D.js → session-scope-TIRGR4MH.js} +21 -19
  408. package/dist/{setup-wizard-7QFLZIKT.js → setup-wizard-B2JBVGNH.js} +3 -3
  409. package/dist/{shard-manager-HHHHV2KZ.js → shard-manager-C7LYX6E4.js} +5 -1
  410. package/dist/{skill-refinement-I5RMAHSC.js → skill-refinement-FWQFYNBI.js} +7 -5
  411. package/dist/skill-retrieval-PPLFC5RY.js +166 -0
  412. package/dist/skill-usage-NDB67PU2.js +25 -0
  413. package/dist/{stack-generate-manifest-AKMZ3AUX.js → stack-generate-manifest-AXI55MEQ.js} +6 -6
  414. package/dist/{stack-promote-34CE2HHF.js → stack-promote-6N23OGZY.js} +6 -6
  415. package/dist/stack-release-2CXFYVWM.js +2770 -0
  416. package/dist/{stack-update-ZQQ5YYPJ.js → stack-update-U53FBVCQ.js} +13 -5
  417. package/dist/{steward-gate-AQJ6KT2C.js → steward-gate-TUA3QCN7.js} +7 -5
  418. package/dist/{subagent-brief-injection-3GU7YAWY.js → subagent-brief-injection-N52RWYFZ.js} +34 -32
  419. package/dist/{subagent-spawn-ledger-52I66CLW.js → subagent-spawn-ledger-OI23OT4I.js} +1 -1
  420. package/dist/support-bug-actions-XWCJI6S5.js +30 -0
  421. package/dist/support-inbox-MMVTCXRX.js +77 -0
  422. package/dist/{support-outbox-KNI3FR3G.js → support-outbox-2TG2UV6J.js} +2 -2
  423. package/dist/{task-enforcement-CAA6D2MH.js → task-enforcement-JDMBAAOY.js} +22 -20
  424. package/dist/{task-request-inbox-QBZVU66E.js → task-request-inbox-PKJCYKJV.js} +9 -5
  425. package/dist/{task-scope-NHXB4ZRN.js → task-scope-32HQEV6W.js} +27 -19
  426. package/dist/{tasks-crud-JHSWL5NM.js → tasks-crud-CYKUKS3F.js} +21 -19
  427. package/dist/{tasks-notify-7PBE4U7T.js → tasks-notify-YND5MKWJ.js} +22 -20
  428. package/dist/{tasks-review-PPPVEE62.js → tasks-review-CG2A5GM3.js} +23 -19
  429. package/dist/{telemetry-upload-YU2VRNHX.js → telemetry-upload-WLUMEFAB.js} +11 -9
  430. package/dist/{token-budget-QCMWKG3K.js → token-budget-3YHAY5LL.js} +7 -5
  431. package/dist/{tool-capability-index-7AWQAJRP.js → tool-capability-index-2ADOWH43.js} +2 -2
  432. package/dist/{tool-gates-5Q3RSQEG.js → tool-gates-7ENOOYMR.js} +5 -3
  433. package/dist/{tool-gates-QD26D2NE.js → tool-gates-EKJTLVGN.js} +1 -1
  434. package/dist/{tool-telemetry-LTOIC64I.js → tool-telemetry-VUP7S6HC.js} +1 -1
  435. package/dist/tui/App.js +59 -35
  436. package/dist/{tui-data-NDBXD6U7.js → tui-data-BOQTOW2G.js} +25 -23
  437. package/dist/{update-support-BMJM4NG7.js → update-support-WT3S3AQ4.js} +21 -21
  438. package/dist/{whatsapp-QQLDAHUX.js → whatsapp-OZGIF2EM.js} +2 -2
  439. package/dist/{wiki-acl-W6WDCVCP.js → wiki-acl-LTEQJVDA.js} +1 -1
  440. package/dist/{work-claims-6DM32MGO.js → work-claims-CMV2GWIW.js} +8 -6
  441. package/dist/{work-state-heartbeat-HG7D4AWJ.js → work-state-heartbeat-S45TXK4M.js} +1 -1
  442. package/dist/{worker-gate-FTMW7GBB.js → worker-gate-7Z6NMM3G.js} +1 -1
  443. package/dist/{workflow-engine-ZWC6CCXE.js → workflow-engine-ZSQDXZQ7.js} +2 -2
  444. package/dist/{worktree-EMQCPGFE.js → worktree-NMWDVT6N.js} +8 -6
  445. package/dist/worktree-ownership-guard-ZVIWJAOP.js +35 -0
  446. package/dist/{worktree-sweep-XVUJZBXV.js → worktree-sweep-Q62ZIT3U.js} +9 -7
  447. package/package.json +14 -8
  448. package/release-notes.json +7 -41
  449. package/src/commands/exe/afk.md +6 -0
  450. package/src/commands/exe/call.md +6 -0
  451. package/src/commands/exe/employee-heartbeat.md +6 -0
  452. package/src/commands/exe/intercom.md +6 -0
  453. package/src/commands/exe/kill.md +6 -0
  454. package/src/commands/exe/launch.md +6 -0
  455. package/src/commands/exe/logs.md +1 -1
  456. package/src/commands/exe/sessions.md +6 -0
  457. package/src/commands/exe/setup.md +7 -3
  458. package/src/commands/exe/status.md +6 -0
  459. package/src/commands/exe-reference.md +25 -36
  460. package/src/commands/exe.md +19 -28
  461. package/stack.release.json +11 -11
  462. package/dist/chunk-3B6FLNLV.js +0 -30
  463. package/dist/chunk-FXU7JOXK.js +0 -6
  464. package/dist/chunk-QFAFKEB5.js +0 -820
  465. package/dist/conversations-retention-C4BLKFEL.js +0 -54
  466. package/dist/stack-release-5PGWV5D4.js +0 -1607
  467. package/dist/support-inbox-NY5TB3FN.js +0 -51
  468. /package/dist/{chunk-U2D6PJ5T.js → chunk-65G7ZTGE.js} +0 -0
  469. /package/dist/{chunk-DN3ZR3UE.js → chunk-CP7Z35MJ.js} +0 -0
  470. /package/dist/{chunk-XDVOGDBC.js → chunk-KBBWALJV.js} +0 -0
  471. /package/dist/{chunk-JRIH6I7D.js → chunk-LZXYPTY4.js} +0 -0
  472. /package/dist/{chunk-GIRD7O5X.js → chunk-MCWEW2SG.js} +0 -0
  473. /package/dist/{chunk-TKAU7IJ2.js → chunk-MQHUJLCA.js} +0 -0
  474. /package/dist/{chunk-M4XY4JRK.js → chunk-O53LTOXK.js} +0 -0
  475. /package/dist/{chunk-DZN7SDY2.js → chunk-OSVTH3SG.js} +0 -0
  476. /package/dist/{chunk-AJK2PVQW.js → chunk-QXXEXGX3.js} +0 -0
  477. /package/dist/{chunk-AWWDKF22.js → chunk-SFWNTO2F.js} +0 -0
  478. /package/dist/{chunk-2Q2CD6CD.js → chunk-WC5HF2FN.js} +0 -0
  479. /package/dist/{core-memory-O6D5UC3T.js → core-memory-MMMW3TF3.js} +0 -0
  480. /package/dist/{memory-isolation-EBFFC6HF.js → memory-isolation-67ACKQ2M.js} +0 -0
  481. /package/dist/{oauth-server-ZKBUHDFI.js → oauth-server-OILIKR7D.js} +0 -0
@@ -2,7 +2,7 @@ import {
2
2
  grantsRegistryStatus,
3
3
  listGrants,
4
4
  revokeGrant
5
- } from "./chunk-HU3VD4MQ.js";
5
+ } from "./chunk-2Q2GGYBX.js";
6
6
  import {
7
7
  resolveExeDataDir
8
8
  } from "./chunk-NPXIS2RY.js";
@@ -23,27 +23,58 @@ var ORG_MODE_ANCHOR_FILENAME = ".exe-os-install-state";
23
23
  var _anchorSeen = false;
24
24
  var _keychainChecked = false;
25
25
  var _keychainResult = false;
26
- var _macDefaultKeychainProbe = null;
27
- function macDefaultKeychainExists() {
28
- if (_macDefaultKeychainProbe !== null) return _macDefaultKeychainProbe;
26
+ var _keychainRetryAt = 0;
27
+ var KEYCHAIN_RETRY_DELAY_MS = 3e4;
28
+ function isExpiry(err) {
29
+ const e = err;
30
+ if (!e) return false;
31
+ return e.code === "ETIMEDOUT" || e.signal === "SIGTERM" || e.signal === "SIGKILL";
32
+ }
33
+ var _notedExpiry = false;
34
+ function noteExpiryOnce(what) {
35
+ if (_notedExpiry) return;
36
+ _notedExpiry = true;
37
+ process.stderr.write(
38
+ `[exe-os] keychain probe (${what}) did not complete within its budget \u2014 recorded as UNKNOWN, not as "absent". It will be asked again after a retry delay.
39
+ `
40
+ );
41
+ }
42
+ function runKeychainProbe(cmd, args, input) {
29
43
  try {
30
- const out = execFileSync("security", ["default-keychain"], {
44
+ const stdout = execFileSync(cmd, args, {
31
45
  encoding: "utf-8",
32
46
  timeout: 5e3,
33
- stdio: ["pipe", "pipe", "ignore"]
34
- }).trim();
35
- _macDefaultKeychainProbe = out.length > 0;
36
- } catch {
37
- _macDefaultKeychainProbe = false;
47
+ stdio: ["pipe", "pipe", "ignore"],
48
+ ...input === void 0 ? {} : { input }
49
+ });
50
+ return { status: "ok", stdout: (stdout ?? "").toString().trim() };
51
+ } catch (err) {
52
+ if (isExpiry(err)) {
53
+ noteExpiryOnce(`${cmd} ${args[0] ?? ""}`.trim());
54
+ return { status: "unknown", why: "probe expired before it could answer" };
55
+ }
56
+ return { status: "absent" };
38
57
  }
39
- return _macDefaultKeychainProbe;
40
58
  }
41
- function nativeKeychainAllowed() {
42
- if (process.env.EXE_OS_DISABLE_NATIVE_KEYCHAIN === "1") return false;
43
- if (process.env.EXE_IS_DAEMON === "1") return false;
44
- if (process.env.SSH_CONNECTION || process.env.SSH_TTY) return false;
45
- if (process.platform === "darwin" && !macDefaultKeychainExists()) return false;
46
- return true;
59
+ var _macDefaultKeychainProbe = null;
60
+ function macDefaultKeychainState() {
61
+ if (_macDefaultKeychainProbe !== null) return _macDefaultKeychainProbe ? "present" : "absent";
62
+ const res = runKeychainProbe("security", ["default-keychain"]);
63
+ if (res.status === "unknown") return "unknown";
64
+ const present = res.status === "ok" && res.stdout.length > 0;
65
+ _macDefaultKeychainProbe = present;
66
+ return present ? "present" : "absent";
67
+ }
68
+ function nativeKeychainState() {
69
+ if (process.env.EXE_OS_DISABLE_NATIVE_KEYCHAIN === "1") return "denied";
70
+ if (process.env.EXE_IS_DAEMON === "1") return "denied";
71
+ if (process.env.SSH_CONNECTION || process.env.SSH_TTY) return "denied";
72
+ if (process.platform === "darwin") {
73
+ const state = macDefaultKeychainState();
74
+ if (state === "absent") return "denied";
75
+ if (state === "unknown") return "unknown";
76
+ }
77
+ return "allowed";
47
78
  }
48
79
  function anchorFilePath() {
49
80
  return path.join(os.homedir(), ORG_MODE_ANCHOR_FILENAME);
@@ -57,58 +88,57 @@ function repairAnchorPermissions(p) {
57
88
  }
58
89
  function keychainHasAnchor() {
59
90
  if (_keychainChecked) return _keychainResult;
60
- _keychainResult = keychainGet() === ANCHOR_VALUE;
91
+ if (performance.now() < _keychainRetryAt) return "unknown";
92
+ const probe = keychainGet();
93
+ if (probe.status === "unknown") {
94
+ _keychainRetryAt = performance.now() + KEYCHAIN_RETRY_DELAY_MS;
95
+ return "unknown";
96
+ }
97
+ _keychainRetryAt = 0;
98
+ _keychainResult = probe.status === "ok" && probe.stdout === ANCHOR_VALUE;
61
99
  _keychainChecked = true;
62
100
  return _keychainResult;
63
101
  }
64
102
  var _probeCount = 0;
65
103
  function keychainGet() {
66
104
  _probeCount++;
67
- if (!nativeKeychainAllowed()) return null;
68
- try {
69
- if (process.platform === "darwin") {
70
- return execFileSync(
71
- "security",
72
- ["find-generic-password", "-s", SERVICE, "-a", ANCHOR_ACCOUNT, "-w"],
73
- { encoding: "utf-8", timeout: 5e3, stdio: ["pipe", "pipe", "ignore"] }
74
- ).trim();
75
- }
76
- if (process.platform === "linux") {
77
- return execFileSync(
78
- "secret-tool",
79
- ["lookup", "service", SERVICE, "account", ANCHOR_ACCOUNT],
80
- { encoding: "utf-8", timeout: 5e3, stdio: ["pipe", "pipe", "ignore"] }
81
- ).trim();
82
- }
83
- } catch {
105
+ const allowed = nativeKeychainState();
106
+ if (allowed === "denied") return { status: "absent" };
107
+ if (allowed === "unknown") return { status: "unknown", why: "keychain availability unknown" };
108
+ if (process.platform === "darwin") {
109
+ return runKeychainProbe(
110
+ "security",
111
+ ["find-generic-password", "-s", SERVICE, "-a", ANCHOR_ACCOUNT, "-w"]
112
+ );
113
+ }
114
+ if (process.platform === "linux") {
115
+ return runKeychainProbe("secret-tool", ["lookup", "service", SERVICE, "account", ANCHOR_ACCOUNT]);
84
116
  }
85
- return null;
117
+ return { status: "absent" };
86
118
  }
87
119
  function keychainSet() {
88
- if (!nativeKeychainAllowed()) return false;
89
- try {
90
- if (process.platform === "darwin") {
91
- execFileSync(
92
- "security",
93
- ["add-generic-password", "-U", "-s", SERVICE, "-a", ANCHOR_ACCOUNT, "-w", ANCHOR_VALUE],
94
- { timeout: 5e3, stdio: ["pipe", "ignore", "ignore"] }
95
- );
96
- return true;
97
- }
98
- if (process.platform === "linux") {
99
- execFileSync(
100
- "secret-tool",
101
- ["store", "--label", "exe-os org mode", "service", SERVICE, "account", ANCHOR_ACCOUNT],
102
- { input: ANCHOR_VALUE, timeout: 5e3, stdio: ["pipe", "ignore", "ignore"] }
103
- );
104
- return true;
105
- }
106
- } catch {
120
+ const allowed = nativeKeychainState();
121
+ if (allowed === "denied") return "failed";
122
+ if (allowed === "unknown") return "unknown";
123
+ if (process.platform === "darwin") {
124
+ const res = runKeychainProbe(
125
+ "security",
126
+ ["add-generic-password", "-U", "-s", SERVICE, "-a", ANCHOR_ACCOUNT, "-w", ANCHOR_VALUE]
127
+ );
128
+ return res.status === "ok" ? "ok" : res.status === "unknown" ? "unknown" : "failed";
129
+ }
130
+ if (process.platform === "linux") {
131
+ const res = runKeychainProbe(
132
+ "secret-tool",
133
+ ["store", "--label", "exe-os org mode", "service", SERVICE, "account", ANCHOR_ACCOUNT],
134
+ ANCHOR_VALUE
135
+ );
136
+ return res.status === "ok" ? "ok" : res.status === "unknown" ? "unknown" : "failed";
107
137
  }
108
- return false;
138
+ return "failed";
109
139
  }
110
140
  function keychainClear() {
111
- if (!nativeKeychainAllowed()) return;
141
+ if (nativeKeychainState() !== "allowed") return;
112
142
  try {
113
143
  if (process.platform === "darwin") {
114
144
  execFileSync("security", ["delete-generic-password", "-s", SERVICE, "-a", ANCHOR_ACCOUNT], {
@@ -124,25 +154,33 @@ function keychainClear() {
124
154
  } catch {
125
155
  }
126
156
  }
127
- function orgModeAnchorPresent() {
128
- if (_anchorSeen) return true;
157
+ function orgModeAnchorState() {
158
+ if (_anchorSeen) return "present";
129
159
  const fp = anchorFilePath();
130
160
  if (existsSync(fp)) {
131
161
  repairAnchorPermissions(fp);
132
162
  _anchorSeen = true;
133
- return true;
163
+ return "present";
134
164
  }
135
- if (keychainHasAnchor()) {
165
+ const kc = keychainHasAnchor();
166
+ if (kc === true) {
136
167
  _anchorSeen = true;
137
- return true;
168
+ return "present";
138
169
  }
139
- return false;
170
+ return kc === "unknown" ? "unknown" : "absent";
171
+ }
172
+ function orgModeAnchorPresent() {
173
+ return orgModeAnchorState() === "present";
140
174
  }
141
175
  function writeOrgModeAnchor() {
142
176
  _anchorSeen = true;
143
- const keychainOk = keychainSet();
144
- _keychainChecked = keychainOk;
145
- _keychainResult = keychainOk;
177
+ const setResult = keychainSet();
178
+ const keychainOk = setResult === "ok";
179
+ if (setResult !== "unknown") {
180
+ _keychainRetryAt = 0;
181
+ _keychainChecked = keychainOk;
182
+ _keychainResult = keychainOk;
183
+ }
146
184
  try {
147
185
  writeFileSync(
148
186
  anchorFilePath(),
@@ -164,6 +202,7 @@ function clearOrgModeAnchor() {
164
202
  _anchorSeen = false;
165
203
  _keychainChecked = true;
166
204
  _keychainResult = false;
205
+ _keychainRetryAt = 0;
167
206
  }
168
207
 
169
208
  // src/lib/org-membership.ts
@@ -259,11 +298,20 @@ function establishOrgMode(orgIds = []) {
259
298
  const cp = configPath();
260
299
  let cfg = {};
261
300
  if (existsSync2(cp)) {
301
+ let parsed;
262
302
  try {
263
- const parsed = JSON.parse(readFileSync2(cp, "utf8"));
264
- if (typeof parsed === "object" && parsed !== null) cfg = parsed;
265
- } catch {
303
+ parsed = JSON.parse(readFileSync2(cp, "utf8"));
304
+ } catch (err) {
305
+ throw new Error(
306
+ `the config at ${cp} exists but could not be read (${err instanceof Error ? err.message : String(err)}); refusing to rewrite it from an empty object`
307
+ );
308
+ }
309
+ if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
310
+ throw new Error(
311
+ `the config at ${cp} did not parse to a JSON object; refusing to rewrite it from an empty object`
312
+ );
266
313
  }
314
+ cfg = parsed;
267
315
  }
268
316
  if (cfg.org_mode_established !== true) {
269
317
  cfg.org_mode_established = true;
@@ -281,12 +329,20 @@ var QUARANTINE_DONE_KEY = "grants_quarantined_at";
281
329
  function readMarker() {
282
330
  const mp = markerPath();
283
331
  if (!existsSync2(mp)) return {};
332
+ let parsed;
284
333
  try {
285
- const parsed = JSON.parse(readFileSync2(mp, "utf8"));
286
- return typeof parsed === "object" && parsed !== null ? parsed : {};
287
- } catch {
288
- return {};
334
+ parsed = JSON.parse(readFileSync2(mp, "utf8"));
335
+ } catch (err) {
336
+ throw new Error(
337
+ `the org-mode marker at ${mp} exists but could not be read (${err instanceof Error ? err.message : String(err)}); refusing to treat it as empty, because every caller writes this value back and would drop the org ids it holds`
338
+ );
339
+ }
340
+ if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
341
+ throw new Error(
342
+ `the org-mode marker at ${mp} did not parse to a JSON object; refusing to treat it as empty`
343
+ );
289
344
  }
345
+ return parsed;
290
346
  }
291
347
  function recordQuarantineDone() {
292
348
  try {
@@ -297,7 +353,18 @@ function recordQuarantineDone() {
297
353
  }
298
354
  }
299
355
  function ensureGrantsQuarantined() {
300
- if (typeof readMarker()[QUARANTINE_DONE_KEY] === "string") {
356
+ let doneAt;
357
+ try {
358
+ doneAt = readMarker()[QUARANTINE_DONE_KEY];
359
+ } catch (err) {
360
+ _quarantinePending = true;
361
+ warnQuarantineDeferredOnce(
362
+ `[exe-os] \u26A0 org mode: the quarantine-completion record could not be read (${err instanceof Error ? err.message : String(err)}) \u2014 quarantine deferred and will retry. Grants are inert meanwhile (the monitoring writer refuses to run in org mode).
363
+ `
364
+ );
365
+ return;
366
+ }
367
+ if (typeof doneAt === "string") {
301
368
  _quarantinePending = false;
302
369
  return;
303
370
  }
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  registerScopedQueryChokepoint,
3
3
  scopedQueryChokepointStatus
4
- } from "./chunk-YLFCH3VA.js";
4
+ } from "./chunk-FDWI3T6I.js";
5
5
  import {
6
6
  getClient
7
- } from "./chunk-GL47M7NY.js";
7
+ } from "./chunk-3UD3OF3X.js";
8
8
 
9
9
  // src/lib/org-scoped-rows.ts
10
10
  var SCOPED_QUERY_MAX_LIMIT = 200;
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  getCurrentSessionScope,
3
3
  strictSessionScopeFilter
4
- } from "./chunk-7UHZBVP3.js";
4
+ } from "./chunk-QDVLVLXP.js";
5
5
  import {
6
6
  getProjectName
7
- } from "./chunk-UX2EO653.js";
7
+ } from "./chunk-ZZWFZ46U.js";
8
8
 
9
9
  // src/lib/session-events.ts
10
10
  import { randomUUID } from "crypto";
@@ -6,7 +6,7 @@ import {
6
6
  import {
7
7
  DEFAULT_RUNTIME,
8
8
  RUNTIME_TABLE
9
- } from "./chunk-WNBZJSQT.js";
9
+ } from "./chunk-3VW5ZP2F.js";
10
10
  import {
11
11
  EXE_AI_DIR
12
12
  } from "./chunk-MMS2HBRT.js";
@@ -93,10 +93,10 @@ var RUNTIME_LABELS = {
93
93
  var DEFAULT_MODELS = {
94
94
  // Bug ac1f9c80: claude-sonnet-4 was RETIRED 2026-06-15. It was the fallback
95
95
  // default here, so any agent without an explicit config booted onto a dead
96
- // model and idled forever. Default now points at the live claude-sonnet-4.6.
97
- claude: "claude-sonnet-4.6",
96
+ // model and idled forever. Default now points at the live claude-sonnet-5.
97
+ claude: "claude-sonnet-5",
98
98
  codex: CODEX_DEFAULT_MODEL,
99
- opencode: RUNTIME_TABLE.opencode?.defaultModel ?? "anthropic/claude-sonnet-4-6"
99
+ opencode: RUNTIME_TABLE.opencode?.defaultModel ?? "anthropic/claude-sonnet-5"
100
100
  };
101
101
  function loadAgentConfig() {
102
102
  if (!existsSync(AGENT_CONFIG_PATH)) return {};
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  ingest
3
- } from "./chunk-RZN2LEAK.js";
3
+ } from "./chunk-SQA7XCYI.js";
4
4
  import {
5
5
  listWorkflowDefinitions,
6
6
  runWorkflow,
7
7
  startWorkflow
8
- } from "./chunk-L3VUW5M4.js";
8
+ } from "./chunk-TQS2YHLB.js";
9
9
  import {
10
10
  initCRMBridge
11
11
  } from "./chunk-ML4S5SHZ.js";
@@ -1300,13 +1300,20 @@ function buildExecAssistantTools() {
1300
1300
  {
1301
1301
  name: "create_reminder",
1302
1302
  description: "Create a reminder.",
1303
+ // Bug f80e50b5: these names MUST match the tool this advertisement names.
1304
+ // The MCP tool `create_reminder` (src/mcp/tools/create-reminder.ts) takes
1305
+ // `text` / `due_date` / `daily_push`. This block previously advertised
1306
+ // `content` / `due_at`, which exist nowhere on the receiving side — so an
1307
+ // executor forwarding these arguments would drop both the reminder body
1308
+ // and its due date. Pinned by tests/gateway/bot-tool-contract.test.ts.
1303
1309
  input_schema: {
1304
1310
  type: "object",
1305
1311
  properties: {
1306
- content: { type: "string", description: "Reminder content" },
1307
- due_at: { type: "string", description: "ISO 8601 due date" }
1312
+ text: { type: "string", description: "What to remind about" },
1313
+ due_date: { type: "string", description: "Optional due date \u2014 ISO date (2026-04-01), or omit for persistent" },
1314
+ daily_push: { type: "string", description: 'Optional daily push schedule \u2014 JSON {"hours":[9,18]} (0\u201323, founder timezone)' }
1308
1315
  },
1309
- required: ["content"]
1316
+ required: ["text"]
1310
1317
  }
1311
1318
  },
1312
1319
  {
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  sessionScopeFilter
3
- } from "./chunk-7UHZBVP3.js";
3
+ } from "./chunk-QDVLVLXP.js";
4
4
  import {
5
5
  leaseExpiryIso
6
6
  } from "./chunk-E23LNUWJ.js";
7
7
  import {
8
8
  getProjectName
9
- } from "./chunk-UX2EO653.js";
9
+ } from "./chunk-ZZWFZ46U.js";
10
10
 
11
11
  // src/lib/subagent-observability.ts
12
12
  var MAX_RESULT_DIGEST_CHARS = 200;
@@ -11,8 +11,8 @@ import {
11
11
  } from "./chunk-7OTR2OET.js";
12
12
  import {
13
13
  buildDeployStalenessBanner,
14
- resolveDeployStalenessAlert
15
- } from "./chunk-C5HUMAA7.js";
14
+ resolveDeployStalenessVerdict
15
+ } from "./chunk-B7WVYLAQ.js";
16
16
 
17
17
  // src/lib/status-brief.ts
18
18
  import pathMod from "path";
@@ -126,7 +126,7 @@ async function generateStatusBrief(employees, data, _activeAgentIds) {
126
126
  sections.push([` EXE STATUS BRIEF \u2014 ${dateStr}${sessionTag}`]);
127
127
  const degradedLines = buildDegradedBanner(data);
128
128
  if (degradedLines.length > 0) sections.push(degradedLines);
129
- const staleDeployLines = buildDeployStalenessBanner(resolveDeployStalenessAlert());
129
+ const staleDeployLines = buildDeployStalenessBanner(resolveDeployStalenessVerdict());
130
130
  if (staleDeployLines.length > 0) sections.push(staleDeployLines);
131
131
  const orchestrationLines = buildOrchestrationPhase(data, employees);
132
132
  if (orchestrationLines.length > 0) sections.push(orchestrationLines);
@@ -424,19 +424,10 @@ function buildOrchestrationPhase(data, employees) {
424
424
  }
425
425
  function buildDispatchLadder(data) {
426
426
  const lines = [
427
- "\u{1FA9C} DISPATCH \u2014 stop at the lowest rung that fits",
428
- " 1 do it yourself \xB7 2 named subagent = DEFAULT (delegation + parallelism)",
429
- " 3 create_task(execution_mode='durable_tmux') \u2192 tmux = LEGACY: only if the work outlives this session"
427
+ "\u{1FA9C} DISPATCH \u2014 stop at the lower rung that fits",
428
+ " 1 do it yourself \xB7 2 Agent(subagent_type='<employee>') = the ONLY delegation path",
429
+ " create_task = durable checklist row for tracking \u2014 it never dispatches"
430
430
  ];
431
- const liveTmuxDispatches = data.globalTasks.filter(
432
- (t) => t.executionMode !== "checklist" && (t.status === "open" || t.status === "in_progress")
433
- ).length;
434
- const TMUX_SKEW_THRESHOLD = 4;
435
- if (liveTmuxDispatches >= TMUX_SKEW_THRESHOLD) {
436
- lines.push(
437
- ` \u{1F7E0} ${liveTmuxDispatches} live tmux dispatches \u2014 bounded work belongs on rung 2`
438
- );
439
- }
440
431
  const subagentTasks = data.globalTasks.filter(
441
432
  (t) => t.status === "in_progress" && (t.subagentEventCount ?? 0) > 0
442
433
  );
@@ -0,0 +1,48 @@
1
+ import {
2
+ getClient
3
+ } from "./chunk-3UD3OF3X.js";
4
+
5
+ // src/lib/skill-usage.ts
6
+ async function recordBehaviorsConsulted(behaviorIds) {
7
+ const ids = [...new Set(behaviorIds.filter((id) => typeof id === "string" && id.length > 0))];
8
+ if (ids.length === 0) return;
9
+ try {
10
+ const client = getClient();
11
+ const now = (/* @__PURE__ */ new Date()).toISOString();
12
+ for (const id of ids) {
13
+ await client.execute({
14
+ sql: `UPDATE behaviors SET consulted_count = coalesce(consulted_count, 0) + 1, last_consulted_at = ? WHERE id = ?`,
15
+ args: [now, id]
16
+ });
17
+ }
18
+ } catch (err) {
19
+ process.stderr.write(
20
+ `[skill-usage] Failed to record consulted: ${err instanceof Error ? err.message : String(err)}
21
+ `
22
+ );
23
+ }
24
+ }
25
+ async function recordBehaviorApplied(behaviorId) {
26
+ const id = (behaviorId ?? "").trim();
27
+ if (!id) return false;
28
+ try {
29
+ const client = getClient();
30
+ const now = (/* @__PURE__ */ new Date()).toISOString();
31
+ const result = await client.execute({
32
+ sql: `UPDATE behaviors SET applied_count = coalesce(applied_count, 0) + 1, last_applied_at = ? WHERE id = ?`,
33
+ args: [now, id]
34
+ });
35
+ return (result.rowsAffected ?? 0) > 0;
36
+ } catch (err) {
37
+ process.stderr.write(
38
+ `[skill-usage] Failed to record applied for ${id}: ${err instanceof Error ? err.message : String(err)}
39
+ `
40
+ );
41
+ return false;
42
+ }
43
+ }
44
+
45
+ export {
46
+ recordBehaviorsConsulted,
47
+ recordBehaviorApplied
48
+ };
@@ -28,7 +28,9 @@ function normalizeState(value) {
28
28
  updatedAt,
29
29
  // Optional and only present when actually set, so existing readers that
30
30
  // compare whole state objects are unaffected by the new field.
31
- ...typeof raw.pendingSliceAt === "string" && raw.pendingSliceAt !== "" ? { pendingSliceAt: raw.pendingSliceAt } : {}
31
+ ...typeof raw.pendingSliceAt === "string" && raw.pendingSliceAt !== "" ? { pendingSliceAt: raw.pendingSliceAt } : {},
32
+ ...typeof raw.pullIncompleteReason === "string" && raw.pullIncompleteReason !== "" ? { pullIncompleteReason: raw.pullIncompleteReason } : {},
33
+ ...typeof raw.pullIncompleteMaxVersion === "number" && Number.isFinite(raw.pullIncompleteMaxVersion) ? { pullIncompleteMaxVersion: raw.pullIncompleteMaxVersion } : {}
32
34
  };
33
35
  }
34
36
  function readCloudSyncState(statePath = resolveCloudSyncStatePath()) {
@@ -114,6 +116,17 @@ function resolveCloudSyncStatus(options) {
114
116
  updatedAt: state.updatedAt
115
117
  };
116
118
  }
119
+ const pullIncompleteReason = state.pullIncompleteReason ?? void 0;
120
+ if (pullIncompleteReason) {
121
+ return {
122
+ status: "partial",
123
+ lastSuccessAt,
124
+ lastError: state.lastError ?? void 0,
125
+ intervalMs,
126
+ updatedAt: state.updatedAt,
127
+ pullIncompleteReason
128
+ };
129
+ }
117
130
  const lastSuccessMs = lastSuccessAt ? Date.parse(lastSuccessAt) : NaN;
118
131
  if (Number.isFinite(lastSuccessMs) && nowMs - lastSuccessMs <= intervalMs * 2) {
119
132
  return {
@@ -5,7 +5,7 @@ import {
5
5
  } from "./chunk-MFAOAIUE.js";
6
6
  import {
7
7
  EMBEDDING_DIM
8
- } from "./chunk-FXU7JOXK.js";
8
+ } from "./chunk-C7GHNJPW.js";
9
9
  import {
10
10
  MODELS_DIR,
11
11
  loadConfigSync
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  isManagementRole
3
- } from "./chunk-GL47M7NY.js";
3
+ } from "./chunk-3UD3OF3X.js";
4
4
 
5
5
  // src/lib/transcript-sidechain.ts
6
6
  import { readFileSync } from "fs";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  redactSecrets
3
- } from "./chunk-ELEGH4DX.js";
3
+ } from "./chunk-ZUGQPYUY.js";
4
4
  import {
5
5
  isExeMcpTool,
6
6
  stripExeMcpPrefix