@askexenow/exe-os 0.9.166 → 0.9.168

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 (244) hide show
  1. package/deploy/compose/backup.sh +45 -7
  2. package/deploy/compose/setup.sh +7 -0
  3. package/deploy/stack-manifests/v0.9.json +40 -1
  4. package/dist/{active-agent-R2KMWMR6.js → active-agent-DGTIJN2U.js} +2 -2
  5. package/dist/{active-agent-CYMM3QQA.js → active-agent-HVMLG6FH.js} +2 -2
  6. package/dist/{agentic-ontology-GKAKYNPE.js → agentic-ontology-S54AFODT.js} +1 -1
  7. package/dist/{backfill-metadata-Z5SYUWAV.js → backfill-metadata-74IWETRF.js} +4 -3
  8. package/dist/{behaviors-QGU6XI5R.js → behaviors-LZVAVHTC.js} +2 -2
  9. package/dist/bin/agentic-ontology-backfill.js +5 -4
  10. package/dist/bin/agentic-reflection-backfill.js +6 -5
  11. package/dist/bin/agentic-semantic-label.js +5 -4
  12. package/dist/bin/backfill-conversations.js +5 -4
  13. package/dist/bin/backfill-responses.js +5 -4
  14. package/dist/bin/backfill-vectors.js +6 -5
  15. package/dist/bin/bulk-sync-postgres.js +6 -5
  16. package/dist/bin/cleanup-stale-review-tasks.js +9 -9
  17. package/dist/bin/cli.js +16 -13
  18. package/dist/bin/daily-summary.js +0 -217
  19. package/dist/bin/deferred-daemon-restart.js +8 -7
  20. package/dist/bin/exe-agent-config.js +1 -1
  21. package/dist/bin/exe-agent.js +10 -10
  22. package/dist/bin/exe-assign.js +7 -6
  23. package/dist/bin/exe-boot.js +20 -19
  24. package/dist/bin/exe-call.js +4 -4
  25. package/dist/bin/exe-cloud.js +3 -3
  26. package/dist/bin/exe-dispatch.js +9 -9
  27. package/dist/bin/exe-doctor.js +1 -1
  28. package/dist/bin/exe-export-behaviors.js +7 -6
  29. package/dist/bin/exe-forget.js +6 -5
  30. package/dist/bin/exe-gateway.js +5 -5
  31. package/dist/bin/exe-heartbeat.js +9 -9
  32. package/dist/bin/exe-kill.js +13 -12
  33. package/dist/bin/exe-launch-agent.js +11 -10
  34. package/dist/bin/exe-new-employee.js +6 -6
  35. package/dist/bin/exe-pending-messages.js +10 -10
  36. package/dist/bin/exe-pending-notifications.js +9 -9
  37. package/dist/bin/exe-pending-reviews.js +9 -9
  38. package/dist/bin/exe-rename.js +4 -4
  39. package/dist/bin/exe-review.js +12 -11
  40. package/dist/bin/exe-search.js +5 -4
  41. package/dist/bin/exe-session-cleanup.js +19 -14
  42. package/dist/bin/exe-settings.js +3 -3
  43. package/dist/bin/exe-start-codex.js +11 -10
  44. package/dist/bin/exe-start-opencode.js +8 -7
  45. package/dist/bin/exe-status.js +10 -10
  46. package/dist/bin/exe-team.js +2 -2
  47. package/dist/bin/git-sweep.js +9 -9
  48. package/dist/bin/graph-backfill.js +4 -3
  49. package/dist/bin/graph-export.js +5 -4
  50. package/dist/bin/import-history.js +171 -0
  51. package/dist/bin/install-launchd.js +41 -0
  52. package/dist/bin/install.js +50 -79
  53. package/dist/bin/intercom-check.js +4 -4
  54. package/dist/bin/postgres-agentic-reflection-backfill.js +2 -2
  55. package/dist/bin/postgres-agentic-semantic-backfill.js +4 -4
  56. package/dist/bin/pre-publish.js +1 -1
  57. package/dist/bin/scan-tasks.js +22 -12
  58. package/dist/bin/setup.js +1 -1
  59. package/dist/bin/shard-migrate.js +4 -3
  60. package/dist/bin/stack-update.js +61 -857
  61. package/dist/bin/vps-backup.js +170 -0
  62. package/dist/bin/vps-health-gate.js +232 -0
  63. package/dist/{capacity-monitor-ZEAE4WP2.js → capacity-monitor-JBZB2S4P.js} +10 -10
  64. package/dist/{catchup-brief-OGWCHENC.js → catchup-brief-HE2EMZS5.js} +12 -11
  65. package/dist/{chunk-DJJNB47C.js → chunk-27DO3EZO.js} +1 -1
  66. package/dist/{chunk-45FYZIHI.js → chunk-32YUET3Y.js} +2 -2
  67. package/dist/{chunk-Y75ECPO5.js → chunk-3FW5LUGI.js} +2 -2
  68. package/dist/{chunk-4OZGQZ4U.js → chunk-3M3O56VT.js} +636 -179
  69. package/dist/{chunk-77WQOD6J.js → chunk-4CXUZ4NI.js} +2 -2
  70. package/dist/{chunk-PBXWPHEK.js → chunk-4VEHJZ6R.js} +1 -1
  71. package/dist/{chunk-TH22QIEC.js → chunk-6A4COFDG.js} +1 -1
  72. package/dist/{chunk-ACBTCC2L.js → chunk-7OJH2A6I.js} +1 -1
  73. package/dist/{chunk-NHCOTCI6.js → chunk-A7SGEBXJ.js} +2 -2
  74. package/dist/{chunk-5MPQSNZF.js → chunk-AUTCT6AY.js} +1 -1
  75. package/dist/{chunk-OEKSTOTE.js → chunk-AZAZ2C75.js} +1 -1
  76. package/dist/chunk-CHCA3ZM2.js +167 -0
  77. package/dist/{chunk-X347L57O.js → chunk-CSTJQDOE.js} +4 -3
  78. package/dist/{chunk-B234R3VW.js → chunk-D7WLV6WD.js} +2 -2
  79. package/dist/{chunk-GMXF3AHJ.js → chunk-DGAONW36.js} +1 -1
  80. package/dist/chunk-EAT5YL3W.js +229 -0
  81. package/dist/{chunk-OD4H5YCJ.js → chunk-EKTQE2R5.js} +8 -8
  82. package/dist/{chunk-Z44PC42G.js → chunk-ELUBA7XL.js} +2 -2
  83. package/dist/{chunk-ZWS6XQER.js → chunk-F5AKOE4P.js} +7 -7
  84. package/dist/{chunk-T5YULDDO.js → chunk-FVI4UBKO.js} +27 -4
  85. package/dist/{chunk-ESRI7MFI.js → chunk-GAN7PW6G.js} +28 -24
  86. package/dist/{chunk-K4OWYJSP.js → chunk-GM2WZTG3.js} +2 -2
  87. package/dist/{chunk-TAB5QGIK.js → chunk-GZYQTPTF.js} +3 -3
  88. package/dist/{chunk-CXDU5DE3.js → chunk-IAUNGATJ.js} +1 -1
  89. package/dist/{chunk-YS63NS6M.js → chunk-IHSM5GR4.js} +1 -1
  90. package/dist/{chunk-23PTS2ZD.js → chunk-IP7KJAUW.js} +117 -15
  91. package/dist/{chunk-D6IMJAV2.js → chunk-J64P2LB2.js} +2 -2
  92. package/dist/{chunk-CXAVSQZM.js → chunk-JXMSCKRM.js} +1 -1
  93. package/dist/{chunk-RQMK3IQH.js → chunk-K4OTJP6N.js} +14 -7
  94. package/dist/{chunk-L7ROZR2H.js → chunk-KXAUMIOX.js} +1 -1
  95. package/dist/{chunk-TPC3LAP7.js → chunk-LGY2BIOT.js} +13 -0
  96. package/dist/{chunk-RPIDSBK7.js → chunk-LLHRJEE4.js} +3 -3
  97. package/dist/{chunk-6WG2VIKC.js → chunk-LM7H6XU4.js} +1 -1
  98. package/dist/{chunk-Y6GMKZZ2.js → chunk-LOFFGJSY.js} +150 -23
  99. package/dist/{chunk-W7SDGBEC.js → chunk-MFI5OXYW.js} +52 -84
  100. package/dist/{chunk-KNPEVPYG.js → chunk-MSSQWF6X.js} +2 -2
  101. package/dist/{chunk-QIQAO3VG.js → chunk-NEFFFKMD.js} +3 -3
  102. package/dist/{chunk-YUC552KZ.js → chunk-NEHONJJC.js} +3 -3
  103. package/dist/{chunk-KZ7SXZ2V.js → chunk-NFMQRLCD.js} +1 -1
  104. package/dist/{chunk-52HCNDPG.js → chunk-O4TATDOV.js} +1 -1
  105. package/dist/{chunk-AR3OYGLB.js → chunk-PEFBRL4S.js} +28 -6
  106. package/dist/{chunk-AEUXUEJG.js → chunk-PEXVU3HU.js} +5 -3
  107. package/dist/chunk-Q2G5C3HV.js +217 -0
  108. package/dist/{chunk-KOO56JVC.js → chunk-Q6N6LDEJ.js} +1 -1
  109. package/dist/{chunk-TXSJ2L5O.js → chunk-QI4IXJN7.js} +1 -1
  110. package/dist/{chunk-HLVQ5Y7B.js → chunk-RE4VLK45.js} +1 -1
  111. package/dist/{chunk-TF6SZGDT.js → chunk-SA2PH6WY.js} +1 -1
  112. package/dist/{chunk-5RSYY7BE.js → chunk-SJYOPYXH.js} +117 -9
  113. package/dist/{chunk-PJGHBANY.js → chunk-TTJE7CCU.js} +1 -1
  114. package/dist/{chunk-A7KEWR6S.js → chunk-TXWQPL2U.js} +1 -1
  115. package/dist/{chunk-XXSJ35J5.js → chunk-U5ZH52FB.js} +2 -2
  116. package/dist/{chunk-G4FDG3LK.js → chunk-UVNDLF74.js} +63 -40
  117. package/dist/{chunk-5OD3AFRW.js → chunk-V6RCZ25F.js} +1 -1
  118. package/dist/{chunk-LHMBIFKD.js → chunk-VYNNN2S3.js} +4 -4
  119. package/dist/chunk-WCYT54XP.js +934 -0
  120. package/dist/{chunk-5AMSQRHT.js → chunk-XGYSTVUH.js} +1 -1
  121. package/dist/{chunk-MKZBHM6A.js → chunk-XLWF3C4R.js} +4 -4
  122. package/dist/{chunk-YL36L2SN.js → chunk-Y7YHLV57.js} +1 -1
  123. package/dist/{chunk-HZC4MR4H.js → chunk-YBKB2PXY.js} +1 -1
  124. package/dist/{chunk-NWM3A4TK.js → chunk-ZDNLKXZA.js} +1 -1
  125. package/dist/{chunk-O7KW6QMH.js → chunk-ZW4TKQUM.js} +15 -5
  126. package/dist/{chunk-6BURHBE6.js → chunk-ZXB44R3E.js} +32 -11
  127. package/dist/co-occurrence-WCED475N.js +73 -0
  128. package/dist/{code-context-index-B6VIWPSF.js → code-context-index-LSZ3DKTJ.js} +2 -2
  129. package/dist/{crdt-sync-XA22KI3S.js → crdt-sync-PBXZTHZC.js} +1 -1
  130. package/dist/{crm-webhook-CIZNOEY4.js → crm-webhook-W7Q25VZU.js} +2 -2
  131. package/dist/{cto-delegation-gate-H5IULFRC.js → cto-delegation-gate-JKULOLMC.js} +8 -8
  132. package/dist/{daemon-orchestration-VO5XQIJL.js → daemon-orchestration-CHV6MB42.js} +13 -11
  133. package/dist/{exe-drift-DMT75WR3.js → exe-drift-PW36OULT.js} +2 -2
  134. package/dist/{exe-export-2RZWOSX6.js → exe-export-XQOD3KE6.js} +6 -5
  135. package/dist/{exe-import-NFNYATHL.js → exe-import-QOFP67LW.js} +6 -5
  136. package/dist/{exe-key-4D7CF3BU.js → exe-key-WQ34UZR6.js} +1 -1
  137. package/dist/{fast-db-init-LAEISZQ2.js → fast-db-init-UKETGWQI.js} +1 -1
  138. package/dist/gateway/index.js +6 -6
  139. package/dist/{git-staleness-M46AYLPP.js → git-staleness-ATV5CGAP.js} +1 -1
  140. package/dist/{git-task-sweep-PXOS56YT.js → git-task-sweep-KXZRIP4T.js} +9 -9
  141. package/dist/{global-procedures-KROQQX54.js → global-procedures-G6IKCYKM.js} +3 -3
  142. package/dist/{graph-auto-extract-QJ2BBJM2.js → graph-auto-extract-ZJXJOLE2.js} +1 -1
  143. package/dist/hooks/bug-report-worker.js +10 -10
  144. package/dist/hooks/codex-stop-task-finalizer.js +10 -10
  145. package/dist/hooks/commit-complete.js +11 -11
  146. package/dist/hooks/error-recall.js +8 -7
  147. package/dist/hooks/exe-heartbeat-hook.js +2 -2
  148. package/dist/hooks/ingest-worker.js +3 -3
  149. package/dist/hooks/ingest.js +9 -9
  150. package/dist/hooks/instructions-loaded.js +3 -3
  151. package/dist/hooks/notification.js +3 -3
  152. package/dist/hooks/post-compact.js +10 -10
  153. package/dist/hooks/post-tool-combined.js +5 -5
  154. package/dist/hooks/pre-compact.js +16 -16
  155. package/dist/hooks/pre-tool-use.js +14 -14
  156. package/dist/hooks/prompt-submit.js +30 -29
  157. package/dist/hooks/session-end.js +46 -25
  158. package/dist/hooks/session-start.js +48 -10
  159. package/dist/hooks/stop.js +17 -17
  160. package/dist/hooks/subagent-stop.js +10 -10
  161. package/dist/hooks/summary-worker.js +17 -16
  162. package/dist/index.js +17 -17
  163. package/dist/{installer-SDBLJBAB.js → installer-DE2LH5EC.js} +4 -4
  164. package/dist/{installer-ZA6QNQ4P.js → installer-M2MDS7HC.js} +4 -4
  165. package/dist/{installer-6KAY6LD6.js → installer-VE23YFXU.js} +4 -4
  166. package/dist/{intercom-queue-K3DVKSPJ.js → intercom-queue-RNM6EPGA.js} +1 -1
  167. package/dist/keyword-extractor-UJHFWVZE.js +11 -0
  168. package/dist/lib/cloud-sync.js +3 -3
  169. package/dist/lib/consolidation.js +5 -4
  170. package/dist/lib/database.js +1 -1
  171. package/dist/lib/db-daemon-client.js +1 -1
  172. package/dist/lib/db.js +1 -1
  173. package/dist/lib/embed-worker.js +98 -0
  174. package/dist/lib/embedder.js +2 -2
  175. package/dist/lib/employee-templates.js +4 -4
  176. package/dist/lib/employees.js +1 -1
  177. package/dist/lib/exe-daemon-client.js +1 -1
  178. package/dist/lib/exe-daemon.js +523 -500
  179. package/dist/lib/hybrid-search.js +5 -6
  180. package/dist/lib/identity.js +1 -1
  181. package/dist/lib/messaging.js +9 -9
  182. package/dist/lib/reminders.js +2 -2
  183. package/dist/lib/schedules.js +5 -4
  184. package/dist/lib/skill-learning.js +3 -3
  185. package/dist/lib/store.js +4 -3
  186. package/dist/lib/task-router.js +2 -2
  187. package/dist/lib/tasks.js +9 -9
  188. package/dist/lib/tmux-routing.js +8 -8
  189. package/dist/lib/tmux-transport.js +1 -1
  190. package/dist/lib/token-spend.js +2 -2
  191. package/dist/lib/transport.js +2 -2
  192. package/dist/lib/ws-client.js +3 -1
  193. package/dist/mcp/register-tools.js +54 -51
  194. package/dist/mcp/server.js +58 -55
  195. package/dist/mcp/tools/complete-reminder.js +3 -3
  196. package/dist/mcp/tools/create-reminder.js +3 -3
  197. package/dist/mcp/tools/create-task.js +11 -11
  198. package/dist/mcp/tools/deactivate-behavior.js +4 -4
  199. package/dist/mcp/tools/list-reminders.js +3 -3
  200. package/dist/mcp/tools/list-tasks.js +11 -11
  201. package/dist/mcp/tools/send-message.js +11 -11
  202. package/dist/mcp/tools/update-task.js +10 -10
  203. package/dist/{mcp-http-config-LK2EDOEJ.js → mcp-http-config-Z2E4VUOF.js} +2 -2
  204. package/dist/{memory-cards-V3DKSRWL.js → memory-cards-SFDKDIAW.js} +1 -1
  205. package/dist/memory-graph-extractor-YD4GNH7T.js +16 -0
  206. package/dist/{memory-poisoning-defense-3B75HS74.js → memory-poisoning-defense-VEGNFELN.js} +1 -1
  207. package/dist/{memory-queue-client-LFPZPPQA.js → memory-queue-client-5HB2XUH7.js} +2 -2
  208. package/dist/{memory-reflection-HTDAUUE5.js → memory-reflection-MTPRQNI6.js} +2 -2
  209. package/dist/{notifications-76VCYXWW.js → notifications-6TCE6OBG.js} +8 -8
  210. package/dist/{orchestrator-CBNSBI5P.js → orchestrator-W2GYJR23.js} +10 -10
  211. package/dist/{plan-limits-SOR3QXKV.js → plan-limits-4EP46323.js} +2 -2
  212. package/dist/{projection-worker-FK5YOEIL.js → projection-worker-EBUYNMU2.js} +1 -1
  213. package/dist/{review-polling-ZLNDUKL4.js → review-polling-2N7KQFZZ.js} +9 -9
  214. package/dist/runtime/index.js +15 -15
  215. package/dist/{session-events-CUSPL25D.js → session-events-K47FHAXJ.js} +9 -9
  216. package/dist/{session-kill-telemetry-FLBRHBDP.js → session-kill-telemetry-275YUXM5.js} +2 -2
  217. package/dist/{session-scope-PX2ABSJO.js → session-scope-XSFJZEER.js} +8 -8
  218. package/dist/{setup-wizard-Y6PBZGFX.js → setup-wizard-UEO7HYLQ.js} +1 -1
  219. package/dist/{skill-refinement-L7PGKCYO.js → skill-refinement-WXBTANDQ.js} +1 -1
  220. package/dist/stack-update-2B2UXREV.js +50 -0
  221. package/dist/{task-enforcement-7FUILB63.js → task-enforcement-2JIJSXPU.js} +14 -16
  222. package/dist/{task-scope-2N45TE32.js → task-scope-W73Z3XWE.js} +8 -8
  223. package/dist/{tasks-crud-ADLCGHGH.js → tasks-crud-HPJKI3QQ.js} +8 -8
  224. package/dist/{tasks-review-PJ2DUI6N.js → tasks-review-MXLMPGNZ.js} +8 -8
  225. package/dist/{token-budget-T5DFXVTM.js → token-budget-BA46CVHX.js} +1 -1
  226. package/dist/{tool-capability-index-6JJN6ZRC.js → tool-capability-index-42VVN5BS.js} +1 -1
  227. package/dist/{tool-telemetry-72PVO5HV.js → tool-telemetry-GZ5E2AUL.js} +1 -1
  228. package/dist/tui/App.js +22 -18
  229. package/dist/{tui-data-63JHE6EZ.js → tui-data-PVXWQCJX.js} +8 -8
  230. package/dist/{worker-gate-REVBJUZ6.js → worker-gate-WTTK64TK.js} +1 -1
  231. package/dist/{workflow-engine-W2WNHJG5.js → workflow-engine-LT3WTT7V.js} +2 -2
  232. package/package.json +1 -1
  233. package/release-notes.json +209 -209
  234. /package/dist/{chunk-BNOZUS6J.js → chunk-6VVCAVRT.js} +0 -0
  235. /package/dist/{chunk-IC7GKK6I.js → chunk-CWQZZ7X3.js} +0 -0
  236. /package/dist/{chunk-ZI2ZVERO.js → chunk-EIW5GOBW.js} +0 -0
  237. /package/dist/{chunk-2BGGDNRD.js → chunk-IPPJEM26.js} +0 -0
  238. /package/dist/{chunk-4ISDU5KR.js → chunk-K5UR73PM.js} +0 -0
  239. /package/dist/{chunk-ZWRTVUQ6.js → chunk-KIMO5S45.js} +0 -0
  240. /package/dist/{chunk-S2FX5KJ4.js → chunk-WBLILGAP.js} +0 -0
  241. /package/dist/{core-memory-PCJ3L46L.js → core-memory-RAC6M67J.js} +0 -0
  242. /package/dist/{entity-boost-GHFPE6A2.js → entity-boost-5FIRFRDC.js} +0 -0
  243. /package/dist/{message-queue-client-CHRQYBH5.js → message-queue-client-PTQ2S7D7.js} +0 -0
  244. /package/dist/{wiki-acl-QYRAYYVQ.js → wiki-acl-MSDRCIAI.js} +0 -0
