@askexenow/exe-os 0.9.359 → 0.9.362

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (451) hide show
  1. package/deploy/compose/docker-compose.yml +7 -1
  2. package/deploy/compose/generate-env.ts +23 -4
  3. package/deploy/compose/sso-edge/default.conf.template +35 -0
  4. package/deploy/compose/sso-edge/sso-redirect.conf +23 -2
  5. package/deploy/stack-manifests/v0.9.json +228 -2
  6. package/dist/.dist-verified.json +3 -3
  7. package/dist/{active-agent-DMKNHGSG.js → active-agent-3FV5V7SS.js} +9 -8
  8. package/dist/{active-agent-Y3DCBD7J.js → active-agent-BPNEBKHI.js} +9 -8
  9. package/dist/{agentic-ontology-3233PNKV.js → agentic-ontology-RCVCJ6WB.js} +1 -1
  10. package/dist/{backfill-gate-DA7UT6UD.js → backfill-gate-LRX77SUD.js} +3 -2
  11. package/dist/{backfill-metadata-4DS4A5U3.js → backfill-metadata-Y3DGVCK5.js} +12 -11
  12. package/dist/{background-jobs-XGTLESKM.js → background-jobs-Z6KHCWES.js} +3 -2
  13. package/dist/{backup-verify-JNYKXIU2.js → backup-verify-TZPPUCLU.js} +5 -4
  14. package/dist/{behavior-injection-CGAMI552.js → behavior-injection-JMGGWCWG.js} +21 -13
  15. package/dist/{behaviors-57AMN5IP.js → behaviors-TT6CMEKC.js} +20 -12
  16. package/dist/bin/age-ontology-load.js +3 -2
  17. package/dist/bin/agentic-ontology-backfill.js +14 -13
  18. package/dist/bin/agentic-reflection-backfill.js +15 -14
  19. package/dist/bin/agentic-semantic-label.js +14 -13
  20. package/dist/bin/backfill-conversations.js +16 -14
  21. package/dist/bin/backfill-responses.js +16 -14
  22. package/dist/bin/backfill-vectors.js +20 -18
  23. package/dist/bin/bulk-sync-postgres.js +27 -24
  24. package/dist/bin/cc-doctor.js +13 -11
  25. package/dist/bin/cleanup-stale-review-tasks.js +31 -28
  26. package/dist/bin/cli.js +157 -47
  27. package/dist/bin/customer-readiness.js +10 -1
  28. package/dist/bin/deferred-daemon-restart.js +127 -104
  29. package/dist/bin/exe-agent-config.js +9 -8
  30. package/dist/bin/exe-agent.js +17 -16
  31. package/dist/bin/exe-assign.js +18 -16
  32. package/dist/bin/exe-boot.js +62 -49
  33. package/dist/bin/exe-call.js +10 -9
  34. package/dist/bin/exe-cloud.js +29 -26
  35. package/dist/bin/exe-config-dump.js +9 -8
  36. package/dist/bin/exe-dispatch.js +31 -28
  37. package/dist/bin/exe-doctor.js +14 -10
  38. package/dist/bin/exe-export-behaviors.js +22 -14
  39. package/dist/bin/exe-forget.js +14 -13
  40. package/dist/bin/exe-gateway.js +13 -12
  41. package/dist/bin/exe-grant.js +6 -6
  42. package/dist/bin/exe-healthcheck.js +13 -11
  43. package/dist/bin/exe-heartbeat.js +33 -30
  44. package/dist/bin/exe-kill.js +36 -33
  45. package/dist/bin/exe-launch-agent.js +126 -44
  46. package/dist/bin/exe-mcp.js +165 -1
  47. package/dist/bin/exe-memory-reads.js +12 -11
  48. package/dist/bin/exe-new-employee.js +20 -17
  49. package/dist/bin/exe-os-mcp-proxy.js +9 -8
  50. package/dist/bin/exe-pending-messages.js +32 -29
  51. package/dist/bin/exe-pending-notifications.js +31 -28
  52. package/dist/bin/exe-pending-reviews.js +31 -28
  53. package/dist/bin/exe-preflight.js +1 -1
  54. package/dist/bin/exe-rename.js +10 -9
  55. package/dist/bin/exe-review.js +35 -32
  56. package/dist/bin/exe-search.js +13 -12
  57. package/dist/bin/exe-session-cleanup.js +36 -33
  58. package/dist/bin/exe-settings.js +28 -25
  59. package/dist/bin/exe-start-codex.js +27 -19
  60. package/dist/bin/exe-start-opencode.js +23 -15
  61. package/dist/bin/exe-start.sh +11 -7
  62. package/dist/bin/exe-status.js +32 -29
  63. package/dist/bin/exe-support.js +5 -4
  64. package/dist/bin/exe-team.js +9 -8
  65. package/dist/bin/exe-watchdog.js +115 -30
  66. package/dist/bin/git-sweep.js +32 -29
  67. package/dist/bin/graph-backfill.js +14 -13
  68. package/dist/bin/graph-export.js +13 -12
  69. package/dist/bin/import-history.js +16 -15
  70. package/dist/bin/install.js +392 -201
  71. package/dist/bin/intercom-check.js +4 -4
  72. package/dist/bin/mcp-sessions.js +2 -2
  73. package/dist/bin/orchestration-metrics.js +10 -9
  74. package/dist/bin/postgres-agentic-reflection-backfill.js +5 -4
  75. package/dist/bin/postgres-agentic-semantic-backfill.js +4 -3
  76. package/dist/bin/reconcile-backlog.js +2 -2
  77. package/dist/bin/registry-proxy.js +1 -1
  78. package/dist/bin/scan-tasks.js +31 -28
  79. package/dist/bin/setup.js +7 -4
  80. package/dist/bin/shard-migrate.js +13 -12
  81. package/dist/bin/stack-update.js +45 -14
  82. package/dist/bin/update.js +4 -3
  83. package/dist/bin/vps-health-gate.js +1 -1
  84. package/dist/{boot-generation-4D3CTT7X.js → boot-generation-XABYKF5P.js} +9 -8
  85. package/dist/{boot-review-sections-NDFE5443.js → boot-review-sections-2X5TFIGU.js} +30 -27
  86. package/dist/{branch-hygiene-HNSOUDJE.js → branch-hygiene-Z4IBWAOX.js} +2 -1
  87. package/dist/{branding-6FHWZQYQ.js → branding-7MZDHTKN.js} +3 -2
  88. package/dist/build-manifest.json +1249 -1069
  89. package/dist/{capability-cards-OBB7BMMX.js → capability-cards-O5UXDOOA.js} +8 -7
  90. package/dist/{capacity-monitor-QLPEL6S5.js → capacity-monitor-IPXM726A.js} +32 -29
  91. package/dist/{catchup-brief-EN7QR6MP.js → catchup-brief-EBIGDXOK.js} +36 -33
  92. package/dist/{chunk-WRP5AG4D.js → chunk-23KWUA7Z.js} +2 -2
  93. package/dist/{chunk-PDRIIEFV.js → chunk-2FA4PYYX.js} +1 -1
  94. package/dist/chunk-2PRAXZWM.js +261 -0
  95. package/dist/{chunk-R6LNQAUG.js → chunk-327Q53AS.js} +34 -1
  96. package/dist/{chunk-MBULOZJF.js → chunk-32FEF5BW.js} +2 -2
  97. package/dist/{chunk-2YGAKBRG.js → chunk-35FD67ZB.js} +3 -3
  98. package/dist/{chunk-R62ITJDQ.js → chunk-3C7NE4JE.js} +1 -1
  99. package/dist/{chunk-YBX3G5OP.js → chunk-3ICF4IAZ.js} +1 -1
  100. package/dist/{chunk-CVTWQZOR.js → chunk-3L2QU5ZF.js} +14 -2
  101. package/dist/{chunk-I5AVZOL2.js → chunk-3YBJ36UX.js} +2 -2
  102. package/dist/{chunk-NKDKB2RT.js → chunk-465RCKVI.js} +6 -6
  103. package/dist/{chunk-QROIFRKI.js → chunk-4AFD4R35.js} +5 -5
  104. package/dist/{chunk-OSID72CN.js → chunk-4L33OFU4.js} +25 -1
  105. package/dist/{chunk-A6VIK3SS.js → chunk-4P2BFNSB.js} +2 -2
  106. package/dist/{chunk-SIGAQQHW.js → chunk-4R2WD6T3.js} +2 -2
  107. package/dist/{chunk-HPHF5VTT.js → chunk-4U56FZ7B.js} +4 -4
  108. package/dist/{chunk-2KLVTRY2.js → chunk-54USDN5Q.js} +1 -1
  109. package/dist/{chunk-CAEWPEBA.js → chunk-5C6ZIJ7J.js} +1 -1
  110. package/dist/{chunk-46RPEWTH.js → chunk-5H3RHWRE.js} +1 -1
  111. package/dist/chunk-5OPAUFLP.js +126 -0
  112. package/dist/{chunk-EHM4E62N.js → chunk-6DTALXOA.js} +1 -1
  113. package/dist/chunk-6EM6USV7.js +1332 -0
  114. package/dist/{chunk-JE34CB5H.js → chunk-6N3HUOV3.js} +2 -2
  115. package/dist/{chunk-6KREY2Q7.js → chunk-6QJXFLNN.js} +5 -5
  116. package/dist/{chunk-G37RG543.js → chunk-6UZDGEGQ.js} +1 -1
  117. package/dist/{chunk-APR556TY.js → chunk-6Y3KUO7Q.js} +190 -29
  118. package/dist/{chunk-2EAYZ3BK.js → chunk-7H3AZNQ7.js} +9 -9
  119. package/dist/{chunk-C5YZMYQH.js → chunk-7SY2NOMQ.js} +1 -1
  120. package/dist/{chunk-OAYTQ4RY.js → chunk-AL4HXKDJ.js} +55 -12
  121. package/dist/{chunk-VY5VU7SX.js → chunk-AOMFYUPT.js} +2 -2
  122. package/dist/{chunk-EX2SSLNU.js → chunk-AQO3BT3I.js} +12 -12
  123. package/dist/chunk-ARX6TAGN.js +102 -0
  124. package/dist/chunk-B6PFGUYJ.js +159 -0
  125. package/dist/{chunk-FASR2WLT.js → chunk-BDLRTLXY.js} +1 -1
  126. package/dist/chunk-BJEQBKGH.js +218 -0
  127. package/dist/{chunk-BCZF3AGJ.js → chunk-BRIZ6OZ3.js} +34 -44
  128. package/dist/{chunk-OMXJMOBD.js → chunk-BRZR76TS.js} +66 -0
  129. package/dist/{chunk-XV42EAVK.js → chunk-BT2PUK3S.js} +1 -1
  130. package/dist/{chunk-6EOLGE7T.js → chunk-CVYDJ2TW.js} +1 -1
  131. package/dist/{chunk-WCP4OQUL.js → chunk-CXQ724WH.js} +2 -2
  132. package/dist/{chunk-F3QTF4T7.js → chunk-CY5NVDTH.js} +3 -3
  133. package/dist/{chunk-3ODATKWH.js → chunk-D5CY4E7I.js} +1 -1
  134. package/dist/{chunk-W5YV2PZE.js → chunk-DKRDU2AX.js} +16 -16
  135. package/dist/{chunk-SNWV44E5.js → chunk-DSKEYEL2.js} +12 -5
  136. package/dist/{chunk-VXL7PJ56.js → chunk-E3YI6FVJ.js} +5 -24
  137. package/dist/{chunk-6SK4MM5B.js → chunk-E7PL3T2U.js} +1 -1
  138. package/dist/{chunk-IOEUAQWP.js → chunk-EEZOBN6X.js} +1 -1
  139. package/dist/{chunk-AHMUF6RO.js → chunk-G2M7WQ2M.js} +0 -2
  140. package/dist/{chunk-SKGMF2SO.js → chunk-GBNB4EWD.js} +22 -1
  141. package/dist/{chunk-UZ5RJYL3.js → chunk-HAXCUCJC.js} +1 -1
  142. package/dist/{chunk-VMR6M6GN.js → chunk-HISFWAAK.js} +1 -1
  143. package/dist/{chunk-DKRSKC5R.js → chunk-HKQ7UTSE.js} +1 -1
  144. package/dist/chunk-HLQ4MS42.js +257 -0
  145. package/dist/{chunk-EA5FVACM.js → chunk-HLU52KTO.js} +29 -18
  146. package/dist/{chunk-QWVXN224.js → chunk-HPXFKUGU.js} +350 -65
  147. package/dist/{chunk-2OVTGZYH.js → chunk-HSKABJE6.js} +46 -3
  148. package/dist/{chunk-NE57GONM.js → chunk-I3SF6QGV.js} +1 -1
  149. package/dist/chunk-J6KMGEJW.js +238 -0
  150. package/dist/chunk-JKKZGDLP.js +182 -0
  151. package/dist/{chunk-3ZEVMZ4G.js → chunk-JYKZVAS6.js} +1 -1
  152. package/dist/{chunk-4DYJ6NOK.js → chunk-KA4WVDLX.js} +2 -2
  153. package/dist/{chunk-QH2XAUZ5.js → chunk-KBI4FVBZ.js} +1 -1
  154. package/dist/{chunk-VAY6IXWY.js → chunk-KDMVVHZH.js} +1 -1
  155. package/dist/{chunk-4FQIWAXA.js → chunk-KID6T2A4.js} +10 -10
  156. package/dist/{chunk-HNPHPGGF.js → chunk-KIKB6FY3.js} +2 -2
  157. package/dist/{chunk-STFR72YH.js → chunk-LCDW2HUL.js} +1 -1
  158. package/dist/{chunk-RFUTLZ2U.js → chunk-LG37UBBE.js} +4 -4
  159. package/dist/{chunk-3QWOO74G.js → chunk-LLZNPOGB.js} +97 -3
  160. package/dist/chunk-M67ARGXY.js +175 -0
  161. package/dist/chunk-MPVXHYD5.js +85 -0
  162. package/dist/{chunk-RXL7A7JH.js → chunk-MZYNW5OY.js} +1 -1
  163. package/dist/{chunk-DQ75MEPU.js → chunk-MZZN5GFC.js} +1 -1
  164. package/dist/{chunk-X2F6Q7TW.js → chunk-NAHCSQWT.js} +1 -1
  165. package/dist/{chunk-AL7JMA54.js → chunk-NE4QI2GX.js} +2 -2
  166. package/dist/chunk-NGDXBN3M.js +254 -0
  167. package/dist/{chunk-HDSDXGLV.js → chunk-NO5KHKKB.js} +1 -1
  168. package/dist/chunk-NOKJCF27.js +437 -0
  169. package/dist/{chunk-PLOEFBFW.js → chunk-O32HTNRX.js} +3 -3
  170. package/dist/{chunk-UPM5JP6G.js → chunk-OZNCAMS3.js} +47 -4
  171. package/dist/{chunk-XLEYCOHX.js → chunk-P7CV4SHQ.js} +398 -58
  172. package/dist/{chunk-G2KK64UB.js → chunk-PDJWHL63.js} +101 -19
  173. package/dist/{chunk-W3XUU36X.js → chunk-PF7EQSE5.js} +5 -5
  174. package/dist/{chunk-QX7RWICL.js → chunk-PU7UYQRC.js} +1 -1
  175. package/dist/{chunk-A5WEEND7.js → chunk-PUMH7JSB.js} +3 -3
  176. package/dist/{chunk-POZGQQEZ.js → chunk-PV5BIXT6.js} +1 -1
  177. package/dist/{chunk-TG7JYSEA.js → chunk-Q2VQNAPU.js} +5 -2
  178. package/dist/{chunk-Z2PAVJJ4.js → chunk-Q7J2SQJ6.js} +127 -29
  179. package/dist/{chunk-4JERP7NT.js → chunk-QAEWWYHL.js} +29 -1
  180. package/dist/{chunk-6JTKIXLU.js → chunk-QCJT265O.js} +1 -1
  181. package/dist/{chunk-OY2PWHYR.js → chunk-QI25QRUP.js} +2 -2
  182. package/dist/chunk-QILQ5FCG.js +198 -0
  183. package/dist/{chunk-LRETL4I3.js → chunk-QJBX3MBV.js} +3 -3
  184. package/dist/{chunk-57GRYGDU.js → chunk-QP53XLC5.js} +1 -1
  185. package/dist/{chunk-JBAMYKBL.js → chunk-QQMYD4M7.js} +1 -1
  186. package/dist/{chunk-SHEWTDPC.js → chunk-QY3TM2T3.js} +4 -4
  187. package/dist/{chunk-WA2MJGPT.js → chunk-QYRI25IP.js} +3 -3
  188. package/dist/{chunk-QLFN3MUW.js → chunk-RCOIKTHM.js} +1 -1
  189. package/dist/{chunk-ITRKRKS7.js → chunk-RFKRCVGW.js} +1 -1
  190. package/dist/{chunk-HK7SQDKJ.js → chunk-RNSAVQEU.js} +2 -2
  191. package/dist/{chunk-44WFVMZ5.js → chunk-RUUX2ZST.js} +1 -1
  192. package/dist/{chunk-DWKH2H7W.js → chunk-RWKX2TK5.js} +1 -1
  193. package/dist/{chunk-MCNDZU5W.js → chunk-RYRNY6IF.js} +2 -2
  194. package/dist/{chunk-5I3YC7ER.js → chunk-SC6WDF3Q.js} +2 -2
  195. package/dist/chunk-SLBOKYYQ.js +197 -0
  196. package/dist/{chunk-74R44E4S.js → chunk-SQM4ZTL2.js} +246 -96
  197. package/dist/{chunk-KIXNMTGC.js → chunk-SRFRUN66.js} +5 -5
  198. package/dist/chunk-SXKIGBNF.js +61 -0
  199. package/dist/chunk-T2RZU7JA.js +2607 -0
  200. package/dist/{chunk-2I23RPSI.js → chunk-TKDITWDN.js} +9 -0
  201. package/dist/{chunk-5UAMBMNR.js → chunk-TN2E6ZCM.js} +44 -34
  202. package/dist/{chunk-SQBNN44X.js → chunk-TP7RXGMP.js} +49 -15
  203. package/dist/{chunk-GSVQBBE5.js → chunk-TY4JLBFO.js} +2 -2
  204. package/dist/{chunk-7QRMFYOV.js → chunk-UHPMK6QZ.js} +17 -3
  205. package/dist/{chunk-LPKTGK7L.js → chunk-UO5QJ2RX.js} +4 -4
  206. package/dist/{chunk-VCCZQDCU.js → chunk-URNVIZXU.js} +3 -3
  207. package/dist/{chunk-OIS5VIAH.js → chunk-UWEFIIEG.js} +6 -2
  208. package/dist/{chunk-IQWAYXVF.js → chunk-V5I5N7NC.js} +3 -3
  209. package/dist/{chunk-GD7VXXW6.js → chunk-V6YLIDLK.js} +801 -180
  210. package/dist/chunk-VAOUB2TK.js +23 -0
  211. package/dist/{chunk-XVTKJEI2.js → chunk-VDMFVUSY.js} +3 -3
  212. package/dist/{chunk-RJ67HG2P.js → chunk-VWTUKKUF.js} +4 -4
  213. package/dist/{chunk-4WSUP4CC.js → chunk-W3LKIQJ2.js} +43 -17
  214. package/dist/{chunk-EUQF3JOH.js → chunk-WBG7XYVR.js} +1 -1
  215. package/dist/{chunk-YKRNH5LU.js → chunk-WH2VVEGD.js} +1 -1
  216. package/dist/{chunk-NP2Y7P3I.js → chunk-WP2TGH5R.js} +1 -1
  217. package/dist/chunk-WT4RI36X.js +23 -0
  218. package/dist/{chunk-LXG37RB2.js → chunk-XJIRUTGJ.js} +1 -1
  219. package/dist/chunk-XRCX6R5S.js +57 -0
  220. package/dist/{chunk-XWWNRFRF.js → chunk-XSYQ5EPE.js} +11 -11
  221. package/dist/{chunk-HKK7LLS5.js → chunk-XTGR3LMF.js} +34 -3
  222. package/dist/{chunk-HLEZ5O5P.js → chunk-XUB4GFPN.js} +17 -15
  223. package/dist/chunk-YZUHSV24.js +277 -0
  224. package/dist/{chunk-6WHYSLGF.js → chunk-Z67DIJKT.js} +1 -1
  225. package/dist/{chunk-6LY3QSJA.js → chunk-ZI3HA3XW.js} +11 -6
  226. package/dist/{chunk-YEOIPUFO.js → chunk-ZR4CQBAP.js} +1 -1
  227. package/dist/{chunk-VNK3MNZE.js → chunk-ZZEKOI2M.js} +1 -1
  228. package/dist/{cleanup-graph-garbage-XFGY4EEE.js → cleanup-graph-garbage-6F22Y5SD.js} +13 -12
  229. package/dist/{cloud-sync-shutdown-XCOATIJW.js → cloud-sync-shutdown-FWERMZB5.js} +8 -7
  230. package/dist/{co-activation-XNBLOGK3.js → co-activation-UEEDCM5U.js} +8 -7
  231. package/dist/{co-occurrence-HO4PGQC4.js → co-occurrence-W6OPFRSY.js} +11 -10
  232. package/dist/{code-context-index-5RY66SWZ.js → code-context-index-DWR6HS35.js} +7 -5
  233. package/dist/consent-passphrase-Z64GFJXK.js +23 -0
  234. package/dist/{conversation-entity-extractor-5G5DGRJU.js → conversation-entity-extractor-LWUIH3UB.js} +3 -3
  235. package/dist/{conversation-wiki-populator-RZKG6PK4.js → conversation-wiki-populator-5EGRW2UZ.js} +1 -1
  236. package/dist/{crdt-sync-6TD7LSZW.js → crdt-sync-NHJX3ZJD.js} +5 -4
  237. package/dist/{crm-webhook-WZAV5776.js → crm-webhook-OY467ATC.js} +2 -2
  238. package/dist/{cto-delegation-gate-UHMYFM4D.js → cto-delegation-gate-XH4YSQVC.js} +30 -27
  239. package/dist/{daemon-auth-SXZHLUYS.js → daemon-auth-OCHW2U6B.js} +3 -2
  240. package/dist/{daemon-orchestration-DT5M2ZAR.js → daemon-orchestration-7425ZVNH.js} +35 -32
  241. package/dist/{daemon-ready-56VAPZU6.js → daemon-ready-VGPSRI3Z.js} +1 -1
  242. package/dist/{daemon-restart-circuit-breaker-5V6B6NLS.js → daemon-restart-circuit-breaker-SMTWFX27.js} +25 -3
  243. package/dist/db-backend-ODVJ3Q3D.js +7 -0
  244. package/dist/{db-restore-events-ZLD2HRQV.js → db-restore-events-TFCZ4CPM.js} +2 -1
  245. package/dist/{doc-graph-extractor-FNCYPFKY.js → doc-graph-extractor-RR2VSO4W.js} +11 -10
  246. package/dist/{documents-GKDZDUED.js → documents-TRZ4R2ZW.js} +18 -16
  247. package/dist/dreaming-MAMZAPYW.js +63 -0
  248. package/dist/{exe-drift-QTKD2FHT.js → exe-drift-VBWB5E6S.js} +9 -8
  249. package/dist/{exe-export-ESJ6KP6J.js → exe-export-XJJTVVT7.js} +21 -13
  250. package/dist/{exe-import-N4X3GEQB.js → exe-import-G6O7JFNZ.js} +21 -13
  251. package/dist/{exe-key-KZCCHX3W.js → exe-key-A2WJLLTM.js} +116 -99
  252. package/dist/exe-org-HXF4XBB3.js +672 -0
  253. package/dist/{exe-snapshot-SCRPHCPZ.js → exe-snapshot-TL3TLKLR.js} +38 -33
  254. package/dist/{fast-db-init-6H67K76Q.js → fast-db-init-SO2XUQ7T.js} +1 -1
  255. package/dist/{founder-context-C7X7IRDA.js → founder-context-IOCADC66.js} +4 -3
  256. package/dist/{founder-monitor-envelope-DHSUMBWU.js → founder-monitor-envelope-SMILO4BT.js} +7 -5
  257. package/dist/gateway/index.js +23 -22
  258. package/dist/{gateway-client-7LMZKHTH.js → gateway-client-JA2BH7QO.js} +1 -1
  259. package/dist/{git-staleness-JCKVMWPO.js → git-staleness-I6WT7EXV.js} +8 -7
  260. package/dist/{global-procedures-BR7WGSE7.js → global-procedures-3RMO6C3C.js} +9 -8
  261. package/dist/{graph-auto-extract-EOXWQRBZ.js → graph-auto-extract-NKTYPD2I.js} +11 -10
  262. package/dist/{graph-rag-5FVC5JXH.js → graph-rag-EOGPZOYI.js} +3 -3
  263. package/dist/{hook-integrity-TYGDD7OE.js → hook-integrity-RTBF2BL2.js} +1 -1
  264. package/dist/{hook-prefetch-2CN3MK4H.js → hook-prefetch-V5KCGW2N.js} +31 -28
  265. package/dist/hooks/bug-report-worker.js +35 -32
  266. package/dist/hooks/codex-stop-task-finalizer.js +36 -33
  267. package/dist/hooks/commit-complete.js +34 -31
  268. package/dist/hooks/error-recall.js +16 -15
  269. package/dist/hooks/exe-heartbeat-hook.js +10 -9
  270. package/dist/hooks/ingest-worker.js +12 -10
  271. package/dist/hooks/ingest.js +19 -18
  272. package/dist/hooks/instructions-loaded.js +11 -10
  273. package/dist/hooks/manifest.json +20 -20
  274. package/dist/hooks/notification.js +11 -10
  275. package/dist/hooks/post-compact.js +11 -115
  276. package/dist/hooks/post-tool-combined.js +11 -11
  277. package/dist/hooks/pre-compact.js +38 -64
  278. package/dist/hooks/pre-tool-use.js +95 -36
  279. package/dist/hooks/prompt-submit.js +50 -47
  280. package/dist/hooks/session-end.js +39 -36
  281. package/dist/hooks/session-start.js +64 -18
  282. package/dist/hooks/stop.js +40 -37
  283. package/dist/hooks/subagent-stop.js +35 -32
  284. package/dist/hooks/summary-worker.js +41 -38
  285. package/dist/index.js +45 -42
  286. package/dist/inrun-inbox-DRKVDPLY.js +29 -0
  287. package/dist/{installer-VPNTM3X6.js → installer-G67M3DME.js} +11 -10
  288. package/dist/{installer-YDLSXGD2.js → installer-L3ZKMOPU.js} +11 -10
  289. package/dist/{installer-7UV3CNWZ.js → installer-QBWZSYDG.js} +11 -10
  290. package/dist/{intercom-queue-KHKJJYCQ.js → intercom-queue-R5LSXD3V.js} +30 -27
  291. package/dist/{key-backup-status-YMS7YGWO.js → key-backup-status-3RC6XTUX.js} +2 -1
  292. package/dist/lib/agent-config.js +3 -2
  293. package/dist/lib/cloud-sync.js +27 -24
  294. package/dist/lib/config.js +6 -1
  295. package/dist/lib/consolidation.js +14 -13
  296. package/dist/lib/crypto.js +4 -3
  297. package/dist/lib/database.js +8 -7
  298. package/dist/lib/db-backup.js +4 -3
  299. package/dist/lib/db-checkpoint-worker.js +1 -1
  300. package/dist/lib/db-daemon-client.js +7 -5
  301. package/dist/lib/db-read-worker-client.js +1 -1
  302. package/dist/lib/db-read-worker.js +1 -1
  303. package/dist/lib/db-write-worker-client.js +4 -2
  304. package/dist/lib/db-write-worker.js +21 -3
  305. package/dist/lib/db.js +8 -7
  306. package/dist/lib/device-registry.js +3 -2
  307. package/dist/lib/embed-worker.js +2 -1
  308. package/dist/lib/embedder.js +7 -5
  309. package/dist/lib/employee-templates.js +10 -9
  310. package/dist/lib/employees.js +8 -7
  311. package/dist/lib/error-detector.js +1 -1
  312. package/dist/lib/exe-daemon-client.js +16 -6
  313. package/dist/lib/exe-daemon.js +342 -168
  314. package/dist/lib/hybrid-search.js +13 -12
  315. package/dist/lib/identity-templates.js +3 -1
  316. package/dist/lib/identity.js +8 -7
  317. package/dist/lib/keychain.js +41 -3
  318. package/dist/lib/license.js +12 -3
  319. package/dist/lib/messaging.js +31 -28
  320. package/dist/lib/platform-support.js +25 -0
  321. package/dist/lib/post-tool-memory.js +6 -4
  322. package/dist/lib/preflight.js +29 -0
  323. package/dist/lib/registry-proxy.js +1 -1
  324. package/dist/lib/reminders.js +9 -8
  325. package/dist/lib/schedules.js +13 -12
  326. package/dist/lib/session-registry.js +10 -9
  327. package/dist/lib/session-wrappers.js +7 -3
  328. package/dist/lib/skill-learning.js +21 -13
  329. package/dist/lib/status-brief.js +8 -3
  330. package/dist/lib/store.js +12 -11
  331. package/dist/lib/task-router.js +9 -8
  332. package/dist/lib/tasks.js +32 -29
  333. package/dist/lib/tmux-routing.js +45 -29
  334. package/dist/lib/tmux-status.js +7 -3
  335. package/dist/lib/token-spend.js +9 -8
  336. package/dist/lib/ws-client.js +1 -1
  337. package/dist/{license-gate-YXUSNA2I.js → license-gate-6R3F3NQR.js} +5 -4
  338. package/dist/{license-sync-XFDOXL3Z.js → license-sync-VBJCXBAP.js} +4 -3
  339. package/dist/linux-systemd-LRW3BYSS.js +38 -0
  340. package/dist/mailbox-inbox-CP2VRBXZ.js +10 -0
  341. package/dist/mailbox-outbox-HXI7DYNC.js +19 -0
  342. package/dist/mcp/register-tools.js +110 -94
  343. package/dist/mcp/server.js +113 -97
  344. package/dist/mcp/tools/complete-reminder.js +10 -9
  345. package/dist/mcp/tools/create-reminder.js +10 -9
  346. package/dist/mcp/tools/create-task.js +38 -31
  347. package/dist/mcp/tools/deactivate-behavior.js +22 -14
  348. package/dist/mcp/tools/list-reminders.js +10 -9
  349. package/dist/mcp/tools/list-tasks.js +34 -31
  350. package/dist/mcp/tools/send-message.js +33 -30
  351. package/dist/mcp/tools/update-task.js +33 -30
  352. package/dist/{mcp-http-config-HIP5CEDV.js → mcp-http-config-BWX7AMAZ.js} +9 -8
  353. package/dist/{mcp-session-identity-RTNZ2ZLW.js → mcp-session-identity-GOBGICLI.js} +30 -27
  354. package/dist/{memory-cards-KG4TPNKK.js → memory-cards-4EXX3BQS.js} +12 -11
  355. package/dist/{memory-graph-extractor-6HTBLO2N.js → memory-graph-extractor-OYVZIJ3R.js} +12 -11
  356. package/dist/{memory-poisoning-defense-3ZT57RSJ.js → memory-poisoning-defense-AHOD2EBX.js} +8 -7
  357. package/dist/{memory-pressure-watchdog-ZOZBIMKC.js → memory-pressure-watchdog-COJC3OYS.js} +31 -28
  358. package/dist/{memory-queue-W54BYW7V.js → memory-queue-4VN3DTOE.js} +3 -2
  359. package/dist/memory-queue-client-OI4LDT4W.js +18 -0
  360. package/dist/{memory-reflection-EQC4FXSW.js → memory-reflection-V2SNAUIB.js} +8 -7
  361. package/dist/{monitor-grants-BDLVFVDR.js → monitor-grants-W3ISOLMC.js} +6 -4
  362. package/dist/{monitor-identity-GLFZSEAH.js → monitor-identity-AN3B5QIN.js} +3 -2
  363. package/dist/{notification-ledger-NZ4HO3M5.js → notification-ledger-J6Q2GAYU.js} +117 -53
  364. package/dist/{notifications-74YECZ4V.js → notifications-56TP36IK.js} +30 -27
  365. package/dist/{orchestration-events-KRQI4ED5.js → orchestration-events-CKQ756NA.js} +9 -8
  366. package/dist/{orchestration-phase-KVF42ZKU.js → orchestration-phase-ZJ4XVNFO.js} +3 -2
  367. package/dist/orchestrator-ERSQ3KNT.js +55 -0
  368. package/dist/org-brief-session-FSZ3QJDN.js +45 -0
  369. package/dist/org-consent-policy-BN7MKCZ2.js +68 -0
  370. package/dist/org-join-HTQ57JYH.js +35 -0
  371. package/dist/org-key-admin-4W6LZ5KZ.js +242 -0
  372. package/dist/org-key-pin-OTOKAELD.js +37 -0
  373. package/dist/{org-membership-B32NS5NI.js → org-membership-SML6GCHP.js} +11 -7
  374. package/dist/org-partner-config-XQGOB7EJ.js +25 -0
  375. package/dist/org-partner-runtime-RNNUL5IN.js +44 -0
  376. package/dist/org-row-visibility-JZFJ3YRJ.js +18 -0
  377. package/dist/{pipeline-router-6ZZV7JMA.js → pipeline-router-IUENNTAY.js} +9 -8
  378. package/dist/{plan-limits-B7AZKZ6U.js → plan-limits-ZUII366B.js} +11 -10
  379. package/dist/postinstall-failure-A7WTAXD6.js +20 -0
  380. package/dist/{project-boot-WEQSKDD7.js → project-boot-3DFY5F35.js} +7 -2
  381. package/dist/{projection-worker-LRFFQ6JB.js → projection-worker-MBWUPB5O.js} +5 -4
  382. package/dist/{prospective-memory-A4GDTIWG.js → prospective-memory-GHE5ORN4.js} +8 -7
  383. package/dist/push-notifications-PTQ5DHCD.js +60 -0
  384. package/dist/{reranker-YVTLJCFC.js → reranker-NUIGAPA3.js} +3 -2
  385. package/dist/{retrieval-health-PK2ODTXM.js → retrieval-health-XHCERQPG.js} +1 -1
  386. package/dist/{review-polling-JFWRNQF6.js → review-polling-CYBCBHZA.js} +31 -28
  387. package/dist/runtime/index.js +41 -38
  388. package/dist/{session-events-VMQBCUH3.js → session-events-X33W4JNA.js} +31 -28
  389. package/dist/{session-kill-telemetry-Z3W256T5.js → session-kill-telemetry-I2F5PUIW.js} +31 -28
  390. package/dist/session-lineage-AGOHSXIS.js +66 -0
  391. package/dist/{session-scope-2ADEVY3C.js → session-scope-WXP4F7OF.js} +30 -27
  392. package/dist/setup-wizard-2CTVITIX.js +35 -0
  393. package/dist/{shard-manager-DFLCDZT5.js → shard-manager-YEOHEOHL.js} +4 -3
  394. package/dist/{skill-refinement-APBYOSGX.js → skill-refinement-VDR5OT4V.js} +9 -8
  395. package/dist/{stack-promote-SZYIPTFT.js → stack-promote-XVC7FRJW.js} +6 -5
  396. package/dist/{stack-release-EYRDEGPD.js → stack-release-6PWAACRM.js} +101 -80
  397. package/dist/{stack-update-YWK2YXP6.js → stack-update-24VRBQ3U.js} +9 -4
  398. package/dist/{steward-gate-CIOBPNX6.js → steward-gate-2ZNYDVFO.js} +9 -8
  399. package/dist/{support-inbox-OAWGFRKW.js → support-inbox-ZHKLDETT.js} +5 -4
  400. package/dist/{task-enforcement-YAU6ZGDC.js → task-enforcement-GQDUTIFY.js} +37 -28
  401. package/dist/task-request-inbox-BFXNUU44.js +64 -0
  402. package/dist/{task-scope-44N7XP5N.js → task-scope-ERHPHLUM.js} +30 -27
  403. package/dist/{tasks-crud-IWVDREXG.js → tasks-crud-NVNF3NRA.js} +30 -27
  404. package/dist/tasks-notify-DXLU5VCT.js +60 -0
  405. package/dist/{tasks-review-VDFWFETP.js → tasks-review-BST6N34P.js} +30 -27
  406. package/dist/{telemetry-upload-3X5ESEKM.js → telemetry-upload-NY3EKOGY.js} +13 -12
  407. package/dist/{token-budget-WZGO22ME.js → token-budget-CLB3GUIX.js} +9 -8
  408. package/dist/{tool-capability-index-IFNZ6QUS.js → tool-capability-index-WZWVBI2R.js} +1 -1
  409. package/dist/{tool-telemetry-F7RWUNVK.js → tool-telemetry-PALAZUXT.js} +1 -1
  410. package/dist/tui/App.js +44 -41
  411. package/dist/{tui-data-KT7YGVQS.js → tui-data-CNFSRZP7.js} +30 -27
  412. package/dist/{typed-messages-TKDGVPHS.js → typed-messages-RCMPEKJN.js} +1 -1
  413. package/dist/{update-support-ZVRMECNQ.js → update-support-ZVB3CNGY.js} +24 -22
  414. package/dist/{work-state-heartbeat-CA4CN7DQ.js → work-state-heartbeat-O7UMB6SE.js} +1 -1
  415. package/dist/{worker-gate-52MVKYGZ.js → worker-gate-6DQQWDNB.js} +3 -2
  416. package/dist/{workflow-engine-ZAFBPVUP.js → workflow-engine-5ZULFH7O.js} +2 -2
  417. package/dist/{worktree-NNVXVV6A.js → worktree-ZWA35PKW.js} +10 -9
  418. package/dist/{worktree-sweep-IM2ZQG6Z.js → worktree-sweep-5LCVT46V.js} +11 -10
  419. package/package.json +8 -20
  420. package/postinstall.mjs +124 -0
  421. package/release-notes.json +18 -16
  422. package/stack.release.schema.json +4 -0
  423. package/dist/chunk-AFNRE2RV.js +0 -408
  424. package/dist/chunk-OSKWCKUC.js +0 -6
  425. package/dist/chunk-S3FIQCSM.js +0 -232
  426. package/dist/chunk-W6UB2AWP.js +0 -656
  427. package/dist/dreaming-WPMQJAXW.js +0 -60
  428. package/dist/exe-org-UK77DUU4.js +0 -73
  429. package/dist/memory-queue-client-RRNW2IFZ.js +0 -16
  430. package/dist/orchestrator-WV2YCHTK.js +0 -52
  431. package/dist/push-notifications-GOFTDDWW.js +0 -15
  432. package/dist/setup-wizard-26B36FMC.js +0 -14
  433. package/dist/tasks-notify-WK5HA77D.js +0 -57
  434. /package/dist/{chunk-YL2JH3XV.js → chunk-6C4UAKMS.js} +0 -0
  435. /package/dist/{chunk-YMCIZCNK.js → chunk-BN26LSME.js} +0 -0
  436. /package/dist/{chunk-WTH4CSAP.js → chunk-DFQEUZSI.js} +0 -0
  437. /package/dist/{chunk-FVWI2AR4.js → chunk-FIPUVCKC.js} +0 -0
  438. /package/dist/{chunk-ZMYXQU4L.js → chunk-L4LPJMPV.js} +0 -0
  439. /package/dist/{chunk-COHHVCFA.js → chunk-UELGUVNL.js} +0 -0
  440. /package/dist/{chunk-U7RZIY74.js → chunk-X7LY3IOB.js} +0 -0
  441. /package/dist/{chunk-BGYCUZYK.js → chunk-YAZ5ECEG.js} +0 -0
  442. /package/dist/{chunk-DSGFX3RT.js → chunk-YWN3XMPU.js} +0 -0
  443. /package/dist/{chunk-YMUZWC33.js → chunk-YYB5PMTK.js} +0 -0
  444. /package/dist/{core-memory-AATZRQEY.js → core-memory-BZFPVS43.js} +0 -0
  445. /package/dist/{entity-boost-HLFG2CH3.js → entity-boost-VXXED26D.js} +0 -0
  446. /package/dist/{memory-isolation-CF6FYSXD.js → memory-isolation-3PIOWLYP.js} +0 -0
  447. /package/dist/{message-queue-client-AX6KQK7T.js → message-queue-client-5XW7ZOK2.js} +0 -0
  448. /package/dist/{oauth-server-VE5ELXTF.js → oauth-server-KW5M437C.js} +0 -0
  449. /package/dist/{webhook-pipe-A4X4SCMW.js → webhook-pipe-QJRFZVKA.js} +0 -0
  450. /package/dist/{wiki-acl-GNIXYWHJ.js → wiki-acl-RXFV5OEU.js} +0 -0
  451. /package/dist/{wiki-client-7RRYRSPS.js → wiki-client-57QWZIHQ.js} +0 -0
