@askexenow/exe-os 0.9.374 → 0.9.377

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 (455) hide show
  1. package/deploy/compose/.env.customer.example +16 -1
  2. package/deploy/compose/.env.example +16 -1
  3. package/deploy/compose/docker-compose.yml +80 -18
  4. package/deploy/compose/gateway-watchdog.sh +17 -0
  5. package/deploy/compose/generate-env.ts +41 -1
  6. package/deploy/compose/sso-edge/default.conf.template +92 -64
  7. package/deploy/compose/sso-edge/error-pages/404.html +129 -0
  8. package/deploy/compose/sso-edge/error-pages/500.html +129 -0
  9. package/deploy/compose/sso-edge/error-pages/503.html +118 -0
  10. package/deploy/compose/sso-edge/sso-redirect.conf +115 -92
  11. package/dist/.dist-verified.json +3 -3
  12. package/dist/{active-agent-ONPPEWQV.js → active-agent-BOBBUJ74.js} +6 -6
  13. package/dist/{active-agent-UJKMG7LJ.js → active-agent-GFGEGK2U.js} +6 -6
  14. package/dist/{agent-defs-generator-ZWI6DXOE.js → agent-defs-generator-OX6UFPRX.js} +5 -5
  15. package/dist/{agent-loop-OYHJKNYH.js → agent-loop-7ZRH56EX.js} +1 -1
  16. package/dist/{agentic-ontology-WHFJ3QFS.js → agentic-ontology-DT3VOXBT.js} +1 -1
  17. package/dist/{backfill-metadata-3OUSQD5V.js → backfill-metadata-VRP6PTPP.js} +9 -9
  18. package/dist/{backup-verify-ZKTUYLTA.js → backup-verify-LWHKGOOV.js} +1 -1
  19. package/dist/behavior-injection-GMZKZ3BT.js +83 -0
  20. package/dist/behavior-promotion-QPC4AQ24.js +62 -0
  21. package/dist/{behaviors-ZJ45TFBJ.js → behaviors-GPI4BLTC.js} +16 -14
  22. package/dist/bin/agentic-ontology-backfill.js +10 -10
  23. package/dist/bin/agentic-reflection-backfill.js +11 -11
  24. package/dist/bin/agentic-semantic-label.js +10 -10
  25. package/dist/bin/backfill-conversations.js +14 -12
  26. package/dist/bin/backfill-responses.js +14 -12
  27. package/dist/bin/backfill-vectors.js +16 -14
  28. package/dist/bin/bulk-sync-postgres.js +21 -19
  29. package/dist/bin/cc-doctor.js +19 -11
  30. package/dist/bin/cleanup-stale-review-tasks.js +27 -26
  31. package/dist/bin/cli.js +83 -109
  32. package/dist/bin/daemon-restart-handoff.js +2 -1
  33. package/dist/bin/deferred-daemon-restart.js +118 -110
  34. package/dist/bin/exe-actions.js +176 -0
  35. package/dist/bin/exe-agent-config.js +5 -5
  36. package/dist/bin/exe-agent.js +23 -23
  37. package/dist/bin/exe-assign.js +16 -14
  38. package/dist/bin/exe-boot.js +91 -71
  39. package/dist/bin/exe-call.js +8 -8
  40. package/dist/bin/exe-cicd.js +1210 -0
  41. package/dist/bin/exe-cloud.js +70 -37
  42. package/dist/bin/exe-config-dump.js +5 -5
  43. package/dist/bin/exe-dispatch.js +28 -27
  44. package/dist/bin/exe-doctor.js +12 -11
  45. package/dist/bin/exe-export-behaviors.js +20 -18
  46. package/dist/bin/exe-forget.js +11 -11
  47. package/dist/bin/exe-gateway.js +10 -10
  48. package/dist/bin/exe-healthcheck.js +22 -10
  49. package/dist/bin/exe-heartbeat.js +33 -32
  50. package/dist/bin/exe-kill.js +32 -31
  51. package/dist/bin/exe-launch-agent.js +76 -54
  52. package/dist/bin/exe-mcp.js +10 -6
  53. package/dist/bin/exe-memory-reads.js +9 -9
  54. package/dist/bin/exe-model-supervisor.js +138 -0
  55. package/dist/bin/exe-new-employee.js +14 -14
  56. package/dist/bin/exe-os-mcp-proxy.js +10 -6
  57. package/dist/bin/exe-pending-messages.js +28 -27
  58. package/dist/bin/exe-pending-notifications.js +27 -26
  59. package/dist/bin/exe-pending-reviews.js +28 -27
  60. package/dist/bin/exe-rename.js +9 -9
  61. package/dist/bin/exe-repo-truth.js +1 -1
  62. package/dist/bin/exe-review.js +31 -30
  63. package/dist/bin/exe-search.js +10 -10
  64. package/dist/bin/exe-session-cleanup.js +32 -31
  65. package/dist/bin/exe-settings.js +21 -19
  66. package/dist/bin/exe-start-codex.js +31 -25
  67. package/dist/bin/exe-start-opencode.js +24 -22
  68. package/dist/bin/exe-start.sh +11 -2
  69. package/dist/bin/exe-status.js +29 -28
  70. package/dist/bin/exe-support.js +3 -3
  71. package/dist/bin/exe-team.js +7 -7
  72. package/dist/bin/exe-timers.js +2 -1
  73. package/dist/bin/exe-watchdog.js +170 -16
  74. package/dist/bin/generate-hook-manifest.js +8 -41
  75. package/dist/bin/git-sweep.js +28 -27
  76. package/dist/bin/graph-backfill.js +11 -11
  77. package/dist/bin/graph-export.js +10 -10
  78. package/dist/bin/hooks-cli.js +289 -0
  79. package/dist/bin/import-history.js +14 -14
  80. package/dist/bin/install.js +130 -116
  81. package/dist/bin/intercom-check.js +5 -5
  82. package/dist/bin/mcp-sessions.js +2 -2
  83. package/dist/bin/orchestration-metrics.js +7 -7
  84. package/dist/bin/postgres-agentic-reflection-backfill.js +4 -4
  85. package/dist/bin/postgres-agentic-semantic-backfill.js +4 -4
  86. package/dist/bin/pre-publish.js +1 -1
  87. package/dist/bin/reconcile-backlog.js +2 -2
  88. package/dist/bin/registry-proxy.js +2 -2
  89. package/dist/bin/scan-tasks.js +52 -38
  90. package/dist/bin/setup.js +1 -1
  91. package/dist/bin/shard-migrate.js +9 -9
  92. package/dist/bin/stack-update.js +10 -5
  93. package/dist/bin/verify-stack.js +3 -1
  94. package/dist/bin/vps-health-gate.js +1 -1
  95. package/dist/{boot-generation-JKVZ4ZAT.js → boot-generation-BN6GKASY.js} +6 -6
  96. package/dist/{boot-review-sections-2M6BTG73.js → boot-review-sections-OQ5JGSOD.js} +26 -25
  97. package/dist/{branch-hygiene-U5GFRSTP.js → branch-hygiene-QLD77IMJ.js} +1 -1
  98. package/dist/build-manifest.json +1186 -1106
  99. package/dist/{capability-cards-5IMJT6J7.js → capability-cards-EDZ62HKG.js} +5 -5
  100. package/dist/{capacity-monitor-SAXCQK7O.js → capacity-monitor-6GMTVILS.js} +28 -27
  101. package/dist/{catchup-brief-U2TXBLHD.js → catchup-brief-SGGBMDUP.js} +32 -31
  102. package/dist/{cc-binary-detect-6TNIY5JX.js → cc-binary-detect-ZR6WNOUU.js} +1 -3
  103. package/dist/{chunk-NKETJCB5.js → chunk-2ODXCCMR.js} +18 -3
  104. package/dist/{hook-integrity-KGAV6ZC2.js → chunk-3L72UBUH.js} +28 -15
  105. package/dist/chunk-3OX5S7KZ.js +273 -0
  106. package/dist/{chunk-W75GTHR3.js → chunk-3SRZNJKD.js} +1 -1
  107. package/dist/{chunk-I4DNJFDR.js → chunk-42IFYZUN.js} +4 -4
  108. package/dist/{chunk-JHI5WMK5.js → chunk-473JUDCT.js} +5 -5
  109. package/dist/{chunk-ANLFH23R.js → chunk-4F5CNI65.js} +1 -1
  110. package/dist/{chunk-AWWKRZMB.js → chunk-4KVSCQND.js} +87 -14
  111. package/dist/{chunk-ZCERWHY2.js → chunk-4M6RXJEY.js} +33 -23
  112. package/dist/{chunk-YTSXPJUQ.js → chunk-4YJEEOYT.js} +3 -3
  113. package/dist/{chunk-6RKKVPYF.js → chunk-4YUGB637.js} +1 -1
  114. package/dist/{chunk-XXOPG4BW.js → chunk-4ZSOKEDY.js} +3 -3
  115. package/dist/{chunk-55BEFF4V.js → chunk-5DF4Y6EC.js} +1 -1
  116. package/dist/{chunk-4QCFFW2H.js → chunk-5QCIWWFA.js} +46 -0
  117. package/dist/{chunk-3UUX5OY4.js → chunk-5QKLWJ4Z.js} +1 -1
  118. package/dist/{chunk-YSLGFPWX.js → chunk-5UBWBXLF.js} +3 -3
  119. package/dist/chunk-5WA4DG2A.js +117 -0
  120. package/dist/{chunk-4EN3IZ3Q.js → chunk-64ODONK2.js} +67 -1
  121. package/dist/{chunk-TAMDAOCU.js → chunk-66CGXQUA.js} +239 -39
  122. package/dist/{chunk-QHJR7IMX.js → chunk-6F3FQCAQ.js} +3 -3
  123. package/dist/{chunk-WMEYJT4R.js → chunk-6FG34V6D.js} +15 -14
  124. package/dist/{chunk-NMH5ZQPU.js → chunk-6KQ6WMTI.js} +1 -1
  125. package/dist/{chunk-IRVOXUSK.js → chunk-6WKBTZVL.js} +10 -4
  126. package/dist/{chunk-NOKJCF27.js → chunk-7INEFMVU.js} +9 -3
  127. package/dist/{chunk-GSJLB6JI.js → chunk-7THUQU44.js} +34 -8
  128. package/dist/{chunk-HDLAB7W3.js → chunk-7UH2JWBF.js} +1 -1
  129. package/dist/{chunk-KTCXJWJG.js → chunk-7UNMSF5O.js} +1 -1
  130. package/dist/{chunk-JTVIANUB.js → chunk-AEUGIJDO.js} +3 -1
  131. package/dist/{chunk-DSJI76XL.js → chunk-AHNVFBVB.js} +113 -16
  132. package/dist/{chunk-IBS2FAI4.js → chunk-AUKRBHHZ.js} +4 -1
  133. package/dist/{chunk-AKLJ4JH3.js → chunk-BBK2TSK3.js} +1 -1
  134. package/dist/{chunk-ZL4AGWAH.js → chunk-BNWWVYRN.js} +6 -5
  135. package/dist/{chunk-PY3FOMRN.js → chunk-BQEZPRUC.js} +4 -4
  136. package/dist/{chunk-DIXXEE3S.js → chunk-BQXYXJYC.js} +721 -309
  137. package/dist/{chunk-ORM7ZFKC.js → chunk-BZ546I4Q.js} +32 -0
  138. package/dist/{chunk-3KDCORDO.js → chunk-C2UN464N.js} +1 -1
  139. package/dist/{chunk-75H4R62K.js → chunk-CBPNZFSU.js} +0 -2
  140. package/dist/{chunk-YLXTKI6M.js → chunk-CHO5SNWR.js} +1 -1
  141. package/dist/{chunk-MXPNVSXI.js → chunk-CIEVY5TD.js} +11 -11
  142. package/dist/{chunk-UBK7HK3J.js → chunk-CKLJT2DH.js} +2 -2
  143. package/dist/{chunk-MOGA4Q7F.js → chunk-CKOJP7JI.js} +1 -1
  144. package/dist/{chunk-V3W3SATA.js → chunk-CL4J4757.js} +1 -1
  145. package/dist/{chunk-XNNECNDL.js → chunk-CQFWTWC6.js} +13 -13
  146. package/dist/{chunk-PDVXWXTL.js → chunk-CROVXJ4S.js} +3 -3
  147. package/dist/{chunk-WJG344NC.js → chunk-CWSLTSL6.js} +8 -8
  148. package/dist/{chunk-VMTZ4RUW.js → chunk-DDMGQ5Q3.js} +60 -26
  149. package/dist/{chunk-YKC7QDZH.js → chunk-DN24VTS5.js} +31 -6
  150. package/dist/{chunk-IN6CAM4F.js → chunk-EHAN752X.js} +7 -7
  151. package/dist/{chunk-EXTZSNWL.js → chunk-EPHSISMT.js} +2 -2
  152. package/dist/{chunk-6EZQUNE6.js → chunk-FCMQVEVL.js} +36 -3
  153. package/dist/{chunk-3L2QU5ZF.js → chunk-FS7XF7SE.js} +1 -1
  154. package/dist/{chunk-LGS2V2XD.js → chunk-FUKVP54K.js} +66 -19
  155. package/dist/{chunk-44TLJZJ5.js → chunk-FX2QRSRT.js} +1 -1
  156. package/dist/{chunk-PWRC5XZO.js → chunk-FXZ6VGFW.js} +16 -8
  157. package/dist/{chunk-NT7W4RXD.js → chunk-GKDAQL45.js} +1 -1
  158. package/dist/{chunk-EKE37MO4.js → chunk-GOT5ZHPX.js} +3 -3
  159. package/dist/{chunk-SLLLOOEI.js → chunk-GPJIBLP4.js} +1 -0
  160. package/dist/{chunk-EKYYMIVT.js → chunk-GPUOUUHA.js} +10 -1
  161. package/dist/{chunk-PB5S7YOF.js → chunk-GXNBPTPJ.js} +1 -1
  162. package/dist/{chunk-4SJ4LK4V.js → chunk-HE34XVD5.js} +5 -5
  163. package/dist/{chunk-6VHOQ3IM.js → chunk-HHAKXIKX.js} +12 -9
  164. package/dist/{chunk-TFKCERAK.js → chunk-HHT527PV.js} +38 -41
  165. package/dist/{chunk-ZSODLMFV.js → chunk-HIVOLPLD.js} +1 -40
  166. package/dist/{chunk-UCFC2AEI.js → chunk-I3LDTSWU.js} +1 -1
  167. package/dist/{chunk-Q3AXXKDF.js → chunk-IKXH4BFC.js} +5 -5
  168. package/dist/chunk-IMYGYIAI.js +23 -0
  169. package/dist/{chunk-GS7LIT34.js → chunk-IPHLUZ37.js} +1 -1
  170. package/dist/{chunk-M4IRPXSZ.js → chunk-IZA7XW2Q.js} +3 -3
  171. package/dist/{chunk-SEQIPGLU.js → chunk-IZLML47J.js} +1 -1
  172. package/dist/{chunk-4HKTO2SV.js → chunk-JRMHGO5B.js} +1 -1
  173. package/dist/{chunk-U73AC5AN.js → chunk-JSTTPYL3.js} +16 -16
  174. package/dist/{chunk-6SCGLHJ7.js → chunk-JVWLHBAV.js} +4 -4
  175. package/dist/{chunk-OVEQE6YS.js → chunk-K7UNIEB4.js} +254 -48
  176. package/dist/{chunk-HNWS7YHN.js → chunk-KBR5LIWD.js} +1 -1
  177. package/dist/{chunk-AKLQSC6W.js → chunk-KI7O64XV.js} +328 -98
  178. package/dist/{chunk-XXFKSJYA.js → chunk-KK3MIY5C.js} +5 -5
  179. package/dist/{chunk-U6SUKSZR.js → chunk-KO3OHI6V.js} +3 -3
  180. package/dist/{chunk-NJFJWQNN.js → chunk-L5CGXEZC.js} +27 -22
  181. package/dist/{chunk-NBXDXKLC.js → chunk-LK3XQDBP.js} +1 -1
  182. package/dist/{chunk-T3QUKNLI.js → chunk-LM443ORV.js} +1 -1
  183. package/dist/{chunk-BBSIEYF5.js → chunk-LNAFLXL7.js} +12 -4
  184. package/dist/{chunk-32YV32VA.js → chunk-LTUA5EYI.js} +122 -11
  185. package/dist/{chunk-23MVDXLY.js → chunk-MAXD5JQL.js} +11 -10
  186. package/dist/{chunk-GNUAL43X.js → chunk-MFASHRJ6.js} +5 -5
  187. package/dist/chunk-MFYMDGE7.js +37 -0
  188. package/dist/{chunk-VKJGHAZT.js → chunk-MGVILAYU.js} +57 -13
  189. package/dist/{chunk-DB55JZHU.js → chunk-MSLWRWTI.js} +1 -1
  190. package/dist/{chunk-C2L622QJ.js → chunk-NB5IRTC4.js} +52 -44
  191. package/dist/{chunk-2ZOEC4KC.js → chunk-ND75TGPR.js} +2 -2
  192. package/dist/{chunk-VRTCVZND.js → chunk-NE34MWVL.js} +142 -16
  193. package/dist/{chunk-S2WBS6BG.js → chunk-NMOFLWDY.js} +1 -1
  194. package/dist/{chunk-CRCB5S7I.js → chunk-NPXKGBVZ.js} +140 -23
  195. package/dist/{chunk-JSMDRKPJ.js → chunk-NRBGUIPE.js} +1 -1
  196. package/dist/{chunk-4LWBC7CM.js → chunk-NY6SBR4O.js} +1 -1
  197. package/dist/{chunk-UCUOGVDX.js → chunk-O3K2C22L.js} +13 -1
  198. package/dist/{chunk-R522MWAR.js → chunk-OATET4BV.js} +2 -2
  199. package/dist/chunk-OOZU5H3T.js +86 -0
  200. package/dist/{chunk-XFTEX77S.js → chunk-OQ4FNDRG.js} +28 -6
  201. package/dist/{chunk-VYQ7B7DI.js → chunk-OWVX52XF.js} +4 -4
  202. package/dist/{chunk-AETLDRZB.js → chunk-PEAAX6UA.js} +1 -1
  203. package/dist/{chunk-UM3N6VND.js → chunk-PFAVHC5N.js} +5 -5
  204. package/dist/chunk-PMVVUIHH.js +85 -0
  205. package/dist/chunk-PPMGQFLJ.js +2317 -0
  206. package/dist/{chunk-7TSBV3SD.js → chunk-PTY2N23C.js} +310 -2
  207. package/dist/{chunk-UKLN57Q5.js → chunk-PZ5SKYK6.js} +4 -4
  208. package/dist/{chunk-636LKCKE.js → chunk-Q6ZLQMP2.js} +1 -1
  209. package/dist/{chunk-N7VEP5B3.js → chunk-QFR5EKZG.js} +29 -7
  210. package/dist/{chunk-YMP2QSOP.js → chunk-QN56VQ6Z.js} +1 -1
  211. package/dist/{chunk-6YVUR3OU.js → chunk-QR3BUMOS.js} +2 -2
  212. package/dist/{chunk-XZ65ST2I.js → chunk-QV5CQLQH.js} +2 -2
  213. package/dist/{chunk-DJOIMFKV.js → chunk-REZIGNA6.js} +2 -2
  214. package/dist/{chunk-UQGSBM3U.js → chunk-RFPMXR6B.js} +11 -0
  215. package/dist/{chunk-DN4YVV4Z.js → chunk-RSABKW6B.js} +1 -1
  216. package/dist/{chunk-LP4GB656.js → chunk-RZNP35SI.js} +2 -2
  217. package/dist/{chunk-NUTZJZKW.js → chunk-SKTAZGFI.js} +10 -42
  218. package/dist/{chunk-TQAZTRQ3.js → chunk-SVXUT2DN.js} +4 -4
  219. package/dist/{chunk-DJ7YXOTU.js → chunk-T7EF5CQO.js} +3 -3
  220. package/dist/{chunk-QAEWWYHL.js → chunk-TDF2XKLK.js} +5 -1
  221. package/dist/{chunk-ZGYNKA3O.js → chunk-TT5BBVLX.js} +29 -31
  222. package/dist/{chunk-5H47VHB7.js → chunk-UWX6MMCX.js} +1 -1
  223. package/dist/{chunk-XL5MFGMR.js → chunk-V4YNN7PA.js} +10 -3
  224. package/dist/{chunk-SL6KQYDU.js → chunk-V5DDXXMP.js} +7 -7
  225. package/dist/{chunk-DZKPOSFD.js → chunk-VH6SPPNA.js} +1 -1
  226. package/dist/{chunk-LDNYSMPZ.js → chunk-VJUUI2VT.js} +1 -1
  227. package/dist/{chunk-CBCGDEJA.js → chunk-VN5WOOAQ.js} +42 -6
  228. package/dist/{chunk-EXDW3E2R.js → chunk-VPHJ2LUI.js} +165 -15
  229. package/dist/{chunk-GOMQ7PVQ.js → chunk-WJC6AAJN.js} +1 -1
  230. package/dist/{chunk-GJI77VDO.js → chunk-WVBVUVZB.js} +6 -5
  231. package/dist/{chunk-A6PDF4BO.js → chunk-XTQ7R2PA.js} +2 -2
  232. package/dist/{chunk-L6RXG36J.js → chunk-Y2HD2YB7.js} +1 -1
  233. package/dist/{chunk-KTU3EAWK.js → chunk-YAACLBZ7.js} +5 -5
  234. package/dist/{chunk-7GE2EQ23.js → chunk-YGVAKKGJ.js} +11 -6
  235. package/dist/chunk-YLHACCCB.js +166 -0
  236. package/dist/{chunk-PLZSZOZN.js → chunk-YP6UGVEY.js} +3 -3
  237. package/dist/{chunk-ULIBLJ6W.js → chunk-YYC553FO.js} +5 -5
  238. package/dist/{chunk-T35RCQFE.js → chunk-YZPEQW7H.js} +9 -8
  239. package/dist/{chunk-KI5PFRG6.js → chunk-ZKGWHT56.js} +60 -2
  240. package/dist/{chunk-NUK7EEN5.js → chunk-ZKJ5S23O.js} +33 -13
  241. package/dist/chunk-ZLPS3GR7.js +146 -0
  242. package/dist/{chunk-XH7YL7JM.js → chunk-ZMX22HSS.js} +50 -6
  243. package/dist/{chunk-JY5GAZYC.js → chunk-ZQEJ4IX2.js} +4 -0
  244. package/dist/{chunk-R4CBHKZ2.js → chunk-ZS5JO6QV.js} +7 -6
  245. package/dist/{cleanup-graph-garbage-DPJGO52H.js → cleanup-graph-garbage-LAPIZGFX.js} +12 -12
  246. package/dist/{cloud-sync-command-JPNTT4OQ.js → cloud-sync-command-QAZ2NWRA.js} +11 -2
  247. package/dist/{cloud-sync-db-init-V2LWIUQU.js → cloud-sync-db-init-HAGVF32Y.js} +1 -1
  248. package/dist/{cloud-sync-shutdown-BNALPWGX.js → cloud-sync-shutdown-DAEPCFVK.js} +5 -5
  249. package/dist/{co-activation-CMNSWS6B.js → co-activation-523TKQPZ.js} +5 -5
  250. package/dist/{co-occurrence-WRI2NAN6.js → co-occurrence-PQUCTENN.js} +36 -17
  251. package/dist/{code-context-index-NOJSHLPN.js → code-context-index-LIDOFKOR.js} +6 -4
  252. package/dist/{code-context-watcher-VZNZU3BO.js → code-context-watcher-4F7K2N3U.js} +6 -4
  253. package/dist/{content-extractor-NXYNEF5K.js → content-extractor-DJM5EUDA.js} +2 -2
  254. package/dist/{conversation-entity-extractor-74252CAO.js → conversation-entity-extractor-THGKQ5RD.js} +5 -5
  255. package/dist/{crdt-sync-B3JN6AIV.js → crdt-sync-32B55NOJ.js} +1 -1
  256. package/dist/{crm-webhook-GYWQRFET.js → crm-webhook-FHRISFYQ.js} +2 -2
  257. package/dist/{cto-delegation-gate-LQHVLEMW.js → cto-delegation-gate-O6XPGECP.js} +27 -26
  258. package/dist/{daemon-auth-QZHEO7IQ.js → daemon-auth-PNKHERLV.js} +6 -1
  259. package/dist/daemon-drift-N2GKUBAO.js +15 -0
  260. package/dist/{daemon-orchestration-5HIQALZH.js → daemon-orchestration-BWLSJG2X.js} +33 -30
  261. package/dist/{daemon-ready-P2BR2XP5.js → daemon-ready-BN6EZLTQ.js} +1 -1
  262. package/dist/{daemon-ready-signal-CKXPUMJ2.js → daemon-ready-signal-PNDMVKPJ.js} +3 -1
  263. package/dist/{daemon-restart-circuit-breaker-SMTWFX27.js → daemon-restart-circuit-breaker-CD4VMCU7.js} +1 -1
  264. package/dist/daemon-restart-report-FIO5HZTJ.js +15 -0
  265. package/dist/{daemon-timer-report-TNJH5SFY.js → daemon-timer-report-6UK5PSDP.js} +2 -1
  266. package/dist/{db-integrity-events-2DTFO37N.js → db-integrity-events-GYGANKZV.js} +1 -1
  267. package/dist/{destructive-data-guard-BVFWPPIS.js → destructive-data-guard-HHWUBIGS.js} +1 -1
  268. package/dist/{doc-graph-extractor-PQHDHQPQ.js → doc-graph-extractor-HOKOV7BE.js} +10 -10
  269. package/dist/{documents-C4SSPJMC.js → documents-HWEJMONR.js} +16 -14
  270. package/dist/{dreaming-XAO3FCBV.js → dreaming-FMNDODG2.js} +31 -30
  271. package/dist/{employee-boot-brief-W4OHUMRQ.js → employee-boot-brief-DBFROOQJ.js} +35 -34
  272. package/dist/{entity-boost-3UWGXG5O.js → entity-boost-5V4W6NFA.js} +1 -1
  273. package/dist/{exe-drift-AG2KMKD5.js → exe-drift-V55UAYRT.js} +6 -6
  274. package/dist/{exe-export-IC5BT335.js → exe-export-LHN42ZUS.js} +18 -16
  275. package/dist/{exe-import-A35ZLDPG.js → exe-import-M536BEZC.js} +18 -16
  276. package/dist/{exe-key-TCMJNYLA.js → exe-key-37XIR22X.js} +111 -107
  277. package/dist/{exe-org-JXCR3JYZ.js → exe-org-7TDIRNTE.js} +14 -14
  278. package/dist/{exe-snapshot-SV6SRIG6.js → exe-snapshot-EOUBCIQK.js} +34 -33
  279. package/dist/{fast-db-init-L2RGKJWH.js → fast-db-init-GWUZ746B.js} +1 -1
  280. package/dist/{founder-context-D4HFIESJ.js → founder-context-6LQKET4A.js} +2 -2
  281. package/dist/{fts-integrity-4YB34KWX.js → fts-integrity-PLAL6NMG.js} +1 -1
  282. package/dist/gateway/index.js +17 -17
  283. package/dist/{git-main-guard-VTW4N3CM.js → git-main-guard-BGICS25C.js} +1 -1
  284. package/dist/{git-staleness-TN7CYGFG.js → git-staleness-QNNXJK3W.js} +5 -5
  285. package/dist/{global-procedures-YFDEIOG7.js → global-procedures-NMQGF54V.js} +7 -7
  286. package/dist/{gotrue-session-ODZ2ERJX.js → gotrue-session-U4H3UGHL.js} +1 -3
  287. package/dist/{graph-auto-extract-3YR3TYRW.js → graph-auto-extract-7POGAKHM.js} +10 -10
  288. package/dist/{graph-query-AP5R6ZHO.js → graph-query-ZEDO4BDF.js} +1 -1
  289. package/dist/{graph-rag-Z2KCJTPK.js → graph-rag-JA7XN7NO.js} +5 -5
  290. package/dist/hook-integrity-6NLSNTXD.js +15 -0
  291. package/dist/{hook-prefetch-K5DN3TOQ.js → hook-prefetch-4KH3D4YU.js} +28 -26
  292. package/dist/hook-tamper-log-Z4PWC7N4.js +90 -0
  293. package/dist/hooks/bug-report-worker.js +31 -30
  294. package/dist/hooks/codex-stop-task-finalizer.js +33 -32
  295. package/dist/hooks/commit-complete.js +30 -29
  296. package/dist/hooks/error-recall.js +12 -12
  297. package/dist/hooks/exe-heartbeat-hook.js +7 -7
  298. package/dist/hooks/ingest-worker.js +17 -15
  299. package/dist/hooks/ingest.js +20 -20
  300. package/dist/hooks/instructions-loaded.js +9 -9
  301. package/dist/hooks/manifest.json +20 -20
  302. package/dist/hooks/notification.js +8 -8
  303. package/dist/hooks/post-compact.js +7 -7
  304. package/dist/hooks/post-tool-combined.js +14 -14
  305. package/dist/hooks/pre-compact.js +30 -29
  306. package/dist/hooks/pre-tool-use.js +303 -489
  307. package/dist/hooks/prompt-submit.js +61 -54
  308. package/dist/hooks/session-end.js +35 -34
  309. package/dist/hooks/session-start.js +18 -18
  310. package/dist/hooks/stop.js +36 -35
  311. package/dist/hooks/subagent-stop.js +32 -31
  312. package/dist/hooks/summary-worker.js +36 -35
  313. package/dist/index.js +39 -38
  314. package/dist/{installer-LK35OX6R.js → installer-M34Q7LAS.js} +25 -10
  315. package/dist/{installer-54HTN5RE.js → installer-POV6TDQ5.js} +12 -8
  316. package/dist/{installer-LLWKZI2S.js → installer-S624ZOMB.js} +12 -8
  317. package/dist/{intercom-queue-5NOT2RKI.js → intercom-queue-MKDWAEUV.js} +26 -25
  318. package/dist/lib/cloud-sync.js +27 -19
  319. package/dist/lib/consolidation.js +12 -12
  320. package/dist/lib/database.js +5 -5
  321. package/dist/lib/db-backup.js +7 -1
  322. package/dist/lib/db-daemon-client.js +8 -6
  323. package/dist/lib/db-write-worker.js +4 -4
  324. package/dist/lib/db.js +5 -5
  325. package/dist/lib/device-registry.js +1 -1
  326. package/dist/lib/embedder.js +6 -4
  327. package/dist/lib/employee-templates.js +8 -8
  328. package/dist/lib/employees.js +5 -5
  329. package/dist/lib/exe-daemon-client.js +5 -3
  330. package/dist/lib/exe-daemon.js +333 -262
  331. package/dist/lib/hybrid-search.js +10 -10
  332. package/dist/lib/identity-templates.js +1 -1
  333. package/dist/lib/identity.js +17 -7
  334. package/dist/lib/license.js +2 -2
  335. package/dist/lib/messaging.js +27 -26
  336. package/dist/lib/post-tool-memory.js +9 -9
  337. package/dist/lib/registry-proxy.js +3 -1
  338. package/dist/lib/reminders.js +6 -6
  339. package/dist/lib/schedules.js +11 -11
  340. package/dist/lib/session-registry.js +11 -7
  341. package/dist/lib/session-wrappers.js +1 -1
  342. package/dist/lib/skill-learning.js +17 -15
  343. package/dist/lib/status-brief.js +2 -1
  344. package/dist/lib/store.js +9 -9
  345. package/dist/lib/task-router.js +6 -6
  346. package/dist/lib/tasks.js +28 -27
  347. package/dist/lib/tmux-routing.js +26 -25
  348. package/dist/lib/tmux-status.js +5 -1
  349. package/dist/lib/token-spend.js +6 -6
  350. package/dist/{license-gate-JVMB6OFD.js → license-gate-2QNMBAZU.js} +3 -3
  351. package/dist/{license-sync-5VYS2F2W.js → license-sync-FEDKH5MD.js} +2 -2
  352. package/dist/{mailbox-inbox-4MEUOL3J.js → mailbox-inbox-XE72D3AX.js} +2 -2
  353. package/dist/{mailbox-outbox-J6WIF3UY.js → mailbox-outbox-DNDDP2HW.js} +1 -1
  354. package/dist/mcp/register-tools.js +110 -106
  355. package/dist/mcp/server.js +113 -109
  356. package/dist/mcp/tools/complete-reminder.js +7 -7
  357. package/dist/mcp/tools/create-reminder.js +7 -7
  358. package/dist/mcp/tools/create-task.js +30 -29
  359. package/dist/mcp/tools/deactivate-behavior.js +18 -16
  360. package/dist/mcp/tools/list-reminders.js +7 -7
  361. package/dist/mcp/tools/list-tasks.js +30 -29
  362. package/dist/mcp/tools/send-message.js +33 -30
  363. package/dist/mcp/tools/update-task.js +29 -28
  364. package/dist/{mcp-child-registry-OTG4MWO7.js → mcp-child-registry-DVHYAHPW.js} +2 -2
  365. package/dist/{mcp-health-HNVSWKFA.js → mcp-health-B5EKRCZG.js} +2 -2
  366. package/dist/{mcp-http-config-DQWL7U2Z.js → mcp-http-config-ZJ7XHWT7.js} +10 -6
  367. package/dist/{mcp-session-identity-277GASTQ.js → mcp-session-identity-PEVM7VIP.js} +26 -25
  368. package/dist/{memory-cards-3S2ZQPR7.js → memory-cards-VN5DEWPD.js} +9 -9
  369. package/dist/{memory-graph-extractor-A6DFEFIN.js → memory-graph-extractor-TMEB6WLA.js} +11 -11
  370. package/dist/{memory-poisoning-defense-ZVP4H6DY.js → memory-poisoning-defense-DYHARQ2G.js} +5 -5
  371. package/dist/{memory-pressure-watchdog-6W5F6R7H.js → memory-pressure-watchdog-J6Q3SIBL.js} +27 -26
  372. package/dist/{memory-queue-client-ADSDP6OX.js → memory-queue-client-QC2OTMJB.js} +6 -4
  373. package/dist/{memory-reflection-BKB2YOE6.js → memory-reflection-ZYJUOSFX.js} +9 -9
  374. package/dist/{message-queue-client-XQN7QABL.js → message-queue-client-OEQCGSWC.js} +1 -25
  375. package/dist/{notification-ledger-CLGM7ODF.js → notification-ledger-TG6EFYBP.js} +29 -28
  376. package/dist/{notifications-MACUZPYP.js → notifications-LGYY22W5.js} +26 -25
  377. package/dist/{orchestration-events-N7LYMUGA.js → orchestration-events-JPHB6NPY.js} +6 -6
  378. package/dist/{orchestrator-4X24EWHV.js → orchestrator-IC4WGP6L.js} +28 -27
  379. package/dist/{org-brief-session-FZOFMO5U.js → org-brief-session-DEPHWCQR.js} +9 -9
  380. package/dist/{org-consent-policy-O5E6HXBL.js → org-consent-policy-T27AO5OJ.js} +2 -2
  381. package/dist/{org-join-POWUG25F.js → org-join-A3YXC5RB.js} +2 -2
  382. package/dist/{org-key-admin-E7EMDOZZ.js → org-key-admin-SQFHCVP2.js} +3 -3
  383. package/dist/{org-partner-runtime-FODONVTM.js → org-partner-runtime-L7L2WWGN.js} +10 -10
  384. package/dist/{org-row-visibility-VX4AVV5Q.js → org-row-visibility-M54Z6ZH3.js} +1 -1
  385. package/dist/{pipeline-router-6GGT2ZW3.js → pipeline-router-NKYAUR3Y.js} +6 -6
  386. package/dist/{plan-limits-FUN76LYY.js → plan-limits-ISRRGF23.js} +8 -8
  387. package/dist/{platform-procedures-7YSCLF4Z.js → platform-procedures-Z7ZGBJWN.js} +1 -1
  388. package/dist/{project-boot-3Q65LCIP.js → project-boot-BLYGVUJH.js} +4 -1
  389. package/dist/{project-name-LJVFMYTQ.js → project-name-WKSNNKXK.js} +6 -6
  390. package/dist/{projection-worker-4OANGP5K.js → projection-worker-RNYPE46G.js} +2 -2
  391. package/dist/{prospective-memory-KR3P4T6N.js → prospective-memory-GEO6E3UL.js} +5 -5
  392. package/dist/{push-notifications-NCZLH6DI.js → push-notifications-EY6BXZUY.js} +27 -26
  393. package/dist/{reproject-worktree-memories-PWYKPB2U.js → reproject-worktree-memories-DAA5GWMH.js} +28 -27
  394. package/dist/{reranker-6V3C2AO4.js → reranker-7OADQPMG.js} +1 -1
  395. package/dist/{retrieval-health-5D7O6VH6.js → retrieval-health-FCEDWN2P.js} +2 -2
  396. package/dist/{review-polling-QW3LJ4KN.js → review-polling-G52BR4MC.js} +27 -26
  397. package/dist/runtime/index.js +39 -38
  398. package/dist/{session-events-T45SSTMF.js → session-events-P6E2373E.js} +27 -26
  399. package/dist/{session-kill-telemetry-QSPVJGBF.js → session-kill-telemetry-OHNJMIVT.js} +27 -26
  400. package/dist/{session-mcp-config-SC5BLWZG.js → session-mcp-config-WFZAH6R5.js} +2 -1
  401. package/dist/{session-scope-KRWE54C4.js → session-scope-DKOHPQPJ.js} +26 -25
  402. package/dist/{setup-wizard-GP3TBTPF.js → setup-wizard-RNU3RFBE.js} +1 -1
  403. package/dist/{skill-refinement-C7JTMLJG.js → skill-refinement-AKJTHFXC.js} +6 -6
  404. package/dist/{stack-generate-manifest-MFMDWRUP.js → stack-generate-manifest-7WJZWSPK.js} +163 -15
  405. package/dist/{stack-promote-EKSCYY63.js → stack-promote-OP2URGFF.js} +4 -4
  406. package/dist/{stack-release-2GZAAFO4.js → stack-release-MY6U2QIO.js} +31 -8
  407. package/dist/{stack-update-J6JXSTAZ.js → stack-update-QSHSLUTZ.js} +3 -3
  408. package/dist/{steward-gate-BFCCMCSW.js → steward-gate-KMLS5ECC.js} +6 -6
  409. package/dist/{subagent-brief-injection-ED36PLYY.js → subagent-brief-injection-HCKZQZBF.js} +37 -36
  410. package/dist/{support-inbox-YW47SYJF.js → support-inbox-UBXU5RKV.js} +11 -11
  411. package/dist/{support-outbox-HFJWG52M.js → support-outbox-G2NG2U5K.js} +2 -2
  412. package/dist/{sweep-budget-KMPJ7O5Z.js → sweep-budget-YGLCNXZZ.js} +9 -3
  413. package/dist/{task-enforcement-CECTQX4U.js → task-enforcement-2GR7HU6V.js} +27 -26
  414. package/dist/{task-request-inbox-Q5T4N5K7.js → task-request-inbox-ANCVK2VG.js} +2 -2
  415. package/dist/{task-scope-ERVEUEYU.js → task-scope-QANJJXXB.js} +30 -29
  416. package/dist/{tasks-crud-ZRQNJXQ2.js → tasks-crud-45WOIMIM.js} +44 -25
  417. package/dist/{tasks-notify-MIZH4C2O.js → tasks-notify-ZJS4MA3S.js} +29 -26
  418. package/dist/{tasks-review-Z7J2P6DG.js → tasks-review-ZVPKY47Z.js} +26 -25
  419. package/dist/{telemetry-upload-LVQUQYFP.js → telemetry-upload-VY3UWAEL.js} +10 -10
  420. package/dist/{token-budget-BU4NOVZF.js → token-budget-XHX6XFEC.js} +6 -6
  421. package/dist/{tool-capability-index-7F42MOJT.js → tool-capability-index-6HLZU437.js} +1 -1
  422. package/dist/{tool-telemetry-O27EVMBR.js → tool-telemetry-GBDI4AXR.js} +1 -1
  423. package/dist/tui/App.js +36 -35
  424. package/dist/{tui-data-TPWWBIUQ.js → tui-data-IQFE3UW3.js} +30 -29
  425. package/dist/{typed-messages-RCMPEKJN.js → typed-messages-P2HLLA62.js} +1 -1
  426. package/dist/{update-support-F2F5537B.js → update-support-BDN5AK4R.js} +25 -22
  427. package/dist/{work-claims-B73X5NE7.js → work-claims-PDQNLE5K.js} +7 -7
  428. package/dist/{work-state-heartbeat-P4YX6E2R.js → work-state-heartbeat-CH6BLQKV.js} +1 -1
  429. package/dist/{worker-gate-BEEIIVWA.js → worker-gate-NUUSQMBT.js} +1 -3
  430. package/dist/{workflow-engine-5X46PFCW.js → workflow-engine-RZ7QEI3Z.js} +2 -2
  431. package/dist/{worktree-W47CIMJ6.js → worktree-Q25PZST6.js} +11 -7
  432. package/dist/worktree-ownership-guard-4LKMW6PW.js +421 -0
  433. package/dist/{worktree-sweep-BNBD4RFX.js → worktree-sweep-EV5YQ2OB.js} +8 -8
  434. package/package.json +15 -3
  435. package/release-notes.json +13 -6
  436. package/src/commands/exe.md +16 -16
  437. package/stack.release.json +9 -8
  438. package/dist/behavior-injection-M6UYZCMW.js +0 -63
  439. package/dist/chunk-BJ7AVSY6.js +0 -50
  440. package/dist/daemon-restart-report-EIVD6WDJ.js +0 -10
  441. package/dist/worktree-ownership-guard-OUWJROW2.js +0 -88
  442. /package/dist/{chunk-GQOEWNVM.js → chunk-4EG4DT4F.js} +0 -0
  443. /package/dist/{chunk-AISULNGL.js → chunk-BRAIWGMF.js} +0 -0
  444. /package/dist/{chunk-NRG7KZIP.js → chunk-HQEAZDAC.js} +0 -0
  445. /package/dist/{chunk-VZAFWPAY.js → chunk-IK4344V5.js} +0 -0
  446. /package/dist/{chunk-GM7TLYOK.js → chunk-K3VDF6II.js} +0 -0
  447. /package/dist/{chunk-2AJGV5UL.js → chunk-KM7DAG5J.js} +0 -0
  448. /package/dist/{chunk-YO4BO2CL.js → chunk-QIEYJ4KZ.js} +0 -0
  449. /package/dist/{chunk-WSQASFLP.js → chunk-VCTK5HRA.js} +0 -0
  450. /package/dist/{chunk-KQ6RJWRW.js → chunk-VPT6VMBG.js} +0 -0
  451. /package/dist/{chunk-6WIFPD2P.js → chunk-YZ4AEMR7.js} +0 -0
  452. /package/dist/{core-memory-7I7RE2SJ.js → core-memory-UIZKCY4L.js} +0 -0
  453. /package/dist/{memory-isolation-2TUZ7Z4K.js → memory-isolation-3GJ6WLYX.js} +0 -0
  454. /package/dist/{oauth-server-AYM37SQ4.js → oauth-server-ZRHXIRXQ.js} +0 -0
  455. /package/dist/{wiki-acl-IBQLLBTS.js → wiki-acl-MFOYK5F4.js} +0 -0