@@ -58,13 +58,37 @@ docker cp exe-wiki:/app/server/storage/. "$ARCHIVE/wiki-storage/" 2>/dev/null ||
58
58
  echo "[backup] Backing up exe-os state..."
59
59
  docker cp exe-os:/home/exed/.exe-os/. "$ARCHIVE/exe-os-data/" 2>/dev/null || echo "[backup] exe-os data skipped"
60
60
 
61
- # 6. Create single archive
61
+ # 6. Create single archive (compressed)
62
62
  echo "[backup] Creating archive..."
63
63
  TARFILE="$BACKUP_DIR/exe-backup-$DATE.tar.gz"
64
64
  tar -czf "$TARFILE" -C "$BACKUP_DIR" "exe-backup-$DATE" 2>/dev/null
65
65
  rm -rf "$ARCHIVE"
66
66
  echo "[backup] Archive: $TARFILE ($(du -h "$TARFILE" | cut -f1))"
67
67
 
68
+ # 6b. Encrypt before upload — customer data never leaves the VPS unencrypted.
69
+ # Uses EXE_BACKUP_KEY from .env (256-bit, generated at setup).
70
+ # Without this key, R2 backups are unreadable — even AskExe cannot access them.
71
+ BACKUP_KEY="${EXE_BACKUP_KEY:-}"
72
+ if [[ -z "$BACKUP_KEY" && -f "$SCRIPT_DIR/.env" ]]; then
73
+ BACKUP_KEY=$(grep -E '^EXE_BACKUP_KEY=' "$SCRIPT_DIR/.env" 2>/dev/null | cut -d= -f2)
74
+ fi
75
+ if [[ -n "$BACKUP_KEY" ]]; then
76
+ ENCRYPTED_FILE="${TARFILE}.enc"
77
+ echo "[backup] Encrypting with AES-256-CBC (customer-owned key)..."
78
+ openssl enc -aes-256-cbc -pbkdf2 -iter 100000 \
79
+ -in "$TARFILE" -out "$ENCRYPTED_FILE" \
80
+ -pass "pass:${BACKUP_KEY}" 2>/dev/null
81
+ if [[ -f "$ENCRYPTED_FILE" ]]; then
82
+ rm -f "$TARFILE"
83
+ TARFILE="$ENCRYPTED_FILE"
84
+ echo "[backup] Encrypted: $TARFILE ($(du -h "$TARFILE" | cut -f1))"
85
+ else
86
+ echo "[backup] Encryption failed — uploading compressed (unencrypted)"
87
+ fi
88
+ else
89
+ echo "[backup] WARNING: EXE_BACKUP_KEY not set — backup NOT encrypted. Set it in .env for E2E encryption."
90
+ fi
91
+
68
92
  # 7. Retention — delete old backups