@@ -1,6 +1,9 @@
1
1
  import {
2
2
  ensureAgentSymlink
3
- } from "./chunk-CAEWPEBA.js";
3
+ } from "./chunk-5C6ZIJ7J.js";
4
+ import {
5
+ resolveRowVisibility
6
+ } from "./chunk-SXKIGBNF.js";
4
7
  import {
5
8
  ensureWorktree,
6
9
  ensureWorktreeAsync,
@@ -8,14 +11,13 @@ import {
8
11
  getMainRepoRoot,
9
12
  isInsideGitRepo,
10
13
  isWorktreeDirty
11
- } from "./chunk-XV42EAVK.js";
14
+ } from "./chunk-BT2PUK3S.js";
12
15
  import {
13
- incrementSkillSuccess
14
- } from "./chunk-6WHYSLGF.js";
16
+ runBudgetedSweep
17
+ } from "./chunk-KI5PFRG6.js";
15
18
  import {
16
- reviewSignalPath,
17
- taskSignalDir
18
- } from "./chunk-EIKATSE4.js";
19
+ incrementSkillSuccess
20
+ } from "./chunk-Z67DIJKT.js";
19
21
  import {
20
22
  LEASE_MINUTES,
21
23
  isLeaseExpired,
@@ -24,20 +26,24 @@ import {
24
26
  import {
25
27
  buildTaskResult,
26
28
  serializeMessage
27
- } from "./chunk-4JERP7NT.js";
29
+ } from "./chunk-QAEWWYHL.js";
30
+ import {
31
+ reviewSignalPath,
32
+ taskSignalDir
33
+ } from "./chunk-EIKATSE4.js";
28
34
  import {
29
35
  listSessions,
30
36
  registerSession
31
- } from "./chunk-3ODATKWH.js";
37
+ } from "./chunk-D5CY4E7I.js";
32
38
  import {
33
39
  getTransport
34
40
  } from "./chunk-UXLO7VHX.js";
