@askexenow/exe-os 0.9.341 → 0.9.342

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 (419) hide show
  1. package/README.md +159 -196
  2. package/deploy/compose/.env.customer.example +1 -0
  3. package/deploy/compose/.env.example +1 -0
  4. package/deploy/compose/docker-compose.yml +13 -4
  5. package/deploy/compose/generate-env.ts +4 -0
  6. package/dist/{active-agent-AIQP4DFL.js → active-agent-PVGE57FY.js} +5 -5
  7. package/dist/{active-agent-LW45DSJ4.js → active-agent-TNIO6IY3.js} +5 -5
  8. package/dist/{agentic-ontology-RVUNRCQY.js → agentic-ontology-3FXYMHKW.js} +1 -1
  9. package/dist/{backfill-gate-J7UXFNXU.js → backfill-gate-65LSYVE5.js} +3 -3
  10. package/dist/{backfill-metadata-ZSDJ4O2T.js → backfill-metadata-ZSMZC45J.js} +8 -8
  11. package/dist/{background-jobs-STURKDCS.js → background-jobs-EXR5RVGG.js} +3 -3
  12. package/dist/{backup-verify-ZAJLEL4X.js → backup-verify-3Y2FHGZU.js} +4 -4
  13. package/dist/{behaviors-EO7KCP3H.js → behaviors-KYRB3NGJ.js} +9 -9
  14. package/dist/bin/age-ontology-load.js +3 -3
  15. package/dist/bin/agentic-ontology-backfill.js +10 -10
  16. package/dist/bin/agentic-reflection-backfill.js +11 -11
  17. package/dist/bin/agentic-semantic-label.js +10 -10
  18. package/dist/bin/backfill-conversations.js +10 -10
  19. package/dist/bin/backfill-responses.js +10 -10
  20. package/dist/bin/backfill-vectors.js +14 -14
  21. package/dist/bin/bulk-sync-postgres.js +19 -19
  22. package/dist/bin/cc-doctor.js +10 -8
  23. package/dist/bin/cleanup-stale-review-tasks.js +25 -23
  24. package/dist/bin/cli.js +79 -25
  25. package/dist/bin/customer-readiness.js +1 -1
  26. package/dist/bin/deferred-daemon-restart.js +98 -92
  27. package/dist/bin/exe-agent-config.js +9 -8
  28. package/dist/bin/exe-agent.js +17 -17
  29. package/dist/bin/exe-assign.js +12 -12
  30. package/dist/bin/exe-boot.js +200 -67
  31. package/dist/bin/exe-call.js +7 -7
  32. package/dist/bin/exe-cloud.js +20 -20
  33. package/dist/bin/exe-config-dump.js +9 -8
  34. package/dist/bin/exe-dispatch.js +25 -23
  35. package/dist/bin/exe-doctor.js +10 -6
  36. package/dist/bin/exe-export-behaviors.js +11 -11
  37. package/dist/bin/exe-forget.js +12 -10
  38. package/dist/bin/exe-gateway.js +15 -10
  39. package/dist/bin/exe-grant.js +5 -5
  40. package/dist/bin/exe-healthcheck.js +14 -8
  41. package/dist/bin/exe-heartbeat.js +28 -27
  42. package/dist/bin/exe-kill.js +30 -28
  43. package/dist/bin/exe-launch-agent.js +128 -67
  44. package/dist/bin/exe-memory-reads.js +257 -0
  45. package/dist/bin/exe-new-employee.js +12 -11
  46. package/dist/bin/exe-pending-messages.js +26 -24
  47. package/dist/bin/exe-pending-notifications.js +25 -23
  48. package/dist/bin/exe-pending-reviews.js +25 -23
  49. package/dist/bin/exe-rename.js +7 -7
  50. package/dist/bin/exe-review.js +29 -27
  51. package/dist/bin/exe-search.js +11 -9
  52. package/dist/bin/exe-session-cleanup.js +115 -85
  53. package/dist/bin/exe-settings.js +24 -23
  54. package/dist/bin/exe-start-codex.js +163 -41
  55. package/dist/bin/exe-start-opencode.js +15 -15
  56. package/dist/bin/exe-status.js +26 -24
  57. package/dist/bin/exe-support.js +5 -5
  58. package/dist/bin/exe-team.js +5 -5
  59. package/dist/bin/exe-timers.js +32 -213
  60. package/dist/bin/exe-watchdog.js +6 -5
  61. package/dist/bin/git-sweep.js +26 -24
  62. package/dist/bin/graph-backfill.js +11 -11
  63. package/dist/bin/graph-export.js +9 -9
  64. package/dist/bin/import-history.js +13 -13
  65. package/dist/bin/install.js +103 -97
  66. package/dist/bin/intercom-check.js +4 -4
  67. package/dist/bin/mcp-sessions.js +2 -2
  68. package/dist/bin/orchestration-metrics.js +6 -6
  69. package/dist/bin/postgres-agentic-reflection-backfill.js +5 -5
  70. package/dist/bin/postgres-agentic-semantic-backfill.js +7 -7
  71. package/dist/bin/pre-publish.js +5 -3
  72. package/dist/bin/reconcile-backlog.js +2 -2
  73. package/dist/bin/registry-proxy.js +1 -1
  74. package/dist/bin/scan-tasks.js +25 -23
  75. package/dist/bin/setup.js +6 -5
  76. package/dist/bin/shard-migrate.js +9 -9
  77. package/dist/bin/stack-update.js +6 -6
  78. package/dist/bin/update.js +1 -1
  79. package/dist/bin/vps-health-gate.js +1 -1
  80. package/dist/{boot-generation-GSMPJOWM.js → boot-generation-BL2ISK4U.js} +5 -5
  81. package/dist/boot-review-sections-DBMQJT5N.js +107 -0
  82. package/dist/branch-hygiene-TZWK6QCF.js +224 -0
  83. package/dist/{branding-JTEOF4ZV.js → branding-DVXBGVDH.js} +3 -3
  84. package/dist/{browser-session-store-CXQMOSEC.js → browser-session-store-B2NR3LIX.js} +2 -1
  85. package/dist/{capability-cards-OBYQNAKZ.js → capability-cards-DN5UIKVN.js} +4 -4
  86. package/dist/{capacity-monitor-MG3FTUD5.js → capacity-monitor-ZG5GGFR2.js} +26 -24
  87. package/dist/{catchup-brief-BVJOF3GL.js → catchup-brief-D6HH6DWS.js} +31 -28
  88. package/dist/{chunk-Q5AIPSSC.js → chunk-25X4JD2V.js} +10 -6
  89. package/dist/{chunk-6MVI4QH2.js → chunk-2KZNGDSW.js} +1 -1
  90. package/dist/{chunk-WH7XN5ER.js → chunk-2WAVZ5UJ.js} +1 -1
  91. package/dist/{chunk-PTJBWC77.js → chunk-2ZYO73KO.js} +4 -3
  92. package/dist/{chunk-CLAYNAXC.js → chunk-3EUMUSLE.js} +1 -1
  93. package/dist/{chunk-BVV6NHKQ.js → chunk-3SW4OEHB.js} +5 -5
  94. package/dist/{task-enforcement-X5QVL6RE.js → chunk-4CMVFVFC.js} +173 -69
  95. package/dist/{chunk-2YCFNBC4.js → chunk-4J4PMPXZ.js} +3 -2
  96. package/dist/{chunk-EDOO23B2.js → chunk-4N2NRGCM.js} +2 -2
  97. package/dist/chunk-4QCFFW2H.js +378 -0
  98. package/dist/{chunk-6MVC43X7.js → chunk-4VSV5P4D.js} +2 -2
  99. package/dist/{chunk-HJX6NCJF.js → chunk-4ZCD2UWW.js} +39 -10
  100. package/dist/{chunk-C445WRUX.js → chunk-5ERDIOV3.js} +2 -2
  101. package/dist/chunk-5H47VHB7.js +30 -0
  102. package/dist/{chunk-BJ23BNED.js → chunk-5TY4FPH6.js} +1 -1
  103. package/dist/{chunk-WD55PEBM.js → chunk-6CH3TPHR.js} +3 -3
  104. package/dist/{chunk-TIXTHUVJ.js → chunk-6WQ3NNCE.js} +3 -3
  105. package/dist/{chunk-7LF5DS3A.js → chunk-6XWTQUO4.js} +1 -1
  106. package/dist/chunk-76CJBM36.js +88 -0
  107. package/dist/{chunk-NFBW7N4D.js → chunk-7CTRGNLW.js} +2 -2
  108. package/dist/{chunk-ITMEE7PQ.js → chunk-7V4JADD6.js} +3 -3
  109. package/dist/{chunk-RMOBQ6A5.js → chunk-AD2VCHSS.js} +1 -1
  110. package/dist/{chunk-DNVFWFYF.js → chunk-AJYCFKJR.js} +1 -1
  111. package/dist/chunk-AM7S2TY6.js +54 -0
  112. package/dist/{chunk-RWSLVYTE.js → chunk-AOHXREB7.js} +295 -67
  113. package/dist/{chunk-DGGDUKH6.js → chunk-ASAFVDVR.js} +1 -1
  114. package/dist/{chunk-NTI22F3R.js → chunk-BUCXNV32.js} +1 -1
  115. package/dist/{chunk-SHIICYJW.js → chunk-BYTDMAGB.js} +4 -2
  116. package/dist/{chunk-32SXNM3G.js → chunk-C5QAPURN.js} +1 -1
  117. package/dist/{chunk-BMHQPIJ2.js → chunk-CE7F6RHG.js} +585 -75
  118. package/dist/{chunk-YWQMWFYR.js → chunk-CNVBKDEY.js} +21 -15
  119. package/dist/{chunk-KPIN44GZ.js → chunk-CWXVH7WV.js} +1 -1
  120. package/dist/chunk-D74XYSA3.js +621 -0
  121. package/dist/{chunk-A47MXY2I.js → chunk-EQHQF5IM.js} +50 -32
  122. package/dist/{chunk-YHUNDGVV.js → chunk-EUS4QUKP.js} +1 -1
  123. package/dist/{chunk-6D2PI4QD.js → chunk-EV46QTD3.js} +1 -1
  124. package/dist/{chunk-N7A5D25S.js → chunk-F27XXN6C.js} +1 -1
  125. package/dist/{chunk-XQNNB5GY.js → chunk-F55P3H4S.js} +37 -2
  126. package/dist/{chunk-MWZFF3Q7.js → chunk-F5O7V7UK.js} +1 -1
  127. package/dist/{chunk-MC4ATFJV.js → chunk-FPFPLPUY.js} +6 -6
  128. package/dist/{chunk-UU4UINUX.js → chunk-G4RGKBCA.js} +2 -2
  129. package/dist/{chunk-HAZO7TRD.js → chunk-G5T6KDG4.js} +1 -1
  130. package/dist/{chunk-TWXZM34M.js → chunk-GBTTBXAF.js} +6 -6
  131. package/dist/{chunk-LA2Z6RMS.js → chunk-GDIJE6D7.js} +1 -1
  132. package/dist/{chunk-4QSJVMMT.js → chunk-GG5NDQNN.js} +2 -2
  133. package/dist/{chunk-6BQG7EKO.js → chunk-GJ26DULE.js} +2 -2
  134. package/dist/chunk-GL57PO3K.js +104 -0
  135. package/dist/chunk-GWDSB25T.js +6 -0
  136. package/dist/{chunk-HSYJ6DZ2.js → chunk-H6BV5TKD.js} +39 -24
  137. package/dist/{chunk-HCJCW7X4.js → chunk-H7I47RS5.js} +34 -1
  138. package/dist/{chunk-GFDGDFBF.js → chunk-HA5R6USD.js} +22 -5
  139. package/dist/{chunk-L2YGXJGF.js → chunk-HAF2DJYV.js} +3 -3
  140. package/dist/chunk-HJ447YER.js +224 -0
  141. package/dist/{chunk-6QW6JHRE.js → chunk-HV4KESRY.js} +59 -32
  142. package/dist/{chunk-BJOBR6P2.js → chunk-I26FWCSP.js} +216 -9
  143. package/dist/{chunk-X2FHTDIU.js → chunk-IBYL4DHM.js} +1 -1
  144. package/dist/{chunk-JCBKARSK.js → chunk-IOEUAQWP.js} +1 -1
  145. package/dist/{chunk-2UGGBIDL.js → chunk-JGIPOUIK.js} +3 -3
  146. package/dist/{chunk-LLU6WZLK.js → chunk-JLZ4RYSD.js} +2 -2
  147. package/dist/{chunk-WWNQFOSP.js → chunk-JMYHW3AL.js} +2 -2
  148. package/dist/{chunk-KP4PY2Z2.js → chunk-JPUZPAAF.js} +4 -4
  149. package/dist/{chunk-4LWV633D.js → chunk-JTBIS4R5.js} +1 -1
  150. package/dist/{chunk-PPZOWQHP.js → chunk-K7KFGDWF.js} +1 -1
  151. package/dist/{chunk-HNLXMD2V.js → chunk-KGWRTRKC.js} +2 -2
  152. package/dist/{chunk-IB336P52.js → chunk-KP3U5QGJ.js} +1 -1
  153. package/dist/{chunk-OUEFW4RK.js → chunk-KW2SD2FL.js} +2 -2
  154. package/dist/{chunk-2P4WJNN5.js → chunk-KWZMQACA.js} +11 -7
  155. package/dist/{chunk-ATKW3SYL.js → chunk-L2R3LN2P.js} +1 -1
  156. package/dist/{chunk-IELUDZAA.js → chunk-L4A5DL6Z.js} +3 -3
  157. package/dist/{chunk-2C455MU3.js → chunk-LU2FALL6.js} +3 -3
  158. package/dist/{chunk-LOBCQXV5.js → chunk-MKYFAKDW.js} +4 -4
  159. package/dist/{chunk-3BRVLPPA.js → chunk-MOPUCPXK.js} +4 -0
  160. package/dist/{chunk-BR4423AS.js → chunk-MR6LHP4F.js} +1 -1
  161. package/dist/chunk-MVYB76QG.js +341 -0
  162. package/dist/{chunk-ZNE6H2JO.js → chunk-MZM6EJCU.js} +4 -4
  163. package/dist/{chunk-FOV57K47.js → chunk-N7QJKQMX.js} +258 -14
  164. package/dist/{chunk-AYLNJGCS.js → chunk-NBZL5CGA.js} +93 -12
  165. package/dist/{chunk-YLQXP7T7.js → chunk-NN2B2QKU.js} +1 -1
  166. package/dist/chunk-NX5INHHG.js +40 -0
  167. package/dist/{chunk-B75BOKEI.js → chunk-NXUSDL37.js} +2 -2
  168. package/dist/{chunk-TPHCZDE3.js → chunk-O5V57XYE.js} +1 -1
  169. package/dist/chunk-O7LWR36Z.js +269 -0
  170. package/dist/{chunk-BV6GBSRP.js → chunk-OLMQ4UOF.js} +42 -10
  171. package/dist/{chunk-UIU2DGRV.js → chunk-OTF44GXL.js} +4 -4
  172. package/dist/{chunk-GOGSWXNZ.js → chunk-OZEBAGKR.js} +277 -137
  173. package/dist/{chunk-NDSNM5OH.js → chunk-P5HIWY2E.js} +1 -1
  174. package/dist/{chunk-MJB5ZFQM.js → chunk-PDWS3E22.js} +55 -4
  175. package/dist/{chunk-4FJZ6SO7.js → chunk-PPCDBE6Z.js} +1 -1
  176. package/dist/{chunk-7SEC2AG5.js → chunk-PQIDGXSG.js} +13 -4
  177. package/dist/chunk-PWUFMX75.js +186 -0
  178. package/dist/{chunk-GPW32HVB.js → chunk-QDGZJ653.js} +3 -3
  179. package/dist/{chunk-CYA5S5OD.js → chunk-QOO5RW3K.js} +6 -5
  180. package/dist/{chunk-IXBIVKWZ.js → chunk-QQ4E2RYW.js} +95 -18
  181. package/dist/{chunk-2WMTTIAZ.js → chunk-QRYVCDWS.js} +2 -2
  182. package/dist/{chunk-Z42MXYWW.js → chunk-QWVXN224.js} +110 -28
  183. package/dist/{chunk-XSMRR4IW.js → chunk-QYZJHTNE.js} +26 -27
  184. package/dist/{chunk-I7ECEP3W.js → chunk-R2NN3JKH.js} +43 -6
  185. package/dist/{chunk-B7CUBLF7.js → chunk-RACAOE2Z.js} +13 -13
  186. package/dist/{chunk-5RACW3LX.js → chunk-RAXVPNMR.js} +1 -1
  187. package/dist/{chunk-CMR64RYM.js → chunk-RHWZUUS4.js} +17 -17
  188. package/dist/{chunk-RNAYCUNM.js → chunk-S3THSOWV.js} +1 -1
  189. package/dist/{chunk-U2MREVXQ.js → chunk-S7QUM2UK.js} +2 -2
  190. package/dist/{chunk-SSTLTIF3.js → chunk-SKGMF2SO.js} +25 -2
  191. package/dist/{chunk-J6SEDDOR.js → chunk-SQKXKV2Y.js} +2 -2
  192. package/dist/{chunk-DPFQ2WQX.js → chunk-TLT7NZCW.js} +4 -4
  193. package/dist/chunk-TTCUG2CF.js +91 -0
  194. package/dist/{chunk-W6K4XB6G.js → chunk-UEA3LXOB.js} +1 -1
  195. package/dist/{chunk-WNKVKNOM.js → chunk-UNXQBELK.js} +1 -1
  196. package/dist/{chunk-KKOLHBNC.js → chunk-UP75Z5X7.js} +904 -167
  197. package/dist/{chunk-Y3S4H77G.js → chunk-USSB56WK.js} +1 -1
  198. package/dist/{chunk-PVIH3ZGV.js → chunk-UUEKJDK6.js} +90 -10
  199. package/dist/{chunk-T2PYVVZ5.js → chunk-UUQBZPJJ.js} +1 -1
  200. package/dist/{chunk-32YHCHWW.js → chunk-V3EEVY4L.js} +1 -1
  201. package/dist/{chunk-2IWBY7XK.js → chunk-VPZHJCKW.js} +2 -2
  202. package/dist/chunk-VRAQTFD6.js +265 -0
  203. package/dist/{chunk-EDH54E5A.js → chunk-VSRPS3J7.js} +14 -14
  204. package/dist/{chunk-5ZNY7IZI.js → chunk-WMESXBJM.js} +37 -3
  205. package/dist/{chunk-54QCG45Y.js → chunk-WOYADZF5.js} +56 -5
  206. package/dist/{chunk-7Y5UDEVM.js → chunk-WZHZCDDO.js} +6 -5
  207. package/dist/{chunk-3NGZ4PL7.js → chunk-X2Q5NLUL.js} +11 -2
  208. package/dist/{chunk-CCIEIRV2.js → chunk-X33NYQYJ.js} +2 -2
  209. package/dist/{chunk-K6KRBXQP.js → chunk-XHK3FS3W.js} +3 -2
  210. package/dist/{chunk-AP455LBW.js → chunk-XZXBB3TN.js} +2 -2
  211. package/dist/{chunk-JSKBHUR7.js → chunk-YCANDMI2.js} +2 -2
  212. package/dist/{chunk-YIIME2OW.js → chunk-YLXTKI6M.js} +1 -1
  213. package/dist/{chunk-LEJ25726.js → chunk-YTCFACP4.js} +650 -434
  214. package/dist/{chunk-HUSVERE6.js → chunk-Z6RSN7KS.js} +7 -6
  215. package/dist/{cleanup-graph-garbage-MXQ4Q2MA.js → cleanup-graph-garbage-XWUFAMFO.js} +8 -8
  216. package/dist/{co-activation-QI5BK4RT.js → co-activation-ZCHPLLP6.js} +4 -4
  217. package/dist/{co-occurrence-BYSQNZSV.js → co-occurrence-KG3LKALN.js} +6 -6
  218. package/dist/{code-context-index-BNBHDXHW.js → code-context-index-WSOJQ72R.js} +5 -5
  219. package/dist/{content-extractor-JRJDNIHP.js → content-extractor-NXYNEF5K.js} +2 -2
  220. package/dist/{conversation-entity-extractor-FPAMTL3C.js → conversation-entity-extractor-D3EFTLT4.js} +2 -2
  221. package/dist/{conversation-wiki-populator-WU4HEQ7C.js → conversation-wiki-populator-WQN3IUU6.js} +1 -1
  222. package/dist/{crdt-sync-ETPKNBCU.js → crdt-sync-4PFGPZXV.js} +8 -1
  223. package/dist/{crm-webhook-M566ZMZS.js → crm-webhook-II7Z45Q6.js} +2 -2
  224. package/dist/cto-delegation-gate-JWWOJPNC.js +669 -0
  225. package/dist/{daemon-auth-7IFSV5FG.js → daemon-auth-3FEAHFWC.js} +5 -3
  226. package/dist/{daemon-orchestration-XV5GN73R.js → daemon-orchestration-FX4XZDR5.js} +45 -26
  227. package/dist/{daemon-ready-RKKB4P6K.js → daemon-ready-4JTSFKAY.js} +1 -1
  228. package/dist/{daemon-ready-signal-WKEJQNRA.js → daemon-ready-signal-LPAZWQOV.js} +3 -1
  229. package/dist/daemon-restart-circuit-breaker-PEGEIP6H.js +35 -0
  230. package/dist/daemon-timer-report-NM44WQRH.js +25 -0
  231. package/dist/{db-backup-MX2G3CEK.js → db-backup-W2QFSYQC.js} +15 -5
  232. package/dist/{db-restore-events-JVEEP52Z.js → db-restore-events-MQ2DBGEQ.js} +2 -2
  233. package/dist/dispatch-ack-VYH3ONSS.js +27 -0
  234. package/dist/{doc-graph-extractor-LR5KMPH7.js → doc-graph-extractor-F6ODFIID.js} +6 -6
  235. package/dist/{documents-FA6N7QDA.js → documents-23WX2FPQ.js} +12 -12
  236. package/dist/dreaming-NWD22UQ5.js +46 -0
  237. package/dist/{exe-drift-TUKTCXZE.js → exe-drift-CW72FBGE.js} +5 -5
  238. package/dist/{exe-export-ZLHBXMZC.js → exe-export-AUJ7CV7G.js} +11 -11
  239. package/dist/{exe-import-VVKBZWSA.js → exe-import-JX4I52VE.js} +11 -11
  240. package/dist/{exe-key-QJXFBF6G.js → exe-key-2N6LY2BU.js} +242 -228
  241. package/dist/{exe-org-BGZNNE4H.js → exe-org-X4CSNCKS.js} +3 -3
  242. package/dist/{exe-snapshot-JRLUO645.js → exe-snapshot-XZ7FVCYZ.js} +30 -28
  243. package/dist/{fast-db-init-JKJEEHUI.js → fast-db-init-4CWHSOOR.js} +1 -1
  244. package/dist/{founder-context-HWPLMZVR.js → founder-context-7L3CFPYN.js} +4 -4
  245. package/dist/gateway/index.js +25 -25
  246. package/dist/{gateway-client-GRBOJQYC.js → gateway-client-7LMZKHTH.js} +1 -1
  247. package/dist/git-main-guard-UZP3KXYI.js +39 -0
  248. package/dist/{git-staleness-X5XZONX3.js → git-staleness-CI2R4QOJ.js} +4 -4
  249. package/dist/{global-procedures-VIIVWB6R.js → global-procedures-XQX3LUH6.js} +6 -6
  250. package/dist/{graph-auto-extract-HCQQF5AG.js → graph-auto-extract-OURWMGBS.js} +6 -6
  251. package/dist/{graph-rag-WAK2BRJH.js → graph-rag-JZZAB7PC.js} +2 -2
  252. package/dist/{hook-integrity-WURH6DS3.js → hook-integrity-XY47IM7G.js} +1 -1
  253. package/dist/hook-prefetch-PHRRKY4C.js +137 -0
  254. package/dist/hooks/bug-report-worker.js +31 -27
  255. package/dist/hooks/codex-stop-task-finalizer.js +31 -27
  256. package/dist/hooks/commit-complete.js +28 -26
  257. package/dist/hooks/error-recall.js +12 -11
  258. package/dist/hooks/exe-heartbeat-hook.js +6 -6
  259. package/dist/hooks/ingest-worker.js +11 -11
  260. package/dist/hooks/ingest.js +18 -18
  261. package/dist/hooks/instructions-loaded.js +7 -7
  262. package/dist/hooks/manifest.json +20 -20
  263. package/dist/hooks/notification.js +7 -7
  264. package/dist/hooks/post-compact.js +27 -25
  265. package/dist/hooks/post-tool-combined.js +12 -12
  266. package/dist/hooks/pre-compact.js +28 -26
  267. package/dist/hooks/pre-tool-use.js +179 -46
  268. package/dist/hooks/prompt-submit.js +323 -272
  269. package/dist/hooks/session-end.js +34 -32
  270. package/dist/hooks/session-start.js +28 -21
  271. package/dist/hooks/stop.js +34 -32
  272. package/dist/hooks/subagent-stop.js +27 -25
  273. package/dist/hooks/summary-worker.js +35 -33
  274. package/dist/index.js +40 -38
  275. package/dist/{installer-6IFVEQI4.js → installer-G3JAO3NT.js} +9 -9
  276. package/dist/{installer-NX2CLNV5.js → installer-JND3RJ6Q.js} +9 -9
  277. package/dist/{installer-T2LGHZKL.js → installer-L7EVH5U5.js} +9 -9
  278. package/dist/{intercom-queue-KYHXXZCQ.js → intercom-queue-ZFEQALR3.js} +24 -22
  279. package/dist/{key-backup-status-TNEHXA2X.js → key-backup-status-LOSMVATJ.js} +2 -2
  280. package/dist/lib/agent-config.js +4 -3
  281. package/dist/lib/cloud-sync.js +19 -19
  282. package/dist/lib/config.js +2 -2
  283. package/dist/lib/consolidation.js +11 -11
  284. package/dist/lib/crypto.js +3 -3
  285. package/dist/lib/database.js +6 -4
  286. package/dist/lib/db-daemon-client.js +5 -5
  287. package/dist/lib/db-read-worker-client.js +9 -3
  288. package/dist/lib/db.js +6 -4
  289. package/dist/lib/device-registry.js +3 -3
  290. package/dist/lib/embed-worker.js +2 -2
  291. package/dist/lib/embedder.js +5 -5
  292. package/dist/lib/employee-templates.js +7 -7
  293. package/dist/lib/employees.js +10 -4
  294. package/dist/lib/exe-daemon-client.js +4 -4
  295. package/dist/lib/exe-daemon.js +588 -164
  296. package/dist/lib/hybrid-search.js +11 -9
  297. package/dist/lib/identity.js +4 -4
  298. package/dist/lib/keychain.js +1 -1
  299. package/dist/lib/license.js +4 -4
  300. package/dist/lib/messaging.js +27 -23
  301. package/dist/lib/post-tool-memory.js +3 -3
  302. package/dist/lib/registry-proxy.js +1 -1
  303. package/dist/lib/reminders.js +15 -7
  304. package/dist/lib/schedules.js +9 -9
  305. package/dist/lib/session-registry.js +6 -6
  306. package/dist/lib/skill-learning.js +10 -10
  307. package/dist/lib/status-brief.js +4 -4
  308. package/dist/lib/store.js +8 -8
  309. package/dist/lib/task-router.js +5 -5
  310. package/dist/lib/tasks.js +28 -24
  311. package/dist/lib/tmux-routing.js +55 -24
  312. package/dist/lib/tmux-status.js +9 -3
  313. package/dist/lib/tmux-transport.js +1 -1
  314. package/dist/lib/token-spend.js +5 -5
  315. package/dist/lib/transport.js +2 -2
  316. package/dist/lib/ws-client.js +1 -1
  317. package/dist/{license-gate-MGDR4YNI.js → license-gate-QTRQHV4F.js} +5 -5
  318. package/dist/{license-sync-UWE6GEB4.js → license-sync-N3UJFWAW.js} +4 -4
  319. package/dist/mcp/register-tools.js +97 -91
  320. package/dist/mcp/server.js +99 -93
  321. package/dist/mcp/tools/complete-reminder.js +6 -6
  322. package/dist/mcp/tools/create-reminder.js +6 -6
  323. package/dist/mcp/tools/create-task.js +36 -27
  324. package/dist/mcp/tools/deactivate-behavior.js +11 -11
  325. package/dist/mcp/tools/list-reminders.js +6 -6
  326. package/dist/mcp/tools/list-tasks.js +34 -28
  327. package/dist/mcp/tools/send-message.js +27 -25
  328. package/dist/mcp/tools/update-task.js +33 -27
  329. package/dist/{mcp-http-config-RQLYEPTL.js → mcp-http-config-BDL36JZ3.js} +6 -6
  330. package/dist/{mcp-port-config-FFAMMLLE.js → mcp-port-config-6HYY6J7K.js} +2 -2
  331. package/dist/mcp-session-identity-T7H2EKFQ.js +177 -0
  332. package/dist/{memory-cards-VYQ5DPMR.js → memory-cards-ZRDW7QBX.js} +8 -8
  333. package/dist/{memory-graph-extractor-GX2HNYLU.js → memory-graph-extractor-QLXDMHRS.js} +7 -7
  334. package/dist/{memory-poisoning-defense-TX7627BD.js → memory-poisoning-defense-HJTXYCWH.js} +4 -4
  335. package/dist/{memory-pressure-watchdog-MLNNH26B.js → memory-pressure-watchdog-HN5X7AVN.js} +75 -36
  336. package/dist/{memory-queue-X2CSEAKE.js → memory-queue-2UOOF27L.js} +5 -3
  337. package/dist/{memory-queue-client-YRL6XTGU.js → memory-queue-client-O5U6F6XP.js} +6 -6
  338. package/dist/{memory-reflection-KIGEFSI4.js → memory-reflection-WVNFBJAA.js} +4 -4
  339. package/dist/{monitor-grants-RZOVSYVO.js → monitor-grants-E3ELDEWD.js} +5 -5
  340. package/dist/{monitor-identity-MOXISYNG.js → monitor-identity-GLFZSEAH.js} +2 -2
  341. package/dist/{notification-ledger-B6AVEGMV.js → notification-ledger-SZEPGJQ7.js} +25 -23
  342. package/dist/{notifications-DWXV7SVL.js → notifications-4UT53CDG.js} +24 -22
  343. package/dist/{orchestration-events-ZG7O4HRY.js → orchestration-events-WV4NWKZH.js} +5 -5
  344. package/dist/{orchestration-phase-CXRCBCK7.js → orchestration-phase-AWBXPO52.js} +3 -3
  345. package/dist/orchestrator-UAC3RW2T.js +47 -0
  346. package/dist/{pipeline-router-RTLAGZTA.js → pipeline-router-LM53NMWJ.js} +5 -5
  347. package/dist/{plan-limits-WLQZTCSF.js → plan-limits-2FEY2GOS.js} +7 -7
  348. package/dist/platform-procedures-X5DFJFV7.js +13 -0
  349. package/dist/{preferences-TYTGDXQZ.js → preferences-TWIXZBKS.js} +2 -2
  350. package/dist/{project-boot-6CGQ3EAH.js → project-boot-4NUH5FRU.js} +2 -2
  351. package/dist/{projection-worker-44SEKTZ5.js → projection-worker-FZ7YSN3G.js} +5 -5
  352. package/dist/{prospective-memory-UACFTYXK.js → prospective-memory-6D2ASWM3.js} +4 -4
  353. package/dist/{push-notifications-W5JRXLKJ.js → push-notifications-U6FIBQRW.js} +3 -3
  354. package/dist/{reranker-NL4YAV6R.js → reranker-GYYRPANK.js} +3 -3
  355. package/dist/{retrieval-health-4C2PO6HH.js → retrieval-health-4Z242P3B.js} +1 -1
  356. package/dist/{review-polling-W5AMHNLT.js → review-polling-HXAFJZDA.js} +25 -23
  357. package/dist/runtime/index.js +35 -33
  358. package/dist/{session-events-PGL5GJEB.js → session-events-O3BV56ZX.js} +25 -23
  359. package/dist/{session-kill-telemetry-6YDGEF27.js → session-kill-telemetry-AELE4JDK.js} +25 -23
  360. package/dist/session-mcp-config-YKNXG5DW.js +50 -0
  361. package/dist/{session-scope-3MEOO557.js → session-scope-5EAPUT45.js} +24 -22
  362. package/dist/setup-wizard-NB6R4QVS.js +14 -0
  363. package/dist/{shard-manager-MBWQEYNG.js → shard-manager-35PWFR3B.js} +3 -3
  364. package/dist/{skill-refinement-EOROTBPX.js → skill-refinement-DVSYXBBP.js} +5 -5
  365. package/dist/{stack-release-PR2XKJ4Q.js → stack-release-HGFFFCGC.js} +90 -15
  366. package/dist/{stack-update-LMDM27ZW.js → stack-update-ATCJFOEK.js} +5 -5
  367. package/dist/{steward-gate-4A2XHYFD.js → steward-gate-3GQ5XKMJ.js} +5 -5
  368. package/dist/{support-inbox-Z77ACQUY.js → support-inbox-4L62P4EP.js} +7 -6
  369. package/dist/{support-outbox-GB5SQFRJ.js → support-outbox-WHGPUYL2.js} +2 -2
  370. package/dist/task-enforcement-IPIZX2MM.js +90 -0
  371. package/dist/{task-scope-EKYDCVUF.js → task-scope-FOIW25HR.js} +26 -22
  372. package/dist/{tasks-crud-6LBNU43G.js → tasks-crud-HBDKE6C5.js} +34 -22
  373. package/dist/tasks-notify-G2U2U2YA.js +53 -0
  374. package/dist/{tasks-review-PBIUYXAL.js → tasks-review-27SFX5XN.js} +26 -22
  375. package/dist/{telemetry-upload-WQDFABTF.js → telemetry-upload-ZOXHRWR5.js} +9 -9
  376. package/dist/tmux-command-guard-KSJKIX3C.js +117 -0
  377. package/dist/{token-budget-KWGL5DY7.js → token-budget-5Y4YPDO3.js} +5 -5
  378. package/dist/{tool-capability-index-EH3HQVHU.js → tool-capability-index-VYF5GNJ2.js} +1 -1
  379. package/dist/{tool-telemetry-UC55LSIH.js → tool-telemetry-KBXSBDTK.js} +1 -1
  380. package/dist/tui/App.js +39 -37
  381. package/dist/{tui-data-M3RBSJL3.js → tui-data-NLFMBIQI.js} +24 -22
  382. package/dist/{update-check-HFO4VHO4.js → update-check-3FHAWIG2.js} +7 -3
  383. package/dist/{update-support-VPBD5SD2.js → update-support-UVUSZG7R.js} +93 -93
  384. package/dist/{whatsapp-accounts-BWRZUY23.js → whatsapp-accounts-BFIOXYW5.js} +1 -1
  385. package/dist/{whatsapp-config-GOSELKTE.js → whatsapp-config-FAX6EA5K.js} +20 -13
  386. package/dist/{worker-gate-4QLLMXZM.js → worker-gate-3KUBAU32.js} +3 -3
  387. package/dist/{workflow-engine-MMEHKUN4.js → workflow-engine-YITHXZR5.js} +2 -2
  388. package/dist/{working-memory-PY4AG577.js → working-memory-NUVB5SFV.js} +1 -1
  389. package/dist/worktree-LL62PLQB.js +47 -0
  390. package/dist/{worktree-sweep-5WKBU7E6.js → worktree-sweep-WTK3MTKH.js} +7 -7
  391. package/package.json +3 -2
  392. package/release-notes.json +75 -43
  393. package/dist/branch-hygiene-R5NVTRAY.js +0 -138
  394. package/dist/chunk-7YORGTXC.js +0 -138
  395. package/dist/chunk-CCPHEPLU.js +0 -30
  396. package/dist/chunk-HMP5VT6A.js +0 -118
  397. package/dist/chunk-PVYR4FCQ.js +0 -113
  398. package/dist/chunk-RP5GETX5.js +0 -140
  399. package/dist/chunk-YGAAZN3E.js +0 -47
  400. package/dist/cto-delegation-gate-S734XDXT.js +0 -290
  401. package/dist/dispatch-ack-4S44HBWB.js +0 -15
  402. package/dist/dreaming-UKGTQT6I.js +0 -44
  403. package/dist/orchestrator-PGHJDUUT.js +0 -45
  404. package/dist/setup-wizard-CJIYDSSP.js +0 -13
  405. package/dist/tasks-notify-TFJLSQ3B.js +0 -50
  406. package/dist/worktree-YXBDRYOC.js +0 -31
  407. package/dist/{chunk-7UMCQQWS.js → chunk-A4DVMPYB.js} +3 -3
  408. /package/dist/{chunk-2KLAYDFB.js → chunk-GIBYNT6W.js} +0 -0
  409. /package/dist/{chunk-MC6VPZKS.js → chunk-JRM4TAGS.js} +0 -0
  410. /package/dist/{chunk-3NCZKWPO.js → chunk-MGGOSFCR.js} +0 -0
  411. /package/dist/{chunk-C2SRRCRK.js → chunk-QIFYLIUF.js} +0 -0
  412. /package/dist/{chunk-OADURIIN.js → chunk-WTH4CSAP.js} +0 -0
  413. /package/dist/{core-memory-3IBWM4WR.js → core-memory-GAC6EWOQ.js} +0 -0
  414. /package/dist/{entity-boost-DWAWXFKN.js → entity-boost-NT6UO2Z3.js} +0 -0
  415. /package/dist/{message-queue-client-3PTHPG5Q.js → message-queue-client-4EOQRUXW.js} +0 -0
  416. /package/dist/{oauth-server-M5TGXT6D.js → oauth-server-67YBDP32.js} +0 -0
  417. /package/dist/{webhook-pipe-FZYLO6RR.js → webhook-pipe-LEXMUQ5B.js} +0 -0
  418. /package/dist/{wiki-acl-7CROE3MJ.js → wiki-acl-74BLWG6J.js} +0 -0
  419. /package/dist/{wiki-client-VNDOBK63.js → wiki-client-EAN7F5LV.js} +0 -0
