@askexenow/exe-os 0.9.374 → 0.9.376

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 +59 -63
  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 +5 -5
  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
@@ -63,7 +63,17 @@ async function runBudgetedSweep(items, processItem, options = {}) {
63
63
  `
64
64
  );
65
65
  recordTimerPauseMs(rescheduleDelayMs);
66
- await sleep(rescheduleDelayMs);
66
+ const pauseTimer = _timerPauseContext.getStore();
67
+ const pauseStartWallMs = Date.now();
68
+ if (pauseTimer) beginTimerPause(pauseTimer, pauseStartWallMs);
69
+ try {
70
+ await sleep(rescheduleDelayMs);
71
+ } finally {
72
+ if (pauseTimer) {
73
+ endTimerPause(pauseTimer);
74
+ recordTimerPauseInterval(pauseTimer, pauseStartWallMs, Date.now());
75
+ }
76
+ }
67
77
  }
68
78
  }
69
79
  return result;
@@ -86,6 +96,51 @@ function sweepPauseTotalMs(timer) {
86
96
  if (timer) return _pauseMsByTimer.get(timer) ?? 0;
87
97
  return _totalPauseMs;
88
98
  }
99
+ var MAX_TRACKED_INTERVALS_PER_TIMER = 32;
100
+ var _pauseIntervalsByTimer = /* @__PURE__ */ new Map();
101
+ var _pausedNowByTimer = /* @__PURE__ */ new Map();
102
+ var _activePauseStartsByTimer = /* @__PURE__ */ new Map();
103
+ function beginTimerPause(timer, startMs) {
104
+ _pausedNowByTimer.set(timer, (_pausedNowByTimer.get(timer) ?? 0) + 1);
105
+ const stack = _activePauseStartsByTimer.get(timer);
106
+ if (stack) stack.push(startMs);
107
+ else _activePauseStartsByTimer.set(timer, [startMs]);
108
+ }
109
+ function endTimerPause(timer) {
110
+ const n = (_pausedNowByTimer.get(timer) ?? 1) - 1;
111
+ if (n <= 0) _pausedNowByTimer.delete(timer);
112
+ else _pausedNowByTimer.set(timer, n);
113
+ const stack = _activePauseStartsByTimer.get(timer);
114
+ if (stack) {
115
+ stack.pop();
116
+ if (stack.length === 0) _activePauseStartsByTimer.delete(timer);
117
+ }
118
+ }
119
+ function isTimerPausedNow(timer) {
120
+ return (_pausedNowByTimer.get(timer) ?? 0) > 0;
121
+ }
122
+ function currentPauseStartMs(timer) {
123
+ const stack = _activePauseStartsByTimer.get(timer);
124
+ if (!stack || stack.length === 0) return null;
125
+ return stack[0] ?? null;
126
+ }
127
+ function recordTimerPauseInterval(timer, startMs, endMs) {
128
+ if (!Number.isFinite(startMs) || !Number.isFinite(endMs) || endMs < startMs) return;
129
+ let list = _pauseIntervalsByTimer.get(timer);
130
+ if (!list) {
131
+ list = [];
132
+ _pauseIntervalsByTimer.set(timer, list);
133
+ }
134
+ list.push({ startMs, endMs });
135
+ if (list.length > MAX_TRACKED_INTERVALS_PER_TIMER) {
136
+ list.splice(0, list.length - MAX_TRACKED_INTERVALS_PER_TIMER);
137
+ }
138
+ }
139
+ function timerPauseIntervalsSince(timer, sinceMs) {
140
+ const list = _pauseIntervalsByTimer.get(timer);
141
+ if (!list) return [];
142
+ return list.filter((iv) => iv.startMs >= sinceMs);
143
+ }
89
144
 
90
145
  export {
91
146
  DEFAULT_SWEEP_BUDGET_MS,
@@ -95,5 +150,8 @@ export {
95
150
  runBudgetedSweep,
96
151
  runWithTimerPauseAccounting,
97
152
  recordTimerPauseMs,
98
- sweepPauseTotalMs
153
+ sweepPauseTotalMs,
154
+ isTimerPausedNow,
155
+ currentPauseStartMs,
156
+ timerPauseIntervalsSince
99
157
  };
@@ -1,17 +1,21 @@
1
+ import {
2
+ ensureDaemonToken,
3
+ readDaemonToken
4
+ } from "./chunk-GPUOUUHA.js";
1
5
  import {
2
6
  SUPERVISED_ENV
3
7
  } from "./chunk-ZG62LIK3.js";
4
8
  import {
5
- ensureDaemonToken,
6
- readDaemonToken
7
- } from "./chunk-EKYYMIVT.js";
9
+ sanitizeDaemonKeyCustodyEnv
10
+ } from "./chunk-IMYGYIAI.js";
8
11
  import {
9
12
  computeDaemonHeapCapMb
10
13
  } from "./chunk-NLEW62VC.js";
11
14
  import {
12
15
  killIfSameProcess,
13
- processStartedAt
14
- } from "./chunk-SLLLOOEI.js";
16
+ processStartedAt,
17
+ sameProcessIdentity
18
+ } from "./chunk-GPJIBLP4.js";
15
19
  import {
16
20
  KILL_INTENT_LOOKBACK_MS,
17
21
  findRecentKillIntent,
@@ -197,11 +201,15 @@ function isDaemonTooYoung() {
197
201
  var RESTART_INTENT_WINDOW_MS = 3e4;
198
202
  var RESTART_INTENT_REASON_MAX_AGE_MS = 6e4;
199
203
  var RESTART_INTENT_MAX_AGE_MS = 5 * 6e4;
200
- function formatRestartIntentMarker(reason, nowMs = Date.now()) {
204
+ function formatRestartIntentMarker(reason, nowMs = Date.now(), target) {
201
205
  const marker = {
202
206
  reason,
203
207
  nonce: randomUUID(),
204
- createdAt: new Date(nowMs).toISOString()
208
+ createdAt: new Date(nowMs).toISOString(),
209
+ ...target ? {
210
+ targetPid: target.pid,
211
+ ...target.startedAt !== void 0 ? { targetStartedAt: target.startedAt } : {}
212
+ } : {}
205
213
  };
206
214
  return JSON.stringify(marker);
207
215
  }
@@ -227,9 +235,11 @@ function parseRestartIntentMarker(raw, nowMs = Date.now(), maxAgeMs = RESTART_IN
227
235
  const intent = isRestartIntentTimestampFresh(isNaN(last) ? null : last, nowMs);
228
236
  return { intent, reason: intent ? "legacy-timestamp-marker" : null, stale: false };
229
237
  }
230
- function writeRestartIntent(reason) {
238
+ function writeRestartIntent(reason, targetPid = readDaemonPid()) {
231
239
  try {
232
- writeFileSync(restartMarkerPath(), formatRestartIntentMarker(reason));
240
+ const startedAt = targetPid === null ? null : processStartedAt(targetPid);
241
+ const target = targetPid === null ? void 0 : { pid: targetPid, ...startedAt !== null ? { startedAt } : {} };
242
+ writeFileSync(restartMarkerPath(), formatRestartIntentMarker(reason, Date.now(), target));
233
243
  } catch {
234
244
  }
235
245
  }
@@ -243,15 +253,24 @@ function isRestartIntentTimestampFresh(markerTimestampMs, nowMs = Date.now()) {
243
253
  if (markerTimestampMs === null || !Number.isFinite(markerTimestampMs)) return false;
244
254
  return nowMs - markerTimestampMs < RESTART_INTENT_WINDOW_MS;
245
255
  }
246
- function consumeRestartIntentDetail() {
256
+ function consumeRestartIntentDetail(preserveFor) {
247
257
  try {
248
258
  if (!existsSync(restartMarkerPath())) return { intent: false, reason: null };
249
259
  const raw = readFileSync(restartMarkerPath(), "utf8");
260
+ const parsed = parseRestartIntentMarker(raw);
261
+ if (parsed.intent && preserveFor) {
262
+ try {
263
+ const marker = JSON.parse(raw);
264
+ if (marker.targetPid === preserveFor.pid && (typeof marker.targetStartedAt === "number" ? typeof preserveFor.startedAt === "number" && sameProcessIdentity(marker.targetStartedAt, preserveFor.startedAt) : typeof marker.createdAt === "string" && typeof preserveFor.startedAt === "number" && Date.parse(marker.createdAt) >= preserveFor.startedAt)) {
265
+ return { intent: false, reason: null };
266
+ }
267
+ } catch {
268
+ }
269
+ }
250
270
  try {
251
271
  unlinkSync(restartMarkerPath());
252
272
  } catch {
253
273
  }
254
- const parsed = parseRestartIntentMarker(raw);
255
274
  if (parsed.stale) {
256
275
  logRestart({
257
276
  event: "restart_intent_stale",
@@ -409,7 +428,7 @@ function requestRestart(reason, opts) {
409
428
  return { ok: false, skipped: msg };
410
429
  }
411
430
  try {
412
- writeRestartIntent(reason);
431
+ writeRestartIntent(reason, pid);
413
432
  } catch {
414
433
  }
415
434
  noteRestartAttempt();
@@ -531,7 +550,7 @@ async function requestDeployRestart(reason, opts) {
531
550
  return { ok: false, skipped: msg };
532
551
  }
533
552
  try {
534
- writeRestartIntent(deployReason);
553
+ writeRestartIntent(deployReason, pid);
535
554
  } catch {
536
555
  }
537
556
  noteRestartAttempt();
@@ -737,6 +756,7 @@ function findPackageRoot() {
737
756
  var HEAP_FLAG_RE = /^(--max-old-space-size=|--max_old_space_size=)/;
738
757
  function sanitizeInheritedDaemonEnv(env) {
739
758
  delete env.EXE_EMBEDDINGS;
759
+ sanitizeDaemonKeyCustodyEnv(env);
740
760
  delete env[SUPERVISED_ENV];
741
761
  if (env.NODE_OPTIONS) {
742
762
  const cleaned = env.NODE_OPTIONS.split(/\s+/).filter((tok) => tok && !HEAP_FLAG_RE.test(tok)).join(" ");
@@ -0,0 +1,146 @@
1
+ // src/lib/daemon-starvation.ts
2
+ function isHostCpuStarved(load1m, cpuCount, ratio) {
3
+ if (!Number.isFinite(ratio) || ratio <= 0) return false;
4
+ if (!Number.isFinite(load1m) || load1m <= 0) return false;
5
+ const cores = Number.isFinite(cpuCount) && cpuCount > 0 ? cpuCount : 1;
6
+ return load1m > cores * ratio;
7
+ }
8
+ function pruneLoadSamples(samples, keepSinceMs) {
9
+ return samples.filter((sample) => Number.isFinite(sample.ts) && sample.ts >= keepSinceMs);
10
+ }
11
+ function maxLoadOverWindow(samples, windowStartMs, currentLoad1m) {
12
+ const candidates = [currentLoad1m];
13
+ for (const sample of samples) {
14
+ if (sample.ts >= windowStartMs && Number.isFinite(sample.load1m)) {
15
+ candidates.push(sample.load1m);
16
+ }
17
+ }
18
+ const finite = candidates.filter((load) => Number.isFinite(load));
19
+ return finite.length > 0 ? Math.max(...finite) : currentLoad1m;
20
+ }
21
+ function updateLoadWindow(samples, nowMs, load1m, wallElapsedMs, keepMs) {
22
+ const blockStartMs = nowMs - wallElapsedMs - 2500;
23
+ const next = pruneLoadSamples(
24
+ [...samples, { ts: nowMs, load1m }],
25
+ Math.min(nowMs - keepMs, blockStartMs)
26
+ );
27
+ return {
28
+ samples: next,
29
+ maxLoad1mOverWindow: maxLoadOverWindow(next, blockStartMs, load1m),
30
+ blockStartMs
31
+ };
32
+ }
33
+ function decideDaemonSelfHeal(s) {
34
+ const alive = s.processAlive ?? true;
35
+ if (!alive) {
36
+ return { restart: true, reason: "process_dead", consecutiveSevereAfter: 0, selfInflictedWindowAfter: [], selfInflictedStreakAfter: 0, selfInflictedSuppressedMsAfter: 0 };
37
+ }
38
+ if (typeof s.rssBytes === "number" && Number.isFinite(s.rssBytes) && typeof s.rssCapBytes === "number" && Number.isFinite(s.rssCapBytes) && s.rssCapBytes > 0 && s.rssBytes > s.rssCapBytes) {
39
+ return { restart: true, reason: "rss_over_cap", consecutiveSevereAfter: 0, selfInflictedWindowAfter: [], selfInflictedStreakAfter: 0, selfInflictedSuppressedMsAfter: 0 };
40
+ }
41
+ const now = typeof s.nowMs === "number" && Number.isFinite(s.nowMs) ? s.nowMs : 0;
42
+ const windowMs = typeof s.selfInflictedRollingWindowMs === "number" && s.selfInflictedRollingWindowMs > 0 ? s.selfInflictedRollingWindowMs : 3e5;
43
+ const prunedWindow = (s.selfInflictedWindow ?? []).filter((e) => now - e.ts < windowMs);
44
+ const sumOf = (w) => w.reduce((a, e) => a + e.lagMs, 0);
45
+ const carry = {
46
+ selfInflictedWindowAfter: prunedWindow,
47
+ selfInflictedStreakAfter: prunedWindow.length,
48
+ selfInflictedSuppressedMsAfter: sumOf(prunedWindow)
49
+ };
50
+ const cleared = { selfInflictedWindowAfter: [], selfInflictedStreakAfter: 0, selfInflictedSuppressedMsAfter: 0 };
51
+ const loadCandidates = [s.load1m, s.maxLoad1mOverWindow].filter(
52
+ (load) => typeof load === "number" && Number.isFinite(load) && load > 0
53
+ );
54
+ const effectiveLoad1m = loadCandidates.length > 0 ? Math.max(...loadCandidates) : s.load1m;
55
+ if (isHostCpuStarved(effectiveLoad1m, s.cpuCount, s.starvationRatio)) {
56
+ return { restart: false, reason: "starved_backoff", consecutiveSevereAfter: 0, ...carry };
57
+ }
58
+ if (s.catchUpActive) {
59
+ return { restart: false, reason: "catchup_backoff", consecutiveSevereAfter: 0, ...carry };
60
+ }
61
+ const selfCpuRatio = Number.isFinite(s.selfCpuBusyRatio) ? s.selfCpuBusyRatio : 0.5;
62
+ if (s.lagMs > s.severeThresholdMs && typeof s.selfCpuBusyFraction === "number" && Number.isFinite(s.selfCpuBusyFraction) && s.selfCpuBusyFraction >= selfCpuRatio) {
63
+ const countLimit = typeof s.selfInflictedLimit === "number" && s.selfInflictedLimit > 0 ? s.selfInflictedLimit : 5;
64
+ const suppressCapMs = typeof s.selfInflictedSuppressCapMs === "number" && s.selfInflictedSuppressCapMs > 0 ? s.selfInflictedSuppressCapMs : 15e4;
65
+ const windowAfter = [...prunedWindow, { ts: now, lagMs: s.lagMs }];
66
+ const sumInWindow = sumOf(windowAfter);
67
+ if (sumInWindow > suppressCapMs || windowAfter.length >= countLimit) {
68
+ return { restart: true, reason: "single_block", consecutiveSevereAfter: 0, ...cleared };
69
+ }
70
+ return {
71
+ restart: false,
72
+ reason: "self_inflicted_backoff",
73
+ consecutiveSevereAfter: 0,
74
+ selfInflictedWindowAfter: windowAfter,
75
+ selfInflictedStreakAfter: windowAfter.length,
76
+ selfInflictedSuppressedMsAfter: sumInWindow
77
+ };
78
+ }
79
+ if (s.lagMs > s.singleBlockMs) {
80
+ return { restart: true, reason: "single_block", consecutiveSevereAfter: 0, ...cleared };
81
+ }
82
+ if (s.lagMs > s.severeThresholdMs) {
83
+ const next = s.consecutiveSevere + 1;
84
+ if (next >= s.consecutiveLimit) {
85
+ return { restart: true, reason: "consecutive_blocks", consecutiveSevereAfter: next, ...cleared };
86
+ }
87
+ return { restart: false, reason: "counting", consecutiveSevereAfter: next, ...carry };
88
+ }
89
+ return { restart: false, reason: "not_critical", consecutiveSevereAfter: 0, ...carry };
90
+ }
91
+ function decideStarvationDrainGuard(s) {
92
+ const drainWindowMs = typeof s.drainWindowMs === "number" && s.drainWindowMs > 0 ? s.drainWindowMs : 6e5;
93
+ const graceWindowMs = typeof s.graceWindowMs === "number" && s.graceWindowMs > 0 ? s.graceWindowMs : 18e5;
94
+ const minGraceMs = typeof s.minGraceMs === "number" && s.minGraceMs > 0 ? s.minGraceMs : 18e4;
95
+ if (s.lastSuppressedAgoMs === null || !Number.isFinite(s.lastSuppressedAgoMs)) {
96
+ return { deferKill: false, minSigtermGraceMs: 0, reason: "never_starved" };
97
+ }
98
+ const agoMs = Math.max(0, s.lastSuppressedAgoMs);
99
+ if (agoMs < drainWindowMs) {
100
+ return { deferKill: true, minSigtermGraceMs: minGraceMs, reason: "drain_window" };
101
+ }
102
+ if (agoMs < graceWindowMs) {
103
+ return { deferKill: false, minSigtermGraceMs: minGraceMs, reason: "grace_window" };
104
+ }
105
+ return { deferKill: false, minSigtermGraceMs: 0, reason: "no_recent_starvation" };
106
+ }
107
+ function decideOrchestrationTickSkip(s) {
108
+ if (isHostCpuStarved(s.load1m, s.cpuCount, s.starvationRatio)) {
109
+ return { skip: true, reason: "starved_skip" };
110
+ }
111
+ return { skip: false, reason: "run" };
112
+ }
113
+ function decideBootBackoff(s) {
114
+ if (!isHostCpuStarved(s.load1m, s.cpuCount, s.starvationRatio)) {
115
+ return { wait: false, delayMs: 0, reason: "not_starved" };
116
+ }
117
+ const clientsWaiting = s.clientsWaiting === true;
118
+ const baseDelayMs = clientsWaiting ? s.baseDelayMs / 2 : s.baseDelayMs;
119
+ const maxDelayMs = clientsWaiting ? s.maxDelayMs / 2 : s.maxDelayMs;
120
+ const maxAttempts = clientsWaiting ? Math.min(s.maxAttempts, 2) : s.maxAttempts;
121
+ if (s.attempt >= maxAttempts) {
122
+ return { wait: false, delayMs: 0, reason: "max_attempts_proceed" };
123
+ }
124
+ const base = Number.isFinite(baseDelayMs) && baseDelayMs > 0 ? baseDelayMs : 0;
125
+ const cap = Number.isFinite(maxDelayMs) && maxDelayMs > 0 ? maxDelayMs : base;
126
+ const exp = base * Math.pow(2, Math.max(0, s.attempt));
127
+ const delayMs = Math.min(cap, exp);
128
+ return { wait: true, delayMs, reason: "backoff" };
129
+ }
130
+ function computeBootRetryAfterSeconds(nowMs, readyEtaMs, opts = {}) {
131
+ const defaultS = opts.defaultS ?? 3;
132
+ if (readyEtaMs === null) return defaultS;
133
+ const minS = opts.minS ?? 1;
134
+ const maxS = opts.maxS ?? 60;
135
+ return Math.min(maxS, Math.max(minS, Math.ceil((readyEtaMs - nowMs) / 1e3)));
136
+ }
137
+
138
+ export {
139
+ isHostCpuStarved,
140
+ updateLoadWindow,
141
+ decideDaemonSelfHeal,
142
+ decideStarvationDrainGuard,
143
+ decideOrchestrationTickSkip,
144
+ decideBootBackoff,
145
+ computeBootRetryAfterSeconds
146
+ };
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  recordOrchestrationEventBestEffort
3
- } from "./chunk-W75GTHR3.js";
3
+ } from "./chunk-3SRZNJKD.js";
4
4
  import {
5
5
  atomicWriteJsonSync
6
6
  } from "./chunk-HSGBZSCA.js";
@@ -262,10 +262,12 @@ function cleanupDeadSessions(liveTmuxOverride) {
262
262
  for (const s of sessions) {
263
263
  const tmuxAlive = liveTmux.has(s.windowName);
264
264
  let pidAlive = false;
265
- try {
266
- process.kill(s.pid, 0);
267
- pidAlive = true;
268
- } catch {
265
+ if (s.pid != null && s.pid > 0) {
266
+ try {
267
+ process.kill(s.pid, 0);
268
+ pidAlive = true;
269
+ } catch {
270
+ }
269
271
  }
270
272
  if (tmuxAlive || pidAlive) {
271
273
  alive.push(s);
@@ -344,6 +346,46 @@ function reapOrphanedCoordinatorSessions(deps) {
344
346
  }
345
347
  return result;
346
348
  }
349
+ function reconcileCoordinatorRegistration(callerSession, deps) {
350
+ const raw = String(callerSession ?? "").trim();
351
+ if (!raw) return { reconciled: false, entry: null, reason: "no_caller_session" };
352
+ const coordName = raw.includes("-") ? raw.slice(raw.indexOf("-") + 1) : raw;
353
+ if (!coordName) return { reconciled: false, entry: null, reason: "no_coord_name" };
354
+ const live = (deps.liveTmux ?? []).filter(Boolean);
355
+ if (live.length === 0) return { reconciled: false, entry: null, reason: "no_live_tmux" };
356
+ if (!isCoordinatorRootName(coordName)) return { reconciled: false, entry: null, reason: "not_coordinator_root" };
357
+ if (!new Set(live).has(coordName)) return { reconciled: false, entry: null, reason: "coord_not_live" };
358
+ const existing = readSessionsUncached().find((s) => s.windowName === coordName) ?? null;
359
+ if (existing?.projectDir && existsSync(existing.projectDir)) {
360
+ return { reconciled: false, entry: existing, reason: "already_registered" };
361
+ }
362
+ const cwd = String(deps.paneCwdOf(coordName) ?? "").trim();
363
+ if (!cwd || !existsSync(cwd)) return { reconciled: false, entry: null, reason: "no_live_cwd" };
364
+ const panePid = deps.panePidOf?.(coordName);
365
+ const pid = panePid != null ? panePid : existing?.pid ?? null;
366
+ const coordinatorAgentId = getCoordinatorNameCached();
367
+ const entry = {
368
+ windowName: coordName,
369
+ // Registry identity is the configured roster identity; only windowName
370
+ // carries the numbered coordinator instance. Consumers match agentId to the
371
+ // authenticated roster identity when recovering an MCP session.
372
+ agentId: coordinatorAgentId,
373
+ projectDir: cwd,
374
+ parentExe: null,
375
+ pid,
376
+ registeredAt: (/* @__PURE__ */ new Date()).toISOString()
377
+ };
378
+ registerSession(entry);
379
+ recordOrchestrationEventBestEffort({
380
+ eventType: "registry.coordinator_reconciled",
381
+ source: "session-registry.reconcileCoordinatorRegistration",
382
+ severity: "warn",
383
+ agentId: coordinatorAgentId,
384
+ tmuxSession: coordName,
385
+ payload: { projectDir: cwd, drifted: Boolean(existing) }
386
+ });
387
+ return { reconciled: true, entry, reason: existing ? "drift_repaired" : "registered_missing" };
388
+ }
347
389
  function looksLikeExeOsSession(sessionName) {
348
390
  const coordName = getCoordinatorNameCached();
349
391
  const escaped = coordName.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
@@ -373,5 +415,7 @@ export {
373
415
  checkSessionRegistryConsistency,
374
416
  deregisterSession,
375
417
  cleanupDeadSessions,
376
- reapOrphanedCoordinatorSessions
418
+ reapOrphanedCoordinatorSessions,
419
+ reconcileCoordinatorRegistration,
420
+ getCoordinatorNameCached
377
421
  };
@@ -11,6 +11,9 @@ function daemonReadyPath() {
11
11
  function eventLoopBlockedMarkerPath() {
12
12
  return join(exeDir(), "session-cache", "event-loop-blocked.marker");
13
13
  }
14
+ function starvationSuppressedMarkerPath() {
15
+ return join(exeDir(), "session-cache", "starvation-suppressed.marker");
16
+ }
14
17
  function eventLoopHeartbeatPath() {
15
18
  return join(exeDir(), "session-cache", "event-loop-heartbeat");
16
19
  }
@@ -63,6 +66,7 @@ export {
63
66
  exeDir,
64
67
  daemonReadyPath,
65
68
  eventLoopBlockedMarkerPath,
69
+ starvationSuppressedMarkerPath,
66
70
  eventLoopHeartbeatPath,
67
71
  setDaemonReadyGeneration,
68
72
  writeDaemonReady,
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  getGlobalProceduresBlock
3
- } from "./chunk-EXTZSNWL.js";
3
+ } from "./chunk-EPHSISMT.js";
4
4
 
5
5
  // src/lib/employee-templates.ts
6
6
  var BASE_OPERATING_PROCEDURES = `
@@ -111,12 +111,13 @@ DELEGATING WORK \u2014 the dispatch ladder (stop at the lowest rung that fits):
111
111
  throwaway exploration. Cap 2-3 concurrent. MANDATORY: persist the subagent's
112
112
  results and lessons into the task record + memory BEFORE you finish \u2014 subagent
113
113
  output must never die in a context window.
114
- 3. create_task -> tmux employee \u2014 LEGACY. Reserved for work that must outlive your
115
- session or cross sessions/projects. Gets no new investment.
114
+ 3. create_task(execution_mode='durable_tmux') -> tmux employee \u2014 LEGACY. Reserved
115
+ for work that must outlive your session or cross sessions/projects. Omitted or
116
+ default mode is checklist-only and never launches compute.
116
117
 
117
118
  WHEN RUNG 3 IS RIGHT (mandatory \u2014 never bypass):
118
- create_task is the ONLY tmux dispatch path. It auto-spawns the session; the task IS
119
- the spawn trigger.
119
+ Explicit execution_mode='durable_tmux' is the ONLY tmux dispatch path. It
120
+ auto-spawns the session; default checklist creation has no execution side effects.
120
121
  NEVER manually launch sessions with tmux send-keys or claude -p \u2014 this is still
121
122
  absolutely forbidden. Choosing rung 2 does not license manual spawns.
122
123
  NEVER spawn sessions without a task assigned \u2014 idle sessions waste resources.
@@ -124,7 +125,7 @@ NEVER refuse a dispatched task claiming "not in scope" \u2014 if it's assigned t
124
125
 
125
126
  CREATING TASKS FOR OTHER EMPLOYEES:
126
127
  When rung 3 applies and you assign work to another employee (e.g., CTO to an engineer):
127
- - ALWAYS use create_task MCP tool. NEVER write .md files directly to exe/{name}/.
128
+ - ALWAYS use create_task with execution_mode='durable_tmux'. NEVER write .md files directly to exe/{name}/.
128
129
  - Direct .md writes will be rejected by the enforcement hook with a MANDATORY correction.
129
130
  - create_task creates both the .md file AND the DB row atomically.
130
131
  - Include: title, assignedTo, priority, context, projectName.
@@ -1,31 +1,31 @@
1
1
  #!/usr/bin/env node
2
- import "./chunk-LGS2V2XD.js";
2
+ import "./chunk-FUKVP54K.js";
3
3
  import {
4
4
  isGarbageEntity
5
- } from "./chunk-ULIBLJ6W.js";
6
- import "./chunk-GUMRIUI5.js";
5
+ } from "./chunk-YYC553FO.js";
7
6
  import "./chunk-Z6BZQHP5.js";
