@askexenow/exe-os 0.9.322 → 0.9.323

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 (316) hide show
  1. package/deploy/compose/.env.customer.example +1 -1
  2. package/deploy/compose/.env.example +18 -1
  3. package/deploy/compose/PROTECTED_FILES.md +4 -1
  4. package/deploy/compose/add-routes.sh +22 -0
  5. package/deploy/compose/cloudflared/config.yml.example +6 -3
  6. package/deploy/compose/docker-compose.yml +36 -1
  7. package/deploy/compose/generate-env.ts +40 -2
  8. package/deploy/compose/sso-edge/default.conf.template +11 -0
  9. package/deploy/compose/sso-edge/sso-redirect.conf +90 -21
  10. package/dist/{active-agent-M5NJFEBM.js → active-agent-67BHUBV2.js} +3 -3
  11. package/dist/{active-agent-SHM4QSRJ.js → active-agent-IGVX2AAK.js} +3 -3
  12. package/dist/{agentic-ontology-HQKCU7LG.js → agentic-ontology-I5MEKVGE.js} +1 -1
  13. package/dist/backfill-gate-J7UXFNXU.js +19 -0
  14. package/dist/{backfill-metadata-CXWFCTBO.js → backfill-metadata-N5VVCYFT.js} +4 -4
  15. package/dist/{behaviors-J47D342W.js → behaviors-2YYG72ZH.js} +5 -5
  16. package/dist/bin/agentic-ontology-backfill.js +5 -5
  17. package/dist/bin/agentic-reflection-backfill.js +6 -6
  18. package/dist/bin/agentic-semantic-label.js +5 -5
  19. package/dist/bin/backfill-conversations.js +11 -11
  20. package/dist/bin/backfill-responses.js +11 -11
  21. package/dist/bin/backfill-vectors.js +102 -22
  22. package/dist/bin/bulk-sync-postgres.js +14 -14
  23. package/dist/bin/cc-doctor.js +5 -5
  24. package/dist/bin/cleanup-stale-review-tasks.js +20 -13
  25. package/dist/bin/cli.js +28 -31
  26. package/dist/bin/customer-readiness.js +1 -0
  27. package/dist/bin/deferred-daemon-restart.js +79 -76
  28. package/dist/bin/exe-agent-config.js +3 -3
  29. package/dist/bin/exe-agent.js +4 -4
  30. package/dist/bin/exe-assign.js +10 -10
  31. package/dist/bin/exe-boot.js +31 -22
  32. package/dist/bin/exe-call.js +4 -4
  33. package/dist/bin/exe-cloud.js +120 -47
  34. package/dist/bin/exe-config-dump.js +3 -3
  35. package/dist/bin/exe-dispatch.js +48 -14
  36. package/dist/bin/exe-doctor.js +4 -4
  37. package/dist/bin/exe-export-behaviors.js +7 -7
  38. package/dist/bin/exe-forget.js +6 -6
  39. package/dist/bin/exe-gateway.js +8 -8
  40. package/dist/bin/exe-healthcheck.js +17 -8
  41. package/dist/bin/exe-heartbeat.js +20 -13
  42. package/dist/bin/exe-kill.js +23 -16
  43. package/dist/bin/exe-launch-agent.js +29 -26
  44. package/dist/bin/exe-new-employee.js +8 -8
  45. package/dist/bin/exe-pending-messages.js +21 -14
  46. package/dist/bin/exe-pending-notifications.js +20 -13
  47. package/dist/bin/exe-pending-reviews.js +20 -13
  48. package/dist/bin/exe-rename.js +4 -4
  49. package/dist/bin/exe-review.js +22 -15
  50. package/dist/bin/exe-search.js +8 -13
  51. package/dist/bin/exe-session-cleanup.js +39 -22
  52. package/dist/bin/exe-settings.js +15 -15
  53. package/dist/bin/exe-start-codex.js +12 -12
  54. package/dist/bin/exe-start-opencode.js +8 -8
  55. package/dist/bin/exe-status.js +21 -14
  56. package/dist/bin/exe-support.js +3 -3
  57. package/dist/bin/exe-team.js +3 -3
  58. package/dist/bin/exe-watchdog.js +278 -39
  59. package/dist/bin/git-sweep.js +21 -14
  60. package/dist/bin/graph-backfill.js +4 -4
  61. package/dist/bin/graph-export.js +5 -5
  62. package/dist/bin/import-history.js +7 -7
  63. package/dist/bin/install-launchd.js +2 -2
  64. package/dist/bin/install.js +120 -87
  65. package/dist/bin/intercom-check.js +4 -4
  66. package/dist/bin/mcp-sessions.js +2 -2
  67. package/dist/bin/orchestration-metrics.js +4 -4
  68. package/dist/bin/postgres-agentic-reflection-backfill.js +2 -2
  69. package/dist/bin/postgres-agentic-semantic-backfill.js +1 -1
  70. package/dist/bin/registry-proxy.js +1 -1
  71. package/dist/bin/scan-tasks.js +20 -13
  72. package/dist/bin/setup.js +1 -1
  73. package/dist/bin/shard-migrate.js +4 -4
  74. package/dist/bin/stack-update.js +4 -4
  75. package/dist/bin/vps-health-gate.js +1 -1
  76. package/dist/{capability-cards-H7H3MU74.js → capability-cards-RC4JYXCG.js} +2 -2
  77. package/dist/{capacity-monitor-WAEHVBL7.js → capacity-monitor-EDIGJSVQ.js} +21 -14
  78. package/dist/{catchup-brief-L42STIDR.js → catchup-brief-YVSBRXYZ.js} +23 -16
  79. package/dist/{chunk-VSXGFHJY.js → chunk-2COLYLE6.js} +1 -1
  80. package/dist/{chunk-KL5WYWS3.js → chunk-2RR2CJCX.js} +2 -2
  81. package/dist/{chunk-HV5CUDOE.js → chunk-364VBQIC.js} +1 -1
  82. package/dist/{chunk-ABGDTMKC.js → chunk-3CT3GN2B.js} +1 -1
  83. package/dist/{chunk-HWC5W34K.js → chunk-3LZILUET.js} +1 -1
  84. package/dist/{chunk-3M73L663.js → chunk-3MUV2GDZ.js} +2 -2
  85. package/dist/{chunk-GA76RGSP.js → chunk-3QJ3GDQZ.js} +5 -5
  86. package/dist/{chunk-SENJA7BZ.js → chunk-3VYAQUWZ.js} +54 -7
  87. package/dist/{chunk-XLNF3CIO.js → chunk-46AMZT3C.js} +110 -24
  88. package/dist/{chunk-6N4LYEDI.js → chunk-4GK6JTEV.js} +1 -1
  89. package/dist/{chunk-QNUHDEPI.js → chunk-4VW5KF6X.js} +4 -4
  90. package/dist/{chunk-TI6YX3L5.js → chunk-5CRFNQ7L.js} +2 -2
  91. package/dist/{chunk-OI63OVCR.js → chunk-5HXJI7SX.js} +1 -1
  92. package/dist/{chunk-CWQAXO3O.js → chunk-5RACW3LX.js} +28 -3
  93. package/dist/{chunk-EOPSIIEH.js → chunk-5ZQMGI3V.js} +1 -1
  94. package/dist/{chunk-WCCR5IFR.js → chunk-644DVREV.js} +2 -2
  95. package/dist/chunk-6IWLAQ7O.js +40 -0
  96. package/dist/{chunk-ORC5AO7E.js → chunk-6UR7C2NX.js} +1 -1
  97. package/dist/{chunk-F5FAD2YR.js → chunk-7PXMLHPG.js} +2 -2
  98. package/dist/{chunk-FANIBYUO.js → chunk-A2K7YIRL.js} +2 -2
  99. package/dist/{chunk-LB77CSLO.js → chunk-A3CRB4PS.js} +3 -3
  100. package/dist/{chunk-6UQRJCKK.js → chunk-A6I36KVN.js} +2 -2
  101. package/dist/{chunk-CXXERHNC.js → chunk-A6ODMODG.js} +1 -1
  102. package/dist/{chunk-GN3IWZDH.js → chunk-AVEOL6NP.js} +140 -122
  103. package/dist/{chunk-KLG53B63.js → chunk-BKOGHVRO.js} +1 -1
  104. package/dist/{chunk-HIOO7DZ2.js → chunk-CCYEO6EG.js} +5 -5
  105. package/dist/{chunk-NYFPFOYM.js → chunk-CMZIAR5S.js} +1 -1
  106. package/dist/{chunk-6SXJZHRJ.js → chunk-CP4LIKCX.js} +1 -1
  107. package/dist/{chunk-XEBN5CPD.js → chunk-DDRASSJI.js} +6 -6
  108. package/dist/{chunk-7SDS5VCL.js → chunk-DZVQ23CM.js} +7 -7
  109. package/dist/{chunk-NAHAOFTY.js → chunk-E72VLAJH.js} +3 -3
  110. package/dist/{chunk-EVUXF2G4.js → chunk-EAHLB7YN.js} +1 -1
  111. package/dist/{signal-paths-4GOIRLGH.js → chunk-EIKATSE4.js} +3 -4
  112. package/dist/{chunk-HKSJSW2V.js → chunk-EZHNCIO5.js} +1 -1
  113. package/dist/{chunk-QVFJCFNM.js → chunk-FROUDYRT.js} +33 -2
  114. package/dist/{chunk-EPBB2OD3.js → chunk-GHARDROH.js} +2 -2
  115. package/dist/{chunk-ROMB2HH4.js → chunk-GMDLNJ5E.js} +6 -6
  116. package/dist/{chunk-E32KARET.js → chunk-H7FI3AWZ.js} +4 -4
  117. package/dist/{chunk-X62GD6QW.js → chunk-HAA4N3NI.js} +2 -2
  118. package/dist/{chunk-PISGLNV7.js → chunk-HYNNAM4R.js} +5 -5
  119. package/dist/{chunk-KXP3CUTL.js → chunk-I4IMPAZQ.js} +2 -2
  120. package/dist/{chunk-C4BIZXKB.js → chunk-IFXE7QYT.js} +1 -1
  121. package/dist/{chunk-WFHYAKEU.js → chunk-IKFL4OLM.js} +1 -1
  122. package/dist/{chunk-657AQEPY.js → chunk-IKOAALTW.js} +1 -1
  123. package/dist/{chunk-TKBWBHFV.js → chunk-JTF4UVXK.js} +1 -1
  124. package/dist/{chunk-7FBPLVHM.js → chunk-KADUJ7PE.js} +3 -3
  125. package/dist/{chunk-CHSRSESS.js → chunk-KIXTW4VH.js} +1 -1
  126. package/dist/chunk-KPIN44GZ.js +67 -0
  127. package/dist/{chunk-VY7345RO.js → chunk-L5TUAHLX.js} +1 -1
  128. package/dist/{chunk-JXEMAB4M.js → chunk-LX2TYKEQ.js} +1 -1
  129. package/dist/{chunk-ONKIWA3R.js → chunk-ML4S5SHZ.js} +3 -1
  130. package/dist/{chunk-CMDC5D7S.js → chunk-NLEW62VC.js} +6 -0
  131. package/dist/{chunk-OFR7KQ37.js → chunk-NQPAG7CB.js} +3 -3
  132. package/dist/{chunk-6XM6PZXQ.js → chunk-NW6V3XVK.js} +1 -1
  133. package/dist/{chunk-G5TP2D2U.js → chunk-PGEADAZL.js} +3 -3
  134. package/dist/{chunk-AZL3EUR3.js → chunk-QBRBLEXP.js} +229 -29
  135. package/dist/{chunk-MYMA23KC.js → chunk-QCWZMS7B.js} +1 -1
  136. package/dist/{chunk-HGM6NZQH.js → chunk-RYJH6S55.js} +1 -1
  137. package/dist/{chunk-2GBGIXKH.js → chunk-S6XKC36B.js} +1 -1
  138. package/dist/{chunk-QQOH3I4A.js → chunk-SAUO2ZLB.js} +1 -1
  139. package/dist/{chunk-7BZ6TOZN.js → chunk-SE7TU5GX.js} +3 -3
  140. package/dist/{chunk-SQ5JWDJ2.js → chunk-SSIUJXOL.js} +1 -1
  141. package/dist/{chunk-KK4ZOYXJ.js → chunk-SXN3TRJ4.js} +80 -40
  142. package/dist/{chunk-7CUF27OT.js → chunk-T3OGIK3Y.js} +1 -1
  143. package/dist/{skill-refinement-YLIAY7V4.js → chunk-U3VSCPGX.js} +3 -11
  144. package/dist/{chunk-V2ESQU3S.js → chunk-UB322YIG.js} +3 -3
  145. package/dist/{chunk-3JW3ZXCP.js → chunk-UPLY33F7.js} +1 -1
  146. package/dist/{chunk-H2SD2EA7.js → chunk-UW5QD52P.js} +23 -9
  147. package/dist/{chunk-A3KUGBDP.js → chunk-VH345O6X.js} +1 -1
  148. package/dist/{chunk-QYLDCPNG.js → chunk-VJL2BGX2.js} +1 -1
  149. package/dist/{chunk-BFHBHQFA.js → chunk-VQEZ3ZNK.js} +5 -5
  150. package/dist/{chunk-T6AUMO5X.js → chunk-W33H7TWW.js} +1 -1
  151. package/dist/{chunk-ERSFOJGC.js → chunk-W377NZE4.js} +20 -11
  152. package/dist/{chunk-LCZ55G5G.js → chunk-WCXFNUMD.js} +136 -66
  153. package/dist/{chunk-WSYKLS2Y.js → chunk-WRA6OO5V.js} +3 -3
  154. package/dist/{chunk-XP53WEXP.js → chunk-WYHCMHTL.js} +3 -3
  155. package/dist/{chunk-YIFZZYQD.js → chunk-X2K2LHFO.js} +2 -2
  156. package/dist/{chunk-PLBDXCYZ.js → chunk-XK7HAEFC.js} +1446 -612
  157. package/dist/{chunk-DGFIXJ4S.js → chunk-XYJXJWKH.js} +3 -3
  158. package/dist/{chunk-XC7C3GQ2.js → chunk-YOS4FN26.js} +30 -19
  159. package/dist/{chunk-NFM6VHL7.js → chunk-YS7VW7KR.js} +1 -1
  160. package/dist/{chunk-6IBUQBMY.js → chunk-YTPNOTUS.js} +198 -39
  161. package/dist/{chunk-LOE2N23P.js → chunk-ZR57QAJ2.js} +1 -1
  162. package/dist/{chunk-4Z47UMMM.js → chunk-ZU2UK4BC.js} +23 -23
  163. package/dist/{cleanup-graph-garbage-MX5JDTJA.js → cleanup-graph-garbage-5KI4MSDC.js} +4 -4
  164. package/dist/{co-activation-K44LGZ7A.js → co-activation-JRDKF2M3.js} +2 -2
  165. package/dist/{co-occurrence-N62HJTRP.js → co-occurrence-JGFIAEKR.js} +2 -2
  166. package/dist/{code-context-index-6YQ3DGCN.js → code-context-index-NODPVXHC.js} +3 -3
  167. package/dist/{crdt-sync-BO76VVRX.js → crdt-sync-NOWBFD5N.js} +1 -1
  168. package/dist/{crm-bridge-BVTB6LZK.js → crm-bridge-CZLEW2LW.js} +1 -1
  169. package/dist/{crm-webhook-UZLTHXAS.js → crm-webhook-FXSSAHON.js} +2 -2
  170. package/dist/{cto-delegation-gate-NVMRONA2.js → cto-delegation-gate-J6DDJFAB.js} +19 -12
  171. package/dist/{daemon-orchestration-JI3RD5EZ.js → daemon-orchestration-HIZMZ2Y5.js} +31 -16
  172. package/dist/{db-backup-ITRADB2J.js → db-backup-I5GQBRIG.js} +1 -1
  173. package/dist/{doc-graph-extractor-L7YESUSI.js → doc-graph-extractor-TAZHM63R.js} +2 -2
  174. package/dist/{documents-7BFXA6V3.js → documents-XXOQ5QIJ.js} +10 -10
  175. package/dist/{dreaming-NRTMPNPZ.js → dreaming-V275C7L2.js} +20 -13
  176. package/dist/{exe-drift-GLJIM7EI.js → exe-drift-VOJZYOIO.js} +3 -3
  177. package/dist/{exe-export-THIAYHXK.js → exe-export-EDQDGZV3.js} +6 -6
  178. package/dist/{exe-import-3Y4VOUYL.js → exe-import-DV7GKBZD.js} +6 -6
  179. package/dist/{exe-key-IPGY4RMU.js → exe-key-6SLYWY36.js} +77 -74
  180. package/dist/{exe-snapshot-2ZEWCDYK.js → exe-snapshot-TDQI34DW.js} +23 -16
  181. package/dist/{fast-db-init-TLYUWCDE.js → fast-db-init-SNHHRW3L.js} +1 -1
  182. package/dist/{founder-context-J362DNU4.js → founder-context-UZVRU4HI.js} +2 -2
  183. package/dist/gateway/index.js +12 -12
  184. package/dist/{git-staleness-BRDHTHNS.js → git-staleness-TRCX6FVG.js} +2 -2
  185. package/dist/{global-procedures-FNUKY2LF.js → global-procedures-LH4JG3CR.js} +3 -3
  186. package/dist/{graph-auto-extract-AJZUV3PO.js → graph-auto-extract-YTXHYR35.js} +2 -2
  187. package/dist/hooks/bug-report-worker.js +22 -15
  188. package/dist/hooks/codex-stop-task-finalizer.js +22 -15
  189. package/dist/hooks/commit-complete.js +22 -15
  190. package/dist/hooks/error-recall.js +6 -6
  191. package/dist/hooks/exe-heartbeat-hook.js +3 -3
  192. package/dist/hooks/ingest-worker.js +6 -6
  193. package/dist/hooks/ingest.js +6 -6
  194. package/dist/hooks/instructions-loaded.js +4 -4
  195. package/dist/hooks/manifest.json +20 -20
  196. package/dist/hooks/notification.js +4 -4
  197. package/dist/hooks/post-compact.js +21 -14
  198. package/dist/hooks/post-tool-combined.js +8 -8
  199. package/dist/hooks/pre-compact.js +22 -21
  200. package/dist/hooks/pre-tool-use.js +29 -19
  201. package/dist/hooks/prompt-submit.js +89 -72
  202. package/dist/hooks/session-end.js +27 -26
  203. package/dist/hooks/session-start.js +13 -13
  204. package/dist/hooks/stop.js +28 -21
  205. package/dist/hooks/subagent-stop.js +24 -41
  206. package/dist/hooks/summary-worker.js +27 -25
  207. package/dist/index.js +30 -23
  208. package/dist/{installer-SC7CQBYY.js → installer-U7D3PAR5.js} +5 -5
  209. package/dist/{installer-2EKTDQZB.js → installer-W4SHZFOR.js} +5 -5
  210. package/dist/{installer-UEF44TWQ.js → installer-WHO23TIO.js} +5 -5
  211. package/dist/intercom-queue-2XB622OR.js +53 -0
  212. package/dist/lib/agent-config.js +7 -1
  213. package/dist/lib/cloud-sync.js +16 -14
  214. package/dist/lib/consolidation.js +5 -5
  215. package/dist/lib/database.js +10 -2
  216. package/dist/lib/db-daemon-client.js +3 -3
  217. package/dist/lib/db.js +10 -2
  218. package/dist/lib/device-registry.js +1 -1
  219. package/dist/lib/embed-worker.js +28 -0
  220. package/dist/lib/embedder.js +3 -3
  221. package/dist/lib/employee-templates.js +4 -4
  222. package/dist/lib/employees.js +2 -2
  223. package/dist/lib/exe-daemon-client.js +2 -2
  224. package/dist/lib/exe-daemon.js +319 -129
  225. package/dist/lib/hybrid-search.js +5 -5
  226. package/dist/lib/identity.js +2 -2
  227. package/dist/lib/license.js +2 -2
  228. package/dist/lib/messaging.js +20 -13
  229. package/dist/lib/registry-proxy.js +1 -1
  230. package/dist/lib/reminders.js +3 -3
  231. package/dist/lib/schedules.js +5 -5
  232. package/dist/lib/session-registry.js +4 -4
  233. package/dist/lib/skill-learning.js +6 -6
  234. package/dist/lib/store.js +4 -4
  235. package/dist/lib/task-router.js +3 -3
  236. package/dist/lib/tasks.js +21 -14
  237. package/dist/lib/tmux-routing.js +27 -12
  238. package/dist/lib/token-spend.js +3 -3
  239. package/dist/{license-gate-YUUSIPJ7.js → license-gate-7CYKGRXW.js} +3 -3
  240. package/dist/{license-sync-LX73IEBH.js → license-sync-H4TVZ7PR.js} +2 -2
  241. package/dist/mcp/register-tools.js +74 -71
  242. package/dist/mcp/server.js +98 -132
  243. package/dist/mcp/tools/complete-reminder.js +4 -4
  244. package/dist/mcp/tools/create-reminder.js +4 -4
  245. package/dist/mcp/tools/create-task.js +37 -18
  246. package/dist/mcp/tools/deactivate-behavior.js +7 -7
  247. package/dist/mcp/tools/list-reminders.js +4 -4
  248. package/dist/mcp/tools/list-tasks.js +23 -16
  249. package/dist/mcp/tools/send-message.js +22 -15
  250. package/dist/mcp/tools/update-task.js +22 -15
  251. package/dist/{mcp-http-config-MBG5AQNH.js → mcp-http-config-LEBUOECG.js} +3 -3
  252. package/dist/{memory-cards-MGZ4P3AA.js → memory-cards-47XM3VWW.js} +4 -4
  253. package/dist/{memory-graph-extractor-44P2ATID.js → memory-graph-extractor-COD5E52L.js} +3 -3
  254. package/dist/{memory-poisoning-defense-3CYFKNLA.js → memory-poisoning-defense-SBYOEXT3.js} +2 -2
  255. package/dist/{memory-pressure-watchdog-6PFLEOUO.js → memory-pressure-watchdog-T276SDOR.js} +20 -13
  256. package/dist/{memory-queue-client-BZD6MXA5.js → memory-queue-client-IQ52W7W4.js} +3 -3
  257. package/dist/{memory-reflection-AYPJRPU7.js → memory-reflection-UZK5MHG2.js} +7 -9
  258. package/dist/{notifications-BBQ23ORD.js → notifications-O5DH4O35.js} +19 -12
  259. package/dist/{orchestration-events-O5P5NEKS.js → orchestration-events-65YDDRF4.js} +3 -3
  260. package/dist/{orchestrator-SERM6FDY.js → orchestrator-NHMTDGWJ.js} +21 -14
  261. package/dist/{pipeline-router-T673WGL3.js → pipeline-router-2KJQDX5O.js} +3 -3
  262. package/dist/{plan-limits-QWBN2EKH.js → plan-limits-NQQN5C4S.js} +5 -5
  263. package/dist/{projection-worker-K6TILAZH.js → projection-worker-IUCBINZH.js} +12 -2
  264. package/dist/{prospective-memory-XRNRMEDL.js → prospective-memory-U2TISMIW.js} +2 -2
  265. package/dist/{reranker-3XC5UM4F.js → reranker-D6NSD5A3.js} +1 -1
  266. package/dist/{retrieval-health-ULVVOIPL.js → retrieval-health-LBNMCYNF.js} +1 -1
  267. package/dist/{review-polling-5YGDPJUX.js → review-polling-ZJWELHBP.js} +20 -13
  268. package/dist/runtime/index.js +23 -16
  269. package/dist/{session-events-D52HNUJK.js → session-events-GRHFFRZV.js} +20 -13
  270. package/dist/{session-kill-telemetry-IBNCJSI7.js → session-kill-telemetry-ALV4KMWS.js} +20 -13
  271. package/dist/{session-scope-5FWZ4AYR.js → session-scope-JB5TBNCX.js} +19 -12
  272. package/dist/{setup-wizard-KVTLSSRD.js → setup-wizard-5STOE3PS.js} +1 -1
  273. package/dist/signal-paths-4G53QTII.js +11 -0
  274. package/dist/skill-refinement-JB2LRDLS.js +20 -0
  275. package/dist/{stack-update-OWWGTYRB.js → stack-update-ZG4YS7WS.js} +9 -3
  276. package/dist/{steward-gate-3ZITRYVH.js → steward-gate-TE63SGPL.js} +3 -3
  277. package/dist/{support-outbox-QPQQK7F7.js → support-outbox-MGUVVGHT.js} +96 -44
  278. package/dist/sweep-budget-WB2FKPYN.js +64 -0
  279. package/dist/{task-enforcement-L4YTDOOX.js → task-enforcement-72WZMQGC.js} +191 -17
  280. package/dist/{task-scope-OIHLMQOQ.js → task-scope-FLDBFGWR.js} +25 -12
  281. package/dist/{tasks-crud-QUIIRWE3.js → tasks-crud-DKOSSXTD.js} +23 -12
  282. package/dist/{tasks-notify-ANYLB5GU.js → tasks-notify-WEWKM6B3.js} +20 -13
  283. package/dist/{tasks-review-BWSCXFMB.js → tasks-review-MHCL7PNP.js} +27 -14
  284. package/dist/{telemetry-upload-XLDBCD7B.js → telemetry-upload-K2MZ4O6U.js} +7 -7
  285. package/dist/{token-budget-OQCLPV3A.js → token-budget-MZZ5DLOH.js} +3 -3
  286. package/dist/{tool-capability-index-3UWKZZED.js → tool-capability-index-M3FUNMFF.js} +1 -1
  287. package/dist/{tool-telemetry-AQTFWOWG.js → tool-telemetry-ERE5FRVC.js} +1 -1
  288. package/dist/tui/App.js +27 -20
  289. package/dist/{tui-data-3Y5L5LJB.js → tui-data-JDBTFDAF.js} +19 -12
  290. package/dist/{worker-gate-WJS2MFNA.js → worker-gate-3OR47E4T.js} +1 -1
  291. package/dist/{workflow-engine-EPPZ226V.js → workflow-engine-JLVEE2CI.js} +2 -2
  292. package/dist/{worktree-OYGDGJP7.js → worktree-WLPHLZ2S.js} +4 -4
  293. package/dist/{worktree-sweep-KV4H4766.js → worktree-sweep-S6AYDLAQ.js} +5 -5
  294. package/package.json +3 -3
  295. package/release-notes.json +51 -19
  296. package/dist/chunk-4FVVJ7ME.js +0 -193
  297. package/dist/completion-nudge-dedup-DBZF24MM.js +0 -74
  298. package/dist/git-task-sweep-7GVUKDBW.js +0 -47
  299. package/dist/intercom-queue-6M5IRX3Y.js +0 -17
  300. /package/dist/{chunk-SJZT66LM.js → chunk-2G75BF5J.js} +0 -0
  301. /package/dist/{chunk-SIJSFULW.js → chunk-6IJ47YFD.js} +0 -0
  302. /package/dist/{chunk-72LWCZTJ.js → chunk-AI3BK3JD.js} +0 -0
  303. /package/dist/{chunk-Q5YKWFVO.js → chunk-B2ONIFHD.js} +0 -0
  304. /package/dist/{chunk-DY3J6GQO.js → chunk-FU767JXE.js} +0 -0
  305. /package/dist/{chunk-ZU6767WK.js → chunk-HWVEDRZA.js} +0 -0
  306. /package/dist/{chunk-WXRVHXVP.js → chunk-MV5OSOP4.js} +0 -0
  307. /package/dist/{chunk-DQJ3WZRK.js → chunk-RYZR4NNE.js} +0 -0
  308. /package/dist/{chunk-RRQI5PSJ.js → chunk-SSM2JHQ4.js} +0 -0
  309. /package/dist/{chunk-IZY6V4FI.js → chunk-TVY65H23.js} +0 -0
  310. /package/dist/{chunk-QTEHH4LG.js → chunk-VW326Q5R.js} +0 -0
  311. /package/dist/{core-memory-DARTILJG.js → core-memory-4AZ2CSQZ.js} +0 -0
  312. /package/dist/{entity-boost-VR5YOQCT.js → entity-boost-WV4GGNN2.js} +0 -0
  313. /package/dist/{message-queue-client-HVFR67QH.js → message-queue-client-JZ7TIOTZ.js} +0 -0
  314. /package/dist/{oauth-server-UQHCFVHT.js → oauth-server-LUJ5P2BH.js} +0 -0
  315. /package/dist/{project-boot-22ZZL2GE.js → project-boot-TOFNGMHM.js} +0 -0
  316. /package/dist/{wiki-acl-EZMGL6KW.js → wiki-acl-3JA23DH3.js} +0 -0
