@askexenow/exe-os 0.9.356 → 0.9.358

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 (321) hide show
  1. package/deploy/stack-manifests/v0.9.json +3 -3
  2. package/dist/{active-agent-LCRV3HVS.js → active-agent-OYZRH6D2.js} +6 -4
  3. package/dist/{active-agent-PYMOMGQ7.js → active-agent-QQJCFJG4.js} +6 -4
  4. package/dist/{agentic-ontology-TNKI4FOM.js → agentic-ontology-U5JHQDMG.js} +1 -1
  5. package/dist/{backfill-metadata-SFS4ARNR.js → backfill-metadata-D25I5HN2.js} +8 -6
  6. package/dist/{backup-verify-7NLKR4S6.js → backup-verify-ZLU3DBPH.js} +6 -1
  7. package/dist/{behavior-injection-OT7VX7M6.js → behavior-injection-GVCRBUYW.js} +10 -8
  8. package/dist/{behaviors-6GW5AFG4.js → behaviors-6B2FZ4KP.js} +9 -7
  9. package/dist/bin/agentic-ontology-backfill.js +9 -7
  10. package/dist/bin/agentic-reflection-backfill.js +10 -8
  11. package/dist/bin/agentic-semantic-label.js +9 -7
  12. package/dist/bin/backfill-conversations.js +8 -6
  13. package/dist/bin/backfill-responses.js +8 -6
  14. package/dist/bin/backfill-vectors.js +9 -7
  15. package/dist/bin/bulk-sync-postgres.js +14 -12
  16. package/dist/bin/cc-doctor.js +7 -5
  17. package/dist/bin/cleanup-stale-review-tasks.js +16 -14
  18. package/dist/bin/cli.js +19 -19
  19. package/dist/bin/deferred-daemon-restart.js +74 -72
  20. package/dist/bin/exe-agent-config.js +5 -3
  21. package/dist/bin/exe-agent.js +8 -6
  22. package/dist/bin/exe-assign.js +9 -7
  23. package/dist/bin/exe-boot.js +62 -28
  24. package/dist/bin/exe-call.js +8 -6
  25. package/dist/bin/exe-cloud.js +16 -14
  26. package/dist/bin/exe-config-dump.js +5 -3
  27. package/dist/bin/exe-dispatch.js +16 -14
  28. package/dist/bin/exe-doctor.js +9 -6
  29. package/dist/bin/exe-export-behaviors.js +11 -9
  30. package/dist/bin/exe-forget.js +10 -8
  31. package/dist/bin/exe-gateway.js +10 -8
  32. package/dist/bin/exe-healthcheck.js +7 -5
  33. package/dist/bin/exe-heartbeat.js +18 -16
  34. package/dist/bin/exe-kill.js +20 -18
  35. package/dist/bin/exe-launch-agent.js +27 -25
  36. package/dist/bin/exe-memory-reads.js +8 -6
  37. package/dist/bin/exe-new-employee.js +12 -10
  38. package/dist/bin/exe-os-mcp-proxy.js +6 -4
  39. package/dist/bin/exe-pending-messages.js +17 -15
  40. package/dist/bin/exe-pending-notifications.js +16 -14
  41. package/dist/bin/exe-pending-reviews.js +16 -14
  42. package/dist/bin/exe-rename.js +8 -6
  43. package/dist/bin/exe-review.js +19 -17
  44. package/dist/bin/exe-search.js +9 -7
  45. package/dist/bin/exe-session-cleanup.js +20 -18
  46. package/dist/bin/exe-settings.js +14 -12
  47. package/dist/bin/exe-start-codex.js +16 -14
  48. package/dist/bin/exe-start-opencode.js +12 -10
  49. package/dist/bin/exe-status.js +17 -15
  50. package/dist/bin/exe-support.js +3 -3
  51. package/dist/bin/exe-team.js +6 -4
  52. package/dist/bin/exe-timers.js +2 -1
  53. package/dist/bin/git-sweep.js +17 -15
  54. package/dist/bin/graph-backfill.js +9 -7
  55. package/dist/bin/graph-export.js +9 -7
  56. package/dist/bin/import-history.js +12 -10
  57. package/dist/bin/install.js +76 -74
  58. package/dist/bin/intercom-check.js +4 -4
  59. package/dist/bin/mcp-sessions.js +2 -2
  60. package/dist/bin/orchestration-metrics.js +7 -5
  61. package/dist/bin/postgres-agentic-reflection-backfill.js +2 -2
  62. package/dist/bin/postgres-agentic-semantic-backfill.js +1 -1
  63. package/dist/bin/pre-publish.js +1 -1
  64. package/dist/bin/reconcile-backlog.js +2 -2
  65. package/dist/bin/registry-proxy.js +1 -1
  66. package/dist/bin/scan-tasks.js +16 -14
  67. package/dist/bin/setup.js +1 -1
  68. package/dist/bin/shard-migrate.js +9 -7
  69. package/dist/bin/stack-update.js +4 -4
  70. package/dist/bin/vps-health-gate.js +1 -1
  71. package/dist/{boot-generation-7ZI7JYGR.js → boot-generation-EA4UCCZN.js} +6 -4
  72. package/dist/{boot-review-sections-3MSXM6V7.js → boot-review-sections-BBOHRDM3.js} +15 -13
  73. package/dist/{capability-cards-4RD2SB2K.js → capability-cards-XELC77DF.js} +5 -3
  74. package/dist/{capacity-monitor-5XUR3JTN.js → capacity-monitor-6FD2LIDV.js} +17 -15
  75. package/dist/{catchup-brief-AYJWMQUZ.js → catchup-brief-I3YBJXL4.js} +20 -18
  76. package/dist/{chunk-QXAE6S3A.js → chunk-2NPK6FIV.js} +3 -3
  77. package/dist/{chunk-YNYISUMW.js → chunk-2X76NMT7.js} +1 -1
  78. package/dist/{chunk-AWB7M62V.js → chunk-2XYL3ZBJ.js} +4 -4
  79. package/dist/{chunk-VCKIV5WG.js → chunk-36PGDNMS.js} +2 -2
  80. package/dist/{chunk-2TL5RKMC.js → chunk-3BAGFZFN.js} +1 -1
  81. package/dist/{chunk-EWOMZLR6.js → chunk-3I7SENGU.js} +1 -1
  82. package/dist/{chunk-FWJFKWYA.js → chunk-3M6TUMXM.js} +2 -2
  83. package/dist/{chunk-IIHFSNL4.js → chunk-5A43OWIJ.js} +1 -1
  84. package/dist/{chunk-6H4ZEU7P.js → chunk-5SWYRYRO.js} +4 -4
  85. package/dist/{chunk-TAR5J7WI.js → chunk-5T3VZ2TX.js} +4 -4
  86. package/dist/{chunk-WJIGSNJM.js → chunk-5TMFK3NT.js} +12 -12
  87. package/dist/chunk-5YEUPUV4.js +53 -0
  88. package/dist/{chunk-4VU2VCEU.js → chunk-6VUMFHWB.js} +1 -1
  89. package/dist/{chunk-X4EDW3FH.js → chunk-6ZUHNYAB.js} +1 -1
  90. package/dist/{chunk-H4ZSOAP6.js → chunk-72HSYKEQ.js} +1 -1
  91. package/dist/{chunk-DF5K4JJL.js → chunk-76IW4LIS.js} +3 -3
  92. package/dist/{chunk-P2Y6S53G.js → chunk-7AWKMYWF.js} +1 -1
  93. package/dist/{chunk-LDRMNJJJ.js → chunk-7G35SOMT.js} +2 -2
  94. package/dist/{chunk-A5P2MMII.js → chunk-7GUHIYZ6.js} +2 -2
  95. package/dist/{chunk-2WWGTOVP.js → chunk-7HFUCBQO.js} +19 -1
  96. package/dist/{chunk-JZXHLDQN.js → chunk-7KPY52EO.js} +1 -1
  97. package/dist/{chunk-LLXYWNCH.js → chunk-AXAHRTST.js} +1 -1
  98. package/dist/{chunk-ZMVVKOOS.js → chunk-AXXGZSW5.js} +7 -7
  99. package/dist/{chunk-6SAQSXT2.js → chunk-BP5H6ZJA.js} +1 -1
  100. package/dist/{chunk-EHL4RCND.js → chunk-CYAFF5EP.js} +1 -1
  101. package/dist/{chunk-H4IZKSOY.js → chunk-E47WQHCT.js} +1 -1
  102. package/dist/{chunk-QGLAMWQJ.js → chunk-EBOKPLWI.js} +3 -3
  103. package/dist/{chunk-NT4GET5B.js → chunk-ELGZDMXM.js} +4 -4
  104. package/dist/{chunk-KT4RUFYO.js → chunk-F25FABZ6.js} +3 -3
  105. package/dist/{chunk-W3IXTUCL.js → chunk-GXMS5PZR.js} +6 -6
  106. package/dist/{chunk-4OMIENRX.js → chunk-H3C2LVUB.js} +1 -1
  107. package/dist/{chunk-JUE37LOD.js → chunk-IEHGR7XU.js} +4 -4
  108. package/dist/{chunk-UQCYG6EI.js → chunk-INY36ISH.js} +1 -1
  109. package/dist/{chunk-4GGP4Q5N.js → chunk-IOSM2N3Z.js} +2 -2
  110. package/dist/{chunk-YSUHXDQU.js → chunk-IR6CEBWC.js} +21 -19
  111. package/dist/{chunk-XPGUSSG7.js → chunk-J3I5OG4P.js} +1 -1
  112. package/dist/{chunk-P7EUKYSQ.js → chunk-J4DLB36O.js} +1 -1
  113. package/dist/{chunk-VPMAC5VB.js → chunk-JXQB7HHZ.js} +1 -1
  114. package/dist/{chunk-APRVAUOR.js → chunk-JY5GAZYC.js} +1 -0
  115. package/dist/{chunk-2LM5GO5R.js → chunk-KTM4TODC.js} +5 -5
  116. package/dist/{chunk-YG4LS7TI.js → chunk-L576MK4B.js} +7 -7
  117. package/dist/{chunk-XQAELSOQ.js → chunk-L73MPNIB.js} +2 -2
  118. package/dist/{chunk-RUBXKPOT.js → chunk-LFJPHWHH.js} +1 -1
  119. package/dist/{chunk-PM4TIRCR.js → chunk-MODZZ52R.js} +1 -1
  120. package/dist/{chunk-JO6TS75M.js → chunk-MYJJSKE6.js} +1 -1
  121. package/dist/{chunk-ES6PDSEK.js → chunk-MZ6ZB6SP.js} +8 -8
  122. package/dist/{chunk-PNTRRXAN.js → chunk-N6XPSEIA.js} +1 -1
  123. package/dist/{chunk-6CZXY5BD.js → chunk-N7YI2ZRJ.js} +5 -5
  124. package/dist/{chunk-IO5FR7BZ.js → chunk-NIXTDUOC.js} +3 -3
  125. package/dist/{chunk-6UTP7AIH.js → chunk-NLDKJJDM.js} +1 -1
  126. package/dist/{chunk-PUAA3P47.js → chunk-NXZ2RSEO.js} +4 -4
  127. package/dist/{chunk-W3REQ37P.js → chunk-OFXQO43S.js} +2 -2
  128. package/dist/{chunk-Z5DTZ464.js → chunk-OIS5VIAH.js} +6 -0
  129. package/dist/{chunk-Y4JA5V22.js → chunk-OP7M5N5R.js} +1 -1
  130. package/dist/{chunk-CI3YVCUY.js → chunk-ORPELDVP.js} +1 -1
  131. package/dist/{chunk-PUNCHUEX.js → chunk-PTOJPD26.js} +3 -3
  132. package/dist/{chunk-TQ4O5A4S.js → chunk-Q5AFCR57.js} +1 -1
  133. package/dist/{chunk-6WAJJN5W.js → chunk-QJCFUUSB.js} +3 -3
  134. package/dist/{chunk-YQ7IZPVC.js → chunk-QQQ4I5IZ.js} +1 -1
  135. package/dist/{chunk-JKOEOHOD.js → chunk-R7F6HKTH.js} +6 -21
  136. package/dist/{chunk-CQPFNVWY.js → chunk-RGKB272D.js} +3 -3
  137. package/dist/{chunk-HAOZB4W6.js → chunk-SCR5Q5PI.js} +1 -1
  138. package/dist/{chunk-ES4XE6AU.js → chunk-SKTGLMUJ.js} +4 -4
  139. package/dist/{chunk-AJGTBW3N.js → chunk-SU3GMJT5.js} +1 -1
  140. package/dist/{chunk-JLXJMDKG.js → chunk-T6V4XURD.js} +1 -1
  141. package/dist/{chunk-KP3PLOGC.js → chunk-U5KZQP7R.js} +2 -2
  142. package/dist/{chunk-M5DPPJLS.js → chunk-U7I4YINB.js} +39 -7
  143. package/dist/{chunk-RZSPCNLY.js → chunk-UBVYDXTU.js} +1 -1
  144. package/dist/chunk-V3W3SATA.js +135 -0
  145. package/dist/{chunk-IT4TFJTK.js → chunk-V6QMFX46.js} +3 -3
  146. package/dist/{chunk-EQQYCP6D.js → chunk-VI4LQLD2.js} +1 -1
  147. package/dist/{chunk-WHQYVFE2.js → chunk-VIIOEVAF.js} +22 -15
  148. package/dist/{chunk-WL3CT5KX.js → chunk-VJACZJD2.js} +2 -2
  149. package/dist/{chunk-X7CWCQ5S.js → chunk-VJRLBE2R.js} +1 -1
  150. package/dist/{chunk-VU2MZ7BP.js → chunk-VNK3MNZE.js} +40 -3
  151. package/dist/{chunk-MVYB76QG.js → chunk-VRTCVZND.js} +16 -20
  152. package/dist/{chunk-LVZZ7YS3.js → chunk-W64WE36F.js} +2 -2
  153. package/dist/{chunk-7FKC2TIB.js → chunk-WA3ZB6TK.js} +1 -1
  154. package/dist/{chunk-ZWXSO4FN.js → chunk-WIKYYOHP.js} +9 -9
  155. package/dist/{chunk-DZNXWCJN.js → chunk-WKHC54KH.js} +1 -1
  156. package/dist/{chunk-SFSB64NK.js → chunk-WTTCNZ6J.js} +1 -1
  157. package/dist/{chunk-72GUU6Z4.js → chunk-WXUTAQX2.js} +3 -3
  158. package/dist/{chunk-OBWTTM7E.js → chunk-YPZTTTFH.js} +2 -2
  159. package/dist/chunk-YQGMSXT5.js +33 -0
  160. package/dist/{chunk-5Q2J6P4T.js → chunk-YVCKSEF6.js} +3 -3
  161. package/dist/{chunk-34MIJGQS.js → chunk-YXWAPO6F.js} +1 -1
  162. package/dist/{chunk-4KCLB4TY.js → chunk-YXY5AEPG.js} +1 -1
  163. package/dist/{chunk-ABM3DZF3.js → chunk-ZANQKOBC.js} +1 -1
  164. package/dist/{chunk-AW3WT3TJ.js → chunk-ZJB26D36.js} +119 -119
  165. package/dist/{cleanup-graph-garbage-XUNHVCRR.js → cleanup-graph-garbage-5DFMJQTV.js} +10 -8
  166. package/dist/{cloud-sync-shutdown-JRAERBUO.js → cloud-sync-shutdown-H36HDBZQ.js} +5 -3
  167. package/dist/{co-activation-5AN2CF23.js → co-activation-GWRPFKYT.js} +5 -3
  168. package/dist/{co-occurrence-A7E774ZX.js → co-occurrence-TBDCT3EB.js} +8 -6
  169. package/dist/{conversation-entity-extractor-2XI2GC4N.js → conversation-entity-extractor-CAFZFIDB.js} +3 -3
  170. package/dist/{crdt-sync-2IUU6GZ6.js → crdt-sync-DE6P7FHB.js} +1 -1
  171. package/dist/{crm-webhook-BQCP77TI.js → crm-webhook-GXUJOMHX.js} +2 -2
  172. package/dist/{cto-delegation-gate-UHHNMWCL.js → cto-delegation-gate-EKA7LOY7.js} +15 -13
  173. package/dist/{daemon-orchestration-7WS3X5DQ.js → daemon-orchestration-WEHBZJW4.js} +20 -19
  174. package/dist/{daemon-ready-signal-TVCPSG7J.js → daemon-ready-signal-CKXPUMJ2.js} +3 -1
  175. package/dist/{daemon-restart-report-QDRGKLL6.js → daemon-restart-report-HZU5LWXN.js} +2 -1
  176. package/dist/{daemon-timer-report-NM44WQRH.js → daemon-timer-report-TNJH5SFY.js} +2 -1
  177. package/dist/{doc-graph-extractor-NFERAJNP.js → doc-graph-extractor-QCT4CCBN.js} +8 -6
  178. package/dist/{documents-SW2MJUXY.js → documents-NJRAJKAS.js} +9 -7
  179. package/dist/{dreaming-KSNJVNFH.js → dreaming-MRNOUJKA.js} +19 -17
  180. package/dist/{exe-drift-NBLYKQBQ.js → exe-drift-CSOXQU4J.js} +6 -4
  181. package/dist/{exe-export-44IWTJHL.js → exe-export-ER75RRLD.js} +11 -9
  182. package/dist/{exe-import-PPECH3KO.js → exe-import-TYTAQ6AY.js} +11 -9
  183. package/dist/{exe-key-ZCRJQYA7.js → exe-key-HM4FZRL2.js} +77 -72
  184. package/dist/{exe-snapshot-OVINJ6MC.js → exe-snapshot-NS6PVGJL.js} +20 -18
  185. package/dist/{fast-db-init-B5Q3SJQG.js → fast-db-init-LRC6RZ6U.js} +1 -1
  186. package/dist/{founder-context-5OFTZNDO.js → founder-context-K5NWGKX7.js} +2 -2
  187. package/dist/gateway/index.js +11 -9
  188. package/dist/{git-staleness-XQJTOSGZ.js → git-staleness-VLVOG2SH.js} +5 -3
  189. package/dist/{global-procedures-YCJ3JPAP.js → global-procedures-EMTNFAMU.js} +7 -5
  190. package/dist/{graph-auto-extract-XJN6PQH3.js → graph-auto-extract-56OOJLRB.js} +8 -6
  191. package/dist/{graph-rag-HCQCZ2W7.js → graph-rag-WUM5JUB7.js} +3 -3
  192. package/dist/{hook-prefetch-FKXDTCDS.js → hook-prefetch-WQBVWWSD.js} +16 -14
  193. package/dist/hooks/bug-report-worker.js +18 -16
  194. package/dist/hooks/codex-stop-task-finalizer.js +19 -17
  195. package/dist/hooks/commit-complete.js +18 -16
  196. package/dist/hooks/error-recall.js +10 -8
  197. package/dist/hooks/exe-heartbeat-hook.js +6 -4
  198. package/dist/hooks/ingest.js +11 -9
  199. package/dist/hooks/instructions-loaded.js +7 -5
  200. package/dist/hooks/manifest.json +19 -19
  201. package/dist/hooks/notification.js +7 -5
  202. package/dist/hooks/post-compact.js +17 -15
  203. package/dist/hooks/post-tool-combined.js +10 -10
  204. package/dist/hooks/pre-compact.js +18 -16
  205. package/dist/hooks/pre-tool-use.js +23 -21
  206. package/dist/hooks/prompt-submit.js +34 -33
  207. package/dist/hooks/session-end.js +22 -20
  208. package/dist/hooks/session-start.js +13 -13
  209. package/dist/hooks/stop.js +21 -19
  210. package/dist/hooks/subagent-stop.js +19 -17
  211. package/dist/hooks/summary-worker.js +22 -25
  212. package/dist/index.js +25 -23
  213. package/dist/{installer-YSCUE6MT.js → installer-KBOFELYW.js} +8 -6
  214. package/dist/{installer-YTT5OSRL.js → installer-UDRUKMVA.js} +8 -6
  215. package/dist/{installer-G3DVMNC6.js → installer-VZYXKVLO.js} +8 -6
  216. package/dist/{intercom-queue-5D52JF3Q.js → intercom-queue-QWUEMESK.js} +15 -13
  217. package/dist/lib/cloud-sync.js +14 -12
  218. package/dist/lib/consolidation.js +10 -8
  219. package/dist/lib/database.js +9 -3
  220. package/dist/lib/db-backup.js +1 -1
  221. package/dist/lib/db-checkpoint-worker.js +4 -0
  222. package/dist/lib/db-daemon-client.js +3 -1
  223. package/dist/lib/db-read-worker.js +4 -0
  224. package/dist/lib/db-write-worker.js +3 -3
  225. package/dist/lib/db.js +9 -3
  226. package/dist/lib/device-registry.js +1 -1
  227. package/dist/lib/employee-templates.js +8 -6
  228. package/dist/lib/employees.js +5 -3
  229. package/dist/lib/exe-daemon.js +202 -93
  230. package/dist/lib/hybrid-search.js +9 -7
  231. package/dist/lib/identity.js +5 -3
  232. package/dist/lib/license.js +2 -2
  233. package/dist/lib/messaging.js +16 -14
  234. package/dist/lib/registry-proxy.js +1 -1
  235. package/dist/lib/reminders.js +6 -4
  236. package/dist/lib/schedules.js +9 -7
  237. package/dist/lib/session-registry.js +7 -5
  238. package/dist/lib/skill-learning.js +10 -8
  239. package/dist/lib/store.js +8 -6
  240. package/dist/lib/task-router.js +6 -4
  241. package/dist/lib/tasks.js +17 -15
  242. package/dist/lib/tmux-routing.js +15 -13
  243. package/dist/lib/token-spend.js +8 -4
  244. package/dist/{license-gate-DKYHCAMN.js → license-gate-4FBFBGOS.js} +3 -3
  245. package/dist/{license-sync-JVEXPDHN.js → license-sync-PES4GIXL.js} +2 -2
  246. package/dist/mcp/register-tools.js +73 -71
  247. package/dist/mcp/server.js +74 -72
  248. package/dist/mcp/tools/complete-reminder.js +7 -5
  249. package/dist/mcp/tools/create-reminder.js +7 -5
  250. package/dist/mcp/tools/create-task.js +19 -17
  251. package/dist/mcp/tools/deactivate-behavior.js +11 -9
  252. package/dist/mcp/tools/list-reminders.js +7 -5
  253. package/dist/mcp/tools/list-tasks.js +19 -17
  254. package/dist/mcp/tools/send-message.js +18 -16
  255. package/dist/mcp/tools/update-task.js +18 -16
  256. package/dist/{mcp-health-WDOB6XUB.js → mcp-health-HNVSWKFA.js} +6 -1
  257. package/dist/{mcp-http-config-L5RDDU6P.js → mcp-http-config-SL43BGFQ.js} +6 -4
  258. package/dist/{mcp-session-identity-S6UCHBER.js → mcp-session-identity-G2NSIUWR.js} +15 -13
  259. package/dist/{memory-cards-65RGFT5M.js → memory-cards-GOSSB6QK.js} +8 -6
  260. package/dist/{memory-graph-extractor-ZDZ5VQUX.js → memory-graph-extractor-5S6AVC5L.js} +9 -7
  261. package/dist/{memory-poisoning-defense-EQUQNXRE.js → memory-poisoning-defense-6KFJEDCT.js} +5 -3
  262. package/dist/{memory-pressure-watchdog-CC344JBH.js → memory-pressure-watchdog-7BOUNASS.js} +16 -14
  263. package/dist/{memory-reflection-Q4OT4V55.js → memory-reflection-LIILYJAS.js} +5 -3
  264. package/dist/{notification-ledger-GL3ZPZNR.js → notification-ledger-54CAO4AS.js} +16 -14
  265. package/dist/{notifications-FGYNO2FY.js → notifications-MCJFLBAO.js} +15 -13
  266. package/dist/{orchestration-events-N5FQ4SKU.js → orchestration-events-SHRMUOV7.js} +6 -4
  267. package/dist/{orchestrator-XUJDK4EW.js → orchestrator-RVUAGQV6.js} +17 -15
  268. package/dist/{pipeline-router-YQOZ4M62.js → pipeline-router-CWB6QZ5E.js} +6 -4
  269. package/dist/{plan-limits-VBHKYKSK.js → plan-limits-APRN2I6H.js} +8 -6
  270. package/dist/{platform-procedures-F3XB6WWM.js → platform-procedures-2VQGBJU7.js} +1 -1
  271. package/dist/{projection-worker-NJUNGEXE.js → projection-worker-ECMC4XKX.js} +2 -2
  272. package/dist/{prospective-memory-3MKUPDVI.js → prospective-memory-ZLMPXBGE.js} +5 -3
  273. package/dist/{reranker-LGSIL6TX.js → reranker-TLECHHQH.js} +1 -1
  274. package/dist/{retrieval-health-AEEQ5IO6.js → retrieval-health-K4EPRPJU.js} +1 -1
  275. package/dist/{review-polling-2RMEZ5QO.js → review-polling-6NYH7IO2.js} +16 -14
  276. package/dist/runtime/index.js +19 -17
  277. package/dist/{session-events-5XSYCV4I.js → session-events-RL7JNGJK.js} +16 -14
  278. package/dist/{session-kill-telemetry-QJUHG3IG.js → session-kill-telemetry-IV4BFLSS.js} +16 -14
  279. package/dist/{session-scope-LIJ746K2.js → session-scope-ISVYSAC2.js} +15 -13
  280. package/dist/{setup-wizard-RLUCGGA7.js → setup-wizard-OQB6FMJM.js} +1 -1
  281. package/dist/{shard-manager-3L2NMJVJ.js → shard-manager-DFLCDZT5.js} +2 -1
  282. package/dist/{skill-refinement-FMN3WFSG.js → skill-refinement-7SANCL3P.js} +6 -4
  283. package/dist/{stack-promote-BGDGAYKG.js → stack-promote-I7H727IS.js} +29 -4
  284. package/dist/{stack-release-SOIHMI3I.js → stack-release-6I7GGSC7.js} +4 -4
  285. package/dist/{stack-update-AXFHJRK5.js → stack-update-2ZV6MBXF.js} +3 -3
  286. package/dist/{steward-gate-R2XWABMV.js → steward-gate-SW4UYGIH.js} +6 -4
  287. package/dist/{support-inbox-IITW66TG.js → support-inbox-OX3VJ2OF.js} +3 -3
  288. package/dist/{task-enforcement-SFZGBY27.js → task-enforcement-VLGRGIKW.js} +16 -14
  289. package/dist/{task-scope-74ZIFQRH.js → task-scope-NTANJZPS.js} +15 -13
  290. package/dist/{tasks-crud-N54JZCXU.js → tasks-crud-FDCGFA72.js} +15 -13
  291. package/dist/{tasks-notify-62IJZW55.js → tasks-notify-GGN2HRFW.js} +16 -14
  292. package/dist/{tasks-review-3LHBE6ZJ.js → tasks-review-KFUKHWMF.js} +15 -13
  293. package/dist/{telemetry-upload-HR3QIWZV.js → telemetry-upload-GFEOMNUY.js} +10 -8
  294. package/dist/{token-budget-DBXHLCMN.js → token-budget-TJJV6ZCC.js} +6 -4
  295. package/dist/{tool-telemetry-UFUTCNE3.js → tool-telemetry-EH6SIQHX.js} +1 -1
  296. package/dist/tui/App.js +24 -22
  297. package/dist/{tui-data-BPXEJKRQ.js → tui-data-W4M3MMLG.js} +15 -13
  298. package/dist/{update-support-HLZ7KMVM.js → update-support-67ADNRYC.js} +12 -10
  299. package/dist/{work-state-heartbeat-IQI3LCHN.js → work-state-heartbeat-34V6UFHR.js} +1 -1
  300. package/dist/{worker-gate-5ABYGLC2.js → worker-gate-7EXQ46BV.js} +1 -1
  301. package/dist/{workflow-engine-XSUWZK6I.js → workflow-engine-IK6SIMT5.js} +2 -2
  302. package/dist/{worktree-EUYBBABA.js → worktree-HRX5BSXT.js} +7 -5
  303. package/dist/{worktree-sweep-LSKFA2PK.js → worktree-sweep-W24XZKQO.js} +8 -6
  304. package/package.json +2 -1
  305. package/release-notes.json +29 -30
  306. package/dist/chunk-7HLWBYH7.js +0 -60
  307. /package/dist/{chunk-AK77MITT.js → chunk-4QDO2KT4.js} +0 -0
  308. /package/dist/{chunk-HABPXFHZ.js → chunk-B2F5BZJA.js} +0 -0
  309. /package/dist/{chunk-A627QFOE.js → chunk-BH2X3N6S.js} +0 -0
  310. /package/dist/{chunk-2267TRAO.js → chunk-CCQ3VCK2.js} +0 -0
  311. /package/dist/{chunk-IHKRHGKT.js → chunk-F766HECM.js} +0 -0
  312. /package/dist/{chunk-7GOSAV25.js → chunk-L6GEKT6M.js} +0 -0
  313. /package/dist/{chunk-GVU3BW6N.js → chunk-MZXYP2YA.js} +0 -0
  314. /package/dist/{chunk-HMBMHZ3S.js → chunk-UURVJW2K.js} +0 -0
  315. /package/dist/{chunk-VML2UQK7.js → chunk-ZOFI53LD.js} +0 -0
  316. /package/dist/{chunk-G2MXTLOD.js → chunk-ZP3224K3.js} +0 -0
  317. /package/dist/{core-memory-KXE4QMOA.js → core-memory-P7YBDZGM.js} +0 -0
  318. /package/dist/{memory-isolation-VSKUKTN4.js → memory-isolation-A4CRGWRS.js} +0 -0
  319. /package/dist/{oauth-server-JELOVN5D.js → oauth-server-MM4VE2YN.js} +0 -0
  320. /package/dist/{project-boot-LQ4CF6BI.js → project-boot-PT5HJT7E.js} +0 -0
  321. /package/dist/{wiki-acl-VR4AFJ3T.js → wiki-acl-SD3DF4IP.js} +0 -0
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  buildSystemStateMemoryTypeExclusion
3
- } from "./chunk-WHQYVFE2.js";
3
+ } from "./chunk-VIIOEVAF.js";
4
4
  import {
5
5
  sessionScopeFilter
6
- } from "./chunk-YSUHXDQU.js";
6
+ } from "./chunk-IR6CEBWC.js";
7
7
  import {
8
8
  getClient,
9
9
  getIdentity
10
- } from "./chunk-M5DPPJLS.js";
10
+ } from "./chunk-U7I4YINB.js";
11
11
  import {
12
12
  getEmotionalBaseline
13
13
  } from "./chunk-OMXJMOBD.js";