@@ -4,12 +4,12 @@ import path from "path";
4
4
  import os from "os";
5
5
  var EXE_DIR = process.env.EXE_OS_DIR ?? process.env.EXE_MEM_DIR ?? path.join(os.homedir(), ".exe-os");
6
6
  var SESSION_PATH = path.join(EXE_DIR, "gotrue-session.json");
7
- var DEFAULT_GOTRUE_URL = "https://api.askexe.com/cloud/auth";
8
7
  var REFRESH_MARGIN_S = 60;
9
8
  var GOTRUE_TIMEOUT_MS = 1e4;
10
9
  function resolveGoTrueUrl(session) {
11
- return process.env.EXE_GOTRUE_URL ?? process.env.GOTRUE_URL ?? session?.gotrue_url ?? DEFAULT_GOTRUE_URL;
10
+ return process.env.EXE_GOTRUE_URL ?? process.env.GOTRUE_URL ?? session?.gotrue_url;
12
11
  }
12
+ var NO_GOTRUE_URL_ERROR = "No GoTrue URL configured. Re-authenticate with: exe-os login --token <jwt> --gotrue-url <url>";
13
13
  function getSession() {
14
14
  try {
15
15
  const raw = readFileSync(SESSION_PATH, "utf-8");
@@ -50,47 +50,15 @@ function decodeJwt(accessToken) {
50
50
  return null;
51
51
  }
52
52
  }
53
- async function login(email, password, gotrueUrl) {
54
- const url = gotrueUrl ?? resolveGoTrueUrl();
55
- try {
56
- const resp = await fetch(`${url.replace(/\/+$/, "")}/token?grant_type=password`, {
57
- method: "POST",
58
- headers: { "Content-Type": "application/json" },
59
- body: JSON.stringify({ email, password }),
60
- signal: AbortSignal.timeout(GOTRUE_TIMEOUT_MS)
61
- });
62
- if (!resp.ok) {
63
- const body = await resp.text().catch(() => "");
64
- let errorMsg = `HTTP ${resp.status}`;
65
- try {
66
- const parsed = JSON.parse(body);
67
- errorMsg = parsed.error_description ?? parsed.msg ?? parsed.error ?? errorMsg;
68
- } catch {
69
- }
70
- return { ok: false, error: errorMsg };
71
- }
72
- const data = await resp.json();
73
- if (!data.access_token || !data.refresh_token) {
74
- return { ok: false, error: "Response missing access_token or refresh_token" };
75
- }
76
- const session = {
77
- access_token: data.access_token,
78
- refresh_token: data.refresh_token,
79
- expires_at: Math.floor(Date.now() / 1e3) + (data.expires_in || 3600),
80
- email: data.user?.email ?? email,
81
- user_id: data.user?.id,
82
- gotrue_url: url !== DEFAULT_GOTRUE_URL ? url : void 0
83
- };
84
- saveSession(session);
85
- return { ok: true, session };
86
- } catch (err) {
87
- return { ok: false, error: err instanceof Error ? err.message : String(err) };
88
- }
89
- }
90
53
  async function refreshSession(session) {
91
54
  const current = session ?? getSession();
92
55
  if (!current?.refresh_token) return null;
93
56
  const url = resolveGoTrueUrl(current);
57
+ if (!url) {
58
+ process.stderr.write(`${NO_GOTRUE_URL_ERROR}
59
+ `);
60
+ return null;
61
+ }
94
62
  try {
95
63
  const resp = await fetch(`${url.replace(/\/+$/, "")}/token?grant_type=refresh_token`, {
96
64
  method: "POST",
@@ -116,6 +84,7 @@ async function refreshSession(session) {
116
84
  }
117
85
  }
118
86
  function storeToken(accessToken, refreshToken, gotrueUrl) {
87
+ if (!gotrueUrl) return false;
119
88
  const claims = decodeJwt(accessToken);
120
89
  if (!claims?.exp) return false;
121
90
  const session = {
@@ -124,7 +93,7 @@ function storeToken(accessToken, refreshToken, gotrueUrl) {
124
93
  expires_at: claims.exp,
125
94
  email: claims.email,
126
95
  user_id: claims.sub,
127
- gotrue_url: gotrueUrl ?? (resolveGoTrueUrl() !== DEFAULT_GOTRUE_URL ? resolveGoTrueUrl() : void 0)
96
+ gotrue_url: gotrueUrl
128
97
  };
129
98
  saveSession(session);
130
99
  return true;
@@ -152,7 +121,7 @@ function getSessionInfo() {
152
121
  expiresAt: new Date(session.expires_at * 1e3).toISOString(),
153
122
  expired,
154
123
  plan: appMeta?.plan,
155
- gotrueUrl: session.gotrue_url ?? DEFAULT_GOTRUE_URL
124
+ gotrueUrl: session.gotrue_url
156
125
  };
157
126
  }
158
127
 
@@ -162,7 +131,6 @@ export {
162
131
  clearSession,
163
132
  isExpired,
164
133
  decodeJwt,
165
- login,
166
134
  refreshSession,
167
135
  storeToken,
168
136
  getAuthHeader,
@@ -1,16 +1,16 @@
1
1
  import {
2
2
  isExeSession
3
- } from "./chunk-AKLQSC6W.js";
3
+ } from "./chunk-KI7O64XV.js";
4
4
  import {
5
5
  recordOrchestrationEventBestEffort
6
- } from "./chunk-W75GTHR3.js";
6
+ } from "./chunk-3SRZNJKD.js";
7
7
  import {
8
8
  getClient,
9
9
  isCoordinatorName
10
- } from "./chunk-TAMDAOCU.js";
10
+ } from "./chunk-66CGXQUA.js";
11
11
  import {
12
12
  isDaemonAlive
13
- } from "./chunk-V3W3SATA.js";
13
+ } from "./chunk-CL4J4757.js";
14
14
 
15
15
  // src/lib/session-kill-telemetry.ts
16
16
  import crypto from "crypto";
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  resolveClaudeBinaryPath
3
- } from "./chunk-75H4R62K.js";
3
+ } from "./chunk-CBPNZFSU.js";
4
4
  import {
5
5
  initStore
6
- } from "./chunk-MXPNVSXI.js";
6
+ } from "./chunk-CIEVY5TD.js";
7
7
  import {
8
8
  getClient,
9
9
  isInitialized
10
- } from "./chunk-TAMDAOCU.js";
10
+ } from "./chunk-66CGXQUA.js";
11
11
 
