@askexenow/exe-os 0.9.311 → 0.9.313

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 (344) hide show
  1. package/deploy/compose/.env.askexe-control-plane.example +1 -1
  2. package/deploy/compose/.env.customer.example +11 -7
  3. package/deploy/compose/.env.default +4 -4
  4. package/deploy/compose/.env.example +7 -7
  5. package/deploy/compose/docker-compose.yml +43 -19
  6. package/deploy/compose/gateway.json +2 -2
  7. package/deploy/compose/init-db.sql +6 -20
  8. package/deploy/compose/setup.sh +74 -132
  9. package/deploy/compose/status.sh +5 -0
  10. package/deploy/stack-manifests/v0.9.json +25 -4
  11. package/dist/{active-agent-ORX47ZKW.js → active-agent-EWF2HJ3W.js} +6 -6
  12. package/dist/{active-agent-S5T2YMOR.js → active-agent-FFN5ARMC.js} +6 -6
  13. package/dist/{agentic-ontology-6KBAXLSJ.js → agentic-ontology-AAUATKUS.js} +1 -1
  14. package/dist/{backfill-metadata-FV7GX6AS.js → backfill-metadata-FBYFDOTH.js} +7 -7
  15. package/dist/{background-jobs-A2LV36UX.js → background-jobs-2QZ5IQKE.js} +5 -3
  16. package/dist/{behaviors-47CPEKJ7.js → behaviors-PQ77IPJR.js} +8 -8
  17. package/dist/bin/age-ontology-load.js +3 -3
  18. package/dist/bin/agentic-ontology-backfill.js +9 -9
  19. package/dist/bin/agentic-reflection-backfill.js +10 -10
  20. package/dist/bin/agentic-semantic-label.js +9 -9
  21. package/dist/bin/backfill-conversations.js +10 -10
  22. package/dist/bin/backfill-responses.js +10 -10
  23. package/dist/bin/backfill-vectors.js +13 -13
  24. package/dist/bin/bulk-sync-postgres.js +16 -16
  25. package/dist/bin/cc-doctor.js +9 -9
  26. package/dist/bin/cleanup-stale-review-tasks.js +15 -15
  27. package/dist/bin/cli.js +21 -21
  28. package/dist/bin/deferred-daemon-restart.js +1 -1
  29. package/dist/bin/exe-agent-config.js +6 -6
  30. package/dist/bin/exe-agent.js +14 -14
  31. package/dist/bin/exe-assign.js +12 -12
  32. package/dist/bin/exe-boot.js +78 -57
  33. package/dist/bin/exe-call.js +7 -7
  34. package/dist/bin/exe-cloud.js +17 -17
  35. package/dist/bin/exe-config-dump.js +7 -7
  36. package/dist/bin/exe-dispatch.js +15 -15
  37. package/dist/bin/exe-doctor.js +11 -2
  38. package/dist/bin/exe-export-behaviors.js +10 -10
  39. package/dist/bin/exe-forget.js +9 -9
  40. package/dist/bin/exe-gateway.js +10 -10
  41. package/dist/bin/exe-healthcheck.js +9 -9
  42. package/dist/bin/exe-heartbeat.js +15 -15
  43. package/dist/bin/exe-kill.js +18 -18
  44. package/dist/bin/exe-launch-agent.js +30 -28
  45. package/dist/bin/exe-new-employee.js +36 -15
  46. package/dist/bin/exe-pending-messages.js +16 -16
  47. package/dist/bin/exe-pending-notifications.js +15 -15
  48. package/dist/bin/exe-pending-reviews.js +15 -15
  49. package/dist/bin/exe-preflight.js +1 -1
  50. package/dist/bin/exe-rename.js +19 -29
  51. package/dist/bin/exe-review.js +17 -17
  52. package/dist/bin/exe-search.js +8 -8
  53. package/dist/bin/exe-session-cleanup.js +41 -20
  54. package/dist/bin/exe-settings.js +18 -18
  55. package/dist/bin/exe-start-codex.js +15 -15
  56. package/dist/bin/exe-start-opencode.js +11 -11
  57. package/dist/bin/exe-status.js +16 -16
  58. package/dist/bin/exe-support.js +5 -5
  59. package/dist/bin/exe-team.js +6 -6
  60. package/dist/bin/exe-watchdog.js +33 -4
  61. package/dist/bin/git-sweep.js +16 -16
  62. package/dist/bin/graph-backfill.js +8 -8
  63. package/dist/bin/graph-export.js +8 -8
  64. package/dist/bin/import-history.js +10 -10
  65. package/dist/bin/install-launchd.js +2 -2
  66. package/dist/bin/install.js +15 -15
  67. package/dist/bin/intercom-check.js +4 -4
  68. package/dist/bin/mcp-sessions.js +2 -2
  69. package/dist/bin/orchestration-metrics.js +7 -7
  70. package/dist/bin/postgres-agentic-reflection-backfill.js +5 -5
  71. package/dist/bin/postgres-agentic-semantic-backfill.js +4 -4
  72. package/dist/bin/pre-build-guard.js +12 -1
  73. package/dist/bin/scan-tasks.js +15 -15
  74. package/dist/bin/setup.js +3 -3
  75. package/dist/bin/shard-migrate.js +8 -8
  76. package/dist/bin/stack-update.js +8 -8
  77. package/dist/bin/verify-stack.js +3 -1
  78. package/dist/bin/vps-health-gate.js +1 -1
  79. package/dist/{branding-SC4BOPUY.js → branding-EDUC7TUP.js} +2 -2
  80. package/dist/{browser-session-store-DV5TDXXD.js → browser-session-store-CXQMOSEC.js} +1 -1
  81. package/dist/{capability-cards-WQVY7WSS.js → capability-cards-2U3XWCDP.js} +5 -5
  82. package/dist/{capacity-monitor-BUKYPSWR.js → capacity-monitor-ZRLW7TVL.js} +16 -16
  83. package/dist/{catchup-brief-X5IVQAOH.js → catchup-brief-FSBZVYPL.js} +18 -18
  84. package/dist/{chunk-PMEOSD6S.js → chunk-24BUDF3J.js} +9 -6
  85. package/dist/{chunk-2NVEKSSP.js → chunk-2FULKRDO.js} +56 -38
  86. package/dist/{chunk-QB5JOGPK.js → chunk-2PI6JBJL.js} +5 -4
  87. package/dist/{chunk-MTIJ2NXY.js → chunk-2PWRUIKZ.js} +1 -1
  88. package/dist/{chunk-NIZQ3CIS.js → chunk-3AMGSCRH.js} +1 -1
  89. package/dist/{chunk-7ODTYODO.js → chunk-3LGID56M.js} +10 -7
  90. package/dist/{chunk-GSY6HL3T.js → chunk-4JI54RHR.js} +5 -5
  91. package/dist/{chunk-ISILDO7P.js → chunk-4THK7IA4.js} +1 -1
  92. package/dist/{chunk-IRIPGGGL.js → chunk-4UHQYBMQ.js} +1 -1
  93. package/dist/{chunk-HQODUV3G.js → chunk-552IGUBB.js} +2 -2
  94. package/dist/{chunk-IRHNV4GY.js → chunk-5KLQCGI5.js} +72 -18
  95. package/dist/{chunk-SOT23KWW.js → chunk-63UEWYM3.js} +4 -4
  96. package/dist/{chunk-QE7UVQDP.js → chunk-6PR2RAKM.js} +1 -1
  97. package/dist/{chunk-ZZXADKAP.js → chunk-6SPUK67A.js} +2 -2
  98. package/dist/{chunk-RVXWGPD3.js → chunk-75TM3APG.js} +29 -6
  99. package/dist/{chunk-IZPO6IOZ.js → chunk-7QSXARI3.js} +1 -1
  100. package/dist/{chunk-A2YZG4AD.js → chunk-AIUXE3ZJ.js} +6 -6
  101. package/dist/{chunk-U63BZI2B.js → chunk-AJERMFD6.js} +3 -3
  102. package/dist/{chunk-BUOMSIXH.js → chunk-BMNX3YWX.js} +2 -2
  103. package/dist/{chunk-YUBTHJVV.js → chunk-BRSMAFBN.js} +1 -1
  104. package/dist/{chunk-JZW5AOWI.js → chunk-BSPALHIR.js} +2 -2
  105. package/dist/{chunk-VDYUKTNS.js → chunk-CLAYNAXC.js} +4 -5
  106. package/dist/{chunk-J3QZPDNH.js → chunk-CNQ25C4C.js} +1 -1
  107. package/dist/{chunk-GWPICNSO.js → chunk-CSTL7BMK.js} +49 -4
  108. package/dist/{chunk-5DPE7B7K.js → chunk-CTYHSVHP.js} +1 -1
  109. package/dist/{chunk-EM4EYF3P.js → chunk-CVTWQZOR.js} +13 -5
  110. package/dist/{chunk-JNARUXDC.js → chunk-CW3FPWUW.js} +2 -2
  111. package/dist/{chunk-V42BSVX6.js → chunk-CWACO2D4.js} +51 -4
  112. package/dist/{chunk-RPBTYQKJ.js → chunk-CWUCD7C7.js} +1 -1
  113. package/dist/{chunk-DFUCFLZH.js → chunk-D4EMVYI7.js} +2 -2
  114. package/dist/{chunk-W2J2RF5N.js → chunk-DIHMGQGV.js} +3 -3
  115. package/dist/{chunk-YB7U4WTY.js → chunk-DJ4RG3RK.js} +2 -2
  116. package/dist/{chunk-KSMITUGY.js → chunk-DR7QPGX4.js} +3 -3
  117. package/dist/{chunk-QNXM2HXW.js → chunk-ELFFRVNL.js} +1 -1
  118. package/dist/{chunk-QEGXNJGR.js → chunk-EV2SMRLF.js} +4 -4
  119. package/dist/{chunk-VFSYVQX4.js → chunk-F3QMXKKJ.js} +8 -2
  120. package/dist/{chunk-NCC3F6GM.js → chunk-F5XPKUPK.js} +2 -2
  121. package/dist/{chunk-43R2GILO.js → chunk-FIBL4JRZ.js} +2 -2
  122. package/dist/{chunk-B2J3BBJC.js → chunk-FQH4R6UG.js} +2 -2
  123. package/dist/{chunk-AC6DKMVS.js → chunk-FSAKWKWU.js} +1 -1
  124. package/dist/{chunk-GL5NU6IK.js → chunk-FXS5OFGH.js} +1 -1
  125. package/dist/{chunk-K7KBAJQL.js → chunk-GHJRLETI.js} +10 -10
  126. package/dist/{chunk-VQRTO7IS.js → chunk-H73TUI4Y.js} +9 -2
  127. package/dist/{chunk-IIHE3FNC.js → chunk-HSXWUZOD.js} +3 -3
  128. package/dist/{chunk-JV225JBX.js → chunk-I6RHLHVW.js} +2 -2
  129. package/dist/{chunk-S6HVQF27.js → chunk-IEDCQRGG.js} +88 -4
  130. package/dist/{chunk-4Q5VNQTV.js → chunk-IFSOVXGN.js} +3 -3
  131. package/dist/{chunk-JDYO76PI.js → chunk-ITVMRPCQ.js} +17 -9
  132. package/dist/{chunk-VT6P7FV4.js → chunk-IU44MPY3.js} +1 -1
  133. package/dist/{chunk-6OD2RVIA.js → chunk-IXTDBQYU.js} +273 -397
  134. package/dist/{chunk-2NGPZCWX.js → chunk-JB7QUK3D.js} +3 -3
  135. package/dist/{chunk-VT2B5BHM.js → chunk-JBSCL2XT.js} +2 -1
  136. package/dist/{chunk-MPX3TRMQ.js → chunk-JD5S5AAV.js} +1 -1
  137. package/dist/{chunk-XYG722JW.js → chunk-JIJKUZIO.js} +3 -3
  138. package/dist/{chunk-DKHBMIVE.js → chunk-K5C6LC2G.js} +244 -45
  139. package/dist/{chunk-DAOHCXM2.js → chunk-KH6BCYLC.js} +1 -1
  140. package/dist/{chunk-4L4R6AQJ.js → chunk-KMI4TUTW.js} +1 -1
  141. package/dist/{chunk-PHFPIUWU.js → chunk-KWOAM7TA.js} +3 -0
  142. package/dist/{chunk-RZJ6DXVE.js → chunk-L6QI2NNG.js} +1 -1
  143. package/dist/{chunk-HED6D5KR.js → chunk-MMNMQNLD.js} +43 -29
  144. package/dist/{chunk-KAVUTP5G.js → chunk-N3CRJ2VW.js} +3 -3
  145. package/dist/{chunk-OBJXZII2.js → chunk-N7LBAQGK.js} +3 -3
  146. package/dist/{chunk-LMX7UKGX.js → chunk-OUAGTQC4.js} +17 -11
  147. package/dist/{chunk-WZBUKC5N.js → chunk-OUJI2ZTY.js} +2 -2
  148. package/dist/{chunk-YUGLOZOR.js → chunk-OXTZEKVA.js} +1 -1
  149. package/dist/{chunk-OR3TAZL3.js → chunk-P4ULFI2N.js} +1 -1
  150. package/dist/{chunk-6LNSZADA.js → chunk-PVC4RNHQ.js} +50 -11
  151. package/dist/{chunk-FM7XZDZI.js → chunk-R2WP3XIN.js} +1 -1
  152. package/dist/{chunk-IBDPPBFK.js → chunk-R5IPZ5ZC.js} +1 -1
  153. package/dist/{chunk-7WDIGRSO.js → chunk-R5TZ2FC3.js} +1 -1
  154. package/dist/{chunk-2UVN2NBN.js → chunk-RICNNGYH.js} +3 -3
  155. package/dist/{chunk-WBJXJ2R4.js → chunk-RLBVY5FE.js} +17 -14
  156. package/dist/{chunk-XXJRZ75E.js → chunk-RV634O2W.js} +5 -2
  157. package/dist/{chunk-3KH6GXXX.js → chunk-RYPFOZQH.js} +2 -2
  158. package/dist/{chunk-DNFU56ZS.js → chunk-SB7W6XI4.js} +1 -1
  159. package/dist/{chunk-PPXQE7AS.js → chunk-SE6MLUOK.js} +33 -34
  160. package/dist/{chunk-65DBIEM2.js → chunk-SHIICYJW.js} +7 -1
  161. package/dist/{chunk-KPVVTHPK.js → chunk-SRMNWAHN.js} +15 -10
  162. package/dist/chunk-T2DJR7ND.js +367 -0
  163. package/dist/{chunk-Z6H6Y4BS.js → chunk-TA22MGGN.js} +1 -1
  164. package/dist/{chunk-ZOVHXTGC.js → chunk-TN7SC2ZQ.js} +1 -1
  165. package/dist/{chunk-XV5HRIXG.js → chunk-TRPGNCVB.js} +8 -8
  166. package/dist/{chunk-4BANMHJ5.js → chunk-UDZP2SHJ.js} +3 -3
  167. package/dist/{chunk-GMZMBLHT.js → chunk-UM6WUSQ7.js} +2 -2
  168. package/dist/{chunk-2EJ636HI.js → chunk-UST3MKK7.js} +1 -1
  169. package/dist/{chunk-RQ7OVXUZ.js → chunk-V2CZVZUO.js} +2 -2
  170. package/dist/{chunk-4RJJ5FJ2.js → chunk-V4UKBUUA.js} +1 -1
  171. package/dist/{chunk-EOS7VPVT.js → chunk-VA2MDALR.js} +8 -8
  172. package/dist/{chunk-SCYWCWKY.js → chunk-VG4ZH2Z3.js} +24 -10
  173. package/dist/{chunk-255DIG4B.js → chunk-VHLI6CTD.js} +1 -1
  174. package/dist/{chunk-DFIOOK5R.js → chunk-WCES22KG.js} +4 -3
  175. package/dist/{chunk-5A6KTWQL.js → chunk-WOTKNUKK.js} +126 -2
  176. package/dist/{chunk-62UZWGFX.js → chunk-WZZBGGSD.js} +63 -2
  177. package/dist/{chunk-ELXR65AN.js → chunk-X2FHTDIU.js} +6 -3
  178. package/dist/{chunk-V4BW5HFQ.js → chunk-X5I5QRC2.js} +3 -3
  179. package/dist/{chunk-X4AFBL4N.js → chunk-XCORXJ3M.js} +1 -1
  180. package/dist/{chunk-66JPZELX.js → chunk-Y5CNGG4F.js} +24 -16
  181. package/dist/{chunk-SPOXL7HF.js → chunk-YEWNIBNA.js} +9 -9
  182. package/dist/{chunk-WJ2PZGRV.js → chunk-ZAA344BL.js} +29 -2
  183. package/dist/{chunk-TN2YCFQE.js → chunk-ZGLJ2VD7.js} +5 -5
  184. package/dist/{co-activation-WN25AJOC.js → co-activation-RH46OQ3N.js} +5 -5
  185. package/dist/{co-occurrence-YP2Q3OEA.js → co-occurrence-MJWERUWY.js} +5 -5
  186. package/dist/{code-context-index-ZWONKBKX.js → code-context-index-WFUBYGQT.js} +6 -6
  187. package/dist/{content-extractor-EYRVGD6O.js → content-extractor-RHITF2KM.js} +1 -1
  188. package/dist/{conversation-wiki-populator-XFUC7S5P.js → conversation-wiki-populator-SK233TL4.js} +1 -1
  189. package/dist/{crdt-sync-ZFIFL2QM.js → crdt-sync-4R7SXTNB.js} +1 -1
  190. package/dist/{crm-webhook-DGPHULOO.js → crm-webhook-YDXX5FDK.js} +2 -2
  191. package/dist/{cto-delegation-gate-OF2A3TSS.js → cto-delegation-gate-ZJHLPK4Y.js} +14 -14
  192. package/dist/{daemon-auth-N6P2MZAV.js → daemon-auth-5FCYVQIZ.js} +3 -3
  193. package/dist/{daemon-orchestration-G4RRTPP7.js → daemon-orchestration-NBU5RZ2O.js} +18 -18
  194. package/dist/{daemon-ready-signal-3L2MJT7C.js → daemon-ready-signal-KXLL6ZFL.js} +1 -1
  195. package/dist/{db-backup-EORG4LBO.js → db-backup-BTL2FBBL.js} +9 -3
  196. package/dist/{db-restore-events-3R7G4FP4.js → db-restore-events-3A57GMLW.js} +2 -2
  197. package/dist/{doc-graph-extractor-APZS3DFD.js → doc-graph-extractor-ADYRG7DB.js} +5 -5
  198. package/dist/documents-VWPZTDFA.js +56 -0
  199. package/dist/{dreaming-Q4E3WBGY.js → dreaming-76WKGTL6.js} +15 -15
  200. package/dist/embeddings-config-FANLORDH.js +21 -0
  201. package/dist/{exe-drift-CI5R6GUT.js → exe-drift-T3IO2SPX.js} +6 -6
  202. package/dist/{exe-export-HQIQASIT.js → exe-export-6YEHSJMP.js} +9 -9
  203. package/dist/{exe-import-ULZK56WC.js → exe-import-3NERK63O.js} +9 -9
  204. package/dist/{exe-key-ILNSBGRN.js → exe-key-RCMBMLSQ.js} +8 -8
  205. package/dist/{exe-org-WQWQZRLR.js → exe-org-KCOOLUTW.js} +3 -3
  206. package/dist/{exe-snapshot-RUZTWZOF.js → exe-snapshot-JIY7MNRI.js} +18 -18
  207. package/dist/{fast-db-init-KNJRL7T3.js → fast-db-init-PVJ72264.js} +1 -1
  208. package/dist/{founder-context-QCTMEK66.js → founder-context-A4VUEKDH.js} +4 -4
  209. package/dist/gateway/index.js +17 -17
  210. package/dist/{git-staleness-KIA5YI4H.js → git-staleness-IOAHAGBI.js} +5 -5
  211. package/dist/{git-task-sweep-WH6QE7HL.js → git-task-sweep-IGM5RILF.js} +17 -15
  212. package/dist/{global-procedures-SYZZCGDS.js → global-procedures-VZL2X4RK.js} +6 -6
  213. package/dist/{graph-auto-extract-J2TIWZEE.js → graph-auto-extract-TIXRGBC5.js} +5 -5
  214. package/dist/{hook-integrity-I6PWJQER.js → hook-integrity-XNPNCMAS.js} +1 -1
  215. package/dist/hooks/bug-report-worker.js +47 -17
  216. package/dist/hooks/codex-stop-task-finalizer.js +47 -17
  217. package/dist/hooks/commit-complete.js +18 -18
  218. package/dist/hooks/error-recall.js +11 -11
  219. package/dist/hooks/exe-heartbeat-hook.js +7 -7
  220. package/dist/hooks/ingest-worker.js +39 -9
  221. package/dist/hooks/ingest.js +17 -17
  222. package/dist/hooks/instructions-loaded.js +8 -8
  223. package/dist/hooks/manifest.json +20 -20
  224. package/dist/hooks/notification.js +8 -8
  225. package/dist/hooks/post-compact.js +17 -17
  226. package/dist/hooks/post-tool-combined.js +60 -7
  227. package/dist/hooks/pre-compact.js +23 -23
  228. package/dist/hooks/pre-tool-use.js +64 -34
  229. package/dist/hooks/prompt-submit.js +40 -32
  230. package/dist/hooks/session-end.js +29 -29
  231. package/dist/hooks/session-start.js +17 -17
  232. package/dist/hooks/stop.js +24 -24
  233. package/dist/hooks/subagent-stop.js +17 -17
  234. package/dist/hooks/summary-worker.js +55 -25
  235. package/dist/index.js +27 -27
  236. package/dist/{installer-PSDYMGN7.js → installer-D7D5O4KL.js} +10 -10
  237. package/dist/{installer-3NB3IBHF.js → installer-EQP2EMNZ.js} +10 -10
  238. package/dist/{installer-IIJFCTMH.js → installer-IWRYH55Z.js} +10 -10
  239. package/dist/{key-backup-status-FNSN3NXH.js → key-backup-status-ZNGDSPLT.js} +2 -2
  240. package/dist/lib/agent-config.js +3 -3
  241. package/dist/lib/cloud-sync.js +16 -16
  242. package/dist/lib/config.js +2 -2
  243. package/dist/lib/consolidation.js +8 -8
  244. package/dist/lib/database.js +7 -5
  245. package/dist/lib/db-daemon-client.js +6 -6
  246. package/dist/lib/db.js +7 -5
  247. package/dist/lib/device-registry.js +3 -3
  248. package/dist/lib/embed-worker.js +2 -2
  249. package/dist/lib/embedder.js +6 -6
  250. package/dist/lib/employee-templates.js +7 -7
  251. package/dist/lib/employees.js +5 -5
  252. package/dist/lib/exe-daemon-client.js +5 -5
  253. package/dist/lib/exe-daemon.js +449 -89
  254. package/dist/lib/hybrid-search.js +8 -8
  255. package/dist/lib/identity.js +5 -5
  256. package/dist/lib/license.js +4 -4
  257. package/dist/lib/messaging.js +15 -15
  258. package/dist/lib/post-tool-memory.js +2 -2
  259. package/dist/lib/reminders.js +6 -6
  260. package/dist/lib/schedules.js +8 -8
  261. package/dist/lib/session-registry.js +9 -7
  262. package/dist/lib/session-wrappers.js +1 -1
  263. package/dist/lib/skill-learning.js +9 -9
  264. package/dist/lib/store.js +7 -7
  265. package/dist/lib/task-router.js +6 -6
  266. package/dist/lib/tasks.js +16 -16
  267. package/dist/lib/tmux-routing.js +14 -14
  268. package/dist/lib/token-spend.js +6 -6
  269. package/dist/{license-gate-7SDHCJUO.js → license-gate-PZOP7S2S.js} +5 -5
  270. package/dist/mcp/register-tools.js +73 -72
  271. package/dist/mcp/server.js +74 -73
  272. package/dist/mcp/tools/complete-reminder.js +7 -7
  273. package/dist/mcp/tools/create-reminder.js +7 -7
  274. package/dist/mcp/tools/create-task.js +18 -18
  275. package/dist/mcp/tools/deactivate-behavior.js +10 -10
  276. package/dist/mcp/tools/list-reminders.js +7 -7
  277. package/dist/mcp/tools/list-tasks.js +18 -18
  278. package/dist/mcp/tools/send-message.js +17 -17
  279. package/dist/mcp/tools/update-task.js +17 -17
  280. package/dist/{mcp-http-config-QSOVFXHW.js → mcp-http-config-23DHJAU4.js} +7 -7
  281. package/dist/{mcp-port-config-AWWRZA22.js → mcp-port-config-FFAMMLLE.js} +2 -1
  282. package/dist/{memory-cards-II67WFL2.js → memory-cards-CNLMHSZC.js} +5 -5
  283. package/dist/{memory-graph-extractor-PM4Q2KJG.js → memory-graph-extractor-HIXP2BQS.js} +6 -6
  284. package/dist/{memory-poisoning-defense-ECXSX7HK.js → memory-poisoning-defense-YL53IBBF.js} +5 -5
  285. package/dist/{memory-queue-VAE6WMSS.js → memory-queue-3Q5P43AM.js} +3 -3
  286. package/dist/memory-queue-client-YP2QKX6J.js +16 -0
  287. package/dist/{memory-reflection-PXF6YFDU.js → memory-reflection-VHQRUZWK.js} +5 -5
  288. package/dist/{notifications-UP7WQGG4.js → notifications-Q5NEAP6K.js} +14 -14
  289. package/dist/{orchestration-events-PZLLPCKY.js → orchestration-events-7SNWRJYE.js} +6 -6
  290. package/dist/{orchestration-phase-SJOXDB7X.js → orchestration-phase-U45T4VG3.js} +3 -3
  291. package/dist/{orchestrator-PUT45J4O.js → orchestrator-XWLKNWUG.js} +16 -16
  292. package/dist/{pipeline-router-5CRWKESM.js → pipeline-router-5IBJBH7P.js} +6 -6
  293. package/dist/{plan-limits-SH2NDFNX.js → plan-limits-PBEZVHRQ.js} +8 -8
  294. package/dist/{preferences-YWBTKW3M.js → preferences-TYTGDXQZ.js} +2 -2
  295. package/dist/{project-boot-2TCPDZ4S.js → project-boot-OHEGJD2L.js} +2 -2
  296. package/dist/{projection-worker-HWY37MNC.js → projection-worker-HELRBNDR.js} +5 -5
  297. package/dist/{prospective-memory-FQSVMCGG.js → prospective-memory-N55XRGJP.js} +5 -5
  298. package/dist/{push-notifications-DK6XA5B3.js → push-notifications-PAFNP3EC.js} +3 -3
  299. package/dist/{reranker-AALRMGMM.js → reranker-MNJSTOPR.js} +3 -3
  300. package/dist/{retrieval-health-PNWJSJNG.js → retrieval-health-W4HNR3WX.js} +1 -1
  301. package/dist/{review-polling-65JZUE3T.js → review-polling-SRYZU2PI.js} +15 -15
  302. package/dist/runtime/index.js +22 -22
  303. package/dist/{session-events-EJ3OSAA6.js → session-events-L4DK5J6J.js} +15 -15
  304. package/dist/{session-kill-telemetry-3HGM7SNQ.js → session-kill-telemetry-U2YHKHCB.js} +15 -15
  305. package/dist/{session-scope-JGDYAMJO.js → session-scope-JTPHECAU.js} +14 -14
  306. package/dist/{setup-wizard-44LMFM2C.js → setup-wizard-IP5R66LR.js} +3 -3
  307. package/dist/{shard-manager-KUCJPLC6.js → shard-manager-RASGFMGS.js} +3 -3
  308. package/dist/{skill-refinement-DUOO6B7V.js → skill-refinement-VTYL4OMJ.js} +5 -5
  309. package/dist/{stack-release-XYMKU7NT.js → stack-release-TOCCJQOF.js} +244 -45
  310. package/dist/{stack-update-XHQJRJEP.js → stack-update-MRNVHUZZ.js} +15 -5
  311. package/dist/{steward-gate-6NWRDLX2.js → steward-gate-JEVUDTBI.js} +6 -6
  312. package/dist/{task-enforcement-UOULTGFB.js → task-enforcement-VFSAAZUN.js} +14 -14
  313. package/dist/{task-scope-P5STKYAC.js → task-scope-P4VLIQNP.js} +14 -14
  314. package/dist/{tasks-crud-24HMTULR.js → tasks-crud-SC3ERIUR.js} +14 -14
  315. package/dist/{tasks-notify-LAIU7UUI.js → tasks-notify-WJYBUCIB.js} +15 -15
  316. package/dist/{tasks-review-AFJAU2DY.js → tasks-review-XPVPHCGD.js} +14 -14
  317. package/dist/{telemetry-upload-DWFGC2XJ.js → telemetry-upload-4QEYQROW.js} +10 -10
  318. package/dist/{token-budget-4RFZKWGH.js → token-budget-UBOP3HVE.js} +6 -6
  319. package/dist/{tool-capability-index-ZEXBWKUZ.js → tool-capability-index-SHYCBE2Z.js} +1 -1
  320. package/dist/{tool-telemetry-BS5JXM5M.js → tool-telemetry-CDNPES5B.js} +1 -1
  321. package/dist/tui/App.js +27 -27
  322. package/dist/{tui-data-UNO5B7PU.js → tui-data-HVYY7GRK.js} +14 -14
  323. package/dist/{worker-gate-C6CTTYMD.js → worker-gate-KQTODSUQ.js} +3 -3
  324. package/dist/{workflow-engine-4W2KYCDV.js → workflow-engine-OP2DQISD.js} +2 -2
  325. package/dist/{working-memory-FXHQCJJE.js → working-memory-PY4AG577.js} +22 -2
  326. package/dist/{worktree-2CXY6NEB.js → worktree-Z2G4CP4Z.js} +7 -7
  327. package/dist/{worktree-sweep-K3CJFSUL.js → worktree-sweep-LWSCAZW6.js} +8 -8
  328. package/package.json +2 -2
  329. package/release-notes.json +40 -88
  330. package/stack.release.json +11 -11
  331. package/dist/memory-queue-client-HLURQEV6.js +0 -16
  332. /package/dist/{chunk-J3SR5MGG.js → chunk-GIS4GBZE.js} +0 -0
  333. /package/dist/{chunk-AE74NOE6.js → chunk-NAPBIDGH.js} +0 -0
  334. /package/dist/{chunk-I3DPCSDG.js → chunk-OJS2H5HR.js} +0 -0
  335. /package/dist/{chunk-K4BKJJ4F.js → chunk-PCRRDXGL.js} +0 -0
  336. /package/dist/{chunk-MQCTK6EF.js → chunk-RRYJTPVW.js} +0 -0
  337. /package/dist/{chunk-2NS3QRMJ.js → chunk-ZIVUMDHA.js} +0 -0
  338. /package/dist/{core-memory-OC5ITKKV.js → core-memory-4JWCAGJI.js} +0 -0
  339. /package/dist/{entity-boost-NF3LE6OJ.js → entity-boost-AU342QRK.js} +0 -0
  340. /package/dist/{message-queue-client-4VDU6BZY.js → message-queue-client-IXYLJJVJ.js} +0 -0
  341. /package/dist/{oauth-server-EWUL7DMD.js → oauth-server-F4QWESK2.js} +0 -0
  342. /package/dist/{webhook-pipe-DHIGZHPW.js → webhook-pipe-S4CWK6H5.js} +0 -0
  343. /package/dist/{wiki-acl-CONNF6ES.js → wiki-acl-6GZHUA44.js} +0 -0
  344. /package/dist/{wiki-client-N6PT5P7W.js → wiki-client-CIJXRMKL.js} +0 -0
