@askexenow/exe-os 0.9.319 → 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 (318) 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/deploy/stack-manifests/v0.9.json +110 -2
  11. package/dist/{active-agent-EA2Q3KYR.js → active-agent-67BHUBV2.js} +3 -3
  12. package/dist/{active-agent-XIPGXSQA.js → active-agent-IGVX2AAK.js} +3 -3
  13. package/dist/{agentic-ontology-7ZUMZC2O.js → agentic-ontology-I5MEKVGE.js} +1 -1
  14. package/dist/backfill-gate-J7UXFNXU.js +19 -0
  15. package/dist/{backfill-metadata-7RO5PSMN.js → backfill-metadata-N5VVCYFT.js} +4 -4
  16. package/dist/{behaviors-OEGZD5DH.js → behaviors-2YYG72ZH.js} +5 -5
  17. package/dist/bin/agentic-ontology-backfill.js +5 -5
  18. package/dist/bin/agentic-reflection-backfill.js +6 -6
  19. package/dist/bin/agentic-semantic-label.js +5 -5
  20. package/dist/bin/backfill-conversations.js +11 -11
  21. package/dist/bin/backfill-responses.js +11 -11
  22. package/dist/bin/backfill-vectors.js +102 -22
  23. package/dist/bin/bulk-sync-postgres.js +14 -14
  24. package/dist/bin/cc-doctor.js +5 -5
  25. package/dist/bin/cleanup-stale-review-tasks.js +20 -13
  26. package/dist/bin/cli.js +68 -31
  27. package/dist/bin/customer-readiness.js +1 -0
  28. package/dist/bin/deferred-daemon-restart.js +79 -76
  29. package/dist/bin/exe-agent-config.js +3 -3
  30. package/dist/bin/exe-agent.js +8 -8
  31. package/dist/bin/exe-assign.js +10 -10
  32. package/dist/bin/exe-boot.js +66 -32
  33. package/dist/bin/exe-call.js +4 -4
  34. package/dist/bin/exe-cloud.js +120 -47
  35. package/dist/bin/exe-config-dump.js +3 -3
  36. package/dist/bin/exe-dispatch.js +48 -14
  37. package/dist/bin/exe-doctor.js +4 -4
  38. package/dist/bin/exe-export-behaviors.js +7 -7
  39. package/dist/bin/exe-forget.js +6 -6
  40. package/dist/bin/exe-gateway.js +8 -8
  41. package/dist/bin/exe-healthcheck.js +17 -8
  42. package/dist/bin/exe-heartbeat.js +20 -13
  43. package/dist/bin/exe-kill.js +23 -16
  44. package/dist/bin/exe-launch-agent.js +39 -25
  45. package/dist/bin/exe-new-employee.js +8 -8
  46. package/dist/bin/exe-pending-messages.js +21 -14
  47. package/dist/bin/exe-pending-notifications.js +20 -13
  48. package/dist/bin/exe-pending-reviews.js +20 -13
  49. package/dist/bin/exe-rename.js +4 -4
  50. package/dist/bin/exe-review.js +22 -15
  51. package/dist/bin/exe-search.js +8 -13
  52. package/dist/bin/exe-session-cleanup.js +39 -22
  53. package/dist/bin/exe-settings.js +15 -15
  54. package/dist/bin/exe-start-codex.js +12 -12
  55. package/dist/bin/exe-start-opencode.js +8 -8
  56. package/dist/bin/exe-status.js +21 -14
  57. package/dist/bin/exe-support.js +3 -3
  58. package/dist/bin/exe-team.js +3 -3
  59. package/dist/bin/exe-watchdog.js +278 -39
  60. package/dist/bin/git-sweep.js +21 -14
  61. package/dist/bin/graph-backfill.js +4 -4
  62. package/dist/bin/graph-export.js +5 -5
  63. package/dist/bin/import-history.js +7 -7
  64. package/dist/bin/install-launchd.js +2 -2
  65. package/dist/bin/install.js +120 -87
  66. package/dist/bin/intercom-check.js +4 -4
  67. package/dist/bin/mcp-sessions.js +2 -2
  68. package/dist/bin/orchestration-metrics.js +4 -4
  69. package/dist/bin/postgres-agentic-reflection-backfill.js +2 -2
  70. package/dist/bin/postgres-agentic-semantic-backfill.js +1 -1
  71. package/dist/bin/registry-proxy.js +7 -1
  72. package/dist/bin/scan-tasks.js +20 -13
  73. package/dist/bin/setup.js +1 -1
  74. package/dist/bin/shard-migrate.js +4 -4
  75. package/dist/bin/stack-update.js +4 -4
  76. package/dist/bin/vps-health-gate.js +1 -1
  77. package/dist/{capability-cards-4BONYCI4.js → capability-cards-RC4JYXCG.js} +2 -2
  78. package/dist/{capacity-monitor-SV2Q7CMC.js → capacity-monitor-EDIGJSVQ.js} +21 -14
  79. package/dist/{catchup-brief-5ULTVKSE.js → catchup-brief-YVSBRXYZ.js} +23 -16
  80. package/dist/{chunk-YZTOGIV7.js → chunk-2COLYLE6.js} +1 -1
  81. package/dist/{chunk-K6GZMAIA.js → chunk-2RR2CJCX.js} +2 -2
  82. package/dist/{chunk-RVF6JBHW.js → chunk-364VBQIC.js} +1 -1
  83. package/dist/{chunk-TWPYSILC.js → chunk-3CT3GN2B.js} +1 -1
  84. package/dist/{chunk-5L62XXNH.js → chunk-3LZILUET.js} +1 -1
  85. package/dist/{chunk-KF6NBYV4.js → chunk-3MUV2GDZ.js} +2 -2
  86. package/dist/{chunk-36CFV3ZF.js → chunk-3QJ3GDQZ.js} +5 -5
  87. package/dist/{chunk-GRB44WRN.js → chunk-3VYAQUWZ.js} +54 -7
  88. package/dist/{chunk-36SS3TE7.js → chunk-46AMZT3C.js} +110 -24
  89. package/dist/{chunk-Q774HAGE.js → chunk-4GK6JTEV.js} +1 -1
  90. package/dist/{chunk-RAKFEXCN.js → chunk-4VW5KF6X.js} +4 -4
  91. package/dist/{chunk-YJYE6MMJ.js → chunk-5CRFNQ7L.js} +2 -2
  92. package/dist/{chunk-OC222BAQ.js → chunk-5HXJI7SX.js} +1 -1
  93. package/dist/{chunk-CWQAXO3O.js → chunk-5RACW3LX.js} +28 -3
  94. package/dist/{chunk-VTHR4DPE.js → chunk-5ZNY7IZI.js} +5 -1
  95. package/dist/{chunk-RJHOFX72.js → chunk-5ZQMGI3V.js} +1 -1
  96. package/dist/{chunk-YSSJOTVN.js → chunk-644DVREV.js} +2 -2
  97. package/dist/chunk-6IWLAQ7O.js +40 -0
  98. package/dist/{chunk-ZOCW4TGA.js → chunk-6UR7C2NX.js} +1 -1
  99. package/dist/{chunk-V2GI2MJJ.js → chunk-7PXMLHPG.js} +2 -2
  100. package/dist/{chunk-7S3SRDPQ.js → chunk-A2K7YIRL.js} +2 -2
  101. package/dist/{chunk-AKD6IKYS.js → chunk-A3CRB4PS.js} +3 -3
  102. package/dist/{chunk-XLQH263A.js → chunk-A6I36KVN.js} +2 -2
  103. package/dist/{chunk-CNFUVZLM.js → chunk-A6ODMODG.js} +1 -1
  104. package/dist/{chunk-B3SFW4LY.js → chunk-AVEOL6NP.js} +633 -539
  105. package/dist/{chunk-RREJ2QQ4.js → chunk-BKOGHVRO.js} +1 -1
  106. package/dist/{chunk-WXQVFMNV.js → chunk-CCYEO6EG.js} +5 -5
  107. package/dist/{chunk-PM6XSS6R.js → chunk-CMZIAR5S.js} +1 -1
  108. package/dist/{chunk-EPZWVXKI.js → chunk-CP4LIKCX.js} +1 -1
  109. package/dist/{chunk-WG4PRZGT.js → chunk-DDRASSJI.js} +3 -3
  110. package/dist/{chunk-OXGNFT3L.js → chunk-DZVQ23CM.js} +7 -7
  111. package/dist/{chunk-PJH7JUWD.js → chunk-E72VLAJH.js} +3 -3
  112. package/dist/{chunk-MM7EYJJ3.js → chunk-EAHLB7YN.js} +1 -1
  113. package/dist/{signal-paths-4GOIRLGH.js → chunk-EIKATSE4.js} +3 -4
  114. package/dist/{chunk-7I4HQYPL.js → chunk-EZHNCIO5.js} +1 -1
  115. package/dist/{chunk-Q26VSIXA.js → chunk-FROUDYRT.js} +57 -2
  116. package/dist/{chunk-CQ2T4A2D.js → chunk-GHARDROH.js} +2 -2
  117. package/dist/{chunk-C5SALMKH.js → chunk-GMDLNJ5E.js} +6 -6
  118. package/dist/{chunk-JNUYJRQX.js → chunk-H7FI3AWZ.js} +4 -4
  119. package/dist/{chunk-DTP4HXM3.js → chunk-HAA4N3NI.js} +2 -2
  120. package/dist/{chunk-WUF5MYA5.js → chunk-HYNNAM4R.js} +9 -9
  121. package/dist/{chunk-IPD5ZSOK.js → chunk-I4IMPAZQ.js} +2 -2
  122. package/dist/{chunk-F3P34OHU.js → chunk-IFXE7QYT.js} +1 -1
  123. package/dist/{chunk-4XAYC77M.js → chunk-IKFL4OLM.js} +1 -1
  124. package/dist/{chunk-UQOCHKPX.js → chunk-IKOAALTW.js} +1 -1
  125. package/dist/{chunk-WL5K3R7W.js → chunk-JTF4UVXK.js} +1 -1
  126. package/dist/{chunk-V4UKBUUA.js → chunk-KADUJ7PE.js} +3 -3
  127. package/dist/{chunk-DFSR3UUL.js → chunk-KIXTW4VH.js} +1 -1
  128. package/dist/chunk-KPIN44GZ.js +67 -0
  129. package/dist/{chunk-QLVMJGUQ.js → chunk-L5TUAHLX.js} +46 -7
  130. package/dist/{chunk-JJ2FFUFV.js → chunk-LX2TYKEQ.js} +1 -1
  131. package/dist/{chunk-ONKIWA3R.js → chunk-ML4S5SHZ.js} +3 -1
  132. package/dist/{chunk-7XGDTKHX.js → chunk-NLEW62VC.js} +8 -2
  133. package/dist/{chunk-DRA2FYUQ.js → chunk-NQPAG7CB.js} +3 -3
  134. package/dist/{chunk-3ZOWUUKR.js → chunk-NW6V3XVK.js} +1 -1
  135. package/dist/{chunk-LJTXVAG4.js → chunk-PGEADAZL.js} +3 -3
  136. package/dist/{chunk-VUZRAEF3.js → chunk-QBRBLEXP.js} +284 -38
  137. package/dist/{chunk-JPTBLJLS.js → chunk-QCWZMS7B.js} +1 -1
  138. package/dist/{chunk-LRWB35MD.js → chunk-RYJH6S55.js} +1 -1
  139. package/dist/{chunk-LQWCIW4K.js → chunk-S6XKC36B.js} +1 -1
  140. package/dist/{chunk-C54QKE4O.js → chunk-SAUO2ZLB.js} +1 -1
  141. package/dist/{chunk-DZJZAHTB.js → chunk-SE7TU5GX.js} +3 -3
  142. package/dist/{chunk-NODTWD7N.js → chunk-SSIUJXOL.js} +1 -1
  143. package/dist/{chunk-2OOCPANV.js → chunk-SXN3TRJ4.js} +80 -40
  144. package/dist/{chunk-E3WZA2WU.js → chunk-T3OGIK3Y.js} +1 -1
  145. package/dist/{skill-refinement-OJRBB3LD.js → chunk-U3VSCPGX.js} +3 -11
  146. package/dist/{chunk-7PUNIH6G.js → chunk-UB322YIG.js} +3 -3
  147. package/dist/{chunk-C7QYH2YN.js → chunk-UPLY33F7.js} +1 -1
  148. package/dist/{chunk-PHUKD7VK.js → chunk-UW5QD52P.js} +23 -9
  149. package/dist/{chunk-FJUQ5L5R.js → chunk-VH345O6X.js} +92 -1
  150. package/dist/{chunk-C2DFOF7O.js → chunk-VJL2BGX2.js} +1 -1
  151. package/dist/{chunk-TRXBT24O.js → chunk-VQEZ3ZNK.js} +5 -5
  152. package/dist/{chunk-KHM3TKOM.js → chunk-W33H7TWW.js} +1 -1
  153. package/dist/{chunk-YTHZTDXH.js → chunk-W377NZE4.js} +20 -11
  154. package/dist/{chunk-T5O2EBHU.js → chunk-WCXFNUMD.js} +136 -66
  155. package/dist/{chunk-IDMIGP53.js → chunk-WRA6OO5V.js} +3 -3
  156. package/dist/{chunk-MNUFLCHT.js → chunk-WYHCMHTL.js} +3 -3
  157. package/dist/{chunk-6DTSAEDS.js → chunk-X2K2LHFO.js} +2 -2
  158. package/dist/{chunk-LWBOSHSS.js → chunk-XK7HAEFC.js} +1485 -585
  159. package/dist/{chunk-N3ZLLKBN.js → chunk-XYJXJWKH.js} +3 -3
  160. package/dist/{chunk-GBUFDCLX.js → chunk-YOS4FN26.js} +30 -19
  161. package/dist/{chunk-HFDFQ7CB.js → chunk-YS7VW7KR.js} +1 -1
  162. package/dist/{chunk-B2FUBD6Z.js → chunk-YTPNOTUS.js} +198 -39
  163. package/dist/{chunk-TDV3XEGQ.js → chunk-ZR57QAJ2.js} +1 -1
  164. package/dist/{chunk-MRB2BXIB.js → chunk-ZU2UK4BC.js} +23 -23
  165. package/dist/{cleanup-graph-garbage-IXYSUIUH.js → cleanup-graph-garbage-5KI4MSDC.js} +4 -4
  166. package/dist/{co-activation-BQRXOZN2.js → co-activation-JRDKF2M3.js} +2 -2
  167. package/dist/{co-occurrence-QPLSUQ4O.js → co-occurrence-JGFIAEKR.js} +2 -2
  168. package/dist/{code-context-index-NQFP6ED5.js → code-context-index-NODPVXHC.js} +3 -3
  169. package/dist/{crdt-sync-VLSJH6LL.js → crdt-sync-NOWBFD5N.js} +1 -1
  170. package/dist/{crm-bridge-BVTB6LZK.js → crm-bridge-CZLEW2LW.js} +1 -1
  171. package/dist/{crm-webhook-IZYJXHSK.js → crm-webhook-FXSSAHON.js} +2 -2
  172. package/dist/{cto-delegation-gate-FU4HGNSN.js → cto-delegation-gate-J6DDJFAB.js} +19 -12
  173. package/dist/{daemon-orchestration-IXSMZXGO.js → daemon-orchestration-HIZMZ2Y5.js} +31 -16
  174. package/dist/{db-backup-7GJYDSXA.js → db-backup-I5GQBRIG.js} +1 -1
  175. package/dist/{doc-graph-extractor-U7XGZQ7T.js → doc-graph-extractor-TAZHM63R.js} +2 -2
  176. package/dist/{documents-U47VG24Q.js → documents-XXOQ5QIJ.js} +10 -10
  177. package/dist/{dreaming-VBI4BI6R.js → dreaming-V275C7L2.js} +20 -13
  178. package/dist/{exe-drift-BMSRHAT6.js → exe-drift-VOJZYOIO.js} +3 -3
  179. package/dist/{exe-export-CIRE2HZA.js → exe-export-EDQDGZV3.js} +6 -6
  180. package/dist/{exe-import-X6U6VG7Q.js → exe-import-DV7GKBZD.js} +6 -6
  181. package/dist/{exe-key-7VXVXX4Q.js → exe-key-6SLYWY36.js} +77 -74
  182. package/dist/{exe-snapshot-P5BLEXQJ.js → exe-snapshot-TDQI34DW.js} +23 -16
  183. package/dist/{fast-db-init-SMBGFVXM.js → fast-db-init-SNHHRW3L.js} +1 -1
  184. package/dist/{founder-context-AMMO53S7.js → founder-context-UZVRU4HI.js} +2 -2
  185. package/dist/gateway/index.js +9 -9
  186. package/dist/{git-staleness-AJDPXQJF.js → git-staleness-TRCX6FVG.js} +2 -2
  187. package/dist/{global-procedures-KV2SVX43.js → global-procedures-LH4JG3CR.js} +3 -3
  188. package/dist/{graph-auto-extract-HFXDXJC3.js → graph-auto-extract-YTXHYR35.js} +2 -2
  189. package/dist/hooks/bug-report-worker.js +22 -15
  190. package/dist/hooks/codex-stop-task-finalizer.js +22 -15
  191. package/dist/hooks/commit-complete.js +22 -15
  192. package/dist/hooks/error-recall.js +6 -6
  193. package/dist/hooks/exe-heartbeat-hook.js +3 -3
  194. package/dist/hooks/ingest-worker.js +6 -6
  195. package/dist/hooks/ingest.js +6 -6
  196. package/dist/hooks/instructions-loaded.js +4 -4
  197. package/dist/hooks/manifest.json +20 -20
  198. package/dist/hooks/notification.js +4 -4
  199. package/dist/hooks/post-compact.js +21 -14
  200. package/dist/hooks/post-tool-combined.js +8 -8
  201. package/dist/hooks/pre-compact.js +22 -21
  202. package/dist/hooks/pre-tool-use.js +36 -24
  203. package/dist/hooks/prompt-submit.js +89 -72
  204. package/dist/hooks/session-end.js +27 -26
  205. package/dist/hooks/session-start.js +13 -13
  206. package/dist/hooks/stop.js +45 -42
  207. package/dist/hooks/subagent-stop.js +24 -41
  208. package/dist/hooks/summary-worker.js +27 -25
  209. package/dist/index.js +31 -24
  210. package/dist/{installer-MWRZB3RT.js → installer-U7D3PAR5.js} +5 -5
  211. package/dist/{installer-XLP5MIRG.js → installer-W4SHZFOR.js} +5 -5
  212. package/dist/{installer-2SY3BEHJ.js → installer-WHO23TIO.js} +5 -5
  213. package/dist/intercom-queue-2XB622OR.js +53 -0
  214. package/dist/lib/agent-config.js +13 -1
  215. package/dist/lib/cloud-sync.js +16 -14
  216. package/dist/lib/consolidation.js +5 -5
  217. package/dist/lib/database.js +10 -2
  218. package/dist/lib/db-daemon-client.js +3 -3
  219. package/dist/lib/db.js +10 -2
  220. package/dist/lib/device-registry.js +1 -1
  221. package/dist/lib/embed-worker.js +28 -0
  222. package/dist/lib/embedder.js +3 -3
  223. package/dist/lib/employee-templates.js +4 -4
  224. package/dist/lib/employees.js +2 -2
  225. package/dist/lib/exe-daemon-client.js +2 -2
  226. package/dist/lib/exe-daemon.js +319 -129
  227. package/dist/lib/hybrid-search.js +5 -5
  228. package/dist/lib/identity.js +2 -2
  229. package/dist/lib/license.js +8 -2
  230. package/dist/lib/messaging.js +20 -13
  231. package/dist/lib/registry-proxy.js +1 -1
  232. package/dist/lib/reminders.js +3 -3
  233. package/dist/lib/schedules.js +5 -5
  234. package/dist/lib/session-registry.js +4 -4
  235. package/dist/lib/skill-learning.js +6 -6
  236. package/dist/lib/status-brief.js +1 -1
  237. package/dist/lib/store.js +4 -4
  238. package/dist/lib/task-router.js +3 -3
  239. package/dist/lib/tasks.js +21 -14
  240. package/dist/lib/tmux-routing.js +27 -12
  241. package/dist/lib/token-spend.js +3 -3
  242. package/dist/{license-gate-PHJLO2G6.js → license-gate-7CYKGRXW.js} +3 -3
  243. package/dist/license-sync-H4TVZ7PR.js +238 -0
  244. package/dist/mcp/register-tools.js +74 -71
  245. package/dist/mcp/server.js +95 -129
  246. package/dist/mcp/tools/complete-reminder.js +4 -4
  247. package/dist/mcp/tools/create-reminder.js +4 -4
  248. package/dist/mcp/tools/create-task.js +37 -18
  249. package/dist/mcp/tools/deactivate-behavior.js +7 -7
  250. package/dist/mcp/tools/list-reminders.js +4 -4
  251. package/dist/mcp/tools/list-tasks.js +23 -16
  252. package/dist/mcp/tools/send-message.js +22 -15
  253. package/dist/mcp/tools/update-task.js +22 -15
  254. package/dist/{mcp-http-config-6Q7SYJFY.js → mcp-http-config-LEBUOECG.js} +3 -3
  255. package/dist/{memory-cards-IG3K6T7M.js → memory-cards-47XM3VWW.js} +4 -4
  256. package/dist/{memory-graph-extractor-WZ77ITZ3.js → memory-graph-extractor-COD5E52L.js} +3 -3
  257. package/dist/{memory-poisoning-defense-YQW6WVPL.js → memory-poisoning-defense-SBYOEXT3.js} +2 -2
  258. package/dist/{memory-pressure-watchdog-JPCLJAXH.js → memory-pressure-watchdog-T276SDOR.js} +20 -13
  259. package/dist/{memory-queue-client-W24ZZ6ZF.js → memory-queue-client-IQ52W7W4.js} +3 -3
  260. package/dist/{memory-reflection-UGK2I2T7.js → memory-reflection-UZK5MHG2.js} +7 -9
  261. package/dist/{notifications-3MO6HVJM.js → notifications-O5DH4O35.js} +19 -12
  262. package/dist/{orchestration-events-SKESCF4F.js → orchestration-events-65YDDRF4.js} +3 -3
  263. package/dist/{orchestrator-SM65YFE2.js → orchestrator-NHMTDGWJ.js} +21 -14
  264. package/dist/{pipeline-router-UGCC5XSO.js → pipeline-router-2KJQDX5O.js} +3 -3
  265. package/dist/{plan-limits-RUCNKVRH.js → plan-limits-NQQN5C4S.js} +5 -5
  266. package/dist/{projection-worker-FBFQ232A.js → projection-worker-IUCBINZH.js} +12 -2
  267. package/dist/{prospective-memory-X4UQTUC2.js → prospective-memory-U2TISMIW.js} +2 -2
  268. package/dist/{reranker-FIRW3XMW.js → reranker-D6NSD5A3.js} +1 -1
  269. package/dist/{retrieval-health-NWYJEIZS.js → retrieval-health-LBNMCYNF.js} +1 -1
  270. package/dist/{review-polling-HUJMBGUY.js → review-polling-ZJWELHBP.js} +20 -13
  271. package/dist/runtime/index.js +27 -20
  272. package/dist/{session-events-UNCFJIK7.js → session-events-GRHFFRZV.js} +20 -13
  273. package/dist/{session-kill-telemetry-VQ4JWWTI.js → session-kill-telemetry-ALV4KMWS.js} +20 -13
  274. package/dist/{session-scope-OLSNZJ24.js → session-scope-JB5TBNCX.js} +19 -12
  275. package/dist/{setup-wizard-X72EV5E2.js → setup-wizard-5STOE3PS.js} +1 -1
  276. package/dist/signal-paths-4G53QTII.js +11 -0
  277. package/dist/skill-refinement-JB2LRDLS.js +20 -0
  278. package/dist/{stack-update-PK2OYYR3.js → stack-update-ZG4YS7WS.js} +9 -3
  279. package/dist/{steward-gate-5ZWUVNGD.js → steward-gate-TE63SGPL.js} +3 -3
  280. package/dist/{support-outbox-QPQQK7F7.js → support-outbox-MGUVVGHT.js} +96 -44
  281. package/dist/sweep-budget-WB2FKPYN.js +64 -0
  282. package/dist/{task-enforcement-VFFLCP3N.js → task-enforcement-72WZMQGC.js} +191 -17
  283. package/dist/{task-scope-75JK27V5.js → task-scope-FLDBFGWR.js} +25 -12
  284. package/dist/{tasks-crud-ADVXVR7D.js → tasks-crud-DKOSSXTD.js} +23 -12
  285. package/dist/{tasks-notify-NAA6IHHW.js → tasks-notify-WEWKM6B3.js} +20 -13
  286. package/dist/{tasks-review-5A3JJR6R.js → tasks-review-MHCL7PNP.js} +27 -14
  287. package/dist/{telemetry-upload-HSXQYSVJ.js → telemetry-upload-K2MZ4O6U.js} +7 -7
  288. package/dist/{token-budget-GD2VU7N4.js → token-budget-MZZ5DLOH.js} +3 -3
  289. package/dist/{tool-capability-index-KA2HQ7A4.js → tool-capability-index-M3FUNMFF.js} +1 -1
  290. package/dist/{tool-telemetry-UQY7GDGE.js → tool-telemetry-ERE5FRVC.js} +1 -1
  291. package/dist/tui/App.js +27 -20
  292. package/dist/{tui-data-VYSH7F2K.js → tui-data-JDBTFDAF.js} +19 -12
  293. package/dist/{worker-gate-DRSX2SOW.js → worker-gate-3OR47E4T.js} +1 -1
  294. package/dist/{workflow-engine-WFDIVYWP.js → workflow-engine-JLVEE2CI.js} +2 -2
  295. package/dist/{worktree-LWVPNZ4L.js → worktree-WLPHLZ2S.js} +4 -4
  296. package/dist/{worktree-sweep-3IZLGYYH.js → worktree-sweep-S6AYDLAQ.js} +5 -5
  297. package/package.json +3 -3
  298. package/release-notes.json +91 -56
  299. package/dist/chunk-4FVVJ7ME.js +0 -193
  300. package/dist/git-task-sweep-EJ3HEH4Y.js +0 -47
  301. package/dist/intercom-queue-6M5IRX3Y.js +0 -17
  302. /package/dist/{chunk-SOIHGU5I.js → chunk-2G75BF5J.js} +0 -0
  303. /package/dist/{chunk-NOPDNOGQ.js → chunk-6IJ47YFD.js} +0 -0
  304. /package/dist/{chunk-3YKA5BKT.js → chunk-AI3BK3JD.js} +0 -0
  305. /package/dist/{chunk-S6N7DLKL.js → chunk-B2ONIFHD.js} +0 -0
  306. /package/dist/{chunk-HJSMIHEY.js → chunk-FU767JXE.js} +0 -0
  307. /package/dist/{chunk-53ARJV2L.js → chunk-HWVEDRZA.js} +0 -0
  308. /package/dist/{chunk-3EZQSPTG.js → chunk-MV5OSOP4.js} +0 -0
  309. /package/dist/{chunk-7NG77I33.js → chunk-RYZR4NNE.js} +0 -0
  310. /package/dist/{chunk-UWVAG35C.js → chunk-SSM2JHQ4.js} +0 -0
  311. /package/dist/{chunk-XRJ3EFEF.js → chunk-TVY65H23.js} +0 -0
  312. /package/dist/{chunk-4AHV3QBI.js → chunk-VW326Q5R.js} +0 -0
  313. /package/dist/{core-memory-5HNI2YLS.js → core-memory-4AZ2CSQZ.js} +0 -0
  314. /package/dist/{entity-boost-AQBUEMJK.js → entity-boost-WV4GGNN2.js} +0 -0
  315. /package/dist/{message-queue-client-JGOK7POW.js → message-queue-client-JZ7TIOTZ.js} +0 -0
  316. /package/dist/{oauth-server-NZTPAFQ7.js → oauth-server-LUJ5P2BH.js} +0 -0
  317. /package/dist/{project-boot-3UP6ETJY.js → project-boot-TOFNGMHM.js} +0 -0
  318. /package/dist/{wiki-acl-4W4CSCFO.js → wiki-acl-3JA23DH3.js} +0 -0