@@ -3,24 +3,24 @@ import {
3
3
  clean,
4
4
  inferSemanticLabel,
5
5
  stableId
6
- } from "../chunk-DY3J6GQO.js";
6
+ } from "../chunk-FU767JXE.js";
7
7
  import {
8
8
  politeBatchPause,
9
9
  startManagedJob
10
10
  } from "../chunk-JSKBHUR7.js";
11
11
  import {
12
12
  initStore
13
- } from "../chunk-H2SD2EA7.js";
13
+ } from "../chunk-UW5QD52P.js";
14
14
  import "../chunk-CHCA3ZM2.js";
15
15
  import "../chunk-OTVEIJUQ.js";
16
- import "../chunk-SIJSFULW.js";
16
+ import "../chunk-6IJ47YFD.js";
17
17
  import "../chunk-Y25OJWOQ.js";
18
18
  import "../chunk-MP2AFCGL.js";
19
19
  import {
20
20
  getClient
21
- } from "../chunk-XLNF3CIO.js";
21
+ } from "../chunk-46AMZT3C.js";
22
22
  import "../chunk-2I23RPSI.js";
23
- import "../chunk-WXRVHXVP.js";
23
+ import "../chunk-MV5OSOP4.js";
24
24
  import "../chunk-PNQDP3OA.js";
