@askexenow/exe-os 0.9.359 → 0.9.361

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 (449) 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 +113 -2
  6. package/dist/.dist-verified.json +3 -3
  7. package/dist/{active-agent-Y3DCBD7J.js → active-agent-5RXOXM47.js} +9 -8
  8. package/dist/{active-agent-DMKNHGSG.js → active-agent-UZAQUW7E.js} +9 -8
  9. package/dist/{agentic-ontology-3233PNKV.js → agentic-ontology-EHUWSJCG.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-CTSVPOC6.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-YJMSP24E.js} +5 -4
  14. package/dist/{behavior-injection-CGAMI552.js → behavior-injection-DTFGF6DT.js} +21 -13
  15. package/dist/{behaviors-57AMN5IP.js → behaviors-XW7ZZKHF.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 +131 -45
  27. package/dist/bin/customer-readiness.js +10 -1
  28. package/dist/bin/deferred-daemon-restart.js +125 -103
  29. package/dist/bin/exe-agent-config.js +9 -8
  30. package/dist/bin/exe-agent.js +13 -12
  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 +11 -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 +314 -184
  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-ALCHPQOK.js} +9 -8
  85. package/dist/{boot-review-sections-NDFE5443.js → boot-review-sections-E4QOMWZM.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 +1247 -1077
  89. package/dist/{capability-cards-OBB7BMMX.js → capability-cards-IE2DEJKT.js} +8 -7
  90. package/dist/{capacity-monitor-QLPEL6S5.js → capacity-monitor-3HVLTPQA.js} +32 -29
  91. package/dist/{catchup-brief-EN7QR6MP.js → catchup-brief-E2QZPNMH.js} +36 -33
  92. package/dist/{chunk-POZGQQEZ.js → chunk-2PIEDT3G.js} +1 -1
  93. package/dist/chunk-2PRAXZWM.js +261 -0
  94. package/dist/{chunk-MBULOZJF.js → chunk-32FEF5BW.js} +2 -2
  95. package/dist/{chunk-4FQIWAXA.js → chunk-34ABBEHN.js} +10 -10
  96. package/dist/{chunk-CVTWQZOR.js → chunk-3L2QU5ZF.js} +14 -2
  97. package/dist/{chunk-R6LNQAUG.js → chunk-3Q2YK6UT.js} +34 -1
  98. package/dist/{chunk-SNWV44E5.js → chunk-3TWIRKUD.js} +12 -5
  99. package/dist/{chunk-I5AVZOL2.js → chunk-3YBJ36UX.js} +2 -2
  100. package/dist/{chunk-OAYTQ4RY.js → chunk-4BI4YKHE.js} +55 -12
  101. package/dist/{chunk-OSID72CN.js → chunk-4L33OFU4.js} +25 -1
  102. package/dist/{chunk-A6VIK3SS.js → chunk-4P2BFNSB.js} +2 -2
  103. package/dist/{chunk-RFUTLZ2U.js → chunk-4UTSVUMY.js} +4 -4
  104. package/dist/chunk-5OPAUFLP.js +126 -0
  105. package/dist/{chunk-PDRIIEFV.js → chunk-5TKIVK3L.js} +1 -1
  106. package/dist/{chunk-6EOLGE7T.js → chunk-5XEKQJE5.js} +1 -1
  107. package/dist/chunk-63Z76YCI.js +218 -0
  108. package/dist/{chunk-XVTKJEI2.js → chunk-65WUZISK.js} +3 -3
  109. package/dist/{chunk-EHM4E62N.js → chunk-6DTALXOA.js} +1 -1
  110. package/dist/{chunk-DWKH2H7W.js → chunk-6EGNSEEX.js} +1 -1
  111. package/dist/chunk-6EM6USV7.js +1332 -0
  112. package/dist/{chunk-STFR72YH.js → chunk-6H44454F.js} +1 -1
  113. package/dist/{chunk-44WFVMZ5.js → chunk-6KVG6RTP.js} +1 -1
  114. package/dist/{chunk-SIGAQQHW.js → chunk-6LQGPGOS.js} +2 -2
  115. package/dist/{chunk-OY2PWHYR.js → chunk-6W5MDNLX.js} +2 -2
  116. package/dist/{chunk-QROIFRKI.js → chunk-7GPK2ANS.js} +5 -5
  117. package/dist/{chunk-GSVQBBE5.js → chunk-7N63G4JS.js} +2 -2
  118. package/dist/{chunk-2EAYZ3BK.js → chunk-A4EPO6F3.js} +9 -9
  119. package/dist/{chunk-QH2XAUZ5.js → chunk-A5544WYJ.js} +1 -1
  120. package/dist/{chunk-XV42EAVK.js → chunk-AQF6XMZ7.js} +1 -1
  121. package/dist/chunk-ARX6TAGN.js +102 -0
  122. package/dist/{chunk-JE34CB5H.js → chunk-ASQPFNLC.js} +2 -2
  123. package/dist/{chunk-WRP5AG4D.js → chunk-AUSKITKI.js} +2 -2
  124. package/dist/{chunk-YBX3G5OP.js → chunk-B3JV3F35.js} +1 -1
  125. package/dist/chunk-B6PFGUYJ.js +159 -0
  126. package/dist/{chunk-SHEWTDPC.js → chunk-BGMLECK5.js} +4 -4
  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-RJ67HG2P.js → chunk-BSPBWLUP.js} +4 -4
  130. package/dist/{chunk-WA2MJGPT.js → chunk-CC4I7337.js} +1 -1
  131. package/dist/{chunk-VY5VU7SX.js → chunk-CIXA5TXF.js} +2 -2
  132. package/dist/{chunk-MCNDZU5W.js → chunk-CKOMH7TL.js} +2 -2
  133. package/dist/{chunk-HLEZ5O5P.js → chunk-CY5RX7QR.js} +17 -15
  134. package/dist/{chunk-KIXNMTGC.js → chunk-DZLOUB4G.js} +5 -5
  135. package/dist/{chunk-VXL7PJ56.js → chunk-E3YI6FVJ.js} +5 -24
  136. package/dist/{chunk-IOEUAQWP.js → chunk-EEZOBN6X.js} +1 -1
  137. package/dist/{chunk-6SK4MM5B.js → chunk-EIBTRKUF.js} +1 -1
  138. package/dist/{chunk-EA5FVACM.js → chunk-ESGLOI6Q.js} +21 -17
  139. package/dist/{chunk-R62ITJDQ.js → chunk-EXAUIWUG.js} +1 -1
  140. package/dist/{chunk-3ZEVMZ4G.js → chunk-F4GLFLQK.js} +1 -1
  141. package/dist/{chunk-EX2SSLNU.js → chunk-FK3HX7VO.js} +9 -9
  142. package/dist/{chunk-HPHF5VTT.js → chunk-FU3CUTIA.js} +4 -4
  143. package/dist/{chunk-AHMUF6RO.js → chunk-G2M7WQ2M.js} +0 -2
  144. package/dist/{chunk-SKGMF2SO.js → chunk-GBNB4EWD.js} +22 -1
  145. package/dist/{chunk-HNPHPGGF.js → chunk-GIFXL4AC.js} +2 -2
  146. package/dist/{chunk-W5YV2PZE.js → chunk-GWBD5P7E.js} +16 -16
  147. package/dist/{chunk-VMR6M6GN.js → chunk-HISFWAAK.js} +1 -1
  148. package/dist/{chunk-LXG37RB2.js → chunk-HNB5IAVK.js} +1 -1
  149. package/dist/{chunk-QWVXN224.js → chunk-HPXFKUGU.js} +350 -65
  150. package/dist/{chunk-IQWAYXVF.js → chunk-HU4ZAYGH.js} +3 -3
  151. package/dist/{chunk-W3XUU36X.js → chunk-I4ILH2R6.js} +5 -5
  152. package/dist/chunk-IFJ4SVIP.js +197 -0
  153. package/dist/{chunk-TG7JYSEA.js → chunk-II5TSD4F.js} +5 -2
  154. package/dist/{chunk-2OVTGZYH.js → chunk-IM7PRQ27.js} +46 -3
  155. package/dist/{chunk-NE57GONM.js → chunk-INATSOZV.js} +1 -1
  156. package/dist/{chunk-GD7VXXW6.js → chunk-IXRNZ2Y2.js} +795 -174
  157. package/dist/chunk-J5KRIGHE.js +61 -0
  158. package/dist/{chunk-6WHYSLGF.js → chunk-J5QNK5VL.js} +1 -1
  159. package/dist/chunk-J6KMGEJW.js +238 -0
  160. package/dist/{chunk-XLEYCOHX.js → chunk-J73I53JO.js} +398 -58
  161. package/dist/{chunk-NP2Y7P3I.js → chunk-J7S2SOM2.js} +1 -1
  162. package/dist/{chunk-DQ75MEPU.js → chunk-JCICPQJV.js} +1 -1
  163. package/dist/chunk-JKKZGDLP.js +182 -0
  164. package/dist/{chunk-VAY6IXWY.js → chunk-KDMVVHZH.js} +1 -1
  165. package/dist/{chunk-G37RG543.js → chunk-LEZAPRMW.js} +1 -1
  166. package/dist/{chunk-3QWOO74G.js → chunk-LLZNPOGB.js} +97 -3
  167. package/dist/{chunk-SQBNN44X.js → chunk-LYEQZ7TW.js} +49 -15
  168. package/dist/chunk-M67ARGXY.js +175 -0
  169. package/dist/chunk-MPVXHYD5.js +85 -0
  170. package/dist/{chunk-RXL7A7JH.js → chunk-MZYNW5OY.js} +1 -1
  171. package/dist/{chunk-X2F6Q7TW.js → chunk-NBVSBSMZ.js} +1 -1
  172. package/dist/{chunk-LRETL4I3.js → chunk-NE5ZMNHN.js} +3 -3
  173. package/dist/chunk-NGDXBN3M.js +254 -0
  174. package/dist/{chunk-A5WEEND7.js → chunk-NKP4S2G5.js} +3 -3
  175. package/dist/{chunk-HDSDXGLV.js → chunk-NO5KHKKB.js} +1 -1
  176. package/dist/chunk-NOKJCF27.js +437 -0
  177. package/dist/{chunk-6KREY2Q7.js → chunk-NVRUZOEW.js} +5 -5
  178. package/dist/chunk-NVWBZXDK.js +257 -0
  179. package/dist/chunk-NXTQAY7Z.js +2607 -0
  180. package/dist/{chunk-C5YZMYQH.js → chunk-OLIXPGWN.js} +1 -1
  181. package/dist/{chunk-4DYJ6NOK.js → chunk-OUUWGAH4.js} +2 -2
  182. package/dist/{chunk-UPM5JP6G.js → chunk-OZNCAMS3.js} +47 -4
  183. package/dist/{chunk-UZ5RJYL3.js → chunk-P3ACGGW6.js} +1 -1
  184. package/dist/{chunk-6LY3QSJA.js → chunk-PE4DEYIW.js} +11 -6
  185. package/dist/{chunk-HK7SQDKJ.js → chunk-PGXESCSL.js} +2 -2
  186. package/dist/{chunk-NKDKB2RT.js → chunk-PK5ATL23.js} +6 -6
  187. package/dist/{chunk-2KLVTRY2.js → chunk-PLLBBNMC.js} +1 -1
  188. package/dist/{chunk-Z2PAVJJ4.js → chunk-PRJBAIHV.js} +3 -3
  189. package/dist/{chunk-QX7RWICL.js → chunk-PU7UYQRC.js} +1 -1
  190. package/dist/{chunk-57GRYGDU.js → chunk-PWNPP727.js} +1 -1
  191. package/dist/{chunk-PLOEFBFW.js → chunk-Q556G3P2.js} +3 -3
  192. package/dist/{chunk-4JERP7NT.js → chunk-QAEWWYHL.js} +29 -1
  193. package/dist/{chunk-2YGAKBRG.js → chunk-QFQWHCOJ.js} +3 -3
  194. package/dist/chunk-QILQ5FCG.js +198 -0
  195. package/dist/{chunk-G2KK64UB.js → chunk-QNETW6LZ.js} +101 -19
  196. package/dist/{chunk-FASR2WLT.js → chunk-R6AJ6VIJ.js} +1 -1
  197. package/dist/{chunk-6JTKIXLU.js → chunk-RBWLUYTO.js} +1 -1
  198. package/dist/{chunk-QLFN3MUW.js → chunk-RCOIKTHM.js} +1 -1
  199. package/dist/{chunk-ITRKRKS7.js → chunk-RFKRCVGW.js} +1 -1
  200. package/dist/{chunk-APR556TY.js → chunk-RJJZH7Z7.js} +190 -29
  201. package/dist/{chunk-5UAMBMNR.js → chunk-RO326K57.js} +44 -34
  202. package/dist/{chunk-JBAMYKBL.js → chunk-SSZIGWIG.js} +1 -1
  203. package/dist/{chunk-2I23RPSI.js → chunk-TKDITWDN.js} +9 -0
  204. package/dist/{chunk-VCCZQDCU.js → chunk-U32RDCUB.js} +3 -3
  205. package/dist/{chunk-OIS5VIAH.js → chunk-UWEFIIEG.js} +6 -2
  206. package/dist/{chunk-LPKTGK7L.js → chunk-V3ORKXAU.js} +4 -4
  207. package/dist/{chunk-WCP4OQUL.js → chunk-V6T42AQN.js} +2 -2
  208. package/dist/chunk-VAOUB2TK.js +23 -0
  209. package/dist/{chunk-4WSUP4CC.js → chunk-VEGTALBX.js} +11 -11
  210. package/dist/{chunk-AL7JMA54.js → chunk-VEJKY5I6.js} +2 -2
  211. package/dist/{chunk-74R44E4S.js → chunk-VGWGXAHT.js} +198 -93
  212. package/dist/{chunk-YKRNH5LU.js → chunk-VQWRRXBD.js} +1 -1
  213. package/dist/{chunk-7QRMFYOV.js → chunk-VYFZVIWX.js} +1 -1
  214. package/dist/{chunk-CAEWPEBA.js → chunk-W6J25BU7.js} +1 -1
  215. package/dist/{chunk-EUQF3JOH.js → chunk-WBG7XYVR.js} +1 -1
  216. package/dist/chunk-WT4RI36X.js +23 -0
  217. package/dist/{chunk-46RPEWTH.js → chunk-WYETVNK4.js} +1 -1
  218. package/dist/{chunk-DKRSKC5R.js → chunk-XQDF2I4D.js} +1 -1
  219. package/dist/{chunk-HKK7LLS5.js → chunk-XTGR3LMF.js} +34 -3
  220. package/dist/{chunk-XWWNRFRF.js → chunk-YJJ7FRX5.js} +11 -11
  221. package/dist/{chunk-F3QTF4T7.js → chunk-YZLDE3XJ.js} +3 -3
  222. package/dist/chunk-YZUHSV24.js +277 -0
  223. package/dist/{chunk-5I3YC7ER.js → chunk-ZGYRQHQ3.js} +2 -2
  224. package/dist/{chunk-3ODATKWH.js → chunk-ZPW6FAEQ.js} +1 -1
  225. package/dist/{chunk-YEOIPUFO.js → chunk-ZR4CQBAP.js} +1 -1
  226. package/dist/{chunk-VNK3MNZE.js → chunk-ZZEKOI2M.js} +1 -1
  227. package/dist/{cleanup-graph-garbage-XFGY4EEE.js → cleanup-graph-garbage-SJHT3RXT.js} +13 -12
  228. package/dist/{cloud-sync-shutdown-XCOATIJW.js → cloud-sync-shutdown-43RY4ZBS.js} +8 -7
  229. package/dist/{co-activation-XNBLOGK3.js → co-activation-5GP2E54J.js} +8 -7
  230. package/dist/{co-occurrence-HO4PGQC4.js → co-occurrence-OXF6MLM6.js} +11 -10
  231. package/dist/{code-context-index-5RY66SWZ.js → code-context-index-DWR6HS35.js} +7 -5
  232. package/dist/consent-passphrase-Z64GFJXK.js +23 -0
  233. package/dist/{conversation-entity-extractor-5G5DGRJU.js → conversation-entity-extractor-YSXUBOXC.js} +3 -3
  234. package/dist/{conversation-wiki-populator-RZKG6PK4.js → conversation-wiki-populator-5EGRW2UZ.js} +1 -1
  235. package/dist/{crdt-sync-6TD7LSZW.js → crdt-sync-FKEQAOQL.js} +5 -4
  236. package/dist/{crm-webhook-WZAV5776.js → crm-webhook-K4ZOGKOO.js} +2 -2
  237. package/dist/{cto-delegation-gate-UHMYFM4D.js → cto-delegation-gate-TQIOXGNV.js} +30 -27
  238. package/dist/{daemon-auth-SXZHLUYS.js → daemon-auth-OCHW2U6B.js} +3 -2
  239. package/dist/{daemon-orchestration-DT5M2ZAR.js → daemon-orchestration-HSW7IOH4.js} +35 -32
  240. package/dist/{daemon-ready-56VAPZU6.js → daemon-ready-VGPSRI3Z.js} +1 -1
  241. package/dist/{daemon-restart-circuit-breaker-5V6B6NLS.js → daemon-restart-circuit-breaker-SMTWFX27.js} +25 -3
  242. package/dist/db-backend-ODVJ3Q3D.js +7 -0
  243. package/dist/{db-restore-events-ZLD2HRQV.js → db-restore-events-TFCZ4CPM.js} +2 -1
  244. package/dist/{doc-graph-extractor-FNCYPFKY.js → doc-graph-extractor-W5KHZUL4.js} +11 -10
  245. package/dist/{documents-GKDZDUED.js → documents-SLQWZNOW.js} +18 -16
  246. package/dist/dreaming-E2M2O32J.js +63 -0
  247. package/dist/{exe-drift-QTKD2FHT.js → exe-drift-NUYEPGFR.js} +9 -8
  248. package/dist/{exe-export-ESJ6KP6J.js → exe-export-CFX2JAOJ.js} +21 -13
  249. package/dist/{exe-import-N4X3GEQB.js → exe-import-ZD5QMFN2.js} +21 -13
  250. package/dist/{exe-key-KZCCHX3W.js → exe-key-O4KHCKZZ.js} +114 -98
  251. package/dist/exe-org-TV7KW4D6.js +672 -0
  252. package/dist/{exe-snapshot-SCRPHCPZ.js → exe-snapshot-P4YW62MR.js} +38 -33
  253. package/dist/{fast-db-init-6H67K76Q.js → fast-db-init-YZNPKBNX.js} +1 -1
  254. package/dist/{founder-context-C7X7IRDA.js → founder-context-TU5G4AKR.js} +4 -3
  255. package/dist/{founder-monitor-envelope-DHSUMBWU.js → founder-monitor-envelope-SMILO4BT.js} +7 -5
  256. package/dist/gateway/index.js +23 -22
  257. package/dist/{gateway-client-7LMZKHTH.js → gateway-client-JA2BH7QO.js} +1 -1
  258. package/dist/{git-staleness-JCKVMWPO.js → git-staleness-CKSL73QX.js} +8 -7
  259. package/dist/{global-procedures-BR7WGSE7.js → global-procedures-X36SK7LZ.js} +9 -8
  260. package/dist/{graph-auto-extract-EOXWQRBZ.js → graph-auto-extract-OW7YWKRT.js} +11 -10
  261. package/dist/{graph-rag-5FVC5JXH.js → graph-rag-6GFTXM5O.js} +3 -3
  262. package/dist/{hook-integrity-TYGDD7OE.js → hook-integrity-AIDFKMTA.js} +1 -1
  263. package/dist/{hook-prefetch-2CN3MK4H.js → hook-prefetch-THLIXCLE.js} +31 -28
  264. package/dist/hooks/bug-report-worker.js +35 -32
  265. package/dist/hooks/codex-stop-task-finalizer.js +36 -33
  266. package/dist/hooks/commit-complete.js +34 -31
  267. package/dist/hooks/error-recall.js +16 -15
  268. package/dist/hooks/exe-heartbeat-hook.js +10 -9
  269. package/dist/hooks/ingest-worker.js +12 -10
  270. package/dist/hooks/ingest.js +19 -18
  271. package/dist/hooks/instructions-loaded.js +11 -10
  272. package/dist/hooks/manifest.json +20 -20
  273. package/dist/hooks/notification.js +11 -10
  274. package/dist/hooks/post-compact.js +11 -115
  275. package/dist/hooks/post-tool-combined.js +11 -11
  276. package/dist/hooks/pre-compact.js +38 -64
  277. package/dist/hooks/pre-tool-use.js +95 -36
  278. package/dist/hooks/prompt-submit.js +50 -47
  279. package/dist/hooks/session-end.js +39 -36
  280. package/dist/hooks/session-start.js +64 -18
  281. package/dist/hooks/stop.js +40 -37
  282. package/dist/hooks/subagent-stop.js +35 -32
  283. package/dist/hooks/summary-worker.js +41 -38
  284. package/dist/index.js +44 -41
  285. package/dist/inrun-inbox-DRKVDPLY.js +29 -0
  286. package/dist/{installer-YDLSXGD2.js → installer-CBHPY3RI.js} +11 -10
  287. package/dist/{installer-7UV3CNWZ.js → installer-LORTXEPZ.js} +11 -10
  288. package/dist/{installer-VPNTM3X6.js → installer-R4EKAE7F.js} +11 -10
  289. package/dist/{intercom-queue-KHKJJYCQ.js → intercom-queue-QGXWXDYJ.js} +30 -27
  290. package/dist/{key-backup-status-YMS7YGWO.js → key-backup-status-3RC6XTUX.js} +2 -1
  291. package/dist/lib/agent-config.js +3 -2
  292. package/dist/lib/cloud-sync.js +27 -24
  293. package/dist/lib/config.js +6 -1
  294. package/dist/lib/consolidation.js +14 -13
  295. package/dist/lib/crypto.js +4 -3
  296. package/dist/lib/database.js +8 -7
  297. package/dist/lib/db-backup.js +4 -3
  298. package/dist/lib/db-checkpoint-worker.js +1 -1
  299. package/dist/lib/db-daemon-client.js +7 -5
  300. package/dist/lib/db-read-worker-client.js +1 -1
  301. package/dist/lib/db-read-worker.js +1 -1
  302. package/dist/lib/db-write-worker-client.js +2 -2
  303. package/dist/lib/db-write-worker.js +3 -3
  304. package/dist/lib/db.js +8 -7
  305. package/dist/lib/device-registry.js +3 -2
  306. package/dist/lib/embed-worker.js +2 -1
  307. package/dist/lib/embedder.js +7 -5
  308. package/dist/lib/employee-templates.js +10 -9
  309. package/dist/lib/employees.js +8 -7
  310. package/dist/lib/error-detector.js +1 -1
  311. package/dist/lib/exe-daemon-client.js +16 -6
  312. package/dist/lib/exe-daemon.js +262 -125
  313. package/dist/lib/hybrid-search.js +13 -12
  314. package/dist/lib/identity-templates.js +3 -1
  315. package/dist/lib/identity.js +8 -7
  316. package/dist/lib/keychain.js +41 -3
  317. package/dist/lib/license.js +12 -3
  318. package/dist/lib/messaging.js +31 -28
  319. package/dist/lib/platform-support.js +25 -0
  320. package/dist/lib/post-tool-memory.js +6 -4
  321. package/dist/lib/preflight.js +29 -0
  322. package/dist/lib/registry-proxy.js +1 -1
  323. package/dist/lib/reminders.js +9 -8
  324. package/dist/lib/schedules.js +13 -12
  325. package/dist/lib/session-registry.js +10 -9
  326. package/dist/lib/session-wrappers.js +7 -3
  327. package/dist/lib/skill-learning.js +21 -13
  328. package/dist/lib/status-brief.js +8 -3
  329. package/dist/lib/store.js +12 -11
  330. package/dist/lib/task-router.js +9 -8
  331. package/dist/lib/tasks.js +32 -29
  332. package/dist/lib/tmux-routing.js +45 -29
  333. package/dist/lib/tmux-status.js +7 -3
  334. package/dist/lib/token-spend.js +9 -8
  335. package/dist/lib/ws-client.js +1 -1
  336. package/dist/{license-gate-YXUSNA2I.js → license-gate-NO2WGZPU.js} +5 -4
  337. package/dist/{license-sync-XFDOXL3Z.js → license-sync-CVEMSX3H.js} +4 -3
  338. package/dist/linux-systemd-LRW3BYSS.js +38 -0
  339. package/dist/mailbox-inbox-CP2VRBXZ.js +10 -0
  340. package/dist/mailbox-outbox-HXI7DYNC.js +19 -0
  341. package/dist/mcp/register-tools.js +108 -93
  342. package/dist/mcp/server.js +111 -96
  343. package/dist/mcp/tools/complete-reminder.js +10 -9
  344. package/dist/mcp/tools/create-reminder.js +10 -9
  345. package/dist/mcp/tools/create-task.js +38 -31
  346. package/dist/mcp/tools/deactivate-behavior.js +22 -14
  347. package/dist/mcp/tools/list-reminders.js +10 -9
  348. package/dist/mcp/tools/list-tasks.js +34 -31
  349. package/dist/mcp/tools/send-message.js +33 -30
  350. package/dist/mcp/tools/update-task.js +33 -30
  351. package/dist/{mcp-http-config-HIP5CEDV.js → mcp-http-config-H4B5LHCL.js} +9 -8
  352. package/dist/{mcp-session-identity-RTNZ2ZLW.js → mcp-session-identity-MCIJPH7T.js} +30 -27
  353. package/dist/{memory-cards-KG4TPNKK.js → memory-cards-PX3ZU7WC.js} +12 -11
  354. package/dist/{memory-graph-extractor-6HTBLO2N.js → memory-graph-extractor-M5LHDSFC.js} +12 -11
  355. package/dist/{memory-poisoning-defense-3ZT57RSJ.js → memory-poisoning-defense-LORMP5QJ.js} +8 -7
  356. package/dist/{memory-pressure-watchdog-ZOZBIMKC.js → memory-pressure-watchdog-AXJKFOCO.js} +31 -28
  357. package/dist/{memory-queue-W54BYW7V.js → memory-queue-4VN3DTOE.js} +3 -2
  358. package/dist/memory-queue-client-OI4LDT4W.js +18 -0
  359. package/dist/{memory-reflection-EQC4FXSW.js → memory-reflection-XB6CE5MY.js} +8 -7
  360. package/dist/{monitor-grants-BDLVFVDR.js → monitor-grants-W3ISOLMC.js} +6 -4
  361. package/dist/{monitor-identity-GLFZSEAH.js → monitor-identity-AN3B5QIN.js} +3 -2
  362. package/dist/{notification-ledger-NZ4HO3M5.js → notification-ledger-4JVPBNDO.js} +31 -28
  363. package/dist/{notifications-74YECZ4V.js → notifications-7EJE7FEP.js} +30 -27
  364. package/dist/{orchestration-events-KRQI4ED5.js → orchestration-events-GCMG4TBV.js} +9 -8
  365. package/dist/{orchestration-phase-KVF42ZKU.js → orchestration-phase-ZJ4XVNFO.js} +3 -2
  366. package/dist/orchestrator-W4PANW2L.js +55 -0
  367. package/dist/org-brief-session-65THKUUQ.js +45 -0
  368. package/dist/org-consent-policy-QE3TE273.js +68 -0
  369. package/dist/org-join-HTQ57JYH.js +35 -0
  370. package/dist/org-key-admin-4W6LZ5KZ.js +242 -0
  371. package/dist/org-key-pin-OTOKAELD.js +37 -0
  372. package/dist/{org-membership-B32NS5NI.js → org-membership-SML6GCHP.js} +11 -7
  373. package/dist/org-partner-config-XQGOB7EJ.js +25 -0
  374. package/dist/org-partner-runtime-VEQ2OQQM.js +44 -0
  375. package/dist/org-row-visibility-V2YHQMU7.js +18 -0
  376. package/dist/{pipeline-router-6ZZV7JMA.js → pipeline-router-HJSXQN2M.js} +9 -8
  377. package/dist/{plan-limits-B7AZKZ6U.js → plan-limits-GVLMARLS.js} +11 -10
  378. package/dist/{project-boot-WEQSKDD7.js → project-boot-YMHABZNL.js} +7 -2
  379. package/dist/{projection-worker-LRFFQ6JB.js → projection-worker-JUNR4VAH.js} +5 -4
  380. package/dist/{prospective-memory-A4GDTIWG.js → prospective-memory-NOGTSZC4.js} +8 -7
  381. package/dist/push-notifications-FIVZB27Y.js +60 -0
  382. package/dist/{reranker-YVTLJCFC.js → reranker-ZZYVYCQW.js} +3 -2
  383. package/dist/{retrieval-health-PK2ODTXM.js → retrieval-health-B7USNBNW.js} +1 -1
  384. package/dist/{review-polling-JFWRNQF6.js → review-polling-G7ZCVGXI.js} +31 -28
  385. package/dist/runtime/index.js +38 -35
  386. package/dist/{session-events-VMQBCUH3.js → session-events-HIULW2JW.js} +31 -28
  387. package/dist/{session-kill-telemetry-Z3W256T5.js → session-kill-telemetry-5FLZAMWE.js} +31 -28
  388. package/dist/session-lineage-AGOHSXIS.js +66 -0
  389. package/dist/{session-scope-2ADEVY3C.js → session-scope-64QIDBJS.js} +30 -27
  390. package/dist/setup-wizard-JHR2HYWC.js +35 -0
  391. package/dist/{shard-manager-DFLCDZT5.js → shard-manager-YEOHEOHL.js} +4 -3
  392. package/dist/{skill-refinement-APBYOSGX.js → skill-refinement-BYZNTHQJ.js} +9 -8
  393. package/dist/{stack-promote-SZYIPTFT.js → stack-promote-4WRGX5YI.js} +6 -5
  394. package/dist/{stack-release-EYRDEGPD.js → stack-release-HRUOH243.js} +93 -80
  395. package/dist/{stack-update-YWK2YXP6.js → stack-update-X5LCAIMH.js} +9 -4
  396. package/dist/{steward-gate-CIOBPNX6.js → steward-gate-LWTZRKBJ.js} +9 -8
  397. package/dist/{support-inbox-OAWGFRKW.js → support-inbox-HA7N3XFN.js} +5 -4
  398. package/dist/{task-enforcement-YAU6ZGDC.js → task-enforcement-4MFBYFXY.js} +37 -28
  399. package/dist/task-request-inbox-VSXZKKPQ.js +64 -0
  400. package/dist/{task-scope-44N7XP5N.js → task-scope-MWBLCI4L.js} +30 -27
  401. package/dist/{tasks-crud-IWVDREXG.js → tasks-crud-FXGSJNQG.js} +30 -27
  402. package/dist/tasks-notify-NHACVTKE.js +60 -0
  403. package/dist/{tasks-review-VDFWFETP.js → tasks-review-L3FTWM6K.js} +30 -27
  404. package/dist/{telemetry-upload-3X5ESEKM.js → telemetry-upload-OFC56N3C.js} +13 -12
  405. package/dist/{token-budget-WZGO22ME.js → token-budget-JHZJH2OU.js} +9 -8
  406. package/dist/{tool-capability-index-IFNZ6QUS.js → tool-capability-index-WZWVBI2R.js} +1 -1
  407. package/dist/{tool-telemetry-F7RWUNVK.js → tool-telemetry-MX4CODRA.js} +1 -1
  408. package/dist/tui/App.js +44 -41
  409. package/dist/{tui-data-KT7YGVQS.js → tui-data-OLCJT3X3.js} +30 -27
  410. package/dist/{typed-messages-TKDGVPHS.js → typed-messages-RCMPEKJN.js} +1 -1
  411. package/dist/{update-support-ZVRMECNQ.js → update-support-Q5QYK6TG.js} +21 -19
  412. package/dist/{work-state-heartbeat-CA4CN7DQ.js → work-state-heartbeat-FOF6RQSC.js} +1 -1
  413. package/dist/{worker-gate-52MVKYGZ.js → worker-gate-UEBG2QLF.js} +3 -2
  414. package/dist/{workflow-engine-ZAFBPVUP.js → workflow-engine-E7PG3R34.js} +2 -2
  415. package/dist/{worktree-NNVXVV6A.js → worktree-VOLK2GOS.js} +10 -9
  416. package/dist/{worktree-sweep-IM2ZQG6Z.js → worktree-sweep-AATRCA33.js} +11 -10
  417. package/package.json +8 -20
  418. package/postinstall.mjs +124 -0
  419. package/release-notes.json +18 -16
  420. package/stack.release.schema.json +4 -0
  421. package/dist/chunk-AFNRE2RV.js +0 -408
  422. package/dist/chunk-OSKWCKUC.js +0 -6
  423. package/dist/chunk-S3FIQCSM.js +0 -232
  424. package/dist/chunk-W6UB2AWP.js +0 -656
  425. package/dist/dreaming-WPMQJAXW.js +0 -60
  426. package/dist/exe-org-UK77DUU4.js +0 -73
  427. package/dist/memory-queue-client-RRNW2IFZ.js +0 -16
  428. package/dist/orchestrator-WV2YCHTK.js +0 -52
  429. package/dist/push-notifications-GOFTDDWW.js +0 -15
  430. package/dist/setup-wizard-26B36FMC.js +0 -14
  431. package/dist/tasks-notify-WK5HA77D.js +0 -57
  432. /package/dist/{chunk-BGYCUZYK.js → chunk-3NPMPEAC.js} +0 -0
  433. /package/dist/{chunk-YL2JH3XV.js → chunk-6C4UAKMS.js} +0 -0
  434. /package/dist/{chunk-U7RZIY74.js → chunk-7AY76CBP.js} +0 -0
  435. /package/dist/{chunk-WTH4CSAP.js → chunk-DFQEUZSI.js} +0 -0
  436. /package/dist/{chunk-YMCIZCNK.js → chunk-J34U3NT2.js} +0 -0
  437. /package/dist/{chunk-FVWI2AR4.js → chunk-LRSBJCDL.js} +0 -0
  438. /package/dist/{chunk-COHHVCFA.js → chunk-Q2DLJR3C.js} +0 -0
  439. /package/dist/{chunk-ZMYXQU4L.js → chunk-STDYMMOX.js} +0 -0
  440. /package/dist/{chunk-DSGFX3RT.js → chunk-YWN3XMPU.js} +0 -0
  441. /package/dist/{chunk-YMUZWC33.js → chunk-YYB5PMTK.js} +0 -0
  442. /package/dist/{core-memory-AATZRQEY.js → core-memory-BA7UCIR6.js} +0 -0
  443. /package/dist/{entity-boost-HLFG2CH3.js → entity-boost-VXXED26D.js} +0 -0
  444. /package/dist/{memory-isolation-CF6FYSXD.js → memory-isolation-3HQ6NNX3.js} +0 -0
  445. /package/dist/{message-queue-client-AX6KQK7T.js → message-queue-client-5XW7ZOK2.js} +0 -0
  446. /package/dist/{oauth-server-VE5ELXTF.js → oauth-server-H6EJUPEP.js} +0 -0
  447. /package/dist/{webhook-pipe-A4X4SCMW.js → webhook-pipe-QJRFZVKA.js} +0 -0
  448. /package/dist/{wiki-acl-GNIXYWHJ.js → wiki-acl-X67M7QT3.js} +0 -0
  449. /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-W6J25BU7.js";