@@ -1,54 +1,59 @@
1
1
  import {
2
2
  queueSupportStatusUpdateSync
3
- } from "./chunk-Q5AIPSSC.js";
4
- import "./chunk-MMRUBN3I.js";
3
+ } from "./chunk-25X4JD2V.js";
5
4
  import {
6
- embed
7
- } from "./chunk-AP455LBW.js";
5
+ persistSupportArtifact
6
+ } from "./chunk-TTCUG2CF.js";
8
7
  import {
9
- flushBatch,
10
- writeMemory
11
- } from "./chunk-EDH54E5A.js";
8
+ supportIdSchema,
9
+ supportVersionSchema
10
+ } from "./chunk-5H47VHB7.js";
11
+ import "./chunk-MMRUBN3I.js";
12
+ import "./chunk-XZXBB3TN.js";
13
+ import "./chunk-VSRPS3J7.js";
12
14
  import "./chunk-CHCA3ZM2.js";
13
15
  import "./chunk-OTVEIJUQ.js";
14
- import "./chunk-7LF5DS3A.js";
16
+ import "./chunk-6XWTQUO4.js";
15
17
  import {
16
18
  getActiveAgent
17
- } from "./chunk-C445WRUX.js";
19
+ } from "./chunk-5ERDIOV3.js";
18
20
  import {
19
21
  isTelemetryRedactionEnabled,
20
- sanitizeUpstreamPayload
21
- } from "./chunk-RP5GETX5.js";
22
+ redactedToolResult,
23
+ sanitizeUpstreamId,
24
+ sanitizeUpstreamPayload,
25
+ sanitizeVersionField
26
+ } from "./chunk-4QCFFW2H.js";
22
27
  import "./chunk-CVYC6DUW.js";
