@askexenow/exe-os 0.9.145 → 0.9.147

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 (342) hide show
  1. package/dist/{active-agent-HUDSZRUG.js → active-agent-KMQCNXXD.js} +6 -6
  2. package/dist/{active-agent-GJOJUEMF.js → active-agent-NCZCDDZ2.js} +6 -6
  3. package/dist/{agent-context-HH7TL5ZP.js → agent-context-AZTTMUHP.js} +1 -1
  4. package/dist/agent-heartbeat-I5UPGXAU.js +60 -0
  5. package/dist/{agent-loop-OCJFYO72.js → agent-loop-NUIWAL3Z.js} +1 -1
  6. package/dist/{agentic-ontology-5PGUVMDP.js → agentic-ontology-SQR74CO7.js} +2 -2
  7. package/dist/{asana-BSDR6NW4.js → asana-MRQ2OQMJ.js} +1 -1
  8. package/dist/assets/wezterm.lua +68 -0
  9. package/dist/{backfill-metadata-ZDJ5B37R.js → backfill-metadata-KMDWLDXU.js} +7 -7
  10. package/dist/{background-jobs-4N4JSZVZ.js → background-jobs-IUB22CRF.js} +4 -4
  11. package/dist/{bash-X54PZMOG.js → bash-HOHKSOU3.js} +1 -1
  12. package/dist/{behaviors-TXLHEM5J.js → behaviors-4U2N5L4E.js} +6 -6
  13. package/dist/bin/age-ontology-load.js +4 -4
  14. package/dist/bin/agentic-ontology-backfill.js +9 -9
  15. package/dist/bin/agentic-reflection-backfill.js +10 -10
  16. package/dist/bin/agentic-semantic-label.js +9 -9
  17. package/dist/bin/backfill-conversations.js +9 -9
  18. package/dist/bin/backfill-responses.js +9 -9
  19. package/dist/bin/backfill-vectors.js +12 -14
  20. package/dist/bin/bulk-sync-postgres.js +10 -10
  21. package/dist/bin/cc-doctor.js +5 -5
  22. package/dist/bin/cleanup-stale-review-tasks.js +12 -11
  23. package/dist/bin/cli.js +19 -19
  24. package/dist/bin/customer-readiness.js +47 -0
  25. package/dist/bin/exe-agent-config.js +6 -6
  26. package/dist/bin/exe-agent.js +8 -8
  27. package/dist/bin/exe-assign.js +11 -11
  28. package/dist/bin/exe-boot.js +39 -32
  29. package/dist/bin/exe-call.js +9 -11
  30. package/dist/bin/exe-cloud.js +10 -12
  31. package/dist/bin/exe-dispatch.js +12 -11
  32. package/dist/bin/exe-doctor.js +2 -2
  33. package/dist/bin/exe-export-behaviors.js +10 -10
  34. package/dist/bin/exe-forget.js +9 -9
  35. package/dist/bin/exe-gateway.js +18 -18
  36. package/dist/bin/exe-healthcheck.js +5 -5
  37. package/dist/bin/exe-heartbeat.js +19 -14
  38. package/dist/bin/exe-kill.js +9 -9
  39. package/dist/bin/exe-launch-agent.js +16 -18
  40. package/dist/bin/exe-new-employee.js +11 -11
  41. package/dist/bin/exe-pending-messages.js +13 -12
  42. package/dist/bin/exe-pending-notifications.js +12 -11
  43. package/dist/bin/exe-pending-reviews.js +20 -13
  44. package/dist/bin/exe-rename.js +9 -11
  45. package/dist/bin/exe-review.js +14 -13
  46. package/dist/bin/exe-search.js +8 -10
  47. package/dist/bin/exe-session-cleanup.js +19 -19
  48. package/dist/bin/exe-settings.js +11 -13
  49. package/dist/bin/exe-start-codex.js +15 -15
  50. package/dist/bin/exe-start-opencode.js +11 -11
  51. package/dist/bin/exe-status.js +13 -12
  52. package/dist/bin/exe-support.js +5 -5
  53. package/dist/bin/exe-team.js +6 -6
  54. package/dist/bin/git-sweep.js +12 -11
  55. package/dist/bin/graph-backfill.js +10 -10
  56. package/dist/bin/graph-export.js +8 -8
  57. package/dist/bin/graph-layer-benchmark.js +1 -1
  58. package/dist/bin/install.js +38 -12
  59. package/dist/bin/intercom-check.js +14 -8
  60. package/dist/bin/list-providers.js +1 -1
  61. package/dist/bin/postgres-agentic-reflection-backfill.js +6 -6
  62. package/dist/bin/postgres-agentic-semantic-backfill.js +5 -5
  63. package/dist/bin/pre-publish.js +2 -2
  64. package/dist/bin/registry-proxy.js +1 -1
  65. package/dist/bin/scan-tasks.js +48 -49
  66. package/dist/bin/setup.js +6 -5
  67. package/dist/bin/shard-migrate.js +8 -8
  68. package/dist/bin/stack-update.js +66 -10
  69. package/dist/bin/update.js +1 -1
  70. package/dist/{branding-52J2ILJX.js → branding-EHDA3CCK.js} +4 -6
  71. package/dist/{capacity-monitor-HWN2JX5W.js → capacity-monitor-Q5M5SVRC.js} +13 -12
  72. package/dist/{catchup-brief-UERCIVM5.js → catchup-brief-IPNSW7RQ.js} +14 -13
  73. package/dist/{chunk-GK5VMHSN.js → chunk-26UVGP3I.js} +1 -1
  74. package/dist/{chunk-CDDRSIGK.js → chunk-2BPO7VQF.js} +80 -70
  75. package/dist/{chunk-7PTII6F4.js → chunk-2OATM2JZ.js} +1 -1
  76. package/dist/{chunk-AJ2XDY27.js → chunk-3FIWKONP.js} +10 -12
  77. package/dist/{chunk-53VUIKOE.js → chunk-3MLGUSKS.js} +1 -1
  78. package/dist/{chunk-OYCQ6PFC.js → chunk-4EINMZNO.js} +6 -6
  79. package/dist/{chunk-JUITBJ7J.js → chunk-4GLEFA2X.js} +1 -1
  80. package/dist/{chunk-BY4OTURZ.js → chunk-4MN44ORL.js} +1 -1
  81. package/dist/{chunk-MUVPQCQA.js → chunk-6HFZ2KUC.js} +1 -3
  82. package/dist/{chunk-F7JVVLGH.js → chunk-6YUACQQA.js} +2 -4
  83. package/dist/{chunk-UVH6FA5E.js → chunk-7B5DQGXG.js} +1 -1
  84. package/dist/{chunk-XEA6DSLR.js → chunk-AERGE6GC.js} +4 -6
  85. package/dist/{chunk-NQAZ2CP7.js → chunk-AGFWOII2.js} +11 -11
  86. package/dist/{chunk-RWJY7KMP.js → chunk-ARGBV4PP.js} +46 -13
  87. package/dist/{chunk-VRD452MQ.js → chunk-B4HAUSVQ.js} +2 -2
  88. package/dist/{chunk-VX4X2O6J.js → chunk-CGQ5PWS3.js} +6 -6
  89. package/dist/{chunk-RNN4MZDN.js → chunk-DBXKWFTK.js} +3 -3
  90. package/dist/{chunk-Y2VVTK2E.js → chunk-DTLASDQM.js} +1 -1
  91. package/dist/{chunk-K3PSCQLK.js → chunk-DW6P7UVY.js} +4 -6
  92. package/dist/{chunk-B6Q6WAD7.js → chunk-EHNSK2Y4.js} +1 -1
  93. package/dist/{chunk-7PEYIW53.js → chunk-EHXOWGQG.js} +2 -2
  94. package/dist/{chunk-6BUUY7FG.js → chunk-EOO32RJZ.js} +2 -4
  95. package/dist/{chunk-MFGARIVE.js → chunk-EYQIEK5M.js} +2 -4
  96. package/dist/{chunk-NT6R4ATM.js → chunk-FG4Z2XFU.js} +1 -1
  97. package/dist/{chunk-32LFUJVG.js → chunk-FNMNKYVH.js} +221 -110
  98. package/dist/{chunk-CWPE6QVM.js → chunk-GNHN5HRQ.js} +2 -4
  99. package/dist/{chunk-WLEVAIL5.js → chunk-GP6G6EQI.js} +1 -1
  100. package/dist/{chunk-KLRP6ZG3.js → chunk-HHMHL4FB.js} +251 -96
  101. package/dist/{chunk-O7YD7JYE.js → chunk-I7AW4237.js} +18 -4
  102. package/dist/{chunk-TFZZL3QF.js → chunk-ICKEGWWP.js} +2 -4
  103. package/dist/{chunk-SR6D65DA.js → chunk-IFACD7E6.js} +3 -3
  104. package/dist/{chunk-I4WAKJ6W.js → chunk-J4RAXKTC.js} +3 -3
  105. package/dist/{chunk-65UQ7H5U.js → chunk-JF3Q5YKI.js} +4 -6
  106. package/dist/{chunk-RWURKLS3.js → chunk-JH7Z2AZ7.js} +1 -1
  107. package/dist/{chunk-5WTYETQO.js → chunk-K4KAPZC7.js} +4 -8
  108. package/dist/{chunk-G3VR3MJI.js → chunk-KIUU4PNX.js} +4 -8
  109. package/dist/{chunk-4F56OUR7.js → chunk-LC53LVOT.js} +2 -2
  110. package/dist/{chunk-W7NQE65M.js → chunk-LJML7HT2.js} +1 -1
  111. package/dist/{chunk-V4O2APMI.js → chunk-LL5EY6OQ.js} +1 -1
  112. package/dist/{chunk-DCJ42FEN.js → chunk-LWJ4AMMY.js} +2 -4
  113. package/dist/{chunk-GCMT6RWI.js → chunk-LYH5HE24.js} +3 -14
  114. package/dist/{chunk-63UVIM7S.js → chunk-MBA4NNTS.js} +2 -4
  115. package/dist/{chunk-7KR5PV4P.js → chunk-MKPSMRVX.js} +1 -1
  116. package/dist/{chunk-C4EVFN7J.js → chunk-MKUVEDUE.js} +2 -2
  117. package/dist/chunk-MLKGABMK.js +9 -0
  118. package/dist/chunk-MLXJ5EZG.js +90 -0
  119. package/dist/{chunk-BXCJOACQ.js → chunk-NFHFNPTN.js} +3 -5
  120. package/dist/{chunk-2R3N4DQY.js → chunk-NJKERRSG.js} +3 -3
  121. package/dist/{chunk-I5VJNTDL.js → chunk-NNT2ZNMC.js} +5 -7
  122. package/dist/{chunk-O7CTVDC3.js → chunk-ODEGQCWW.js} +8 -8
  123. package/dist/{chunk-H4YONWQX.js → chunk-ONMRBKAX.js} +229 -108
  124. package/dist/{chunk-NE6RPW5C.js → chunk-PMWDO5FR.js} +1 -1
  125. package/dist/{chunk-IPSFAUK5.js → chunk-QB66MH2V.js} +4 -4
  126. package/dist/{chunk-XAHIVBTU.js → chunk-QHQJ7DLL.js} +6 -6
  127. package/dist/{chunk-NA3MXUU6.js → chunk-TH6HTK2L.js} +17 -15
  128. package/dist/{chunk-H4KUTL2T.js → chunk-TKEDF7KV.js} +1 -1
  129. package/dist/{chunk-KHV55ME4.js → chunk-TOWAZ5IV.js} +95 -118
  130. package/dist/{chunk-IBVB2NGY.js → chunk-TOXHEZN5.js} +47 -4
  131. package/dist/{chunk-H6OEU54G.js → chunk-UJMDHPIN.js} +91 -39
  132. package/dist/{chunk-UWBU44UP.js → chunk-UPL5FEZY.js} +1 -1
  133. package/dist/{chunk-ER3UJ2VL.js → chunk-UPMKSFBU.js} +2 -2
  134. package/dist/{chunk-X7DJ2QZW.js → chunk-V4MKR32F.js} +4 -6
  135. package/dist/{chunk-HV75RBMK.js → chunk-VB23RNNI.js} +1 -1
  136. package/dist/{chunk-56T5TMNK.js → chunk-VK2AWQ6D.js} +2 -2
  137. package/dist/{chunk-UXDQ4ERA.js → chunk-VNTDQUOG.js} +21 -18
  138. package/dist/{chunk-KQTGSD23.js → chunk-VYVESELG.js} +13 -9
  139. package/dist/{chunk-S465RWY7.js → chunk-W6SKR3HZ.js} +3 -5
  140. package/dist/{chunk-CQCURHDV.js → chunk-X2XE65WV.js} +12 -10
  141. package/dist/{chunk-XQ2ZBOAD.js → chunk-XK7VZFCC.js} +22 -9
  142. package/dist/{chunk-5F3EXHT7.js → chunk-XMRDT4PB.js} +2 -4
  143. package/dist/{chunk-MPXPPKJ4.js → chunk-XWQKCCCO.js} +3 -3
  144. package/dist/{chunk-7APRWURX.js → chunk-Y6TS42WD.js} +10 -12
  145. package/dist/{chunk-WTJS6PCC.js → chunk-YOG7TWMO.js} +1 -1
  146. package/dist/{chunk-QSSABSCM.js → chunk-YPSN64BU.js} +6 -6
  147. package/dist/{chunk-WJW564IP.js → chunk-ZBA74MMX.js} +2 -2
  148. package/dist/{chunk-VXQDZH5T.js → chunk-ZMJHXDZR.js} +3 -3
  149. package/dist/{chunk-BHV7PX5V.js → chunk-ZUAXTH6Z.js} +2 -2
  150. package/dist/{chunk-K6MMN6AW.js → chunk-ZZLTJXKR.js} +3 -5
  151. package/dist/{code-context-index-SRTAWCZQ.js → code-context-index-I5A7I4JQ.js} +7 -7
  152. package/dist/{content-extractor-H4IPL533.js → content-extractor-M7ISRONU.js} +1 -1
  153. package/dist/{conversation-entity-extractor-IZ3ECP4A.js → conversation-entity-extractor-EYSI4DKM.js} +3 -3
  154. package/dist/{conversation-wiki-populator-K4BQXHHO.js → conversation-wiki-populator-RSJ44BRO.js} +2 -2
  155. package/dist/{core-memory-JZ34WT5R.js → core-memory-C3JLISAU.js} +1 -1
  156. package/dist/{crdt-sync-4TOVD4QN.js → crdt-sync-XMC6LT2Q.js} +2 -2
  157. package/dist/{crm-bridge-27QVOWPI.js → crm-bridge-4QZRMOF7.js} +1 -1
  158. package/dist/{crm-webhook-77XHBWL7.js → crm-webhook-QMHD5YYQ.js} +3 -3
  159. package/dist/{cto-delegation-gate-AWENA4VT.js → cto-delegation-gate-BTZWAA4E.js} +11 -10
  160. package/dist/{daemon-auth-Z7O3LO23.js → daemon-auth-F47P6HTC.js} +4 -4
  161. package/dist/{daemon-orchestration-BG4NPWOK.js → daemon-orchestration-HFODCB52.js} +14 -13
  162. package/dist/{daemon-protocol-N7MOJ4U3.js → daemon-protocol-XW2OLNBS.js} +1 -1
  163. package/dist/{db-backup-E34JMBZD.js → db-backup-W56YOLMC.js} +4 -4
  164. package/dist/{devtools-ZL5NCINM.js → devtools-5PEATRYE.js} +1 -1
  165. package/dist/{discord-QOFQKX6S.js → discord-LMZKIYWB.js} +1 -1
  166. package/dist/dispatch-ack-JYCKAWKZ.js +13 -0
  167. package/dist/{email-NY5HB4WA.js → email-UENAIKRN.js} +1 -1
  168. package/dist/{entity-boost-V6KSRGG4.js → entity-boost-LIBVNNXO.js} +2 -2
  169. package/dist/{exe-drift-YFWCC26O.js → exe-drift-SED6KQTZ.js} +6 -6
  170. package/dist/{exe-export-YRACBEUY.js → exe-export-ADSWDE5U.js} +9 -9
  171. package/dist/{exe-import-DY57L2OI.js → exe-import-WFLNGJZP.js} +9 -9
  172. package/dist/{exe-key-U2JJH4MO.js → exe-key-4L32R46F.js} +5 -7
  173. package/dist/{exe-org-45OTYZZJ.js → exe-org-OOO7KJVZ.js} +4 -4
  174. package/dist/{factory-2PB537KA.js → factory-CTFAGZUA.js} +1 -1
  175. package/dist/fast-db-init-HVAVS35N.js +7 -0
  176. package/dist/{file-edit-GSXUFUDC.js → file-edit-AZAJPCA3.js} +1 -1
  177. package/dist/{file-read-Z3F3PUCK.js → file-read-VACF23NC.js} +1 -1
  178. package/dist/{file-write-X77JXZ2C.js → file-write-B2RPT5U7.js} +1 -1
  179. package/dist/gateway/index.js +10 -10
  180. package/dist/{gateway-client-IPKKEYKY.js → gateway-client-5EUMMEZZ.js} +2 -2
  181. package/dist/{git-staleness-I662R7RL.js → git-staleness-BY4ZK6MW.js} +5 -5
  182. package/dist/{git-task-sweep-XWFCP2HA.js → git-task-sweep-RSRASAHB.js} +12 -11
  183. package/dist/{glob-2PWAXTZ2.js → glob-7PWH7WKL.js} +1 -1
  184. package/dist/{global-procedures-IEIJBCAH.js → global-procedures-EKYSVONR.js} +7 -7
  185. package/dist/graph-auto-extract-HWZ5GVXZ.js +161 -0
  186. package/dist/{graph-query-NCDYOT4Y.js → graph-query-SE6T5XC4.js} +1 -1
  187. package/dist/{graph-rag-2YLGRBW5.js → graph-rag-G3EG5Q6L.js} +3 -3
  188. package/dist/{grep-GTV6WAZ4.js → grep-HWIDXHRC.js} +1 -1
  189. package/dist/{hook-integrity-LLPJPAXW.js → hook-integrity-PR4BPZBT.js} +2 -2
  190. package/dist/hooks/bug-report-worker.js +13 -12
  191. package/dist/hooks/codex-stop-task-finalizer.js +16 -13
  192. package/dist/hooks/commit-complete.js +14 -13
  193. package/dist/hooks/error-recall.js +9 -12
  194. package/dist/hooks/exe-heartbeat-hook.js +6 -6
  195. package/dist/hooks/ingest-worker.js +9 -9
  196. package/dist/hooks/ingest.js +16 -19
  197. package/dist/hooks/instructions-loaded.js +7 -7
  198. package/dist/hooks/notification.js +12 -10
  199. package/dist/hooks/post-compact.js +13 -12
  200. package/dist/hooks/post-tool-combined.js +6 -6
  201. package/dist/hooks/pre-compact.js +18 -17
  202. package/dist/hooks/pre-tool-use.js +19 -20
  203. package/dist/hooks/prompt-submit.js +78 -39
  204. package/dist/hooks/session-end.js +22 -21
  205. package/dist/hooks/session-start.js +31 -25
  206. package/dist/hooks/stop.js +20 -22
  207. package/dist/hooks/subagent-stop.js +13 -12
  208. package/dist/hooks/summary-worker.js +21 -20
  209. package/dist/{hooks-UK2AYRCA.js → hooks-LDCFYHDF.js} +1 -1
  210. package/dist/{imessage-LINH4V4D.js → imessage-6UOZB5VN.js} +1 -1
  211. package/dist/index.js +19 -18
  212. package/dist/{installer-PB63JTTG.js → installer-RLKOACKG.js} +9 -9
  213. package/dist/{installer-SSR2OOLO.js → installer-W4NY3OBF.js} +13 -11
  214. package/dist/{installer-ZONYB3XK.js → installer-X5FEYJIA.js} +9 -9
  215. package/dist/{intercom-queue-MMZT2MA2.js → intercom-queue-K3DVKSPJ.js} +1 -1
  216. package/dist/{key-backup-status-4WKIQOAS.js → key-backup-status-ORNMJEEA.js} +4 -6
  217. package/dist/lib/agent-config.js +4 -4
  218. package/dist/lib/cloud-sync.js +8 -8
  219. package/dist/lib/cloudflare-dns.js +1 -1
  220. package/dist/lib/config.js +3 -5
  221. package/dist/lib/consolidation.js +8 -8
  222. package/dist/lib/crypto.js +1 -1
  223. package/dist/lib/database.js +5 -5
  224. package/dist/lib/db-daemon-client.js +5 -5
  225. package/dist/lib/db.js +5 -5
  226. package/dist/lib/device-registry.js +4 -6
  227. package/dist/lib/embedder.js +6 -6
  228. package/dist/lib/employee-templates.js +8 -8
  229. package/dist/lib/employees.js +7 -5
  230. package/dist/lib/error-detector.js +1 -1
  231. package/dist/lib/exe-daemon-client.js +5 -5
  232. package/dist/lib/exe-daemon.js +143 -52
  233. package/dist/lib/file-grep.js +1 -1
  234. package/dist/lib/hybrid-search.js +8 -8
  235. package/dist/lib/identity-templates.js +1 -1
  236. package/dist/lib/identity.js +5 -5
  237. package/dist/lib/keychain.js +1 -1
  238. package/dist/lib/license.js +4 -4
  239. package/dist/lib/messaging.js +12 -11
  240. package/dist/lib/post-tool-memory.js +3 -3
  241. package/dist/lib/registry-proxy.js +1 -1
  242. package/dist/lib/reminders.js +6 -6
  243. package/dist/lib/runtime-table.js +1 -1
  244. package/dist/lib/schedules.js +8 -8
  245. package/dist/lib/session-registry.js +1 -1
  246. package/dist/lib/session-wrappers.js +1 -1
  247. package/dist/lib/skill-learning.js +7 -7
  248. package/dist/lib/status-brief.js +1 -1
  249. package/dist/lib/store.js +7 -7
  250. package/dist/lib/task-router.js +6 -6
  251. package/dist/lib/tasks.js +14 -11
  252. package/dist/lib/tmux-routing.js +11 -10
  253. package/dist/lib/tmux-status.js +1 -1
  254. package/dist/lib/tmux-transport.js +1 -1
  255. package/dist/lib/token-spend.js +6 -6
  256. package/dist/lib/transport.js +1 -1
  257. package/dist/lib/ws-auth.js +1 -1
  258. package/dist/lib/ws-client.js +2 -2
  259. package/dist/license-gate-J5YN264E.js +14 -0
  260. package/dist/mcp/register-tools.js +63 -62
  261. package/dist/mcp/server.js +65 -64
  262. package/dist/mcp/tools/complete-reminder.js +7 -7
  263. package/dist/mcp/tools/create-reminder.js +7 -7
  264. package/dist/mcp/tools/create-task.js +15 -13
  265. package/dist/mcp/tools/deactivate-behavior.js +8 -8
  266. package/dist/mcp/tools/list-reminders.js +7 -7
  267. package/dist/mcp/tools/list-tasks.js +14 -14
  268. package/dist/mcp/tools/send-message.js +14 -13
  269. package/dist/mcp/tools/update-task.js +13 -12
  270. package/dist/{mcp-diagnostics-CWMVPHVC.js → mcp-diagnostics-TSBY62UQ.js} +1 -1
  271. package/dist/{mcp-disconnect-tracker-RM3GEERR.js → mcp-disconnect-tracker-MB23DRS6.js} +1 -1
  272. package/dist/{mcp-http-config-PDGSOYNQ.js → mcp-http-config-6YLW4PFG.js} +6 -6
  273. package/dist/{memory-cards-OLE6MGO7.js → memory-cards-UAQCO4QR.js} +5 -5
  274. package/dist/{memory-poisoning-defense-OOHJIXIX.js → memory-poisoning-defense-VWITZ4WO.js} +5 -7
  275. package/dist/{memory-queue-TGWXMENR.js → memory-queue-NYIGZNCG.js} +4 -4
  276. package/dist/memory-queue-client-YJOLYALV.js +15 -0
  277. package/dist/{memory-reflection-Z7CT6JLY.js → memory-reflection-JQC4ZSUD.js} +5 -5
  278. package/dist/{message-queue-client-TWIA2GIH.js → message-queue-client-NTLKYGVO.js} +1 -1
  279. package/dist/{notifications-SREXGSAQ.js → notifications-YDOKTVCH.js} +11 -10
  280. package/dist/{oauth-server-NSWGKLLA.js → oauth-server-TOWAZR4K.js} +1 -1
  281. package/dist/{orchestration-phase-WLQMEP4M.js → orchestration-phase-FXKZYK6R.js} +4 -4
  282. package/dist/{orchestrator-CHQURQSC.js → orchestrator-BZ2D6ZM6.js} +13 -12
  283. package/dist/{permission-presets-3XKJNM6N.js → permission-presets-E3DZK46K.js} +1 -1
  284. package/dist/{permissions-EZH3ULLD.js → permissions-6MCWUDCD.js} +1 -1
  285. package/dist/{pg-ssl-4ZNXKUNH.js → pg-ssl-7JXQFL4I.js} +1 -1
  286. package/dist/{plan-limits-7L75PB33.js → plan-limits-KUTODKG6.js} +7 -7
  287. package/dist/{preferences-K2GKUQSJ.js → preferences-ERXO6SMJ.js} +3 -3
  288. package/dist/{project-name-OBIDABHE.js → project-name-EWG5KAZP.js} +1 -1
  289. package/dist/{projection-worker-HSGE44JA.js → projection-worker-UY7R2EQJ.js} +85 -8
  290. package/dist/{push-notifications-EOTMKJ6B.js → push-notifications-KDYFOJRI.js} +4 -4
  291. package/dist/{reranker-ME4CK2ZQ.js → reranker-OMADCS3D.js} +4 -4
  292. package/dist/{review-gate-M3U2YAW6.js → review-gate-IUNS6GQU.js} +1 -1
  293. package/dist/{review-polling-DQCN4TNM.js → review-polling-DORNZ2KI.js} +12 -11
  294. package/dist/runtime/index.js +14 -13
  295. package/dist/{self-query-router-TRPHL54X.js → self-query-router-37VB3PKQ.js} +1 -1
  296. package/dist/{session-events-ZZBFYL5Z.js → session-events-5WR5RVDK.js} +12 -12
  297. package/dist/{session-kill-telemetry-MUFET632.js → session-kill-telemetry-DHSQV2CI.js} +6 -6
  298. package/dist/{session-scope-QUUDZM2L.js → session-scope-D4Q62ZOZ.js} +13 -13
  299. package/dist/setup-wizard-QVNTI3T4.js +12 -0
  300. package/dist/{shard-manager-VYMJM7NR.js → shard-manager-SP4YL5JQ.js} +4 -4
  301. package/dist/{signal-C263RUND.js → signal-7UIRTYGZ.js} +1 -1
  302. package/dist/{slack-N7PL6QMX.js → slack-GCOYBZUK.js} +1 -1
  303. package/dist/{task-enforcement-WJ3S6JTL.js → task-enforcement-OYCQXBBC.js} +11 -10
  304. package/dist/{task-scanner-YHWRG4ZJ.js → task-scanner-QEM5CO2Y.js} +1 -1
  305. package/dist/{task-scope-V2CTRHG7.js → task-scope-WWRNU2LU.js} +11 -10
  306. package/dist/{tasks-crud-W2XPUGKK.js → tasks-crud-75AUVZPO.js} +13 -10
  307. package/dist/{tasks-review-BR2SBSYG.js → tasks-review-UMZN5ZPQ.js} +11 -10
  308. package/dist/{telegram-B54FFOXD.js → telegram-RGVD4LUY.js} +1 -1
  309. package/dist/{telemetry-7IQCPV4Q.js → telemetry-43X3GT3R.js} +1 -1
  310. package/dist/{token-budget-H2XSWO4D.js → token-budget-62TYDIMI.js} +5 -5
  311. package/dist/{tool-capability-index-5X2CCGIK.js → tool-capability-index-OBZXORBP.js} +2 -2
  312. package/dist/{tool-gates-SGFMDREY.js → tool-gates-3IC7DK4R.js} +1 -1
  313. package/dist/{tool-gates-3DNTD7G3.js → tool-gates-GXSYBVK4.js} +1 -1
  314. package/dist/{tool-registry-2VUAZXTW.js → tool-registry-5XN3FUYL.js} +1 -1
  315. package/dist/{tool-telemetry-NVPSPRYP.js → tool-telemetry-JL6NY3KP.js} +2 -2
  316. package/dist/tui/App.js +44 -43
  317. package/dist/{tui-data-QN4O565C.js → tui-data-C5I2YU4C.js} +11 -10
  318. package/dist/{update-check-ERUKV2G6.js → update-check-MKHO7H6B.js} +1 -1
  319. package/dist/{webhook-L5FGAUPJ.js → webhook-LCW7UP4L.js} +1 -1
  320. package/dist/{webhook-pipe-B7GJCJAI.js → webhook-pipe-PJOFVBD3.js} +1 -1
  321. package/dist/{whatsapp-7FK2PRWO.js → whatsapp-SILL4V64.js} +1 -1
  322. package/dist/{whatsapp-accounts-VIHRSLGB.js → whatsapp-accounts-BWRZUY23.js} +1 -1
  323. package/dist/{wiki-acl-R4IIHICT.js → wiki-acl-5EC5VNYG.js} +1 -1
  324. package/dist/{wiki-client-EUDJA7O2.js → wiki-client-MMVRPTPK.js} +1 -1
  325. package/dist/{worker-gate-3KDXLIJC.js → worker-gate-Q5Y6B5N7.js} +4 -4
  326. package/dist/{workflow-engine-GISKRYSO.js → workflow-engine-KAKVU7NC.js} +3 -3
  327. package/dist/{worktree-B3FHAHEM.js → worktree-OMPQEJH7.js} +1 -1
  328. package/package.json +2 -2
  329. package/release-notes.json +126 -126
  330. package/src/commands/exe/setup.md +1 -1
  331. package/dist/chunk-PNKVD2UK.js +0 -26
  332. package/dist/fast-db-init-67TQTHWT.js +0 -7
  333. package/dist/license-gate-JY2KFIKO.js +0 -14
  334. package/dist/memory-queue-client-RZP5F4EA.js +0 -15
  335. package/dist/setup-wizard-NXWCEK63.js +0 -12
  336. package/dist/{chunk-D5MPHVWH.js → chunk-524VLFFY.js} +0 -0
  337. package/dist/{chunk-HIQ5RDA7.js → chunk-A3A2E42I.js} +0 -0
  338. package/dist/{chunk-APRP5D27.js → chunk-H6ADW3YC.js} +0 -0
  339. package/dist/{chunk-AAVODJ4F.js → chunk-J2OPV5FE.js} +0 -0
  340. package/dist/{chunk-DBLBWWFS.js → chunk-S6DA6UKC.js} +3 -3
  341. /package/dist/{chunk-F3ULERRZ.js → chunk-TSCZMB3P.js} +0 -0
  342. /package/dist/{chunk-2HV2EQW2.js → chunk-WRU72I4S.js} +0 -0