@@ -646,7 +646,7 @@ var DreamingEngine = class {
646
646
  }
647
647
  let overdueProspective = [];
648
648
  try {
649
- const { getOverdueProspective, completeProspective } = await import("./prospective-memory-3MKUPDVI.js");
649
+ const { getOverdueProspective, completeProspective } = await import("./prospective-memory-ZLMPXBGE.js");
650
650
  const overdue = await getOverdueProspective(agentId);
651
651
  overdueProspective = overdue.map((o) => ({
652
652
  id: o.id,
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  storeBehavior
3
- } from "./chunk-FWJFKWYA.js";
3
+ } from "./chunk-3M6TUMXM.js";
4
4
  import {
5
5
  getClient
6
- } from "./chunk-M5DPPJLS.js";
6
+ } from "./chunk-U7I4YINB.js";
7
7
  import {
8
8
  loadConfig
9
9
  } from "./chunk-BCZF3AGJ.js";
@@ -1,6 +1,9 @@
1
1
  import {
2
2
  assertValidDbPath
3
3
  } from "./chunk-2I23RPSI.js";
4
+ import {
5
+ recordDbOpen
6
+ } from "./chunk-5YEUPUV4.js";
4
7
  import {
5
8
  EXE_AI_DIR
6
9
  } from "./chunk-BCZF3AGJ.js";
@@ -56,6 +59,7 @@ async function validateEncryptionKey() {
56
59
  const dbPath = path.join(SHARDS_DIR, shardFile);
57
60
  assertValidDbPath(dbPath, "shard-manager validateEncryptionKey");
58
61
  const testClient = createClient({ url: `file:${dbPath}`, encryptionKey: _encryptionKey });
62
+ recordDbOpen({ dbPath, source: "shard-manager-validate-key", writeCapable: true, checkpointTimer: false });
59
63
  try {
60
64
  await testClient.execute("SELECT COUNT(*) FROM sqlite_schema");
61
65
  testClient.close();
@@ -111,6 +115,7 @@ function getShardClient(projectName) {
111
115
  url: `file:${dbPath}`,
112
116
  encryptionKey: _encryptionKey
113
117
  });
118
+ recordDbOpen({ dbPath, source: "shard-manager-get-shard", writeCapable: true, checkpointTimer: false });
114
119
  _shards.set(safeName, client);
115
120
  _shardLastAccess.set(safeName, Date.now());
116
121
  return client;
@@ -152,6 +157,7 @@ async function auditShardHealth(options = {}) {
152
157
  url: `file:${dbPath}`,
153
158
  encryptionKey: _encryptionKey
154
159
  });
160
+ recordDbOpen({ dbPath, source: "shard-manager-health", writeCapable: true, checkpointTimer: false });
155
161
  try {
156
162
  await client.execute("SELECT COUNT(*) as cnt FROM sqlite_schema");
157
163
  const hasMemories = await client.execute(
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  isCoordinatorRole
3
- } from "./chunk-M5DPPJLS.js";
3
+ } from "./chunk-U7I4YINB.js";
4
4
 
5
5
  // src/lib/task-router.ts
6
6
  import { randomUUID } from "crypto";
@@ -4,7 +4,7 @@ import {
4
4
  import {
5
5
  flushBatch,
6
6
  writeMemory
7
- } from "./chunk-WHQYVFE2.js";
7
+ } from "./chunk-VIIOEVAF.js";
8
8
  import {
9
9
  redactSecrets
10
10
  } from "./chunk-4QCFFW2H.js";
@@ -4,17 +4,17 @@ import {
4
4
  resolveExeSession,
5
5
  sendIntercom,
6
6
  strictSessionScopeFilter
7
- } from "./chunk-YSUHXDQU.js";
7
+ } from "./chunk-IR6CEBWC.js";
8
8
  import {
9
9
  parseMessage,
10
10
  serializeMessage
11
11
  } from "./chunk-4JERP7NT.js";