@@ -1,23 +1,23 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  generateStatusBrief
4
- } from "../chunk-VTHR4DPE.js";
4
+ } from "../chunk-5ZNY7IZI.js";
5
5
  import {
6
6
  DEFAULT_EXE,
7
7
  getSessionPrompt
8
- } from "../chunk-TDV3XEGQ.js";
9
- import "../chunk-ZOCW4TGA.js";
8
+ } from "../chunk-ZR57QAJ2.js";
9
+ import "../chunk-6UR7C2NX.js";
10
10
  import "../chunk-DDKDN4HV.js";
11
11
  import {
12
12
  initStore
13
- } from "../chunk-PHUKD7VK.js";
13
+ } from "../chunk-UW5QD52P.js";
14
14
  import "../chunk-CHCA3ZM2.js";
15
15
  import "../chunk-OTVEIJUQ.js";
16
- import "../chunk-NOPDNOGQ.js";
16
+ import "../chunk-6IJ47YFD.js";
17
17
  import {
18
18
  cleanupSessionMarkers,
19
19
  writeActiveAgent
20
- } from "../chunk-RJHOFX72.js";
20
+ } from "../chunk-5ZQMGI3V.js";
21
21
  import "../chunk-Y25OJWOQ.js";
22
22
  import {
23
23
  cleanupOldNotifications,
@@ -29,25 +29,32 @@ import {
29
29
  resolveExeSession,
30
30
  sessionScopeFilter,
31
31
  updateTaskStatus
32
- } from "../chunk-LWBOSHSS.js";
33
- import "../chunk-5L62XXNH.js";
34
- import "../chunk-RREJ2QQ4.js";
35
- import "../chunk-4FVVJ7ME.js";
32
+ } from "../chunk-XK7HAEFC.js";
33
+ import "../chunk-3LZILUET.js";
34
+ import "../chunk-BKOGHVRO.js";
35
+ import "../chunk-U3VSCPGX.js";
36
+ import "../chunk-EIKATSE4.js";
36
37
  import "../chunk-E23LNUWJ.js";