35
41
  import {
36
42
  listTmuxSessions
37
- } from "./chunk-SKGMF2SO.js";
43
+ } from "./chunk-GBNB4EWD.js";
38
44
  import {
39
45
  recordOrchestrationEventBestEffort
40
- } from "./chunk-POZGQQEZ.js";
46
+ } from "./chunk-PV5BIXT6.js";
41
47
  import {
42
48
  appendDispatchJournalEvent,
43
49
  releaseDispatchClaim,
@@ -49,23 +55,17 @@ import {
49
55
  getAgentRuntime,
50
56
  normalizeCcModelName,
51
57
  resolveSpawnRuntimeConfig
52
- } from "./chunk-VAY6IXWY.js";
58
+ } from "./chunk-KDMVVHZH.js";
53
59
  import {
54
60
  PlanLimitError,
55
61
  assertEmployeeLimitSync
56
- } from "./chunk-F3QTF4T7.js";
57
- import {
58
- BUSY_PATTERN
59
- } from "./chunk-OSKWCKUC.js";
60
- import {
61
- runBudgetedSweep
62
- } from "./chunk-KI5PFRG6.js";
62
+ } from "./chunk-CY5NVDTH.js";
63
63
  import {
64
64
  getSessionKey
65
65
  } from "./chunk-CVYC6DUW.js";