12
12
  // src/lib/schedules.ts
13
13
  import crypto from "crypto";
@@ -25,6 +25,8 @@ function buildTaskResult(opts) {
25
25
  decisions: opts.decisions ?? [],
26
26
  open_questions: opts.open_questions ?? [],
27
27
  pr_number: opts.pr_number,
28
+ pr_url: opts.pr_url,
29
+ pr_no_reason: opts.pr_no_reason,
28
30
  commits: opts.commits ?? [],
29
31
  tests: opts.tests ?? "none",
30
32
  build: opts.build ?? "skip"
@@ -68,7 +70,9 @@ function formatTypedMessage(msg) {
68
70
  if (p.commits.length > 0)
69
71
  lines.push(`Commits: ${p.commits.join(", ")}`);
70
72
  lines.push(`Tests: ${p.tests} | Build: ${p.build}`);
71
- if (p.pr_number) lines.push(`PR: #${p.pr_number}`);
73
+ if (p.pr_url) lines.push(`PR: ${p.pr_url}`);
74
+ else if (p.pr_number) lines.push(`PR: #${p.pr_number}`);
75
+ else if (p.pr_no_reason) lines.push(`PR: none (${p.pr_no_reason})`);
72
76
  if (p.open_questions.length > 0)
73
77
  lines.push(`Open questions: ${p.open_questions.join("; ")}`);
74
78
  break;
@@ -15,7 +15,7 @@ import {
15
15
  } from "./chunk-L25OAFOU.js";
16
16
  import {
17
17
  loadLicense
18
- } from "./chunk-L6RXG36J.js";
18
+ } from "./chunk-Y2HD2YB7.js";
19
19
 
20
20
  // src/lib/stack-update.ts
21
21
  import { execFileSync, spawnSync } from "child_process";
@@ -1770,6 +1770,10 @@ ${details}
1770
1770
  Fix registry authentication or publish the missing image(s), then re-run stack-update.`
1771
1771
  );
1772
1772
  }
1773
+ var defaultContainerCountSnapshot = () => {
1774
+ const snapshot = spawnSync("docker", ["ps", "--format", "json"], { encoding: "utf8", timeout: 1e4 });
1775
+ return snapshot.stdout?.split("\n").filter(Boolean).length ?? 0;
1776
+ };
1773
1777
  var defaultImageLabelReader = (image, label) => {
1774
1778
  try {
1775
1779
  return readImageLabel(image, label);
@@ -2501,6 +2505,16 @@ var CRITICAL_VOLUMES = [
2501
2505
  "clickhouse_data",
2502
2506
  "erp_sites"
2503
2507
  ];
2508
+ var defaultVolumeExists = (volumeName) => spawnSync(
2509
+ "docker",
2510
+ ["volume", "inspect", volumeName],
2511
+ {
2512
+ stdio: ["pipe", "pipe", "pipe"],
2513
+ timeout: 5e3,
2514
+ killSignal: "SIGKILL"
2515
+ // SIGTERM'd docker CLIs on a hung daemon linger as orphans
2516
+ }
2517
+ ).status === 0;
2504
2518
  function assertBindMountsExist(stackDir) {
2505
2519
  const missing = [];
2506
2520
  for (const mount of CRITICAL_BIND_MOUNTS) {
@@ -2515,16 +2529,10 @@ function assertBindMountsExist(stackDir) {
2515
2529
  console.warn("[stack-update] These files contain customer config that will be lost if not present.");
2516
2530
  }
2517
2531
  }
2518
- function assertVolumesIntact() {
2532
+ function assertVolumesIntact(volumeExists = defaultVolumeExists) {
2519
2533
  const missing = [];
2520
2534
  for (const vol of CRITICAL_VOLUMES) {
2521
- const result = spawnSync("docker", ["volume", "inspect", `exe-os_${vol}`], {
2522
- stdio: ["pipe", "pipe", "pipe"],
2523
- timeout: 5e3,
2524
- killSignal: "SIGKILL"
2525
- // SIGTERM'd docker CLIs on a hung daemon linger as orphans
2526
- });
2527
- if (result.status !== 0) {
2535
+ if (!volumeExists(`exe-os_${vol}`)) {
2528
2536
  missing.push(vol);
2529
2537
  }
2530
2538
  }
@@ -2533,20 +2541,10 @@ function assertVolumesIntact() {
2533
2541
  console.warn("[stack-update] Data may have been lost. Check if 'docker compose down -v' was used.");
2534
2542
  }
2535
2543
  }
2536
- function warnLegacyDaemonVolume() {
2537
- const legacy = spawnSync("docker", ["volume", "inspect", "exe-os_exed_data"], {
2538
- stdio: ["pipe", "pipe", "pipe"],
2539
- timeout: 5e3,
2540
- killSignal: "SIGKILL"
2541
- // SIGTERM'd docker CLIs on a hung daemon linger as orphans
2542
- });
2543
- const current = spawnSync("docker", ["volume", "inspect", "exe-os_exe_os_data"], {
2544
- stdio: ["pipe", "pipe", "pipe"],
2545
- timeout: 5e3,
2546
- killSignal: "SIGKILL"
2547
- // SIGTERM'd docker CLIs on a hung daemon linger as orphans
2548
- });
2549
- if (legacy.status === 0 && current.status === 0) {
2544
+ function warnLegacyDaemonVolume(volumeExists = defaultVolumeExists) {
2545
+ const legacy = volumeExists("exe-os_exed_data");
2546
+ const current = volumeExists("exe-os_exe_os_data");
2547
+ if (legacy && current) {
2550
2548
  console.warn("[stack-update] \u26A0 Legacy volume exe-os_exed_data exists alongside exe-os_exe_os_data.");
2551
2549
  console.warn("[stack-update] Keeping both volumes intact; after verifying exe_os_data has current daemon state, remove exed_data manually if desired.");
2552
2550
  }
@@ -2607,7 +2605,7 @@ async function runStackUpdate(options) {
2607
2605
  if (!options.dryRun) assertHostReadyForApply(report);
2608
2606
  }
2609
2607
  assertBindMountsExist(path.dirname(options.envFile));
2610
- warnLegacyDaemonVolume();
2608
+ warnLegacyDaemonVolume(options.volumeExists);
2611
2609
  if (!options.dryRun) {
2612
2610
  try {
2613
2611
  const endPhase = startPhase("preflight");
@@ -3125,8 +3123,8 @@ Push the missing image(s) to the registry, or re-run with --break-glass <reason>
3125
3123
  ...RESTART_ORDER.filter((service) => scopedComposeServices.includes(service)),
3126
3124
  ...scopedComposeServices.filter((service) => !RESTART_ORDER.includes(service))
3127
3125
  ];
3128
- const preSnapshot = spawnSync("docker", ["ps", "--format", "json"], { encoding: "utf8", timeout: 1e4 });
3129
- const preContainerCount = preSnapshot.stdout?.split("\n").filter(Boolean).length ?? 0;
3126
+ const containerCountSnapshot = options.containerCountSnapshot ?? defaultContainerCountSnapshot;
3127
+ const preContainerCount = containerCountSnapshot();
3130
3128
  console.log(`[stack-update] Pre-update snapshot: ${preContainerCount} containers`);
3131
3129
  const bundledIsolation = Object.keys(plan.release.services).length > 1;
3132
3130
  const failedManifestServices = /* @__PURE__ */ new Set();
@@ -3152,7 +3150,7 @@ Push the missing image(s) to the registry, or re-run with --break-glass <reason>
3152
3150
  if (!serviceDefined) continue;
3153
3151
  progress.logServiceStep(restartIndex, service, "Restarting");
3154
3152
  if (service === "exe-wiki") {
3155
- const guard = spawnSync(
3153
+ const guard = options.runWikiSchemaGuard ? { status: options.runWikiSchemaGuard() } : spawnSync(
3156
3154
  "docker",
3157
3155
  [...composeArgs, "run", "--rm", "--no-deps", "exe-wiki-schema-guard"],
3158
3156
  { encoding: "utf8", stdio: ["pipe", "inherit", "inherit"], timeout: 12e4 }
@@ -3222,8 +3220,7 @@ Push the missing image(s) to the registry, or re-run with --break-glass <reason>
3222
3220
  if (!restartedAnyService) {
3223
3221
  exec("docker", [...composeArgs, "up", "-d", "--remove-orphans"]);
3224
3222
  }
3225
- const postSnapshot = spawnSync("docker", ["ps", "--format", "json"], { encoding: "utf8", timeout: 1e4 });
3226
- const postContainerCount = postSnapshot.stdout?.split("\n").filter(Boolean).length ?? 0;
3223
+ const postContainerCount = containerCountSnapshot();
3227
3224
  console.log(`[stack-update] Post-update snapshot: ${postContainerCount} containers (was ${preContainerCount})`);
3228
3225
  if (postContainerCount < preContainerCount) {
3229
3226
  console.warn(`[stack-update] \u26A0 Container count dropped from ${preContainerCount} to ${postContainerCount}`);
@@ -3352,7 +3349,7 @@ Push the missing image(s) to the registry, or re-run with --break-glass <reason>
3352
3349
  }
3353
3350
  console.warn("[stack-update] Health gate check skipped (module not available)");
3354
3351
  }
3355
- assertVolumesIntact();
3352
+ assertVolumesIntact(options.volumeExists);
3356
3353
  try {
3357
3354
  if (!options.verifyStack) {
3358
3355
  throw new Error("verifyStack hook not provided");
@@ -3362,7 +3359,8 @@ Push the missing image(s) to the registry, or re-run with --break-glass <reason>
3362
3359
  for (const r of verifyReport.results) {
3363
3360
  if (r.status === "fail") {
3364
3361
  console.warn(`[verify-stack] FAIL: ${r.check}: ${r.message}`);
3365
- if (/security|auth|signup|password|ssl|tls|bind|exposed/i.test(r.check)) {
3362
+ const isTruncatedRun = r.check === "Total timeout";
3363
+ if (isTruncatedRun || /security|auth|signup|password|ssl|tls|bind|exposed/i.test(r.check)) {
3366
3364
  securityFailures.push(`${r.check}: ${r.message}`);
3367
3365
  }
3368
3366
  }
@@ -3,7 +3,7 @@ import {
3
3
  isWellFormedCommit,
4
4
  isWellFormedSupportId,
5
5
  isWellFormedVersion
6
- } from "./chunk-4QCFFW2H.js";
6
+ } from "./chunk-5QCIWWFA.js";
7
7
 
8
8
  // src/lib/support-schemas.ts
9
9
  import { z } from "zod";
@@ -5,7 +5,7 @@ import {
5
5
  } from "./chunk-4YNA3CM6.js";
6
6
  import {
7
7
  sessionScopeFilter
8
- } from "./chunk-AKLQSC6W.js";
8
+ } from "./chunk-KI7O64XV.js";
9
9
 
10
10
  // src/shared/task-completion-gate.ts
11
11
  var COMPLETION_CLAIM_STATUSES = ["done", "needs_review", "closed"];
@@ -130,7 +130,14 @@ function getRecentCommits(limit = DEFAULT_COMMIT_LIMIT) {
130
130
  }
131
131
  }
132
132
  function pushUnpushedCommits() {
133
- const run = (args) => execSync(`git ${args}`, { encoding: "utf8", timeout: 15e3, stdio: ["pipe", "pipe", "pipe"] }).trim();
133
+ const run = (args) => execSync(`git ${args}`, {
134
+ encoding: "utf8",
135
+ timeout: 15e3,
136
+ stdio: ["pipe", "pipe", "pipe"],
137
+ // GIT_TERMINAL_PROMPT=0: fail fast instead of hanging on an interactive
138
+ // credential prompt — this runs from agent sessions with no TTY.
139
+ env: { ...process.env, GIT_TERMINAL_PROMPT: "0" }
140
+ }).trim();
134
141
  let branch;
135
142
  try {
136
143
  branch = run("rev-parse --abbrev-ref HEAD");
@@ -289,7 +296,7 @@ async function sweepTasks(projectName, options = {}) {
289
296
  }
290
297
  if (!dryRun) {
291
298
  try {
292
- const { updateTaskStatus } = await import("./tasks-crud-ZRQNJXQ2.js");
299
+ const { updateTaskStatus } = await import("./tasks-crud-45WOIMIM.js");
293
300
  await updateTaskStatus({
294
301
  taskId: task.id,
295
302
  status: "needs_review",
@@ -7,23 +7,23 @@ import {
7
7
  resolveExeSession,
8
8
  sendIntercom,
9
9
  strictSessionScopeFilter
10
- } from "./chunk-AKLQSC6W.js";
11
- import {
12
- isValidSessionScope
13
- } from "./chunk-BTSWFMEH.js";
10
+ } from "./chunk-KI7O64XV.js";
14
11
  import {
15
12
  parseMessage,
16
13
  serializeMessage
17
- } from "./chunk-QAEWWYHL.js";
14
+ } from "./chunk-TDF2XKLK.js";
18
15
  import {
19
16
  recordOrchestrationEventBestEffort
20
- } from "./chunk-W75GTHR3.js";
17
+ } from "./chunk-3SRZNJKD.js";
21
18
  import {
22
19
  getSessionKey
23
20
  } from "./chunk-CVYC6DUW.js";
21
+ import {
22
+ isValidSessionScope
23
+ } from "./chunk-BTSWFMEH.js";
24
24
  import {
25
25
  getClient
26
- } from "./chunk-TAMDAOCU.js";
26
+ } from "./chunk-66CGXQUA.js";
27
27
 
28
28
  // src/lib/messaging.ts
29
29
  import crypto from "crypto";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  getClient
3
- } from "./chunk-TAMDAOCU.js";
3
+ } from "./chunk-66CGXQUA.js";
4
4
 
5
5
  // src/lib/token-budget.ts
6
6
  var WARN_THRESHOLD = 0.8;
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  clean,
3
3
  stableId
4
- } from "./chunk-WSQASFLP.js";
4
+ } from "./chunk-VCTK5HRA.js";
5
5
 
6
6
  // src/lib/reflection-checkpoints.ts
7
7
  function parsePayload(payload) {
@@ -1,18 +1,20 @@
1
1
  import {
2
2
  employeeSessionName,
3
3
  ensureEmployee,
4
+ getDispatchedBy,
5
+ liveSessionHoldingTask,
4
6
  markAsReadByTaskFile,
5
7
  notifyParentExe,
6
8
  queryTaskRows,
7
9
  resolveExeSession,
8
10
  sendIntercom
9
- } from "./chunk-AKLQSC6W.js";
11
+ } from "./chunk-KI7O64XV.js";
10
12
  import {
11
13
  getTransport
12
14
  } from "./chunk-VI4ATC6I.js";
13
15
  import {
14
16
  recordOrchestrationEventBestEffort
15
- } from "./chunk-W75GTHR3.js";
17
+ } from "./chunk-3SRZNJKD.js";
16
18
  import {
17
19
  releaseDispatchClaim,
18
20
  tryAcquireDispatchClaim
@@ -27,7 +29,7 @@ import {
27
29
  isCoordinatorName,
28
30
  isMultiInstance,
29
31
  shouldAutoInstance
30
- } from "./chunk-TAMDAOCU.js";
32
+ } from "./chunk-66CGXQUA.js";
31
33
 
32
34
  // src/lib/tasks-notify.ts
33
35
  var VERIFY_DELAY_MS = 1e4;
@@ -89,7 +91,7 @@ async function dispatchTaskToEmployee(input) {
89
91
  let crossProject = false;
90
92
  if (input.projectName) {
91
93
  try {
92
- const { assertSessionScope } = await import("./session-scope-KRWE54C4.js");
94
+ const { assertSessionScope } = await import("./session-scope-DKOHPQPJ.js");
93
95
  const check = assertSessionScope("dispatch_task", input.projectName);
94
96
  if (check.reason === "cross_session_denied") {
95
97
  crossProject = true;
@@ -107,6 +109,27 @@ async function dispatchTaskToEmployee(input) {
107
109
  } catch {
108
110
  }
109
111
  }
112
+ if (input.taskId) {
113
+ const holder = await liveSessionHoldingTask(input.taskId, input.sessionScope ?? null);
114
+ if (holder) {
115
+ process.stderr.write(
116
+ `[dispatch-audit] SPAWN SUPPRESSED -> ${input.assignedTo} | task="${input.title}" [${input.priority}] | task ${input.taskId} already in_progress on live session ${holder}; not spawning a duplicate
117
+ `
118
+ );
119
+ recordOrchestrationEventBestEffort({
120
+ eventType: "dispatch.deduped",
121
+ source: "tasks-notify.dispatchTaskToEmployee",
122
+ severity: "info",
123
+ taskId: input.taskId,
124
+ agentId: input.assignedTo,
125
+ tmuxSession: holder,
126
+ runtime: dispatchRuntime,
127
+ result: "skipped",
128
+ payload: { reason: "task_held_by_live_session", holder }
129
+ });
130
+ return { dispatched: "skipped", session: holder, deduped: true, crossProject };
131
+ }
132
+ }
110
133
  let claimedDispatch = false;
111
134
  if (input.taskId) {
112
135
  claimedDispatch = tryAcquireDispatchClaim(input.taskId, input.assignedTo);
@@ -298,13 +321,25 @@ async function dispatchTaskToEmployee(input) {
298
321
  return { dispatched: "session_missing" };
299
322
  }
300
323
  }
301
- function notifyTaskDone() {
324
+ function resolveCompletionNudgeRecipient(reviewer, dispatcher) {
325
+ const r = reviewer == null ? "" : String(reviewer).trim();
326
+ if (r) return { agent: r, via: "reviewer" };
327
+ const d = dispatcher == null ? "" : String(dispatcher).trim();
328
+ if (d) return { agent: d, via: "dispatcher" };
329
+ return { agent: null, via: "none" };
330
+ }
331
+ function notifyTaskDone(reviewer) {
302
332
  try {
303
333
  const key = getSessionKey();
304
334
  if (key && !process.env.VITEST) {
335
+ const dispatcher = getDispatchedBy(key);
336
+ const routing = resolveCompletionNudgeRecipient(reviewer, dispatcher);
337
+ if (routing.via !== "dispatcher") {
338
+ return;
339
+ }
305
340
  notifyParentExe(key);
306
341
  process.stderr.write(
307
- `[dispatch-audit] notifyTaskDone \u2192 parent coordinator (session=${key})
342
+ `[dispatch-audit] notifyTaskDone \u2192 dispatcher (session=${key})
308
343
  `
309
344
  );
310
345
  }
@@ -321,6 +356,7 @@ async function markTaskNotificationsRead(taskFile) {
321
356
  export {
322
357
  verifyDispatch,
323
358
  dispatchTaskToEmployee,
359
+ resolveCompletionNudgeRecipient,
324
360
  notifyTaskDone,
325
361
  markTaskNotificationsRead
326
362
  };