69
93
  echo "[backup] Cleaning backups older than $RETENTION_DAYS days..."
70
94
  find "$BACKUP_DIR" -name "exe-backup-*.tar.gz" -mtime "+$RETENTION_DAYS" -delete 2>/dev/null
@@ -93,15 +117,29 @@ if $DOWNLOAD_MODE; then
93
117
  echo " docker compose up -d"
94
118
  fi
95
119
 
96
- # 9. Upload to R2 (Cloudflare)
120
+ # 9. Upload to R2 (Cloudflare) — uses same R2 credentials as media/cloud sync
97
121
  if $UPLOAD_R2; then
98
- echo "[backup] Uploading to Cloudflare R2..."
99
- if command -v rclone >/dev/null 2>&1; then
100
- rclone copy "$TARFILE" r2:exe-backups/ 2>&1 && echo "[backup] R2 upload complete" || echo "[backup] R2 upload failed"
122
+ # Source .env for R2 credentials if not already in environment
123
+ if [[ -z "${R2_ENDPOINT:-}" && -f "$SCRIPT_DIR/.env" ]]; then
124
+ # Map R2_MEDIA_* vars to the aws-cli vars backup needs
125
+ eval "$(grep -E '^R2_MEDIA_' "$SCRIPT_DIR/.env" 2>/dev/null)"
126
+ export R2_ENDPOINT="${R2_ENDPOINT:-${R2_MEDIA_ENDPOINT:-}}"
127
+ export AWS_ACCESS_KEY_ID="${AWS_ACCESS_KEY_ID:-${R2_MEDIA_ACCESS_KEY:-}}"
128
+ export AWS_SECRET_ACCESS_KEY="${AWS_SECRET_ACCESS_KEY:-${R2_MEDIA_SECRET_KEY:-}}"
129
+ fi
130
+
131
+ R2_BACKUP_BUCKET="${R2_BACKUP_BUCKET:-${R2_MEDIA_BUCKET:-exe-backups}}"
132
+ R2_BACKUP_PREFIX="${R2_BACKUP_PREFIX:-backups/$(hostname)}"
133
+
134
+ if [[ -z "${R2_ENDPOINT:-}" ]]; then
135
+ echo "[backup] R2 upload skipped — R2_MEDIA_ENDPOINT not set in .env"
136
+ elif command -v rclone >/dev/null 2>&1; then
137
+ rclone copy "$TARFILE" "r2:${R2_BACKUP_BUCKET}/${R2_BACKUP_PREFIX}/" 2>&1 && echo "[backup] R2 upload complete → ${R2_BACKUP_BUCKET}/${R2_BACKUP_PREFIX}/" || echo "[backup] R2 upload failed"
101
138
  elif command -v aws >/dev/null 2>&1; then