23
- import "./chunk-UU4UINUX.js";
28
+ import "./chunk-G4RGKBCA.js";
24
29
  import "./chunk-AFNRE2RV.js";
25
- import "./chunk-3NGZ4PL7.js";
30
+ import "./chunk-X2Q5NLUL.js";
26
31
  import "./chunk-NLEW62VC.js";
27
32
  import "./chunk-GJV3WDWM.js";
28
33
  import "./chunk-MP2AFCGL.js";
29
- import "./chunk-RWSLVYTE.js";
34
+ import "./chunk-AOHXREB7.js";
30
35
  import "./chunk-2I23RPSI.js";
31
- import "./chunk-BV6GBSRP.js";
36
+ import "./chunk-OLMQ4UOF.js";
32
37
  import "./chunk-PNQDP3OA.js";
33
38
  import "./chunk-H73TUI4Y.js";
34
39
  import "./chunk-7HLWBYH7.js";
35
40
  import "./chunk-FXU7JOXK.js";
36
- import "./chunk-Z42MXYWW.js";
41
+ import "./chunk-QWVXN224.js";
37
42
  import {
38
43
  loadLicense,
39
44
  readCachedLicenseToken
40
- } from "./chunk-7SEC2AG5.js";
41
- import "./chunk-PPZOWQHP.js";
45
+ } from "./chunk-PQIDGXSG.js";
46
+ import "./chunk-K7KFGDWF.js";
42
47
  import {
43
48
  EXE_AI_DIR,
44
49
  loadConfig
45
- } from "./chunk-7Y5UDEVM.js";
46
- import "./chunk-SHIICYJW.js";
50
+ } from "./chunk-WZHZCDDO.js";
51
+ import "./chunk-BYTDMAGB.js";
47
52
  import "./chunk-MLKGABMK.js";
