@askexenow/exe-os 0.9.290 → 0.9.292

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 (461) hide show
  1. package/deploy/compose/.env.customer.example +14 -1
  2. package/deploy/compose/.env.example +40 -1
  3. package/deploy/compose/backup.sh +147 -42
  4. package/deploy/compose/docker-compose.yml +128 -51
  5. package/deploy/compose/generate-env.ts +31 -0
  6. package/deploy/compose/setup.sh +11 -2
  7. package/dist/active-agent-5DCUU6QR.js +28 -0
  8. package/dist/active-agent-JTTDI66I.js +27 -0
  9. package/dist/active-agent-NQAHMQSR.js +27 -0
  10. package/dist/active-agent-QHGHLMYS.js +28 -0
  11. package/dist/agentic-ontology-7RXZLSZY.js +25 -0
  12. package/dist/agentic-ontology-BSSNX24R.js +25 -0
  13. package/dist/backfill-metadata-5I3PAO66.js +600 -0
  14. package/dist/backfill-metadata-F3KEE7WZ.js +600 -0
  15. package/dist/background-jobs-PUXOTBD4.js +25 -0
  16. package/dist/behaviors-AJFFFXT2.js +40 -0
  17. package/dist/behaviors-RXUKZLER.js +40 -0
  18. package/dist/bin/age-ontology-load.js +2 -2
  19. package/dist/bin/agentic-ontology-backfill.js +8 -7
  20. package/dist/bin/agentic-reflection-backfill.js +9 -8
  21. package/dist/bin/agentic-semantic-label.js +8 -7
  22. package/dist/bin/backfill-conversations.js +8 -7
  23. package/dist/bin/backfill-responses.js +8 -7
  24. package/dist/bin/backfill-vectors.js +11 -10
  25. package/dist/bin/bulk-sync-postgres.js +9 -8
  26. package/dist/bin/cc-doctor.js +7 -6
  27. package/dist/bin/cleanup-stale-review-tasks.js +13 -12
  28. package/dist/bin/cli.js +20 -20
  29. package/dist/bin/exe-agent-config.js +5 -4
  30. package/dist/bin/exe-agent.js +10 -9
  31. package/dist/bin/exe-assign.js +10 -9
  32. package/dist/bin/exe-boot.js +20 -19
  33. package/dist/bin/exe-call.js +6 -5
  34. package/dist/bin/exe-cloud.js +8 -7
  35. package/dist/bin/exe-dispatch.js +13 -12
  36. package/dist/bin/exe-doctor.js +2 -1
  37. package/dist/bin/exe-export-behaviors.js +9 -8
  38. package/dist/bin/exe-forget.js +8 -7
  39. package/dist/bin/exe-gateway.js +9 -8
  40. package/dist/bin/exe-healthcheck.js +11 -6
  41. package/dist/bin/exe-heartbeat.js +13 -12
  42. package/dist/bin/exe-kill.js +16 -15
  43. package/dist/bin/exe-launch-agent.js +20 -19
  44. package/dist/bin/exe-new-employee.js +9 -8
  45. package/dist/bin/exe-pending-messages.js +14 -13
  46. package/dist/bin/exe-pending-notifications.js +13 -12
  47. package/dist/bin/exe-pending-reviews.js +13 -12
  48. package/dist/bin/exe-rename.js +6 -5
  49. package/dist/bin/exe-review.js +15 -14
  50. package/dist/bin/exe-search.js +7 -6
  51. package/dist/bin/exe-session-cleanup.js +18 -17
  52. package/dist/bin/exe-settings.js +8 -7
  53. package/dist/bin/exe-start-codex.js +13 -12
  54. package/dist/bin/exe-start-opencode.js +10 -9
  55. package/dist/bin/exe-status.js +14 -13
  56. package/dist/bin/exe-support.js +3 -3
  57. package/dist/bin/exe-team.js +5 -4
  58. package/dist/bin/exe-watchdog.js +34 -1
  59. package/dist/bin/git-sweep.js +14 -13
  60. package/dist/bin/graph-backfill.js +8 -7
  61. package/dist/bin/graph-export.js +7 -6
  62. package/dist/bin/import-history.js +10 -9
  63. package/dist/bin/install-launchd.js +19 -1
  64. package/dist/bin/install.js +9 -8
  65. package/dist/bin/intercom-check.js +4 -4
  66. package/dist/bin/mcp-sessions.js +2 -2
  67. package/dist/bin/orchestration-metrics.js +6 -5
  68. package/dist/bin/postgres-agentic-reflection-backfill.js +4 -4
  69. package/dist/bin/postgres-agentic-semantic-backfill.js +3 -3
  70. package/dist/bin/scan-tasks.js +13 -12
  71. package/dist/bin/setup.js +2 -2
  72. package/dist/bin/shard-migrate.js +7 -6
  73. package/dist/bin/stack-update.js +4 -4
  74. package/dist/bin/vps-health-gate.js +1 -1
  75. package/dist/branding-RBMRJA5D.js +97 -0
  76. package/dist/capability-cards-DCWQI3NN.js +89 -0
  77. package/dist/capability-cards-TQVKK6TE.js +89 -0
  78. package/dist/capacity-monitor-7YZOMMMP.js +51 -0
  79. package/dist/capacity-monitor-S6GFT45S.js +51 -0
  80. package/dist/catchup-brief-DK7OD5DJ.js +175 -0
  81. package/dist/catchup-brief-J27L7LKR.js +175 -0
  82. package/dist/catchup-brief-JLMK2IP5.js +175 -0
  83. package/dist/chunk-2664Y4WA.js +14503 -0
  84. package/dist/chunk-2FTHXF6X.js +150 -0
  85. package/dist/chunk-2H2SCCA7.js +221 -0
  86. package/dist/chunk-2ISUEARV.js +76 -0
  87. package/dist/chunk-2RU66KAN.js +456 -0
  88. package/dist/chunk-2SI5Z24A.js +284 -0
  89. package/dist/chunk-2V6AASHE.js +668 -0
  90. package/dist/chunk-2ZMQI2J4.js +85 -0
  91. package/dist/chunk-3ET3QGXG.js +70 -0
  92. package/dist/chunk-3V6KXHSV.js +203 -0
  93. package/dist/chunk-3VT5IG2G.js +14439 -0
  94. package/dist/chunk-3YHG7W74.js +362 -0
  95. package/dist/chunk-434Z2LFO.js +30 -0
  96. package/dist/chunk-44SWZWGS.js +231 -0
  97. package/dist/chunk-4DFENB7E.js +128 -0
  98. package/dist/chunk-4EA3J7SE.js +333 -0
  99. package/dist/chunk-4JY5DRY2.js +1350 -0
  100. package/dist/chunk-5BUPY2ZC.js +81 -0
  101. package/dist/chunk-5FIQBJ5I.js +735 -0
  102. package/dist/chunk-5MQ4RUUP.js +244 -0
  103. package/dist/chunk-6CTHQKUS.js +1186 -0
  104. package/dist/chunk-6GEEAOFU.js +538 -0
  105. package/dist/chunk-6JOF37K6.js +1352 -0
  106. package/dist/chunk-6OAAN25C.js +727 -0
  107. package/dist/chunk-6S6QFQ33.js +382 -0
  108. package/dist/chunk-6U2BFODG.js +227 -0
  109. package/dist/chunk-76QWODZW.js +1119 -0
  110. package/dist/chunk-7BNDOTRZ.js +1094 -0
  111. package/dist/chunk-7HBACWKV.js +128 -0
  112. package/dist/chunk-7IWWRNJI.js +333 -0
  113. package/dist/chunk-7MH7VI6T.js +280 -0
  114. package/dist/chunk-7QKQE7J4.js +70 -0
  115. package/dist/chunk-7U4JXDBV.js +284 -0
  116. package/dist/chunk-7UF4323L.js +50 -0
  117. package/dist/chunk-7UUJMSFH.js +348 -0
  118. package/dist/chunk-7YEOKPZ6.js +185 -0
  119. package/dist/chunk-7Z3P23BX.js +244 -0
  120. package/dist/chunk-BK42Z2SX.js +1186 -0
  121. package/dist/chunk-BREJRA7B.js +171 -0
  122. package/dist/chunk-C3FMNIJT.js +94 -0
  123. package/dist/chunk-CCNSV7J5.js +128 -0
  124. package/dist/chunk-CKFT7GM6.js +128 -0
  125. package/dist/chunk-CRCB5S7I.js +454 -0
  126. package/dist/chunk-CSMTQ24E.js +97 -0
  127. package/dist/chunk-CSXNLHUU.js +185 -0
  128. package/dist/chunk-D3ELJGEI.js +97 -0
  129. package/dist/chunk-D6CCJVTB.js +214 -0
  130. package/dist/chunk-DEVITBD5.js +1079 -0
  131. package/dist/chunk-DKIFBCKT.js +157 -0
  132. package/dist/chunk-DRUPHYRL.js +286 -0
  133. package/dist/chunk-E4XU7EVT.js +1350 -0
  134. package/dist/chunk-EEZNLI6L.js +240 -0
  135. package/dist/chunk-EIA6LRM4.js +38 -0
  136. package/dist/chunk-FBIXI7WC.js +382 -0
  137. package/dist/chunk-FSQTZ57R.js +4349 -0
  138. package/dist/chunk-FW75WOTA.js +97 -0
  139. package/dist/chunk-GDSV52EC.js +85 -0
  140. package/dist/chunk-GMZTZ4KQ.js +345 -0
  141. package/dist/chunk-GNKHK5VD.js +1068 -0
  142. package/dist/chunk-GP3ZHQJO.js +362 -0
  143. package/dist/chunk-GSVK66OV.js +58 -0
  144. package/dist/chunk-GY2BY5VF.js +58 -0
  145. package/dist/chunk-HNDG5ZDJ.js +336 -0
  146. package/dist/chunk-HTD4AJUF.js +85 -0
  147. package/dist/chunk-HTU7RDZA.js +127 -0
  148. package/dist/chunk-HX4PBMY3.js +227 -0
  149. package/dist/chunk-IC2PIVLM.js +181 -0
  150. package/dist/chunk-IK3Q7NLP.js +2113 -0
  151. package/dist/chunk-IL5FQSUQ.js +2142 -0
  152. package/dist/chunk-ITWU5LJL.js +85 -0
  153. package/dist/chunk-IUIVLCAO.js +369 -0
  154. package/dist/chunk-JHJUV633.js +150 -0
  155. package/dist/chunk-JXOXGBC2.js +262 -0
  156. package/dist/chunk-KG55JL2G.js +604 -0
  157. package/dist/chunk-KGT7VT77.js +167 -0
  158. package/dist/chunk-L2DMZT56.js +210 -0
  159. package/dist/chunk-L57H26UP.js +33 -0
  160. package/dist/chunk-L5E3RXLR.js +197 -0
  161. package/dist/chunk-L5O4MFMV.js +402 -0
  162. package/dist/chunk-LAB3RQRN.js +204 -0
  163. package/dist/chunk-LCOPVYU2.js +3293 -0
  164. package/dist/chunk-LDI633LO.js +2078 -0
  165. package/dist/chunk-LJONNOFH.js +336 -0
  166. package/dist/chunk-LKM56CDI.js +2078 -0
  167. package/dist/chunk-LPO7KLSP.js +14470 -0
  168. package/dist/chunk-M46T2E3A.js +262 -0
  169. package/dist/chunk-MBJYQBUX.js +456 -0
  170. package/dist/chunk-MEWGYH6Z.js +190 -0
  171. package/dist/chunk-MHGR5CRN.js +731 -0
  172. package/dist/chunk-MR64FIZU.js +735 -0
  173. package/dist/chunk-MTRUOIND.js +159 -0
  174. package/dist/chunk-MUDCJP6B.js +68 -0
  175. package/dist/chunk-MUQ46NLH.js +3293 -0
  176. package/dist/chunk-MYVGG2VW.js +204 -0
  177. package/dist/chunk-NEFF4ATD.js +197 -0
  178. package/dist/chunk-NOC7GUHJ.js +836 -0
  179. package/dist/chunk-NOP22U7I.js +33 -0
  180. package/dist/chunk-OGFEQ264.js +448 -0
  181. package/dist/chunk-OGV67HHE.js +230 -0
  182. package/dist/chunk-OQ3CC5N2.js +54 -0
  183. package/dist/chunk-OTANU4LT.js +297 -0
  184. package/dist/chunk-P5A77YDA.js +58 -0
  185. package/dist/chunk-PIOBPKYE.js +377 -0
  186. package/dist/chunk-POEI5ZRV.js +731 -0
  187. package/dist/chunk-PS4W2VGW.js +129 -0
  188. package/dist/chunk-PT3URNVT.js +836 -0
  189. package/dist/chunk-Q4IL3S44.js +55 -0
  190. package/dist/chunk-QEDM5BJW.js +240 -0
  191. package/dist/chunk-QGYRNG7T.js +129 -0
  192. package/dist/chunk-QHNGZ6X2.js +538 -0
  193. package/dist/chunk-QOZQ2MYZ.js +42 -0
  194. package/dist/chunk-QPYEVLED.js +402 -0
  195. package/dist/chunk-QRTJNSKU.js +133 -0
  196. package/dist/chunk-R36FAN53.js +488 -0
  197. package/dist/chunk-R426G4MO.js +290 -0
  198. package/dist/chunk-RG4OHDY7.js +348 -0
  199. package/dist/chunk-RHNSYJCT.js +30 -0
  200. package/dist/chunk-RKYLET7V.js +1352 -0
  201. package/dist/chunk-RLSEMHP7.js +369 -0
  202. package/dist/chunk-ROGL26Q2.js +630 -0
  203. package/dist/chunk-RTC3JHFF.js +345 -0
  204. package/dist/chunk-RV62SMCL.js +171 -0
  205. package/dist/chunk-SC4MQTMY.js +192 -0
  206. package/dist/chunk-SCT6IMMD.js +630 -0
  207. package/dist/chunk-SOTS4FXN.js +546 -0
  208. package/dist/chunk-STS5552V.js +448 -0
  209. package/dist/chunk-SY65TI5X.js +424 -0
  210. package/dist/chunk-T67ELIV6.js +38 -0
  211. package/dist/chunk-TBSYE2WW.js +97 -0
  212. package/dist/chunk-TGRGBM7C.js +1094 -0
  213. package/dist/chunk-TGTJYERN.js +621 -0
  214. package/dist/chunk-THWAU77X.js +290 -0
  215. package/dist/chunk-TM7NUOZ7.js +574 -0
  216. package/dist/chunk-TNZWNC4O.js +106 -0
  217. package/dist/chunk-TRSYK4HA.js +1352 -0
  218. package/dist/chunk-TZIGQLY7.js +123 -0
  219. package/dist/chunk-U7PCRZEB.js +286 -0
  220. package/dist/chunk-UCBIETEA.js +373 -0
  221. package/dist/chunk-UGH4Z3BT.js +50 -0
  222. package/dist/chunk-UKRCNA3D.js +127 -0
  223. package/dist/chunk-ULUNIZOZ.js +2113 -0
  224. package/dist/chunk-UWTIDBMQ.js +411 -0
  225. package/dist/chunk-VJTS6RGD.js +81 -0
  226. package/dist/chunk-VLE2Z4JK.js +411 -0
  227. package/dist/chunk-VOGYUVYX.js +4349 -0
  228. package/dist/chunk-VPQAXUG4.js +210 -0
  229. package/dist/chunk-W3TXZRGP.js +1186 -0
  230. package/dist/chunk-WQKB25AU.js +1119 -0
  231. package/dist/chunk-WTEVY2WF.js +122 -0
  232. package/dist/chunk-X5CTZH7W.js +76 -0
  233. package/dist/chunk-XCZP6I5M.js +167 -0
  234. package/dist/chunk-XP3DCIAH.js +181 -0
  235. package/dist/chunk-XRN5MQRN.js +373 -0
  236. package/dist/chunk-XZXY66KH.js +123 -0
  237. package/dist/chunk-Y2SP7JYR.js +668 -0
  238. package/dist/chunk-Y5ZF5OFM.js +280 -0
  239. package/dist/chunk-YN7XRPQ6.js +546 -0
  240. package/dist/chunk-YQOOELC3.js +221 -0
  241. package/dist/chunk-YTKVJJSU.js +379 -0
  242. package/dist/chunk-YZJZXBPL.js +192 -0
  243. package/dist/chunk-Z2XRD6SJ.js +377 -0
  244. package/dist/chunk-ZBD56XE2.js +122 -0
  245. package/dist/chunk-ZE2XPYEC.js +299 -0
  246. package/dist/chunk-ZE4E4PMM.js +157 -0
  247. package/dist/chunk-ZIY6HVAD.js +214 -0
  248. package/dist/chunk-ZK4VCLCK.js +176 -0
  249. package/dist/chunk-ZOBV6QWD.js +54 -0
  250. package/dist/chunk-ZTGID7RE.js +1068 -0
  251. package/dist/co-activation-BOHQZWKI.js +74 -0
  252. package/dist/co-activation-KSBQKWYV.js +74 -0
  253. package/dist/co-occurrence-OSJQ2XQO.js +95 -0
  254. package/dist/co-occurrence-YKTIFNYA.js +95 -0
  255. package/dist/code-context-index-43MNXX4H.js +30 -0
  256. package/dist/conversation-entity-extractor-6PJUN5DP.js +114 -0
  257. package/dist/conversation-wiki-populator-PDL2SUZJ.js +105 -0
  258. package/dist/core-memory-TU636T4D.js +110 -0
  259. package/dist/core-memory-U74QUX6H.js +110 -0
  260. package/dist/crdt-sync-JTTYSLBV.js +33 -0
  261. package/dist/crdt-sync-UG3532QN.js +33 -0
  262. package/dist/crm-webhook-D5JCLN2M.js +10 -0
  263. package/dist/crm-webhook-Y2BDCVPM.js +10 -0
  264. package/dist/cto-delegation-gate-7TJT5EOE.js +280 -0
  265. package/dist/cto-delegation-gate-DCIFDJDX.js +280 -0
  266. package/dist/daemon-auth-CBMX4H6L.js +13 -0
  267. package/dist/daemon-orchestration-D5MFCNVH.js +139 -0
  268. package/dist/daemon-orchestration-XSDZPGYX.js +139 -0
  269. package/dist/db-backup-77QYAXID.js +37 -0
  270. package/dist/db-backup-LJVPP5AS.js +37 -0
  271. package/dist/db-restore-events-GNZS42YO.js +76 -0
  272. package/dist/doc-graph-extractor-3PI2M2LX.js +133 -0
  273. package/dist/doc-graph-extractor-CJU6HR2C.js +133 -0
  274. package/dist/dreaming-5A4MKONF.js +34 -0
  275. package/dist/dreaming-RFRHTYFN.js +34 -0
  276. package/dist/entity-boost-WXSBSZW4.js +375 -0
  277. package/dist/exe-drift-HBLGPMBH.js +70 -0
  278. package/dist/exe-drift-K7HAX5N4.js +70 -0
  279. package/dist/exe-export-JSJOEDBE.js +76 -0
  280. package/dist/exe-export-YVZMMVZZ.js +76 -0
  281. package/dist/exe-import-BO2GU36V.js +79 -0
  282. package/dist/exe-import-S6O6JTAB.js +79 -0
  283. package/dist/exe-key-5C5FYDC7.js +673 -0
  284. package/dist/exe-key-QVPXEUTV.js +673 -0
  285. package/dist/exe-org-35QVSGCM.js +73 -0
  286. package/dist/exe-snapshot-6MFTRMI5.js +338 -0
  287. package/dist/exe-snapshot-OFWZY3CY.js +338 -0
  288. package/dist/fast-db-init-E64KKZS2.js +7 -0
  289. package/dist/fast-db-init-ZSRLXT5Y.js +7 -0
  290. package/dist/founder-context-QAAWZEZM.js +96 -0
  291. package/dist/gateway/index.js +13 -12
  292. package/dist/git-staleness-3PLBSHA3.js +112 -0
  293. package/dist/git-staleness-XPWBDY2Q.js +112 -0
  294. package/dist/git-task-sweep-C5DM7CJS.js +42 -0
  295. package/dist/git-task-sweep-G2MKIFGS.js +42 -0
  296. package/dist/global-procedures-CGXY2AVS.js +22 -0
  297. package/dist/global-procedures-WLVOTD2Y.js +22 -0
  298. package/dist/graph-auto-extract-SAE3GKG5.js +183 -0
  299. package/dist/graph-auto-extract-ZLKCPSPD.js +183 -0
  300. package/dist/graph-query-AP5R6ZHO.js +28 -0
  301. package/dist/graph-rag-ZCJ4X7YL.js +35 -0
  302. package/dist/hook-integrity-A3NDG7EB.js +89 -0
  303. package/dist/hooks/bug-report-worker.js +15 -14
  304. package/dist/hooks/codex-stop-task-finalizer.js +15 -14
  305. package/dist/hooks/commit-complete.js +16 -15
  306. package/dist/hooks/error-recall.js +9 -8
  307. package/dist/hooks/exe-heartbeat-hook.js +6 -5
  308. package/dist/hooks/ingest-worker.js +5 -5
  309. package/dist/hooks/ingest.js +13 -12
  310. package/dist/hooks/instructions-loaded.js +7 -6
  311. package/dist/hooks/manifest.json +20 -20
  312. package/dist/hooks/notification.js +7 -6
  313. package/dist/hooks/post-compact.js +15 -14
  314. package/dist/hooks/post-tool-combined.js +7 -7
  315. package/dist/hooks/pre-compact.js +20 -19
  316. package/dist/hooks/pre-tool-use.js +28 -20
  317. package/dist/hooks/prompt-submit.js +28 -27
  318. package/dist/hooks/session-end.js +25 -24
  319. package/dist/hooks/session-start.js +27 -16
  320. package/dist/hooks/stop.js +22 -21
  321. package/dist/hooks/subagent-stop.js +20 -14
  322. package/dist/hooks/summary-worker.js +22 -21
  323. package/dist/index.js +23 -22
  324. package/dist/installer-ALESUE7P.js +298 -0
  325. package/dist/installer-APCDG6FF.js +40 -0
  326. package/dist/installer-BYIQKENA.js +40 -0
  327. package/dist/installer-JNHPJNO2.js +344 -0
  328. package/dist/installer-KWTPZCUH.js +40 -0
  329. package/dist/installer-MUKDPCXL.js +344 -0
  330. package/dist/installer-NR636CAL.js +298 -0
  331. package/dist/installer-O2S3ZLAH.js +344 -0
  332. package/dist/installer-T5XSDLBK.js +298 -0
  333. package/dist/key-backup-status-2EPRIAXU.js +39 -0
  334. package/dist/lib/agent-config.js +2 -2
  335. package/dist/lib/cloud-sync.js +7 -6
  336. package/dist/lib/config.js +1 -1
  337. package/dist/lib/consolidation.js +8 -7
  338. package/dist/lib/database.js +4 -3
  339. package/dist/lib/db-daemon-client.js +3 -3
  340. package/dist/lib/db.js +4 -3
  341. package/dist/lib/device-registry.js +1 -1
  342. package/dist/lib/embed-worker.js +6 -4
  343. package/dist/lib/embedder.js +4 -4
  344. package/dist/lib/employee-templates.js +6 -5
  345. package/dist/lib/employees.js +4 -3
  346. package/dist/lib/exe-daemon-client.js +3 -3
  347. package/dist/lib/exe-daemon.js +164 -63
  348. package/dist/lib/hybrid-search.js +7 -6
  349. package/dist/lib/identity.js +4 -3
  350. package/dist/lib/license.js +2 -2
  351. package/dist/lib/messaging.js +13 -12
  352. package/dist/lib/reminders.js +5 -4
  353. package/dist/lib/schedules.js +7 -6
  354. package/dist/lib/session-registry.js +10 -5
  355. package/dist/lib/skill-learning.js +8 -7
  356. package/dist/lib/store.js +6 -5
  357. package/dist/lib/task-router.js +5 -4
  358. package/dist/lib/tasks.js +14 -13
  359. package/dist/lib/tmux-routing.js +12 -11
  360. package/dist/lib/token-spend.js +5 -4
  361. package/dist/license-gate-O2LLJ6LS.js +16 -0
  362. package/dist/mcp/register-tools.js +69 -69
  363. package/dist/mcp/server.js +121 -90
  364. package/dist/mcp/tools/complete-reminder.js +6 -5
  365. package/dist/mcp/tools/create-reminder.js +6 -5
  366. package/dist/mcp/tools/create-task.js +16 -15
  367. package/dist/mcp/tools/deactivate-behavior.js +9 -8
  368. package/dist/mcp/tools/list-reminders.js +6 -5
  369. package/dist/mcp/tools/list-tasks.js +16 -15
  370. package/dist/mcp/tools/send-message.js +15 -14
  371. package/dist/mcp/tools/update-task.js +15 -14
  372. package/dist/mcp-http-config-XI53TYZL.js +29 -0
  373. package/dist/mcp-http-config-YQ3KWB73.js +29 -0
  374. package/dist/memory-cards-2F6RFUT5.js +180 -0
  375. package/dist/memory-cards-LLUWHHT3.js +180 -0
  376. package/dist/memory-graph-extractor-IT6HYWWM.js +22 -0
  377. package/dist/memory-graph-extractor-LZUQWU7P.js +22 -0
  378. package/dist/memory-poisoning-defense-45AMNLDK.js +224 -0
  379. package/dist/memory-poisoning-defense-FFO3YUFP.js +224 -0
  380. package/dist/memory-queue-HSHWXVZC.js +19 -0
  381. package/dist/memory-queue-client-AJ2WHEEE.js +16 -0
  382. package/dist/memory-reflection-JGA6ULGJ.js +244 -0
  383. package/dist/memory-reflection-ZT4ST2SS.js +244 -0
  384. package/dist/message-queue-client-SANA7URQ.js +92 -0
  385. package/dist/notifications-S5QQ3SBU.js +47 -0
  386. package/dist/notifications-YBJCZJDR.js +47 -0
  387. package/dist/oauth-server-VEMBOSS3.js +437 -0
  388. package/dist/orchestration-events-CYDARUFL.js +27 -0
  389. package/dist/orchestration-events-F67I3TG6.js +27 -0
  390. package/dist/orchestration-phase-EMDEZHIU.js +23 -0
  391. package/dist/orchestrator-B4CUAA7M.js +35 -0
  392. package/dist/orchestrator-GBONJR6S.js +35 -0
  393. package/dist/pipeline-router-FKCP3RCU.js +15 -0
  394. package/dist/pipeline-router-LIQTRMQW.js +15 -0
  395. package/dist/plan-limits-BQ2CEB66.js +28 -0
  396. package/dist/plan-limits-H63HOJ4H.js +28 -0
  397. package/dist/project-boot-4CLI3CLL.js +299 -0
  398. package/dist/project-boot-VSMQJDDI.js +299 -0
  399. package/dist/projection-worker-55EFFXOK.js +1084 -0
  400. package/dist/projection-worker-IQ55BIX7.js +1084 -0
  401. package/dist/prospective-memory-E7WBD5V4.js +232 -0
  402. package/dist/prospective-memory-GE7TW6EW.js +232 -0
  403. package/dist/push-notifications-CV5UD5CC.js +15 -0
  404. package/dist/reranker-PZWHSEGQ.js +19 -0
  405. package/dist/reranker-WSJEPXIY.js +19 -0
  406. package/dist/reranker-ZBN2GKIO.js +19 -0
  407. package/dist/retrieval-health-HBFTJ5M3.js +11 -0
  408. package/dist/retrieval-health-M2OE7USG.js +11 -0
  409. package/dist/review-polling-BBOASCWL.js +126 -0
  410. package/dist/review-polling-WTJZTCTD.js +126 -0
  411. package/dist/runtime/index.js +19 -18
  412. package/dist/session-events-POJ3YCUQ.js +38 -0
  413. package/dist/session-events-QVNSNSQN.js +38 -0
  414. package/dist/session-kill-telemetry-65TJ5XV7.js +31 -0
  415. package/dist/session-kill-telemetry-OC34JTYX.js +31 -0
  416. package/dist/session-scope-3WDVXSJH.js +88 -0
  417. package/dist/session-scope-KRQL3PIP.js +88 -0
  418. package/dist/setup-wizard-FE2MBSZS.js +12 -0
  419. package/dist/setup-wizard-UUAEUY3X.js +12 -0
  420. package/dist/shard-manager-P5ZJH4AX.js +30 -0
  421. package/dist/skill-refinement-5MCWYJW4.js +159 -0
  422. package/dist/skill-refinement-TRSMFCKK.js +159 -0
  423. package/dist/stack-update-OGFSAV6F.js +80 -0
  424. package/dist/steward-gate-L43S6CSV.js +15 -0
  425. package/dist/steward-gate-LCR46RJV.js +15 -0
  426. package/dist/support-outbox-QPQQK7F7.js +547 -0
  427. package/dist/task-enforcement-DRWNGNLH.js +506 -0
  428. package/dist/task-enforcement-STQBU5AM.js +506 -0
  429. package/dist/task-scope-A2IJJQQS.js +37 -0
  430. package/dist/task-scope-X3JOBCZV.js +37 -0
  431. package/dist/tasks-crud-66VBOQTI.js +79 -0
  432. package/dist/tasks-crud-ZD24ZQOL.js +79 -0
  433. package/dist/tasks-notify-EPWV6YRP.js +40 -0
  434. package/dist/tasks-notify-GHPMBTB3.js +40 -0
  435. package/dist/tasks-review-P6ZVW3ZV.js +49 -0
  436. package/dist/tasks-review-VXJVJ7ZT.js +49 -0
  437. package/dist/telemetry-upload-KCE2IT6P.js +741 -0
  438. package/dist/telemetry-upload-ZNAMKKNS.js +741 -0
  439. package/dist/token-budget-GHUZSDOD.js +86 -0
  440. package/dist/token-budget-O7B4NGY3.js +86 -0
  441. package/dist/tool-capability-index-3OZFBAC3.js +10 -0
  442. package/dist/tool-telemetry-EWAC3F75.js +17 -0
  443. package/dist/tool-telemetry-IO6L62QY.js +17 -0
  444. package/dist/tui/App.js +25 -24
  445. package/dist/tui-data-2KSB36YG.js +260 -0
  446. package/dist/tui-data-YVJ72ZVD.js +260 -0
  447. package/dist/webhook-pipe-PAPBITL4.js +114 -0
  448. package/dist/wiki-acl-HTRRAQGV.js +111 -0
  449. package/dist/wiki-acl-MNG2ROWJ.js +111 -0
  450. package/dist/wiki-client-Q4O6EMTP.js +157 -0
  451. package/dist/worker-gate-EVQTUUIF.js +21 -0
  452. package/dist/worker-gate-XKPDQQY4.js +21 -0
  453. package/dist/workflow-engine-JYGEDGTL.js +28 -0
  454. package/dist/workflow-engine-UBTXKWRV.js +28 -0
  455. package/dist/worktree-VPSXFHXP.js +28 -0
  456. package/dist/worktree-ZH5AT35X.js +28 -0
  457. package/dist/worktree-sweep-BIUP4BGY.js +21 -0
  458. package/dist/worktree-sweep-KEHR4NFP.js +21 -0
  459. package/package.json +2 -2
  460. package/release-notes.json +101 -101
  461. package/stack.release.json +8 -0