12
12
  import {
13
13
  recordOrchestrationEventBestEffort
14
- } from "./chunk-X4EDW3FH.js";
14
+ } from "./chunk-6ZUHNYAB.js";
15
15
  import {
16
16
  getClient
17
- } from "./chunk-M5DPPJLS.js";
17
+ } from "./chunk-U7I4YINB.js";
18
18
 
19
19
  // src/lib/messaging.ts
20
20
  import crypto from "crypto";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  recordOrchestrationEventBestEffort
3
- } from "./chunk-X4EDW3FH.js";
3
+ } from "./chunk-6ZUHNYAB.js";
4
4
 
5
5
  // src/lib/worktree.ts
6
6
  import { execFile, execFileSync, execSync } from "child_process";
@@ -4,10 +4,10 @@ import {
4
4
  import {
5
5
  reserveVersions,
6
6
  vectorToBlob
7
- } from "./chunk-WHQYVFE2.js";
7
+ } from "./chunk-VIIOEVAF.js";
8
8
  import {
9
9
  getClient
10
- } from "./chunk-M5DPPJLS.js";
10
+ } from "./chunk-U7I4YINB.js";
11
11
 
12
12
  // src/lib/documents.ts
13
13
  import crypto from "crypto";
@@ -270,7 +270,7 @@ async function ingestDocument(input) {
270
270
  await client.batch([documentStmt, ...chunkStmts], "write");
271
271
  const embedded = vectors.filter((v) => v !== null).length;
272
272
  const originalTexts = input.chunks.map((c) => c.text);
273
- import("./doc-graph-extractor-NFERAJNP.js").then(
273
+ import("./doc-graph-extractor-QCT4CCBN.js").then(
274
274
  ({ extractAndStoreDocumentGraph }) => extractAndStoreDocumentGraph(documentId, originalTexts)
275
275
  ).catch((err) => {
276
276
  process.stderr.write(
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  canonicalizeStackManifest
3
- } from "./chunk-JZXHLDQN.js";
3
+ } from "./chunk-7KPY52EO.js";
4
4
 
5
5
  // src/lib/stack-manifest-write.ts
6
6
  import { readFileSync, writeFileSync } from "fs";
@@ -1,10 +1,11 @@
1
+ import {
2
+ filterTimerWakeClusterArtifacts
3
+ } from "./chunk-YQGMSXT5.js";
4
+
1
5
  // src/lib/daemon-restart-report.ts
2
6
  import { existsSync, readFileSync, statSync, openSync, readSync, closeSync } from "fs";
3
7
  import path from "path";
4
8
  import os from "os";
5
- var SUSPEND_CLUSTER_MIN_MS = 6e4;
6
- var SUSPEND_CLUSTER_WINDOW_MS = 2e3;
7
- var SUSPEND_CLUSTER_MIN_TIMERS = 2;
8
9
  function logDir() {
9
10
  return path.join(os.homedir(), ".exe-os", "logs");
10
11
  }
@@ -84,23 +85,6 @@ function parseTsMs(ts) {
84
85
  const parsed = Date.parse(ts);
85
86
  return Number.isFinite(parsed) ? parsed : null;
86
87
  }
87
- function filterTimerSleepArtifacts(samples) {
88
- const clockClean = samples.filter((sample) => sample.durationMs >= 0);
89
- const candidates = clockClean.filter((sample) => sample.atMs !== null && sample.durationMs >= SUSPEND_CLUSTER_MIN_MS).sort((a, b) => a.atMs - b.atMs);
90
- const suspendArtifacts = /* @__PURE__ */ new Set();
91
- let start = 0;
92
- for (let end = 0; end < candidates.length; end++) {
93
- while (candidates[end].atMs - candidates[start].atMs > SUSPEND_CLUSTER_WINDOW_MS) {
94
- start++;
95
- }
96
- const window = candidates.slice(start, end + 1);
97
- const distinctTimers = new Set(window.map((sample) => sample.timer));
98
- if (distinctTimers.size >= SUSPEND_CLUSTER_MIN_TIMERS) {
99
- for (const sample of window) suspendArtifacts.add(sample);
100
- }
101
- }
102
- return clockClean.filter((sample) => !suspendArtifacts.has(sample));
103
- }
104
88
  function maxIso(a, b) {
105
89
  if (!b) return a;
106
90
  if (!a) return b;
@@ -153,8 +137,9 @@ function buildRestartReport(opts = {}) {
153
137
  if (data.clockJump === true || sleptMs > 1e3) continue;
154
138
  rawTimerSamples.push({ timer, durationMs, atMs: parseTsMs(rec.ts) });
155
139
  }
140
+ const clockCleanTimerSamples = rawTimerSamples.filter((sample) => sample.durationMs >= 0);
156
141
  const timerSamples = /* @__PURE__ */ new Map();
157
- for (const { timer, durationMs } of filterTimerSleepArtifacts(rawTimerSamples)) {
142
+ for (const { timer, durationMs } of filterTimerWakeClusterArtifacts(clockCleanTimerSamples)) {
158
143
  const arr = timerSamples.get(timer) ?? [];
159
144
  arr.push(durationMs);
160
145
  timerSamples.set(timer, arr);
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  fastDbInit
3
- } from "./chunk-QXAE6S3A.js";
3
+ } from "./chunk-2NPK6FIV.js";
4
4
  import {
5
5
  sessionScopeFilter
6
- } from "./chunk-YSUHXDQU.js";
6
+ } from "./chunk-IR6CEBWC.js";
7
7
  import {
8
8
  formatStatusAll,
9
9
  formatStatusDeep,
@@ -14,7 +14,7 @@ import {
14
14
  getClient,
15
15
  isCoordinatorRole,
16
16
  loadEmployees
17
- } from "./chunk-M5DPPJLS.js";
17
+ } from "./chunk-U7I4YINB.js";
18
18
  import {
19
19
  isMainModule
20
20
  } from "./chunk-6Y4B3QF6.js";
@@ -14,7 +14,7 @@ import {
14
14
  import {
15
15
  loadLicense,
16
16
  readCachedLicenseToken
17
- } from "./chunk-4VU2VCEU.js";
17
+ } from "./chunk-6VUMFHWB.js";
18
18
 
19
19
  // src/mcp/tools/support-inbox.ts
20
20
  import { z } from "zod";
@@ -1,17 +1,17 @@
1
1
  import {
2
2
  updateTask
3
- } from "./chunk-ZMVVKOOS.js";
3
+ } from "./chunk-AXXGZSW5.js";
4
4
  import {
5
5
  TASK_ALREADY_CLAIMED_PREFIX,
6
6
  TASK_CLAIM_NOT_HELD_PREFIX,
7
7
  TASK_SIDECHAIN_WRITE_BLOCKED_PREFIX
8
- } from "./chunk-YSUHXDQU.js";
8
+ } from "./chunk-IR6CEBWC.js";
9
9
  import {
10
10
  getAgentContext
11
11
  } from "./chunk-GJV3WDWM.js";
12
12
  import {
13
13
  isCoordinatorName
14
- } from "./chunk-M5DPPJLS.js";
14
+ } from "./chunk-U7I4YINB.js";
15
15
 