@@ -5,19 +5,15 @@ import {
5
5
  import {
6
6
  LEGACY_LANCE_PATH,
7
7
  MODELS_DIR,
8
- init_config,
9
8
  loadConfig,
10
9
  saveConfig
11
- } from "./chunk-KHV55ME4.js";
10
+ } from "./chunk-TOWAZ5IV.js";
12
11
  import {
13
12
  atomicWriteJsonSync,
14
- atomicWriteSync,
15
- init_secure_files
16
- } from "./chunk-GCMT6RWI.js";
13
+ atomicWriteSync
14
+ } from "./chunk-LYH5HE24.js";
17
15
 
18
16
  // src/lib/setup-wizard.ts
19
- init_secure_files();
20
- init_config();
21
17
  import crypto from "crypto";
22
18
  import { execSync } from "child_process";
23
19
  import { existsSync as existsSync2, mkdirSync, readFileSync, unlinkSync as unlinkSync2 } from "fs";
@@ -157,6 +153,11 @@ function ask(rl, prompt) {
157
153
  doAsk();
158
154
  });
159
155
  }
156
+ function askHeadless(envVar, fallback, log, prompt) {
157
+ const value = envVar ?? fallback;
158
+ if (value) log(` [headless] ${prompt.replace(/[:\s]+$/, "")}: ${value}`);
159
+ return value;
160
+ }
160
161
  function getAvailableMemoryGB() {
161
162
  if (process.platform === "darwin") {
162
163
  try {
@@ -176,6 +177,15 @@ function getAvailableMemoryGB() {
176
177
  }
177
178
  return os.freemem() / (1024 * 1024 * 1024);
178
179
  }
180
+ function isWSL() {
181
+ if (process.platform !== "linux") return false;
182
+ try {
183
+ const release = execSync("uname -r", { encoding: "utf8", timeout: 3e3 }).toLowerCase();
184
+ return release.includes("microsoft");
185
+ } catch {
186
+ return false;
187
+ }
188
+ }
179
189
  function getTotalMemoryGB() {
180
190
  return os.totalmem() / (1024 * 1024 * 1024);
181
191
  }
@@ -212,10 +222,20 @@ async function runSetupWizard(opts = {}) {
212
222
  const {
213
223
  skipModel: skipModelOpt = false,
214
224
  skipModelValidation = false,
225
+ nonInteractive = false,
215
226
  log = (msg) => process.stderr.write(msg + "\n")
216
227
  } = opts;
217
228
  let skipModel = skipModelOpt;
229
+ if (nonInteractive) {
230
+ log("[headless] Non-interactive mode enabled. Using env vars for config.");
231
+ }
218
232
  const rl = opts.createReadline ? opts.createReadline() : createInterface({ input: process.stdin, output: process.stderr });
233
+ const askOrEnv = (prompt, envVar, fallback = "") => {
234
+ if (nonInteractive) {
235
+ return Promise.resolve(askHeadless(envVar ? process.env[envVar] : void 0, fallback, log, prompt));
236
+ }
237
+ return ask(rl, prompt);
238
+ };
219
239
  try {
220
240
  log("");
221
241
  log("=== exe-os Setup ===");
@@ -229,7 +249,7 @@ async function runSetupWizard(opts = {}) {
229
249
  log(" chsh -s /bin/zsh");
230
250
  log(" Then restart your terminal.");
231
251
  log("");
232
- const cont = await ask(rl, " Continue with bash? (y/n, default: y): ");
252
+ const cont = await askOrEnv(" Continue with bash? (y/n, default: y): ", void 0, "y");
233
253
  if (cont.toLowerCase() === "n") {
234
254
  log(" Run `chsh -s /bin/zsh`, restart your terminal, then run setup again.");
235
255
  rl.close();
@@ -238,12 +258,26 @@ async function runSetupWizard(opts = {}) {
238
258
  log("");
239
259
  }
240
260
  }
261
+ if (isWSL()) {
262
+ log(" Detected: Windows Subsystem for Linux (WSL)");
263
+ log("");
264
+ if (process.cwd().startsWith("/mnt/")) {
265
+ log(" \u26A0 Your current directory is on the Windows filesystem (/mnt/).");
266
+ log(" This is ~10x slower than the native Linux filesystem.");
267
+ log(" For best performance, keep your projects in ~/ (e.g., ~/projects/)");
268
+ log(" and run exe-os from there.");
269
+ log("");
270
+ }
271
+ log(" Encryption: using file-based key storage (OS keychain not available in WSL).");
272
+ log(" This is normal \u2014 your key is still encrypted and machine-bound.");
273
+ log("");
274
+ }
241
275
  log("What are you setting up?");
242
276
  log("");
243
277
  log(" [1] First device / brand new Exe OS memory");
244
278
  log(" [2] Another device / I already have a 24-word recovery phrase");
245
279
  log("");
246
- const installType = await ask(rl, "Choice (1/2): ");
280
+ const installType = await askOrEnv("Choice (1/2): ", "EXE_INSTALL_TYPE", "1");
247
281
  let isPairing = false;
248
282
  let pairingRosterPulled = false;
249
283
  if (installType === "2") {
@@ -254,7 +288,7 @@ async function runSetupWizard(opts = {}) {
254
288
  log(" exe-os cloud link --show-full");
255
289
  log("Then copy the 24-word phrase here.");
256
290
  log("");
257
- const mnemonic = await ask(rl, "Paste the 24-word recovery phrase: ");
291
+ const mnemonic = await askOrEnv("Paste the 24-word recovery phrase: ", "EXE_PASSPHRASE");
258
292
  try {
259
293
  const key = await importMnemonic(mnemonic);
260
294
  await setMasterKey(key);
@@ -263,9 +297,9 @@ async function runSetupWizard(opts = {}) {
263
297
  log("Now paste the Cloud API key from that same `exe-os cloud link --show-full` output.");
264
298
  log("It starts with: exe_sk_");
265
299
  log("");
266
- const apiKey = await ask(rl, "Cloud API key (starts with exe_sk_): ");
300
+ const apiKey = await askOrEnv("Cloud API key (starts with exe_sk_): ", "EXE_LICENSE_KEY");
267
301
  if (apiKey && apiKey.startsWith("exe_sk_")) {
268
- const cloudEndpoint = "https://cloud.askexe.com";
302
+ const cloudEndpoint = "https://api.askexe.com";
269
303
  const cloudCfg = { apiKey, endpoint: cloudEndpoint };
270
304
  const earlyConfig = await loadConfig();
271
305
  earlyConfig.cloud = cloudCfg;
@@ -334,13 +368,13 @@ async function runSetupWizard(opts = {}) {
334
368
  log(" Like a Bitcoin wallet \u2014 lose the phrase, lose everything.");
335
369
  log("=============================================================");
336
370
  log("");
337
- const confirmation = await ask(rl, 'Type "I SAVED MY RECOVERY PHRASE" after you have saved it: ');
371
+ const confirmation = nonInteractive ? "I SAVED MY RECOVERY PHRASE" : await ask(rl, 'Type "I SAVED MY RECOVERY PHRASE" after you have saved it: ');
338
372
  if (confirmation !== "I SAVED MY RECOVERY PHRASE") {
339
373
  throw new Error(
340
374
  "Setup cancelled: recovery phrase was not confirmed. Save the 24-word phrase before continuing \u2014 it is required to recover encrypted memories."
341
375
  );
342
376
  }
343
- const { markKeyBackupConfirmed } = await import("./key-backup-status-4WKIQOAS.js");
377
+ const { markKeyBackupConfirmed } = await import("./key-backup-status-ORNMJEEA.js");
344
378
  markKeyBackupConfirmed("setup-wizard");
345
379
  }
346
380
  state.completedSteps.push(1);
@@ -363,9 +397,9 @@ async function runSetupWizard(opts = {}) {
363
397
  log("backed up on Exe Cloud. Free for all plans. We can't read your data \u2014");
364
398
  log("only your encryption key can decrypt it.");
365
399
  log("");
366
- const existingKey = await ask(rl, "Paste your Exe OS license key, or press Enter to start as a free user: ");
400
+ const existingKey = await askOrEnv("Paste your Exe OS license key, or press Enter to start as a free user: ", "EXE_LICENSE_KEY");
367
401
  if (existingKey && existingKey.startsWith("exe_sk_")) {
368
- const cloudEndpoint = "https://cloud.askexe.com";
402
+ const cloudEndpoint = "https://api.askexe.com";
369
403
  try {
370
404
  const { loadDeviceId } = await import("./lib/license.js");
371
405
  const deviceId = loadDeviceId();
@@ -390,7 +424,7 @@ async function runSetupWizard(opts = {}) {
390
424
  }
391
425
  } catch {
392
426
  log("Could not validate key \u2014 saving it and proceeding.");
393
- cloudConfig = { apiKey: existingKey, endpoint: "https://cloud.askexe.com" };
427
+ cloudConfig = { apiKey: existingKey, endpoint: "https://api.askexe.com" };
394
428
  const { saveLicense: saveLicense2, mirrorLicenseKey: mirrorLicenseKey2 } = await import("./lib/license.js");
395
429
  saveLicense2(existingKey);
396
430
  mirrorLicenseKey2(existingKey);
@@ -402,7 +436,7 @@ async function runSetupWizard(opts = {}) {
402
436
  const deviceId = loadDeviceId();
403
437
  let res;
404
438
  try {
405
- res = await fetch("https://cloud.askexe.com/auth/auto-provision", {
439
+ res = await fetch("https://api.askexe.com/auth/auto-provision", {
406
440
  method: "POST",
407
441
  headers: { "Content-Type": "application/json" },
408
442
  body: JSON.stringify({ deviceId }),
@@ -410,7 +444,7 @@ async function runSetupWizard(opts = {}) {
410
444
  });
411
445
  } catch {
412
446
  await new Promise((r) => setTimeout(r, 500));
413
- res = await fetch("https://cloud.askexe.com/auth/auto-provision", {
447
+ res = await fetch("https://api.askexe.com/auth/auto-provision", {
414
448
  method: "POST",
415
449
  headers: { "Content-Type": "application/json" },
416
450
  body: JSON.stringify({ deviceId }),
@@ -420,7 +454,7 @@ async function runSetupWizard(opts = {}) {
420
454
  if (res.ok) {
421
455
  const data = await res.json();
422
456
  if (data.apiKey) {
423
- cloudConfig = { apiKey: data.apiKey, endpoint: "https://cloud.askexe.com" };
457
+ cloudConfig = { apiKey: data.apiKey, endpoint: "https://api.askexe.com" };
424
458
  const { saveLicense: saveLicense2, mirrorLicenseKey: mirrorLicenseKey2 } = await import("./lib/license.js");
425
459
  saveLicense2(data.apiKey);
426
460
  mirrorLicenseKey2(data.apiKey);
@@ -453,7 +487,7 @@ async function runSetupWizard(opts = {}) {
453
487
  log(" Close other applications (browser, Slack, etc.) before continuing.");
454
488
  log(" The embedding model needs ~500MB to download and load.");
455
489
  log("");
456
- await ask(rl, "Press Enter when ready, or Ctrl+C to abort and free memory first: ");
490
+ if (!nonInteractive) await ask(rl, "Press Enter when ready, or Ctrl+C to abort and free memory first: ");
457
491
  }
458
492
  log("Note: jina-embeddings-v5-text-small is licensed CC-BY-NC-4.0 (non-commercial)");
459
493
  log("");
@@ -488,7 +522,7 @@ async function runSetupWizard(opts = {}) {
488
522
  if (cloudConfig) {
489
523
  config.cloud = cloudConfig;
490
524
  }
491
- const { applyDefaultOrchestrationPhase } = await import("./orchestration-phase-WLQMEP4M.js");
525
+ const { applyDefaultOrchestrationPhase } = await import("./orchestration-phase-FXKZYK6R.js");
492
526
  applyDefaultOrchestrationPhase(config);
493
527
  await saveConfig(config);
494
528
  log("");
@@ -514,19 +548,31 @@ async function runSetupWizard(opts = {}) {
514
548
  log("Step 5 already complete \u2014 skipping.");
515
549
  }
516
550
  if (!state.completedSteps.includes(55)) {
517
- const { savePreferences, loadPreferences: loadPrefs } = await import("./preferences-K2GKUQSJ.js");
551
+ const { savePreferences, loadPreferences: loadPrefs } = await import("./preferences-ERXO6SMJ.js");
518
552
  const existingPrefs = loadPrefs();
519
553
  const prefs = { ...existingPrefs };
520
554
  log("=== Config Defaults ===");
521
555
  log("");
522
556
  const ghosttyDetected = existsSync2(path2.join(os.homedir(), ".config", "ghostty")) || existsSync2(path2.join(os.homedir(), "Library", "Application Support", "com.mitchellh.ghostty"));
523
557
  if (ghosttyDetected) {
524
- const ghosttyAnswer = await ask(rl, "Detected Ghostty terminal. Use exe-os Ghostty defaults? (Y/n) ");
558
+ const ghosttyAnswer = await askOrEnv("Detected Ghostty terminal. Use exe-os Ghostty defaults? (Y/n) ", void 0, "y");
525
559
  prefs.ghostty = ghosttyAnswer.toLowerCase() !== "n";
526
560
  }
527
- const tmuxAnswer = await ask(rl, "Use exe-os tmux config? (Y/n) ");
561
+ const weztermDetected = existsSync2(path2.join(os.homedir(), ".wezterm.lua")) || existsSync2(path2.join(os.homedir(), ".config", "wezterm")) || (() => {
562
+ try {
563
+ execSync("which wezterm 2>/dev/null", { timeout: 5e3 });
564
+ return true;
565
+ } catch {
566
+ return false;
567
+ }
568
+ })();
569
+ if (weztermDetected) {
570
+ const weztermAnswer = await askOrEnv("Detected WezTerm terminal. Use exe-os WezTerm defaults? (Y/n) ", void 0, "y");
571
+ prefs.wezterm = weztermAnswer.toLowerCase() !== "n";
572
+ }
573
+ const tmuxAnswer = await askOrEnv("Use exe-os tmux config? (Y/n) ", void 0, "y");
528
574
  prefs.tmux = tmuxAnswer.toLowerCase() !== "n";
529
- const statusLineAnswer = await ask(rl, "Install CC context bar in status line? (Y/n) ");
575
+ const statusLineAnswer = await askOrEnv("Install CC context bar in status line? (Y/n) ", void 0, "y");
530
576
  prefs.ccStatusLine = statusLineAnswer.toLowerCase() !== "n";
531
577
  prefs.codexStatusLine = prefs.ccStatusLine;
532
578
  savePreferences(prefs);
@@ -541,7 +587,7 @@ async function runSetupWizard(opts = {}) {
541
587
  log(" 2) OpenCode (75+ providers \u2014 open source)");
542
588
  log(" 3) Codex (OpenAI)");
543
589
  log("");
544
- const rtChoice = await ask(rl, "Choose your AI runtime [1]: ");
590
+ const rtChoice = await askOrEnv("Choose your AI runtime [1]: ", "EXE_RUNTIME", "1");
545
591
  const rtMap = {
546
592
  "1": { runtime: "claude", models: ["claude-opus-4.6", "claude-sonnet-4.6", "claude-sonnet-4", "claude-haiku-4.5"], defaultModel: "claude-opus-4.6" },
547
593
  "2": { runtime: "opencode", models: ["anthropic/claude-sonnet-4-6", "openai/gpt-5.4", "google/gemini-2.5-pro", "deepseek/deepseek-r3"], defaultModel: "anthropic/claude-sonnet-4-6" },
@@ -550,7 +596,7 @@ async function runSetupWizard(opts = {}) {
550
596
  const selected = rtMap[rtChoice.trim()] ?? rtMap["1"];
551
597
  log(`Runtime: ${selected.runtime}`);
552
598
  log(`Models: ${selected.models.join(", ")}`);
553
- const modelChoice = await ask(rl, `Choose model [${selected.defaultModel}]: `);
599
+ const modelChoice = await askOrEnv(`Choose model [${selected.defaultModel}]: `, "EXE_MODEL", selected.defaultModel);
554
600
  const chosenModel = modelChoice.trim() || selected.defaultModel;
555
601
  try {
556
602
  const { loadConfig: lc, saveConfig: sc } = await import("./lib/config.js");
@@ -610,7 +656,7 @@ async function runSetupWizard(opts = {}) {
610
656
  log(" On your MAIN device, run: exe-os cloud sync");
611
657
  log(" Then come back here and press Enter to retry the pull.");
612
658
  log("");
613
- await ask(rl, "Press Enter after syncing from your main device... ");
659
+ if (!nonInteractive) await ask(rl, "Press Enter after syncing from your main device... ");
614
660
  try {
615
661
  const { initSyncCrypto: retryInitCrypto } = await import("./lib/crypto.js");
616
662
  const { cloudPullRoster: retryPull } = await import("./lib/cloud-sync.js");
@@ -669,9 +715,10 @@ async function runSetupWizard(opts = {}) {
669
715
  log("your entire team. Engineers, marketers, specialists, all working");
670
716
  log("in parallel while you focus on what matters.");
671
717
  log("");
672
- const cooNameInput = await ask(
673
- rl,
674
- `Name your coordinator (default: ${DEFAULT_COORDINATOR_TEMPLATE_NAME}): `
718
+ const cooNameInput = await askOrEnv(
719
+ `Name your coordinator (default: ${DEFAULT_COORDINATOR_TEMPLATE_NAME}): `,
720
+ "EXE_COO_NAME",
721
+ DEFAULT_COORDINATOR_TEMPLATE_NAME
675
722
  );
676
723
  cooName = (cooNameInput || DEFAULT_COORDINATOR_TEMPLATE_NAME).toLowerCase();
677
724
  let employees = await loadEmployees(EMPLOYEES_PATH).catch(() => []);
@@ -713,10 +760,15 @@ async function runSetupWizard(opts = {}) {
713
760
  }
714
761
  let isLicensed = license.valid && license.plan !== "free";
715
762
  if (!isLicensed) {
716
- let licenseInput = await ask(rl, "Hire other employees with your Exe OS license key, or press Enter to continue as a free user (COO only): ");
763
+ let licenseInput = await askOrEnv("Hire other employees with your Exe OS license key, or press Enter to continue as a free user (COO only): ", "EXE_LICENSE_KEY");
717
764
  if (licenseInput && !licenseInput.startsWith("exe_sk_")) {
718
- log("That doesn't look like a license key (should start with exe_sk_).");
719
- licenseInput = await ask(rl, "Try again (or press Enter to skip): ");
765
+ if (nonInteractive) {
766
+ log("EXE_LICENSE_KEY doesn't look like a license key (should start with exe_sk_). Skipping.");
767
+ licenseInput = "";
768
+ } else {
769
+ log("That doesn't look like a license key (should start with exe_sk_).");
770
+ licenseInput = await ask(rl, "Try again (or press Enter to skip): ");
771
+ }
720
772
  }
721
773
  if (licenseInput && licenseInput.startsWith("exe_sk_")) {
722
774
  saveLicense(licenseInput);
@@ -770,8 +822,8 @@ async function runSetupWizard(opts = {}) {
770
822
  log(" Phase 2: Executive bench \u2014 add CTO/CMO for repeated domain work");
771
823
  log(" Phase 3: Parallel org \u2014 specialists execute in parallel with reviews");
772
824
  log("");
773
- const unlockExecutives = (await ask(rl, "Unlock Phase 2 executives now? (y/N): ")).toLowerCase() === "y";
774
- const { setOrchestrationPhase } = await import("./orchestration-phase-WLQMEP4M.js");
825
+ const unlockExecutives = (await askOrEnv("Unlock Phase 2 executives now? (y/N): ", void 0, "n")).toLowerCase() === "y";
826
+ const { setOrchestrationPhase } = await import("./orchestration-phase-FXKZYK6R.js");
775
827
  if (!unlockExecutives) {
776
828
  await setOrchestrationPhase("phase_1_coo", "setup-wizard");
777
829
  log("");
@@ -791,7 +843,7 @@ async function runSetupWizard(opts = {}) {
791
843
  const cmoDefault = cmoTemplate?.name ?? "cmo";
792
844
  log(` CMO \u2014 design, brand, content, marketing (default: ${cmoDefault})`);
793
845
  log("");
794
- const ctoNameInput = await ask(rl, `Name your CTO (default: ${ctoDefault}): `);
846
+ const ctoNameInput = await askOrEnv(`Name your CTO (default: ${ctoDefault}): `, "EXE_CTO_NAME", ctoDefault);
795
847
  const ctoName = (ctoNameInput || ctoDefault).toLowerCase();
796
848
  if (!employees.some((e) => e.name === ctoName)) {
797
849
  const ctoEmployee = {
@@ -814,7 +866,7 @@ async function runSetupWizard(opts = {}) {
814
866
  registerBinSymlinks(ctoName);
815
867
  createdEmployees.push({ name: ctoName, role: "CTO" });
816
868
  log(`Created ${ctoName} (CTO)`);
817
- const cmoNameInput = await ask(rl, `Name your CMO (default: ${cmoDefault}): `);
869
+ const cmoNameInput = await askOrEnv(`Name your CMO (default: ${cmoDefault}): `, "EXE_CMO_NAME", cmoDefault);
818
870
  const cmoName = (cmoNameInput || cmoDefault).toLowerCase();
819
871
  if (!employees.some((e) => e.name === cmoName)) {
820
872
  const cmoEmployee = {
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  processCRMEvent
3
- } from "./chunk-WJW564IP.js";
3
+ } from "./chunk-ZBA74MMX.js";
4
4
 
5
5
  // src/gateway/adapters/crm-webhook.ts
6
6
  function parseTwentyWebhook(payload) {
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  PLATFORM_PROCEDURES,
3
3
  PLATFORM_PROCEDURE_TITLES
4
- } from "./chunk-MPXPPKJ4.js";
4
+ } from "./chunk-XWQKCCCO.js";
5
5
  import {
6
6
  getClient
7
- } from "./chunk-NA3MXUU6.js";
7
+ } from "./chunk-TH6HTK2L.js";
8
8
 
9
9
  // src/lib/global-procedures.ts
10
10
  import { randomUUID } from "crypto";
@@ -3,18 +3,16 @@ import {
3
3
  isChunkable,
4
4
  languageForFile,
5
5
  summarizeChunk
6
- } from "./chunk-O7YD7JYE.js";
6
+ } from "./chunk-I7AW4237.js";
7
7
  import {
8
8
  connectEmbedDaemon,
9
9
  embedBatchViaClient
10
- } from "./chunk-S465RWY7.js";
10
+ } from "./chunk-W6SKR3HZ.js";
11
11
  import {
12
- EXE_AI_DIR,
13
- init_config
14
- } from "./chunk-KHV55ME4.js";
12
+ EXE_AI_DIR
13
+ } from "./chunk-TOWAZ5IV.js";
15
14
 
16
15
  // src/lib/code-context-index.ts
17
- init_config();
18
16
  import crypto from "crypto";
19
17
  import path from "path";
20
18
  import { existsSync, mkdirSync, readFileSync, readdirSync, statSync, writeFileSync } from "fs";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  checkLicense,
3
3
  loadLicense
4
- } from "./chunk-I5VJNTDL.js";
4
+ } from "./chunk-NNT2ZNMC.js";
5
5
 
6
6
  // src/lib/license-gate.ts
7
7
  var _cachedLicense = null;
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  sendMessage
3
- } from "./chunk-4F56OUR7.js";
3
+ } from "./chunk-LC53LVOT.js";
4
4
  import {
5
5
  getActiveAgent
6
- } from "./chunk-BXCJOACQ.js";
6
+ } from "./chunk-NFHFNPTN.js";
7
7
 
8
8
  // src/mcp/tools/send-message.ts
9
9
  import { z } from "zod";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  isCrdtSyncEnabled
3
- } from "./chunk-HIQ5RDA7.js";
3
+ } from "./chunk-A3A2E42I.js";
4
4
  import {
5
5
  decryptSyncBlob,
6
6
  encryptSyncBlob,
@@ -12,21 +12,19 @@ import {
12
12
  loadEmployees,
13
13
  registerBinSymlinks,
14
14
  saveEmployees
15
- } from "./chunk-NA3MXUU6.js";
15
+ } from "./chunk-TH6HTK2L.js";
16
16
  import {
17
17
  loadDeviceId
18
- } from "./chunk-I5VJNTDL.js";
18
+ } from "./chunk-NNT2ZNMC.js";
19
19
  import {
20
- EXE_AI_DIR,
21
- init_config
22
- } from "./chunk-KHV55ME4.js";
20
+ EXE_AI_DIR
21
+ } from "./chunk-TOWAZ5IV.js";
23
22
  import {
24
23
  atomicWriteJsonSync,
25
24
  atomicWriteSync,
26
25
  enforcePrivateFileSync,
27
- ensurePrivateDirSync,
28
- init_secure_files
29
- } from "./chunk-GCMT6RWI.js";
26
+ ensurePrivateDirSync
27
+ } from "./chunk-LYH5HE24.js";
30
28
 
31
29
  // src/lib/cloud-sync.ts
32
30
  import { readFileSync, writeFileSync, existsSync, readdirSync, mkdirSync, appendFileSync, unlinkSync, openSync, closeSync, statSync } from "fs";
@@ -50,8 +48,6 @@ function decompress(input) {
50
48
  }
51
49
 
52
50
  // src/lib/cloud-sync.ts
53
- init_config();
54
- init_secure_files();
55
51
  function sqlSafe(v) {
56
52
  return v === void 0 ? null : v;
57
53
  }
@@ -123,7 +119,7 @@ function loadPgClient() {
123
119
  return new Ctor();
124
120
  }
125
121
  const { Pool } = await import("pg");
126
- const { pgSslConfig } = await import("./pg-ssl-4ZNXKUNH.js");
122
+ const { pgSslConfig } = await import("./pg-ssl-7JXQFL4I.js");
127
123
  const pool = new Pool({
128
124
  connectionString: process.env.DATABASE_URL,
129
125
  ...pgSslConfig(),
@@ -246,9 +242,15 @@ async function fetchWithRetry(url, init) {
246
242
  function migrateEndpoint(endpoint) {
247
243
  if (endpoint === "https://askexe.com/cloud" || endpoint === "https://askexe.com/cloud/") {
248
244
  process.stderr.write(
249
- "[cloud-sync] Auto-migrating endpoint from askexe.com/cloud to cloud.askexe.com (bypasses Cloudflare WAF for datacenter IPs)\n"
245
+ "[cloud-sync] Auto-migrating endpoint from askexe.com/cloud to api.askexe.com\n"
250
246
  );
251
- return "https://cloud.askexe.com";
247
+ return "https://api.askexe.com";
248
+ }
249
+ if (endpoint === "https://cloud.askexe.com" || endpoint === "https://cloud.askexe.com/") {
250
+ process.stderr.write(
251
+ "[cloud-sync] Auto-migrating endpoint from cloud.askexe.com to api.askexe.com\n"
252
+ );
253
+ return "https://api.askexe.com";
252
254
  }
253
255
  return endpoint;
254
256
  }
@@ -480,7 +482,7 @@ async function cloudSync(config) {
480
482
  let pulled = 0;
481
483
  if (pullResult.records.length > 0) {
482
484
  if (isCrdtSyncEnabled()) {
483
- const { initCrdtDoc, importExistingMemories, readAllMemories } = await import("./crdt-sync-4TOVD4QN.js");
485
+ const { initCrdtDoc, importExistingMemories, readAllMemories } = await import("./crdt-sync-XMC6LT2Q.js");
484
486
  initCrdtDoc();
485
487
  importExistingMemories(
486
488
  pullResult.records.map((rec) => ({
@@ -864,7 +866,7 @@ async function cloudSync(config) {
864
866
  }
865
867
  const totalMemories = await countRows("SELECT COUNT(*) as cnt FROM memories WHERE status = 'active' OR status IS NULL");
866
868
  try {
867
- const { getLatestBackup } = await import("./db-backup-E34JMBZD.js");
869
+ const { getLatestBackup } = await import("./db-backup-W56YOLMC.js");
868
870
  const latestBackup = getLatestBackup();
869
871
  if (latestBackup) {
870
872
  const backupSize = statSync(latestBackup).size;
@@ -1654,8 +1656,9 @@ async function cloudPullCodeContext(config) {
1654
1656
  atomicWriteSync(localPath, content);
1655
1657
  pulled++;
1656
1658
  } else {
1657
- const localContent = readFileSync(localPath, "utf-8");
1658
- if (localContent !== content) {
1659
+ const remoteHash = crypto.createHash("sha256").update(content).digest("hex");
1660
+ const localHash = crypto.createHash("sha256").update(readFileSync(localPath, "utf-8")).digest("hex");
1661
+ if (localHash !== remoteHash) {
1659
1662
  atomicWriteSync(localPath, content);
1660
1663
  pulled++;
1661
1664
  }
@@ -1,12 +1,12 @@
1
- import {
2
- getProjectName
3
- } from "./chunk-OPU3NYOO.js";
4
1
  import {
5
2
  getActiveAgent
6
- } from "./chunk-BXCJOACQ.js";
3
+ } from "./chunk-NFHFNPTN.js";
7
4
  import {
8
5
  listTasks
9
- } from "./chunk-H4YONWQX.js";
6
+ } from "./chunk-ONMRBKAX.js";
7
+ import {
8
+ getProjectName
9
+ } from "./chunk-OPU3NYOO.js";
10
10
 
11
11
  // src/mcp/tools/list-tasks.ts
12
12
  import { z } from "zod";
@@ -28,13 +28,17 @@ function registerListTasks(server) {
28
28
  try {
29
29
  let resolvedProject;
30
30
  if (project_name === "all") {
31
- resolvedProject = void 0;
31
+ const { agentId, agentRole } = getActiveAgent();
32
+ const { canCoordinate } = await import("./lib/employees.js");
33
+ if (canCoordinate(agentId, agentRole)) {
34
+ resolvedProject = void 0;
35
+ } else {
36
+ resolvedProject = getProjectName() || void 0;
37
+ }
32
38
  } else if (project_name) {
33
39
  resolvedProject = project_name;
34
40
  } else {
35
- const { agentId } = getActiveAgent();
36
- const queryingSelf = !assigned_to || assigned_to === agentId;
37
- resolvedProject = queryingSelf ? void 0 : getProjectName();
41
+ resolvedProject = getProjectName() || void 0;
38
42
  }
39
43
  const tasks = await listTasks({
40
44
  assignedTo: assigned_to,
@@ -4,14 +4,12 @@ import {
4
4
  import {
5
5
  ensureDaemonToken,
6
6
  readDaemonToken
7
- } from "./chunk-5WTYETQO.js";
7
+ } from "./chunk-K4KAPZC7.js";
8
8
  import {
9
- EXE_AI_DIR,
10
- init_config
11
- } from "./chunk-KHV55ME4.js";
9
+ EXE_AI_DIR
10
+ } from "./chunk-TOWAZ5IV.js";
12
11
 
13
12
  // src/lib/exe-daemon-client.ts
14
- init_config();
15
13
  import net from "net";
16
14
  import os from "os";
17
15
  import { spawn, execSync } from "child_process";
@@ -1,10 +1,8 @@
1
1
  import {
2
- init_config,
3
2
  loadConfigSync
4
- } from "./chunk-KHV55ME4.js";
3
+ } from "./chunk-TOWAZ5IV.js";
5
4
 
6
5
  // src/lib/push-notifications.ts
7
- init_config();
8
6
  import { execSync } from "child_process";
9
7
  var TELEGRAM_TIMEOUT_MS = 1e4;
10
8
  var SMTP_TIMEOUT_MS = 15e3;
@@ -32,13 +30,17 @@ function sendDesktopNotification(title, body) {
32
30
  try {
33
31
  const safeTitle = title.replace(/["\\\n]/g, " ").slice(0, 100);
34
32
  const safeBody = body.replace(/["\\\n]/g, " ").slice(0, 200);
35
- if (process.platform === "darwin") {
36
- execSync(
37
- `osascript -e 'display notification "${safeBody}" with title "${safeTitle}" sound name "default"'`,
38
- { timeout: DESKTOP_TIMEOUT_MS, stdio: "ignore" }
39
- );
40
- return true;
41
- } else if (process.platform === "linux") {
33
+ try {
34
+ const osc9 = `\x1B]9;${safeTitle}: ${safeBody}\x07`;
35
+ const sessions = execSync("tmux list-sessions -F '#{session_name}' 2>/dev/null", { encoding: "utf8", timeout: 2e3 }).trim().split("\n");
36
+ const coordinatorSession = sessions.find((s) => /^exe\d*$/.test(s));
37
+ if (coordinatorSession) {
38
+ execSync(`printf '${osc9.replace(/'/g, "'\\''")}' > /dev/tty 2>/dev/null || tmux display-message -p -t ${coordinatorSession} '' 2>/dev/null`, { timeout: 2e3, stdio: "ignore" });
39
+ return true;
40
+ }
41
+ } catch {
42
+ }
43
+ if (process.platform === "linux") {
42
44
  execSync(`notify-send "${safeTitle}" "${safeBody}"`, {
43
45
  timeout: DESKTOP_TIMEOUT_MS,
44
46
  stdio: "ignore"