@@ -29,9 +29,31 @@ services:
29
29
  image: ${EXE_DB_IMAGE:-pgvector/pgvector:pg16}
30
30
  container_name: exe-db
31
31
  restart: unless-stopped
32
- env_file:
33
- - path: .env
34
- required: false
32
+ # SECURITY (bug 67d62490): no blanket `env_file: .env`. Each service
33
+ # receives ONLY the secrets it owns via the explicit `environment:` block
34
+ # below (values interpolated from .env at compose-parse time, never the
35
+ # whole secret file). A compromise of one app container cannot read another
36
+ # service's GOTRUE_JWT_SECRET / DB passwords / CLOUDFLARE_TUNNEL_TOKEN, etc.
37
+ #
38
+ # WAL archiving / PITR (bug 5176aa4e). OPT-IN, first-boot-safe: defaults
39
+ # keep archive_mode=off so a fresh stack boots exactly as before (RPO = the
40
+ # nightly pg_dump). Set PG_ARCHIVE_MODE=on in .env to enable continuous WAL
41
+ # archiving for point-in-time recovery — archived segments land in the
42
+ # pg_wal_archive volume (back it up off-box via backup.sh --upload-r2).
43
+ # archive_command is a no-op (/bin/true) unless overridden so the server
44
+ # never wedges if the archive target is unwritable.
45
+ command:
46
+ - postgres
47
+ - -c
48
+ - wal_level=${PG_WAL_LEVEL:-replica}
49
+ - -c
50
+ - archive_mode=${PG_ARCHIVE_MODE:-off}
51
+ - -c
52
+ - archive_command=${PG_ARCHIVE_COMMAND:-test ! -d /var/lib/postgresql/wal_archive || cp %p /var/lib/postgresql/wal_archive/%f || /bin/true}
53
+ - -c
54
+ - archive_timeout=${PG_ARCHIVE_TIMEOUT:-300}
55
+ - -c
56
+ - max_wal_senders=${PG_MAX_WAL_SENDERS:-3}
35
57
  environment:
36
58
  POSTGRES_USER: ${POSTGRES_USER:-exe}
37
59
  POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?POSTGRES_PASSWORD is required}
@@ -39,6 +61,9 @@ services:
39
61
  PGDATA: /var/lib/postgresql/data/pgdata
40
62
  volumes:
41
63
  - postgres_data:/var/lib/postgresql/data
64
+ # WAL archive destination for PITR. Lives on a named volume so it survives
65
+ # container recreation; push it off-box for true disaster recovery.
66
+ - pg_wal_archive:/var/lib/postgresql/wal_archive
42
67
  - ./init-db.sql:/docker-entrypoint-initdb.d/01-init.sql:ro
43
68
  networks:
44
69
  - backend
@@ -56,9 +81,11 @@ services:
56
81
  image: clickhouse/clickhouse-server:24.8.4.13-alpine
57
82
  container_name: clickhouse
58
83
  restart: unless-stopped
59
- env_file:
60
- - path: .env
61
- required: false
84
+ # SECURITY (bug 67d62490): no blanket `env_file: .env`. Each service
85
+ # receives ONLY the secrets it owns via the explicit `environment:` block
86
+ # below (values interpolated from .env at compose-parse time, never the
87
+ # whole secret file). A compromise of one app container cannot read another
88
+ # service's GOTRUE_JWT_SECRET / DB passwords / CLOUDFLARE_TUNNEL_TOKEN, etc.
62
89
  environment:
63
90
  CLICKHOUSE_DB: ${CLICKHOUSE_DB:-default}
64
91
  CLICKHOUSE_USER: ${CLICKHOUSE_USER:-exe}
@@ -95,9 +122,11 @@ services:
95
122
  image: redis:7.4-alpine
96
123
  container_name: redis
97
124
  restart: unless-stopped
98
- env_file:
99
- - path: .env
100
- required: false
125
+ # SECURITY (bug 67d62490): no blanket `env_file: .env`. Each service
126
+ # receives ONLY the secrets it owns via the explicit `environment:` block
127
+ # below (values interpolated from .env at compose-parse time, never the
128
+ # whole secret file). A compromise of one app container cannot read another
129
+ # service's GOTRUE_JWT_SECRET / DB passwords / CLOUDFLARE_TUNNEL_TOKEN, etc.
101
130
  command: ["redis-server", "--requirepass", "${REDIS_PASSWORD:?REDIS_PASSWORD is required}", "--save", "60", "1", "--appendonly", "yes"]
102
131
  volumes:
103
132
  - redis_data:/data
@@ -120,9 +149,11 @@ services:
120
149
  depends_on:
121
150
  exe-db:
122
151
  condition: service_healthy
123
- env_file:
124
- - path: .env
125
- required: false
152
+ # SECURITY (bug 67d62490): no blanket `env_file: .env`. Each service
153
+ # receives ONLY the secrets it owns via the explicit `environment:` block
154
+ # below (values interpolated from .env at compose-parse time, never the
155
+ # whole secret file). A compromise of one app container cannot read another
156
+ # service's GOTRUE_JWT_SECRET / DB passwords / CLOUDFLARE_TUNNEL_TOKEN, etc.
126
157
  environment:
127
158
  GOTRUE_API_PORT: ${GOTRUE_API_PORT:-9999}
128
159
  GOTRUE_DB_DRIVER: postgres
@@ -137,14 +168,20 @@ services:
137
168
  GOTRUE_JWT_SECRET: ${GOTRUE_JWT_SECRET:?GOTRUE_JWT_SECRET is required}
138
169
  GOTRUE_JWT_EXP: ${GOTRUE_JWT_EXP:-3600}
139
170
  GOTRUE_JWT_DEFAULT_GROUP_NAME: authenticated
140
- API_EXTERNAL_URL: ${GOTRUE_EXTERNAL_URL:-https://auth.askexe.com}
171
+ # No hardcoded askexe.com fallback — GOTRUE_EXTERNAL_URL is set per-customer
172
+ # in .env (https://auth.<domain>) and must be present (bug 47965144 class).
173
+ API_EXTERNAL_URL: ${GOTRUE_EXTERNAL_URL:?GOTRUE_EXTERNAL_URL is required — set to https://auth.<your-domain> in .env}
141
174
  GOTRUE_DISABLE_SIGNUP: ${GOTRUE_DISABLE_SIGNUP:-true}
142
175
  GOTRUE_MAILER_AUTOCONFIRM: ${GOTRUE_MAILER_AUTOCONFIRM:-false}
143
176
  GOTRUE_SMTP_HOST: ${SMTP_HOST:-}
144
177
  GOTRUE_SMTP_PORT: ${SMTP_PORT:-587}
145
178
  GOTRUE_SMTP_USER: ${SMTP_USER:-}
146
179
  GOTRUE_SMTP_PASS: ${SMTP_PASS:-}
147
- GOTRUE_SMTP_ADMIN_EMAIL: ${SMTP_FROM:-noreply@askexe.com}
180
+ # Bug 133c9d5b: never fall back to a hardcoded askexe.com sender. SMTP_FROM
181
+ # is written to .env by generate-env.ts as noreply@<customer-domain>. A
182
+ # missing value fails loudly rather than silently sending auth mail From
183
+ # noreply@askexe.com (wrong branding + SPF/DKIM/DMARC failure).
184
+ GOTRUE_SMTP_ADMIN_EMAIL: ${SMTP_FROM:?SMTP_FROM is required — set to noreply@<your-domain> in .env}
148
185
  ports:
149
186
  - "127.0.0.1:${GOTRUE_HOST_PORT:-9999}:9999"
150
187
  networks:
@@ -208,9 +245,11 @@ services:
208
245
  condition: service_healthy
209
246
  redis:
210
247
  condition: service_healthy
211
- env_file:
212
- - path: .env
213
- required: false
248
+ # SECURITY (bug 67d62490): no blanket `env_file: .env`. Each service
249
+ # receives ONLY the secrets it owns via the explicit `environment:` block
250
+ # below (values interpolated from .env at compose-parse time, never the
251
+ # whole secret file). A compromise of one app container cannot read another
252
+ # service's GOTRUE_JWT_SECRET / DB passwords / CLOUDFLARE_TUNNEL_TOKEN, etc.
214
253
  environment:
215
254
  NODE_ENV: production
216
255
  NODE_PORT: "3000"
@@ -258,9 +297,11 @@ services:
258
297
  condition: service_healthy
259
298
  exe-crm:
260
299
  condition: service_healthy
261
- env_file:
262
- - path: .env
263
- required: false
300
+ # SECURITY (bug 67d62490): no blanket `env_file: .env`. Each service
301
+ # receives ONLY the secrets it owns via the explicit `environment:` block
302
+ # below (values interpolated from .env at compose-parse time, never the
303
+ # whole secret file). A compromise of one app container cannot read another
304
+ # service's GOTRUE_JWT_SECRET / DB passwords / CLOUDFLARE_TUNNEL_TOKEN, etc.
264
305
  environment:
265
306
  NODE_ENV: production
266
307
  EXE_LICENSE_KEY: ${EXE_LICENSE_KEY:?EXE_LICENSE_KEY is required — purchase at https://askexe.com}
@@ -300,9 +341,11 @@ services:
300
341
  condition: service_healthy
301
342
  gotrue:
302
343
  condition: service_healthy
303
- env_file:
304
- - path: .env
305
- required: false
344
+ # SECURITY (bug 67d62490): no blanket `env_file: .env`. Each service
345
+ # receives ONLY the secrets it owns via the explicit `environment:` block
346
+ # below (values interpolated from .env at compose-parse time, never the
347
+ # whole secret file). A compromise of one app container cannot read another
348
+ # service's GOTRUE_JWT_SECRET / DB passwords / CLOUDFLARE_TUNNEL_TOKEN, etc.
306
349
  environment:
307
350
  NODE_ENV: production
308
351
  SERVER_PORT: "3001"
@@ -342,9 +385,11 @@ services:
342
385
  image: ${EXE_OS_SERVER_IMAGE_TAG:-${EXE_OS_IMAGE_TAG:-${EXED_IMAGE_TAG:-ghcr.io/askexe/exe-os:v0.9.270}}}
343
386
  container_name: exe-os
344
387
  restart: unless-stopped
345
- env_file:
346
- - path: .env
347
- required: false
388
+ # SECURITY (bug 67d62490): no blanket `env_file: .env`. Each service
389
+ # receives ONLY the secrets it owns via the explicit `environment:` block
390
+ # below (values interpolated from .env at compose-parse time, never the
391
+ # whole secret file). A compromise of one app container cannot read another
392
+ # service's GOTRUE_JWT_SECRET / DB passwords / CLOUDFLARE_TUNNEL_TOKEN, etc.
348
393
  environment:
349
394
  NODE_ENV: production
350
395
  EXED_PORT: "8765"
@@ -401,9 +446,11 @@ services:
401
446
  depends_on:
402
447
  exe-os:
403
448
  condition: service_healthy
404
- env_file:
405
- - path: .env
406
- required: false
449
+ # SECURITY (bug 67d62490): no blanket `env_file: .env`. Each service
450
+ # receives ONLY the secrets it owns via the explicit `environment:` block
451
+ # below (values interpolated from .env at compose-parse time, never the
452
+ # whole secret file). A compromise of one app container cannot read another
453
+ # service's GOTRUE_JWT_SECRET / DB passwords / CLOUDFLARE_TUNNEL_TOKEN, etc.
407
454
  environment:
408
455
  NODE_ENV: production
409
456
  EXE_OS_DIR: /home/exed/.exe-os
@@ -432,9 +479,11 @@ services:
432
479
  depends_on:
433
480
  exe-os:
434
481
  condition: service_healthy
435
- env_file:
436
- - path: .env
437
- required: false
482
+ # SECURITY (bug 67d62490): no blanket `env_file: .env`. Each service
483
+ # receives ONLY the secrets it owns via the explicit `environment:` block
484
+ # below (values interpolated from .env at compose-parse time, never the
485
+ # whole secret file). A compromise of one app container cannot read another
486
+ # service's GOTRUE_JWT_SECRET / DB passwords / CLOUDFLARE_TUNNEL_TOKEN, etc.
438
487
  environment:
439
488
  NODE_ENV: production
440
489
  EXE_GATEWAY_HOME: /data
@@ -550,9 +599,11 @@ services:
550
599
  profiles: ["registry-proxy", "askexe-control-plane"]
551
600
  restart: unless-stopped
552
601
  entrypoint: ["node", "/app/dist/bin/registry-proxy.js"]
553
- env_file:
554
- - path: .env
555
- required: false
602
+ # SECURITY (bug 67d62490): no blanket `env_file: .env`. Each service
603
+ # receives ONLY the secrets it owns via the explicit `environment:` block
604
+ # below (values interpolated from .env at compose-parse time, never the
605
+ # whole secret file). A compromise of one app container cannot read another
606
+ # service's GOTRUE_JWT_SECRET / DB passwords / CLOUDFLARE_TUNNEL_TOKEN, etc.
556
607
  environment:
557
608
  EXE_REGISTRY_PROXY_PORT: "${EXE_REGISTRY_PROXY_PORT:-3200}"
558
609
  EXE_REGISTRY_PROXY_HOST: "${EXE_REGISTRY_PROXY_HOST:-0.0.0.0}"
@@ -637,7 +688,7 @@ services:
637
688
  # 4 services: gunicorn API, websocket, RQ worker, scheduler.
638
689
 
639
690
  exe-erp:
640
- image: ${ERP_IMAGE_TAG:-ghcr.io/askexe/exe-erp:v0.2.0-final3}
691
+ image: ${ERP_IMAGE_TAG:-ghcr.io/askexe/exe-erp:v0.2.0-final8}
641
692
  container_name: exe-erp
642
693
  restart: unless-stopped
643
694
  entrypoint: ["/usr/local/bin/entrypoint.sh"]
@@ -658,9 +709,11 @@ services:
658
709
  condition: service_healthy
659
710
  gotrue:
660
711
  condition: service_healthy
661
- env_file:
662
- - path: .env
663
- required: false
712
+ # SECURITY (bug 67d62490): no blanket `env_file: .env`. Each service
713
+ # receives ONLY the secrets it owns via the explicit `environment:` block
714
+ # below (values interpolated from .env at compose-parse time, never the
715
+ # whole secret file). A compromise of one app container cannot read another
716
+ # service's GOTRUE_JWT_SECRET / DB passwords / CLOUDFLARE_TUNNEL_TOKEN, etc.
664
717
  environment:
665
718
  DB_HOST: exe-db
666
719
  DB_PORT: "5432"
@@ -736,7 +789,7 @@ services:
736
789
  options: { max-size: "10m", max-file: "3" }
737
790
 
738
791
  exe-erp-websocket:
739
- image: ${ERP_IMAGE_TAG:-ghcr.io/askexe/exe-erp:v0.2.0-final3}
792
+ image: ${ERP_IMAGE_TAG:-ghcr.io/askexe/exe-erp:v0.2.0-final8}
740
793
  container_name: exe-erp-websocket
741
794
  restart: unless-stopped
742
795
  entrypoint: []
@@ -765,9 +818,11 @@ services:
765
818
  depends_on:
766
819
  exe-erp:
767
820
  condition: service_healthy
768
- env_file:
769
- - path: .env
770
- required: false
821
+ # SECURITY (bug 67d62490): no blanket `env_file: .env`. Each service
822
+ # receives ONLY the secrets it owns via the explicit `environment:` block
823
+ # below (values interpolated from .env at compose-parse time, never the
824
+ # whole secret file). A compromise of one app container cannot read another
825
+ # service's GOTRUE_JWT_SECRET / DB passwords / CLOUDFLARE_TUNNEL_TOKEN, etc.
771
826
  environment:
772
827
  REDIS_SOCKETIO: redis://:${REDIS_PASSWORD:?REDIS_PASSWORD is required}@redis:6379/5
773
828
  SITE_NAME: ${ERP_SITE_NAME:-erp.askexe.com}
@@ -786,7 +841,7 @@ services:
786
841
  options: { max-size: "10m", max-file: "3" }
787
842
 
788
843
  exe-erp-queue:
789
- image: ${ERP_IMAGE_TAG:-ghcr.io/askexe/exe-erp:v0.2.0-final3}
844
+ image: ${ERP_IMAGE_TAG:-ghcr.io/askexe/exe-erp:v0.2.0-final8}
790
845
  container_name: exe-erp-queue
791
846
  restart: unless-stopped
792
847
  entrypoint: []
@@ -794,9 +849,11 @@ services:
794
849
  depends_on:
795
850
  exe-erp:
796
851
  condition: service_healthy
797
- env_file:
798
- - path: .env
799
- required: false
852
+ # SECURITY (bug 67d62490): no blanket `env_file: .env`. Each service
853
+ # receives ONLY the secrets it owns via the explicit `environment:` block
854
+ # below (values interpolated from .env at compose-parse time, never the
855
+ # whole secret file). A compromise of one app container cannot read another
856
+ # service's GOTRUE_JWT_SECRET / DB passwords / CLOUDFLARE_TUNNEL_TOKEN, etc.
800
857
  environment:
801
858
  DB_HOST: exe-db
802
859
  DB_PORT: "5432"
@@ -820,7 +877,7 @@ services:
820
877
  options: { max-size: "10m", max-file: "3" }
821
878
 
822
879
  exe-erp-scheduler:
823
- image: ${ERP_IMAGE_TAG:-ghcr.io/askexe/exe-erp:v0.2.0-final3}
880
+ image: ${ERP_IMAGE_TAG:-ghcr.io/askexe/exe-erp:v0.2.0-final8}
824
881
  container_name: exe-erp-scheduler
825
882
  restart: unless-stopped
826
883
  entrypoint: []
@@ -828,9 +885,11 @@ services:
828
885
  depends_on:
829
886
  exe-erp:
830
887
  condition: service_healthy
831
- env_file:
832
- - path: .env
833
- required: false
888
+ # SECURITY (bug 67d62490): no blanket `env_file: .env`. Each service
889
+ # receives ONLY the secrets it owns via the explicit `environment:` block
890
+ # below (values interpolated from .env at compose-parse time, never the
891
+ # whole secret file). A compromise of one app container cannot read another
892
+ # service's GOTRUE_JWT_SECRET / DB passwords / CLOUDFLARE_TUNNEL_TOKEN, etc.
834
893
  environment:
835
894
  DB_HOST: exe-db
836
895
  DB_PORT: "5432"
@@ -898,6 +957,15 @@ services:
898
957
  image: ${AUTH_IMAGE_TAG:-update.askexe.com/askexe/exe-auth:v0.1.0}
899
958
  container_name: exe-auth
900
959
  restart: unless-stopped
960
+ environment:
961
+ # Customer apex domain — the gateway templates its nginx server_name, CORS
962
+ # origin, default redirect and SPA domain from this at container start.
963
+ # Never falls back to askexe.com (bug 47965144).
964
+ DOMAIN: ${DOMAIN:?DOMAIN is required — set to your customer apex domain (e.g. hygo.co)}
965
+ AUTH_SERVER_NAME: ${AUTH_SERVER_NAME:-}
966
+ AUTH_CORS_ORIGIN: ${AUTH_CORS_ORIGIN:-}
967
+ AUTH_DEFAULT_REDIRECT: ${AUTH_DEFAULT_REDIRECT:-}
968
+ AUTH_DEFAULT_PRODUCT: ${AUTH_DEFAULT_PRODUCT:-AUTH}
901
969
  ports:
902
970
  - "127.0.0.1:${AUTH_PORT:-3300}:80"
903
971
  networks:
@@ -921,9 +989,18 @@ services:
921
989
  # ------------------------------------------------------------------
922
990
  # Volumes
923
991
  # ------------------------------------------------------------------
992
+ # At-rest encryption (bug 5176aa4e): the named volumes below default to the
993
+ # local driver (plain ext4). For at-rest encryption of the relational/analytics
994
+ # data — matching the SQLCipher-encrypted memory store — mount the Docker data
995
+ # root (/var/lib/docker) on a LUKS-encrypted block device, or override
996
+ # PG_DATA_DEVICE / driver_opts to point these volumes at an encrypted device.
997
+ # See deploy/CUSTOMER-GUIDE.md > "Encryption at rest (optional)".
924
998
  volumes:
925
999
  postgres_data:
926
1000
  driver: local
1001
+ # WAL archive for point-in-time recovery (enabled via PG_ARCHIVE_MODE=on).
1002
+ pg_wal_archive:
1003
+ driver: local
927
1004
  clickhouse_data:
928
1005
  driver: local
929
1006
  clickhouse_logs:
@@ -55,6 +55,11 @@ export function generateEnv(options: GenerateEnvOptions): string {
55
55
  const gatewayWsAuthToken = randomSecret(RANDOM_SECRET_48);
56
56
 
57
57
  return joinEnvLines([
58
+ "# --- Domain ---",
59
+ "# Customer apex domain. Drives auth gateway templating (server_name, CORS,",
60
+ "# default redirect) and the GoTrue From address. Never falls back to askexe.com.",
61
+ `DOMAIN=${normalizedDomain}`,
62
+ "",
58
63
  "# --- Data Layer ---",
59
64
  `POSTGRES_USER=${POSTGRES_USER}`,
60
65
  `POSTGRES_PASSWORD=${randomSecret(RANDOM_SECRET_32)}`,
@@ -71,8 +76,21 @@ export function generateEnv(options: GenerateEnvOptions): string {
71
76
  "GOTRUE_API_PORT=9999",
72
77
  `GOTRUE_SITE_URL=https://crm.${normalizedDomain}`,
73
78
  `GOTRUE_EXTERNAL_URL=https://auth.${normalizedDomain}`,
79
+ "# SSO redirect allow-list (bug 66f8e10a): app origins the gateway may bounce",
80
+ "# users back to via ?redirect=. Required for unified SSO across crm/wiki/erp.",
81
+ `GOTRUE_URI_ALLOW_LIST=https://crm.${normalizedDomain},https://wiki.${normalizedDomain},https://erp.${normalizedDomain}`,
74
82
  "GOTRUE_DISABLE_SIGNUP=true",
75
83
  "GOTRUE_MAILER_AUTOCONFIRM=false",
84
+ "# Auth emails (confirm/reset/magic-link) send From this customer-domain",
85
+ "# address — not noreply@askexe.com (bug 133c9d5b). Configure SPF/DKIM/DMARC",
86
+ "# for this sender. SMTP stays off until SMTP_HOST is set.",
87
+ `SMTP_FROM=noreply@${normalizedDomain}`,
88
+ "# To enable verified email confirmation, set SMTP_HOST/PORT/USER/PASS below.",
89
+ "# MAILER_AUTOCONFIRM is already false, so once SMTP is live, ownership is verified.",
90
+ "SMTP_HOST=",
91
+ "SMTP_PORT=587",
92
+ "SMTP_USER=",
93
+ "SMTP_PASS=",
76
94
  "",
77
95
  "# --- CRM ---",
78
96
  `CRM_IMAGE_TAG=${CRM_IMAGE_TAG}`,
@@ -188,6 +206,10 @@ export function generateExampleEnv(): string {
188
206
  "# Copy to .env before deployment and replace every CHANGEME_* value.",
189
207
  "# Values under # SET_MANUALLY must be provided by the operator.",
190
208
  "",
209
+ "# --- Domain ---",
210
+ "# Customer apex domain. Drives auth gateway templating and GoTrue From address.",
211
+ "DOMAIN=CHANGEME_DOMAIN",
212
+ "",
191
213
  "# --- Data Layer ---",
192
214
  `POSTGRES_USER=${POSTGRES_USER}`,
193
215
  "POSTGRES_PASSWORD=CHANGEME_POSTGRES_PASSWORD",
@@ -204,8 +226,17 @@ export function generateExampleEnv(): string {
204
226
  "GOTRUE_API_PORT=9999",
205
227
  "GOTRUE_SITE_URL=https://crm.CHANGEME_DOMAIN",
206
228
  "GOTRUE_EXTERNAL_URL=https://auth.CHANGEME_DOMAIN",
229
+ "# SSO redirect allow-list (bug 66f8e10a) — app origins for unified SSO.",
230
+ "GOTRUE_URI_ALLOW_LIST=https://crm.CHANGEME_DOMAIN,https://wiki.CHANGEME_DOMAIN,https://erp.CHANGEME_DOMAIN",
207
231
  "GOTRUE_DISABLE_SIGNUP=true",
208
232
  "GOTRUE_MAILER_AUTOCONFIRM=false",
233
+ "# From address for auth emails — customer domain, not askexe.com (bug 133c9d5b).",
234
+ "SMTP_FROM=noreply@CHANGEME_DOMAIN",
235
+ "# To enable verified email confirmation, set SMTP_* below (MAILER_AUTOCONFIRM stays false).",
236
+ "SMTP_HOST=",
237
+ "SMTP_PORT=587",
238
+ "SMTP_USER=",
239
+ "SMTP_PASS=",
209
240
  "",
210
241
  "# --- CRM ---",
211
242
  `CRM_IMAGE_TAG=${CRM_IMAGE_TAG}`,
@@ -55,6 +55,7 @@ else
55
55
  info "Generating secrets inline..."
56
56
  gen() { openssl rand -hex "$1"; }
57
57
  cat > .env << ENVEOF
58
+ DOMAIN=${DOMAIN}
58
59
  POSTGRES_USER=exe
59
60
  POSTGRES_PASSWORD=$(gen 32)
60
61
  POSTGRES_DB=exedb
@@ -65,10 +66,18 @@ REDIS_PASSWORD=$(gen 32)
65
66
  GOTRUE_JWT_SECRET=$(gen 48)
66
67
  GOTRUE_SITE_URL=https://crm.${DOMAIN}
67
68
  GOTRUE_EXTERNAL_URL=https://auth.${DOMAIN}
68
- GOTRUE_DISABLE_SIGNUP=false
69
- GOTRUE_MAILER_AUTOCONFIRM=true
69
+ # Invite-only by default; never autoconfirm without an SMTP round-trip (bug 36c04fe3).
70
+ # Configure SMTP_HOST below and keep MAILER_AUTOCONFIRM=false to verify email ownership.
71
+ GOTRUE_DISABLE_SIGNUP=true
72
+ GOTRUE_MAILER_AUTOCONFIRM=false
70
73
  GOTRUE_EXTERNAL_EMAIL_ENABLED=true
71
74
  GOTRUE_EXTERNAL_PHONE_ENABLED=false
75
+ # Auth-email From address — customer domain, not askexe.com (bug 133c9d5b).
76
+ SMTP_FROM=noreply@${DOMAIN}
77
+ SMTP_HOST=
78
+ SMTP_PORT=587
79
+ SMTP_USER=
80
+ SMTP_PASS=
72
81
  IS_SIGN_UP_DISABLED=true
73
82
  AUTH_PASSWORD_ENABLED=true
74
83
  CRM_IMAGE_TAG=ghcr.io/askexe/exe-crm:v0.9.3
@@ -0,0 +1,28 @@
1
+ import "./chunk-SH45SJQW.js";
2
+ import {
3
+ cleanupSessionMarkers,
4
+ clearActiveAgent,
5
+ getActiveAgent,
6
+ getAllActiveAgents,
7
+ resolveActiveAgentFromTmuxSession,
8
+ writeActiveAgent
9
+ } from "./chunk-7YEOKPZ6.js";
10
+ import "./chunk-CVYC6DUW.js";
11
+ import "./chunk-GJV3WDWM.js";
12
+ import "./chunk-LCOPVYU2.js";
13
+ import "./chunk-2I23RPSI.js";
14
+ import "./chunk-LJONNOFH.js";
15
+ import "./chunk-PNQDP3OA.js";
16
+ import "./chunk-7HLWBYH7.js";
17
+ import "./chunk-FXU7JOXK.js";
18
+ import "./chunk-5P3HOBZX.js";
19
+ import "./chunk-LYH5HE24.js";
20
+ import "./chunk-MLKGABMK.js";
21
+ export {
22
+ cleanupSessionMarkers,
23
+ clearActiveAgent,
24
+ getActiveAgent,
25
+ getAllActiveAgents,
26
+ resolveActiveAgentFromTmuxSession,
27
+ writeActiveAgent
28
+ };
@@ -0,0 +1,27 @@
1
+ import {
2
+ cleanupSessionMarkers,
3
+ clearActiveAgent,
4
+ getActiveAgent,
5
+ getAllActiveAgents,
6
+ resolveActiveAgentFromTmuxSession,
7
+ writeActiveAgent
8
+ } from "./chunk-CSXNLHUU.js";
9
+ import "./chunk-CVYC6DUW.js";
10
+ import "./chunk-GJV3WDWM.js";
11
+ import "./chunk-MUQ46NLH.js";
12
+ import "./chunk-2I23RPSI.js";
13
+ import "./chunk-HNDG5ZDJ.js";
14
+ import "./chunk-PNQDP3OA.js";
15
+ import "./chunk-7HLWBYH7.js";
16
+ import "./chunk-FXU7JOXK.js";
17
+ import "./chunk-R36FAN53.js";
18
+ import "./chunk-LYH5HE24.js";
19
+ import "./chunk-MLKGABMK.js";
20
+ export {
21
+ cleanupSessionMarkers,
22
+ clearActiveAgent,
23
+ getActiveAgent,
24
+ getAllActiveAgents,
25
+ resolveActiveAgentFromTmuxSession,
26
+ writeActiveAgent
27
+ };
@@ -0,0 +1,27 @@
1
+ import {
2
+ cleanupSessionMarkers,
3
+ clearActiveAgent,
4
+ getActiveAgent,
5
+ getAllActiveAgents,
6
+ resolveActiveAgentFromTmuxSession,
7
+ writeActiveAgent
8
+ } from "./chunk-7YEOKPZ6.js";
9
+ import "./chunk-CVYC6DUW.js";
10
+ import "./chunk-GJV3WDWM.js";
11
+ import "./chunk-LCOPVYU2.js";
12
+ import "./chunk-2I23RPSI.js";
13
+ import "./chunk-LJONNOFH.js";
14
+ import "./chunk-PNQDP3OA.js";
15
+ import "./chunk-7HLWBYH7.js";
16
+ import "./chunk-FXU7JOXK.js";
17
+ import "./chunk-5P3HOBZX.js";
18
+ import "./chunk-LYH5HE24.js";
19
+ import "./chunk-MLKGABMK.js";
20
+ export {
21
+ cleanupSessionMarkers,
22
+ clearActiveAgent,
23
+ getActiveAgent,
24
+ getAllActiveAgents,
25
+ resolveActiveAgentFromTmuxSession,
26
+ writeActiveAgent
27
+ };
@@ -0,0 +1,28 @@
1
+ import "./chunk-SH45SJQW.js";
2
+ import {
3
+ cleanupSessionMarkers,
4
+ clearActiveAgent,
5
+ getActiveAgent,
6
+ getAllActiveAgents,
7
+ resolveActiveAgentFromTmuxSession,
8
+ writeActiveAgent
9
+ } from "./chunk-CSXNLHUU.js";
10
+ import "./chunk-CVYC6DUW.js";
11
+ import "./chunk-GJV3WDWM.js";
12
+ import "./chunk-MUQ46NLH.js";
13
+ import "./chunk-2I23RPSI.js";
14
+ import "./chunk-HNDG5ZDJ.js";
15
+ import "./chunk-PNQDP3OA.js";
16
+ import "./chunk-7HLWBYH7.js";
17
+ import "./chunk-FXU7JOXK.js";
18
+ import "./chunk-R36FAN53.js";
19
+ import "./chunk-LYH5HE24.js";
20
+ import "./chunk-MLKGABMK.js";
21
+ export {
22
+ cleanupSessionMarkers,
23
+ clearActiveAgent,
24
+ getActiveAgent,
25
+ getAllActiveAgents,
26
+ resolveActiveAgentFromTmuxSession,
27
+ writeActiveAgent
28
+ };
@@ -0,0 +1,25 @@
1
+ import {
2
+ clean,
3
+ extractGoalCandidates,
4
+ inferIntention,
5
+ inferOntologyEventType,
6
+ inferOutcome,
7
+ inferSemanticLabel,
8
+ insertOntologyForBatch,
9
+ insertOntologyForMemory,
10
+ ontologyPayload,
11
+ stableId
12
+ } from "./chunk-M46T2E3A.js";
13
+ import "./chunk-MLKGABMK.js";
14
+ export {
15
+ clean,
16
+ extractGoalCandidates,
17
+ inferIntention,
18
+ inferOntologyEventType,
19
+ inferOutcome,
20
+ inferSemanticLabel,
21
+ insertOntologyForBatch,
22
+ insertOntologyForMemory,
23
+ ontologyPayload,
24
+ stableId
25
+ };
@@ -0,0 +1,25 @@
1
+ import {
2
+ clean,
3
+ extractGoalCandidates,
4
+ inferIntention,
5
+ inferOntologyEventType,
6
+ inferOutcome,
7
+ inferSemanticLabel,
8
+ insertOntologyForBatch,
9
+ insertOntologyForMemory,
10
+ ontologyPayload,
11
+ stableId
12
+ } from "./chunk-JXOXGBC2.js";
13
+ import "./chunk-MLKGABMK.js";
14
+ export {
15
+ clean,
16
+ extractGoalCandidates,
17
+ inferIntention,
18
+ inferOntologyEventType,
19
+ inferOutcome,
20
+ inferSemanticLabel,
21
+ insertOntologyForBatch,
22
+ insertOntologyForMemory,
23
+ ontologyPayload,
24
+ stableId
25
+ };