25
25
  import "../chunk-H73TUI4Y.js";
26
26
  import "../chunk-7HLWBYH7.js";
@@ -1,27 +1,27 @@
1
1
  #!/usr/bin/env node
2
- import {
3
- connectEmbedDaemon,
4
- embedViaClient
5
- } from "../chunk-3JW3ZXCP.js";
6
- import "../chunk-AFNRE2RV.js";
7
- import "../chunk-3NGZ4PL7.js";
8
- import "../chunk-CMDC5D7S.js";
9
2
  import {
10
3
  flushBatch,
11
4
  initStore,
12
5
  writeMemory
13
- } from "../chunk-H2SD2EA7.js";
6
+ } from "../chunk-UW5QD52P.js";
14
7
  import "../chunk-CHCA3ZM2.js";
15
8
  import "../chunk-OTVEIJUQ.js";
16
- import "../chunk-SIJSFULW.js";
9
+ import "../chunk-6IJ47YFD.js";
17
10
  import "../chunk-Y25OJWOQ.js";
11
+ import {
12
+ connectEmbedDaemon,
13
+ embedViaClient
14
+ } from "../chunk-UPLY33F7.js";
15
+ import "../chunk-AFNRE2RV.js";
16
+ import "../chunk-3NGZ4PL7.js";
17
+ import "../chunk-NLEW62VC.js";
18
18
  import "../chunk-MP2AFCGL.js";