7
+ import "./chunk-GUMRIUI5.js";
8
8
  import "./chunk-VGMACSEV.js";
9
- import "./chunk-VZAFWPAY.js";
9
+ import "./chunk-IK4344V5.js";
10
10
  import "./chunk-CHCA3ZM2.js";
11
- import "./chunk-DN4YVV4Z.js";
11
+ import "./chunk-RSABKW6B.js";
12
12
  import {
13
13
  fastDbInit
14
- } from "./chunk-M4IRPXSZ.js";
14
+ } from "./chunk-IZA7XW2Q.js";
15
15
  import "./chunk-5MOYSU5A.js";
16
- import "./chunk-4QCFFW2H.js";
16
+ import "./chunk-5QCIWWFA.js";
17
17
  import "./chunk-76CJBM36.js";
18
18
  import {
19
19
  getClient
20
- } from "./chunk-TAMDAOCU.js";
20
+ } from "./chunk-66CGXQUA.js";
21
21
  import "./chunk-BBMTVAE3.js";
22
22
  import "./chunk-TKDITWDN.js";
23
23
  import "./chunk-5YEUPUV4.js";
24
- import "./chunk-DSJI76XL.js";
24
+ import "./chunk-AHNVFBVB.js";
25
25
  import "./chunk-YYB5PMTK.js";