37
38
  import "../chunk-4JERP7NT.js";
38
39
  import {
39
40
  pruneStaleSessions,
40
41
  registerSession
41
- } from "../chunk-TWPYSILC.js";
42
+ } from "../chunk-3CT3GN2B.js";
42
43
  import "../chunk-SSTLTIF3.js";
43
44
  import "../chunk-RMOBQ6A5.js";
44
45
  import "../chunk-54QCG45Y.js";
45
- import "../chunk-RVF6JBHW.js";
46
- import "../chunk-Q26VSIXA.js";
46
+ import "../chunk-364VBQIC.js";
47
+ import "../chunk-FROUDYRT.js";
47
48
  import "../chunk-NGP6LSV2.js";
48
- import "../chunk-CQ2T4A2D.js";
49
+ import "../chunk-GHARDROH.js";
49
50
  import "../chunk-CVYC6DUW.js";
51
+ import "../chunk-W33H7TWW.js";
52
+ import "../chunk-HCJCW7X4.js";
50
53
  import "../chunk-OPU3NYOO.js";
54
+ import "../chunk-UPLY33F7.js";
55
+ import "../chunk-AFNRE2RV.js";
56
+ import "../chunk-3NGZ4PL7.js";
57
+ import "../chunk-NLEW62VC.js";
51
58
  import "../chunk-HYZV25LY.js";