19
19
  import {
20
20
  getClient,
21
21
  isCoordinatorName
22
- } from "../chunk-XLNF3CIO.js";
22
+ } from "../chunk-46AMZT3C.js";
23
23
  import "../chunk-2I23RPSI.js";
24
- import "../chunk-WXRVHXVP.js";
24
+ import "../chunk-MV5OSOP4.js";
25
25
  import "../chunk-PNQDP3OA.js";
26
26
  import "../chunk-H73TUI4Y.js";
27
27
  import "../chunk-7HLWBYH7.js";
@@ -1,27 +1,27 @@
1
1
  #!/usr/bin/env node
2
- import {
3
- connectEmbedDaemon,
4
- embedViaClient
5
- } from "../chunk-3JW3ZXCP.js";
6
- import "../chunk-AFNRE2RV.js";
7
- import "../chunk-3NGZ4PL7.js";
8
- import "../chunk-CMDC5D7S.js";
9
2
  import {
10
3
  flushBatch,
11
4
  initStore,
12
5
  writeMemory
13
- } from "../chunk-H2SD2EA7.js";
6
+ } from "../chunk-UW5QD52P.js";
14
7
  import "../chunk-CHCA3ZM2.js";
15
8
  import "../chunk-OTVEIJUQ.js";
16
- import "../chunk-SIJSFULW.js";
9
+ import "../chunk-6IJ47YFD.js";
17
10
  import "../chunk-Y25OJWOQ.js";