48
53
 
49
54
  // src/mcp/tools/update-support.ts
50
55
  import { z } from "zod";
51
- import { readdir, readFile, writeFile } from "fs/promises";
56
+ import { readdir, readFile } from "fs/promises";
52
57
  import path from "path";
53
58
  var BUG_STATUS = z.enum(["open", "triaged", "fixed", "closed", "wontfix"]);
54
59
  var FEATURE_STATUS = z.enum(["open", "planned", "in_progress", "shipped", "closed", "wontdo"]);
@@ -166,19 +171,22 @@ function registerUpdateBugReport(server) {
166
171
  title: "Update Bug Report",
167
172
  description: "Update the status of a previously filed bug report. Updates local markdown file, stores a memory, and POSTs the change to AskExe support. Statuses: open \u2192 triaged \u2192 fixed \u2192 closed \u2192 wontfix.",
168
173
  inputSchema: {
169
- id: z.string().min(8).describe("Bug report ID (UUID or first 8 chars)"),
174
+ id: supportIdSchema.describe("Bug report ID (UUID or first 8 chars)"),
170
175
  status: BUG_STATUS.describe("New status"),
171
- fix_version: z.string().optional().describe("Version that fixes this bug (e.g. '0.9.161')"),
176
+ fix_version: supportVersionSchema.optional().describe("Version that fixes this bug (e.g. '0.9.161')"),
172
177
  notes: z.string().optional().describe("Update notes \u2014 why this status change"),
173
178
  send_upstream: z.boolean().default(true).describe("POST update to AskExe support endpoint")
174
179
  }
175
180
  },