102
- aws s3 cp "$TARFILE" "s3://exe-backups/$(basename "$TARFILE")" --endpoint-url "${R2_ENDPOINT:-}" 2>&1 || echo "[backup] R2 upload failed — configure R2_ENDPOINT"
139
+ aws s3 cp "$TARFILE" "s3://${R2_BACKUP_BUCKET}/${R2_BACKUP_PREFIX}/$(basename "$TARFILE")" \
140
+ --endpoint-url "${R2_ENDPOINT}" 2>&1 && echo "[backup] R2 upload complete" || echo "[backup] R2 upload failed"
103
141
  else
104
- echo "[backup] Install rclone or aws-cli for R2 upload"
142
+ echo "[backup] Install rclone or aws-cli for R2 upload. apt install awscli"
105
143
  fi
106
144
  fi
107
145
 
@@ -101,6 +101,13 @@ MONITOR_AGENT_TOKEN=CHANGEME_MONITOR_AGENT_TOKEN
101
101
  MONITOR_AGENT_KEY=CHANGEME_MONITOR_AGENT_KEY
102
102
  MONITOR_AGENT_LISTEN=:45876
103
103
  MONITOR_HUB_PORT=8090
104
+ # --- R2 (Cloudflare) — shared by media uploads + VPS backups ---
105
+ R2_MEDIA_BUCKET=CHANGEME_R2_BUCKET
106
+ R2_MEDIA_ENDPOINT=CHANGEME_https://ACCOUNT_ID.r2.cloudflarestorage.com
107
+ R2_MEDIA_ACCESS_KEY=CHANGEME_R2_ACCESS_KEY
108
+ R2_MEDIA_SECRET_KEY=CHANGEME_R2_SECRET_KEY
109
+ # --- Backup encryption (customer-owned, AskExe cannot decrypt) ---
110
+ EXE_BACKUP_KEY=$(gen 32)
104
111
  ENVEOF