4
+ import {
5
+ resolveRowVisibility
6
+ } from "./chunk-J5KRIGHE.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-AQF6XMZ7.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-J5QNK5VL.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-ZPW6FAEQ.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-2PIEDT3G.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-YZLDE3XJ.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-ESGLOI6Q.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-IM7PRQ27.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-64QIDBJS.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-TU5G4AKR.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-3HVLTPQA.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-YZNPKBNX.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-YZNPKBNX.js");
5437
5453
  const client = await fastDbInit();
5438
5454
  const result = await client.execute(q);
5439
5455
  const id = result.rows[0]?.id;
@@ -5553,7 +5569,7 @@ function sendIntercom(targetSession, opts) {
5553
5569
  }
5554
5570
  if ((process.env.EXE_NOTIFICATION_LEDGER ?? "").trim().toLowerCase() === "shadow") {
5555
5571
  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(() => {
5572
+ void import("./notification-ledger-4JVPBNDO.js").then((m) => m.recordShadowNudge(targetSession, reason, shadowScope)).catch(() => {
5557
5573
  });
5558
5574
  }
5559
5575
  if (!opts?.force && isDebounced(targetSession)) {
@@ -5689,7 +5705,7 @@ function scheduleDeferredSpawnNudge(input) {
5689
5705
  return;
5690
5706
  }
5691
5707
  queueIntercom(input.sessionName, `spawn nudge failed after ${attempt} attempts: ${msg}`, "signal");
5692
- void import("./notifications-74YECZ4V.js").then(({ writeNotification: writeNotification2 }) => writeNotification2({
5708
+ void import("./notifications-7EJE7FEP.js").then(({ writeNotification: writeNotification2 }) => writeNotification2({
5693
5709
  agentId: getCoordinatorName(),
5694
5710
  agentRole: "COO",
5695
5711
  event: "error_spike",
@@ -6126,7 +6142,7 @@ function ensureEmployee(employeeName, exeSession, projectDir, opts) {
6126
6142
  const emp = roster.find((e) => baseAgentName(e.name) === baseAgentName(employeeName));
6127
6143
  if (emp && !COORDINATOR_ROLES.has(emp.role)) {
6128
6144
  try {
6129
- const collisions = checkWorktreeCollisions(projectDir);
6145
+ const collisions = spawnOpts.collisionGuardHandled ? [] : checkWorktreeCollisions(projectDir);
6130
6146
  if (collisions.length > 0) {
6131
6147
  for (const c of collisions) {
6132
6148
  process.stderr.write(
@@ -6361,6 +6377,7 @@ async function ensureEmployeeAsync(employeeName, exeSession, projectDir, opts) {
6361
6377
  `
6362
6378
  );
6363
6379
  }
6380
+ asyncOpts = { ...asyncOpts, collisionGuardHandled: true };
6364
6381
  const result = ensureEmployee(employeeName, exeSession, projectDir, asyncOpts);
6365
6382
  if (asyncOpts.spawnLockHeld && result.sessionName) {
6366
6383
  releaseSpawnLock(result.sessionName);
@@ -6383,6 +6400,71 @@ function resolveSpawnCwd(requestedCwd, projectDir, dirExists = existsSync9) {
6383
6400
  if (dirExists(projectDir)) return { cwd: projectDir, fellBack: true, requestedCwd };
6384
6401
  return { cwd: null, fellBack: false, requestedCwd };
6385
6402
  }
6403
+ function spawnExitMarkerPath(sessionName) {
6404
+ const safe = sessionName.replace(/[^A-Za-z0-9._-]/g, "_");
6405
+ return path8.join(SESSION_CACHE, `spawn-exit-${safe}`);
6406
+ }
6407
+ function buildSpawnCommand(launchCommand, exitMarkerPath, cleanupSuffix) {
6408
+ const list = `${launchCommand}; printf '%s' "$?" > "${exitMarkerPath}"${cleanupSuffix}`;
6409
+ return `/bin/sh -c '${list.replace(/'/g, `'\\''`)}'`;
6410
+ }
6411
+ function readSpawnExitMarker(markerPath, read = (p) => readFileSync6(p, "utf8")) {
6412
+ let raw;
6413
+ try {
6414
+ raw = read(markerPath);
6415
+ } catch {
6416
+ return null;
6417
+ }
6418
+ const trimmed = raw.trim();
6419
+ if (!/^\d+$/.test(trimmed)) return null;
6420
+ return Number(trimmed);
6421
+ }
6422
+ function paneShowsRuntimeBanner(pane, runtime) {
6423
+ if (runtime === "exe-agent") return pane.includes("[exe-agent]") || pane.includes("online");
6424
+ if (runtime === "codex") {
6425
+ return pane.includes("codex") || pane.includes("Codex") || pane.includes("exe-start-codex");
6426
+ }
6427
+ return pane.includes("Claude Code") || pane.includes("\u276F");
6428
+ }
6429
+ function classifySpawnFailurePane(pane) {
6430
+ const paneLc = pane.toLowerCase();
6431
+ if (paneLc.includes("command not found") || paneLc.includes(": not found")) {
6432
+ return "path_not_found";
6433
+ }
6434
+ if (paneLc.includes("exit 127") || paneLc.includes("claude") && paneLc.includes("not found") || paneLc.includes("not support") || // existing "unsupported launch flag" hint
6435
+ paneLc.includes("unknown option") || paneLc.includes("enoent")) {
6436
+ return "claude_launch_failed";
6437
+ }
6438
+ return "timeout";
6439
+ }
6440
+ function resolveStartupWatchCapMs(input) {
6441
+ const explicit = Number(input.override) || Number(input.legacyOverride);
6442
+ if (explicit > 0) return explicit;
6443
+ if (input.useCodex) return 2500;
6444
+ return input.callerIsDaemon ? 2e3 : 3e3;
6445
+ }
6446
+ function watchSpawnStartup(probes, opts) {
6447
+ const interval = Math.max(1, opts.intervalMs);
6448
+ const iterations = Math.max(0, Math.ceil(Math.max(0, opts.capMs) / interval));
6449
+ const capture = () => {
6450
+ try {
6451
+ return probes.capturePane();
6452
+ } catch {
6453
+ return "";
6454
+ }
6455
+ };
6456
+ let polls = 0;
6457
+ for (let i = 0; i <= iterations; i++) {
6458
+ polls++;
6459
+ const exitCode = probes.readLauncherExit();
6460
+ if (exitCode !== null) return { outcome: "exited", exitCode, pane: capture(), polls };
6461
+ if (!probes.isAlive()) {
6462
+ return { outcome: "exited", exitCode: probes.readLauncherExit(), pane: capture(), polls };
6463
+ }
6464
+ if (i < iterations) probes.sleep(interval);
6465
+ }
6466
+ return { outcome: "running", polls };
6467
+ }
6386
6468
  function spawnEmployee(employeeName, exeSession, projectDir, opts) {
6387
6469
  const transport = getTransport();
6388
6470
  const sessionName = employeeSessionName(employeeName, exeSession, opts?.instance);
@@ -6732,29 +6814,29 @@ function spawnEmployee(employeeName, exeSession, projectDir, opts) {
6732
6814
  }
6733
6815
  }
6734
6816
  }
6735
- let spawnCommand;
6817
+ let launchCommand;
6736
6818
  if (useExeAgent) {
6737
- spawnCommand = `exe-agent --employee ${employeeName} --model ${opts.model} --provider ${opts.provider}${cleanupSuffix}`;
6819
+ launchCommand = `exe-agent --employee ${employeeName} --model ${opts.model} --provider ${opts.provider}`;
6738
6820
  } else if (useCodex) {
6739
6821
  process.stderr.write(
6740
6822
  `[tmux-routing] agent-config: ${employeeName} \u2192 codex (${agentRtConfig.model})
6741
6823
  `
6742
6824
  );
6743
- spawnCommand = `exe-start-codex --agent ${employeeName} --session ${sessionName}${cleanupSuffix}`;
6825
+ launchCommand = `exe-start-codex --agent ${employeeName} --session ${sessionName}`;
6744
6826
  } else if (useOpencode) {
6745
6827
  const binName = `${employeeName}-opencode`;
6746
6828
  process.stderr.write(
6747
6829
  `[tmux-routing] agent-config: ${employeeName} \u2192 opencode (${agentRtConfig.model})
6748
6830
  `
6749
6831
  );
6750
- spawnCommand = `${binName}${cleanupSuffix}`;
6832
+ launchCommand = binName;
6751
6833
  } else if (useBinSymlink) {
6752
6834
  const binName = `${employeeName}-${ccProvider}`;
6753
6835
  process.stderr.write(
6754
6836
  `[tmux-routing] provider cascade: ${ccProvider} \u2192 spawning ${binName}
6755
6837
  `
6756
6838
  );
6757
- spawnCommand = `${binName}${cleanupSuffix}`;
6839
+ launchCommand = binName;
6758
6840
  } else {
6759
6841
  let launcherAbs = "";
6760
6842
  try {
@@ -6762,8 +6844,18 @@ function spawnEmployee(employeeName, exeSession, projectDir, opts) {
6762
6844
  if (existsSync9(launcherJs)) launcherAbs = launcherJs;
6763
6845
  } catch {
6764
6846
  }
6765
- spawnCommand = launcherAbs ? `"${process.execPath}" "${launcherAbs}" --agent ${employeeName}${cleanupSuffix}` : `exe-launch-agent --agent ${employeeName}${cleanupSuffix}`;
6847
+ launchCommand = launcherAbs ? `"${process.execPath}" "${launcherAbs}" --agent ${employeeName}` : `exe-launch-agent --agent ${employeeName}`;
6848
+ }
6849
+ const exitMarkerPath = spawnExitMarkerPath(sessionName);
6850
+ try {
6851
+ mkdirSync6(SESSION_CACHE, { recursive: true });
6852
+ } catch {
6853
+ }
6854
+ try {
6855
+ unlinkSync4(exitMarkerPath);
6856
+ } catch {
6766
6857
  }
6858
+ const spawnCommand = buildSpawnCommand(launchCommand, exitMarkerPath, cleanupSuffix);
6767
6859
  const tmuxEnvArgs = Object.entries(launchEnv).flatMap(([key, val]) => ["-e", `${key}=${val}`]);
6768
6860
  let spawnResult;
6769
6861
  try {
@@ -6818,6 +6910,7 @@ function spawnEmployee(employeeName, exeSession, projectDir, opts) {
6818
6910
  }
6819
6911
  const callerIsDaemon = process.env.EXE_IS_DAEMON === "1";
6820
6912
  const POLL_INTERVAL_MS = 500;
6913
+ const runtimeLabel = useExeAgent ? "exe-agent" : useCodex ? "codex" : useOpencode ? "opencode" : "claude";
6821
6914
  const LIVENESS_CAP_MS = Number(process.env.EXE_SPAWN_LIVENESS_CAP_MS) || (callerIsDaemon ? 6e3 : 8e3);
6822
6915
  const livenessIterations = Math.max(1, Math.ceil(LIVENESS_CAP_MS / POLL_INTERVAL_MS));
6823
6916
  let sessionLive = false;
@@ -6831,22 +6924,12 @@ function spawnEmployee(employeeName, exeSession, projectDir, opts) {
6831
6924
  if (!sessionLive) sessionLive = transport.isAlive(sessionName);
6832
6925
  if (!sessionLive) {
6833
6926
  releaseSpawnLock(sessionName);
6834
- const runtimeLabel = useExeAgent ? "exe-agent" : useCodex ? "codex" : useOpencode ? "opencode" : "claude";
6835
6927
  let lastPane = "";
6836
6928
  try {
6837
6929
  lastPane = transport.capturePane(sessionName, 50);
6838
6930
  } catch {
6839
6931
  }
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
- }
6932
+ const spawnFailureCause = classifySpawnFailurePane(lastPane);
6850
6933
  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
6934
  process.stderr.write(`[tmux-routing] SPAWN FAILED ${sessionName} (${spawnFailureCause}): ${errMsg2}
6852
6935
  `);
@@ -6868,31 +6951,59 @@ function spawnEmployee(employeeName, exeSession, projectDir, opts) {
6868
6951
  });
6869
6952
  return { sessionName, error: errMsg2 };
6870
6953
  }
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 };
6954
+ const STARTUP_WATCH_MS = resolveStartupWatchCapMs({
6955
+ useCodex,
6956
+ callerIsDaemon,
6957
+ override: process.env.EXE_SPAWN_STARTUP_WATCH_MS,
6958
+ legacyOverride: process.env.EXE_SPAWN_STABILITY_MS
6959
+ });
6960
+ const STARTUP_WATCH_INTERVAL_MS = 250;
6961
+ const startupWatch = watchSpawnStartup(
6962
+ {
6963
+ readLauncherExit: () => readSpawnExitMarker(exitMarkerPath),
6964
+ isAlive: () => transport.isAlive(sessionName),
6965
+ capturePane: () => transport.capturePane(sessionName, 50),
6966
+ sleep: (ms) => {
6967
+ Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, ms);
6968
+ }
6969
+ },
6970
+ { capMs: STARTUP_WATCH_MS, intervalMs: STARTUP_WATCH_INTERVAL_MS }
6971
+ );
6972
+ if (startupWatch.outcome === "exited") {
6973
+ try {
6974
+ execFileSync3("tmux", ["kill-session", "-t", sessionName], { timeout: 3e3 });
6975
+ } catch {
6895
6976
  }
6977
+ releaseSpawnLock(sessionName);
6978
+ const { exitCode } = startupWatch;
6979
+ const refused = exitCode === 78;
6980
+ const errorCode = refused ? "launch_refused" : "startup_exit";
6981
+ const paneCause = classifySpawnFailurePane(startupWatch.pane);
6982
+ 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)"}`;
6983
+ process.stderr.write(`[tmux-routing] SPAWN FAILED ${sessionName} (${errorCode}): ${errMsg2}
6984
+ `);
6985
+ recordOrchestrationEventBestEffort({
6986
+ eventType: "tmux.spawn.completed",
6987
+ source: "tmux-routing.spawnEmployee",
6988
+ severity: "warn",
6989
+ agentId: employeeName,
6990
+ sessionScope: exeSession,
6991
+ instanceId: opts?.instance != null ? String(opts.instance) : null,
6992
+ tmuxSession: sessionName,
6993
+ runtime: runtimeLabel,
6994
+ durationMs: Date.now() - spawnStartedAt,
6995
+ result: "failed",
6996
+ errorCode,
6997
+ payload: {
6998
+ detail: "spawn_exited_during_startup",
6999
+ exitCode,
7000
+ spawnFailureCause: paneCause,
7001
+ watchCapMs: STARTUP_WATCH_MS,
7002
+ polls: startupWatch.polls,
7003
+ spawnCommand
7004
+ }
7005
+ });
7006
+ return { sessionName, error: errMsg2 };
6896
7007
  }
6897
7008
  if (useCodex) {
6898
7009
  let pane = "";
@@ -6932,28 +7043,14 @@ function spawnEmployee(employeeName, exeSession, projectDir, opts) {
6932
7043
  for (let i = 0; i < pollIterations; i++) {
6933
7044
  Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, POLL_INTERVAL_MS);
6934
7045
  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
- }
7046
+ if (paneShowsRuntimeBanner(transport.capturePane(sessionName), runtimeLabel)) {
7047
+ booted = true;
7048
+ break;
6951
7049
  }
6952
7050
  } catch {
6953
7051
  }
6954
7052
  }
6955
7053
  if (!booted && !callerIsDaemon) {
6956
- const runtimeLabel = useExeAgent ? "exe-agent" : useCodex ? "codex" : "claude";
6957
7054
  process.stderr.write(
6958
7055
  `[tmux-routing] ${runtimeLabel} boot banner poll capped at ${POLL_CAP_MS / 1e3}s for ${sessionName} (session is live) \u2014 sending task nudge anyway
6959
7056
  `
@@ -7272,6 +7369,7 @@ export {
7272
7369
  getReviewChecklist,
7273
7370
  createReviewForCompletedTask,
7274
7371
  cleanupReviewFile,
7372
+ BUSY_PATTERN,
7275
7373
  _resetExeBinDirCache,
7276
7374
  buildSpawnPath,
7277
7375
  acquireSpawnLock,
@@ -7322,5 +7420,12 @@ export {
7322
7420
  ensureEmployeeAsync,
7323
7421
  decideSpawnWorktreeDiscipline,
7324
7422
  resolveSpawnCwd,
7423
+ spawnExitMarkerPath,
7424
+ buildSpawnCommand,
7425
+ readSpawnExitMarker,
7426
+ paneShowsRuntimeBanner,
7427
+ classifySpawnFailurePane,
7428
+ resolveStartupWatchCapMs,
7429
+ watchSpawnStartup,
7325
7430
  spawnEmployee
7326
7431
  };
@@ -89,7 +89,7 @@ async function getRetrievalHealth() {
89
89
  const coveragePct = totalMemories > 0 ? Math.round(memoriesWithVectors / totalMemories * 100) : null;
90
90
  let dbRestore = { hasEvents: false, count: 0, last: null, quarantineFiles: 0 };
91
91
  try {
92
- const { getDbRestoreHealth } = await import("./db-restore-events-ZLD2HRQV.js");
92
+ const { getDbRestoreHealth } = await import("./db-restore-events-TFCZ4CPM.js");
93
93
  dbRestore = getDbRestoreHealth();
94
94
  } catch {
95
95
  }
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  isPostgresBackendEnabled
3
- } from "./chunk-YMUZWC33.js";
3
+ } from "./chunk-YYB5PMTK.js";
4
4
 
5
5
  // src/lib/db-write-worker-client.ts
6
6
  import { fork } from "child_process";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  loadEmployees
3
- } from "./chunk-EA5FVACM.js";
3
+ } from "./chunk-ESGLOI6Q.js";
4
4
 
5
5
  // src/lib/agent-symlinks.ts
6
6
  import os from "os";
@@ -22,7 +22,7 @@ import {
22
22
  import {
23
23
  getCachedMonitorIdentity,
24
24
  recomputeEnvelopeWrapKey
25
- } from "./chunk-IOEUAQWP.js";
25
+ } from "./chunk-EEZOBN6X.js";
26
26
 
27
27
  // src/lib/crypto.ts
28
28
  import crypto from "crypto";
@@ -0,0 +1,23 @@
1
+ // src/lib/unforgeable.ts
2
+ function createRegistry(opts) {
3
+ const entries = /* @__PURE__ */ new WeakMap();
4
+ const freeze = opts?.freeze ?? true;
5
+ return {
6
+ mint(value, meta) {
7
+ const registered = freeze ? Object.freeze(value) : value;
8
+ entries.set(registered, meta);
9
+ return registered;
10
+ },
11
+ metaOf(value) {
12
+ if (value === null || typeof value !== "object") return void 0;
13
+ return entries.get(value);
14
+ },
15
+ has(value) {
16
+ return value !== null && typeof value === "object" && entries.has(value);
17
+ }
18
+ };
19
+ }
20
+
21
+ export {
22
+ createRegistry
23
+ };
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  isCoordinatorRole
3
- } from "./chunk-EA5FVACM.js";
3
+ } from "./chunk-ESGLOI6Q.js";
4
4
 
5
5
  // src/lib/task-router.ts
6
6
  import { randomUUID } from "crypto";
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-WCGNCH3Q.js";
4
4
  import {
5
5
  registerAllTools
6
- } from "./chunk-GD7VXXW6.js";
6
+ } from "./chunk-IXRNZ2Y2.js";
7
7
 
8
8
  // src/mcp/mcp-surface-hash.ts
9
9
  function computeMcpSurfaceHash() {