@askexenow/exe-os 0.9.239 → 0.9.244

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 (319) hide show
  1. package/deploy/compose/.env.customer.example +12 -0
  2. package/deploy/compose/.env.example +13 -1
  3. package/deploy/compose/cloudflared/config.yml.example +29 -5
  4. package/deploy/compose/docker-compose.yml +27 -7
  5. package/deploy/compose/generate-env.ts +49 -1
  6. package/deploy/compose/init-db.sql +10 -2
  7. package/deploy/stack-manifests/v0.9.json +113 -9
  8. package/dist/{active-agent-7MIVNARP.js → active-agent-KO4ZWDXE.js} +4 -4
  9. package/dist/{active-agent-55C5Y3XL.js → active-agent-KP2O52HA.js} +4 -4
  10. package/dist/{agentic-ontology-NCAQIQQI.js → agentic-ontology-DXE5J6I5.js} +1 -1
  11. package/dist/{backfill-metadata-3JP7EZ2U.js → backfill-metadata-DFTIGPXP.js} +7 -7
  12. package/dist/{background-jobs-RWL46VRD.js → background-jobs-CRXY7T4Y.js} +2 -2
  13. package/dist/{behaviors-6BGALYGW.js → behaviors-BL3QCHBT.js} +4 -4
  14. package/dist/bin/age-ontology-load.js +2 -2
  15. package/dist/bin/agentic-ontology-backfill.js +9 -9
  16. package/dist/bin/agentic-reflection-backfill.js +10 -10
  17. package/dist/bin/agentic-semantic-label.js +9 -9
  18. package/dist/bin/backfill-conversations.js +9 -9
  19. package/dist/bin/backfill-responses.js +9 -9
  20. package/dist/bin/backfill-vectors.js +11 -11
  21. package/dist/bin/bulk-sync-postgres.js +10 -10
  22. package/dist/bin/cc-doctor.js +3 -3
  23. package/dist/bin/cleanup-stale-review-tasks.js +13 -13
  24. package/dist/bin/cli.js +27 -22
  25. package/dist/bin/exe-agent-config.js +4 -4
  26. package/dist/bin/exe-agent.js +8 -8
  27. package/dist/bin/exe-assign.js +11 -11
  28. package/dist/bin/exe-boot.js +22 -22
  29. package/dist/bin/exe-call.js +5 -5
  30. package/dist/bin/exe-cloud.js +8 -8
  31. package/dist/bin/exe-dispatch.js +13 -13
  32. package/dist/bin/exe-doctor.js +1 -1
  33. package/dist/bin/exe-export-behaviors.js +10 -10
  34. package/dist/bin/exe-forget.js +9 -9
  35. package/dist/bin/exe-gateway.js +8 -8
  36. package/dist/bin/exe-healthcheck.js +3 -3
  37. package/dist/bin/exe-heartbeat.js +13 -13
  38. package/dist/bin/exe-kill.js +18 -18
  39. package/dist/bin/exe-launch-agent.js +22 -22
  40. package/dist/bin/exe-new-employee.js +8 -8
  41. package/dist/bin/exe-pending-messages.js +14 -14
  42. package/dist/bin/exe-pending-notifications.js +13 -13
  43. package/dist/bin/exe-pending-reviews.js +13 -13
  44. package/dist/bin/exe-rename.js +5 -5
  45. package/dist/bin/exe-review.js +17 -17
  46. package/dist/bin/exe-search.js +8 -8
  47. package/dist/bin/exe-session-cleanup.js +20 -20
  48. package/dist/bin/exe-settings.js +7 -7
  49. package/dist/bin/exe-start-codex.js +14 -14
  50. package/dist/bin/exe-start-opencode.js +11 -11
  51. package/dist/bin/exe-status.js +14 -14
  52. package/dist/bin/exe-support.js +3 -3
  53. package/dist/bin/exe-team.js +4 -4
  54. package/dist/bin/git-sweep.js +13 -13
  55. package/dist/bin/graph-backfill.js +8 -8
  56. package/dist/bin/graph-export.js +8 -8
  57. package/dist/bin/import-history.js +10 -10
  58. package/dist/bin/install.js +7 -7
  59. package/dist/bin/intercom-check.js +4 -4
  60. package/dist/bin/mcp-sessions.js +2 -2
  61. package/dist/bin/orchestration-metrics.js +5 -5
  62. package/dist/bin/postgres-agentic-reflection-backfill.js +4 -4
  63. package/dist/bin/postgres-agentic-semantic-backfill.js +3 -3
  64. package/dist/bin/registry-proxy.js +1 -1
  65. package/dist/bin/scan-tasks.js +13 -13
  66. package/dist/bin/setup.js +3 -3
  67. package/dist/bin/shard-migrate.js +8 -8
  68. package/dist/bin/stack-update.js +348 -20
  69. package/dist/bin/verify-stack.js +3 -383
  70. package/dist/bin/vps-backup.js +8 -160
  71. package/dist/bin/vps-health-gate.js +10 -220
  72. package/dist/{branding-I7YYX4FM.js → branding-XWMO5EDR.js} +1 -1
  73. package/dist/{capacity-monitor-IFCZKRPG.js → capacity-monitor-4CSBC7AP.js} +14 -14
  74. package/dist/{catchup-brief-PIDRWXOW.js → catchup-brief-LF5Z6Q6E.js} +17 -17
  75. package/dist/{chunk-FGJUGDNM.js → chunk-222SI7QC.js} +14 -14
  76. package/dist/{chunk-JZMVLAZ2.js → chunk-2WBBVEIB.js} +1 -1
  77. package/dist/{chunk-JDOE33C2.js → chunk-3V53HH5T.js} +4 -4
  78. package/dist/{chunk-2KZSKURT.js → chunk-57SULZJ2.js} +3 -3
  79. package/dist/{chunk-QI4IXJN7.js → chunk-5CHYEKMH.js} +7 -4
  80. package/dist/chunk-5DMAMQNU.js +168 -0
  81. package/dist/{chunk-PLQAFB3Z.js → chunk-5JIG2FP2.js} +1 -1
  82. package/dist/{chunk-UWQ3XCDG.js → chunk-5WK7X5CF.js} +2 -2
  83. package/dist/{chunk-DDPAQ4LT.js → chunk-6JAGJN77.js} +2 -2
  84. package/dist/{chunk-7F37NMKB.js → chunk-73UE2PHT.js} +1 -1
  85. package/dist/{chunk-JL3K5OTS.js → chunk-7IZWLMTP.js} +1 -1
  86. package/dist/{chunk-ELRRL2NC.js → chunk-A4K2ZT6N.js} +4 -4
  87. package/dist/{chunk-GWYADLIW.js → chunk-AHXEU5XB.js} +1 -1
  88. package/dist/{chunk-WSHMBME6.js → chunk-AWRL5FGM.js} +19 -78
  89. package/dist/{chunk-OMPCFLWA.js → chunk-BSPOEYAO.js} +1 -1
  90. package/dist/{chunk-F4TCKCKK.js → chunk-BYCNUKII.js} +47 -12
  91. package/dist/{chunk-DHVC4RN7.js → chunk-CBDPEJOR.js} +5 -5
  92. package/dist/{chunk-2H55BIV2.js → chunk-CEJO7244.js} +2 -2
  93. package/dist/{chunk-FKWZVO2T.js → chunk-CPXGLSIL.js} +3 -3
  94. package/dist/{chunk-HX5G4AS4.js → chunk-CWITU7DW.js} +2 -2
  95. package/dist/{chunk-5GG7MTRJ.js → chunk-DGBGIXCC.js} +4 -4
  96. package/dist/{chunk-IQXPMK46.js → chunk-DLZYAYVM.js} +60 -14
  97. package/dist/{chunk-PPYWQV2M.js → chunk-DR5BGWFR.js} +2 -2
  98. package/dist/{chunk-BZWKTFEB.js → chunk-ENVRFBTB.js} +2 -2
  99. package/dist/{chunk-DUVO2PUJ.js → chunk-F3GM6OOP.js} +4 -4
  100. package/dist/{chunk-HNLPLLE6.js → chunk-F7JLZXHC.js} +60 -26
  101. package/dist/{chunk-AL4DRC5H.js → chunk-FFLILAG6.js} +1 -1
  102. package/dist/{chunk-BZNI4OK5.js → chunk-GHEWRYMY.js} +18 -2
  103. package/dist/{chunk-C7SFJO5F.js → chunk-GHT4REOS.js} +5 -5
  104. package/dist/{chunk-FBWUJEXS.js → chunk-HANG6NLF.js} +4 -6
  105. package/dist/{chunk-5NJ4A4ZA.js → chunk-HCBMPZDT.js} +1 -1
  106. package/dist/chunk-HOGTZLVU.js +244 -0
  107. package/dist/{chunk-IQSCZDBQ.js → chunk-I5PIBL56.js} +3 -3
  108. package/dist/chunk-IRHNV4GY.js +388 -0
  109. package/dist/{chunk-4HROS3GJ.js → chunk-IZVKWBIP.js} +1 -1
  110. package/dist/{chunk-DKI5BTBC.js → chunk-J7V7LPPX.js} +2 -2
  111. package/dist/{chunk-TOZ5NN5V.js → chunk-JLKUVK5J.js} +1 -1
  112. package/dist/{chunk-4SC65UBG.js → chunk-JLNXKG3K.js} +1 -1
  113. package/dist/{chunk-KVSQOG3W.js → chunk-K2BDE2B5.js} +4 -4
  114. package/dist/{chunk-KDJRFJDL.js → chunk-K333WOW4.js} +30 -2
  115. package/dist/{chunk-6LBCUA2A.js → chunk-KEZXW3RP.js} +1 -1
  116. package/dist/{chunk-W7G3GY4I.js → chunk-KLQI7QY4.js} +3 -3
  117. package/dist/{chunk-UODVZGBQ.js → chunk-KN7LPTIB.js} +1 -1
  118. package/dist/{chunk-ESKBZN4Q.js → chunk-L4WRH3DL.js} +1 -1
  119. package/dist/{chunk-VFQKKMKE.js → chunk-LAOB5BKV.js} +2 -2
  120. package/dist/{chunk-MAN5LZQ4.js → chunk-LQSFP2BV.js} +1 -1
  121. package/dist/{chunk-EJ7LOTV2.js → chunk-LSFHEMVI.js} +9 -9
  122. package/dist/{chunk-RA2RO27E.js → chunk-MCESA5UW.js} +2 -2
  123. package/dist/{chunk-UPMHG7ET.js → chunk-MEIHREPM.js} +1 -1
  124. package/dist/{chunk-D5C56WO3.js → chunk-MOZ2YQ54.js} +1 -1
  125. package/dist/{chunk-CLGB3FGL.js → chunk-MPX3TRMQ.js} +2 -2
  126. package/dist/{chunk-5R75ODPS.js → chunk-NBY6R37W.js} +61 -232
  127. package/dist/{chunk-RWFGXC35.js → chunk-NEYQAEYU.js} +7 -7
  128. package/dist/{chunk-MBHZDXGN.js → chunk-NL35XNLI.js} +1 -1
  129. package/dist/{chunk-TPQVLYSV.js → chunk-NLGMHPEN.js} +1 -1
  130. package/dist/{chunk-5LMH4YHG.js → chunk-NRVV4Y5V.js} +4 -4
  131. package/dist/{chunk-GN5VHPPR.js → chunk-NVZR7T4E.js} +1 -1
  132. package/dist/{chunk-Y2L7RMGH.js → chunk-NWBHL5PI.js} +1 -1
  133. package/dist/{chunk-YPYDLW75.js → chunk-OEMX65EA.js} +1 -1
  134. package/dist/{chunk-UAFUGPKO.js → chunk-ONAQAL3O.js} +1 -1
  135. package/dist/{chunk-AVM7XZE4.js → chunk-OWQ3CCYJ.js} +7 -6
  136. package/dist/{chunk-K525WLL7.js → chunk-PI6V23GF.js} +5 -4
  137. package/dist/{chunk-AURM7FOT.js → chunk-Q2OAQPWY.js} +1 -1
  138. package/dist/{chunk-FB5VRO5S.js → chunk-QLDWASTX.js} +28 -32
  139. package/dist/{chunk-EPWDTS2Q.js → chunk-QMTGMCWB.js} +1 -1
  140. package/dist/{chunk-VI2FJY2M.js → chunk-QP4FHME2.js} +2 -2
  141. package/dist/{chunk-NJWK6J4N.js → chunk-QUNKPR6Y.js} +5 -5
  142. package/dist/{chunk-O6DAF2TY.js → chunk-QUZVAHO7.js} +2 -2
  143. package/dist/{chunk-VHKL4S4T.js → chunk-RRHSONV5.js} +2 -2
  144. package/dist/{chunk-GPF6X6HE.js → chunk-RYDHEWYY.js} +2 -2
  145. package/dist/{chunk-SVXDCELZ.js → chunk-SHN5O73O.js} +32 -4
  146. package/dist/chunk-TD5CADZ5.js +230 -0
  147. package/dist/{chunk-C2YS2AA6.js → chunk-U7WOVXBB.js} +2 -2
  148. package/dist/{chunk-FE45RXGC.js → chunk-V2GZMY6O.js} +1 -1
  149. package/dist/{chunk-PATCHPNY.js → chunk-VHALWCUO.js} +1 -1
  150. package/dist/{chunk-HLZSC5WK.js → chunk-VQAP35DA.js} +20 -18
  151. package/dist/{chunk-452XB7OZ.js → chunk-VRIMTCX2.js} +1 -1
  152. package/dist/{chunk-SUNYJ6YE.js → chunk-VT2B5BHM.js} +1 -1
  153. package/dist/{chunk-UZIJDYDA.js → chunk-VWVJVQDH.js} +2 -2
  154. package/dist/{chunk-TRZ5KA2R.js → chunk-VXIMSRTO.js} +2 -2
  155. package/dist/{chunk-DAZIV4QZ.js → chunk-WCXZF42W.js} +1 -1
  156. package/dist/{chunk-6OJJF4WP.js → chunk-XJUUWHVN.js} +1 -1
  157. package/dist/{chunk-F7LU65PQ.js → chunk-Y25OJWOQ.js} +14 -2
  158. package/dist/{chunk-2ORPA23Y.js → chunk-YMXXD2GW.js} +36 -8
  159. package/dist/{chunk-5WLMF6PL.js → chunk-YMZHTTOQ.js} +1 -1
  160. package/dist/{chunk-7DIDOQCX.js → chunk-YRVW57UW.js} +139 -125
  161. package/dist/{chunk-BRFH5X7G.js → chunk-Z7VDUS6L.js} +1 -1
  162. package/dist/{chunk-YFE6W75D.js → chunk-ZKFPHJIJ.js} +1 -1
  163. package/dist/{chunk-5WUTKDH6.js → chunk-ZVXJSQOR.js} +1 -1
  164. package/dist/{co-activation-VB4CJQZB.js → co-activation-L6I2LSJO.js} +3 -3
  165. package/dist/{co-occurrence-XZQJJIBM.js → co-occurrence-QARWYUAY.js} +3 -3
  166. package/dist/{code-context-index-FCQOPUEA.js → code-context-index-UIYQRDHD.js} +4 -4
  167. package/dist/{content-extractor-SPSH5X33.js → content-extractor-EYRVGD6O.js} +2 -2
  168. package/dist/{conversation-wiki-populator-YU35LNRK.js → conversation-wiki-populator-L7O6F3BB.js} +1 -1
  169. package/dist/{crdt-sync-KXETGV45.js → crdt-sync-R6YROKDH.js} +1 -1
  170. package/dist/{crm-webhook-JMOAHTJ6.js → crm-webhook-WK3PYJJK.js} +2 -2
  171. package/dist/{cto-delegation-gate-IJ3KQIKF.js → cto-delegation-gate-5JZORQIT.js} +12 -12
  172. package/dist/{daemon-auth-2IZACWSG.js → daemon-auth-2HEOL6VG.js} +2 -2
  173. package/dist/{daemon-orchestration-ZCY4GEI3.js → daemon-orchestration-BJ3T5MMF.js} +16 -15
  174. package/dist/{db-backup-HLX5OLIV.js → db-backup-EWS52P2W.js} +2 -2
  175. package/dist/{dreaming-2CJML3TU.js → dreaming-BOSBDRI3.js} +13 -13
  176. package/dist/{entity-boost-T5IYWWDZ.js → entity-boost-6ZVX7DFB.js} +26 -2
  177. package/dist/{exe-drift-P5OIRNSH.js → exe-drift-WRE6RADZ.js} +4 -4
  178. package/dist/{exe-export-QQL2H322.js → exe-export-7N5PBCMK.js} +8 -8
  179. package/dist/{exe-import-V4RJCUEP.js → exe-import-YOOE7S3H.js} +8 -8
  180. package/dist/{exe-key-MENJGDD7.js → exe-key-GXJSTCX2.js} +4 -4
  181. package/dist/{exe-org-3FNET2J7.js → exe-org-42YMQL75.js} +2 -2
  182. package/dist/{exe-snapshot-YRARQE7F.js → exe-snapshot-ODUCFW7G.js} +18 -18
  183. package/dist/{fast-db-init-HIJWWKAO.js → fast-db-init-YSR7RMVZ.js} +1 -1
  184. package/dist/{founder-context-BQ5NBDUV.js → founder-context-Q2HUCZX4.js} +2 -2
  185. package/dist/gateway/index.js +9 -9
  186. package/dist/{gateway-client-YGSA5QMC.js → gateway-client-4QXHKN5C.js} +1 -1
  187. package/dist/{git-staleness-IHTKCUMN.js → git-staleness-BJDTCDPC.js} +3 -3
  188. package/dist/{git-task-sweep-5ZPNQS7Y.js → git-task-sweep-L3U3T5HM.js} +13 -13
  189. package/dist/{global-procedures-XHDIZRJU.js → global-procedures-HCHEHKY2.js} +4 -4
  190. package/dist/{graph-auto-extract-5TPT67GP.js → graph-auto-extract-FP5C76LS.js} +3 -3
  191. package/dist/{hook-integrity-SB53Y7UK.js → hook-integrity-2OU3T6UC.js} +1 -1
  192. package/dist/hooks/bug-report-worker.js +15 -14
  193. package/dist/hooks/codex-stop-task-finalizer.js +15 -14
  194. package/dist/hooks/commit-complete.js +16 -16
  195. package/dist/hooks/error-recall.js +10 -10
  196. package/dist/hooks/exe-heartbeat-hook.js +5 -5
  197. package/dist/hooks/ingest-worker.js +8 -8
  198. package/dist/hooks/ingest.js +13 -13
  199. package/dist/hooks/instructions-loaded.js +7 -7
  200. package/dist/hooks/manifest.json +20 -20
  201. package/dist/hooks/notification.js +6 -6
  202. package/dist/hooks/post-compact.js +15 -15
  203. package/dist/hooks/post-tool-combined.js +7 -7
  204. package/dist/hooks/pre-compact.js +20 -20
  205. package/dist/hooks/pre-tool-use.js +28 -25
  206. package/dist/hooks/prompt-submit.js +62 -31
  207. package/dist/hooks/session-end.js +26 -26
  208. package/dist/hooks/session-start.js +39 -15
  209. package/dist/hooks/stop.js +22 -22
  210. package/dist/hooks/subagent-stop.js +15 -15
  211. package/dist/hooks/summary-worker.js +32 -27
  212. package/dist/index.js +21 -21
  213. package/dist/{installer-AMZM4MLS.js → installer-AWMUCRN4.js} +7 -7
  214. package/dist/{installer-KT5FW4CN.js → installer-HB3NH6FG.js} +9 -9
  215. package/dist/{installer-HW74W3IT.js → installer-RU6EVOBL.js} +6 -6
  216. package/dist/{intercom-queue-RNM6EPGA.js → intercom-queue-A6UJEFIF.js} +1 -1
  217. package/dist/{key-backup-status-OZ2CXUDW.js → key-backup-status-4YKCV4ZV.js} +1 -1
  218. package/dist/lib/agent-config.js +2 -2
  219. package/dist/lib/cloud-sync.js +10 -8
  220. package/dist/lib/config.js +1 -1
  221. package/dist/lib/consolidation.js +8 -8
  222. package/dist/lib/database.js +3 -3
  223. package/dist/lib/db-daemon-client.js +3 -3
  224. package/dist/lib/db.js +3 -3
  225. package/dist/lib/device-registry.js +1 -1
  226. package/dist/lib/embedder.js +4 -4
  227. package/dist/lib/employee-templates.js +5 -5
  228. package/dist/lib/employees.js +3 -3
  229. package/dist/lib/exe-daemon-client.js +3 -3
  230. package/dist/lib/exe-daemon.js +105 -74
  231. package/dist/lib/hybrid-search.js +8 -8
  232. package/dist/lib/identity.js +3 -3
  233. package/dist/lib/keychain.js +1 -1
  234. package/dist/lib/license.js +2 -2
  235. package/dist/lib/messaging.js +13 -13
  236. package/dist/lib/post-tool-memory.js +3 -3
  237. package/dist/lib/registry-proxy.js +1 -1
  238. package/dist/lib/reminders.js +4 -4
  239. package/dist/lib/schedules.js +8 -8
  240. package/dist/lib/session-registry.js +5 -5
  241. package/dist/lib/skill-learning.js +5 -5
  242. package/dist/lib/store.js +7 -7
  243. package/dist/lib/task-router.js +4 -4
  244. package/dist/lib/tasks.js +14 -13
  245. package/dist/lib/tmux-routing.js +12 -12
  246. package/dist/lib/token-spend.js +4 -4
  247. package/dist/lib/ws-client.js +1 -1
  248. package/dist/{license-gate-XJDIL6OZ.js → license-gate-6JQQFBHS.js} +3 -3
  249. package/dist/mcp/register-tools.js +68 -67
  250. package/dist/mcp/server.js +70 -69
  251. package/dist/mcp/tools/complete-reminder.js +5 -5
  252. package/dist/mcp/tools/create-reminder.js +5 -5
  253. package/dist/mcp/tools/create-task.js +16 -15
  254. package/dist/mcp/tools/deactivate-behavior.js +6 -6
  255. package/dist/mcp/tools/list-reminders.js +5 -5
  256. package/dist/mcp/tools/list-tasks.js +16 -15
  257. package/dist/mcp/tools/send-message.js +15 -15
  258. package/dist/mcp/tools/update-task.js +15 -14
  259. package/dist/{mcp-http-config-BXX3RZPR.js → mcp-http-config-XIJR5P2Z.js} +4 -4
  260. package/dist/{memory-cards-KRTP5GFM.js → memory-cards-H4BJJ5OK.js} +3 -3
  261. package/dist/{memory-graph-extractor-G532PUHC.js → memory-graph-extractor-SDGM3GVR.js} +4 -4
  262. package/dist/{memory-poisoning-defense-HJM3FQA3.js → memory-poisoning-defense-UVU67DGJ.js} +3 -3
  263. package/dist/{memory-queue-FTNBWLS4.js → memory-queue-FNT5WHXP.js} +2 -2
  264. package/dist/{memory-queue-client-DHSHEIHQ.js → memory-queue-client-JZCFYTWQ.js} +5 -5
  265. package/dist/{memory-reflection-RANRFUQL.js → memory-reflection-GGB5K35L.js} +3 -3
  266. package/dist/{notifications-4P2PVEOT.js → notifications-P3XQZDTH.js} +12 -12
  267. package/dist/{orchestration-events-IYTASMSN.js → orchestration-events-25WEKUKH.js} +4 -4
  268. package/dist/{orchestration-phase-SGA7PJ5G.js → orchestration-phase-C26XVKLZ.js} +2 -2
  269. package/dist/{orchestrator-VKVHZ4MV.js → orchestrator-VIXTY4E4.js} +14 -14
  270. package/dist/{pipeline-router-E4L5BDXN.js → pipeline-router-S5PE5U6B.js} +4 -4
  271. package/dist/{plan-limits-5O5QG55H.js → plan-limits-DGIVM42H.js} +5 -5
  272. package/dist/{prediction-log-OMWHW7FL.js → prediction-log-DOEOHDHS.js} +1 -1
  273. package/dist/{project-boot-WMI6CWRX.js → project-boot-4ZL2W7DN.js} +12 -2
  274. package/dist/{projection-worker-54KRNQSO.js → projection-worker-GG2W5OM3.js} +3 -3
  275. package/dist/{push-notifications-E2XXEWJZ.js → push-notifications-AMHVR6DF.js} +2 -2
  276. package/dist/{reranker-4NTUFNYT.js → reranker-UCPLQZE2.js} +2 -2
  277. package/dist/{review-polling-BFRJDLUA.js → review-polling-P2MWEXLR.js} +13 -13
  278. package/dist/runtime/index.js +15 -15
  279. package/dist/{session-events-KCZCWGE4.js → session-events-5CD66R6U.js} +13 -13
  280. package/dist/{session-kill-telemetry-TMNIDYWY.js → session-kill-telemetry-7FBHTEDN.js} +4 -4
  281. package/dist/{session-scope-DRZBQ32Y.js → session-scope-VMIPAZU7.js} +12 -12
  282. package/dist/{setup-wizard-TQKGDAHO.js → setup-wizard-BNR47URR.js} +3 -3
  283. package/dist/{shard-manager-G6MHCO7X.js → shard-manager-VGA2TYHM.js} +2 -2
  284. package/dist/{skill-refinement-Z5SWD3AM.js → skill-refinement-NRG4WWRW.js} +3 -3
  285. package/dist/stack-release-PFZI22WC.js +521 -0
  286. package/dist/{stack-update-NO5MNARG.js → stack-update-7F2E2MBJ.js} +3 -3
  287. package/dist/{steward-gate-7DWYS5AT.js → steward-gate-L7DJMF4C.js} +4 -4
  288. package/dist/{task-enforcement-2VL5J6JJ.js → task-enforcement-XQL77PZH.js} +52 -12
  289. package/dist/{task-scope-YHALISIB.js → task-scope-R3XKBIHL.js} +12 -12
  290. package/dist/{tasks-crud-JXZEBZFR.js → tasks-crud-DQOG2NPG.js} +12 -12
  291. package/dist/tasks-notify-4EQYG52H.js +37 -0
  292. package/dist/{tasks-review-PGPYJQF5.js → tasks-review-XPFJ4DSJ.js} +12 -12
  293. package/dist/{telemetry-upload-H7OJNBIF.js → telemetry-upload-OT5B5HUY.js} +7 -7
  294. package/dist/{token-budget-JJ7JQIA2.js → token-budget-D2LQKCAV.js} +3 -3
  295. package/dist/{tool-capability-index-WIV4K3FB.js → tool-capability-index-FAJ5ZHDF.js} +1 -1
  296. package/dist/{tool-telemetry-W4LFCHFT.js → tool-telemetry-QIF5BCLF.js} +1 -1
  297. package/dist/tui/App.js +26 -26
  298. package/dist/{tui-data-72U6N2DC.js → tui-data-UEV2QOR3.js} +108 -12
  299. package/dist/{whatsapp-config-W63RQ3AU.js → whatsapp-config-GOSELKTE.js} +7 -0
  300. package/dist/{worker-gate-SCSN6IHI.js → worker-gate-PRCKA23W.js} +2 -2
  301. package/dist/{workflow-engine-OICYBE4F.js → workflow-engine-7X6LLH3M.js} +2 -2
  302. package/dist/{worktree-JXN4RCWC.js → worktree-RICSCT2S.js} +5 -5
  303. package/package.json +1 -1
  304. package/release-notes.json +210 -298
  305. package/stack.release.json +4 -3
  306. package/dist/preflight-EAH2MI76.js +0 -287
  307. /package/dist/{chunk-H42LEGLB.js → chunk-AQBEG33D.js} +0 -0
  308. /package/dist/{chunk-AU5426YP.js → chunk-B7JGEDVE.js} +0 -0
  309. /package/dist/{chunk-YFDDTHNM.js → chunk-JXI4XUTV.js} +0 -0
  310. /package/dist/{chunk-SNYDRHV3.js → chunk-U3DUFHOT.js} +0 -0
  311. /package/dist/{chunk-N2XUH2HQ.js → chunk-VBPC7IC7.js} +0 -0
  312. /package/dist/{chunk-HTUJBTBM.js → chunk-VUS6WXQ3.js} +0 -0
  313. /package/dist/{chunk-NOLIN2YI.js → chunk-XAYRZHLV.js} +0 -0
  314. /package/dist/{core-memory-VOBGGB2Q.js → core-memory-4KAIKQRQ.js} +0 -0
  315. /package/dist/{message-queue-client-KAJN6TIJ.js → message-queue-client-S6W5VMJV.js} +0 -0
  316. /package/dist/{oauth-server-QEXRSXEP.js → oauth-server-2ESBZB7F.js} +0 -0
  317. /package/dist/{webhook-pipe-LY4XEDL7.js → webhook-pipe-ZRUVOG5H.js} +0 -0
  318. /package/dist/{wiki-acl-M3OR547L.js → wiki-acl-MFLSS6DE.js} +0 -0
  319. /package/dist/{wiki-client-MAFYBXCQ.js → wiki-client-GBPR45BQ.js} +0 -0