105
112
  }
106
113
  fi
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "latest": "0.9.10",
3
+ "latest": "0.9.11",
4
4
  "stacks": {
5
5
  "0.9.0": {
6
6
  "version": "0.9.0",
@@ -614,6 +614,45 @@
614
614
  "composeService": "exe-monitor-hub"
615
615
  }
616
616
  }
617
+ },
618
+ "0.9.11": {
619
+ "version": "0.9.11",
620
+ "releasedAt": "2026-06-02T00:00:00Z",
621
+ "notes": "HYGO deployment: encrypted R2 backups (daily + pre-update), ambassador pipeline, asana webhook, VPS guardrails (WA guard, disk monitor, env versioning, health gate), daemon perf (async pane capture, reconnect jitter), graceful idle shutdown, retrieval architecture procedure, conversation import tool.",
622
+ "npmVersion": "0.9.158",
623
+ "breakingChanges": [],
624
+ "services": {
625
+ "crm": {
626
+ "image": "ghcr.io/askexe/exe-crm:v0.9.4",
627
+ "env": "CRM_IMAGE_TAG",
628
+ "composeService": "exe-crm"
629
+ },
630
+ "wiki": {
631
+ "image": "ghcr.io/askexe/exe-wiki:v0.9.5",
632
+ "env": "WIKI_IMAGE_TAG",
633
+ "composeService": "exe-wiki"
634
+ },
635
+ "exe-os": {
636
+ "image": "ghcr.io/askexe/exe-os:v0.9.158",
637
+ "env": "EXE_OS_IMAGE_TAG",
638
+ "composeService": "exe-os"
639
+ },
640
+ "gateway": {
641
+ "image": "ghcr.io/askexe/exe-gateway:v0.9.7",
642
+ "env": "GATEWAY_IMAGE_TAG",
643
+ "composeService": "exe-gateway"
644
+ },
645
+ "monitorAgent": {
646
+ "image": "ghcr.io/askexe/exe-monitor-agent:v0.9.4",
647
+ "env": "MONITOR_AGENT_IMAGE_TAG",
648
+ "composeService": "exe-monitor-agent"
649
+ },
650
+ "monitorHub": {
651
+ "image": "ghcr.io/askexe/exe-monitor-hub:v0.9.5",
652
+ "env": "MONITOR_HUB_IMAGE_TAG",
653
+ "composeService": "exe-monitor-hub"
654
+ }
655
+ }
617
656
  }
618
657
  }
619
658
  }
@@ -6,10 +6,10 @@ import {
6
6
  getAllActiveAgents,
7
7
  resolveActiveAgentFromTmuxSession,
8
8
  writeActiveAgent
9
- } from "./chunk-6WG2VIKC.js";
9
+ } from "./chunk-LM7H6XU4.js";
10
10
  import "./chunk-CVYC6DUW.js";
11
11
  import "./chunk-GJV3WDWM.js";
12
- import "./chunk-5RSYY7BE.js";
12
+ import "./chunk-SJYOPYXH.js";
13
13
  import "./chunk-RVSGXGWG.js";
14
14
  import "./chunk-FXU7JOXK.js";
15
15
  import "./chunk-4GXRETYL.js";