176
- async ({ id, status, fix_version, notes, send_upstream }) => {
181
+ // Structural sink guard (round 6): deep-redact the whole return object and any
182
+ // propagated error, so no echoed field (id, fix_version, notes, …) can leak.
183
+ async ({ id, status, fix_version, notes, send_upstream }) => redactedToolResult(async () => {
177
184
  const { agentId, agentRole } = getActiveAgent();
178
185
  const reportDir = path.join(EXE_AI_DIR, "bug-reports");
179
186
  const reportPath = await findReportFile(reportDir, id);
180
187
  let fullId = id;
181
188
  let title = id;
189
+ let updatedContent = null;
182
190
  if (reportPath) {
183
191
  let content = await readFile(reportPath, "utf-8");
184
192
  const idMatch = content.match(/^id:\s*([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\s*$/m);
@@ -198,45 +206,40 @@ ${fix_version ? `Fix version: ${fix_version}
198
206
  ` : ""}${notes}
199
207
  `;
200
208
  }
201
- await writeFile(reportPath, content, "utf-8");
209
+ updatedContent = content;
202
210
  }
203
- const memoryText = fix_version ? `Bug "${title}" marked ${status} in v${fix_version}${notes ? `. ${notes}` : ""}` : `Bug "${title}" marked ${status}${notes ? `. ${notes}` : ""}`;
204
- let vector = null;
205
- try {
206
- vector = await embed(memoryText);
207
- } catch {
208
- vector = null;
209
- }
210
- await writeMemory({
211
- id: `${fullId}-update-${Date.now()}`,
212
- agent_id: agentId,
213
- agent_role: agentRole,
214
- session_id: process.env.SESSION_ID ?? "manual",
215
- timestamp: (/* @__PURE__ */ new Date()).toISOString(),
216
- tool_name: "update_bug_report",
217
- project_name: "support",
218
- has_error: false,
219
- raw_text: memoryText,
220
- vector,
221
- source_path: reportPath ?? void 0,
222
- source_type: "bug_report_update",
223
- memory_type: "observation",
224
- tier: 1,
225
- importance: 7,
226
- intent: "update",
227
- domain: "support",
228
- file_paths: null
211
+ const memoryText = fix_version ? `Bug "${title}" marked ${status} in v ${fix_version}${notes ? `. ${notes}` : ""}` : `Bug "${title}" marked ${status}${notes ? `. ${notes}` : ""}`;
212
+ const persisted = await persistSupportArtifact({
213
+ memoryText,
214
+ file: reportPath && updatedContent !== null ? { path: reportPath, content: updatedContent, append: false } : void 0,
215
+ memory: {
216
+ id: `${fullId}-update-${Date.now()}`,
217
+ agent_id: agentId,
218
+ agent_role: agentRole,
219
+ session_id: process.env.SESSION_ID ?? "manual",
220
+ timestamp: (/* @__PURE__ */ new Date()).toISOString(),
221
+ tool_name: "update_bug_report",
222
+ project_name: "support",
223
+ has_error: false,
224
+ source_path: reportPath ?? void 0,
225
+ source_type: "bug_report_update",
226
+ memory_type: "observation",
227
+ tier: 1,
228
+ importance: 7,
229
+ intent: "update",
230
+ domain: "support",
231
+ file_paths: null
232
+ }
229
233
  });
230
- await flushBatch();
231
234
  const upstreamPayload = {
232
- id: fullId,
235
+ id: sanitizeUpstreamId(fullId),
233
236
  status,
234
- fixed_version: fix_version,
237
+ fixed_version: sanitizeVersionField(fix_version),
235
238
  triage_notes: notes,
236
239
  updated_at: (/* @__PURE__ */ new Date()).toISOString(),
237
240
  agent_id: agentId
238
241
  };
239
- const upstreamStatus = send_upstream ? await sendStatusUpstream("bug", `bug-reports/${encodeURIComponent(fullId)}`, upstreamPayload) : "skipped";
242
+ const upstreamStatus = send_upstream ? await sendStatusUpstream("bug", `bug-reports/${encodeURIComponent(sanitizeUpstreamId(fullId))}`, upstreamPayload) : "skipped";
240
243
  return {
241
244
  content: [
242
245
  {
@@ -246,12 +249,12 @@ ID: ${fullId}
246
249
  New status: ${status}
247
250
  ${fix_version ? `Fix version: ${fix_version}
248
251
  ` : ""}Local file: ${reportPath ?? "not found"}
249
- Memory stored: ${memoryText}
252
+ Memory stored: ${persisted.redactedMemoryText}
250
253
  Upstream status: ${upstreamStatus}`
251
254
  }
252
255
  ]
253
256
  };
254
- }
257
+ })
255
258
  );