@@ -589,7 +589,7 @@ function auditHookOwnership() {
589
589
  }
590
590
  async function auditShards() {
591
591
  try {
592
- const { auditShardHealth } = await import("./shard-manager-G6MHCO7X.js");
592
+ const { auditShardHealth } = await import("./shard-manager-VGA2TYHM.js");
593
593
  const report = await auditShardHealth();
594
594
  return {
595
595
  total: report.total,
@@ -607,7 +607,7 @@ async function auditShards() {
607
607
  async function auditKeyHealth() {
608
608
  try {
609
609
  const { getMasterKey } = await import("./lib/keychain.js");
610
- const { getKeyBackupStatus } = await import("./key-backup-status-OZ2CXUDW.js");
610
+ const { getKeyBackupStatus } = await import("./key-backup-status-4YKCV4ZV.js");
611
611
  const key = await getMasterKey();
612
612
  const backup = getKeyBackupStatus();
613
613
  return {
@@ -859,7 +859,7 @@ function formatReport(report, flags) {
859
859
  return lines.join("\n");
860
860
  }
861
861
  async function fixNullVectors() {
862
- const { tryAcquireWorkerSlot, registerWorkerPid } = await import("./worker-gate-SCSN6IHI.js");
862
+ const { tryAcquireWorkerSlot, registerWorkerPid } = await import("./worker-gate-PRCKA23W.js");
863
863
  if (!tryAcquireWorkerSlot()) {
864
864
  process.stderr.write("[exe-doctor] Worker gate full \u2014 waiting for existing backfill workers to finish\n");
865
865
  await new Promise((r) => setTimeout(r, 5e3));
@@ -943,7 +943,7 @@ async function fixBloated(client, bloated, dryRun) {
943
943
  return chunksCreated;
944
944
  }
945
945
  async function fixShards(dryRun) {
946
- const { auditShardHealth } = await import("./shard-manager-G6MHCO7X.js");
946
+ const { auditShardHealth } = await import("./shard-manager-VGA2TYHM.js");
947
947
  const report = await auditShardHealth({ repair: true, dryRun });
948
948
  return {
949
949
  total: report.total,
@@ -982,7 +982,7 @@ function splitAtSentences(text, maxChunkSize) {
982
982
  }
983
983
  async function main(argv = process.argv.slice(2)) {
984
984
  const flags = parseFlags(argv);
985
- const { fastDbInit } = await import("./fast-db-init-HIJWWKAO.js");
985
+ const { fastDbInit } = await import("./fast-db-init-YSR7RMVZ.js");
986
986
  const client = await fastDbInit();
987
987
  const report = await runAudit(client, flags);
988
988
  console.log(formatReport(report, flags));
@@ -993,8 +993,8 @@ ${mode} Applying repairs...
993
993
  `);
994
994
  if (!flags.dryRun) {
995
995
  try {
996
- const { createBackup } = await import("./db-backup-HLX5OLIV.js");
997
- const backupPath = createBackup("pre-fix");
996
+ const { createBackup } = await import("./db-backup-EWS52P2W.js");
997
+ const backupPath = await createBackup("pre-fix");
998
998
  if (backupPath) {
999
999
  console.log(` Backup created: ${backupPath.split("/").pop()}`);
1000
1000
  }
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  loadConfig,
3
3
  saveConfig
4
- } from "./chunk-TRZ5KA2R.js";
4
+ } from "./chunk-VXIMSRTO.js";
5
5
 
6
6
  // src/lib/orchestration-phase.ts
7
7
  var ORCHESTRATION_PHASES = [
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  listReminders
3
- } from "./chunk-5WLMF6PL.js";
3
+ } from "./chunk-YMZHTTOQ.js";
4
4
 
5
5
  // src/mcp/tools/list-reminders.ts
6
6
  import { z } from "zod";
@@ -1,11 +1,11 @@
1
- import {
2
- ingest
3
- } from "./chunk-ELRRL2NC.js";
4
1
  import {
5
2
  listWorkflowDefinitions,
6
3
  runWorkflow,
7
4
  startWorkflow
8
- } from "./chunk-FE45RXGC.js";
5
+ } from "./chunk-V2GZMY6O.js";
6
+ import {
7
+ ingest
8
+ } from "./chunk-A4K2ZT6N.js";
9
9
  import {
10
10
  initCRMBridge
11
11
  } from "./chunk-ONKIWA3R.js";
@@ -4,7 +4,7 @@ import {
4
4
  } from "./chunk-K77WC6HA.js";
5
5
  import {
6
6
  getClient
7
- } from "./chunk-2H55BIV2.js";
7
+ } from "./chunk-CEJO7244.js";
8
8
 
9
9
  // src/lib/global-procedures.ts
10
10
  import { randomUUID } from "crypto";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  writeMemoryViaDaemon
3
- } from "./chunk-BZWKTFEB.js";
3
+ } from "./chunk-ENVRFBTB.js";
4
4
 
5
5
  // src/lib/auto-checkpoint.ts
6
6
  var FILE_RE = /(?:^|\s)([\w./-]+\.(?:ts|tsx|js|jsx|json|md|yml|yaml|sql|go|py|css|scss|html|sh))(?:\b|$)/g;
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  clean,
3
3
  stableId
4
- } from "./chunk-NOLIN2YI.js";
4
+ } from "./chunk-XAYRZHLV.js";
5
5
 
6
6
  // src/lib/reflection-checkpoints.ts
7
7
  function parsePayload(payload) {
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  getClient
3
- } from "./chunk-2H55BIV2.js";
3
+ } from "./chunk-CEJO7244.js";
4
4
 
5
5
  // src/lib/behaviors.ts
6
6
  import crypto from "crypto";
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  sessionScopeFilter
3
- } from "./chunk-HNLPLLE6.js";
3
+ } from "./chunk-F7JLZXHC.js";
4
4
  import {
5
5
  getClient,
6
6
  getIdentity
7
- } from "./chunk-2H55BIV2.js";
7
+ } from "./chunk-CEJO7244.js";
8
8
 
9
9
  // src/lib/dreaming.ts
10
10
  var DreamingEngine = class {
@@ -131,6 +131,7 @@ var DreamingEngine = class {
131
131
  */
132
132
  identifyPatterns(review) {
133
133
  const patterns = [];
134
+ const investigations = review.investigations ?? [];
134
135
  const errorTasks = review.tasks.filter(
135
136
  (t) => /\b(fix|bug|error|fail|broken|crash|revert)\b/i.test(t.title) || t.result && /\b(error|failed|broken|crash)\b/i.test(t.result)
136
137
  );
@@ -188,12 +189,12 @@ var DreamingEngine = class {
188
189
  confidence: 0.7
189
190
  });
190
191
  }
191
- if (review.investigations.length > 0) {
192
+ if (investigations.length > 0) {
192
193
  const catTotals = /* @__PURE__ */ new Map();
193
194
  let totalFailed = 0;
194
195
  let totalAttempts = 0;
195
196
  let totalWastedMs = 0;
196
- for (const inv of review.investigations) {
197
+ for (const inv of investigations) {
197
198
  totalAttempts += inv.totalAttempts;
198
199
  totalFailed += inv.failedAttempts;
199
200
  totalWastedMs += inv.wastedMs;
@@ -203,7 +204,7 @@ var DreamingEngine = class {
203
204
  patterns.push({
204
205
  type: "mistake",
205
206
  description: `Investigation failure rate: ${Math.round(totalFailed / totalAttempts * 100)}% of ${totalAttempts} attempts failed (${Math.round(totalWastedMs / 6e4)}min wasted)`,
206
- evidence: review.investigations.map((i) => `${i.investigationKey}: ${i.failedAttempts}/${i.totalAttempts} failed (${i.topFailureCategory})`),
207
+ evidence: investigations.map((i) => `${i.investigationKey}: ${i.failedAttempts}/${i.totalAttempts} failed (${i.topFailureCategory})`),
207
208
  frequency: totalFailed,
208
209
  confidence: Math.min(0.6 + totalFailed * 0.05, 0.95)
209
210
  });
@@ -214,7 +215,7 @@ var DreamingEngine = class {
214
215
  patterns.push({
215
216
  type: "inefficiency",
216
217
  description: `Top debugging failure: "${topCat}" (${topCount} times). ${topCat === "lack_of_context" ? "Agent didn't have enough code context before editing" : topCat === "lack_of_tools" ? "Agent couldn't verify the fix (missing tools)" : topCat === "lack_of_reasoning" ? "Agent had the info but drew wrong conclusion" : topCat === "lack_of_measurement" ? "Agent tested the wrong thing (API vs browser)" : topCat === "wrong_diagnosis" ? "Agent misidentified the root cause" : "Recurring failure pattern"}`,
217
- evidence: review.investigations.filter((i) => i.topFailureCategory === topCat).map((i) => `${i.investigationKey}: ${i.failedAttempts} failed attempts`),
218
+ evidence: investigations.filter((i) => i.topFailureCategory === topCat).map((i) => `${i.investigationKey}: ${i.failedAttempts} failed attempts`),
218
219
  frequency: topCount,
219
220
  confidence: Math.min(0.7 + topCount * 0.05, 0.95)
220
221
  });
@@ -1,16 +1,16 @@
1
1
  import {
2
2
  extractMemoryGraph
3
- } from "./chunk-O6DAF2TY.js";
3
+ } from "./chunk-QUZVAHO7.js";
4
4
  import {
5
5
  flushBatch,
6
6
  writeMemory
7
- } from "./chunk-FGJUGDNM.js";
7
+ } from "./chunk-222SI7QC.js";
8
8
  import {
9
9
  extractKeywords
10
10
  } from "./chunk-CHCA3ZM2.js";
11
11
  import {
12
12
  getActiveAgent
13
- } from "./chunk-RA2RO27E.js";
13
+ } from "./chunk-MCESA5UW.js";
14
14
 
15
15
  // src/mcp/tools/import-conversations.ts
16
16
  import { z } from "zod";
@@ -350,7 +350,8 @@ function registerImportConversations(server) {
350
350
  await flushBatch();
351
351
  await new Promise((r) => setTimeout(r, 0));
352
352
  if ((i + 1) % (YIELD_INTERVAL * 10) === 0) {
353
- console.log(`[import] ${i + 1}/${allMemories.length} memories processed, ${stored} stored`);
353
+ process.stderr.write(`[import] ${i + 1}/${allMemories.length} memories processed, ${stored} stored
354
+ `);
354
355
  }
355
356
  }
356
357
  }
@@ -6,7 +6,7 @@ import {
6
6
  getIdentity,
7
7
  listIdentities,
8
8
  updateIdentity
9
- } from "./chunk-2H55BIV2.js";
9
+ } from "./chunk-CEJO7244.js";
10
10
  import {
11
11
  atomicWriteJsonSync
12
12
  } from "./chunk-LYH5HE24.js";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  isCrdtSyncEnabled
3
- } from "./chunk-YFDDTHNM.js";
3
+ } from "./chunk-JXI4XUTV.js";
4
4
  import {
5
5
  decryptSyncBlob,
6
6
  encryptSyncBlob,
@@ -12,13 +12,13 @@ import {
12
12
  loadEmployees,
13
13
  registerBinSymlinks,
14
14
  saveEmployees
15
- } from "./chunk-2H55BIV2.js";
15
+ } from "./chunk-CEJO7244.js";
16
16
  import {
17
17
  loadDeviceId
18
- } from "./chunk-D5C56WO3.js";
18
+ } from "./chunk-MOZ2YQ54.js";
19
19
  import {
20
20
  EXE_AI_DIR
21
- } from "./chunk-TRZ5KA2R.js";
21
+ } from "./chunk-VXIMSRTO.js";
22
22
  import {
23
23
  atomicWriteJsonSync,
24
24
  atomicWriteSync,
@@ -70,6 +70,21 @@ var FETCH_TIMEOUT_MS = 3e4;
70
70
  var PUSH_BATCH_SIZE = 5e3;
71
71
  var ROSTER_LOCK_PATH = path.join(EXE_AI_DIR, "roster-merge.lock");
72
72
  var LOCK_STALE_MS = 3e4;
73
+ var _daemonCrdtSkipLogged = false;
74
+ function shouldUseCrdtMergeForCloudSync() {
75
+ if (!isCrdtSyncEnabled()) return false;
76
+ if (process.env.EXE_IS_DAEMON === "1" && process.env.EXE_DAEMON_CRDT_SYNC !== "1") {
77
+ return false;
78
+ }
79
+ return true;
80
+ }
81
+ function logDaemonCrdtSkipOnce() {
82
+ if (_daemonCrdtSkipLogged) return;
83
+ _daemonCrdtSkipLogged = true;
84
+ process.stderr.write(
85
+ "[cloud-sync] CRDT merge disabled inside daemon; using bounded SQL upsert path. Set EXE_DAEMON_CRDT_SYNC=1 only for diagnostics.\n"
86
+ );
87
+ }
73
88
  var SYNC_COOLDOWN_MS = 1e4;
74
89
  var _lastSyncPushVersion = -1;
75
90
  var _lastSyncPushTimestamp = 0;
@@ -505,8 +520,8 @@ async function cloudSync(config) {
505
520
  const pullResult = await cloudPull(lastPullVersion, config);
506
521
  let pulled = 0;
507
522
  if (pullResult.records.length > 0) {
508
- if (isCrdtSyncEnabled()) {
509
- const { initCrdtDoc, importExistingMemories, readAllMemories } = await import("./crdt-sync-KXETGV45.js");
523
+ if (shouldUseCrdtMergeForCloudSync()) {
524
+ const { initCrdtDoc, importExistingMemories, readAllMemories } = await import("./crdt-sync-R6YROKDH.js");
510
525
  initCrdtDoc();
511
526
  importExistingMemories(
512
527
  pullResult.records.map((rec) => ({
@@ -571,6 +586,9 @@ async function cloudSync(config) {
571
586
  if (stmts.length > 0) await client.batch(stmts, "write");
572
587
  pulled = pullResult.records.length;
573
588
  } else {
589
+ if (process.env.EXE_IS_DAEMON === "1" && isCrdtSyncEnabled()) {
590
+ logDaemonCrdtSkipOnce();
591
+ }
574
592
  try {
575
593
  const incomingIds = pullResult.records.map((r) => sqlSafe(r.id));
576
594
  if (incomingIds.length > 0) {
@@ -935,7 +953,7 @@ async function cloudSync(config) {
935
953
  }
936
954
  const totalMemories = await countRows("SELECT COUNT(*) as cnt FROM memories WHERE status = 'active' OR status IS NULL");
937
955
  try {
938
- const { getLatestBackup } = await import("./db-backup-HLX5OLIV.js");
956
+ const { getLatestBackup } = await import("./db-backup-EWS52P2W.js");
939
957
  const latestBackup = getLatestBackup();
940
958
  if (latestBackup) {
941
959
  const backupSize = statSync(latestBackup).size;
@@ -1577,34 +1595,11 @@ async function cloudPullTasks(config) {
1577
1595
  if (!remoteTasks || remoteTasks.length === 0) return { pulled: 0 };
1578
1596
  const client = getClient();
1579
1597
  const stmts = remoteTasks.map((t) => ({
1580
- sql: `INSERT INTO tasks
1598
+ sql: `INSERT OR IGNORE INTO tasks
1581
1599
  (id, title, assigned_to, assigned_by, project_name, priority, status, task_file, created_at, updated_at,
1582
1600
  blocked_by, parent_task_id, budget_tokens, budget_fallback_model, tokens_used, tokens_warned_at,
1583
1601
  reviewer, context, complexity, session_scope, spawn_runtime, spawn_model, result)
1584
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
1585
- ON CONFLICT(id) DO UPDATE SET
1586
- title = excluded.title,
1587
- assigned_to = excluded.assigned_to,
1588
- assigned_by = excluded.assigned_by,
1589
- project_name = excluded.project_name,
1590
- priority = excluded.priority,
1591
- status = excluded.status,
1592
- task_file = excluded.task_file,
1593
- updated_at = excluded.updated_at,
1594
- blocked_by = excluded.blocked_by,
1595
- parent_task_id = excluded.parent_task_id,
1596
- budget_tokens = excluded.budget_tokens,
1597
- budget_fallback_model = excluded.budget_fallback_model,
1598
- tokens_used = excluded.tokens_used,
1599
- tokens_warned_at = excluded.tokens_warned_at,
1600
- reviewer = excluded.reviewer,
1601
- context = excluded.context,
1602
- complexity = excluded.complexity,
1603
- session_scope = excluded.session_scope,
1604
- spawn_runtime = excluded.spawn_runtime,
1605
- spawn_model = excluded.spawn_model,
1606
- result = excluded.result
1607
- WHERE COALESCE(excluded.updated_at, '') > COALESCE(tasks.updated_at, '')`,
1602
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,
1608
1603
  args: [
1609
1604
  sqlSafe(t.id),
1610
1605
  sqlSafe(t.title),
@@ -2045,6 +2040,7 @@ async function cloudPullCoreMemory(config) {
2045
2040
  }
2046
2041
 
2047
2042
  export {
2043
+ shouldUseCrdtMergeForCloudSync,
2048
2044
  loadPgClient,
2049
2045
  disposeCloudSync,
2050
2046
  pushToPostgres,
@@ -2,7 +2,7 @@ import {
2
2
  connectEmbedDaemon,
3
3
  disconnectClient,
4
4
  embedViaClient
5
- } from "./chunk-VHKL4S4T.js";
5
+ } from "./chunk-RRHSONV5.js";
6
6
  import {
7
7
  EMBEDDING_DIM
8
8
  } from "./chunk-FXU7JOXK.js";
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  loadLicense,
3
3
  readCachedLicenseToken
4
- } from "./chunk-D5C56WO3.js";
4
+ } from "./chunk-MOZ2YQ54.js";
5
5
  import {
6
6
  EXE_AI_DIR,
7
7
  loadConfig
8
- } from "./chunk-TRZ5KA2R.js";
8
+ } from "./chunk-VXIMSRTO.js";
9
9
 
10
10
  // src/bin/exe-support.ts
11
11
  import { mkdirSync, readFileSync, unlinkSync, writeFileSync } from "fs";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  MultiAgentOrchestrator
3
- } from "./chunk-FKWZVO2T.js";
3
+ } from "./chunk-CPXGLSIL.js";
4
4
  import {
5
5
  createQuietRenderer,
6
6
  createTerminalRenderer,
@@ -206,7 +206,7 @@ function createExeOSHooks(config) {
206
206
  );
207
207
  }
208
208
  try {
209
- const { listBehaviors } = await import("./behaviors-6BGALYGW.js");
209
+ const { listBehaviors } = await import("./behaviors-BL3QCHBT.js");
210
210
  const behaviors = await listBehaviors(config.agentId, config.projectName, 12);
211
211
  if (behaviors.length > 0) {
212
212
  process.stderr.write(
@@ -244,7 +244,7 @@ function createExeOSHooks(config) {
244
244
  const ALLOWED_RE = /^(Bash|Edit|Write|Read|Glob|Grep|Agent|mcp__.*)$/;
245
245
  if (!ALLOWED_RE.test(toolName)) return;
246
246
  try {
247
- const { extractSemanticText } = await import("./content-extractor-SPSH5X33.js");
247
+ const { extractSemanticText } = await import("./content-extractor-EYRVGD6O.js");
248
248
  const { writeMemory } = await import("./lib/store.js");
249
249
  const toolInput = block.input ?? {};
250
250
  const toolResponse = result.isError ? { error: result.content } : { output: result.content };
@@ -327,7 +327,7 @@ function createExeOSHooks(config) {
327
327
  async onSubagentStop(_reason) {
328
328
  try {
329
329
  const { getClient } = await import("./lib/database.js");
330
- const { sessionScopeFilter } = await import("./task-scope-YHALISIB.js");
330
+ const { sessionScopeFilter } = await import("./task-scope-R3XKBIHL.js");
331
331
  const client = getClient();
332
332
  const ehScope = sessionScopeFilter();
333
333
  const tasks = await client.execute({
@@ -419,7 +419,7 @@ function createExeOSHooks(config) {
419
419
  try {
420
420
  const { writeMemory, flushBatch } = await import("./lib/store.js");
421
421
  const { getClient } = await import("./lib/database.js");
422
- const { sessionScopeFilter: cpScopeFilter } = await import("./task-scope-YHALISIB.js");
422
+ const { sessionScopeFilter: cpScopeFilter } = await import("./task-scope-R3XKBIHL.js");
423
423
  const client = getClient();
424
424
  const cpScope = cpScopeFilter();
425
425
  const tasks = await client.execute({
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  getClient
3
- } from "./chunk-2H55BIV2.js";
3
+ } from "./chunk-CEJO7244.js";
4
4
 
5
5
  // src/lib/memory-graph-extractor.ts
6
6
  function entityId(type, name) {
@@ -247,7 +247,7 @@ async function upsertMemoryGraph(result, memoryId) {
247
247
  });
248
248
  }
249
249
  try {
250
- const { createCoOccurrenceEdges } = await import("./co-occurrence-XZQJJIBM.js");
250
+ const { createCoOccurrenceEdges } = await import("./co-occurrence-QARWYUAY.js");
251
251
  await createCoOccurrenceEdges(result.entities, memoryId);
252
252
  } catch {
253
253
  }
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  ensureDaemonToken,
3
3
  readDaemonToken
4
- } from "./chunk-JL3K5OTS.js";
4
+ } from "./chunk-7IZWLMTP.js";
5
5
  import {
6
6
  requestRestart
7
7
  } from "./chunk-PWMMIGVQ.js";
8
8
  import {
9
9
  EXE_AI_DIR
10
- } from "./chunk-TRZ5KA2R.js";
10
+ } from "./chunk-VXIMSRTO.js";
11
11
 
12
12
  // src/lib/exe-daemon-client.ts
13
13
  import net from "net";
@@ -19,7 +19,7 @@ import {
19
19
  import {
20
20
  createCRMWebhookHandler,
21
21
  parseTwentyWebhook
22
- } from "./chunk-MAN5LZQ4.js";
22
+ } from "./chunk-LQSFP2BV.js";
23
23
  import {
24
24
  OllamaProvider
25
25
  } from "./chunk-FWFFZGSC.js";
@@ -49,7 +49,7 @@ import {
49
49
  retryWithBackoff,
50
50
  routeMessage,
51
51
  validateGatewayConfig
52
- } from "./chunk-5LMH4YHG.js";
52
+ } from "./chunk-NRVV4Y5V.js";
53
53
  import {
54
54
  getAccountByName,
55
55
  getAccountByPhoneNumberId,
@@ -14,19 +14,39 @@ function registryProxyOptionsFromEnv(env = process.env) {
14
14
  upstreamUsername: env.EXE_REGISTRY_PROXY_UPSTREAM_USERNAME || env.GHCR_USERNAME || "askexe",
15
15
  upstreamToken,
16
16
  pullTokens,
17
- allowedNamespace: env.EXE_REGISTRY_PROXY_ALLOWED_NAMESPACE || "askexe"
17
+ allowedNamespace: env.EXE_REGISTRY_PROXY_ALLOWED_NAMESPACE || "askexe",
18
+ licenseValidatorUrl: env.EXE_REGISTRY_PROXY_LICENSE_VALIDATOR_URL || ""
18
19
  };
19
20
  }
20
21
  function assertRegistryProxyConfig(options) {
21
22
  if (!options.upstreamToken) throw new Error("EXE_REGISTRY_PROXY_UPSTREAM_TOKEN or GHCR_TOKEN is required");
22
- if (options.pullTokens.length === 0) throw new Error("EXE_REGISTRY_PROXY_PULL_TOKENS is required");
23
- if (!options.allowedNamespace || !/^[a-z0-9._-]+$/i.test(options.allowedNamespace)) {
23
+ if (options.pullTokens.length === 0 && !options.licenseValidatorUrl) {
24
+ throw new Error("EXE_REGISTRY_PROXY_PULL_TOKENS or EXE_REGISTRY_PROXY_LICENSE_VALIDATOR_URL is required");
25
+ }
26
+ const namespace = options.allowedNamespace ?? "askexe";
27
+ if (!/^[a-z0-9._-]+$/i.test(namespace)) {
24
28
  throw new Error("EXE_REGISTRY_PROXY_ALLOWED_NAMESPACE must be a registry-safe namespace");
25
29
  }
26
30
  }
27
31
  function timingSafeIncludes(values, candidate) {
28
32
  return values.some((value) => value === candidate);
29
33
  }
34
+ function isLicenseKeyFormat(value) {
35
+ return value.startsWith("exe_sk_") || value.startsWith("exe_lk_");
36
+ }
37
+ async function validateLicenseKey(licenseKey, validatorUrl) {
38
+ try {
39
+ const res = await fetch(validatorUrl, {
40
+ method: "POST",
41
+ headers: { "content-type": "application/json" },
42
+ body: JSON.stringify({ licenseKey }),
43
+ signal: AbortSignal.timeout(5e3)
44
+ });
45
+ return res.ok;
46
+ } catch {
47
+ return false;
48
+ }
49
+ }
30
50
  function parseBasicAuth(header) {
31
51
  if (!header?.startsWith("Basic ")) return null;
32
52
  try {
@@ -112,10 +132,18 @@ function createRegistryProxyServer(options) {
112
132
  return;
113
133
  }
114
134
  const auth = parseBasicAuth(req.headers.authorization);
115
- if (!auth || !timingSafeIncludes(options.pullTokens, auth.password)) {
135
+ if (!auth) {
116
136
  unauthorized(res);
117
137
  return;
118
138
  }
139
+ const isPullToken = timingSafeIncludes(options.pullTokens, auth.password);
140
+ if (!isPullToken) {
141
+ const licenseOk = options.licenseValidatorUrl && isLicenseKeyFormat(auth.password) ? await validateLicenseKey(auth.password, options.licenseValidatorUrl) : false;
142
+ if (!licenseOk) {
143
+ unauthorized(res);
144
+ return;
145
+ }
146
+ }
119
147
  const upstreamUrl = new URL(requestUrl.pathname + requestUrl.search, upstream.origin);
120
148
  const headers = new Headers();
121
149
  for (const [key, value] of Object.entries(req.headers)) {