@@ -5,10 +5,10 @@ import {
5
5
  getAllActiveAgents,
6
6
  resolveActiveAgentFromTmuxSession,
7
7
  writeActiveAgent
8
- } from "./chunk-6WG2VIKC.js";
8
+ } from "./chunk-LM7H6XU4.js";
9
9
  import "./chunk-CVYC6DUW.js";
10
10
  import "./chunk-GJV3WDWM.js";
11
- import "./chunk-5RSYY7BE.js";
11
+ import "./chunk-SJYOPYXH.js";
12
12
  import "./chunk-RVSGXGWG.js";
13
13
  import "./chunk-FXU7JOXK.js";
14
14
  import "./chunk-4GXRETYL.js";
@@ -9,7 +9,7 @@ import {
9
9
  insertOntologyForMemory,
10
10
  ontologyPayload,
11
11
  stableId
12
- } from "./chunk-2BGGDNRD.js";
12
+ } from "./chunk-IPPJEM26.js";
13
13
  import "./chunk-MLKGABMK.js";
14
14
  export {
15
15
  clean,
@@ -2,14 +2,15 @@
2
2
  import {
3
3
  disposeStore,
4
4
  initStore
5
- } from "./chunk-6BURHBE6.js";
6
- import "./chunk-S2FX5KJ4.js";
5
+ } from "./chunk-ZXB44R3E.js";
6
+ import "./chunk-CHCA3ZM2.js";
7
+ import "./chunk-WBLILGAP.js";
7
8
  import "./chunk-MP2AFCGL.js";
8
9
  import {
9
10
  getClient,
10
11
  getEmployeeNamesByRole,
11
12
  loadEmployeesSync
12
- } from "./chunk-5RSYY7BE.js";
13
+ } from "./chunk-SJYOPYXH.js";
13
14
  import "./chunk-RVSGXGWG.js";
14
15
  import "./chunk-FXU7JOXK.js";
15
16
  import "./chunk-6D23UNXU.js";
@@ -5,8 +5,8 @@ import {
5
5
  listBehaviorsSince,
6
6
  listSharedSkills,
7
7
  storeBehavior
8
- } from "./chunk-PJGHBANY.js";
9
- import "./chunk-5RSYY7BE.js";
8
+ } from "./chunk-TTJE7CCU.js";
9
+ import "./chunk-SJYOPYXH.js";
10
10
  import "./chunk-RVSGXGWG.js";
11
11
  import "./chunk-FXU7JOXK.js";
12
12
  import "./chunk-4GXRETYL.js";
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  insertOntologyForBatch
4
- } from "../chunk-2BGGDNRD.js";
4
+ } from "../chunk-IPPJEM26.js";
5
5
  import {
6
6
  politeBatchPause,
7
7
  startManagedJob
@@ -9,12 +9,13 @@ import {
9
9
  import {
10
10
  disposeStore,
11
11
  initStore
12
- } from "../chunk-6BURHBE6.js";
13
- import "../chunk-S2FX5KJ4.js";
12
+ } from "../chunk-ZXB44R3E.js";
13
+ import "../chunk-CHCA3ZM2.js";
14
+ import "../chunk-WBLILGAP.js";
14
15
  import "../chunk-MP2AFCGL.js";
15
16
  import {
16
17
  getClient
17
- } from "../chunk-5RSYY7BE.js";
18
+ } from "../chunk-SJYOPYXH.js";
18
19
  import "../chunk-RVSGXGWG.js";
19
20
  import "../chunk-FXU7JOXK.js";
20
21
  import "../chunk-6D23UNXU.js";
@@ -1,17 +1,18 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  generateReflectionCheckpoints
4
- } from "../chunk-DJJNB47C.js";
5
- import "../chunk-2BGGDNRD.js";
4
+ } from "../chunk-27DO3EZO.js";
5
+ import "../chunk-IPPJEM26.js";
6
6
  import {
7
7
  startManagedJob
8
8
  } from "../chunk-CTOQYEKJ.js";
9
9
  import {
10
10
  initStore
11
- } from "../chunk-6BURHBE6.js";
12
- import "../chunk-S2FX5KJ4.js";
11
+ } from "../chunk-ZXB44R3E.js";
12
+ import "../chunk-CHCA3ZM2.js";
13
+ import "../chunk-WBLILGAP.js";
13
14
  import "../chunk-MP2AFCGL.js";
14
- import "../chunk-5RSYY7BE.js";
15
+ import "../chunk-SJYOPYXH.js";
15
16
  import "../chunk-RVSGXGWG.js";
16
17
  import "../chunk-FXU7JOXK.js";
17
18
  import "../chunk-6D23UNXU.js";
@@ -3,19 +3,20 @@ import {
3
3
  clean,
4
4
  inferSemanticLabel,
5
5
  stableId
6
- } from "../chunk-2BGGDNRD.js";
6
+ } from "../chunk-IPPJEM26.js";
7
7
  import {
8
8
  politeBatchPause,
9
9
  startManagedJob
10
10
  } from "../chunk-CTOQYEKJ.js";
11
11
  import {
12
12
  initStore
13
- } from "../chunk-6BURHBE6.js";
14
- import "../chunk-S2FX5KJ4.js";
13
+ } from "../chunk-ZXB44R3E.js";
14
+ import "../chunk-CHCA3ZM2.js";
15
+ import "../chunk-WBLILGAP.js";
15
16
  import "../chunk-MP2AFCGL.js";
16
17
  import {
17
18
  getClient
18
- } from "../chunk-5RSYY7BE.js";
19
+ } from "../chunk-SJYOPYXH.js";
19
20
  import "../chunk-RVSGXGWG.js";
20
21
  import "../chunk-FXU7JOXK.js";
21
22
  import "../chunk-6D23UNXU.js";
@@ -2,20 +2,21 @@
2
2
  import {
3
3
  connectEmbedDaemon,
4
4
  embedViaClient
5
- } from "../chunk-G4FDG3LK.js";
5
+ } from "../chunk-UVNDLF74.js";
6
6
  import "../chunk-CMFLJNP6.js";
7
7
  import {
8
8
  flushBatch,
9
9
  initStore,
10
10
  writeMemory
11
- } from "../chunk-6BURHBE6.js";
12
- import "../chunk-S2FX5KJ4.js";
11
+ } from "../chunk-ZXB44R3E.js";
12
+ import "../chunk-CHCA3ZM2.js";
13
+ import "../chunk-WBLILGAP.js";
13
14
  import "../chunk-MP2AFCGL.js";
14
15
  import "../chunk-PWMMIGVQ.js";