16
16
  // src/mcp/tools/update-task.ts
17
17
  import { z } from "zod";
@@ -72,7 +72,7 @@ function registerUpdateTask(server) {
72
72
  let callerSession;
73
73
  let callerIsSidechain = false;
74
74
  try {
75
- const { getActiveAgent: getAgent } = await import("./active-agent-LCRV3HVS.js");
75
+ const { getActiveAgent: getAgent } = await import("./active-agent-OYZRH6D2.js");
76
76
  const active = getAgent();
77
77
  callerAgentId = active.agentId;
78
78
  callerSession = resolveCallerSessionForUpdate();
@@ -263,7 +263,7 @@ async function runRegistryProxy(options = registryProxyOptionsFromEnv()) {
263
263
  await new Promise((resolve) => server.listen(options.port, options.host, resolve));
264
264
  console.log(`exe-registry-proxy listening on ${options.host ?? "0.0.0.0"}:${options.port}`);
265
265
  console.log(`proxying /v2/${options.allowedNamespace ?? "askexe"}/* -> ${options.upstream ?? "https://ghcr.io"}`);
266
- const { licenseSyncConfigFromEnv, startLicenseSyncScheduler } = await import("./license-sync-JVEXPDHN.js");
266
+ const { licenseSyncConfigFromEnv, startLicenseSyncScheduler } = await import("./license-sync-PES4GIXL.js");
267
267
  const syncConfig = licenseSyncConfigFromEnv();
268
268
  if (syncConfig) {
269
269
  startLicenseSyncScheduler(syncConfig);
@@ -212,7 +212,7 @@ async function main(args) {
212
212
  console.log("[health-gate] Starting rollback...");
213
213
  restorePreDeployBackup();
214
214
  try {
215
- const { rollbackStackUpdate, defaultStackPaths } = await import("./stack-update-AXFHJRK5.js");
215
+ const { rollbackStackUpdate, defaultStackPaths } = await import("./stack-update-2ZV6MBXF.js");
216
216
  const paths = defaultStackPaths();
217
217
  await rollbackStackUpdate({
218
218
  manifestRef: paths.manifestRef,
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  PLATFORM_PROCEDURES,
3
3
  PLATFORM_PROCEDURE_TITLES
4
- } from "./chunk-2TL5RKMC.js";
4
+ } from "./chunk-3BAGFZFN.js";
5
5
  import {
6
6
  getClient
7
- } from "./chunk-M5DPPJLS.js";
7
+ } from "./chunk-U7I4YINB.js";
8
8
 
9
9
  // src/lib/global-procedures.ts
10
10
  import { randomUUID } from "crypto";
@@ -1,22 +1,26 @@
1
1
  import {
2
2
  assertValidDbPath
3
3
  } from "./chunk-2I23RPSI.js";
4
+ import {
5
+ recordDbOpen
6
+ } from "./chunk-5YEUPUV4.js";
4
7
  import {
5
8
  listBackups
6
- } from "./chunk-LLXYWNCH.js";
9
+ } from "./chunk-AXAHRTST.js";
7
10
  import {
8
11
  getEmotionalBaseline,
9
12
  renderEmotionalBaselineSection
10
13
  } from "./chunk-OMXJMOBD.js";
11
- import {
12
- isDaemonAlive
13
- } from "./chunk-7HLWBYH7.js";
14
14
  import {
15
15
  logDaemonHealth
16
16
  } from "./chunk-BBMTVAE3.js";
17
17
  import {
18
18
  isPostgresBackendEnabled
19
19
  } from "./chunk-YMUZWC33.js";
20
+ import {
21
+ directWriterAllowed,
22
+ isDaemonAlive
23
+ } from "./chunk-V3W3SATA.js";
20
24
  import {
21
25
  EMBEDDING_DIM
22
26
  } from "./chunk-FXU7JOXK.js";
@@ -1329,7 +1333,7 @@ async function migrateReflectionDedup(client) {
1329
1333
  "ALTER TABLE memory_reflections ADD COLUMN dedup_key TEXT",
1330
1334
  "migration add memory_reflections.dedup_key"
1331
1335
  );
1332
- const { reflectionDedupKey } = await import("./memory-reflection-Q4OT4V55.js");
1336
+ const { reflectionDedupKey } = await import("./memory-reflection-LIILYJAS.js");
1333
1337
  const keyForRow = (row) => {
1334
1338
  let sources = [];
1335
1339
  try {
@@ -1751,6 +1755,7 @@ async function _attemptBackupRestore(config) {
1751
1755
  opts.encryptionKey = config.encryptionKey;
1752
1756
  }
1753
1757
  const testClient = createClient(opts);
1758
+ recordDbOpen({ dbPath: config.dbPath, source: "auto-restore-verify", writeCapable: true, checkpointTimer: false });
1754
1759
  await testClient.execute("PRAGMA busy_timeout = 30000");
1755
1760
  await testClient.execute("PRAGMA journal_mode = WAL");
1756
1761
  const isCorrupt = await _checkDbIntegrity(testClient);
@@ -1914,6 +1919,11 @@ async function initDatabase(config) {
1914
1919
  cleanupLegacyPlaintextStubs(dirname(config.dbPath), config.dbPath);
1915
1920
  } catch {
1916
1921
  }
1922
+ if (process.env.EXE_BACKGROUND_CLOUD_SYNC === "1" && !isPostgresBackendEnabled() && !await directWriterAllowed()) {
1923
+ throw new Error(
1924
+ "Background cloud-sync child refused a direct SQLite WRITER open: the daemon is alive and owns the single writer connection. Cloud-sync writes must route through the daemon socket (fastDbInit); a direct open would be an unsanctioned second writer (bug 4a6f8aaf). This is safe to retry once the daemon socket is reachable."
1925
+ );
1926
+ }
1917
1927
  await acquireDbLock();
1918
1928
  if (existsSync4(config.dbPath)) {
1919
1929
  const dbStat = statSync(config.dbPath);
@@ -1976,6 +1986,15 @@ async function initDatabase(config) {
1976
1986
  opts.encryptionKey = config.encryptionKey;
1977
1987
  }
1978
1988
  _client = createClient(opts);
1989
+ recordDbOpen({
1990
+ dbPath: config.dbPath,
1991
+ source: config.telemetrySource ?? "initDatabase",
1992
+ writeCapable: config.telemetryWriteCapable ?? process.env.EXE_DB_READONLY !== "1",
1993
+ // Must mirror the ACTUAL timer gate below (bug df26c896: daemon-only by
1994
+ // default) — a telemetry flag that disagrees with the real decision would
1995
+ // poison the regression tripwire.
1996
+ checkpointTimer: config.telemetryCheckpointTimer ?? ((process.env.EXE_IS_DAEMON === "1" || process.env.EXE_DB_CHECKPOINT_TIMER === "1") && process.env.EXE_DB_NO_CHECKPOINT_TIMER !== "1")
1997
+ });
1979
1998
  _resilientClient = wrapWithRetry(_client);
1980
1999
  _adapterClient = _resilientClient;
1981
2000
  await _client.execute("PRAGMA busy_timeout = 30000");
@@ -2033,7 +2052,8 @@ async function initDatabase(config) {
2033
2052
  }
2034
2053
  }
2035
2054
  if (_walCheckpointTimer) clearInterval(_walCheckpointTimer);
2036
- if (process.env.EXE_DB_NO_CHECKPOINT_TIMER !== "1") {
2055
+ const checkpointTimerAllowed = process.env.EXE_IS_DAEMON === "1" || process.env.EXE_DB_CHECKPOINT_TIMER === "1";
2056
+ if (checkpointTimerAllowed && process.env.EXE_DB_NO_CHECKPOINT_TIMER !== "1") {
2037
2057
  _walCheckpointTimer = setInterval(() => {
2038
2058
  void runWalCheckpoint(_client, config.dbPath, false).catch(() => {
2039
2059
  });
@@ -2061,6 +2081,9 @@ async function initDatabase(config) {
2061
2081
  }
2062
2082
  releaseDbLock();
2063
2083
  }
2084
+ function _isWalCheckpointTimerActive() {
2085
+ return _walCheckpointTimer !== null;
2086
+ }
2064
2087
  function isInitialized() {
2065
2088
  return _adapterClient !== null || _client !== null;
2066
2089
  }
@@ -2109,7 +2132,7 @@ async function sweepExpiredSoftDeletedMemories(client, options = {}) {
2109
2132
  const purgeArchived = archDays !== void 0;
2110
2133
  const BATCH_SIZE = 2e3;
2111
2134
  const MAX_BATCHES = 500;
2112
- const { cleanupCardsForMemories, cleanupGraphLinksForMemories } = await import("./graph-rag-HCQCZ2W7.js");
2135
+ const { cleanupCardsForMemories, cleanupGraphLinksForMemories } = await import("./graph-rag-WUM5JUB7.js");
2113
2136
  const softCutoff = `-${softDays} days`;
2114
2137
  const selectArgsBase = [softCutoff];
2115
2138
  let predicate = `status = 'deleted' AND COALESCE(deleted_at, timestamp) < datetime('now', ?)`;
@@ -2178,9 +2201,13 @@ function getClient() {
2178
2201
  } catch {
2179
2202
  }
2180
2203
  if (daemonAlive) {
2204
+ if (_daemonClient) {
2205
+ return _daemonClient;
2206
+ }
2181
2207
  process.stderr.write(
2182
2208
  "[database] INFO: daemon running \u2014 CLI taking direct SQLite access (single-writer CLI mode).\n"
2183
2209
  );
2210
+ return _resilientClient;
2184
2211
  } else {
2185
2212
  process.stderr.write(
2186
2213
  "[database] WARN: daemon unavailable \u2014 using direct SQLite (single-writer CLI mode).\n"
@@ -2224,6 +2251,9 @@ async function initDaemonClient() {
2224
2251
  );
2225
2252
  }
2226
2253
  }
2254
+ function isDaemonRoutingActive() {
2255
+ return _daemonClient !== null && _daemonClient._isDaemonActive();
2256
+ }
2227
2257
  function getRawClient() {
2228
2258
  if (!_client) {
2229
2259
  throw new Error("Database client not initialized. Call initDatabase() first.");
@@ -4259,6 +4289,7 @@ export {
4259
4289
  optimizeFtsIndexes,
4260
4290
  initTurso,
4261
4291
  initDatabase,
4292
+ _isWalCheckpointTimerActive,
4262
4293
  isInitialized,
4263
4294
  setExternalClient,
4264
4295
  initPostgresOnlyDatabase,
@@ -4270,6 +4301,7 @@ export {
4270
4301
  getClient,
4271
4302
  getCurrentDatabaseConfig,
4272
4303
  initDaemonClient,
4304
+ isDaemonRoutingActive,
4273
4305
  getRawClient,
4274
4306
  tryGetRawClient,
4275
4307
  _getMigrationBlockRuns,
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  completeReminder
3
- } from "./chunk-VPMAC5VB.js";
3
+ } from "./chunk-JXQB7HHZ.js";
4
4
 
5
5
  // src/mcp/tools/complete-reminder.ts
6
6
  import { z } from "zod";
@@ -0,0 +1,135 @@
1
+ import {
2
+ eventLoopHeartbeatPath,
3
+ exeDir
4
+ } from "./chunk-JY5GAZYC.js";
5
+
6
+ // src/lib/mcp-health.ts
7
+ import { existsSync, readFileSync, statSync } from "fs";
8
+ import net from "net";
9
+ import path from "path";
10
+ function daemonPidPath() {
11
+ return process.env.EXE_DAEMON_PID ?? process.env.EXE_EMBED_PID ?? path.join(exeDir(), "exed.pid");
12
+ }
13
+ function daemonSockPath() {
14
+ return process.env.EXE_DAEMON_SOCK ?? process.env.EXE_EMBED_SOCK ?? path.join(exeDir(), "exed.sock");
15
+ }
16
+ var SOCKET_PING_TIMEOUT_MS = 300;
17
+ var HEARTBEAT_FRESH_MS = 6e4;
18
+ function isDaemonAlive() {
19
+ if (_isDaemonProcess) {
20
+ return { alive: true, pid: process.pid };
21
+ }
22
+ try {
23
+ const pidPath = daemonPidPath();
24
+ if (!existsSync(pidPath)) {
25
+ if (existsSync(daemonSockPath())) return { alive: true, pid: null };
26
+ return { alive: false, pid: null };
27
+ }
28
+ const pid = parseInt(readFileSync(pidPath, "utf8").trim(), 10);
29
+ if (!Number.isFinite(pid) || pid <= 0) return { alive: false, pid: null };
30
+ process.kill(pid, 0);
31
+ return { alive: true, pid };
32
+ } catch {
33
+ return { alive: false, pid: null };
34
+ }
35
+ }
36
+ function pingUnixSocket(socketPath, timeoutMs) {
37
+ return new Promise((resolve) => {
38
+ let settled = false;
39
+ const finish = (result) => {
40
+ if (settled) return;
41
+ settled = true;
42
+ try {
43
+ sock.destroy();
44
+ } catch {
45
+ }
46
+ resolve(result);
47
+ };
48
+ const sock = net.connect(socketPath);
49
+ sock.once("connect", () => finish("alive"));
50
+ sock.once("error", (err) => {
51
+ const code = err?.code;
52
+ finish(
53
+ code === "ECONNREFUSED" || code === "ENOENT" || code === "ENOTSOCK" || code === "ENOTDIR" ? "dead" : "indeterminate"
54
+ );
55
+ });
56
+ sock.setTimeout(timeoutMs, () => finish("indeterminate"));
57
+ });
58
+ }
59
+ function livePidWithFreshHeartbeat() {
60
+ let pidAlive = false;
61
+ try {
62
+ const pidPath = daemonPidPath();
63
+ if (existsSync(pidPath)) {
64
+ const pid = parseInt(readFileSync(pidPath, "utf8").trim(), 10);
65
+ if (Number.isFinite(pid) && pid > 0) {
66
+ try {
67
+ process.kill(pid, 0);
68
+ pidAlive = true;
69
+ } catch {
70
+ pidAlive = false;
71
+ }
72
+ }
73
+ }
74
+ } catch {
75
+ pidAlive = false;
76
+ }
77
+ if (!pidAlive) return false;
78
+ try {
79
+ const st = statSync(eventLoopHeartbeatPath());
80
+ return Date.now() - st.mtimeMs <= HEARTBEAT_FRESH_MS;
81
+ } catch {
82
+ return false;
83
+ }
84
+ }
85
+ async function isDaemonWriterAuthority() {
86
+ if (_isDaemonProcess) return true;
87
+ const socketPath = daemonSockPath();
88
+ const ping = await pingUnixSocket(socketPath, SOCKET_PING_TIMEOUT_MS);
89
+ if (ping !== "dead") return true;
90
+ return livePidWithFreshHeartbeat();
91
+ }
92
+ async function directWriterAllowed() {
93
+ if (process.env.VITEST) return true;
94
+ if (process.env.EXE_IS_DAEMON === "1" || _isDaemonProcess) return true;
95
+ if (process.env.EXE_DB_DIRECT === "1") return true;
96
+ return !await isDaemonWriterAuthority();
97
+ }
98
+ function isMcpHealthy(_timeoutMs = 2e3) {
99
+ if (_isDaemonProcess) return true;
100
+ const { alive } = isDaemonAlive();
101
+ if (!alive) return false;
102
+ return existsSync(daemonSockPath());
103
+ }
104
+ var _isDaemonProcess = false;
105
+ function markAsDaemonProcess() {
106
+ _isDaemonProcess = true;
107
+ }
108
+ var EVENT_LOOP_DEGRADED_THRESHOLD_MS = 5e3;
109
+ var _eventLoopLagMs = 0;
110
+ var _eventLoopLagUpdatedAt = 0;
111
+ function setEventLoopLagMs(lagMs) {
112
+ _eventLoopLagMs = lagMs;
113
+ _eventLoopLagUpdatedAt = Date.now();
114
+ }
115
+ function getEventLoopLagMs() {
116
+ return _eventLoopLagMs;
117
+ }
118
+ function getEventLoopLagUpdatedAt() {
119
+ return _eventLoopLagUpdatedAt;
120
+ }
121
+ function isEventLoopDegraded() {
122
+ return _eventLoopLagMs > EVENT_LOOP_DEGRADED_THRESHOLD_MS;
123
+ }
124
+
125
+ export {
126
+ isDaemonAlive,
127
+ isDaemonWriterAuthority,
128
+ directWriterAllowed,
129
+ isMcpHealthy,
130
+ markAsDaemonProcess,
131
+ setEventLoopLagMs,
132
+ getEventLoopLagMs,
133
+ getEventLoopLagUpdatedAt,
134
+ isEventLoopDegraded
135
+ };
@@ -1,15 +1,15 @@
1
1
  import {
2
2
  PLATFORM_PROCEDURE_TITLES
3
- } from "./chunk-2TL5RKMC.js";
3
+ } from "./chunk-3BAGFZFN.js";
4
4
  import {
5
5
  isGhostBehaviorRow
6
- } from "./chunk-FWJFKWYA.js";
6
+ } from "./chunk-3M6TUMXM.js";
7
7
  import {
8
8
  getClient,
9
9
  getIdentity,
10
10
  listIdentities,
11
11
  updateIdentity
12
- } from "./chunk-M5DPPJLS.js";
12
+ } from "./chunk-U7I4YINB.js";
13
13
  import {
14
14
  atomicWriteJsonSync
15
15
  } from "./chunk-HSGBZSCA.js";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  sessionScopeFilter
3
- } from "./chunk-YSUHXDQU.js";
3
+ } from "./chunk-IR6CEBWC.js";
4
4
  import {
5
5
  leaseExpiryIso
6
6
  } from "./chunk-E23LNUWJ.js";