11
+ import {
12
+ connectEmbedDaemon,
13
+ embedViaClient
14
+ } from "../chunk-UPLY33F7.js";
15
+ import "../chunk-AFNRE2RV.js";
16
+ import "../chunk-3NGZ4PL7.js";
17
+ import "../chunk-NLEW62VC.js";
18
18
  import "../chunk-MP2AFCGL.js";
19
19
  import {
20
20
  getClient,
21
21
  isCoordinatorName
22
- } from "../chunk-XLNF3CIO.js";
22
+ } from "../chunk-46AMZT3C.js";
23
23
  import "../chunk-2I23RPSI.js";
24
- import "../chunk-WXRVHXVP.js";
24
+ import "../chunk-MV5OSOP4.js";
25
25
  import "../chunk-PNQDP3OA.js";
26
26
  import "../chunk-H73TUI4Y.js";
27
27
  import "../chunk-7HLWBYH7.js";
@@ -3,36 +3,41 @@ import {
3
3
  politeBatchPause,
4
4
  startManagedJob
5
5
  } from "../chunk-JSKBHUR7.js";
6
+ import {
7
+ NOT_PARKED_SQL,
8
+ PARKED_EMBEDDING_MODEL,
9
+ backfillKillSwitchEnabled
10
+ } from "../chunk-KPIN44GZ.js";
6
11
  import {
7
12
  prepareEmbeddingText
8
- } from "../chunk-CHSRSESS.js";
13
+ } from "../chunk-KIXTW4VH.js";
9
14
  import {
10
15
  cleanupWorkerPid,
11
16
  registerWorkerPid,
12
17
  releaseBackfillLock,
13
18
  tryAcquireBackfillLock
14
- } from "../chunk-TKBWBHFV.js";
15
- import {
16
- connectEmbedDaemon,
17
- embedViaClient
18
- } from "../chunk-3JW3ZXCP.js";
19
- import "../chunk-AFNRE2RV.js";
20
- import "../chunk-3NGZ4PL7.js";
21
- import "../chunk-CMDC5D7S.js";
19
+ } from "../chunk-JTF4UVXK.js";
22
20
  import {
23
21
  initStore,
24
22
  vectorToBlob
25
- } from "../chunk-H2SD2EA7.js";
23
+ } from "../chunk-UW5QD52P.js";
26
24
  import "../chunk-CHCA3ZM2.js";
27
25
  import "../chunk-OTVEIJUQ.js";
28
- import "../chunk-SIJSFULW.js";
26
+ import "../chunk-6IJ47YFD.js";
29
27
  import "../chunk-Y25OJWOQ.js";
28
+ import {
29
+ connectEmbedDaemon,
30
+ embedViaClient
31
+ } from "../chunk-UPLY33F7.js";
32
+ import "../chunk-AFNRE2RV.js";
33
+ import "../chunk-3NGZ4PL7.js";
34
+ import "../chunk-NLEW62VC.js";
30
35
  import "../chunk-MP2AFCGL.js";
31
36
  import {
32
37
  getClient
33
- } from "../chunk-XLNF3CIO.js";
38
+ } from "../chunk-46AMZT3C.js";
34
39
  import "../chunk-2I23RPSI.js";
35
- import "../chunk-WXRVHXVP.js";
40
+ import "../chunk-MV5OSOP4.js";
36
41
  import "../chunk-PNQDP3OA.js";
37
42
  import "../chunk-H73TUI4Y.js";
38
43
  import "../chunk-7HLWBYH7.js";
@@ -53,8 +58,54 @@ import "../chunk-MLKGABMK.js";
53
58
  // src/bin/backfill-vectors.ts
54
59
  import { existsSync, mkdirSync, readFileSync, unlinkSync } from "fs";
55
60
  import path from "path";
61
+ import os from "os";
56
62
  var BATCH_SIZE = 100;
57
63
  var BACKFILL_FLAG = path.join(EXE_AI_DIR, "session-cache", "needs-backfill");
64
+ var BACKFILL_MAX_CHARS_DEFAULT = 2e3;
65
+ var BACKFILL_MAX_CHARS_MIN = 200;
66
+ var BACKFILL_MAX_CHARS_MAX = 24e3;
67
+ function backfillMaxEmbedChars(env = process.env) {
68
+ const raw = parseInt(env.EXE_BACKFILL_MAX_CHARS ?? "", 10);
69
+ if (!Number.isFinite(raw)) return BACKFILL_MAX_CHARS_DEFAULT;
70
+ return Math.min(BACKFILL_MAX_CHARS_MAX, Math.max(BACKFILL_MAX_CHARS_MIN, raw));
71
+ }
72
+ var BACKFILL_MIN_BATCH = 10;
73
+ var BACKFILL_PAUSE_BASE_MS = 500;
74
+ var BACKFILL_PAUSE_MAX_MS = 5e3;
75
+ function computeBackfillBatchSize(loadAvg1, cpuCount, base = BATCH_SIZE) {
76
+ if (!Number.isFinite(loadAvg1) || !Number.isFinite(cpuCount) || cpuCount <= 0) return base;
77
+ const perCore = loadAvg1 / cpuCount;
78
+ if (perCore <= 0.5) return base;
79
+ if (perCore >= 1) return Math.min(BACKFILL_MIN_BATCH, base);
80
+ const t = (perCore - 0.5) / 0.5;
81
+ const size = Math.round(base - t * (base - BACKFILL_MIN_BATCH));
82
+ return Math.max(Math.min(BACKFILL_MIN_BATCH, base), Math.min(base, size));
83
+ }
84
+ function computeBackfillPauseMs(loadAvg1, cpuCount) {
85
+ if (!Number.isFinite(loadAvg1) || !Number.isFinite(cpuCount) || cpuCount <= 0) {
86
+ return BACKFILL_PAUSE_BASE_MS;
87
+ }
88
+ const perCore = loadAvg1 / cpuCount;
89
+ if (perCore <= 0.5) return BACKFILL_PAUSE_BASE_MS;
90
+ const t = Math.min(1, (perCore - 0.5) / 0.5);
91
+ return Math.round(BACKFILL_PAUSE_BASE_MS + t * (BACKFILL_PAUSE_MAX_MS - BACKFILL_PAUSE_BASE_MS));
92
+ }
93
+ var PARK_CHUNK = 100;
94
+ async function parkPoisonRows(client, ids) {
95
+ let parked = 0;
96
+ for (let i = 0; i < ids.length; i += PARK_CHUNK) {
97
+ const chunk = ids.slice(i, i + PARK_CHUNK);
98
+ try {
99
+ await client.execute({
100
+ sql: `UPDATE memories SET embedding_model = ? WHERE vector IS NULL AND id IN (${chunk.map(() => "?").join(",")})`,
101
+ args: [PARKED_EMBEDDING_MODEL, ...chunk]
102
+ });
103
+ parked += chunk.length;
104
+ } catch {
105
+ }
106
+ }
107
+ return parked;
108
+ }
58
109
  var DEAD_LETTER_FILE = path.join(EXE_AI_DIR, "session-cache", "vector-backfill-deadletter.json");