66
66
  import {
67
67
  writeMemoryViaDaemon
68
- } from "./chunk-A6VIK3SS.js";
68
+ } from "./chunk-4P2BFNSB.js";
69
69
  import {
70
70
  getProjectName
71
71
  } from "./chunk-OPU3NYOO.js";
@@ -89,16 +89,16 @@ import {
89
89
  loadEmployeesSync,
90
90
  offloadReadIfMain,
91
91
  offloadReadQuery
92
- } from "./chunk-EA5FVACM.js";
92
+ } from "./chunk-HLU52KTO.js";
93
93
  import {
94
94
  RUNTIME_TABLE
95
95
  } from "./chunk-WNBZJSQT.js";
96
96
  import {
97
97
  loadDeviceId
98
- } from "./chunk-2OVTGZYH.js";
98
+ } from "./chunk-HSKABJE6.js";
99
99
  import {
100
100
  EXE_AI_DIR
101
- } from "./chunk-BCZF3AGJ.js";
101
+ } from "./chunk-BRIZ6OZ3.js";
102
102
  import {
103
103
  atomicWriteJsonSync,
104
104
  atomicWriteSync
@@ -1302,7 +1302,7 @@ function checkLaneAffinity(title, context, assigneeName, employees = loadEmploye
1302
1302
  const expectedRoles = Array.from(matchedRoles).join(" or ");
1303
1303
  return `\u26A0\uFE0F Lane mismatch: task content suggests ${expectedRoles}, but assigned to ${assigneeName} (${assigneeRole}).`;
1304
1304
  }
1305
- async function resolveTask(client, identifier, scopeSession) {
1305
+ async function resolveTask(client, identifier, scopeSession, intent = "mutate") {
1306
1306
  const scope = sessionScopeFilter(scopeSession);
1307
1307
  const currentScope = typeof scope.args[0] === "string" ? String(scope.args[0]) : null;
1308
1308
  const crossSessionError = (rows) => {
@@ -1317,6 +1317,11 @@ async function resolveTask(client, identifier, scopeSession) {
1317
1317
  });
1318
1318
  if (crossSessionRows.length === 0) return null;
1319
1319
  const matches = crossSessionRows.slice(0, 5).map((row) => `${String(row.id).slice(0, 8)} "${String(row.title)}" [session:${String(row.session_scope)}]`).join(", ");
1320
+ if (intent === "read") {
1321
+ return new Error(
1322
+ `Cross-session task not in current session: "${identifier}" belongs to another coordinator session. Current session: ${currentScope}. Matching task(s): ${matches}. Use task(action="list", cross_session=true) for read-only diagnostics, or switch to the owning session to view it.`
1323
+ );
1324
+ }
1320
1325
  return new Error(
1321
1326
  `Cross-session task mutation blocked: "${identifier}" belongs to another coordinator session. Current session: ${currentScope}. Matching task(s): ${matches}. Use task(action="list", cross_session=true) for read-only diagnostics, or switch to the owning session to update/close.`
1322
1327
  );
@@ -1471,6 +1476,7 @@ async function createTaskCore(input) {
1471
1476
  const id = crypto2.randomUUID();
1472
1477
  const now = (/* @__PURE__ */ new Date()).toISOString();
1473
1478
  const slug = slugify(input.title);
1479
+ const rowVisibility = resolveRowVisibility(input.orgOrigin);
1474
1480
  if (input.callerIsSidechain || input.assignedBy.startsWith("subagent:")) {
1475
1481
  throw new Error(
1476
1482
  `${TASK_SIDECHAIN_WRITE_BLOCKED_PREFIX}: sidechain contexts cannot create parent task rows. Report findings back to the owning session; the parent creates or updates tasks.`
@@ -1515,7 +1521,7 @@ async function createTaskCore(input) {
1515
1521
  if (isCoordinatorSession) {
1516
1522
  earlySessionScope = resolved;
1517
1523
  } else {
1518
- const { getSessionProject } = await import("./session-scope-2ADEVY3C.js");
1524
+ const { getSessionProject } = await import("./session-scope-WXP4F7OF.js");
1519
1525
  const sessionProject = getSessionProject(resolved);
1520
1526
  if (sessionProject && sessionProject !== input.projectName) {
1521
1527
  scopeMismatchWarning = `session/project mismatch: session "${resolved}" owns "${sessionProject}" but task targets "${input.projectName}". Routed to default scope.`;
@@ -1612,8 +1618,8 @@ ${scopeMismatchWarning}` : scopeMismatchWarning;
1612
1618
  ).digest("hex") : null;
1613
1619
  try {
1614
1620
  const res = await client.execute({
1615
- sql: `INSERT INTO tasks (id, title, assigned_to, assigned_by, project_name, priority, status, task_file, blocked_by, parent_task_id, reviewer, context, complexity, budget_tokens, budget_fallback_model, tokens_used, tokens_warned_at, session_scope, spawn_runtime, spawn_model, device_id, founder_id, idempotency_key, created_at, updated_at)
1616
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
1621
+ sql: `INSERT INTO tasks (id, title, assigned_to, assigned_by, project_name, priority, status, task_file, blocked_by, parent_task_id, reviewer, context, complexity, budget_tokens, budget_fallback_model, tokens_used, tokens_warned_at, session_scope, spawn_runtime, spawn_model, device_id, founder_id, idempotency_key, visibility, origin_org_id, created_at, updated_at)
1622
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
1617
1623
  ON CONFLICT(idempotency_key) WHERE idempotency_key IS NOT NULL DO NOTHING
1618
1624
  RETURNING id`,
1619
1625
  args: [
@@ -1640,6 +1646,13 @@ ${scopeMismatchWarning}` : scopeMismatchWarning;
1640
1646
  loadDeviceId(),
1641
1647
  input.founderId ?? null,
1642
1648
  idempotencyKey,
1649
+ // §4.1 (B7). `rowVisibility` is 'private' for every write that carries
1650
+ // no org-origin stamp — i.e. every write in the product except an
1651
+ // accepted org task_request. It is resolved ONCE, above, and written
1652
+ // explicitly rather than left to the column default so the value in the
1653
+ // row is the value this code decided.
1654
+ rowVisibility.visibility,
1655
+ rowVisibility.originOrgId,
1643
1656
  now,
1644
1657
  now
1645
1658
  ]
@@ -1812,7 +1825,7 @@ async function buildTaskRowsStatement(opts) {
1812
1825
  }
1813
1826
  if (opts.founderId !== null) {
1814
1827
  try {
1815
- const { founderScopeFilter } = await import("./founder-context-C7X7IRDA.js");
1828
+ const { founderScopeFilter } = await import("./founder-context-IOCADC66.js");
1816
1829
  const founderFilter = founderScopeFilter(opts.founderId);
1817
1830
  const cleaned = founderFilter.sql.replace(/^\s*AND\s+/, "");
1818
1831
  conditions.push(cleaned);
@@ -3545,7 +3558,7 @@ async function getGroupResults(groupId) {
3545
3558
  }));
3546
3559
  }
3547
3560
  async function getAggregatedGroupResults(groupId) {
3548
- const { parseMessage, isTypedMessage } = await import("./typed-messages-TKDGVPHS.js");
3561
+ const { parseMessage, isTypedMessage } = await import("./typed-messages-RCMPEKJN.js");
3549
3562
  const client = getClient();
3550
3563
  const groupCheck = await client.execute({
3551
3564
  sql: "SELECT id FROM task_groups WHERE id = ?",
@@ -4498,6 +4511,9 @@ function sanitizeSessionScope(scope) {
4498
4511
  return isValidSessionScope(scope) ? scope : null;
4499
4512
  }
4500
4513
 
4514
+ // src/lib/session-busy-pattern.ts
4515
+ var BUSY_PATTERN = /[✻✽✶✳].*…|Running…|• Working|• Ran |• Explored|• Called|esc to interrupt|Waiting for \d+ background agents?/i;
4516
+
4501
4517
  // src/lib/tmux-routing.ts
4502
4518
  var _cachedExeBinDir;
4503
4519
  function resolveExeBinDir() {
@@ -5144,7 +5160,7 @@ async function verifyPaneAtCapacity(sessionName) {
5144
5160
  reason: `capture-pane failed: ${err instanceof Error ? err.message : String(err)}`
5145
5161
  };
5146
5162
  }
5147
- const { isAtCapacity } = await import("./capacity-monitor-QLPEL6S5.js");
5163
+ const { isAtCapacity } = await import("./capacity-monitor-IPXM726A.js");
5148
5164
  if (!isAtCapacity(pane)) {
5149
5165
  return {
5150
5166
  atCapacity: false,
@@ -5378,7 +5394,7 @@ async function countScopedPendingReviews(targetSession, reviewer) {
5378
5394
  }
5379
5395
  async function countScopedOpenTasks(targetSession, agentId) {
5380
5396
  try {
5381
- const { fastDbInit } = await import("./fast-db-init-6H67K76Q.js");
5397
+ const { fastDbInit } = await import("./fast-db-init-SO2XUQ7T.js");
5382
5398
  const client = await fastDbInit();
5383
5399
  const scope = extractRootExe(targetSession);
5384
5400
  if (!scope) return 0;
@@ -5433,7 +5449,7 @@ function buildScopedInProgressTaskQuery(targetSession) {
5433
5449
  async function findScopedInProgressTaskId(targetSession) {
5434
5450
  const q = buildScopedInProgressTaskQuery(targetSession);
5435
5451
  if (!q) return null;
5436
- const { fastDbInit } = await import("./fast-db-init-6H67K76Q.js");
5452
+ const { fastDbInit } = await import("./fast-db-init-SO2XUQ7T.js");
5437
5453
  const client = await fastDbInit();
5438
5454
  const result = await client.execute(q);
5439
5455
  const id = result.rows[0]?.id;
@@ -5551,9 +5567,10 @@ function sendIntercom(targetSession, opts) {
5551
5567
  }
5552
5568
  } catch {
5553
5569
  }
5554
- if ((process.env.EXE_NOTIFICATION_LEDGER ?? "").trim().toLowerCase() === "shadow") {
5555
- const shadowScope = opts && "callerSessionScope" in opts ? opts.callerSessionScope : void 0;
5556
- void import("./notification-ledger-NZ4HO3M5.js").then((m) => m.recordShadowNudge(targetSession, reason, shadowScope)).catch(() => {
5570
+ const ledgerEnv = (process.env.EXE_NOTIFICATION_LEDGER ?? "").trim().toLowerCase();
5571
+ if (ledgerEnv === "shadow" || ledgerEnv === "on") {
5572
+ const ledgerScope = opts && "callerSessionScope" in opts ? opts.callerSessionScope : void 0;
5573
+ void import("./notification-ledger-J6Q2GAYU.js").then((m) => m.recordShadowNudge(targetSession, reason, ledgerScope, { force: opts?.force })).catch(() => {
5557
5574
  });
5558
5575
  }
5559
5576
  if (!opts?.force && isDebounced(targetSession)) {
@@ -5689,7 +5706,7 @@ function scheduleDeferredSpawnNudge(input) {
5689
5706
  return;
5690
5707
  }
5691
5708
  queueIntercom(input.sessionName, `spawn nudge failed after ${attempt} attempts: ${msg}`, "signal");
5692
- void import("./notifications-74YECZ4V.js").then(({ writeNotification: writeNotification2 }) => writeNotification2({
5709
+ void import("./notifications-56TP36IK.js").then(({ writeNotification: writeNotification2 }) => writeNotification2({
5693
5710
  agentId: getCoordinatorName(),
5694
5711
  agentRole: "COO",
5695
5712
  event: "error_spike",
@@ -5779,7 +5796,47 @@ async function sendIntercomAsync(targetSession, opts) {
5779
5796
  }
5780
5797
  } catch {
5781
5798
  }
5782
- if (!opts?.force && isDebounced(targetSession)) {
5799
+ const authoritativeLedger = (process.env.EXE_NOTIFICATION_LEDGER ?? "").trim().toLowerCase() === "on";
5800
+ let ledgerClaim = null;
5801
+ if (authoritativeLedger) {
5802
+ try {
5803
+ const { claimAuthoritativeNudge } = await import("./notification-ledger-J6Q2GAYU.js");
5804
+ const claim2 = await claimAuthoritativeNudge(
5805
+ targetSession,
5806
+ reason,
5807
+ opts && "callerSessionScope" in opts ? opts.callerSessionScope : void 0,
5808
+ void 0,
5809
+ void 0,
5810
+ { force: opts?.force }
5811
+ );
5812
+ if (claim2 && !claim2.claimed) {
5813
+ logIntercom(`DEBOUNCE \u2192 ${targetSession} (durable notification ledger dedup)`);
5814
+ recordResult("debounced", "durable_ledger_dedup");
5815
+ return "debounced";
5816
+ }
5817
+ if (claim2) ledgerClaim = { id: claim2.row.id, sessionScope: claim2.row.sessionScope };
5818
+ } catch (err) {
5819
+ process.stderr.write(`[intercom] notification ledger claim failed; falling back to legacy routing: ${err instanceof Error ? err.message : String(err)}
5820
+ `);
5821
+ }
5822
+ }
5823
+ const markLedgerDelivered = async () => {
5824
+ if (!ledgerClaim) return;
5825
+ try {
5826
+ const { markNudgeDelivered } = await import("./notification-ledger-J6Q2GAYU.js");
5827
+ await markNudgeDelivered(ledgerClaim.id, ledgerClaim.sessionScope);
5828
+ } catch {
5829
+ }
5830
+ };
5831
+ const markLedgerFailed = async (error) => {
5832
+ if (!ledgerClaim) return;
5833
+ try {
5834
+ const { markNudgeDeliveryFailed } = await import("./notification-ledger-J6Q2GAYU.js");
5835
+ await markNudgeDeliveryFailed(ledgerClaim.id, error, ledgerClaim.sessionScope);
5836
+ } catch {
5837
+ }
5838
+ };
5839
+ if (!authoritativeLedger && !opts?.force && isDebounced(targetSession)) {
5783
5840
  logIntercom(`DEBOUNCE \u2192 ${targetSession} (nudge batched, task safe in DB)`);
5784
5841
  recordResult("debounced");
5785
5842
  return "debounced";
@@ -5789,6 +5846,7 @@ async function sendIntercomAsync(targetSession, opts) {
5789
5846
  const sessions = stdout.trim().split("\n").filter(Boolean);
5790
5847
  if (!sessions.includes(targetSession)) {
5791
5848
  logIntercom(`SKIP \u2192 ${targetSession} (session not found)`);
5849
+ await markLedgerFailed("session_not_found");
5792
5850
  recordResult("failed", "session_not_found");
5793
5851
  return "failed";
5794
5852
  }
@@ -5827,6 +5885,7 @@ async function sendIntercomAsync(targetSession, opts) {
5827
5885
  if (sessionState === "idle" && isEmployeePane && await confirmNudgeSubmittedAsync(targetSession, resolveSessionRuntime(targetSession))) {
5828
5886
  const batched3 = recordDebounce(targetSession);
5829
5887
  logIntercom(`RESUBMITTED \u2192 ${targetSession} (completed half-delivered nudge \u2014 pressed Enter)${batched3 > 0 ? ` [${batched3} batched]` : ""}`);
5888
+ await markLedgerDelivered();
5830
5889
  recordResult("delivered", "resubmit_pending_input");
5831
5890
  return "delivered";
5832
5891
  }
@@ -5847,11 +5906,13 @@ async function sendIntercomAsync(targetSession, opts) {
5847
5906
  }
5848
5907
  const batched = recordDebounce(targetSession);
5849
5908
  logIntercom(`DELIVERED \u2192 ${targetSession}${batched > 0 ? ` [${batched} nudges batched during debounce]` : ""} (async fire-and-forget)`);
5909
+ await markLedgerDelivered();
5850
5910
  recordResult("delivered");
5851
5911
  return "delivered";
5852
5912
  } catch (e) {
5853
5913
  process.stderr.write("[tmux-routing] sendIntercomAsync to " + targetSession + ": " + (e instanceof Error ? e.message : String(e)) + "\n");
5854
5914
  logIntercom(`FAIL \u2192 ${targetSession}`);
5915
+ await markLedgerFailed(e instanceof Error ? e.message : String(e));
5855
5916
  recordResult("failed", e instanceof Error ? e.name : "send_error");
5856
5917
  return "failed";
5857
5918
  }
@@ -6126,7 +6187,7 @@ function ensureEmployee(employeeName, exeSession, projectDir, opts) {
6126
6187
  const emp = roster.find((e) => baseAgentName(e.name) === baseAgentName(employeeName));
6127
6188
  if (emp && !COORDINATOR_ROLES.has(emp.role)) {
6128
6189
  try {
6129
- const collisions = checkWorktreeCollisions(projectDir);
6190
+ const collisions = spawnOpts.collisionGuardHandled ? [] : checkWorktreeCollisions(projectDir);
6130
6191
  if (collisions.length > 0) {
6131
6192
  for (const c of collisions) {
6132
6193
  process.stderr.write(
@@ -6361,6 +6422,7 @@ async function ensureEmployeeAsync(employeeName, exeSession, projectDir, opts) {
6361
6422
  `
6362
6423
  );
6363
6424
  }
6425
+ asyncOpts = { ...asyncOpts, collisionGuardHandled: true };
6364
6426
  const result = ensureEmployee(employeeName, exeSession, projectDir, asyncOpts);
6365
6427
  if (asyncOpts.spawnLockHeld && result.sessionName) {
6366
6428
  releaseSpawnLock(result.sessionName);
@@ -6383,6 +6445,71 @@ function resolveSpawnCwd(requestedCwd, projectDir, dirExists = existsSync9) {
6383
6445
  if (dirExists(projectDir)) return { cwd: projectDir, fellBack: true, requestedCwd };
6384
6446
  return { cwd: null, fellBack: false, requestedCwd };
6385
6447
  }
6448
+ function spawnExitMarkerPath(sessionName) {
6449
+ const safe = sessionName.replace(/[^A-Za-z0-9._-]/g, "_");
6450
+ return path8.join(SESSION_CACHE, `spawn-exit-${safe}`);
6451
+ }
6452
+ function buildSpawnCommand(launchCommand, exitMarkerPath, cleanupSuffix) {
6453
+ const list = `${launchCommand}; printf '%s' "$?" > "${exitMarkerPath}"${cleanupSuffix}`;
6454
+ return `/bin/sh -c '${list.replace(/'/g, `'\\''`)}'`;
6455
+ }
6456
+ function readSpawnExitMarker(markerPath, read = (p) => readFileSync6(p, "utf8")) {
6457
+ let raw;
6458
+ try {
6459
+ raw = read(markerPath);
6460
+ } catch {
6461
+ return null;
6462
+ }
6463
+ const trimmed = raw.trim();
6464
+ if (!/^\d+$/.test(trimmed)) return null;
6465
+ return Number(trimmed);
6466
+ }
6467
+ function paneShowsRuntimeBanner(pane, runtime) {
6468
+ if (runtime === "exe-agent") return pane.includes("[exe-agent]") || pane.includes("online");
6469
+ if (runtime === "codex") {
6470
+ return pane.includes("codex") || pane.includes("Codex") || pane.includes("exe-start-codex");
6471
+ }
6472
+ return pane.includes("Claude Code") || pane.includes("\u276F");
6473
+ }
6474
+ function classifySpawnFailurePane(pane) {
6475
+ const paneLc = pane.toLowerCase();
6476
+ if (paneLc.includes("command not found") || paneLc.includes(": not found")) {
6477
+ return "path_not_found";
6478
+ }
6479
+ if (paneLc.includes("exit 127") || paneLc.includes("claude") && paneLc.includes("not found") || paneLc.includes("not support") || // existing "unsupported launch flag" hint
6480
+ paneLc.includes("unknown option") || paneLc.includes("enoent")) {
6481
+ return "claude_launch_failed";
6482
+ }
6483
+ return "timeout";
6484
+ }
6485
+ function resolveStartupWatchCapMs(input) {
6486
+ const explicit = Number(input.override) || Number(input.legacyOverride);
6487
+ if (explicit > 0) return explicit;
6488
+ if (input.useCodex) return 2500;
6489
+ return input.callerIsDaemon ? 2e3 : 3e3;
6490
+ }
6491
+ function watchSpawnStartup(probes, opts) {
6492
+ const interval = Math.max(1, opts.intervalMs);
6493
+ const iterations = Math.max(0, Math.ceil(Math.max(0, opts.capMs) / interval));
6494
+ const capture = () => {
6495
+ try {
6496
+ return probes.capturePane();
6497
+ } catch {
6498
+ return "";
6499
+ }
6500
+ };
6501
+ let polls = 0;
6502
+ for (let i = 0; i <= iterations; i++) {
6503
+ polls++;
6504
+ const exitCode = probes.readLauncherExit();
6505
+ if (exitCode !== null) return { outcome: "exited", exitCode, pane: capture(), polls };
6506
+ if (!probes.isAlive()) {
6507
+ return { outcome: "exited", exitCode: probes.readLauncherExit(), pane: capture(), polls };
6508
+ }
6509
+ if (i < iterations) probes.sleep(interval);
6510
+ }
6511
+ return { outcome: "running", polls };
6512
+ }
6386
6513
  function spawnEmployee(employeeName, exeSession, projectDir, opts) {
6387
6514
  const transport = getTransport();
6388
6515
  const sessionName = employeeSessionName(employeeName, exeSession, opts?.instance);
@@ -6732,29 +6859,29 @@ function spawnEmployee(employeeName, exeSession, projectDir, opts) {
6732
6859
  }
6733
6860
  }
6734
6861
  }
6735
- let spawnCommand;
6862
+ let launchCommand;
6736
6863
  if (useExeAgent) {
6737
- spawnCommand = `exe-agent --employee ${employeeName} --model ${opts.model} --provider ${opts.provider}${cleanupSuffix}`;
6864
+ launchCommand = `exe-agent --employee ${employeeName} --model ${opts.model} --provider ${opts.provider}`;
6738
6865
  } else if (useCodex) {
6739
6866
  process.stderr.write(
6740
6867
  `[tmux-routing] agent-config: ${employeeName} \u2192 codex (${agentRtConfig.model})
6741
6868
  `
6742
6869
  );
6743
- spawnCommand = `exe-start-codex --agent ${employeeName} --session ${sessionName}${cleanupSuffix}`;
6870
+ launchCommand = `exe-start-codex --agent ${employeeName} --session ${sessionName}`;
6744
6871
  } else if (useOpencode) {
6745
6872
  const binName = `${employeeName}-opencode`;
6746
6873
  process.stderr.write(
6747
6874
  `[tmux-routing] agent-config: ${employeeName} \u2192 opencode (${agentRtConfig.model})
6748
6875
  `
6749
6876
  );
6750
- spawnCommand = `${binName}${cleanupSuffix}`;
6877
+ launchCommand = binName;
6751
6878
  } else if (useBinSymlink) {
6752
6879
  const binName = `${employeeName}-${ccProvider}`;
6753
6880
  process.stderr.write(
6754
6881
  `[tmux-routing] provider cascade: ${ccProvider} \u2192 spawning ${binName}
6755
6882
  `
6756
6883
  );
6757
- spawnCommand = `${binName}${cleanupSuffix}`;
6884
+ launchCommand = binName;
6758
6885
  } else {
6759
6886
  let launcherAbs = "";
6760
6887
  try {
@@ -6762,8 +6889,18 @@ function spawnEmployee(employeeName, exeSession, projectDir, opts) {
6762
6889
  if (existsSync9(launcherJs)) launcherAbs = launcherJs;
6763
6890
  } catch {
6764
6891
  }
6765
- spawnCommand = launcherAbs ? `"${process.execPath}" "${launcherAbs}" --agent ${employeeName}${cleanupSuffix}` : `exe-launch-agent --agent ${employeeName}${cleanupSuffix}`;
6892
+ launchCommand = launcherAbs ? `"${process.execPath}" "${launcherAbs}" --agent ${employeeName}` : `exe-launch-agent --agent ${employeeName}`;
6893
+ }
6894
+ const exitMarkerPath = spawnExitMarkerPath(sessionName);
6895
+ try {
6896
+ mkdirSync6(SESSION_CACHE, { recursive: true });
6897
+ } catch {
6898
+ }
6899
+ try {
6900
+ unlinkSync4(exitMarkerPath);
6901
+ } catch {
6766
6902
  }
6903
+ const spawnCommand = buildSpawnCommand(launchCommand, exitMarkerPath, cleanupSuffix);
6767
6904
  const tmuxEnvArgs = Object.entries(launchEnv).flatMap(([key, val]) => ["-e", `${key}=${val}`]);
6768
6905
  let spawnResult;
6769
6906
  try {
@@ -6818,6 +6955,7 @@ function spawnEmployee(employeeName, exeSession, projectDir, opts) {
6818
6955
  }
6819
6956
  const callerIsDaemon = process.env.EXE_IS_DAEMON === "1";
6820
6957
  const POLL_INTERVAL_MS = 500;
6958
+ const runtimeLabel = useExeAgent ? "exe-agent" : useCodex ? "codex" : useOpencode ? "opencode" : "claude";
6821
6959
  const LIVENESS_CAP_MS = Number(process.env.EXE_SPAWN_LIVENESS_CAP_MS) || (callerIsDaemon ? 6e3 : 8e3);
6822
6960
  const livenessIterations = Math.max(1, Math.ceil(LIVENESS_CAP_MS / POLL_INTERVAL_MS));
6823
6961
  let sessionLive = false;
@@ -6831,22 +6969,12 @@ function spawnEmployee(employeeName, exeSession, projectDir, opts) {
6831
6969
  if (!sessionLive) sessionLive = transport.isAlive(sessionName);
6832
6970
  if (!sessionLive) {
6833
6971
  releaseSpawnLock(sessionName);
6834
- const runtimeLabel = useExeAgent ? "exe-agent" : useCodex ? "codex" : useOpencode ? "opencode" : "claude";
6835
6972
  let lastPane = "";
6836
6973
  try {
6837
6974
  lastPane = transport.capturePane(sessionName, 50);
6838
6975
  } catch {
6839
6976
  }
6840
- const paneLc = lastPane.toLowerCase();
6841
- let spawnFailureCause;
6842
- if (paneLc.includes("command not found") || paneLc.includes(": not found")) {
6843
- spawnFailureCause = "path_not_found";
6844
- } else if (paneLc.includes("exit 127") || paneLc.includes("claude") && paneLc.includes("not found") || paneLc.includes("not support") || // existing "unsupported launch flag" hint
6845
- paneLc.includes("unknown option") || paneLc.includes("enoent")) {
6846
- spawnFailureCause = "claude_launch_failed";
6847
- } else {
6848
- spawnFailureCause = "timeout";
6849
- }
6977
+ const spawnFailureCause = classifySpawnFailurePane(lastPane);
6850
6978
  const errMsg2 = `spawn did not start: tmux session "${sessionName}" never came alive within ${LIVENESS_CAP_MS / 1e3}s (${runtimeLabel} process failed to launch or exited immediately; cause=${spawnFailureCause}). Check ~/.exe-os/session-logs/${instanceLabel}-*.log \u2014 common cause: installed Claude Code does not support a launch flag, or the daemon PATH excludes the node/launcher bin dir (cause=path_not_found).`;
6851
6979
  process.stderr.write(`[tmux-routing] SPAWN FAILED ${sessionName} (${spawnFailureCause}): ${errMsg2}
6852
6980
  `);
@@ -6868,31 +6996,59 @@ function spawnEmployee(employeeName, exeSession, projectDir, opts) {
6868
6996
  });
6869
6997
  return { sessionName, error: errMsg2 };
6870
6998
  }
6871
- const STABILITY_MS = Number(process.env.EXE_SPAWN_STABILITY_MS) || (useCodex ? 2500 : 0);
6872
- if (STABILITY_MS > 0) {
6873
- Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, STABILITY_MS);
6874
- if (!transport.isAlive(sessionName)) {
6875
- releaseSpawnLock(sessionName);
6876
- const runtimeLabel = useExeAgent ? "exe-agent" : useCodex ? "codex" : useOpencode ? "opencode" : "claude";
6877
- const errMsg2 = `spawn died immediately: tmux session "${sessionName}" disappeared within ${STABILITY_MS / 1e3}s after launch (${runtimeLabel} exited during startup).`;
6878
- process.stderr.write(`[tmux-routing] SPAWN FAILED ${sessionName} (startup_exit): ${errMsg2}
6879
- `);
6880
- recordOrchestrationEventBestEffort({
6881
- eventType: "tmux.spawn.completed",
6882
- source: "tmux-routing.spawnEmployee",
6883
- severity: "warn",
6884
- agentId: employeeName,
6885
- sessionScope: exeSession,
6886
- instanceId: opts?.instance != null ? String(opts.instance) : null,
6887
- tmuxSession: sessionName,
6888
- runtime: useCodex ? "codex" : useOpencode ? "opencode" : useExeAgent ? "exe-agent" : "claude",
6889
- durationMs: Date.now() - spawnStartedAt,
6890
- result: "failed",
6891
- errorCode: "startup_exit",
6892
- payload: { detail: "spawn_session_died_after_liveness", spawnCommand }
6893
- });
6894
- return { sessionName, error: errMsg2 };
6999
+ const STARTUP_WATCH_MS = resolveStartupWatchCapMs({
7000
+ useCodex,
7001
+ callerIsDaemon,
7002
+ override: process.env.EXE_SPAWN_STARTUP_WATCH_MS,
7003
+ legacyOverride: process.env.EXE_SPAWN_STABILITY_MS
7004
+ });
7005
+ const STARTUP_WATCH_INTERVAL_MS = 250;
7006
+ const startupWatch = watchSpawnStartup(
7007
+ {
7008
+ readLauncherExit: () => readSpawnExitMarker(exitMarkerPath),
7009
+ isAlive: () => transport.isAlive(sessionName),
7010
+ capturePane: () => transport.capturePane(sessionName, 50),
7011
+ sleep: (ms) => {
7012
+ Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, ms);
7013
+ }
7014
+ },
7015
+ { capMs: STARTUP_WATCH_MS, intervalMs: STARTUP_WATCH_INTERVAL_MS }
7016
+ );
7017
+ if (startupWatch.outcome === "exited") {
7018
+ try {
7019
+ execFileSync3("tmux", ["kill-session", "-t", sessionName], { timeout: 3e3 });
7020
+ } catch {
6895
7021
  }
7022
+ releaseSpawnLock(sessionName);
7023
+ const { exitCode } = startupWatch;
7024
+ const refused = exitCode === 78;
7025
+ const errorCode = refused ? "launch_refused" : "startup_exit";
7026
+ const paneCause = classifySpawnFailurePane(startupWatch.pane);
7027
+ const errMsg2 = refused ? `spawn refused: ${runtimeLabel} launcher for "${sessionName}" exited 78 (refusal) within ${STARTUP_WATCH_MS / 1e3}s \u2014 it declined to start the agent. Most common cause: running as root (uid 0), where Claude Code rejects --dangerously-skip-permissions / bypassPermissions. Run the daemon as a non-root user. Check ~/.exe-os/session-logs/${instanceLabel}-*.log. Pane tail: ${startupWatch.pane.trim().slice(-500) || "(empty)"}` : `spawn died during startup: ${runtimeLabel} launcher for "${sessionName}" ` + (exitCode === null ? `disappeared within ${STARTUP_WATCH_MS / 1e3}s of launch` : `exited ${exitCode} within ${STARTUP_WATCH_MS / 1e3}s of launch`) + ` (cause=${paneCause}). Check ~/.exe-os/session-logs/${instanceLabel}-*.log. Pane tail: ${startupWatch.pane.trim().slice(-500) || "(empty)"}`;
7028
+ process.stderr.write(`[tmux-routing] SPAWN FAILED ${sessionName} (${errorCode}): ${errMsg2}
7029
+ `);
7030
+ recordOrchestrationEventBestEffort({
7031
+ eventType: "tmux.spawn.completed",
7032
+ source: "tmux-routing.spawnEmployee",
7033
+ severity: "warn",
7034
+ agentId: employeeName,
7035
+ sessionScope: exeSession,
7036
+ instanceId: opts?.instance != null ? String(opts.instance) : null,
7037
+ tmuxSession: sessionName,
7038
+ runtime: runtimeLabel,
7039
+ durationMs: Date.now() - spawnStartedAt,
7040
+ result: "failed",
7041
+ errorCode,
7042
+ payload: {
7043
+ detail: "spawn_exited_during_startup",
7044
+ exitCode,
7045
+ spawnFailureCause: paneCause,
7046
+ watchCapMs: STARTUP_WATCH_MS,
7047
+ polls: startupWatch.polls,
7048
+ spawnCommand
7049
+ }
7050
+ });
7051
+ return { sessionName, error: errMsg2 };
6896
7052
  }
6897
7053
  if (useCodex) {
6898
7054
  let pane = "";
@@ -6932,28 +7088,14 @@ function spawnEmployee(employeeName, exeSession, projectDir, opts) {
6932
7088
  for (let i = 0; i < pollIterations; i++) {
6933
7089
  Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, POLL_INTERVAL_MS);
6934
7090
  try {
6935
- const pane = transport.capturePane(sessionName);
6936
- if (useExeAgent) {
6937
- if (pane.includes("[exe-agent]") || pane.includes("online")) {
6938
- booted = true;
6939
- break;
6940
- }
6941
- } else if (useCodex) {
6942
- if (pane.includes("codex") || pane.includes("Codex") || pane.includes("exe-start-codex")) {
6943
- booted = true;
6944
- break;
6945
- }
6946
- } else {
6947
- if (pane.includes("Claude Code") || pane.includes("\u276F")) {
6948
- booted = true;
6949
- break;
6950
- }
7091
+ if (paneShowsRuntimeBanner(transport.capturePane(sessionName), runtimeLabel)) {
7092
+ booted = true;
7093
+ break;
6951
7094
  }
6952
7095
  } catch {
6953
7096
  }
6954
7097
  }
6955
7098
  if (!booted && !callerIsDaemon) {
6956
- const runtimeLabel = useExeAgent ? "exe-agent" : useCodex ? "codex" : "claude";
6957
7099
  process.stderr.write(
6958
7100
  `[tmux-routing] ${runtimeLabel} boot banner poll capped at ${POLL_CAP_MS / 1e3}s for ${sessionName} (session is live) \u2014 sending task nudge anyway
6959
7101
  `
@@ -7272,6 +7414,7 @@ export {
7272
7414
  getReviewChecklist,
7273
7415
  createReviewForCompletedTask,
7274
7416
  cleanupReviewFile,
7417
+ BUSY_PATTERN,
7275
7418
  _resetExeBinDirCache,
7276
7419
  buildSpawnPath,
7277
7420
  acquireSpawnLock,
@@ -7322,5 +7465,12 @@ export {
7322
7465
  ensureEmployeeAsync,
7323
7466
  decideSpawnWorktreeDiscipline,
7324
7467
  resolveSpawnCwd,
7468
+ spawnExitMarkerPath,
7469
+ buildSpawnCommand,
7470
+ readSpawnExitMarker,
7471
+ paneShowsRuntimeBanner,
7472
+ classifySpawnFailurePane,
7473
+ resolveStartupWatchCapMs,
7474
+ watchSpawnStartup,
7325
7475
  spawnEmployee
7326
7476
  };
@@ -1,16 +1,16 @@
1
1
  import {
2
2
  buildSystemStateMemoryTypeExclusion
3
- } from "./chunk-W5YV2PZE.js";
3
+ } from "./chunk-DKRDU2AX.js";
4
4
  import {
5
5
  sessionScopeFilter
6
- } from "./chunk-74R44E4S.js";
6
+ } from "./chunk-SQM4ZTL2.js";
7
7
  import {
8
8
  getClient,
9
9
  getIdentity
10
- } from "./chunk-EA5FVACM.js";
10
+ } from "./chunk-HLU52KTO.js";
11
11
  import {
12
12
  getEmotionalBaseline
13
- } from "./chunk-OMXJMOBD.js";
13
+ } from "./chunk-BRZR76TS.js";
14
14
 
15
15
  // src/lib/dreaming.ts
16
16
  var DreamingEngine = class {
@@ -646,7 +646,7 @@ var DreamingEngine = class {
646
646
  }
647
647
  let overdueProspective = [];
648
648
  try {
649
- const { getOverdueProspective, completeProspective } = await import("./prospective-memory-A4GDTIWG.js");
649
+ const { getOverdueProspective, completeProspective } = await import("./prospective-memory-GHE5ORN4.js");
650
650
  const overdue = await getOverdueProspective(agentId);
651
651
  overdueProspective = overdue.map((o) => ({
652
652
  id: o.id,