@@ -1,11 +1,11 @@
1
+ import {
2
+ formatDegradations,
3
+ getRetrievalHealth
4
+ } from "./chunk-BRSMAFBN.js";
1
5
  import {
2
6
  buildRestartReport,
3
7
  formatRestartReport
4
8
  } from "./chunk-KQ4Z2G24.js";
5
- import {
6
- formatDegradations,
7
- getRetrievalHealth
8
- } from "./chunk-YUBTHJVV.js";
9
9
  import {
10
10
  blobToVector
11
11
  } from "./chunk-OTVEIJUQ.js";
@@ -14,6 +14,9 @@ import {
14
14
  LEGACY_SPLIT_POST_TOOL_HOOK_MARKERS,
15
15
  manifestEntryForCommand
16
16
  } from "./chunk-L3TB7CC3.js";
17
+ import {
18
+ offloadReadIfMain
19
+ } from "./chunk-VG4ZH2Z3.js";
17
20
  import {
18
21
  isMainModule
19
22
  } from "./chunk-6Y4B3QF6.js";
@@ -316,24 +319,28 @@ function agentFilter(flags) {
316
319
  }
317
320
  async function auditStats(client, flags) {
318
321
  const { clause, args } = agentFilter(flags);
319
- const summary = await client.execute({
320
- sql: `SELECT COUNT(*) as total,
322
+ const summary = await offloadReadIfMain(
323
+ client,
324
+ `SELECT COUNT(*) as total,
321
325
  COUNT(DISTINCT agent_id) as agents,
322
326
  COUNT(DISTINCT project_name) as projects,
323
327
  MIN(timestamp) as oldest,
324
328
  MAX(timestamp) as newest
325
329
  FROM memories${clause}`,
326
- args
327
- });
330
+ args,
331
+ true
332
+ );
328
333
  const row = summary.rows[0];
329
- const perAgent = await client.execute({
330
- sql: `SELECT agent_id, COUNT(*) as count,
334
+ const perAgent = await offloadReadIfMain(
335
+ client,
336
+ `SELECT agent_id, COUNT(*) as count,
331
337
  SUM(CASE WHEN vector IS NULL THEN 1 ELSE 0 END) as null_vectors
332
338
  FROM memories${clause}
333
339
  GROUP BY agent_id
334
340
  ORDER BY count DESC`,
335
- args
336
- });
341
+ args,
342
+ true
343
+ );
337
344
  return {
338
345
  total: Number(row.total),
339
346
  agents: Number(row.agents),
@@ -350,25 +357,29 @@ async function auditStats(client, flags) {
350
357
  async function auditNullVectors(client, flags) {
351
358
  const { clause, args } = agentFilter(flags);
352
359
  const where = clause ? clause + " AND vector IS NULL" : " WHERE vector IS NULL";
353
- const result = await client.execute({
354
- sql: `SELECT COUNT(*) as cnt FROM memories${where}`,
355
- args
356
- });
360
+ const result = await offloadReadIfMain(
361
+ client,
362
+ `SELECT COUNT(*) as cnt FROM memories${where}`,
363
+ args,
364
+ true
365
+ );
357
366
  return Number(result.rows[0].cnt);
358
367
  }
359
368
  async function auditDuplicates(client, flags) {
360
369
  const { clause, args } = agentFilter(flags);
361
370
  const liveOnly = " AND COALESCE(status, 'active') = 'active'";
362
371
  const backfillExclude = clause ? " AND tool_name != 'ConversationBackfill'" : " WHERE tool_name != 'ConversationBackfill'";
363
- const groups = await client.execute({
364
- sql: `SELECT SUBSTR(raw_text, 1, 200) as text_head, LENGTH(raw_text) as text_len, COUNT(*) as cnt
372
+ const groups = await offloadReadIfMain(
373
+ client,
374
+ `SELECT SUBSTR(raw_text, 1, 200) as text_head, LENGTH(raw_text) as text_len, COUNT(*) as cnt
365
375
  FROM memories${clause}${backfillExclude}${liveOnly}
366
376
  GROUP BY text_head, text_len
367
377
  HAVING cnt > 1
368
378
  ORDER BY cnt DESC
369
379
  LIMIT 500`,
370
- args
371
- });
380
+ args,
381
+ true
382
+ );
372
383
  const duplicates = [];
373
384
  for (const g of groups.rows) {
374
385
  const textHead = g.text_head;
@@ -377,10 +388,12 @@ async function auditDuplicates(client, flags) {
377
388
  let filterClause = " WHERE SUBSTR(raw_text, 1, 200) = ? AND LENGTH(raw_text) = ?" + liveOnly;
378
389
  if (flags.agent) filterClause += " AND agent_id = ?";
379
390
  if (flags.project) filterClause += " AND project_name = ?";
380
- const ids = await client.execute({
381
- sql: `SELECT id, raw_text FROM memories${filterClause} ORDER BY timestamp DESC LIMIT 10000`,
382
- args: filterArgs
383
- });
391
+ const ids = await offloadReadIfMain(
392
+ client,
393
+ `SELECT id, raw_text FROM memories${filterClause} ORDER BY timestamp DESC LIMIT 10000`,
394
+ filterArgs,
395
+ true
396
+ );
384
397
  const byText = /* @__PURE__ */ new Map();
385
398
  for (const r of ids.rows) {
386
399
  const text = r.raw_text;
@@ -405,13 +418,15 @@ async function auditBloated(client, flags) {
405
418
  const { clause, args } = agentFilter(flags);
406
419
  const splitGuard = " AND COALESCE(consolidated, 0) = 0 AND COALESCE(status, 'active') = 'active'";
407
420
  const where = (clause ? clause + " AND LENGTH(raw_text) > 5120 AND tool_name != 'ConversationBackfill'" : " WHERE LENGTH(raw_text) > 5120 AND tool_name != 'ConversationBackfill'") + splitGuard;
408
- const result = await client.execute({
409
- sql: `SELECT id, agent_id, LENGTH(raw_text) as size, tool_name
421
+ const result = await offloadReadIfMain(
422
+ client,
423
+ `SELECT id, agent_id, LENGTH(raw_text) as size, tool_name
410
424
  FROM memories${where}
411
425
  ORDER BY size DESC
412
426
  LIMIT 100`,
413
- args
414
- });
427
+ args,
428
+ true
429
+ );
415
430
  return result.rows.map((r) => ({
416
431
  id: r.id,
417
432
  agent_id: r.agent_id,
@@ -420,19 +435,22 @@ async function auditBloated(client, flags) {
420
435
  }));
421
436
  }
422
437
  async function auditFts(client) {
423
- const memCount = await client.execute("SELECT COUNT(*) as cnt FROM memories");
424
- const ftsCount = await client.execute("SELECT COUNT(*) as cnt FROM memories_fts");
438
+ const memCount = await offloadReadIfMain(client, "SELECT COUNT(*) as cnt FROM memories", [], true);
439
+ const ftsCount = await offloadReadIfMain(client, "SELECT COUNT(*) as cnt FROM memories_fts", [], true);
425
440
  const mc = Number(memCount.rows[0].cnt);
426
441
  const fc = Number(ftsCount.rows[0].cnt);
427
442
  return { memoryCount: mc, ftsCount: fc, inSync: mc === fc };
428
443
  }
429
444
  async function auditOrphanedProjects(client) {
430
- const result = await client.execute(
445
+ const result = await offloadReadIfMain(
446
+ client,
431
447
  `SELECT project_name, COUNT(*) as cnt
432
448
  FROM memories
433
449
  WHERE tool_name != 'ConversationBackfill'
434
450
  GROUP BY project_name
435
- ORDER BY cnt DESC`
451
+ ORDER BY cnt DESC`,
452
+ [],
453
+ true
436
454
  );
437
455
  const orphans = [];
438
456
  const home = process.env.HOME ?? process.env.USERPROFILE ?? "";
@@ -603,7 +621,7 @@ function auditHookOwnership() {
603
621
  }
604
622
  async function auditShards() {
605
623
  try {
606
- const { auditShardHealth } = await import("./shard-manager-KUCJPLC6.js");
624
+ const { auditShardHealth } = await import("./shard-manager-RASGFMGS.js");
607
625
  const report = await auditShardHealth();
608
626
  return {
609
627
  total: report.total,
@@ -621,7 +639,7 @@ async function auditShards() {
621
639
  async function auditKeyHealth() {
622
640
  try {
623
641
  const { getMasterKey } = await import("./lib/keychain.js");
624
- const { getKeyBackupStatus } = await import("./key-backup-status-FNSN3NXH.js");
642
+ const { getKeyBackupStatus } = await import("./key-backup-status-ZNGDSPLT.js");
625
643
  const key = await getMasterKey();
626
644
  const backup = getKeyBackupStatus();
627
645
  return {
@@ -941,7 +959,7 @@ function formatReport(report, flags) {
941
959
  return lines.join("\n");
942
960
  }
943
961
  async function fixNullVectors() {
944
- const { tryAcquireWorkerSlot, registerWorkerPid } = await import("./worker-gate-C6CTTYMD.js");
962
+ const { tryAcquireWorkerSlot, registerWorkerPid } = await import("./worker-gate-KQTODSUQ.js");
945
963
  if (!tryAcquireWorkerSlot()) {
946
964
  process.stderr.write("[exe-doctor] Worker gate full \u2014 waiting for existing backfill workers to finish\n");
947
965
  await new Promise((r) => setTimeout(r, 5e3));
@@ -1055,7 +1073,7 @@ function shouldFixShards(shards) {
1055
1073
  return shards.unreadable > 0 || shards.schemaMismatches > 0;
1056
1074
  }
1057
1075
  async function fixShards(dryRun) {
1058
- const { auditShardHealth } = await import("./shard-manager-KUCJPLC6.js");
1076
+ const { auditShardHealth } = await import("./shard-manager-RASGFMGS.js");
1059
1077
  const report = await auditShardHealth({ repair: true, dryRun });
1060
1078
  return {
1061
1079
  total: report.total,
@@ -1126,7 +1144,7 @@ async function main(argv = process.argv.slice(2)) {
1126
1144
  console.log(formatRestartReport(restartReport));
1127
1145
  return emptyAuditReport();
1128
1146
  }
1129
- const { fastDbInit } = await import("./fast-db-init-KNJRL7T3.js");
1147
+ const { fastDbInit } = await import("./fast-db-init-PVJ72264.js");
1130
1148
  const client = await fastDbInit();
1131
1149
  const report = await runAudit(client, flags);
1132
1150
  console.log(formatReport(report, flags));
@@ -1137,7 +1155,7 @@ ${mode} Applying repairs...
1137
1155
  `);
1138
1156
  if (!flags.dryRun) {
1139
1157
  try {
1140
- const { createBackup } = await import("./db-backup-EORG4LBO.js");
1158
+ const { createBackup } = await import("./db-backup-BTL2FBBL.js");
1141
1159
  const backupPath = await createBackup("pre-fix");
1142
1160
  if (backupPath) {
1143
1161
  console.log(` Backup created: ${backupPath.split("/").pop()}`);
@@ -4,11 +4,11 @@ import {
4
4
  } from "./chunk-NGP6LSV2.js";
5
5
  import {
6
6
  EXE_AI_DIR
7
- } from "./chunk-DFIOOK5R.js";
7
+ } from "./chunk-WCES22KG.js";
8
8
  import {
9
9
  atomicWriteJsonSync,
10
10
  ensurePrivateDirSync
11
- } from "./chunk-65DBIEM2.js";
11
+ } from "./chunk-SHIICYJW.js";
12
12
 
13
13
  // src/lib/agent-config.ts
14
14
  import { readFileSync, existsSync } from "fs";
@@ -30,7 +30,7 @@ var RUNTIME_LABELS = {
30
30
  opencode: "OpenCode (open source)"
31
31
  };
32
32
  var DEFAULT_MODELS = {
33
- claude: "claude-opus-4.6",
33
+ claude: "claude-sonnet-4",
34
34
  codex: RUNTIME_TABLE.codex?.defaultModel ?? "gpt-5.4",
35
35
  opencode: RUNTIME_TABLE.opencode?.defaultModel ?? "anthropic/claude-sonnet-4-6"
36
36
  };
@@ -56,7 +56,8 @@ function getAgentRuntime(agentId) {
56
56
  return { runtime: DEFAULT_RUNTIME, model: DEFAULT_MODELS[DEFAULT_RUNTIME] };
57
57
  }
58
58
  function normalizeCcModelName(model) {
59
- let ccModel = model.replace(/(\d+)\.(\d+)/g, "$1-$2");
59
+ let ccModel = model.replace(/^[a-z0-9.-]+\//i, "");
60
+ ccModel = ccModel.replace(/(\d+)\.(\d+)/g, "$1-$2");
60
61
  const isExplicit1m = /-1m$/.test(ccModel) || ccModel.includes("[1m]");
61
62
  if ((/claude-(opus|sonnet)-4-[6-9]/.test(ccModel) || /claude-fable-\d+/.test(ccModel)) && !isExplicit1m) {
62
63
  ccModel += "[1m]";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  getGitRoot,
3
3
  isWorktreeDirty
4
- } from "./chunk-RZJ6DXVE.js";
4
+ } from "./chunk-L6QI2NNG.js";
5
5
 
6
6
  // src/lib/worktree-sweep.ts
7
7
  import { execFileSync } from "child_process";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  loadEmployees
3
- } from "./chunk-SCYWCWKY.js";
3
+ } from "./chunk-VG4ZH2Z3.js";
4
4
 
5
5
  // src/lib/agent-symlinks.ts
6
6
  import os from "os";
@@ -11,7 +11,7 @@ var REQUIRED_INFRA = {
11
11
  var FORBIDDEN_HOST_SUBSTRINGS = ["askexe.com", "askexenow.com"];
12
12
  var CLIENT_FACING_HOST_FIELDS = ["healthHost", "healthUrl"];
13
13
  var BYOK_ENFORCEMENT_VARS = ["EXE_ALLOW_DIRECT_PROVIDER_KEYS", "EXE_BILLING_MODE"];
14
- var BYOK_LEGACY_VARS = ["BYOK_ENABLED"];
14
+ var BYOK_ALIAS_VARS = ["BYOK_ENABLED"];
15
15
  function resolveDefaultManifest() {
16
16
  let dir = path.dirname(new URL(import.meta.url).pathname);
17
17
  for (let i = 0; i < 6; i++) {
@@ -56,11 +56,15 @@ function resolveStack(manifest, requested) {
56
56
  const entry = manifest.stacks[version];
57
57
  return { version, services: entry?.services ?? {} };
58
58
  }
59
+ function isAskExeImage(image) {
60
+ return image.startsWith("ghcr.io/askexe/") || image.startsWith("update.askexe.com/askexe/");
61
+ }
59
62
  function checkDigestPinning(services) {
60
63
  const bug = "ee16e7ef (digest-pinning)";
61
64
  const offenders = [];
62
65
  for (const [name, svc] of Object.entries(services)) {
63
66
  if (!svc.image) continue;
67
+ if (!isAskExeImage(svc.image)) continue;
64
68
  const { hasDigest } = parseImageRef(svc.image);
65
69
  if (!hasDigest) offenders.push(`${name}=${svc.image}`);
66
70
  }
@@ -154,14 +158,13 @@ function checkEnvContract(env, compose) {
154
158
  for (const m of compose.text.matchAll(/\$\{?([A-Z][A-Z0-9_]+)/g)) declared.add(m[1]);
155
159
  }
156
160
  const missingEnforcement = BYOK_ENFORCEMENT_VARS.filter((v) => !declared.has(v));
157
- const exposedLegacy = BYOK_LEGACY_VARS.filter((v) => declared.has(v));
158
- if (missingEnforcement.length > 0 && exposedLegacy.length > 0) {
161
+ const aliasDeclared = BYOK_ALIAS_VARS.filter((v) => declared.has(v));
162
+ if (aliasDeclared.length > 0) {
159
163
  return {
160
164
  check: "env-contract",
161
- status: "fail",
165
+ status: "pass",
162
166
  bug,
163
- offenders: [...exposedLegacy.map((v) => `exposes ${v}`), ...missingEnforcement.map((v) => `missing ${v}`)],
164
- message: `BYOK env-contract mismatch \u2014 customer surface exposes ${exposedLegacy.join("/")} but billing enforcement reads ${BYOK_ENFORCEMENT_VARS.join("+")} (absent). BYOK can bypass billing.`
167
+ message: `BYOK enforcement satisfied via alias (${aliasDeclared.join(", ")} \u2192 byok + allow-direct-keys)`
165
168
  };
166
169
  }
167
170
  if (missingEnforcement.length > 0) {
@@ -170,7 +173,7 @@ function checkEnvContract(env, compose) {
170
173
  status: "warn",
171
174
  bug,
172
175
  offenders: missingEnforcement.map((v) => `missing ${v}`),
173
- message: `billing enforcement vars not declared: ${missingEnforcement.join(", ")}`
176
+ message: `billing enforcement vars not declared: ${missingEnforcement.join(", ")} (and no ${BYOK_ALIAS_VARS.join("/")} alias) \u2014 defaults to metered`
174
177
  };
175
178
  }
176
179
  return { check: "env-contract", status: "pass", bug, message: `BYOK enforcement vars present (${BYOK_ENFORCEMENT_VARS.join(", ")})` };
@@ -1,24 +1,24 @@
1
1
  import {
2
2
  recordSessionKill
3
- } from "./chunk-LMX7UKGX.js";
3
+ } from "./chunk-OUAGTQC4.js";
4
4
  import {
5
5
  sessionScopeFilter,
6
6
  verifyPaneAtCapacity,
7
7
  writeNotification
8
- } from "./chunk-HED6D5KR.js";
8
+ } from "./chunk-MMNMQNLD.js";
9
9
  import {
10
10
  listSessions
11
- } from "./chunk-WJ2PZGRV.js";
11
+ } from "./chunk-ZAA344BL.js";
12
12
  import {
13
13
  getTransport
14
14
  } from "./chunk-KOO3J5PV.js";
15
15
  import {
16
16
  recordOrchestrationEventBestEffort
17
- } from "./chunk-OR3TAZL3.js";
17
+ } from "./chunk-P4ULFI2N.js";
18
18
  import {
19
19
  getClient,
20
20
  isCoordinatorName
21
- } from "./chunk-SCYWCWKY.js";
21
+ } from "./chunk-VG4ZH2Z3.js";
22
22
 
23
23
  // src/lib/capacity-monitor.ts
24
24
  var CAPACITY_PATTERNS = [
@@ -4,7 +4,7 @@ import {
4
4
  } from "./chunk-VUH67PT4.js";
5
5
  import {
6
6
  getClient
7
- } from "./chunk-SCYWCWKY.js";
7
+ } from "./chunk-VG4ZH2Z3.js";
8
8
 
9
9
  // src/lib/global-procedures.ts
10
10
  import { randomUUID } from "crypto";
@@ -2,7 +2,7 @@ import {
2
2
  getClient,
3
3
  isCoordinatorName,
4
4
  loadEmployeesSync
5
- } from "./chunk-SCYWCWKY.js";
5
+ } from "./chunk-VG4ZH2Z3.js";
6
6
 
7
7
  // src/lib/steward-gate.ts
8
8
  import crypto from "crypto";
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  sendMessage
3
- } from "./chunk-4Q5VNQTV.js";
3
+ } from "./chunk-IFSOVXGN.js";
4
4
  import {
5
5
  getActiveAgent
6
- } from "./chunk-BUOMSIXH.js";
6
+ } from "./chunk-BMNX3YWX.js";
7
7
 
8
8
  // src/mcp/tools/send-message.ts
9
9
  import { z } from "zod";
@@ -24,6 +24,38 @@ var FRONTEND_URLS = {
24
24
  "exe-monitor-hub": "http://127.0.0.1:8090"
25
25
  };
26
26
  var GOTRUE_TOKEN_URL = "http://127.0.0.1:9999/token?grant_type=password";
27
+ function parseComposeServiceNames(composeFile) {
28
+ const names = /* @__PURE__ */ new Set();
29
+ if (!existsSync(composeFile)) return names;
30
+ let raw;
31
+ try {
32
+ raw = readFileSync(composeFile, "utf8");
33
+ } catch {
34
+ return names;
35
+ }
36
+ let inServices = false;
37
+ for (const line of raw.split(/\r?\n/)) {
38
+ if (!line.trim() || line.trim().startsWith("#")) continue;
39
+ const indent = line.length - line.trimStart().length;
40
+ const trimmed = line.trim();
41
+ if (indent === 0) {
42
+ inServices = /^services:\s*$/.test(trimmed);
43
+ continue;
44
+ }
45
+ if (inServices && indent === 2 && /^[a-zA-Z0-9_-]+:\s*$/.test(trimmed)) {
46
+ names.add(trimmed.replace(/:.*$/, ""));
47
+ }
48
+ }
49
+ return names;
50
+ }
51
+ function filterToDeployed(map, deployed) {
52
+ if (deployed.size === 0) return map;
53
+ const out = {};
54
+ for (const [name, val] of Object.entries(map)) {
55
+ if (deployed.has(name)) out[name] = val;
56
+ }
57
+ return out;
58
+ }
27
59
  function loadEnvFile(envPath) {
28
60
  if (!existsSync(envPath)) return {};
29
61
  const raw = readFileSync(envPath, "utf8");
@@ -137,10 +169,14 @@ async function checkContainersHealthy(composeFile) {
137
169
  return { check, status: "fail", message: err instanceof Error ? err.message : String(err) };
138
170
  }
139
171
  }
140
- async function checkServiceUrls() {
172
+ async function checkServiceUrls(deployed) {
141
173
  const check = "All service URLs respond 200";
174
+ const urls = filterToDeployed(SERVICE_URLS, deployed);
175
+ if (Object.keys(urls).length === 0) {
176
+ return { check, status: "skip", message: "No HTTP services deployed in this selection" };
177
+ }
142
178
  const failures = [];
143
- for (const [service, url] of Object.entries(SERVICE_URLS)) {
179
+ for (const [service, url] of Object.entries(urls)) {
144
180
  try {
145
181
  const res = await httpGet(url, CHECK_TIMEOUT_MS);
146
182
  if (res.status !== 200) {
@@ -153,10 +189,13 @@ async function checkServiceUrls() {
153
189
  if (failures.length > 0) {
154
190
  return { check, status: "fail", message: failures.join("; ") };
155
191
  }
156
- return { check, status: "pass", message: `${Object.keys(SERVICE_URLS).length} services responding` };
192
+ return { check, status: "pass", message: `${Object.keys(urls).length} services responding` };
157
193
  }
158
- async function checkGoTrueLogin(env) {
194
+ async function checkGoTrueLogin(env, deployed) {
159
195
  const check = "GoTrue login works";
196
+ if (deployed.size > 0 && !deployed.has("gotrue")) {
197
+ return { result: { check, status: "skip", message: "gotrue not deployed in this selection" } };
198
+ }
160
199
  const email = env.GOTRUE_TEST_EMAIL || process.env.GOTRUE_TEST_EMAIL;
161
200
  const password = env.GOTRUE_TEST_PASSWORD || process.env.GOTRUE_TEST_PASSWORD;
162
201
  if (!email || !password) {
@@ -178,8 +217,11 @@ async function checkGoTrueLogin(env) {
178
217
  return { result: { check, status: "fail", message: err instanceof Error ? err.message : String(err) } };
179
218
  }
180
219
  }
181
- async function checkWhatsAppConnected() {
220
+ async function checkWhatsAppConnected(deployed) {
182
221
  const check = "WhatsApp still connected";
222
+ if (deployed.size > 0 && !deployed.has("exe-gateway")) {
223
+ return { check, status: "skip", message: "exe-gateway not deployed in this selection" };
224
+ }
183
225
  try {
184
226
  const res = await httpGet(SERVICE_URLS["exe-gateway"], CHECK_TIMEOUT_MS);
185
227
  if (res.status !== 200) {
@@ -205,10 +247,14 @@ async function checkWhatsAppConnected() {
205
247
  return { check, status: "fail", message: err instanceof Error ? err.message : String(err) };
206
248
  }
207
249
  }
208
- async function checkFrontendsLoad() {
250
+ async function checkFrontendsLoad(deployed) {
209
251
  const check = "Each frontend loads";
252
+ const urls = filterToDeployed(FRONTEND_URLS, deployed);
253
+ if (Object.keys(urls).length === 0) {
254
+ return { check, status: "skip", message: "No frontends deployed in this selection" };
255
+ }
210
256
  const failures = [];
211
- for (const [service, url] of Object.entries(FRONTEND_URLS)) {
257
+ for (const [service, url] of Object.entries(urls)) {
212
258
  try {
213
259
  const res = await httpGet(url, CHECK_TIMEOUT_MS);
214
260
  if (!res.contentType.includes("text/html")) {
@@ -223,10 +269,13 @@ async function checkFrontendsLoad() {
223
269
  if (failures.length > 0) {
224
270
  return { check, status: "fail", message: failures.join("; ") };
225
271
  }
226
- return { check, status: "pass", message: `${Object.keys(FRONTEND_URLS).length} frontends serving HTML` };
272
+ return { check, status: "pass", message: `${Object.keys(urls).length} frontends serving HTML` };
227
273
  }
228
- async function checkMonitorMetrics() {
274
+ async function checkMonitorMetrics(deployed) {
229
275
  const check = "Monitor reports metrics";
276
+ if (deployed.size > 0 && !deployed.has("exe-monitor-hub")) {
277
+ return { check, status: "skip", message: "exe-monitor-hub not deployed in this selection" };
278
+ }
230
279
  try {
231
280
  const res = await httpGet(SERVICE_URLS["exe-monitor-hub"], CHECK_TIMEOUT_MS);
232
281
  if (res.status !== 200) {
@@ -264,15 +313,18 @@ async function checkRawPipeline(env) {
264
313
  return { check, status: "fail", message: msg.slice(0, 200) };
265
314
  }
266
315
  }
267
- async function checkCrossServiceAuth(jwt) {
316
+ async function checkCrossServiceAuth(jwt, deployed) {
268
317
  const check = "Cross-service auth";
269
318
  if (!jwt) {
270
319
  return { check, status: "skip", message: "No GoTrue JWT available (check 3 skipped or failed)" };
271
320
  }
272
- const targets = {
321
+ const targets = filterToDeployed({
273
322
  "exe-wiki": "http://127.0.0.1:3001/api/ping",
274
323
  "exe-crm": "http://127.0.0.1:3000/healthz"
275
- };
324
+ }, deployed);
325
+ if (Object.keys(targets).length === 0) {
326
+ return { check, status: "skip", message: "No JWT-consuming services (wiki/CRM) deployed in this selection" };
327
+ }
276
328
  const failures = [];
277
329
  for (const [service, url] of Object.entries(targets)) {
278
330
  try {
@@ -295,6 +347,7 @@ async function runVerifyStack(options) {
295
347
  const totalTimeout = options?.timeoutMs ?? TOTAL_TIMEOUT_MS;
296
348
  const env = loadEnvFile(envFile);
297
349
  const results = [];
350
+ const deployed = parseComposeServiceNames(composeFile);
298
351
  const deadline = Date.now() + totalTimeout;
299
352
  const addResult = (r) => {
300
353
  results.push(r);
@@ -304,20 +357,20 @@ async function runVerifyStack(options) {
304
357
  };
305
358
  addResult(await checkContainersHealthy(composeFile));
306
359
  if (Date.now() > deadline) return summarize(results);
307
- addResult(await checkServiceUrls());
360
+ addResult(await checkServiceUrls(deployed));
308
361
  if (Date.now() > deadline) return summarize(results);
309
- const goTrueResult = await checkGoTrueLogin(env);
362
+ const goTrueResult = await checkGoTrueLogin(env, deployed);
310
363
  addResult(goTrueResult.result);
311
364
  if (Date.now() > deadline) return summarize(results);
312
- addResult(await checkWhatsAppConnected());
365
+ addResult(await checkWhatsAppConnected(deployed));
313
366
  if (Date.now() > deadline) return summarize(results);
314
- addResult(await checkFrontendsLoad());
367
+ addResult(await checkFrontendsLoad(deployed));
315
368
  if (Date.now() > deadline) return summarize(results);
316
- addResult(await checkMonitorMetrics());
369
+ addResult(await checkMonitorMetrics(deployed));
317
370
  if (Date.now() > deadline) return summarize(results);
318
371
  addResult(await checkRawPipeline(env));
319
372
  if (Date.now() > deadline) return summarize(results);
320
- addResult(await checkCrossServiceAuth(goTrueResult.jwt));
373
+ addResult(await checkCrossServiceAuth(goTrueResult.jwt, deployed));
321
374
  return summarize(results);
322
375
  }
323
376
  function summarize(results) {
@@ -384,5 +437,6 @@ if (isMainModule(import.meta.url) && process.argv[1]?.includes("verify-stack"))
384
437
  }
385
438
 
386
439
  export {
440
+ parseComposeServiceNames,
387
441
  runVerifyStack
388
442
  };
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  getClient
3
- } from "./chunk-SCYWCWKY.js";
3
+ } from "./chunk-VG4ZH2Z3.js";
4
4
 
5
5
  // src/lib/pipeline-router.ts
6
6
  import crypto from "crypto";
@@ -116,12 +116,12 @@ async function sinkCRM(msg, agentResponse, agentName) {
116
116
  }
117
117
  async function sinkWiki(msg, agentResponse) {
118
118
  try {
119
- const { createWikiClient } = await import("./wiki-client-N6PT5P7W.js");
119
+ const { createWikiClient } = await import("./wiki-client-CIJXRMKL.js");
120
120
  const client = await createWikiClient();
121
121
  if (!client) return false;
122
122
  const content = msg.text ?? "";
123
123
  if (content.length < 50) return false;
124
- const { chatInWorkspace } = await import("./wiki-client-N6PT5P7W.js");
124
+ const { chatInWorkspace } = await import("./wiki-client-CIJXRMKL.js");
125
125
  const ingestText = [
126
126
  `[${msg.platform}] Message from ${msg.senderName ?? msg.senderId} (${msg.timestamp}):`,
127
127
  content,
@@ -149,7 +149,7 @@ async function sinkEntityExtraction(msg, agentResponse, agentName) {
149
149
  const client = getClient();
150
150
  const memoryId = `conv:${msg.messageId}`;
151
151
  await storeExtraction(client, extraction, memoryId, msg.timestamp);
152
- import("./conversation-wiki-populator-XFUC7S5P.js").then(
152
+ import("./conversation-wiki-populator-SK233TL4.js").then(
153
153
  ({ populateWikiFromExtraction }) => populateWikiFromExtraction(extraction, msg, agentResponse, agentName)
154
154
  ).catch((err) => {
155
155
  process.stderr.write(
@@ -44,7 +44,7 @@ async function fastDbInit(opts) {
44
44
  return getClient();
45
45
  }
46
46
  if (opts?.daemonOnly) {
47
- const { isDaemonReady } = await import("./daemon-ready-signal-3L2MJT7C.js");
47
+ const { isDaemonReady } = await import("./daemon-ready-signal-KXLL6ZFL.js");
48
48
  if (!isDaemonReady()) return makeNoopClient();
49
49
  }
50
50
  const forceDirect = process.env.EXE_DB_DIRECT === "1" || process.env.EXE_DB_READONLY === "1" || process.env.EXE_SKIP_DAEMON === "1";
@@ -4,7 +4,7 @@ import {
4
4
  } from "./chunk-FF5DA4XP.js";
5
5
  import {
6
6
  getClient
7
- } from "./chunk-SCYWCWKY.js";
7
+ } from "./chunk-VG4ZH2Z3.js";
8
8
 
9
9
  // src/lib/graph-entity-heuristics.ts
10
10
  var FILE_EXT_PATTERN = /(?:^|\s|['"`(])([a-zA-Z0-9_./-]+\.(?:ts|js|tsx|jsx|json|md|py|rs|go|toml|yaml|yml|css|html|sql|sh|bash|zsh|env|conf|cfg|xml|csv|lock))\b/g;
@@ -467,7 +467,7 @@ async function upsertMemoryGraph(result, memoryId) {
467
467
  });
468
468
  }
469
469
  try {
470
- const { createCoOccurrenceEdges } = await import("./co-occurrence-YP2Q3OEA.js");
470
+ const { createCoOccurrenceEdges } = await import("./co-occurrence-MJWERUWY.js");
471
471
  await createCoOccurrenceEdges(result.entities, memoryId);
472
472
  } catch {
473
473
  }