59
110
  var MAX_DEAD_LETTER_ATTEMPTS = Math.max(
60
111
  1,
@@ -104,6 +155,10 @@ function isNonRetryableEmbedError(err) {
104
155
  return msg.toLowerCase().includes("input is longer than the context size");
105
156
  }
106
157
  async function backfillVectors() {
158
+ if (backfillKillSwitchEnabled()) {
159
+ process.stderr.write("[backfill] EXE_DISABLE_BACKFILL is set \u2014 backfill disabled, exiting\n");
160
+ return { processed: 0, failed: 0, remaining: -1 };
161
+ }
107
162
  const job = startManagedJob({ type: "vector-backfill", name: "Vector embedding backfill", lowPriority: true });
108
163
  if (!job) {
109
164
  process.stderr.write("[backfill] Vector backfill is already running \u2014 exiting\n");
@@ -149,6 +204,16 @@ async function backfillVectors() {
149
204
  const failedIds = new Set(exhaustedIds(deadLetter));
150
205
  let deadLetterDirty = false;
151
206
  let capReached = false;
207
+ if (hasEmbeddingModelCol && failedIds.size > 0) {
208
+ const parked = await parkPoisonRows(client, [...failedIds]);
209
+ if (parked > 0) {
210
+ process.stderr.write(`[backfill] Parked ${parked} previously dead-lettered rows (embedding_model='${PARKED_EMBEDDING_MODEL}')
211
+ `);
212
+ }
213
+ }
214
+ const maxChars = backfillMaxEmbedChars();
215
+ const cpuCount = os.cpus().length || 1;
216
+ const newlyExhausted = [];
152
217
  while (true) {
153
218
  if (totalFailed >= MAX_FAILURES_PER_RUN) {
154
219
  capReached = true;
@@ -160,9 +225,11 @@ async function backfillVectors() {
160
225
  }
161
226
  const failedList = [...failedIds];
162
227
  const failedClause = failedList.length > 0 ? ` AND id NOT IN (${failedList.map(() => "?").join(",")})` : "";
228
+ const parkedClause = hasEmbeddingModelCol ? ` AND ${NOT_PARKED_SQL}` : "";
229
+ const batchSize = computeBackfillBatchSize(os.loadavg()[0] ?? 0, cpuCount);
163
230
  const batch = await client.execute({
164
- sql: `SELECT id, raw_text FROM memories WHERE vector IS NULL${failedClause} LIMIT ?`,
165
- args: [...failedList, BATCH_SIZE]
231
+ sql: `SELECT id, raw_text FROM memories WHERE vector IS NULL${parkedClause}${failedClause} LIMIT ?`,
232
+ args: [...failedList, batchSize]
166
233
  });
167
234
  if (batch.rows.length === 0) break;
168
235
  process.stderr.write(`[backfill] Processing batch of ${batch.rows.length} memories...
@@ -174,12 +241,12 @@ async function backfillVectors() {
174
241
  const id = row.id;
175
242
  const rawText = row.raw_text;
176
243
  try {
177
- const vector = await embedViaClient(prepareEmbeddingText(rawText, "passage"), "low");
244
+ const vector = await embedViaClient(prepareEmbeddingText(rawText.slice(0, maxChars), "passage"), "low");
178
245
  if (!vector) {
179
246
  totalFailed++;
180
247
  batchFailed++;
181
248
  failedIds.add(id);
182
- recordDeadLetter(deadLetter, id, "daemon returned null");
249
+ if (recordDeadLetter(deadLetter, id, "daemon returned null")) newlyExhausted.push(id);
183
250
  deadLetterDirty = true;
184
251
  process.stderr.write(`[backfill] Failed to embed memory ${id} \u2014 daemon returned null
185
252
  `);
@@ -209,10 +276,11 @@ async function backfillVectors() {
209
276
  lastError: (err instanceof Error ? err.message : String(err)).slice(0, 200),
210
277
  updatedAt: (/* @__PURE__ */ new Date()).toISOString()
211
278
  };
279
+ newlyExhausted.push(id);
212
280
  process.stderr.write(`[backfill] Non-retryable embedding error for ${id}; dead-lettering permanently
213
281
  `);
214
- } else {
215
- recordDeadLetter(deadLetter, id, err);
282
+ } else if (recordDeadLetter(deadLetter, id, err)) {
283
+ newlyExhausted.push(id);
216
284
  }
217
285
  process.stderr.write(`[backfill] Error embedding ${id}: ${err instanceof Error ? err.message : String(err)}
218
286
  `);
@@ -225,11 +293,18 @@ async function backfillVectors() {
225
293
  saveDeadLetter(deadLetter);
226
294
  deadLetterDirty = false;
227
295
  }
296
+ if (hasEmbeddingModelCol && newlyExhausted.length > 0) {
297
+ const parked = await parkPoisonRows(client, newlyExhausted.splice(0));
298
+ if (parked > 0) {
299
+ process.stderr.write(`[backfill] Parked ${parked} poison rows (embedding_model='${PARKED_EMBEDDING_MODEL}')
300
+ `);
301
+ }
302
+ }
228
303
  if (batchProcessed === 0 && batchFailed === batch.rows.length) {
229
304
  process.stderr.write("[backfill] Entire batch failed \u2014 stopping to avoid reprocessing poison rows\n");
230
305
  break;
231
306
  }
232
- await politeBatchPause(500);
307
+ await politeBatchPause(computeBackfillPauseMs(os.loadavg()[0] ?? 0, cpuCount));
233
308
  }
234
309
  if (deadLetterDirty) saveDeadLetter(deadLetter);
235
310
  const remaining = await client.execute({
@@ -238,9 +313,10 @@ async function backfillVectors() {
238
313
  });
239
314
  const remainingCount = Number(remaining.rows[0]?.cnt) || 0;
240
315
  const exhausted = new Set(exhaustedIds(deadLetter));
241
- const actionableRemaining = exhausted.size === 0 ? remainingCount : Number(
316
+ const parkedFilter = hasEmbeddingModelCol ? ` AND ${NOT_PARKED_SQL}` : "";
317
+ const actionableRemaining = exhausted.size === 0 && !hasEmbeddingModelCol ? remainingCount : Number(
242
318
  (await client.execute({
243
- sql: `SELECT COUNT(*) as cnt FROM memories WHERE vector IS NULL AND id NOT IN (${[...exhausted].map(() => "?").join(",")})`,
319
+ sql: `SELECT COUNT(*) as cnt FROM memories WHERE vector IS NULL${parkedFilter}${exhausted.size > 0 ? ` AND id NOT IN (${[...exhausted].map(() => "?").join(",")})` : ""}`,
244
320
  args: [...exhausted]
245
321
  })).rows[0]?.cnt
246
322
  ) || 0;
@@ -271,10 +347,14 @@ if (isMainModule(import.meta.url)) {
271
347
  });
272
348
  }
273
349
  export {
350
+ backfillMaxEmbedChars,
274
351
  backfillVectors,
352
+ computeBackfillBatchSize,
353
+ computeBackfillPauseMs,
275
354
  deadLetterMaxAttempts,
276
355
  exhaustedIds,
277
356
  isBackfillNeeded,
278
357
  maxFailuresPerRun,
358
+ parkPoisonRows,
279
359
  recordDeadLetter
280
360
  };
@@ -1,37 +1,37 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  pushToPostgres
4
- } from "../chunk-LCZ55G5G.js";
5
- import "../chunk-72LWCZTJ.js";
6
- import "../chunk-FANIBYUO.js";
4
+ } from "../chunk-WCXFNUMD.js";
5
+ import "../chunk-AI3BK3JD.js";
6
+ import "../chunk-A2K7YIRL.js";
7
7
  import "../chunk-LO6L5ADL.js";
8
- import "../chunk-2GBGIXKH.js";
8
+ import "../chunk-S6XKC36B.js";
9
9
  import "../chunk-QGGH7LOU.js";
10
- import "../chunk-3JW3ZXCP.js";
11
- import "../chunk-AFNRE2RV.js";
12
- import "../chunk-3NGZ4PL7.js";
13
- import "../chunk-CMDC5D7S.js";
14
10
  import {
15
11
  disposeStore,
16
12
  initStore
17
- } from "../chunk-H2SD2EA7.js";
13
+ } from "../chunk-UW5QD52P.js";
18
14
  import "../chunk-CHCA3ZM2.js";
19
15
  import "../chunk-OTVEIJUQ.js";
20
- import "../chunk-SIJSFULW.js";
16
+ import "../chunk-6IJ47YFD.js";
21
17
  import "../chunk-Y25OJWOQ.js";
18
+ import "../chunk-UPLY33F7.js";
19
+ import "../chunk-AFNRE2RV.js";
20
+ import "../chunk-3NGZ4PL7.js";
21
+ import "../chunk-NLEW62VC.js";
22
22
  import "../chunk-MP2AFCGL.js";
23
23
  import {
24
24
  getClient
25
- } from "../chunk-XLNF3CIO.js";
25
+ } from "../chunk-46AMZT3C.js";
26
26
  import "../chunk-2I23RPSI.js";
27
- import "../chunk-WXRVHXVP.js";
27
+ import "../chunk-MV5OSOP4.js";
28
28
  import "../chunk-PNQDP3OA.js";
29
29
  import "../chunk-H73TUI4Y.js";
30
30
  import "../chunk-7HLWBYH7.js";
31
31
  import "../chunk-FXU7JOXK.js";
32
32
  import "../chunk-Z42MXYWW.js";
33
- import "../chunk-VY7345RO.js";
34
- import "../chunk-DQJ3WZRK.js";
33
+ import "../chunk-L5TUAHLX.js";
34
+ import "../chunk-RYZR4NNE.js";
35
35
  import "../chunk-7Y5UDEVM.js";
36
36
  import "../chunk-SHIICYJW.js";
37
37
  import "../chunk-MLKGABMK.js";
@@ -1,15 +1,15 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  checkClaudeCodeInstall
4
- } from "../chunk-SENJA7BZ.js";
5
- import "../chunk-HKSJSW2V.js";
4
+ } from "../chunk-3VYAQUWZ.js";
5
+ import "../chunk-EZHNCIO5.js";
6
6
  import "../chunk-X2FHTDIU.js";
7
7
  import "../chunk-SSC7EKY2.js";
8
8
  import "../chunk-75H4R62K.js";
9
- import "../chunk-CWQAXO3O.js";
10
- import "../chunk-XLNF3CIO.js";
9
+ import "../chunk-5RACW3LX.js";
10
+ import "../chunk-46AMZT3C.js";
11
11
  import "../chunk-2I23RPSI.js";
12
- import "../chunk-WXRVHXVP.js";
12
+ import "../chunk-MV5OSOP4.js";
13
13
  import "../chunk-PNQDP3OA.js";
14
14
  import "../chunk-H73TUI4Y.js";
15
15
  import "../chunk-7HLWBYH7.js";
@@ -1,39 +1,46 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  fastDbInit
4
- } from "../chunk-ZU6767WK.js";
4
+ } from "../chunk-HWVEDRZA.js";
5
5
  import {
6
6
  sessionScopeFilter
7
- } from "../chunk-PLBDXCYZ.js";
8
- import "../chunk-HWC5W34K.js";
9
- import "../chunk-KLG53B63.js";
10
- import "../chunk-4FVVJ7ME.js";
7
+ } from "../chunk-XK7HAEFC.js";
8
+ import "../chunk-3LZILUET.js";
9
+ import "../chunk-BKOGHVRO.js";
10
+ import "../chunk-U3VSCPGX.js";
11
+ import "../chunk-EIKATSE4.js";
11
12
  import "../chunk-E23LNUWJ.js";
12
13
  import "../chunk-4JERP7NT.js";
13
- import "../chunk-ABGDTMKC.js";
14
+ import "../chunk-3CT3GN2B.js";
14
15
  import "../chunk-SSTLTIF3.js";
15
16
  import "../chunk-RMOBQ6A5.js";
16
17
  import "../chunk-54QCG45Y.js";
17
- import "../chunk-HV5CUDOE.js";
18
- import "../chunk-QVFJCFNM.js";
18
+ import "../chunk-364VBQIC.js";
19
+ import "../chunk-FROUDYRT.js";
19
20
  import "../chunk-NGP6LSV2.js";
20
- import "../chunk-EPBB2OD3.js";
21
+ import "../chunk-GHARDROH.js";
21
22
  import "../chunk-CVYC6DUW.js";
23
+ import "../chunk-W33H7TWW.js";
24
+ import "../chunk-HCJCW7X4.js";
22
25
  import "../chunk-OPU3NYOO.js";
26
+ import "../chunk-UPLY33F7.js";
27
+ import "../chunk-AFNRE2RV.js";
28
+ import "../chunk-3NGZ4PL7.js";
29
+ import "../chunk-NLEW62VC.js";
23
30
  import "../chunk-HYZV25LY.js";
24
31
  import "../chunk-GJV3WDWM.js";
25
32
  import "../chunk-MP2AFCGL.js";
26
33
  import {
27
34
  getClient
28
- } from "../chunk-XLNF3CIO.js";
35
+ } from "../chunk-46AMZT3C.js";
29
36
  import "../chunk-2I23RPSI.js";
30
- import "../chunk-WXRVHXVP.js";
37
+ import "../chunk-MV5OSOP4.js";
31
38
  import "../chunk-PNQDP3OA.js";
32
39
  import "../chunk-H73TUI4Y.js";
33
40
  import "../chunk-7HLWBYH7.js";
34
41
  import "../chunk-FXU7JOXK.js";
35
- import "../chunk-VY7345RO.js";
36
- import "../chunk-DQJ3WZRK.js";
42
+ import "../chunk-L5TUAHLX.js";
43
+ import "../chunk-RYZR4NNE.js";
37
44
  import "../chunk-7Y5UDEVM.js";
38
45
  import "../chunk-SHIICYJW.js";
39
46
  import {
package/dist/bin/cli.js CHANGED
@@ -106,7 +106,7 @@ if (args.includes("--global")) {
106
106
  );
107
107
  await runClaudeInstall();
108
108
  } else if (args.includes("--commands-only")) {
109
- const { copySlashCommands, resolvePackageRoot } = await import("../installer-SC7CQBYY.js");
109
+ const { copySlashCommands, resolvePackageRoot } = await import("../installer-U7D3PAR5.js");
110
110
  try {
111
111
  const packageRoot = resolvePackageRoot();
112
112
  const result = await copySlashCommands(packageRoot);
@@ -195,7 +195,7 @@ if (args.includes("--global")) {
195
195
  process.exit(1);
196
196
  }
197
197
  } else if (args[0] === "key") {
198
- const { main: runKey } = await import("../exe-key-IPGY4RMU.js");
198
+ const { main: runKey } = await import("../exe-key-6SLYWY36.js");
199
199
  await runKey(args.slice(1));
200
200
  } else if (args[0] === "link") {
201
201
  console.error("`exe-os link` has been removed from the customer command surface.");
@@ -247,7 +247,7 @@ if (args.includes("--global")) {
247
247
  process.exit(1);
248
248
  }
249
249
  } else if (args[0] === "backfill-metadata") {
250
- const { backfillMetadata } = await import("../backfill-metadata-CXWFCTBO.js");
250
+ const { backfillMetadata } = await import("../backfill-metadata-N5VVCYFT.js");
251
251
  let batchSize = 50;
252
252
  let limit = 0;
253
253
  let dryRun = false;
@@ -278,10 +278,10 @@ if (args.includes("--global")) {
278
278
  process.exit(1);
279
279
  }
280
280
  } else if (args[0] === "export") {
281
- const { runExeExport } = await import("../exe-export-THIAYHXK.js");
281
+ const { runExeExport } = await import("../exe-export-EDQDGZV3.js");
282
282
  await runExeExport(args.slice(1));
283
283
  } else if (args[0] === "import") {
284
- const { runExeImport } = await import("../exe-import-3Y4VOUYL.js");
284
+ const { runExeImport } = await import("../exe-import-DV7GKBZD.js");
285
285
  await runExeImport(args.slice(1));
286
286
  } else if (args[0] === "import-history") {
287
287
  const { runImportHistory } = await import("./import-history.js");
@@ -306,7 +306,7 @@ if (args.includes("--global")) {
306
306
  const { initStore } = await import("../lib/store.js");
307
307
  await initStore();
308
308
  const { sendMessage } = await import("../lib/messaging.js");
309
- const { getActiveAgent } = await import("../active-agent-SHM4QSRJ.js");
309
+ const { getActiveAgent } = await import("../active-agent-IGVX2AAK.js");
310
310
  const { agentId } = getActiveAgent();
311
311
  const result = await sendMessage({
312
312
  fromAgent: agentId,
@@ -325,23 +325,12 @@ ID: ${result.id}`);
325
325
  } else if (args[0] === "license") {
326
326
  await runLicense(args.slice(1));
327
327
  } else if (args[0] === "healthcheck") {
328
- const { runHealthCheck } = await import("./exe-healthcheck.js");
329
- const { results, passed, failed } = runHealthCheck();
330
- console.log("\n exe-os Health Check\n");
331
- for (const r of results) {
332
- const icon = r.pass ? "\x1B[32m\u2713\x1B[0m" : "\x1B[31m\u2717\x1B[0m";
333
- console.log(` ${icon} ${r.name}`);
334
- console.log(` ${r.detail}`);
335
- }
336
- console.log(failed === 0 ? `
337
- \x1B[32m${passed} passed\x1B[0m
338
- ` : `
339
- \x1B[32m${passed} passed\x1B[0m, \x1B[31m${failed} failed\x1B[0m
340
- `);
341
- process.exit(failed > 0 ? 1 : 0);
328
+ const { runHealthCheckWithDeadline } = await import("./exe-healthcheck.js");
329
+ const { code } = runHealthCheckWithDeadline();
330
+ process.exit(code);
342
331
  } else if (args[0] === "doctor") {
343
332
  if (args.includes("--drift")) {
344
- const { runDrift } = await import("../exe-drift-GLJIM7EI.js");
333
+ const { runDrift } = await import("../exe-drift-VOJZYOIO.js");
345
334
  await runDrift(args.slice(1));
346
335
  } else {
347
336
  const { runCcDoctor } = await import("./cc-doctor.js");
@@ -358,7 +347,7 @@ ID: ${result.id}`);
358
347
  }
359
348
  } else if (args[0] === "backup") {
360
349
  const sub = args[1];
361
- const { listBackups, createBackup, restoreBackup } = await import("../db-backup-ITRADB2J.js");
350
+ const { listBackups, createBackup, restoreBackup } = await import("../db-backup-I5GQBRIG.js");
362
351
  if (sub === "list" || !sub) {
363
352
  const backups = listBackups();
364
353
  if (backups.length === 0) {
@@ -413,7 +402,7 @@ ID: ${result.id}`);
413
402
  process.exit(1);
414
403
  }
415
404
  } else if (args[0] === "setup" || args[0] === "-setup" || args[0] === "--setup") {
416
- const { runSetupWizard } = await import("../setup-wizard-KVTLSSRD.js");
405
+ const { runSetupWizard } = await import("../setup-wizard-5STOE3PS.js");
417
406
  await runSetupWizard({
418
407
  skipModel: args.includes("--skip-model"),
419
408
  nonInteractive: args.includes("--non-interactive") || args.includes("-y") || args.includes("--yes"),
@@ -466,10 +455,10 @@ Post-deploy verification \u2014 8 runtime checks after stack-update.
466
455
  `);
467
456
  process.exit(report.failed > 0 ? 1 : 0);
468
457
  } else if (args[0] === "snapshot") {
469
- const { main: runSnapshot } = await import("../exe-snapshot-2ZEWCDYK.js");
458
+ const { main: runSnapshot } = await import("../exe-snapshot-TDQI34DW.js");
470
459
  await runSnapshot(args.slice(1));
471
460
  } else if (args[0] === "boot") {
472
- const { projectBoot, parseBootArgs } = await import("../project-boot-22ZZL2GE.js");
461
+ const { projectBoot, parseBootArgs } = await import("../project-boot-TOFNGMHM.js");
473
462
  const bootOpts = parseBootArgs(args.slice(1));
474
463
  console.log(await projectBoot(bootOpts));
475
464
  } else if (args[0] === "brand") {
@@ -583,7 +572,7 @@ cd into a project folder and run \x1B[1m${cooName}1\x1B[0m to boot your COO.
583
572
  }
584
573
  }
585
574
  async function runCodeContext(ccArgs) {
586
- const { buildCodeContextIndex, getCodeContextStats, searchCodeContext } = await import("../code-context-index-6YQ3DGCN.js");
575
+ const { buildCodeContextIndex, getCodeContextStats, searchCodeContext } = await import("../code-context-index-NODPVXHC.js");
587
576
  const sub = ccArgs[0] ?? "status";
588
577
  const projectRoot = valueAfter(ccArgs, "--project-root") ?? process.cwd();
589
578
  if (sub === "init" || sub === "index") {
@@ -659,7 +648,7 @@ function numberAfter(args2, flag) {
659
648
  return Number.isFinite(parsed) ? parsed : void 0;
660
649
  }
661
650
  async function runClaudeInstall() {
662
- const { runInstaller } = await import("../installer-SC7CQBYY.js");
651
+ const { runInstaller } = await import("../installer-U7D3PAR5.js");
663
652
  try {
664
653
  await runInstaller();
665
654
  } catch (err) {
@@ -671,7 +660,7 @@ async function runClaudeInstall() {
671
660
  }
672
661
  }
673
662
  async function runOpenCodeInstall() {
674
- const { runOpenCodeInstaller } = await import("../installer-2EKTDQZB.js");
663
+ const { runOpenCodeInstaller } = await import("../installer-W4SHZFOR.js");
675
664
  try {
676
665
  await runOpenCodeInstaller();
677
666
  } catch (err) {
@@ -683,7 +672,7 @@ async function runOpenCodeInstall() {
683
672
  }
684
673
  }
685
674
  async function runCodexInstall() {
686
- const { runCodexInstaller } = await import("../installer-UEF44TWQ.js");
675
+ const { runCodexInstaller } = await import("../installer-WHO23TIO.js");
687
676
  try {
688
677
  await runCodexInstaller();
689
678
  } catch (err) {
@@ -695,7 +684,7 @@ async function runCodexInstall() {
695
684
  }
696
685
  }
697
686
  async function runClaudeCheck() {
698
- const { detectMcpNameCollisions } = await import("../installer-SC7CQBYY.js");
687
+ const { detectMcpNameCollisions } = await import("../installer-U7D3PAR5.js");
699
688
  const claudeDir = path.join(os.homedir(), ".claude");
700
689
  const settingsPath = path.join(claudeDir, "settings.json");
701
690
  const claudeJsonPath = path.join(os.homedir(), ".claude.json");
@@ -1200,6 +1189,13 @@ async function runCloudSync() {
1200
1189
  const { cloudSync } = await import("../lib/cloud-sync.js");
1201
1190
  const { getMasterKey } = await import("../lib/keychain.js");
1202
1191
  const { initSyncCrypto } = await import("../lib/crypto.js");
1192
+ const { assertCloudSyncReachable, withTimeout } = await import("./exe-cloud.js");
1193
+ try {
1194
+ await assertCloudSyncReachable(config.cloud.endpoint);
1195
+ } catch (err) {
1196
+ console.error(`Cloud sync aborted: ${err instanceof Error ? err.message : String(err)}`);
1197
+ process.exit(1);
1198
+ }
1203
1199
  await initStore();
1204
1200
  const masterKey = await getMasterKey();
1205
1201
  if (masterKey) {
@@ -1211,7 +1207,8 @@ async function runCloudSync() {
1211
1207
  }
1212
1208
  console.log("Syncing with Exe Cloud now... (Normally this runs automatically in the background.)");
1213
1209
  try {
1214
- const result = await cloudSync(config.cloud);
1210
+ const syncTimeoutMs = Number(process.env.EXE_CLOUD_SYNC_TIMEOUT_MS ?? 6e5);
1211
+ const result = await withTimeout(cloudSync(config.cloud), syncTimeoutMs, "Cloud sync");
1215
1212
  console.log("");
1216
1213
  console.log(` Active memories: ${result.totalMemories} (\u2191 ${result.pushed} syncable rows pushed, \u2193 ${result.pulled} pulled)`);
1217
1214
  console.log(` Behaviors: ${result.behaviors.pushed} total (\u2193 ${result.behaviors.pulled} pulled)`);
@@ -99,6 +99,7 @@ test("No unscoped task queries \u2014 all task queries have session scope or PK
99
99
  const blockLower = block.toLowerCase();
100
100
  const hasScope = blockLower.includes("scope.sql") || blockLower.includes("sessionscopefilter") || blockLower.includes("strictsessionscopefilter") || blockLower.includes("session_scope") || blockLower.includes("intentionally unscoped") || blockLower.includes("audited 2026") || blockLower.includes("querytaskrows");
101
101
  const isSafe = hasScope || /where\s+id\s*=\s*\?/.test(blockLower) || // PK lookup by full UUID
102
+ /where\s+id\s+in\s*\(\s*(\?|\$\{)/.test(blockLower) || // PK lookup by explicit id list (bulk update by ids, e.g. closeReviewRows) — strongest scope, not a subquery
102
103
  /where\s+task_file\s*=\s*\?/.test(blockLower) || // task_file exact match
103
104
  /select\s+count\s*\(\s*\*\s*\)/.test(blockLower) || // COUNT(*) stats
104
105
  /assigned_to\s*=\s*\?.*where\s+id/.test(blockLower) || // UPDATE by PK