256
259
  }
257
260
  function registerUpdateFeatureRequest(server) {
@@ -261,19 +264,21 @@ function registerUpdateFeatureRequest(server) {
261
264
  title: "Update Feature Request",
262
265
  description: "Update the status of a previously filed feature request. Updates local markdown file, stores a memory, and POSTs the change to AskExe support. Statuses: open \u2192 planned \u2192 in_progress \u2192 shipped \u2192 closed \u2192 wontdo.",
263
266
  inputSchema: {
264
- id: z.string().min(8).describe("Feature request ID (UUID or first 8 chars)"),
267
+ id: supportIdSchema.describe("Feature request ID (UUID or first 8 chars)"),
265
268
  status: FEATURE_STATUS.describe("New status"),
266
- shipped_version: z.string().optional().describe("Version that ships this feature (e.g. '0.9.170')"),
269
+ shipped_version: supportVersionSchema.optional().describe("Version that ships this feature (e.g. '0.9.170')"),
267
270
  notes: z.string().optional().describe("Update notes \u2014 why this status change"),
268
271
  send_upstream: z.boolean().default(true).describe("POST update to AskExe support endpoint")
269
272
  }
270
273
  },
271
- async ({ id, status, shipped_version, notes, send_upstream }) => {
274
+ // Structural sink guard (round 6): deep-redact the whole return object + errors.
275
+ async ({ id, status, shipped_version, notes, send_upstream }) => redactedToolResult(async () => {
272
276
  const { agentId, agentRole } = getActiveAgent();
273
277
  const reportDir = path.join(EXE_AI_DIR, "feature-requests");
274
278
  const reportPath = await findReportFile(reportDir, id);
275
279
  let fullId = id;
276
280
  let title = id;
281
+ let updatedContent = null;
277
282
  if (reportPath) {
278
283
  let content = await readFile(reportPath, "utf-8");
279
284
  const idMatch = content.match(/^id:\s*([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\s*$/m);
@@ -293,45 +298,40 @@ ${shipped_version ? `Shipped version: ${shipped_version}
293
298
  ` : ""}${notes}
294
299
  `;
295
300
  }
296
- await writeFile(reportPath, content, "utf-8");
297
- }
298
- const memoryText = shipped_version ? `Feature "${title}" marked ${status} in v${shipped_version}${notes ? `. ${notes}` : ""}` : `Feature "${title}" marked ${status}${notes ? `. ${notes}` : ""}`;
299
- let vector = null;
300
- try {
301
- vector = await embed(memoryText);
302
- } catch {
303
- vector = null;
301
+ updatedContent = content;
304
302
  }
305
- await writeMemory({
306
- id: `${fullId}-update-${Date.now()}`,
307
- agent_id: agentId,
308
- agent_role: agentRole,
309
- session_id: process.env.SESSION_ID ?? "manual",
310
- timestamp: (/* @__PURE__ */ new Date()).toISOString(),
311
- tool_name: "update_feature_request",
312
- project_name: "support",
313
- has_error: false,
314
- raw_text: memoryText,
315
- vector,
316
- source_path: reportPath ?? void 0,
317
- source_type: "feature_request_update",
318
- memory_type: "observation",
319
- tier: 1,
320
- importance: 7,
321
- intent: "update",
322
- domain: "support",
323
- file_paths: null
303
+ const memoryText = shipped_version ? `Feature "${title}" marked ${status} in v ${shipped_version}${notes ? `. ${notes}` : ""}` : `Feature "${title}" marked ${status}${notes ? `. ${notes}` : ""}`;
304
+ const persisted = await persistSupportArtifact({
305
+ memoryText,
306
+ file: reportPath && updatedContent !== null ? { path: reportPath, content: updatedContent, append: false } : void 0,
307
+ memory: {
308
+ id: `${fullId}-update-${Date.now()}`,
309
+ agent_id: agentId,
310
+ agent_role: agentRole,
311
+ session_id: process.env.SESSION_ID ?? "manual",
312
+ timestamp: (/* @__PURE__ */ new Date()).toISOString(),
313
+ tool_name: "update_feature_request",
314
+ project_name: "support",
315
+ has_error: false,
316
+ source_path: reportPath ?? void 0,
317
+ source_type: "feature_request_update",
318
+ memory_type: "observation",
319
+ tier: 1,
320
+ importance: 7,
321
+ intent: "update",
322
+ domain: "support",
323
+ file_paths: null
324
+ }
324
325
  });
325
- await flushBatch();
326
326
  const upstreamPayload = {
327
- id: fullId,
327
+ id: sanitizeUpstreamId(fullId),
328
328
  status,
329
- shipped_version,
329
+ shipped_version: sanitizeVersionField(shipped_version),
330
330
  response_notes: notes,
331
331
  updated_at: (/* @__PURE__ */ new Date()).toISOString(),
332
332
  agent_id: agentId
333
333
  };
334
- const upstreamStatus = send_upstream ? await sendStatusUpstream("feature", `feature-requests/${encodeURIComponent(fullId)}`, upstreamPayload) : "skipped";
334
+ const upstreamStatus = send_upstream ? await sendStatusUpstream("feature", `feature-requests/${encodeURIComponent(sanitizeUpstreamId(fullId))}`, upstreamPayload) : "skipped";
335
335
  return {
336
336
  content: [
337
337
  {
@@ -341,12 +341,12 @@ ID: ${fullId}
341
341
  New status: ${status}
342
342
  ${shipped_version ? `Shipped version: ${shipped_version}
343
343
  ` : ""}Local file: ${reportPath ?? "not found"}
344
- Memory stored: ${memoryText}
344
+ Memory stored: ${persisted.redactedMemoryText}
345
345
  Upstream status: ${upstreamStatus}`
346
346
  }
347
347
  ]
348
348
  };
349
- }
349
+ })
350
350
  );