26
- import "./chunk-NJFJWQNN.js";
27
- import "./chunk-V3W3SATA.js";
28
- import "./chunk-JY5GAZYC.js";
26
+ import "./chunk-L5CGXEZC.js";
27
+ import "./chunk-CL4J4757.js";
28
+ import "./chunk-ZQEJ4IX2.js";
29
29
  import "./chunk-FXU7JOXK.js";
30
30
  import "./chunk-ZIG7VPJV.js";
31
31
  import "./chunk-HSGBZSCA.js";
@@ -23,7 +23,7 @@ async function runCloudSyncCli() {
23
23
  const { getMasterKey } = await import("./lib/keychain.js");
24
24
  const { initSyncCrypto } = await import("./lib/crypto.js");
25
25
  const { assertCloudSyncReachable, withTimeout } = await import("./bin/exe-cloud.js");
26
- const { runCloudSyncShutdown } = await import("./cloud-sync-shutdown-BNALPWGX.js");
26
+ const { runCloudSyncShutdown } = await import("./cloud-sync-shutdown-DAEPCFVK.js");
27
27
  const { disconnectClient } = await import("./lib/exe-daemon-client.js");
28
28
  let shuttingDown = false;
29
29
  const handleShutdown = (signal) => {
@@ -48,7 +48,7 @@ async function runCloudSyncCli() {
48
48
  const { initPostgresOnlyDatabase } = await import("./lib/database.js");
49
49
  await initPostgresOnlyDatabase();
50
50
  } else {
51
- const { initCloudSyncDatabase } = await import("./cloud-sync-db-init-V2LWIUQU.js");
51
+ const { initCloudSyncDatabase } = await import("./cloud-sync-db-init-HAGVF32Y.js");
52
52
  await initCloudSyncDatabase();
53
53
  }
54
54
  const masterKey = await getMasterKey();
@@ -71,12 +71,21 @@ async function runCloudSyncCli() {
71
71
  console.log(` Documents: ${result.documents.pushed} total (\u2193 ${result.documents.pulled} pulled)`);
72
72
  console.log(` GraphRAG: ${result.graphrag.pushed} entities`);
73
73
  const elapsedDisplay = result.elapsedMs != null ? `${(result.elapsedMs / 1e3).toFixed(1)}s` : "n/a";
74
+ const memoryPushFailed = (result.memoryPushErrors ?? 0) > 0;
75
+ const pendingMemories = result.pendingMemories ?? 0;
74
76
  if (result.deferred) {
75
77
  console.log(
76
78
  `
77
79
  \x1B[33mSync paused after a bounded memory slice \u2014 memories are still queued.\x1B[0m (${elapsedDisplay})
78
80
  Run it again (or let the background sync continue) until it reports complete.`
79
81
  );
82
+ } else if (memoryPushFailed) {
83
+ console.log(
84
+ `
85
+ \x1B[33mSync did NOT complete \u2014 ${pendingMemories.toLocaleString()} memor${pendingMemories === 1 ? "y" : "ies"} could not be pushed and remain queued locally. (${elapsedDisplay})
86
+ The memory push failed (network error or version conflict). Run it again until it reports complete.\x1B[0m`
87
+ );
88
+ exitCode = 1;
80
89
  } else {
81
90
  console.log(`
82
91
  \x1B[32mSync complete.\x1B[0m (${elapsedDisplay})`);
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  fastDbInit,
3
3
  isNoopFastDbClient
4
- } from "./chunk-M4IRPXSZ.js";
4
+ } from "./chunk-IZA7XW2Q.js";
5
5
  import "./chunk-MLKGABMK.js";
6
6
 
7
7
  // src/lib/cloud-sync-db-init.ts
@@ -1,14 +1,14 @@
1
1
  import {
2
2
  releaseDbLock
3
- } from "./chunk-TAMDAOCU.js";
3
+ } from "./chunk-66CGXQUA.js";
4
4
  import "./chunk-BBMTVAE3.js";
5
5
  import "./chunk-TKDITWDN.js";
6
6
  import "./chunk-5YEUPUV4.js";
7
- import "./chunk-DSJI76XL.js";
7
+ import "./chunk-AHNVFBVB.js";
8
8
  import "./chunk-YYB5PMTK.js";
9
- import "./chunk-NJFJWQNN.js";
10
- import "./chunk-V3W3SATA.js";
11
- import "./chunk-JY5GAZYC.js";
9
+ import "./chunk-L5CGXEZC.js";
10
+ import "./chunk-CL4J4757.js";
11
+ import "./chunk-ZQEJ4IX2.js";
12
12
  import "./chunk-FXU7JOXK.js";
13
13
  import "./chunk-ZIG7VPJV.js";
14
14
  import "./chunk-HSGBZSCA.js";
@@ -1,14 +1,14 @@
1
1
  import {
2
2
  getClient
3
- } from "./chunk-TAMDAOCU.js";
3
+ } from "./chunk-66CGXQUA.js";
4
4
  import "./chunk-BBMTVAE3.js";
5
5
  import "./chunk-TKDITWDN.js";
6
6
  import "./chunk-5YEUPUV4.js";
7
- import "./chunk-DSJI76XL.js";
7
+ import "./chunk-AHNVFBVB.js";
8
8
  import "./chunk-YYB5PMTK.js";
9
- import "./chunk-NJFJWQNN.js";
10
- import "./chunk-V3W3SATA.js";
11
- import "./chunk-JY5GAZYC.js";
9
+ import "./chunk-L5CGXEZC.js";
10
+ import "./chunk-CL4J4757.js";
11
+ import "./chunk-ZQEJ4IX2.js";
12
12
  import "./chunk-FXU7JOXK.js";
13
13
  import "./chunk-ZIG7VPJV.js";
14
14
  import "./chunk-HSGBZSCA.js";