@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
@@ -1,4 +1,7 @@
1
1
  // src/lib/platform-procedures.ts
2
+ import { mkdirSync, writeFileSync } from "fs";
3
+ import path from "path";
4
+ import os from "os";
2
5
  var PLATFORM_PROCEDURES = [
3
6
  // --- Foundation: what is exe-os ---
4
7
  {
@@ -11,13 +14,13 @@ var PLATFORM_PROCEDURES = [
11
14
  title: "Mode 1 \u2014 how exe-os runs inside Claude Code",
12
15
  domain: "architecture",
13
16
  priority: "p0",
14
- content: "Mode 1: exe-os runs AS hooks + MCP + skills inside Claude Code, Codex, or OpenCode. The founder picks their default tool at setup. The COO orchestrates employees: normally as named subagents dispatched in-session (the default \u2014 see the Dispatch Ladder), and as tmux-session employees when the work must outlive the session or cross coordinator sessions. Each coordinator session is a separate window/project. The founder talks to the COO; the COO orchestrates the team. The tool is the shell, exe-os is the brain."
17
+ content: "Mode 1: exe-os runs AS hooks + MCP + skills inside Claude Code, Codex, or OpenCode. The founder picks their default tool at setup. The COO orchestrates employees as named subagents dispatched in-session \u2014 the ONLY dispatch path (see the Dispatch Ladder). Each coordinator session is a separate window/project. The founder talks to the COO; the COO orchestrates the team. The tool is the shell, exe-os is the brain."
15
18
  },
16
19
  {
17
20
  title: "Sessions explained \u2014 coordinator session names and projects",
18
21
  domain: "architecture",
19
22
  priority: "p0",
20
- content: "Each coordinator session is an isolated project session. One might be exe-os development, another might be exe-wiki. Work inside a session normally runs on named subagents; when a session needs durable tmux employees they are named {employee}-{coordinatorSession}. Sessions share the same memory DB but tasks are scoped to the session that created them. A founder can run multiple projects simultaneously. Sessions never interfere with each other."
23
+ content: "Each coordinator session is an isolated project session. One might be exe-os development, another might be exe-wiki. ALL work inside a session runs on named subagents dispatched by that session's coordinator \u2014 there are no separate employee sessions. Sessions share the same memory DB but tasks are scoped to the session that created them. A founder can run multiple projects simultaneously. Sessions never interfere with each other."
21
24
  },
22
25
  {
23
26
  title: "Runtime settings \u2014 COO can view and change tools per agent",
@@ -42,7 +45,7 @@ var PLATFORM_PROCEDURES = [
42
45
  title: "Stay in your repo \u2014 never cd into other projects",
43
46
  domain: "workflow",
44
47
  priority: "p0",
45
- content: "NEVER cd into another repo or project directory. Your working directory (cwd) is your project boundary. When a user says 'commit all' or 'push all', that means all changes IN THIS REPO, not across the machine. If you see uncommitted changes in another repo via memory or task recall, ignore them \u2014 that's another agent's responsibility. Running `cd /path/to/other-repo && git commit` from your session is a project boundary violation. If cross-repo work is needed, create_task to dispatch it to the right project's agent."
48
+ content: "NEVER cd into another repo or project directory. Your working directory (cwd) is your project boundary. When a user says 'commit all' or 'push all', that means all changes IN THIS REPO, not across the machine. If you see uncommitted changes in another repo via memory or task recall, ignore them \u2014 that's another agent's responsibility. Running `cd /path/to/other-repo && git commit` from your session is a project boundary violation. If cross-repo work is needed, dispatch a named subagent whose brief fences it to that repo, or hand the work to the coordinator session that owns the project."
46
49
  },
47
50
  // --- Hierarchy and dispatch ---
48
51
  {
@@ -51,12 +54,6 @@ var PLATFORM_PROCEDURES = [
51
54
  priority: "p0",
52
55
  content: "Founder -> coordinator (the executive agent, internally routed as 'COO') -> CTO/CMO/GMs. CTO -> engineers. CMO -> content production. GM -> specialists within their project scope. Never skip levels: the coordinator does not bypass managers for specialist work. Specialists report to their manager. If you need cross-team info, use ask_team_memory \u2014 don't read other agents' task folders. Each level owns dispatch downward and review upward."
53
56
  },
54
- {
55
- title: "When to hire new employees \u2014 scaling signals for the COO",
56
- domain: "workflow",
57
- priority: "p1",
58
- content: "COO recommends hiring (/exe-new-employee) when: GM needed: separate project needs dedicated coordination, COO spending >30% context on it. Engineer: CTO has 5+ queued tasks, parallelization maxed. Content specialist: CMO backlog exceeds 1 week. Auditor: quality gates being skipped under pressure. General rule: if a role spends >50% time on delegatable work, hire. Templates: coo, cto, cmo, gm, principal-engineer, content-specialist, ai-specialist, staff-code-reviewer. Usage: /exe-new-employee <name> --role <template>."
59
- },
60
57
  {
61
58
  title: "Orchestration phase guidance \u2014 recommend, never trap",
62
59
  domain: "workflow",
@@ -76,22 +73,22 @@ var PLATFORM_PROCEDURES = [
76
73
  content: "When the founder assigns work to a roster employee by name ('give this to X'), the coordinator dispatches a NATIVE SUBAGENT wearing that employee's identity: Agent(subagent_type='<name>') loads the generated identity definition (~/.claude/agents/<name>.md \u2014 identity + preset model/effort), worktree isolation for code work, and the employee's expertise applies. Hooks capture everything; attribution is granted ONLY through the spawn ledger (the session's own recorded dispatch \u2014 never the payload's claim), so the employee's three-layer cognition accrues from work actually delegated to them. Multiple subagents may wear the same identity concurrently; their experiences merge into one agent brain. The orchestrator remains the single deciding context: it briefs, reviews, verifies, and lands. This semantic applies to every coordinator on every runtime (Claude Code, Codex, OpenCode)."
77
74
  },
78
75
  {
79
- title: "Dispatch Ladder \u2014 named subagents first; tmux employees are legacy",
76
+ title: "Dispatch Ladder \u2014 two rungs, and subagents are the only dispatch",
80
77
  domain: "workflow",
81
78
  priority: "p0",
82
- content: "Three rungs \u2014 stop at the first that fits. (1) Do it yourself: trivial, in-scope work in main context. (2) Named/native subagents (Claude Code Agent tool + worktree isolation; Codex spawned agents; OpenCode sessions) \u2014 the DEFAULT for delegation AND parallelism: roster-employee work via named identity dispatch, bounded well-specified work, parallel research, isolated worktree fixes, verbose throwaway exploration. Cap 2-3 concurrent under load; merge or clean up subagent worktrees before finishing. MANDATORY: persist subagent results/lessons into the task record + memory BEFORE completing \u2014 subagent output must never die in a context window. Tasks created with task(action='create') are durable checklist items by default and never launch compute. (3) task(action='create', execution_mode='durable_tmux') -> tmux employee \u2014 LEGACY, reserved for work that must outlive the orchestrator's session or cross coordinator sessions/projects; gets no new investment. When used, the explicit durable_tmux mode remains the only tmux dispatch path \u2014 no manual spawns, no send_message for actionable work."
79
+ content: "TWO rungs \u2014 stop at the first that fits. (1) Do it yourself: trivial, in-scope work in main context. (2) Named subagent \u2014 Agent(subagent_type='<employee>') on Claude Code (Codex spawned agents / OpenCode sessions are the equivalent on those runtimes), with git worktree isolation for any code work. This is the ONLY delegation path: roster-employee work, bounded well-specified work, parallel research, isolated fixes, verbose throwaway exploration. Cap 2-3 concurrent under load; merge or clean up subagent worktrees before finishing. MANDATORY: persist subagent results/lessons into the task checklist row + memory BEFORE completing \u2014 subagent output must never die in a context window. There is no third rung: task(action='create') is a DURABLE CHECKLIST ROW for tracking and never launches compute, and background employee sessions are retired."
83
80
  },
84
81
  {
85
82
  title: "Subagent guardrails \u2014 fence scope, isolate Codex, never stash",
86
83
  domain: "workflow",
87
84
  priority: "p0",
88
- content: "When delegating to subagents: (1) FENCE SCOPE \u2014 a subagent with MCP access must be explicitly forbidden from touching other agents' tasks, reviews, or folders; give it only its own brief. (2) Codex-runtime subagents ALWAYS run in an isolated git worktree \u2014 they auto-commit and cross file fences despite instructions. (3) NEVER run git stash \u2014 the stash stack is shared repo-wide across ALL worktrees; concurrent agents silently pop each other's uncommitted work. Use git diff > patch, a scratch commit, or a separate worktree instead. Brief every subagent you dispatch with these rules."
85
+ content: "When delegating to subagents: (1) FENCE SCOPE \u2014 a subagent with MCP access must be explicitly forbidden from touching other agents' tasks, reviews, or folders; give it only its own brief. (2) Codex-runtime subagents ALWAYS run in an isolated git worktree \u2014 they auto-commit and cross file fences despite instructions. (3) NEVER run git stash \u2014 the stash stack is shared repo-wide across ALL worktrees; concurrent agents silently pop each other's uncommitted work. Use git diff > patch, a scratch commit, or a separate worktree instead. (4) A subagent NEVER delegates further by starting background sessions: it does the work, or reports back. (5) Its result is not delivered until YOU have persisted it into the task checklist row + memory. Brief every subagent you dispatch with these rules \u2014 the brief is the only scope it has."
89
86
  },
90
87
  {
91
88
  title: "Right-size the model \u2014 match model cost to task difficulty",
92
89
  domain: "workflow",
93
90
  priority: "p1",
94
- content: "Tokens are money \u2014 pick the model per task. Mechanical/bounded work (renames, config edits, boilerplate, well-specified fixes) -> cheaper model and/or lower reasoning effort. Adversarial verification, hard design, security review, debugging unknowns -> strong model; never verify a strong model's work with a weaker one. Set per agent via set_agent_config; legacy durable tmux dispatch may override spawn_model/spawn_runtime only with execution_mode='durable_tmux'. Audit spend with config(action='agent_spend')."
91
+ content: "Tokens are money \u2014 pick the model per task. Mechanical/bounded work (renames, config edits, boilerplate, well-specified fixes) -> cheaper model and/or lower reasoning effort. Adversarial verification, hard design, security review, debugging unknowns -> strong model; never verify a strong model's work with a weaker one. Set the per-employee default via set_agent_config (it is baked into the generated agent definition, so Agent(subagent_type='<name>') inherits it); override per dispatch with the Agent tool's own model argument. Audit spend with config(action='agent_spend')."
95
92
  },
96
93
  {
97
94
  title: "Fetch and scope-check before dispatching fix work",
@@ -104,14 +101,14 @@ var PLATFORM_PROCEDURES = [
104
101
  title: "Session isolation \u2014 scoping, boundaries, and enforcement",
105
102
  domain: "security",
106
103
  priority: "p0",
107
- content: "SCOPING: Managers dispatch only within their own coordinator session. Employee sessions use {employee}-{coordinatorSession}. Cross-session dispatch is system-blocked. Tasks are scoped to the creating session. BOUNDARIES: (1) Never close/update/cancel tasks from another session. (2) Never review work from a different session \u2014 report it belongs elsewhere and skip. (3) Ignore other sessions' items in list_tasks. (4) Employees work ONLY on their parent session's tasks. Cross-session work is a system violation. ENFORCEMENT: Every DB query, notification, and task operation MUST filter on 3 dimensions: (1) session_scope matching current coordinator session, (2) project_name, (3) role hierarchy level. Any function touching tasks/reviews/messages/notifications must accept sessionScope and pass it to SQL WHERE. Unscoped queries are bugs. Test with 2+ coordinator sessions simultaneously."
104
+ content: "SCOPING: Managers dispatch only within their own coordinator session. A subagent has no session of its own \u2014 it inherits the dispatching coordinator's session_scope, so its work is scoped exactly where the dispatcher's is. Cross-session dispatch is system-blocked. Tasks are scoped to the creating session. BOUNDARIES: (1) Never close/update/cancel tasks from another session. (2) Never review work from a different session \u2014 report it belongs elsewhere and skip. (3) Ignore other sessions' items in list_tasks. (4) A subagent works ONLY on the task it was briefed with, inside its dispatcher's scope. Cross-session work is a system violation. ENFORCEMENT: Every DB query, notification, and task operation MUST filter on 3 dimensions: (1) session_scope matching current coordinator session, (2) project_name, (3) role hierarchy level. Any function touching tasks/reviews/messages/notifications must accept sessionScope and pass it to SQL WHERE. Unscoped queries are bugs. Test with 2+ coordinator sessions simultaneously."
108
105
  },
109
106
  // --- Hard constraints ---
110
107
  {
111
108
  title: "What you CANNOT do in exe-os \u2014 hard constraints",
112
109
  domain: "security",
113
110
  priority: "p0",
114
- content: "NEVER: (1) Access the database directly \u2014 it's SQLCipher encrypted, always fails. Use MCP tools only. (2) Manually spawn tmux sessions \u2014 when tmux is the right rung, create_task handles it. (3) Run git checkout main \u2014 agents work in worktrees. (4) Modify another agent's in-progress task. (5) Push to remote \u2014 the COO reviews and pushes. (6) Skip update_task(done) \u2014 it's the ONLY way your work gets reviewed. (7) Run git init."
111
+ content: "NEVER: (1) Access the database directly \u2014 it's SQLCipher encrypted, always fails. Use MCP tools only. (2) Start background agent sessions by hand (terminal multiplexers, headless CLI launches, nohup) \u2014 delegation is Agent(subagent_type='<name>') and nothing else. (3) Run git checkout main \u2014 agents work in worktrees. (4) Modify another agent's in-progress task. (5) Push to remote \u2014 the COO reviews and pushes. (6) Skip update_task(done) \u2014 it's the ONLY way your work gets reviewed. (7) Run git init."
115
112
  },
116
113
  {
117
114
  title: "Destructive operations \u2014 mandatory reviewer gate",
@@ -121,10 +118,10 @@ var PLATFORM_PROCEDURES = [
121
118
  },
122
119
  // --- Support ---
123
120
  {
124
- title: "Triage \u2014 upstream bugs vs features vs local customization",
121
+ title: "Bug lifecycle \u2014 file with evidence, triage once as STATE",
125
122
  domain: "support",
126
123
  priority: "p0",
127
- content: "Classify every issue: upstream_bug (reproducible platform defect), upstream_feature (requires exe-os code changes), customer_customization (identity/behavior/config/workflow \u2014 belongs in customer layers), emergency_hotfix (temporary local patch). BUGS: MUST use create_bug_report before or alongside any workaround. Include version, repro steps, expected/actual, files changed, diff summary. If tool unavailable, save in exe/output and call support_test. Avoid permanent platform patches unless founder approves; document hotfixes in the report. FEATURES: use create_feature_request with use case, business impact, workaround. File proactively \u2014 no permission needed. LOCAL: implement immediately via store_behavior, update_identity, company_procedure, or config changes."
124
+ content: "FILING (create_bug) is GATED: reproduction_steps (a concrete step), expected, actual, and observed_kind+evidence_pointer are ALL required \u2014 refused otherwise. No real repro/evidence? Use memory(domain='lesson') or file a feature instead. Summary caps at 1500 chars; use add_comment for analysis. DEDUPE before filing: matches on the same product refuse once; retry with not_duplicate_of:[ids]. Classify: upstream_bug, customer_customization, emergency_hotfix, unclear. LIFECYCLE = open -> triaged -> fixed -> closed. triaged = classification via triage_bug OR a merged fix PR (auto-reconciled). fixed = a verification artifact via update_bug \u2014 never just a status flip. closed = delivery proof. Triage is RECORD STATE (classification, triaged_at, triage_notes) \u2014 a comment alone is not a triage. NEVER re-triage a triaged_at record without new evidence. Every triaged bug carries a `cluster` slug (root-cause class); fixes dispatch per repeat-class cluster \u2014 use list_bugs(cluster=...). Full detail: on-demand reference."
128
125
  },
129
126
  {
130
127
  title: "Bug and feature status checks \u2014 use support on request, not at boot",
@@ -136,7 +133,7 @@ var PLATFORM_PROCEDURES = [
136
133
  title: "Link fix PRs to bugs at PR-open time",
137
134
  domain: "support",
138
135
  priority: "p1",
139
- content: "When you open a PR that addresses a filed bug, immediately comment the linkage onto that bug: support(action='add_comment', id=<bug-id>, comment='Fix PR opened: <repo>#<PR number> (<branch>)'). Do this the moment the PR exists \u2014 before merge, not after. The bug stays open until the fix lands, but the bug\u2194PR linkage must be recorded at PR-open time so triage and other agents can see which PR owns which bug without guessing. Also reference the bug ID in the PR body for the reverse link."
136
+ content: "When you open a PR that addresses a filed bug, immediately comment the linkage onto that bug: support(action='add_comment', id=<bug-id>, comment='Fix PR opened: <repo>#<PR number> (<branch>)'). Do this the moment the PR exists \u2014 before merge, not after. The bug stays open until the fix lands, but the bug\u2194PR linkage must be recorded at PR-open time so triage and other agents can see which PR owns which bug without guessing. Also reference the bug ID in the PR body for the reverse link. Merged PRs naming a bug id are auto-reconciled into status=triaged by the daemon's bug-landed reconciler within 30 minutes \u2014 agents still comment the linkage at PR-open time as above."
140
137
  },
141
138
  // --- Tool guidance ---
142
139
  {
@@ -180,24 +177,18 @@ var PLATFORM_PROCEDURES = [
180
177
  content: "NEVER defer work \u2014 no 'later', 'next sprint', or 'not urgent'. Every defer is a broken promise: deferred items pile up, get forgotten, block other work, and erode trust. Find a bug mid-task: fix it now, then resume. Outside your scope: create_task so someone fixes it NOW. If it truly cannot be done (missing credentials, external human action, third-party block), name the blocker and who must act. The only acceptable reason not to fix something is 'physically impossible right now' \u2014 never 'not urgent'."
181
178
  },
182
179
  // --- Observability ---
183
- {
184
- title: "Daemon logs and session lifecycle \u2014 full transparency for debugging",
185
- domain: "operations",
186
- priority: "p1",
187
- content: "Daemon logs to ~/.exe-os/logs/exed-launchd.log. Primary debugging tool. Shows: session spawns, idle kills (90s graceful warning), event loop health (>3s warn, >10s CRITICAL), task enforcement (60s cycle), intercom delivery, MCP sessions, cloud sync. Read: `tail -100 ~/.exe-os/logs/exed-launchd.log` or /exe-doctor. Enforcement audit: ~/.exe-os/enforcement-audit.jsonl (structured JSONL). If agent seems stuck or killed unexpectedly, READ LOGS FIRST before reporting a bug."
188
- },
189
180
  // --- Operations ---
190
181
  {
191
- title: "Managers must supervise deployed workers",
182
+ title: "Managers own the subagents they dispatch \u2014 brief, receive, verify",
192
183
  domain: "workflow",
193
184
  priority: "p0",
194
- content: `Every manager (COO/CTO/CMO) who dispatches work to a worker MUST actively monitor them. Check tmux capture-pane every 10 minutes. Verify they're working, not stuck. If idle at prompt with in_progress task -> send intercom. If stuck -> unblock or escalate. "Standing by" without checking is negligence.`
185
+ content: `Every manager (COO/CTO/CMO) who dispatches a subagent OWNS it end to end. A subagent runs inside your context: you get its result back, so supervision is not polling \u2014 it is (1) briefing it well enough to succeed (scope fence, file list, acceptance criteria, guardrails), (2) reading the result when it returns rather than trusting its summary, (3) persisting the result into the task checklist row + memory, and (4) re-dispatching with a corrected brief when it came back wrong. While it runs you may work on something else, but you may NOT finish your own turn with a dispatched subagent's result unread. "Standing by" while results sit unread is negligence.`
195
186
  },
196
187
  {
197
188
  title: "Coordinator verification \u2014 verify signals, triangulate absence",
198
189
  domain: "workflow",
199
190
  priority: "p0",
200
- content: "Never act on a self-reported lifecycle signal without independent verification. Employee claims 'context-full' -> check tmux capture-pane first; the context bar reads left-to-right (% shown = USED, not remaining) \u2014 never kill a session under 80% used. 'Task done' -> read the deliverable and run the verification yourself. Before reporting absence ('no tasks', 'no work was done', 'agent is idle'), triangulate at least three sources: task DB across ALL statuses with project_name='all', output artifacts in exe/output/, and team memory. A null result from one query is the limit of your filter, not a fact about reality. If verification contradicts a detailed claim, double-check your verification before accusing the agent."
191
+ content: "Never act on a self-reported claim without independent verification. 'Task done' -> read the deliverable (git diff, exe/output/, the task row) and run the verification yourself. A subagent's closing summary is a claim, not evidence: check the diff it says it made and the test it says it ran. Before reporting absence ('no tasks', 'no work was done', 'agent is idle'), triangulate at least three sources: task DB across ALL statuses with project_name='all', output artifacts in exe/output/, and team memory. A null result from one query is the limit of your filter, not a fact about reality. If verification contradicts a detailed claim, double-check your verification before accusing the agent."
201
192
  },
202
193
  {
203
194
  title: "COO boot health check \u2014 trust the boot script, verify on request",
@@ -206,16 +197,16 @@ var PLATFORM_PROCEDURES = [
206
197
  content: "At startup, run only the /exe boot script; it prints daemon/MCP health, memory counts, cloud sync status, tasks, and blockers. Do NOT run pgrep, grep logs, or independent DB health queries at boot. If the founder asks for current health after boot, use diagnostics(action='daemon_health') or `exe-os healthcheck` and report verified results."
207
198
  },
208
199
  {
209
- title: "Employee session lifecycle \u2014 boot, preservation, and closeout",
200
+ title: "Session lifecycle \u2014 boot, preservation, and closeout",
210
201
  domain: "workflow",
211
202
  priority: "p0",
212
- content: "EMPLOYEE BOOT: Run `exe-os boot --project <project>` at employee project-session start. Coordinator startup uses the /exe boot script instead. Shows: working memory count, active behaviors, identity loaded, last session summary (where you left off), daemon health. Read summary first. Auto-detects project from git repo. PRESERVATION (three automatic layers): (1) EVERY RESPONSE: Stop hook writes periodic checkpoint (lightweight, every N responses). (2) /EXIT OR CLOSE: SessionEnd hook runs dreaming cycle + continuity checkpoint + summary commit (15s timeout, separate process). (3) MID-SESSION SAVE: `config(action='closeout')` \u2014 same dreaming+summary with full agent context (no timeout, richer). CLI equivalent: `exe-os snapshot`. Use when approaching context limits. CRASH/SIGKILL: no hooks fire \u2014 periodic checkpoints are your safety net. Normal /exit: SessionEnd handles everything automatically."
203
+ content: "BOOT: Coordinator startup uses the /exe boot script. Any other session in a project runs `exe-os boot --project <project>`. Shows: working memory count, active behaviors, identity loaded, last session summary (where you left off), daemon health. Read summary first. Auto-detects project from git repo. PRESERVATION (three automatic layers): (1) EVERY RESPONSE: Stop hook writes periodic checkpoint (lightweight, every N responses). (2) /EXIT OR CLOSE: SessionEnd hook runs dreaming cycle + continuity checkpoint + summary commit (15s timeout, separate process). (3) MID-SESSION SAVE: `config(action='closeout')` \u2014 same dreaming+summary with full agent context (no timeout, richer). CLI equivalent: `exe-os snapshot`. Use when approaching context limits. CRASH/SIGKILL: no hooks fire \u2014 periodic checkpoints are your safety net. Normal /exit: SessionEnd handles everything automatically."
213
204
  },
214
205
  {
215
- title: "Structured handoffs \u2014 use typed messages instead of free text",
206
+ title: "Structured handoffs \u2014 record work on the task row, not in a message",
216
207
  domain: "communication",
217
208
  priority: "p1",
218
- content: "Use typed message envelopes via send_message `type` param: task_result, status_update, question, blocker, handoff, review_request. Each has structured payload (files_changed, decisions, blockers, progress_pct). `update_task(done)` auto-generates a TaskResultPayload. Receiving agents see formatted summaries. Free text still works but typed messages are preferred for task-related communication."
209
+ content: "Task work is handed off through the DB, never through a message: update_task(done) carries the structured result (files_changed, commits, decisions, blockers, assertions_resolved) and is what the reviewer reads. A subagent's result is handed off by the dispatcher persisting it into that task row + memory before finishing. send_message is for human-directed notes between coordinator sessions (FYI, a question, a heads-up) and is fire-and-forget \u2014 NEVER use it to assign, deliver, or accept actionable work."
219
210
  },
220
211
  {
221
212
  title: "Assertions and estimation \u2014 mandatory confidence tracking on every task",
@@ -236,10 +227,10 @@ var PLATFORM_PROCEDURES = [
236
227
  content: "Wrong assertion -> next assertion on SAME problem must have lower confidence. First attempt: honest confidence. Second after failure: cap 0.5. Third: cap 0.3. After 3 failures: STOP. Reassess entire approach \u2014 your mental model is fundamentally wrong. Read code from scratch, check assumptions, trace execution. The pattern 'confident fix -> wrong -> repeat' destroys trust faster than admitting 'I don't know.'"
237
228
  },
238
229
  {
239
- title: "Use /exe-afk for monitoring \u2014 /loop is deprecated for orchestration",
230
+ title: "No monitoring loops \u2014 pull the queue on every prompt instead",
240
231
  domain: "workflow",
241
232
  priority: "p1",
242
- content: "For monitoring/orchestration (review checking, liveness, pipeline health), use /exe-afk not /loop. /loop lacks MCP health check, cycle mutex, and timeout \u2014 MCP disconnect freezes session permanently. /exe-afk checks daemon liveness each cycle, skips if unhealthy, uses lockfile mutex, times out hung commands. Default: 5 min, configurable via /exe-afk <minutes>."
233
+ content: "There is nothing to poll: subagents return their results to the dispatching context, so a timer that watches other sessions has no job. Do NOT run /loop (or any self-scheduled monitoring loop) for orchestration \u2014 it has no MCP health check, no cycle mutex and no timeout, so an MCP disconnect freezes the session permanently. Instead: check task(action='list', status='needs_review') and blocked tasks on every prompt, and dispatch the next subagent yourself. A genuine recurring job (a nightly report, a CI sweep) belongs in config(action='create_trigger'), not in a chat loop."
243
234
  },
244
235
  {
245
236
  title: "exe-build-adv mandatory for 3+ files",
@@ -276,19 +267,19 @@ var PLATFORM_PROCEDURES = [
276
267
  title: "Task lifecycle \u2014 the golden path every agent follows",
277
268
  domain: "workflow",
278
269
  priority: "p0",
279
- content: "Tasks are durable, session-scoped checklist/notepad records by default; native subagent execution is orchestrated separately in the current context. For rung-3 legacy work (tmux employees \u2014 see the Dispatch Ladder), execution_mode='durable_tmux' is explicit dispatch + delivery. Task lifecycle: open -> in_progress (you start) -> done (update_task when finished) -> needs_review (reviewer nudged) -> closed (COO only via close_task). DB is the reliable delivery \u2014 intercom is just a speedup nudge. If you finish a task, self-chain: check for next task immediately (step 7). Never wait for a nudge. Never say 'standing by.'"
270
+ content: "Tasks are durable, session-scoped CHECKLIST records \u2014 they track work, they never dispatch it. Execution is always the current context or a named subagent it launches (see the Dispatch Ladder). Task lifecycle: open -> in_progress (you start) -> done (update_task when finished) -> needs_review -> closed (COO only via close_task). The DB row is the delivery: a subagent's result is not delivered until it is written there. If you finish a task, self-chain: check for the next task immediately (step 7). Never wait to be nudged. Never say 'standing by.'"
280
271
  },
281
272
  {
282
273
  title: "Review chain \u2014 managers must actively pull completed work, never wait for nudges",
283
274
  domain: "workflow",
284
275
  priority: "p0",
285
- content: "When you dispatch work, you OWN the review. Check list_tasks(status='needs_review') on EVERY prompt \u2014 don't wait for intercom. When needs_review: (1) read deliverable (git diff, exe/output/, task summary), (2) verify it works (tsc, build, run), (3) close_task if good or create fix task if not. Reviews sitting >30 min is a pipeline stall. Chain: worker update_task(done) -> needs_review -> manager pulls and verifies -> close_task -> COO reviews -> merge."
276
+ content: "When you dispatch work, you OWN the review. Check list_tasks(status='needs_review') on EVERY prompt \u2014 don't wait to be told. When needs_review: (1) read deliverable (git diff, exe/output/, task summary), (2) verify it works (tsc, build, run), (3) close_task if good or create fix task if not. Reviews sitting >30 min is a pipeline stall. Chain: worker update_task(done) -> needs_review -> manager pulls and verifies -> close_task -> COO reviews -> merge."
286
277
  },
287
278
  {
288
- title: "Intercom is a speedup, not delivery \u2014 DB is the source of truth",
279
+ title: "The DB is the source of truth \u2014 a nudge is never delivery",
289
280
  domain: "architecture",
290
281
  priority: "p0",
291
- content: "Tasks live in the DB. Intercom (tmux send-keys) is fire-and-forget \u2014 it may fail, get garbled, or arrive mid-work. Never rely on intercom for task delivery. The UserPromptSubmit hook checks the DB for new tasks on every prompt. Your operating procedures step 7 says check for next work. The daemon nudges idle agents as a speedup. If you have no tasks, you found them all."
282
+ content: "Tasks live in the DB. Any nudge that reaches you out of band (a message, a hook notice, a daemon ping) is fire-and-forget \u2014 it may fail, get garbled, or arrive mid-work \u2014 so it is a speedup, never delivery, and acting on one without re-reading the task row is how agents work from stale instructions. The UserPromptSubmit hook checks the DB for new tasks on every prompt; your operating procedures step 7 says check for next work. If you have no tasks, you found them all."
292
283
  },
293
284
  // --- Encryption key + cloud sync ---
294
285
  {
@@ -297,18 +288,12 @@ var PLATFORM_PROCEDURES = [
297
288
  priority: "p0",
298
289
  content: "Master key is in macOS Keychain (Secure Enclave) or Linux secret-tool \u2014 NOT a file. No ~/.exe-os/master.key on modern installs (auto-migrated to Keychain). Device linking: Device 1 runs `exe-os cloud link --show-full` to reveal 24-word BIP39 phrase, Device 2 runs `exe-os cloud` and pastes it. NEVER display/log/return the phrase in agent output. Tell user: 'Run exe-os cloud link --show-full in your Terminal.'"
299
290
  },
300
- {
301
- title: "Cloud endpoint is api.askexe.com \u2014 not askexe.com/cloud or cloud.askexe.com",
302
- domain: "architecture",
303
- priority: "p1",
304
- content: "All cloud API calls go to https://api.askexe.com (Cloudflare Workers Custom Domain). NOT askexe.com/cloud or cloud.askexe.com (legacy, auto-migrated). Bypasses zone-level Bot Fight Mode that 403s datacenter IPs on askexe.com. If customer reports 403/challenge on cloud sync: verify latest exe-os version. Fix: `npm install -g @askexenow/exe-os@latest`. Override: EXE_CLOUD_ENDPOINT env var."
305
- },
306
291
  // --- MCP is the ONLY data interface ---
307
292
  {
308
293
  title: "MCP disconnect \u2014 ask the user, never work around it",
309
294
  domain: "workflow",
310
295
  priority: "p0",
311
- content: "If MCP tools are unavailable, disconnected, or returning connection errors: STOP. Tell the user: 'MCP server is disconnected. Please run /mcp to reconnect.' No workarounds \u2014 no raw Node imports, no direct DB, no CLI hacks, no daemon socket calls, no tmux send-keys. MCP is the ONLY data interface AND dispatch path. When down, you cannot create tasks, send messages, or coordinate agents. Ask once, wait, proceed when reconnected."
296
+ content: "If MCP tools are unavailable, disconnected, or returning connection errors: STOP. Tell the user: 'MCP server is disconnected. Please run /mcp to reconnect.' No workarounds \u2014 no raw Node imports, no direct DB, no CLI hacks, no daemon socket calls, no hand-started background sessions. MCP is the ONLY data interface. When down, you cannot create tasks, send messages, or record results. Ask once, wait, proceed when reconnected."
312
297
  },
313
298
  // --- Engineering discipline (coding agents) ---
314
299
  {
@@ -360,7 +345,7 @@ var PLATFORM_REFERENCE_PROCEDURES = [
360
345
  title: "MCP tool reference \u2014 all domains and key actions",
361
346
  domain: "tool-use",
362
347
  priority: "p1",
363
- content: "exe-os MCP uses action-based dispatch (19 consolidated tools). Legacy 108-tool surface via EXE_MCP_TOOL_SURFACE=legacy. MEMORY: recall (search, as_of for bi-temporal, kind filter, retrieval_mode: all|decisions_only|procedures_only|operational|recent_high_value|document_aware) | ask_team | store (kind, procedure_for) | commit (high-importance) | search_everything | session_context | get_by_id | consolidate | cardinality | supersede. DECISION: store (domain, decision, rationale) | get (domain or query). TASK: create (title, assigned_to, context; defaults to checklist with zero execution side effects; blocked_by, parent_task_id, reviewer, complexity, budget_tokens, group_id, work_ref; execution_mode='durable_tmux' is the explicit legacy dispatch opt-in and enables spawn_runtime/spawn_model) | list | get | update (in_progress/done/blocked/cancelled + assertions) | close (COO only) | checkpoint | resume. GRAPH: query_relationships | entity_neighbors | hot_entities | stats | export | merge_entities | similar_trajectories. IDENTITY: get | update. BEHAVIOR: store | list | deactivate. SUPPORT: create_bug (title, description, severity p0-p3, product param for any AskExe product) | create_feature (title, description, use_case, proposed_solution) | list_my_bugs | list_my_features | triage_bug (AskExe-internal, uses triage_notes NOT notes) | health. MESSAGE: send | acknowledge. REMINDER: create | list | complete. SESSION: events | last_response. WIKI: list | get. DOCUMENT: ingest | list | purge | set_importance | rerank. CRM: list_people | get_person | list_tables | describe_table. RAW_DATA: list_sources | query | get. GATEWAY: send_whatsapp | query_conversations | query_company_brain. CONFIG: list_employees | set_agent_config | agent_spend | daemon_health | license_status | cloud_sync (cloud_action: status|sync|reupload) | memory_audit | run_consolidation | restart_telemetry | worker_gate | auto_wake_status | orchestration_phase | company_procedure (store|list|deactivate) | global_procedure | create_trigger | list_triggers | export_orchestration | import_orchestration | closeout | capability_cards (query param for best-agent match). DIAGNOSTICS: healthcheck | doctor | status_brief | check_update | stack_update_check | cloud_status | pending_work_summary | rename_employee | tool_search | drift. DREAMING: run | status | history. MCP_PING: daemon health + license + tool usage + retrieval health. Unsure an MCP path exists? diagnostics(action='tool_search', query='...') finds it before punting to the terminal. cloud_sync(cloud_action='reupload') is destructive \u2014 requires confirm_local_db_source_of_truth='LOCAL DB IS SOURCE OF TRUTH'."
348
+ content: "exe-os MCP uses action-based dispatch (19 consolidated tools). Legacy 108-tool surface via EXE_MCP_TOOL_SURFACE=legacy. MEMORY: recall (search, as_of for bi-temporal, kind filter, retrieval_mode: all|decisions_only|procedures_only|operational|recent_high_value|document_aware) | ask_team | store (kind, procedure_for) | commit (high-importance) | search_everything | session_context | get_by_id | consolidate | cardinality | supersede. DECISION: store (domain, decision, rationale) | get (domain or query). TASK: create (title, assigned_to, context; a durable checklist row with zero execution side effects \u2014 it never dispatches; blocked_by, parent_task_id, reviewer, complexity, budget_tokens, group_id, work_ref) | list | get | update (in_progress/done/blocked/cancelled + assertions) | close (COO only) | checkpoint | resume. spawn_model / spawn_runtime: accepted for compatibility and ignored \u2014 the response says so; model/runtime per employee come from set_agent_config and the Agent tool's own model arg. GRAPH: query_relationships | entity_neighbors | hot_entities | stats | export | merge_entities | similar_trajectories. IDENTITY: get | update. BEHAVIOR: store | list | deactivate. SUPPORT: create_bug (title, description, severity p0-p3, product param for any AskExe product) | create_feature (title, description, use_case, proposed_solution) | list_my_bugs | list_my_features | triage_bug (AskExe-internal, uses triage_notes NOT notes) | health. MESSAGE: send | acknowledge. REMINDER: create | list | complete. SESSION: events | last_response. WIKI: list | get. DOCUMENT: ingest | list | purge | set_importance | rerank. CRM: list_people | get_person | list_tables | describe_table. RAW_DATA: list_sources | query | get. GATEWAY: send_whatsapp | query_conversations | query_company_brain. CONFIG: list_employees | set_agent_config | agent_spend | daemon_health | license_status | cloud_sync (cloud_action: status|sync|reupload) | memory_audit | run_consolidation | restart_telemetry | worker_gate | auto_wake_status | orchestration_phase | company_procedure (store|list|deactivate) | global_procedure | create_trigger | list_triggers | export_orchestration | import_orchestration | closeout | capability_cards (query param for best-agent match). DIAGNOSTICS: healthcheck | doctor | status_brief | check_update | stack_update_check | cloud_status | pending_work_summary | rename_employee | tool_search | drift. DREAMING: run | status | history. MCP_PING: daemon health + license + tool usage + retrieval health. Unsure an MCP path exists? diagnostics(action='tool_search', query='...') finds it before punting to the terminal. cloud_sync(cloud_action='reupload') is destructive \u2014 requires confirm_local_db_source_of_truth='LOCAL DB IS SOURCE OF TRUTH'."
364
349
  },
365
350
  {
366
351
  title: "Cognition features \u2014 dreaming, reflexes, baselines, hot-path summary",
@@ -390,7 +375,31 @@ var PLATFORM_REFERENCE_PROCEDURES = [
390
375
  title: "MCP capability quick-reference \u2014 operations & orchestration surface",
391
376
  domain: "tool-use",
392
377
  priority: "p1",
393
- content: "Beyond data reads/writes, use MCP over ad-hoc workarounds. Automation: config(create_trigger|list_triggers). Parallel dispatch barrier: task(create_group|group_status|group_results); verify_dispatch confirms ack. Push reminders: task(reminder_create) with daily_push. Decisions: memory(decision_store|decision_get|supersede). Prior solutions: graph(similar_trajectories). Org backup/restore: config(export_orchestration|import_orchestration). Self-improvement: config(dreaming_run|dreaming_status)."
378
+ content: "Beyond data reads/writes, use MCP over ad-hoc workarounds. Automation: config(create_trigger|list_triggers). Parallel-work barrier: task(create_group|group_status|group_results) tracks a fan-out of subagents as one unit. Push reminders: task(reminder_create) with daily_push. Decisions: memory(decision_store|decision_get|supersede). Prior solutions: graph(similar_trajectories). Org backup/restore: config(export_orchestration|import_orchestration). Self-improvement: config(dreaming_run|dreaming_status)."
379
+ },
380
+ {
381
+ title: "When to hire new employees \u2014 scaling signals for the COO",
382
+ domain: "workflow",
383
+ priority: "p1",
384
+ content: "COO recommends hiring (/exe-new-employee) when: GM needed: separate project needs dedicated coordination, COO spending >30% context on it. Engineer: CTO has 5+ queued tasks, parallelization maxed. Content specialist: CMO backlog exceeds 1 week. Auditor: quality gates being skipped under pressure. General rule: if a role spends >50% time on delegatable work, hire. Templates: coo, cto, cmo, gm, principal-engineer, content-specialist, ai-specialist, staff-code-reviewer. Usage: /exe-new-employee <name> --role <template>."
385
+ },
386
+ {
387
+ title: "Cloud endpoint is api.askexe.com \u2014 not askexe.com/cloud or cloud.askexe.com",
388
+ domain: "architecture",
389
+ priority: "p1",
390
+ content: "All cloud API calls go to https://api.askexe.com (Cloudflare Workers Custom Domain). NOT askexe.com/cloud or cloud.askexe.com (legacy, auto-migrated). Bypasses zone-level Bot Fight Mode that 403s datacenter IPs on askexe.com. If customer reports 403/challenge on cloud sync: verify latest exe-os version. Fix: `npm install -g @askexenow/exe-os@latest`. Override: EXE_CLOUD_ENDPOINT env var."
391
+ },
392
+ {
393
+ title: "Daemon logs and session lifecycle \u2014 full transparency for debugging",
394
+ domain: "operations",
395
+ priority: "p1",
396
+ content: "Daemon logs to ~/.exe-os/logs/exed-launchd.log. Primary debugging tool. Shows: session spawns, idle kills (90s graceful warning), event loop health (>3s warn, >10s CRITICAL), task enforcement (60s cycle), intercom delivery, MCP sessions, cloud sync. Read: `tail -100 ~/.exe-os/logs/exed-launchd.log` or /exe-doctor. Enforcement audit: ~/.exe-os/enforcement-audit.jsonl (structured JSONL). If agent seems stuck or killed unexpectedly, READ LOGS FIRST before reporting a bug."
397
+ },
398
+ {
399
+ title: "Bug lifecycle \u2014 full detail (filing gate, triage-as-state, dedupe, reconciliation)",
400
+ domain: "support",
401
+ priority: "p1",
402
+ content: "Full detail behind the always-injected 'Bug lifecycle' procedure (feature c06e754f). Root cause it fixes: an audit of 187 open bugs found 161 essay-length summaries (>800 chars), ZERO with reproduction_steps, ZERO with expected/actual, and package_version='unknown' on every agent filing \u2014 170 of 187 filed by our own agents in three nights. The schema always had these fields; they were optional, so nobody filled them in. \n\nFILING GATE (create_bug, enforced in create-bug-report.ts's handler \u2014 covers both the raw tool and support(action='create_bug')): reproduction_steps requires at least one CONCRETE step (a backticked command, a test id containing '::' or matching describe()/it(), or a UI-action verb aimed at something \u2014 not narrative). expected and actual are required non-empty strings. observed_kind (failing_test/command_output/log_excerpt/screenshot/live_probe) plus evidence_pointer (the test id, command+output excerpt, log path+line, or artifact path) are both required. screenshot and log_excerpt exist specifically so admin (on_behalf_of_email) and TUI/desktop customer-facing filings \u2014 where a human, not a command line, is doing the observing \u2014 can still satisfy the gate. summary/description caps at 1500 chars; anything longer belongs in add_comment AFTER filing, not in the filing itself. package_version is auto-resolved from the installed package.json (readPackageVersion() in mcp-transport-health.ts, the same helper the diagnostics/health tools use) whenever the caller omits it or it's unreadable \u2014 it should never read 'unknown' when the version is actually on disk. No repro you actually observed, or nothing to point at? File it as memory(action='store', domain='lesson') instead, or as a feature if what's missing is a control, not a defect.\n\nDEDUPE PRE-CHECK: before creating, one list call fetches the caller's own OPEN bugs for the same product (cached in-process for ~5 minutes so repeated filings in a session don't re-fetch). Candidates are found by title-token overlap (>=50% of the new title's significant tokens present in an existing title) or a shared file path/symbol between reproduction context and an existing bug's files_changed. A match refuses ONCE, listing candidate ids/titles; the caller acknowledges with not_duplicate_of:[ids] on retry if it is genuinely distinct. Dedupe fails OPEN on a network error \u2014 it is a courtesy check, not a gate that can block filing when the list call itself fails.\n\nLIFECYCLE = open -> triaged -> fixed -> closed, and each transition is RECORD STATE, never just a comment: triaged means classification is set via triage_bug(status='triaged', classification=...) \u2014 note the historical bug where triage_bug's inputSchema omitted the classification field entirely, so a caller's classification silently fell into an unused rest-spread and never reached the PATCH body, leaving every triaged record stuck at classification='unclear' regardless of what was passed (fixed alongside this procedure, with a regression test) \u2014 OR a fix PR merging, which the merged-PR reconciler auto-transitions to triaged (see the separate 'Link fix PRs to bugs at PR-open time' procedure for that linkage). fixed requires a verification artifact via update_bug/triage_bug (verification_kind \u2208 regression_test/manual/ops_transcript, per support-verification-input.ts) \u2014 a status flip alone is refused server-side. closed requires delivery proof. NEVER re-triage a record whose triaged_at is already set unless there is genuinely new evidence \u2014 re-triaging on a whim erodes the signal that triaged_at is supposed to carry. Comments (add_comment) are for narrative and context; they are never a substitute for writing the state fields. Tag repeat-class issues (the same root cause recurring across multiple filings) in triage_notes so the pattern becomes visible in listings \u2014 there is no separate repeat-of column, so this is a documented convention, not a new schema field."
394
403
  }
395
404
  ];
396
405
  function getPlatformReferenceMarkdown() {
@@ -399,6 +408,14 @@ function getPlatformReferenceMarkdown() {
399
408
  ${p.content}`).join("\n\n");
400
409
  return "# exe-os Platform Reference (read on demand)\n\nAuto-generated at COO boot from the installed exe-os version. These sections are intentionally NOT injected into every session's system prompt \u2014 read them here when a task needs them.\n\n" + body + "\n";
401
410
  }
411
+ function writePlatformReferenceFile(targetDir) {
412
+ try {
413
+ const dir = targetDir ?? path.join(process.env.EXE_OS_DIR ?? path.join(os.homedir(), ".exe-os"), "reference");
414
+ mkdirSync(dir, { recursive: true });
415
+ writeFileSync(path.join(dir, "platform-reference.md"), getPlatformReferenceMarkdown(), "utf8");
416
+ } catch {
417
+ }
418
+ }
402
419
  var PLATFORM_PROCEDURE_TITLES = new Set(
403
420
  [...PLATFORM_PROCEDURES, ...PLATFORM_REFERENCE_PROCEDURES].map((p) => p.title)
404
421
  );
@@ -407,5 +424,6 @@ export {
407
424
  PLATFORM_PROCEDURES,
408
425
  PLATFORM_REFERENCE_PROCEDURES,
409
426
  getPlatformReferenceMarkdown,
427
+ writePlatformReferenceFile,
410
428
  PLATFORM_PROCEDURE_TITLES
411
429
  };
@@ -212,7 +212,7 @@ async function main(args) {
212
212
  console.log("[health-gate] Starting rollback...");
213
213
  restorePreDeployBackup();
214
214
  try {
215
- const { rollbackStackUpdate, defaultStackPaths } = await import("./stack-update-ZQQ5YYPJ.js");
215
+ const { rollbackStackUpdate, defaultStackPaths } = await import("./stack-update-U53FBVCQ.js");
216
216
  const paths = defaultStackPaths();
217
217
  await rollbackStackUpdate({
218
218
  manifestRef: paths.manifestRef,
@@ -77,14 +77,24 @@ function hostMatchesDomain(host, domain) {
77
77
  if (!h || !d) return false;
78
78
  return h === d || h.endsWith(`.${d}`);
79
79
  }
80
+ function compareVersions(a, b) {
81
+ const pa = a.split(".").map((x) => Number.parseInt(x, 10));
82
+ const pb = b.split(".").map((x) => Number.parseInt(x, 10));
83
+ for (let i = 0; i < Math.max(pa.length, pb.length); i += 1) {
84
+ const na = Number.isFinite(pa[i]) ? pa[i] : 0;
85
+ const nb = Number.isFinite(pb[i]) ? pb[i] : 0;
86
+ if (na !== nb) return na - nb;
87
+ }
88
+ return 0;
89
+ }
80
90
  function resolveStack(manifest, requested) {
81
91
  if (manifest.services && !manifest.stacks) {
82
- return { version: manifest.version ?? "(single)", services: manifest.services };
92
+ return { version: manifest.version ?? "(single)", services: manifest.services, found: true };
83
93
  }
84
- if (!manifest.stacks) return { version: "(none)", services: {} };
85
- const version = requested ?? manifest.latest ?? Object.keys(manifest.stacks).sort().pop() ?? "";
94
+ if (!manifest.stacks) return { version: "(none)", services: {}, found: false };
95
+ const version = requested ?? manifest.latest ?? [...Object.keys(manifest.stacks)].sort(compareVersions).pop() ?? "";
86
96
  const entry = manifest.stacks[version];
87
- return { version, services: entry?.services ?? {} };
97
+ return { version, services: entry?.services ?? {}, found: entry !== void 0 };
88
98
  }
89
99
  function isAskExeImage(image) {
90
100
  return image.startsWith("ghcr.io/askexe/") || image.startsWith("update.askexe.com/askexe/");
@@ -480,7 +490,10 @@ function runPreflight(options) {
480
490
  failed: 1
481
491
  };
482
492
  }
483
- const { version, services } = resolveStack(manifest, options?.stackVersion);
493
+ const { version, services, found } = resolveStack(manifest, options?.stackVersion);
494
+ if (!found) {
495
+ return absentStackReport(manifest, version, manifestPath, options?.stackVersion !== void 0 ? "requested" : "selected");
496
+ }
484
497
  const repoRoot = path.resolve(path.dirname(manifestPath), "..", "..");
485
498
  const envExamplePath = options?.envExamplePath ?? path.join(repoRoot, "deploy", "compose", ".env.example");
486
499
  const composePath = options?.composePath ?? path.join(repoRoot, "deploy", "compose", "docker-compose.yml");
@@ -494,9 +507,23 @@ function runPreflight(options) {
494
507
  const { verdict, passed, warned, failed } = tally(findings);
495
508
  return { verdict, manifestPath, stackVersion: version, findings, passed, warned, failed };
496
509
  }
510
+ function absentStackReport(manifest, version, label, how) {
511
+ const known = Object.keys(manifest.stacks ?? {}).join(", ") || "(none)";
512
+ const finding = {
513
+ check: "stack-present",
514
+ status: "fail",
515
+ bug: "absent-stack-is-not-an-empty-stack",
516
+ offenders: [version],
517
+ message: `stack ${version} (${how}) is NOT present in this manifest, so nothing could be checked. This is an unreadable subject, not a failing one \u2014 every check below would have reported its requirement missing purely because the service map was empty. Known stacks: ${known}.` + (how === "selected" ? " Nothing asked for this version: it came from `latest` or from picking the newest key, so the MANIFEST is inconsistent \u2014 `latest` names a stack that does not exist." : " If this came from a dry run, the caller preflighted a version it had not written.")
518
+ };
519
+ return { verdict: "RED", manifestPath: label, stackVersion: version, findings: [finding], passed: 0, warned: 0, failed: 1 };
520
+ }
497
521
  function runPreflightOnManifest(input) {
498
522
  const label = input.label ?? "(in-memory manifest)";
499
- const { version, services } = resolveStack(input.manifest, input.stackVersion);
523
+ const { version, services, found } = resolveStack(input.manifest, input.stackVersion);
524
+ if (!found) {
525
+ return absentStackReport(input.manifest, version, label, input.stackVersion !== void 0 ? "requested" : "selected");
526
+ }
500
527
  const env = loadEnvLikeFile(input.envExamplePath);
501
528
  const envValues = loadEnvValues(input.envExamplePath);
502
529
  const compose = readComposeText(input.composePath);
@@ -1,17 +1,17 @@
1
1
  import {
2
2
  isExeSession,
3
3
  strictSessionScopeFilter
4
- } from "./chunk-7UHZBVP3.js";
4
+ } from "./chunk-QDVLVLXP.js";
5
5
  import {
6
6
  recordOrchestrationEventBestEffort
7
- } from "./chunk-LSNBTGW4.js";
7
+ } from "./chunk-DPYZW42H.js";
8
8
  import {
9
9
  getProjectName
10
- } from "./chunk-UX2EO653.js";
10
+ } from "./chunk-ZZWFZ46U.js";
11
11
  import {
12
12
  DEFAULT_COORDINATOR_TEMPLATE_NAME,
13
13
  getCoordinatorName
14
- } from "./chunk-GL47M7NY.js";
14
+ } from "./chunk-3UD3OF3X.js";
15
15
  import {
16
16
  loadConfigSync
17
17
  } from "./chunk-MMS2HBRT.js";
@@ -260,7 +260,7 @@ function createRealDeps(getClient) {
260
260
  });
261
261
  },
262
262
  createReviewForOrphan: async (task) => {
263
- const { createReviewForCompletedTask } = await import("./tasks-review-PPPVEE62.js");
263
+ const { createReviewForCompletedTask } = await import("./tasks-review-CG2A5GM3.js");
264
264
  const cwd = process.cwd();
265
265
  await createReviewForCompletedTask(
266
266
  task,
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  createReminder
3
- } from "./chunk-UXN4BICC.js";
3
+ } from "./chunk-XMX5J52Z.js";
4
4
 
5
5
  // src/mcp/tools/create-reminder.ts
6
6
  import { z } from "zod";
@@ -4,10 +4,10 @@ import {
4
4
  extractIdentifiers,
5
5
  isGarbageEntity,
6
6
  normalizeEntityName
7
- } from "./chunk-46VSBDUW.js";
7
+ } from "./chunk-3DCBDG4T.js";
8
8
  import {
9
9
  getClient
10
- } from "./chunk-GL47M7NY.js";
10
+ } from "./chunk-3UD3OF3X.js";
11
11
 
12
12
  // src/lib/memory-graph-extractor.ts
13
13
  function relationshipId(sourceId, targetId, relType) {
@@ -432,7 +432,7 @@ async function upsertMemoryGraph(result, memoryId, opts) {
432
432
  });
433
433
  }
434
434
  try {
435
- const { createCoOccurrenceEdges } = await import("./co-occurrence-R5AG4OAU.js");
435
+ const { createCoOccurrenceEdges } = await import("./co-occurrence-5LBYCW3U.js");
436
436
  await createCoOccurrenceEdges(result.entities, memoryId, { linkOnly });
437
437
  } catch {
438
438
  }