15
16
  import {
16
17
  getClient,
17
18
  isCoordinatorName
18
- } from "../chunk-5RSYY7BE.js";
19
+ } from "../chunk-SJYOPYXH.js";
19
20
  import "../chunk-RVSGXGWG.js";
20
21
  import "../chunk-FXU7JOXK.js";
21
22
  import "../chunk-6D23UNXU.js";
@@ -2,20 +2,21 @@
2
2
  import {
3
3
  connectEmbedDaemon,
4
4
  embedViaClient
5
- } from "../chunk-G4FDG3LK.js";
5
+ } from "../chunk-UVNDLF74.js";
6
6
  import "../chunk-CMFLJNP6.js";
7
7
  import {
8
8
  flushBatch,
9
9
  initStore,
10
10
  writeMemory
11
- } from "../chunk-6BURHBE6.js";
12
- import "../chunk-S2FX5KJ4.js";
11
+ } from "../chunk-ZXB44R3E.js";
12
+ import "../chunk-CHCA3ZM2.js";
13
+ import "../chunk-WBLILGAP.js";
13
14
  import "../chunk-MP2AFCGL.js";
14
15
  import "../chunk-PWMMIGVQ.js";
15
16
  import {
16
17
  getClient,
17
18
  isCoordinatorName
18
- } from "../chunk-5RSYY7BE.js";
19
+ } from "../chunk-SJYOPYXH.js";
19
20
  import "../chunk-RVSGXGWG.js";
20
21
  import "../chunk-FXU7JOXK.js";
21
22
  import "../chunk-6D23UNXU.js";
@@ -8,22 +8,23 @@ import {
8
8
  registerWorkerPid,
9
9
  releaseBackfillLock,
10
10
  tryAcquireBackfillLock
11
- } from "../chunk-5AMSQRHT.js";
11
+ } from "../chunk-XGYSTVUH.js";
12
12
  import {
13
13
  connectEmbedDaemon,
14
14
  embedViaClient
15
- } from "../chunk-G4FDG3LK.js";
15
+ } from "../chunk-UVNDLF74.js";
16
16
  import "../chunk-CMFLJNP6.js";
17
17
  import {
18
18
  initStore,
19
19
  vectorToBlob
20
- } from "../chunk-6BURHBE6.js";
21
- import "../chunk-S2FX5KJ4.js";
20
+ } from "../chunk-ZXB44R3E.js";
21
+ import "../chunk-CHCA3ZM2.js";
22
+ import "../chunk-WBLILGAP.js";
22
23
  import "../chunk-MP2AFCGL.js";
23
24
  import "../chunk-PWMMIGVQ.js";
24
25
  import {
25
26
  getClient
26
- } from "../chunk-5RSYY7BE.js";
27
+ } from "../chunk-SJYOPYXH.js";
27
28
  import "../chunk-RVSGXGWG.js";
28
29
  import "../chunk-FXU7JOXK.js";
29
30
  import "../chunk-6D23UNXU.js";
@@ -1,18 +1,19 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  pushToPostgres
4
- } from "../chunk-QIQAO3VG.js";
5
- import "../chunk-BNOZUS6J.js";
4
+ } from "../chunk-NEFFFKMD.js";
5
+ import "../chunk-6VVCAVRT.js";
6
6
  import "../chunk-HOKOOBDL.js";
7
7
  import {
8
8
  disposeStore,
9
9
  initStore
10
- } from "../chunk-6BURHBE6.js";
11
- import "../chunk-S2FX5KJ4.js";
10
+ } from "../chunk-ZXB44R3E.js";
11
+ import "../chunk-CHCA3ZM2.js";
12
+ import "../chunk-WBLILGAP.js";
12
13
  import "../chunk-MP2AFCGL.js";
13
14
  import {
14
15
  getClient
15
- } from "../chunk-5RSYY7BE.js";
16
+ } from "../chunk-SJYOPYXH.js";
16
17
  import "../chunk-RVSGXGWG.js";
17
18
  import "../chunk-FXU7JOXK.js";
18
19
  import "../chunk-6D23UNXU.js";
@@ -1,29 +1,29 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  fastDbInit
4
- } from "../chunk-4ISDU5KR.js";
4
+ } from "../chunk-K5UR73PM.js";
5
5
  import {
6
6
  sessionScopeFilter
7
- } from "../chunk-W7SDGBEC.js";
7
+ } from "../chunk-MFI5OXYW.js";
8
8
  import "../chunk-LOQCOHEW.js";
9
- import "../chunk-TXSJ2L5O.js";
9
+ import "../chunk-QI4IXJN7.js";
10
10
  import "../chunk-64WZEXXA.js";
11
- import "../chunk-A7KEWR6S.js";
12
- import "../chunk-X347L57O.js";
13
11
  import "../chunk-GZIAQYGI.js";
12
+ import "../chunk-TXWQPL2U.js";
13
+ import "../chunk-CSTJQDOE.js";
14
14
  import "../chunk-ZQX6UOP6.js";
15
15
  import "../chunk-H2CFBUGF.js";
16
16
  import "../chunk-NGP6LSV2.js";
17
- import "../chunk-HLVQ5Y7B.js";
18
- import "../chunk-OPU3NYOO.js";
17
+ import "../chunk-RE4VLK45.js";
19
18
  import "../chunk-CVYC6DUW.js";
19
+ import "../chunk-OPU3NYOO.js";
20
20
  import "../chunk-GJV3WDWM.js";
21
21
  import "../chunk-MP2AFCGL.js";
22
- import "../chunk-YS63NS6M.js";
22
+ import "../chunk-IHSM5GR4.js";
23
23
  import "../chunk-HYZV25LY.js";
24
24
  import {
25
25
  getClient
26
- } from "../chunk-5RSYY7BE.js";
26
+ } from "../chunk-SJYOPYXH.js";
27
27
  import "../chunk-RVSGXGWG.js";
28
28
  import "../chunk-FXU7JOXK.js";
29
29
  import "../chunk-MVMMULOJ.js";
package/dist/bin/cli.js CHANGED
@@ -21,7 +21,7 @@ if (args.includes("--global")) {
21
21
  );
22
22
  await runClaudeInstall();