351
351
  }
352
352
  export {
@@ -4,7 +4,7 @@ import {
4
4
  getAccountByPhoneNumberId,
5
5
  getDefaultAccount,
6
6
  loadAccounts
7
- } from "./chunk-YGAAZN3E.js";
7
+ } from "./chunk-GL57PO3K.js";
8
8
  import "./chunk-MLKGABMK.js";
9
9
  export {
10
10
  _resetCache,
@@ -1,17 +1,32 @@
1
1
  import {
2
2
  _resetCache,
3
3
  loadAccounts
4
- } from "./chunk-YGAAZN3E.js";
4
+ } from "./chunk-GL57PO3K.js";
5
5
  import "./chunk-MLKGABMK.js";
6
6
 
7
7
  // src/gateway/whatsapp-config.ts
8
- import { existsSync, readFileSync, writeFileSync, mkdirSync } from "fs";
8
+ import { chmodSync, existsSync, readFileSync, writeFileSync, mkdirSync } from "fs";
9
9
  import { join } from "path";
10
10
  import { homedir } from "os";
11
11
  var GRAPH_API_VERSION = "v21.0";
12
12
  var GRAPH_API_BASE = `https://graph.facebook.com/${GRAPH_API_VERSION}`;
13
13
  var ACCOUNTS_PATH = join(homedir(), ".exe-os", "whatsapp-accounts.json");
14
14
  var GATEWAY_CONFIG_PATH = join(homedir(), ".exe-os", "gateway.json");