52
59
  import "../chunk-GJV3WDWM.js";
53
60
  import "../chunk-MP2AFCGL.js";
@@ -58,17 +65,17 @@ import {
58
65
  isCoordinatorName,
59
66
  loadEmployees,
60
67
  saveEmployees
61
- } from "../chunk-36SS3TE7.js";
68
+ } from "../chunk-46AMZT3C.js";
62
69
  import "../chunk-2I23RPSI.js";
63
- import "../chunk-3EZQSPTG.js";
70
+ import "../chunk-MV5OSOP4.js";
64
71
  import "../chunk-PNQDP3OA.js";
65
72
  import "../chunk-H73TUI4Y.js";
66
73
  import "../chunk-7HLWBYH7.js";
67
74
  import "../chunk-FXU7JOXK.js";
68
75
  import "../chunk-TPHCZDE3.js";
69
76
  import "../chunk-Z42MXYWW.js";
70
- import "../chunk-QLVMJGUQ.js";
71
- import "../chunk-7NG77I33.js";
77
+ import "../chunk-L5TUAHLX.js";
78
+ import "../chunk-RYZR4NNE.js";
72
79
  import {
73
80
  EXE_AI_DIR,
74
81
  loadConfig,
@@ -119,7 +126,7 @@ async function boot(options) {
119
126
  const coordinatorEmployee = getCoordinatorEmployee(employees) ?? DEFAULT_EXE;
120
127
  const coordinatorName = coordinatorEmployee.name;
121
128
  try {
122
- const { fastDbInit } = await import("../fast-db-init-SMBGFVXM.js");
129
+ const { fastDbInit } = await import("../fast-db-init-SNHHRW3L.js");
123
130
  await fastDbInit();
124
131
  } catch {
125
132
  await initStore();
@@ -128,17 +135,41 @@ async function boot(options) {
128
135
  writeActiveAgent(coordinatorName, coordinatorEmployee.role);
129
136
  let licensePlan;
130
137
  let employeeLimit;
138
+ let planChangeNotice;
131
139
  try {
132
- const { checkLicense, loadLicense } = await import("../lib/license.js");
140
+ const { checkLicense, loadLicense, refreshLicense, buildPlanChangeNotice, getLicenseCacheAgeMs } = await import("../lib/license.js");
133
141
  const hasKey = !!loadLicense();
134
142
  if (hasKey) {
135
- const license = await checkLicense();
136
- licensePlan = license.plan;
137
- employeeLimit = license.employeeLimit;
138
- if (!license.valid) {
139
- process.stderr.write(
140
- "\u26A0 License key present but not valid. Check plan status at https://askexe.com.\n"
141
- );
143
+ const BOOT_RECHECK_STALE_MS = 10 * 60 * 1e3;
144
+ const cacheAge = getLicenseCacheAgeMs();
145
+ const stale = cacheAge === null || cacheAge > BOOT_RECHECK_STALE_MS;
146
+ const raced = stale ? await Promise.race([
147
+ refreshLicense({ timeoutMs: 2500 }).catch(() => null),
148
+ new Promise((resolve) => {
149
+ const t = setTimeout(() => resolve(null), 3e3);
150
+ if (typeof t === "object" && "unref" in t) t.unref();
151
+ })
152
+ ]) : null;
153
+ if (raced && raced.reachedCloud) {
154
+ licensePlan = raced.license.plan;
155
+ employeeLimit = raced.license.employeeLimit;
156
+ if (raced.changed && raced.oldPlan) {
157
+ planChangeNotice = buildPlanChangeNotice(raced.oldPlan, raced.license);
158
+ }
159
+ if (!raced.license.valid) {
160
+ process.stderr.write(
161
+ "\u26A0 License key present but not valid. Check plan status at https://askexe.com.\n"
162
+ );
163
+ }
164
+ } else {
165
+ const license = await checkLicense();
166
+ licensePlan = license.plan;
167
+ employeeLimit = license.employeeLimit;
168
+ if (!license.valid) {
169
+ process.stderr.write(
170
+ "\u26A0 License key present but not valid. Check plan status at https://askexe.com.\n"
171
+ );
172
+ }
142
173
  }
143
174
  } else {
144
175
  licensePlan = "free";
@@ -173,7 +204,8 @@ async function boot(options) {
173
204
  cloudConnected: false,
174
205
  exeSession: resolveExeSession() ?? void 0,
175
206
  plan: licensePlan,
176
- employeeLimit
207
+ employeeLimit,
208
+ planChangeNotice
177
209
  };
178
210
  try {
179
211
  const config = await loadConfig();
@@ -986,9 +1018,11 @@ async function boot(options) {
986
1018
  const { loadConfigSync: loadCfgForEmbed } = await import("../lib/config.js");
987
1019
  const embedCfg = loadCfgForEmbed();
988
1020
  const embeddingsOn = resolveEmbed(process.env.EXE_EMBEDDINGS, embedCfg);
989
- if (nullCount > 0 && embeddingsOn) {
1021
+ const { backfillKillSwitchEnabled, countActionableNullVectors } = await import("../backfill-gate-J7UXFNXU.js");
1022
+ const actionableNullCount = nullCount > 0 ? await countActionableNullVectors(client) : 0;
1023
+ if (actionableNullCount > 0 && embeddingsOn && !backfillKillSwitchEnabled()) {
990
1024
  try {
991
- const { tryAcquireWorkerSlot, registerWorkerPid } = await import("../worker-gate-DRSX2SOW.js");
1025
+ const { tryAcquireWorkerSlot, registerWorkerPid } = await import("../worker-gate-3OR47E4T.js");
992
1026
  if (!tryAcquireWorkerSlot()) {
993
1027
  process.stderr.write("[exe-boot] Backfill needed but worker gate full \u2014 skipping\n");
994
1028
  } else {
@@ -1095,7 +1129,7 @@ async function boot(options) {
1095
1129
  } catch {
1096
1130
  }
1097
1131
  try {
1098
- const { countKillsSince } = await import("../session-kill-telemetry-VQ4JWWTI.js");
1132
+ const { countKillsSince } = await import("../session-kill-telemetry-ALV4KMWS.js");
1099
1133
  const { listSessions: listRegistrySessions } = await import("../lib/session-registry.js");
1100
1134
  const todayStart = /* @__PURE__ */ new Date();
1101
1135
  todayStart.setHours(0, 0, 0, 0);
@@ -1193,7 +1227,7 @@ async function updateIdleKillSuspectStreak(client, killsToday, liveSessions, tod
1193
1227
  IDLE_KILL_STREAK_META_KEY,
1194
1228
  computeIdleKillSuspectStreak,
1195
1229
  parseStreakState
1196
- } = await import("../session-kill-telemetry-VQ4JWWTI.js");
1230
+ } = await import("../session-kill-telemetry-ALV4KMWS.js");
1197
1231
  const prevResult = await client.execute({
1198
1232
  sql: "SELECT value FROM sync_meta WHERE key = ?",
1199
1233
  args: [IDLE_KILL_STREAK_META_KEY]
@@ -1,17 +1,17 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  getSessionPrompt
4
- } from "../chunk-TDV3XEGQ.js";
5
- import "../chunk-ZOCW4TGA.js";
4
+ } from "../chunk-ZR57QAJ2.js";
5
+ import "../chunk-6UR7C2NX.js";
6
6
  import "../chunk-DDKDN4HV.js";
7
7
  import {
8
8
  DEFAULT_COORDINATOR_TEMPLATE_NAME,
9
9
  getCoordinatorName,
10
10
  getEmployee,
11
11
  loadEmployees
12
- } from "../chunk-36SS3TE7.js";
12
+ } from "../chunk-46AMZT3C.js";
13
13
  import "../chunk-2I23RPSI.js";
14
- import "../chunk-3EZQSPTG.js";
14
+ import "../chunk-MV5OSOP4.js";
15
15
  import "../chunk-PNQDP3OA.js";
16
16
  import "../chunk-H73TUI4Y.js";
17
17
  import "../chunk-7HLWBYH7.js";
@@ -6,25 +6,25 @@ import {
6
6
  } from "../chunk-6KFICEAT.js";
7
7
  import {
8
8
  assertSecureEndpoint
9
- } from "../chunk-T5O2EBHU.js";
10
- import "../chunk-3YKA5BKT.js";
11
- import "../chunk-7S3SRDPQ.js";
9
+ } from "../chunk-WCXFNUMD.js";
10
+ import "../chunk-AI3BK3JD.js";
11
+ import "../chunk-A2K7YIRL.js";
12
12
  import "../chunk-LO6L5ADL.js";
13
- import "../chunk-LQWCIW4K.js";
13
+ import "../chunk-S6XKC36B.js";
14
14
  import "../chunk-QGGH7LOU.js";
15
- import "../chunk-C7QYH2YN.js";
16
- import "../chunk-AFNRE2RV.js";
17
- import "../chunk-3NGZ4PL7.js";
18
- import "../chunk-7XGDTKHX.js";
19
- import "../chunk-PHUKD7VK.js";
15
+ import "../chunk-UW5QD52P.js";
20
16
  import "../chunk-CHCA3ZM2.js";
21
17
  import "../chunk-OTVEIJUQ.js";
22
- import "../chunk-NOPDNOGQ.js";
18
+ import "../chunk-6IJ47YFD.js";
23
19
  import "../chunk-Y25OJWOQ.js";
20
+ import "../chunk-UPLY33F7.js";
21
+ import "../chunk-AFNRE2RV.js";
22
+ import "../chunk-3NGZ4PL7.js";
23
+ import "../chunk-NLEW62VC.js";
24
24
  import "../chunk-MP2AFCGL.js";
25
- import "../chunk-36SS3TE7.js";
25
+ import "../chunk-46AMZT3C.js";
26
26
  import "../chunk-2I23RPSI.js";
27
- import "../chunk-3EZQSPTG.js";
27
+ import "../chunk-MV5OSOP4.js";
28
28
  import "../chunk-PNQDP3OA.js";
29
29
  import "../chunk-H73TUI4Y.js";
30
30
  import "../chunk-7HLWBYH7.js";
@@ -36,8 +36,8 @@ import {
36
36
  importMnemonic,
37
37
  setMasterKey
38
38
  } from "../chunk-Z42MXYWW.js";
39
- import "../chunk-QLVMJGUQ.js";
40
- import "../chunk-7NG77I33.js";
39
+ import "../chunk-L5TUAHLX.js";
40
+ import "../chunk-RYZR4NNE.js";
41
41
  import {
42
42
  loadConfig,
43
43
  saveConfig
@@ -51,6 +51,67 @@ import "../chunk-MLKGABMK.js";
51
51
  // src/bin/exe-cloud.ts
52
52
  import { createInterface } from "readline";
53
53
  var BAR = "\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550";
54
+ var CLOUD_HTTP_TIMEOUT_MS = 1e4;
55
+ var CLOUD_SYNC_TIMEOUT_MS = Number(process.env.EXE_CLOUD_SYNC_TIMEOUT_MS ?? 6e5);
56
+ var LOCAL_INIT_TIMEOUT_MS = 3e4;
57
+ var STATUS_GATHER_TIMEOUT_MS = 15e3;
58
+ function timeoutError(label, ms) {
59
+ return new Error(
60
+ `${label} did not finish within ${Math.round(ms / 1e3)}s \u2014 the cloud service may be unreachable or down. Check your network and https://api.askexe.com/health, then try again.`
61
+ );
62
+ }
63
+ async function withTimeout(promise, ms, label) {
64
+ let timer;
65
+ try {
66
+ return await Promise.race([
67
+ promise,
68
+ new Promise((_, reject) => {
69
+ timer = setTimeout(() => reject(timeoutError(label, ms)), ms);
70
+ })
71
+ ]);
72
+ } finally {
73
+ if (timer) clearTimeout(timer);
74
+ }
75
+ }
76
+ async function fetchWithTimeout(url, init = {}, timeoutMs = CLOUD_HTTP_TIMEOUT_MS) {
77
+ try {
78
+ return await fetch(url, { ...init, signal: AbortSignal.timeout(timeoutMs) });
79
+ } catch (err) {
80
+ if (err instanceof Error && (err.name === "TimeoutError" || err.name === "AbortError")) {
81
+ throw timeoutError(`Request to ${url}`, timeoutMs);
82
+ }
83
+ throw err;
84
+ }
85
+ }
86
+ async function assertCloudSyncReachable(endpoint) {
87
+ const healthUrl = `${endpoint.replace(/\/+$/, "")}/health`;
88
+ let resp;
89
+ try {
90
+ resp = await fetchWithTimeout(healthUrl, {}, CLOUD_HTTP_TIMEOUT_MS);
91
+ } catch (err) {
92
+ throw new Error(
93
+ `Cloud service unreachable at ${endpoint}: ${err instanceof Error ? err.message : String(err)}`
94
+ );
95
+ }
96
+ if (!resp.ok) {
97
+ try {
98
+ await resp.text();
99
+ } catch {
100
+ }
101
+ throw new Error(`Cloud service unhealthy at ${healthUrl} (HTTP ${resp.status}). Try again later.`);
102
+ }
103
+ let cloudSyncState = "";
104
+ try {
105
+ const health = await resp.json();
106
+ if (typeof health.cloud_sync === "string") cloudSyncState = health.cloud_sync;
107
+ } catch {
108
+ }
109
+ if (cloudSyncState && cloudSyncState !== "ok" && !cloudSyncState.startsWith("ok")) {
110
+ throw new Error(
111
+ `The Exe Cloud sync backend is down (gateway /health reports cloud_sync: "${cloudSyncState}"). This is a service-side outage \u2014 nothing to fix on this machine. Try again later.`
112
+ );
113
+ }
114
+ }
54
115
  function isInteractiveTerminal() {
55
116
  return Boolean(process.stdin.isTTY && process.stdout.isTTY && !process.env.CI);
56
117
  }
@@ -76,17 +137,19 @@ function shouldRunRelinkMutation(options) {
76
137
  });
77
138
  }
78
139
  async function runCloudSyncOnce() {
79
- const { initStore } = await import("../lib/store.js");
80
- await initStore({ lightweight: true });
81
140
  const config = await loadConfig();
82
141
  if (!config.cloud?.apiKey) throw new Error("Cloud sync is not configured. Run exe-os cloud setup first.");
142
+ assertSecureEndpoint(config.cloud.endpoint);
143
+ await assertCloudSyncReachable(config.cloud.endpoint);
144
+ const { initStore } = await import("../lib/store.js");
145
+ await withTimeout(initStore({ lightweight: true }), LOCAL_INIT_TIMEOUT_MS, "Opening the local memory store");
83
146
  const { cloudSync } = await import("../lib/cloud-sync.js");
84
147
  const { getMasterKey: getMasterKey2 } = await import("../lib/keychain.js");
85
148
  const { initSyncCrypto } = await import("../lib/crypto.js");
86
149
  const masterKey = await getMasterKey2();
87
150
  if (!masterKey) throw new Error("No encryption key found. Run exe-os setup first.");
88
151
  initSyncCrypto(masterKey);
89
- return cloudSync(config.cloud);
152
+ return withTimeout(cloudSync(config.cloud), CLOUD_SYNC_TIMEOUT_MS, "Cloud sync");
90
153
  }
91
154
  async function disposeCloudCliResources() {
92
155
  try {
@@ -147,7 +210,7 @@ async function setupMode() {
147
210
  const authTokenHash = hashAuthToken(deriveWsAuthToken(masterKey));
148
211
  try {
149
212
  assertSecureEndpoint(config.cloud.endpoint);
150
- const regResp = await fetch(`${config.cloud.endpoint}/api/register-org`, {
213
+ const regResp = await fetchWithTimeout(`${config.cloud.endpoint}/api/register-org`, {
151
214
  method: "POST",
152
215
  headers: { Authorization: `Bearer ${config.cloud.apiKey}`, "Content-Type": "application/json" },
153
216
  body: JSON.stringify({ orgId, authTokenHash })
@@ -169,7 +232,7 @@ async function setupMode() {
169
232
  console.log(" Validating...");
170
233
  try {
171
234
  assertSecureEndpoint(endpoint);
172
- const resp = await fetch(`${endpoint}/auth/verify`, {
235
+ const resp = await fetchWithTimeout(`${endpoint}/auth/verify`, {
173
236
  headers: { Authorization: `Bearer ${apiKey}` }
174
237
  });
175
238
  if (resp.ok) {
@@ -189,7 +252,7 @@ async function setupMode() {
189
252
  const authTokenHash = hashAuthToken(deriveWsAuthToken(masterKey));
190
253
  try {
191
254
  assertSecureEndpoint(endpoint);
192
- const regResp = await fetch(`${endpoint}/api/register-org`, {
255
+ const regResp = await fetchWithTimeout(`${endpoint}/api/register-org`, {
193
256
  method: "POST",
194
257
  headers: { Authorization: `Bearer ${apiKey}`, "Content-Type": "application/json" },
195
258
  body: JSON.stringify({ orgId, authTokenHash })
@@ -292,6 +355,10 @@ async function linkMode() {
292
355
  console.log(BAR);
293
356
  }
294
357
  async function statusMode() {
358
+ console.log(BAR);
359
+ console.log(" EXE CLOUD STATUS");
360
+ console.log(BAR);
361
+ console.log("");
295
362
  const key = await getMasterKey();
296
363
  const config = await loadConfig();
297
364
  let reuploadRequired = false;
@@ -300,36 +367,40 @@ async function statusMode() {
300
367
  let pendingMemoryCount = 0;
301
368
  let lastPullVersion = 0;
302
369
  let cloudReuploadedAt = null;
370
+ let localStateNote = null;
303
371
  try {
304
- const { initStore } = await import("../lib/store.js");
305
- const { getClient } = await import("../lib/database.js");
306
- const { getCloudReuploadRequired } = await import("../lib/cloud-sync.js");
307
- await initStore({ lightweight: true });
308
- const client = getClient();
309
- reuploadRequired = await getCloudReuploadRequired(client);
310
- const maxVersion = await client.execute("SELECT COALESCE(MAX(version), 0) as version FROM memories WHERE scope IS NULL OR scope != 'personal'");
311
- localMemoryVersion = Number(maxVersion.rows[0]?.version ?? 0);
312
- const meta = await client.execute("SELECT key, value FROM sync_meta WHERE key IN ('last_cloud_push_version', 'last_cloud_pull_version', 'cloud_reuploaded_at', 'cloud_relinked_at')");
313
- for (const row of meta.rows) {
314
- const keyName = String(row.key ?? "");
315
- const value = String(row.value ?? "");
316
- if (keyName === "last_cloud_push_version") lastPushedMemoryVersion = Number(value || 0);
317
- if (keyName === "last_cloud_pull_version") lastPullVersion = Number(value || 0);
318
- if (keyName === "cloud_reuploaded_at" || keyName === "cloud_relinked_at") cloudReuploadedAt = value;
319
- }
320
- const pending = await client.execute({
321
- sql: "SELECT COUNT(*) as cnt FROM memories WHERE (scope IS NULL OR scope != 'personal') AND version > ?",
322
- args: [lastPushedMemoryVersion]
323
- });
324
- pendingMemoryCount = Number(pending.rows[0]?.cnt ?? 0);
325
- } catch {
372
+ await withTimeout((async () => {
373
+ const { initStore } = await import("../lib/store.js");
374
+ const { getClient } = await import("../lib/database.js");
375
+ const { getCloudReuploadRequired } = await import("../lib/cloud-sync.js");
376
+ await initStore({ lightweight: true });
377
+ const client = getClient();
378
+ reuploadRequired = await getCloudReuploadRequired(client);
379
+ const maxVersion = await client.execute("SELECT COALESCE(MAX(version), 0) as version FROM memories WHERE scope IS NULL OR scope != 'personal'");
380
+ localMemoryVersion = Number(maxVersion.rows[0]?.version ?? 0);
381
+ const meta = await client.execute("SELECT key, value FROM sync_meta WHERE key IN ('last_cloud_push_version', 'last_cloud_pull_version', 'cloud_reuploaded_at', 'cloud_relinked_at')");
382
+ for (const row of meta.rows) {
383
+ const keyName = String(row.key ?? "");
384
+ const value = String(row.value ?? "");
385
+ if (keyName === "last_cloud_push_version") lastPushedMemoryVersion = Number(value || 0);
386
+ if (keyName === "last_cloud_pull_version") lastPullVersion = Number(value || 0);
387
+ if (keyName === "cloud_reuploaded_at" || keyName === "cloud_relinked_at") cloudReuploadedAt = value;
388
+ }
389
+ const pending = await client.execute({
390
+ sql: "SELECT COUNT(*) as cnt FROM memories WHERE (scope IS NULL OR scope != 'personal') AND version > ?",
391
+ args: [lastPushedMemoryVersion]
392
+ });
393
+ pendingMemoryCount = Number(pending.rows[0]?.cnt ?? 0);
394
+ })(), STATUS_GATHER_TIMEOUT_MS, "Reading local sync state");
395
+ } catch (err) {
396
+ localStateNote = err instanceof Error ? err.message : String(err);
326
397
  } finally {
327
398
  await disposeCloudCliResources();
328
399
  }
329
- console.log(BAR);
330
- console.log(" EXE CLOUD STATUS");
331
- console.log(BAR);
332
- console.log("");
400
+ if (localStateNote) {
401
+ console.log(` \u26A0 Local sync state unavailable: ${localStateNote}`);
402
+ console.log("");
403
+ }
333
404
  if (key) {
334
405
  const fingerprint = key.toString("hex").slice(0, 8);
335
406
  let storageNote = "";
@@ -516,7 +587,9 @@ if (isMainModule(import.meta.url) && process.argv[1]?.includes("exe-cloud")) {
516
587
  });
517
588
  }
518
589
  export {
590
+ assertCloudSyncReachable,
519
591
  main,
520
592
  shouldRunRelinkMutation,
521
- shouldRunReuploadMutation
593
+ shouldRunReuploadMutation,
594
+ withTimeout
522
595
  };
@@ -6,16 +6,16 @@ import {
6
6
  import {
7
7
  AGENT_CONFIG_PATH,
8
8
  loadAgentConfig
9
- } from "../chunk-Q26VSIXA.js";
9
+ } from "../chunk-FROUDYRT.js";
10
10
  import {
11
11
  DEFAULT_RUNTIME
12
12
  } from "../chunk-NGP6LSV2.js";
13
13
  import {
14
14
  EMPLOYEES_PATH,
15
15
  loadEmployeesSync
16
- } from "../chunk-36SS3TE7.js";
16
+ } from "../chunk-46AMZT3C.js";
17
17
  import "../chunk-2I23RPSI.js";
18
- import "../chunk-3EZQSPTG.js";
18
+ import "../chunk-MV5OSOP4.js";
19
19
  import "../chunk-PNQDP3OA.js";
20
20
  import "../chunk-H73TUI4Y.js";
21
21
  import "../chunk-7HLWBYH7.js";
@@ -1,41 +1,51 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  fastDbInit
4
- } from "../chunk-53ARJV2L.js";
4
+ } from "../chunk-HWVEDRZA.js";
5
5
  import {
6
6
  createTaskCore,
7
7
  ensureEmployee,
8
8
  resolveExeSession
9
- } from "../chunk-LWBOSHSS.js";
10
- import "../chunk-5L62XXNH.js";
11
- import "../chunk-RREJ2QQ4.js";
12
- import "../chunk-4FVVJ7ME.js";
9
+ } from "../chunk-XK7HAEFC.js";
10
+ import "../chunk-3LZILUET.js";
11
+ import "../chunk-BKOGHVRO.js";
12
+ import "../chunk-U3VSCPGX.js";
13
+ import "../chunk-EIKATSE4.js";
13
14
  import "../chunk-E23LNUWJ.js";
14
15
  import "../chunk-4JERP7NT.js";
15
- import "../chunk-TWPYSILC.js";
16
+ import "../chunk-3CT3GN2B.js";
16
17
  import "../chunk-SSTLTIF3.js";
17
18
  import "../chunk-RMOBQ6A5.js";
18
19
  import "../chunk-54QCG45Y.js";
19
- import "../chunk-RVF6JBHW.js";
20
- import "../chunk-Q26VSIXA.js";
20
+ import "../chunk-364VBQIC.js";
21
+ import "../chunk-FROUDYRT.js";
21
22
  import "../chunk-NGP6LSV2.js";
22
- import "../chunk-CQ2T4A2D.js";
23
+ import "../chunk-GHARDROH.js";
23
24
  import "../chunk-CVYC6DUW.js";
25
+ import "../chunk-W33H7TWW.js";
26
+ import "../chunk-HCJCW7X4.js";
24
27
  import "../chunk-OPU3NYOO.js";
28
+ import "../chunk-UPLY33F7.js";
29
+ import "../chunk-AFNRE2RV.js";
30
+ import "../chunk-3NGZ4PL7.js";
31
+ import "../chunk-NLEW62VC.js";
25
32
  import "../chunk-HYZV25LY.js";
26
33
  import "../chunk-GJV3WDWM.js";
27
34
  import "../chunk-MP2AFCGL.js";
28
35
  import {
29
- getCoordinatorName
30
- } from "../chunk-36SS3TE7.js";
36
+ getCoordinatorName,
37
+ getEmployee,
38
+ isCoordinatorName,
39
+ loadEmployeesSync
40
+ } from "../chunk-46AMZT3C.js";
31
41
  import "../chunk-2I23RPSI.js";
32
- import "../chunk-3EZQSPTG.js";
42
+ import "../chunk-MV5OSOP4.js";
33
43
  import "../chunk-PNQDP3OA.js";
34
44
  import "../chunk-H73TUI4Y.js";
35
45
  import "../chunk-7HLWBYH7.js";
36
46
  import "../chunk-FXU7JOXK.js";
37
- import "../chunk-QLVMJGUQ.js";
38
- import "../chunk-7NG77I33.js";
47
+ import "../chunk-L5TUAHLX.js";
48
+ import "../chunk-RYZR4NNE.js";
39
49
  import "../chunk-7Y5UDEVM.js";
40
50
  import "../chunk-SHIICYJW.js";
41
51
  import "../chunk-MLKGABMK.js";
@@ -46,6 +56,30 @@ if (!employeeName) {
46
56
  console.error("Usage: exe-dispatch <employeeName> [projectDir]");
47
57
  process.exit(1);
48
58
  }
59
+ {
60
+ const normalized = employeeName.toLowerCase();
61
+ const roster = loadEmployeesSync();
62
+ const known = getEmployee(roster, normalized) !== void 0;
63
+ const isCoordinator = isCoordinatorName(normalized);
64
+ if (isCoordinator) {
65
+ console.log(JSON.stringify({
66
+ status: "failed",
67
+ sessionName: "",
68
+ error: `"${employeeName}" is the coordinator, not a dispatchable employee.`
69
+ }));
70
+ process.exit(1);
71
+ }
72
+ if (!known) {
73
+ const names = roster.map((e) => e.name).sort();
74
+ const hint = names.length > 0 ? ` Known employees: ${names.join(", ")}.` : "";
75
+ console.log(JSON.stringify({
76
+ status: "failed",
77
+ sessionName: "",
78
+ error: `Unknown employee "${employeeName}" \u2014 not in the roster (exe-employees.json). Pass an employee NAME (e.g. "tom"), not a task id or session name.${hint} Usage: exe-dispatch <employeeName> [projectDir]`
79
+ }));
80
+ process.exit(1);
81
+ }
82
+ }
49
83
  var projectDir = process.argv[3] || process.cwd();
50
84
  var exeSession = resolveExeSession();
51
85
  if (!exeSession) {
@@ -23,15 +23,15 @@ import {
23
23
  runAudit,
24
24
  shouldFixShards,
25
25
  splitAtSentences
26
- } from "../chunk-C5SALMKH.js";
27
- import "../chunk-4AHV3QBI.js";
26
+ } from "../chunk-GMDLNJ5E.js";
27
+ import "../chunk-VW326Q5R.js";
28
28
  import "../chunk-KQ4Z2G24.js";
29
29
  import "../chunk-L3TB7CC3.js";
30
30
  import "../chunk-PROQW3NL.js";
31
31
  import "../chunk-OTVEIJUQ.js";
32
- import "../chunk-36SS3TE7.js";
32
+ import "../chunk-46AMZT3C.js";
33
33
  import "../chunk-2I23RPSI.js";
34
- import "../chunk-3EZQSPTG.js";
34
+ import "../chunk-MV5OSOP4.js";
35
35
  import "../chunk-PNQDP3OA.js";
36
36
  import "../chunk-H73TUI4Y.js";
37
37
  import "../chunk-7HLWBYH7.js";
@@ -1,22 +1,22 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  exportBehaviorsForAgent
4
- } from "../chunk-CNFUVZLM.js";
5
- import "../chunk-7S3SRDPQ.js";
4
+ } from "../chunk-A6ODMODG.js";
5
+ import "../chunk-A2K7YIRL.js";
6
6
  import {
7
7
  fastDbInit
8
- } from "../chunk-53ARJV2L.js";
8
+ } from "../chunk-HWVEDRZA.js";
9
9
  import {
10
10
  disposeStore
11
- } from "../chunk-PHUKD7VK.js";
11
+ } from "../chunk-UW5QD52P.js";
12
12
  import "../chunk-CHCA3ZM2.js";
13
13
  import "../chunk-OTVEIJUQ.js";
14
- import "../chunk-NOPDNOGQ.js";
14
+ import "../chunk-6IJ47YFD.js";
15
15
  import "../chunk-Y25OJWOQ.js";
16
16
  import "../chunk-MP2AFCGL.js";
17
- import "../chunk-36SS3TE7.js";
17
+ import "../chunk-46AMZT3C.js";
18
18
  import "../chunk-2I23RPSI.js";
19
- import "../chunk-3EZQSPTG.js";
19
+ import "../chunk-MV5OSOP4.js";
20
20
  import "../chunk-PNQDP3OA.js";
21
21
  import "../chunk-H73TUI4Y.js";
22
22
  import "../chunk-7HLWBYH7.js";
@@ -1,22 +1,22 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  fastDbInit
4
- } from "../chunk-53ARJV2L.js";
4
+ } from "../chunk-HWVEDRZA.js";
5
5
  import {
6
6
  lightweightSearch
7
- } from "../chunk-MRB2BXIB.js";
7
+ } from "../chunk-ZU2UK4BC.js";
8
8
  import "../chunk-AB4PAQYK.js";
9
- import "../chunk-PHUKD7VK.js";
9
+ import "../chunk-UW5QD52P.js";
10
10
  import "../chunk-CHCA3ZM2.js";
11
11
  import "../chunk-OTVEIJUQ.js";
12
- import "../chunk-NOPDNOGQ.js";
12
+ import "../chunk-6IJ47YFD.js";
13
13
  import "../chunk-Y25OJWOQ.js";
14
14
  import "../chunk-MP2AFCGL.js";
15
15
  import {
16
16
  getClient
17
- } from "../chunk-36SS3TE7.js";
17
+ } from "../chunk-46AMZT3C.js";
18
18
  import "../chunk-2I23RPSI.js";
19
- import "../chunk-3EZQSPTG.js";
19
+ import "../chunk-MV5OSOP4.js";
20
20
  import "../chunk-PNQDP3OA.js";
21
21
  import "../chunk-H73TUI4Y.js";
22
22
  import "../chunk-7HLWBYH7.js";