23
23
  } else if (args.includes("--commands-only")) {
24
- const { copySlashCommands, resolvePackageRoot } = await import("../installer-SDBLJBAB.js");
24
+ const { copySlashCommands, resolvePackageRoot } = await import("../installer-DE2LH5EC.js");
25
25
  try {
26
26
  const packageRoot = resolvePackageRoot();
27
27
  const result = await copySlashCommands(packageRoot);
@@ -107,7 +107,7 @@ if (args.includes("--global")) {
107
107
  process.exit(1);
108
108
  }
109
109
  } else if (args[0] === "key") {
110
- const { main: runKey } = await import("../exe-key-4D7CF3BU.js");
110
+ const { main: runKey } = await import("../exe-key-WQ34UZR6.js");
111
111
  await runKey(args.slice(1));
112
112
  } else if (args[0] === "link") {
113
113
  console.error("`exe-os link` has been removed from the customer command surface.");
@@ -147,7 +147,7 @@ if (args.includes("--global")) {
147
147
  process.exit(1);
148
148
  }
149
149
  } else if (args[0] === "backfill-metadata") {
150
- const { backfillMetadata } = await import("../backfill-metadata-Z5SYUWAV.js");
150
+ const { backfillMetadata } = await import("../backfill-metadata-74IWETRF.js");
151
151
  let batchSize = 50;
152
152
  let limit = 0;
153
153
  let dryRun = false;
@@ -178,10 +178,10 @@ if (args.includes("--global")) {
178
178
  process.exit(1);
179
179
  }
180
180
  } else if (args[0] === "export") {
181
- const { runExeExport } = await import("../exe-export-2RZWOSX6.js");
181
+ const { runExeExport } = await import("../exe-export-XQOD3KE6.js");
182
182
  await runExeExport(args.slice(1));
183
183
  } else if (args[0] === "import") {
184
- const { runExeImport } = await import("../exe-import-NFNYATHL.js");
184
+ const { runExeImport } = await import("../exe-import-QOFP67LW.js");
185
185
  await runExeImport(args.slice(1));
186
186
  } else if (args[0] === "send-message" || args[0] === "send_message") {
187
187
  const target = args[1];
@@ -203,7 +203,7 @@ if (args.includes("--global")) {
203
203
  const { initStore } = await import("../lib/store.js");
204
204
  await initStore();
205
205
  const { sendMessage } = await import("../lib/messaging.js");
206
- const { getActiveAgent } = await import("../active-agent-CYMM3QQA.js");
206
+ const { getActiveAgent } = await import("../active-agent-HVMLG6FH.js");
207
207
  const { agentId } = getActiveAgent();
208
208
  const result = await sendMessage({
209
209
  fromAgent: agentId,
@@ -221,7 +221,7 @@ ID: ${result.id}`);
221
221
  await runActivate(args[1]);
222
222
  } else if (args[0] === "doctor") {
223
223
  if (args.includes("--drift")) {
224
- const { runDrift } = await import("../exe-drift-DMT75WR3.js");
224
+ const { runDrift } = await import("../exe-drift-PW36OULT.js");
225
225
  await runDrift(args.slice(1));
226
226
  } else {
227
227
  const { runCcDoctor } = await import("./cc-doctor.js");
@@ -293,11 +293,14 @@ ID: ${result.id}`);
293
293
  process.exit(1);
294
294
  }
295
295
  } else if (args[0] === "setup" || args[0] === "-setup" || args[0] === "--setup") {
296
- const { runSetupWizard } = await import("../setup-wizard-Y6PBZGFX.js");
296
+ const { runSetupWizard } = await import("../setup-wizard-UEO7HYLQ.js");
297
297
  await runSetupWizard({ skipModel: args.includes("--skip-model") });
298
298
  } else if (args[0] === "update") {
299
299
  const { runUpdate } = await import("./update.js");
300
300
  await runUpdate(args.slice(1));
301
+ } else if (args[0] === "import-history") {
302
+ const { runImportHistoryCli } = await import("./import-history.js");
303
+ await runImportHistoryCli(args.slice(1));
301
304
  } else if (args[0] === "stack-update") {
302
305
  const { runStackUpdateCli } = await import("./stack-update.js");
303
306
  await runStackUpdateCli(args.slice(1));
@@ -434,7 +437,7 @@ cd into a project folder and run \x1B[1m${cooName}1\x1B[0m to boot your COO.
434
437
  }
435
438
  }
436
439
  async function runCodeContext(ccArgs) {
437
- const { buildCodeContextIndex, getCodeContextStats, searchCodeContext } = await import("../code-context-index-B6VIWPSF.js");
440
+ const { buildCodeContextIndex, getCodeContextStats, searchCodeContext } = await import("../code-context-index-LSZ3DKTJ.js");
438
441
  const sub = ccArgs[0] ?? "status";
439
442
  const projectRoot = valueAfter(ccArgs, "--project-root") ?? process.cwd();
440
443
  if (sub === "init" || sub === "index") {
@@ -510,7 +513,7 @@ function numberAfter(args2, flag) {
510
513
  return Number.isFinite(parsed) ? parsed : void 0;
511
514
  }
512
515
  async function runClaudeInstall() {
513
- const { runInstaller } = await import("../installer-SDBLJBAB.js");
516
+ const { runInstaller } = await import("../installer-DE2LH5EC.js");
514
517
  try {
515
518
  await runInstaller();
516
519
  } catch (err) {
@@ -522,7 +525,7 @@ async function runClaudeInstall() {
522
525
  }
523
526
  }
524
527
  async function runOpenCodeInstall() {
525
- const { runOpenCodeInstaller } = await import("../installer-ZA6QNQ4P.js");
528
+ const { runOpenCodeInstaller } = await import("../installer-M2MDS7HC.js");
526
529
  try {
527
530
  await runOpenCodeInstaller();
528
531
  } catch (err) {
@@ -534,7 +537,7 @@ async function runOpenCodeInstall() {
534
537
  }
535
538
  }
536
539
  async function runCodexInstall() {
537
- const { runCodexInstaller } = await import("../installer-6KAY6LD6.js");
540
+ const { runCodexInstaller } = await import("../installer-VE23YFXU.js");
538
541
  try {
539
542
  await runCodexInstaller();
540
543
  } catch (err) {
@@ -546,7 +549,7 @@ async function runCodexInstall() {
546
549
  }
547
550
  }
548
551
  async function runClaudeCheck() {
549
- const { detectMcpNameCollisions } = await import("../installer-SDBLJBAB.js");
552
+ const { detectMcpNameCollisions } = await import("../installer-DE2LH5EC.js");
550
553
  const claudeDir = path.join(os.homedir(), ".claude");
551
554
  const settingsPath = path.join(claudeDir, "settings.json");
552
555
  const claudeJsonPath = path.join(os.homedir(), ".claude.json");