15
+ function ensurePrivateConfigDir() {
16
+ const dir = join(homedir(), ".exe-os");
17
+ mkdirSync(dir, { recursive: true, mode: 448 });
18
+ try {
19
+ chmodSync(dir, 448);
20
+ } catch {
21
+ }
22
+ }
23
+ function writePrivateJson(filePath, value) {
24
+ writeFileSync(filePath, JSON.stringify(value, null, 2), { encoding: "utf8", mode: 384 });
25
+ try {
26
+ chmodSync(filePath, 384);
27
+ } catch {
28
+ }
29
+ }
15
30
  async function validateCredentials(phoneNumberId, accessToken) {
16
31
  try {
17
32
  const url = `${GRAPH_API_BASE}/${phoneNumberId}?fields=display_phone_number,verified_name`;
@@ -58,8 +73,7 @@ async function configureWhatsApp(config) {
58
73
  businessAccountId: config.businessAccountId ?? "",
59
74
  verifyToken: config.verifyToken
60
75
  };
61
- const dir = join(homedir(), ".exe-os");
62
- mkdirSync(dir, { recursive: true });
76
+ ensurePrivateConfigDir();
63
77
  let accounts = [];
64
78
  try {
65
79
  if (existsSync(ACCOUNTS_PATH)) {
@@ -75,7 +89,7 @@ async function configureWhatsApp(config) {
75
89
  } else {
76
90
  accounts.push(account);
77
91
  }
78
- writeFileSync(ACCOUNTS_PATH, JSON.stringify(accounts, null, 2), "utf8");
92
+ writePrivateJson(ACCOUNTS_PATH, accounts);
79
93
  let gatewayConfig = {};
80
94
  try {
81
95
  if (existsSync(GATEWAY_CONFIG_PATH)) {
@@ -87,7 +101,7 @@ async function configureWhatsApp(config) {
87
101
  if (config.webhookUrl) {
88
102
  gatewayConfig.whatsappWebhookUrl = config.webhookUrl;
89
103
  }
90
- writeFileSync(GATEWAY_CONFIG_PATH, JSON.stringify(gatewayConfig, null, 2), "utf8");
104
+ writePrivateJson(GATEWAY_CONFIG_PATH, gatewayConfig);
91
105
  _resetCache();
92
106
  return {
93
107
  valid: true,
@@ -97,13 +111,6 @@ async function configureWhatsApp(config) {
97
111
  }
98
112
  function getWhatsAppStatus() {
99
113
  _resetCache();
100
- if (!existsSync(ACCOUNTS_PATH)) {
101
- return {
102
- connected: false,
103
- accounts: 0,
104
- error: "No WhatsApp accounts configured. Use gateway(action='configure_whatsapp') to set up."
105
- };
106
- }
107
114
  const accounts = loadAccounts();
108
115
  if (accounts.length === 0) {
109
116
  return {
@@ -6,9 +6,9 @@ import {
6
6
  releaseBackfillLock,
7
7
  tryAcquireBackfillLock,
8
8
  tryAcquireWorkerSlot
9
- } from "./chunk-2IWBY7XK.js";
10
- import "./chunk-7Y5UDEVM.js";
11
- import "./chunk-SHIICYJW.js";
9
+ } from "./chunk-VPZHJCKW.js";
10
+ import "./chunk-WZHZCDDO.js";
11
+ import "./chunk-BYTDMAGB.js";
12
12
  import "./chunk-MLKGABMK.js";
13
13
  export {
14
14
  MAX_CONCURRENT_WORKERS,
@@ -10,8 +10,8 @@ import {
10
10
  persistWorkflows,
11
11
  runWorkflow,
12
12
  startWorkflow
13
- } from "./chunk-DNVFWFYF.js";
14
- import "./chunk-IB336P52.js";
13
+ } from "./chunk-AJYCFKJR.js";
14
+ import "./chunk-KP3U5QGJ.js";
15
15
  import "./chunk-MLKGABMK.js";
16
16
  export {
17
17
  advanceWorkflow,
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  atomicWriteSync
3
- } from "./chunk-SHIICYJW.js";
3
+ } from "./chunk-BYTDMAGB.js";
4
4
  import "./chunk-MLKGABMK.js";
5
5
 
6
6
  // src/lib/working-memory.ts
@@ -0,0 +1,47 @@
1
+ import {
2
+ classifyGitFailure,
3
+ cleanupWorktree,
4
+ ensureWorktree,
5
+ ensureWorktreeAsync,
6
+ getGitRoot,
7
+ getGitRootAsync,
8
+ getMainRepoRoot,
9
+ getMainRepoRootAsync,
10
+ isInsideGitRepo,
11
+ isWorktreeDirty,
12
+ isWorktreeDirtyAsync,
13
+ parseInstanceLabel,
14
+ resolveGitWithRetryAsync,
15
+ resolveGitWithRetrySync,
16
+ worktreeBranch,
17
+ worktreePath
18
+ } from "./chunk-I26FWCSP.js";
19
+ import "./chunk-2WAVZ5UJ.js";
20
+ import "./chunk-AOHXREB7.js";
21
+ import "./chunk-2I23RPSI.js";
22
+ import "./chunk-OLMQ4UOF.js";
23
+ import "./chunk-PNQDP3OA.js";
24
+ import "./chunk-H73TUI4Y.js";
25
+ import "./chunk-7HLWBYH7.js";
26
+ import "./chunk-FXU7JOXK.js";
27
+ import "./chunk-WZHZCDDO.js";
28
+ import "./chunk-BYTDMAGB.js";
29
+ import "./chunk-MLKGABMK.js";
30
+ export {
31
+ classifyGitFailure,
32
+ cleanupWorktree,
33
+ ensureWorktree,
34
+ ensureWorktreeAsync,
35
+ getGitRoot,
36
+ getGitRootAsync,
37
+ getMainRepoRoot,
38
+ getMainRepoRootAsync,
39
+ isInsideGitRepo,
40
+ isWorktreeDirty,
41
+ isWorktreeDirtyAsync,
42
+ parseInstanceLabel,
43
+ resolveGitWithRetryAsync,
44
+ resolveGitWithRetrySync,
45
+ worktreeBranch,
46
+ worktreePath
47
+ };
@@ -2,18 +2,18 @@ import {
2
2
  cleanupAgentWorktree,
3
3
  discoverRepoPaths,
4
4
  sweepWorktrees
5
- } from "./chunk-PTJBWC77.js";
6
- import "./chunk-BJOBR6P2.js";
7
- import "./chunk-WH7XN5ER.js";
8
- import "./chunk-RWSLVYTE.js";
5
+ } from "./chunk-2ZYO73KO.js";
6
+ import "./chunk-I26FWCSP.js";
7
+ import "./chunk-2WAVZ5UJ.js";
8
+ import "./chunk-AOHXREB7.js";
9
9
  import "./chunk-2I23RPSI.js";
10
- import "./chunk-BV6GBSRP.js";
10
+ import "./chunk-OLMQ4UOF.js";
11
11
  import "./chunk-PNQDP3OA.js";
12
12
  import "./chunk-H73TUI4Y.js";
13
13
  import "./chunk-7HLWBYH7.js";
14
14
  import "./chunk-FXU7JOXK.js";
15
- import "./chunk-7Y5UDEVM.js";
16
- import "./chunk-SHIICYJW.js";
15
+ import "./chunk-WZHZCDDO.js";
16
+ import "./chunk-BYTDMAGB.js";
17
17
  import "./chunk-MLKGABMK.js";
18
18
  export {
19
19
  cleanupAgentWorktree,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@askexenow/exe-os",
3
- "version": "0.9.341",
3
+ "version": "0.9.342",
4
4
  "description": "AI employee operating system — persistent memory, task management, and multi-agent coordination for Claude Code.",
5
5
  "license": "SEE LICENSE IN LICENSE",
6
6
  "type": "module",
@@ -40,6 +40,7 @@
40
40
  "exe-pending-reviews": "./dist/bin/exe-pending-reviews.js",
41
41
  "exe-os-orchestration-metrics": "./dist/bin/orchestration-metrics.js",
42
42
  "exe-search-quality": "./dist/bin/exe-search-quality.js",
43
+ "exe-memory-reads": "./dist/bin/exe-memory-reads.js",
43
44
  "exe-healthcheck": "./dist/bin/exe-healthcheck.js",
44
45
  "exe-doctor": "./dist/bin/exe-doctor.js",
45
46
  "exe-timers": "./dist/bin/exe-timers.js",
@@ -115,7 +116,7 @@
115
116
  "deploy": "node dist/bin/pre-build-guard.js && npm run build && (node dist/bin/prune-orphan-chunks.js || true) && npm install -g . && node dist/bin/install.js --global && echo '[exe-os] Deploy complete. Run /mcp in active sessions to reconnect.'",
116
117
  "postinstall": "node dist/bin/install.js --commands-only || true",
117
118
  "prepublishOnly": "npm run typecheck && npm run build && node dist/bin/prune-orphan-chunks.js --force && npm run guard:esm-require && npm run check:schema-version && node dist/bin/customer-readiness.js && node dist/bin/pre-publish.js",
118
- "test:publish": "npx vitest run --maxWorkers=4 --exclude 'tests/tui/**' --exclude 'tests/lib/tmux-routing.test.ts' --exclude 'tests/lib/intercom-routing.test.ts' --exclude 'tests/gateway/**' --exclude 'tests/mcp/ingest-document.test.ts' --exclude 'tests/lib/hybrid-search.test.ts' --exclude 'tests/lib/worker-gate.test.ts' --exclude 'tests/daemon-perf-stress.test.ts' --exclude 'tests/lib/gateway-client.test.ts' --exclude 'tests/lib/ws-client.test.ts' --exclude 'tests/lib/ws-auth.test.ts' --exclude 'tests/integration/clean-stack-projection.test.ts' --exclude 'tests/lib/stack-update.test.ts' --exclude 'tests/orchestration/dispatch-chain.test.ts' --exclude 'tests/orchestration/e2e-flow.test.ts' && echo '::warning::clean-stack-projection and stack-update quarantined (need Docker + live DB; environmental, fail in CI runner \u2014 container unhealthy / DB not initialized); ws-client/ws-auth quarantined (30-120s timeouts flaky on Node 20 CI runner \u2014 passes locally). Quarantined to match build-and-test (required gate): dispatch-chain/e2e-flow (timing-sensitive, flaky under parallel load \u2014 bug dfb25bf1). device-id-split-brain/reaper-deps-async/find-free-instance/db-backup-recovery de-flaked and promoted to the required gate (chore/deflake-required-ci). See cicd-audit-2026-06-18.md.' && npx vitest run --maxWorkers=1 tests/daemon-perf-stress.test.ts tests/lib/gateway-client.test.ts",
119
+ "test:publish": "npx vitest run --maxWorkers=4 --exclude 'tests/tui/**' --exclude 'tests/lib/tmux-routing.test.ts' --exclude 'tests/lib/intercom-routing.test.ts' --exclude 'tests/gateway/**' --exclude 'tests/mcp/ingest-document.test.ts' --exclude 'tests/lib/hybrid-search.test.ts' --exclude 'tests/lib/worker-gate.test.ts' --exclude 'tests/daemon-perf-stress.test.ts' --exclude 'tests/lib/gateway-client.test.ts' --exclude 'tests/lib/ws-client.test.ts' --exclude 'tests/lib/ws-auth.test.ts' --exclude 'tests/integration/clean-stack-projection.test.ts' --exclude 'tests/orchestration/dispatch-chain.test.ts' --exclude 'tests/orchestration/e2e-flow.test.ts' && echo '::warning::clean-stack-projection and stack-update quarantined (need Docker + live DB; environmental, fail in CI runner — container unhealthy / DB not initialized); ws-client/ws-auth quarantined (30-120s timeouts flaky on Node 20 CI runner — passes locally). Quarantined to match build-and-test (required gate): dispatch-chain/e2e-flow (timing-sensitive, flaky under parallel load — bug dfb25bf1). device-id-split-brain/reaper-deps-async/find-free-instance/db-backup-recovery de-flaked and promoted to the required gate (chore/deflake-required-ci). See cicd-audit-2026-06-18.md.' && npx vitest run --maxWorkers=1 tests/daemon-perf-stress.test.ts tests/lib/gateway-client.test.ts",
119
120
  "benchmark:longmemeval": "npx tsx tests/benchmarks/longmemeval.ts",
120
121
  "guard:esm-require": "node scripts/check-no-runtime-require.mjs",
121
122
  "check:schema-version": "node scripts/check-schema-version.mjs",