@askexenow/exe-os 0.9.279 → 0.9.280

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 (504) hide show
  1. package/dist/active-agent-2G5ARPXZ.js +26 -0
  2. package/dist/active-agent-2IAUPOJO.js +27 -0
  3. package/dist/agentic-ontology-YLZRGG7G.js +25 -0
  4. package/dist/backfill-metadata-GHUTESVD.js +599 -0
  5. package/dist/backfill-metadata-MSIZ5PV2.js +599 -0
  6. package/dist/backfill-metadata-SKUAF4QY.js +599 -0
  7. package/dist/backfill-metadata-WXUP5OVY.js +599 -0
  8. package/dist/behaviors-27D52NU4.js +39 -0
  9. package/dist/behaviors-BHIVZRAN.js +39 -0
  10. package/dist/behaviors-HAEVJHQN.js +39 -0
  11. package/dist/behaviors-LDDK7WEB.js +39 -0
  12. package/dist/bin/agentic-ontology-backfill.js +6 -6
  13. package/dist/bin/agentic-reflection-backfill.js +7 -7
  14. package/dist/bin/agentic-semantic-label.js +6 -6
  15. package/dist/bin/backfill-conversations.js +7 -7
  16. package/dist/bin/backfill-responses.js +7 -7
  17. package/dist/bin/backfill-vectors.js +9 -9
  18. package/dist/bin/bulk-sync-postgres.js +7 -7
  19. package/dist/bin/cc-doctor.js +4 -4
  20. package/dist/bin/cleanup-stale-review-tasks.js +9 -9
  21. package/dist/bin/cli.js +151 -16
  22. package/dist/bin/deferred-daemon-restart.js +1 -1
  23. package/dist/bin/exe-agent-config.js +2 -2
  24. package/dist/bin/exe-agent.js +7 -7
  25. package/dist/bin/exe-assign.js +9 -9
  26. package/dist/bin/exe-boot.js +17 -17
  27. package/dist/bin/exe-call.js +4 -4
  28. package/dist/bin/exe-cloud.js +5 -5
  29. package/dist/bin/exe-dispatch.js +9 -9
  30. package/dist/bin/exe-doctor.js +1 -1
  31. package/dist/bin/exe-export-behaviors.js +8 -8
  32. package/dist/bin/exe-forget.js +7 -7
  33. package/dist/bin/exe-gateway.js +7 -7
  34. package/dist/bin/exe-healthcheck.js +4 -4
  35. package/dist/bin/exe-heartbeat.js +9 -9
  36. package/dist/bin/exe-kill.js +13 -13
  37. package/dist/bin/exe-launch-agent.js +17 -17
  38. package/dist/bin/exe-new-employee.js +6 -6
  39. package/dist/bin/exe-pending-messages.js +10 -10
  40. package/dist/bin/exe-pending-notifications.js +9 -9
  41. package/dist/bin/exe-pending-reviews.js +9 -9
  42. package/dist/bin/exe-rename.js +4 -4
  43. package/dist/bin/exe-review.js +12 -12
  44. package/dist/bin/exe-search.js +6 -6
  45. package/dist/bin/exe-session-cleanup.js +15 -15
  46. package/dist/bin/exe-settings.js +4 -4
  47. package/dist/bin/exe-start-codex.js +24 -13
  48. package/dist/bin/exe-start-opencode.js +9 -9
  49. package/dist/bin/exe-start.sh +2 -2
  50. package/dist/bin/exe-status.js +10 -10
  51. package/dist/bin/exe-support.js +1 -1
  52. package/dist/bin/exe-team.js +3 -3
  53. package/dist/bin/exe-watchdog.js +52 -4
  54. package/dist/bin/git-sweep.js +10 -10
  55. package/dist/bin/graph-backfill.js +7 -7
  56. package/dist/bin/graph-export.js +6 -6
  57. package/dist/bin/import-history.js +10 -10
  58. package/dist/bin/install.js +7 -7
  59. package/dist/bin/intercom-check.js +4 -4
  60. package/dist/bin/mcp-sessions.js +2 -2
  61. package/dist/bin/orchestration-metrics.js +4 -4
  62. package/dist/bin/postgres-agentic-reflection-backfill.js +2 -2
  63. package/dist/bin/postgres-agentic-semantic-backfill.js +1 -1
  64. package/dist/bin/scan-tasks.js +9 -9
  65. package/dist/bin/setup.js +2 -2
  66. package/dist/bin/shard-migrate.js +5 -5
  67. package/dist/capability-cards-JG75HHOF.js +88 -0
  68. package/dist/capacity-monitor-CNW7PRLG.js +50 -0
  69. package/dist/capacity-monitor-HET7G4MG.js +50 -0
  70. package/dist/capacity-monitor-SAY7CD46.js +50 -0
  71. package/dist/capacity-monitor-V7LY63U6.js +50 -0
  72. package/dist/catchup-brief-E7IF2QGR.js +154 -0
  73. package/dist/catchup-brief-JPOHC6UH.js +154 -0
  74. package/dist/catchup-brief-JQID2BF7.js +154 -0
  75. package/dist/catchup-brief-RW5GN43K.js +154 -0
  76. package/dist/chunk-2IA7BLFA.js +2078 -0
  77. package/dist/chunk-2UATPAHA.js +244 -0
  78. package/dist/chunk-2XEWT25L.js +290 -0
  79. package/dist/chunk-2ZFUZKF5.js +197 -0
  80. package/dist/chunk-37C3FRF2.js +1352 -0
  81. package/dist/chunk-3ABB3GEN.js +97 -0
  82. package/dist/chunk-3FCQSK7F.js +4318 -0
  83. package/dist/chunk-3LEZZS52.js +2113 -0
  84. package/dist/chunk-3O46YCET.js +30 -0
  85. package/dist/chunk-3SDHTGTT.js +369 -0
  86. package/dist/chunk-3XLXETYH.js +128 -0
  87. package/dist/chunk-433KKYLZ.js +539 -0
  88. package/dist/chunk-4CCAANIM.js +85 -0
  89. package/dist/chunk-4J5TKW7C.js +1352 -0
  90. package/dist/chunk-4QN4XAB5.js +227 -0
  91. package/dist/chunk-4T2F5SJA.js +2078 -0
  92. package/dist/chunk-52HOURUP.js +369 -0
  93. package/dist/chunk-52XEYRFA.js +362 -0
  94. package/dist/chunk-54XM4CYO.js +1076 -0
  95. package/dist/chunk-5BECNOD5.js +14219 -0
  96. package/dist/chunk-5BUPCYCN.js +604 -0
  97. package/dist/chunk-5CVQOWOY.js +1350 -0
  98. package/dist/chunk-5DGFPLCO.js +214 -0
  99. package/dist/chunk-5DSH4NNZ.js +731 -0
  100. package/dist/chunk-5MCJQCAM.js +128 -0
  101. package/dist/chunk-5OCQ4NMK.js +284 -0
  102. package/dist/chunk-5ODRK4TE.js +1076 -0
  103. package/dist/chunk-5QDLLWZ3.js +510 -0
  104. package/dist/chunk-5TT4VL25.js +167 -0
  105. package/dist/chunk-5VV3WZB6.js +76 -0
  106. package/dist/chunk-6H74SOGI.js +204 -0
  107. package/dist/chunk-6M74TBVW.js +290 -0
  108. package/dist/chunk-6MDKSLYM.js +123 -0
  109. package/dist/chunk-6OFFJSL5.js +33 -0
  110. package/dist/chunk-6ST7MMLG.js +240 -0
  111. package/dist/chunk-6WFUH2B4.js +345 -0
  112. package/dist/chunk-74YEBPGM.js +271 -0
  113. package/dist/chunk-77C3E5LS.js +54 -0
  114. package/dist/chunk-7EAYV7G2.js +345 -0
  115. package/dist/chunk-7FT4TXF3.js +4318 -0
  116. package/dist/chunk-7L2EV3XX.js +366 -0
  117. package/dist/chunk-7MAQO7FA.js +394 -0
  118. package/dist/chunk-7NPWPF2X.js +712 -0
  119. package/dist/chunk-7NWWQ6QX.js +1094 -0
  120. package/dist/chunk-AB5QAKU3.js +1119 -0
  121. package/dist/chunk-AEQOKSU4.js +214 -0
  122. package/dist/chunk-AFPNLGJJ.js +377 -0
  123. package/dist/chunk-ARWKPNWX.js +284 -0
  124. package/dist/chunk-B3UT6H2X.js +14219 -0
  125. package/dist/chunk-BDEB2THB.js +127 -0
  126. package/dist/chunk-BIISXDSB.js +50 -0
  127. package/dist/chunk-BOCQAH6E.js +171 -0
  128. package/dist/chunk-BVETHEMM.js +456 -0
  129. package/dist/chunk-C3N2MXIP.js +85 -0
  130. package/dist/chunk-C3PAAUNW.js +54 -0
  131. package/dist/chunk-C7CRZGD7.js +81 -0
  132. package/dist/chunk-CAQE2WME.js +214 -0
  133. package/dist/chunk-CAWCO2VR.js +2078 -0
  134. package/dist/chunk-CB4SB3VJ.js +377 -0
  135. package/dist/chunk-CFLJBUHT.js +1094 -0
  136. package/dist/chunk-CITYIYX5.js +89 -0
  137. package/dist/chunk-CLBCRQWU.js +210 -0
  138. package/dist/chunk-D5IPAFJO.js +82 -0
  139. package/dist/chunk-DA53BA7V.js +271 -0
  140. package/dist/chunk-DHBIRCFL.js +290 -0
  141. package/dist/chunk-DHP3ISXV.js +185 -0
  142. package/dist/chunk-DIAOAGZ6.js +38 -0
  143. package/dist/chunk-DJ2MBAAF.js +280 -0
  144. package/dist/chunk-DKH2VU3V.js +97 -0
  145. package/dist/chunk-DOTMUSXW.js +81 -0
  146. package/dist/chunk-DQM5DO5S.js +128 -0
  147. package/dist/chunk-EGFKI6W2.js +129 -0
  148. package/dist/chunk-EMA5YFAV.js +362 -0
  149. package/dist/chunk-EQQNJ4B3.js +128 -0
  150. package/dist/chunk-EVVR5QCW.js +290 -0
  151. package/dist/chunk-EXECVV2I.js +539 -0
  152. package/dist/chunk-F73FLMUA.js +668 -0
  153. package/dist/chunk-FECRU7AB.js +221 -0
  154. package/dist/chunk-FGMF5K2G.js +231 -0
  155. package/dist/chunk-FIWKVHEU.js +204 -0
  156. package/dist/chunk-FJ5WSXU5.js +97 -0
  157. package/dist/chunk-FLBMX6YY.js +75 -0
  158. package/dist/chunk-FLKGAL3F.js +333 -0
  159. package/dist/chunk-FRXQSRTO.js +1076 -0
  160. package/dist/chunk-FVHQL6ND.js +89 -0
  161. package/dist/chunk-G2FYKVRB.js +54 -0
  162. package/dist/chunk-G4RPL2RH.js +333 -0
  163. package/dist/chunk-GACE3UCH.js +271 -0
  164. package/dist/chunk-GAQ2OCPU.js +204 -0
  165. package/dist/chunk-GMM3ALHG.js +1350 -0
  166. package/dist/chunk-GSNDMSWZ.js +1119 -0
  167. package/dist/chunk-H4IGERTU.js +712 -0
  168. package/dist/chunk-HCIMNY45.js +2078 -0
  169. package/dist/chunk-HKB4GOGL.js +159 -0
  170. package/dist/chunk-HMMM6YFN.js +1068 -0
  171. package/dist/chunk-HVKPZCXA.js +271 -0
  172. package/dist/chunk-HZJDZ6NX.js +89 -0
  173. package/dist/chunk-I5BYXBAD.js +1350 -0
  174. package/dist/chunk-I6NQVJYF.js +97 -0
  175. package/dist/chunk-I6YJU2DE.js +128 -0
  176. package/dist/chunk-I7GRBEFS.js +690 -0
  177. package/dist/chunk-IFYEMOZG.js +85 -0
  178. package/dist/chunk-IHR5L3YV.js +244 -0
  179. package/dist/chunk-ILIAYMKP.js +362 -0
  180. package/dist/chunk-IPZ4JWBG.js +4318 -0
  181. package/dist/chunk-IQHXWJ2Q.js +402 -0
  182. package/dist/chunk-J2PDHWJV.js +448 -0
  183. package/dist/chunk-J373WY35.js +82 -0
  184. package/dist/chunk-JAZEO27N.js +1094 -0
  185. package/dist/chunk-JDSJ3NU7.js +836 -0
  186. package/dist/chunk-JMK2BOGQ.js +2113 -0
  187. package/dist/chunk-JS2KQWMD.js +377 -0
  188. package/dist/chunk-JU42WYSP.js +448 -0
  189. package/dist/chunk-K26DLCUP.js +299 -0
  190. package/dist/chunk-K4JTUUWC.js +1094 -0
  191. package/dist/chunk-KBUQ4X5Y.js +1076 -0
  192. package/dist/chunk-KFSW4EKI.js +50 -0
  193. package/dist/chunk-KT2XEGXZ.js +345 -0
  194. package/dist/chunk-KZ57MNYJ.js +562 -0
  195. package/dist/chunk-LFAX3MCC.js +668 -0
  196. package/dist/chunk-LJZZS4B5.js +81 -0
  197. package/dist/chunk-LNV6OOHY.js +150 -0
  198. package/dist/chunk-LYH3ZLYF.js +197 -0
  199. package/dist/chunk-M2QK3YD5.js +214 -0
  200. package/dist/chunk-M5N2TE3L.js +76 -0
  201. package/dist/chunk-MJ44I6HG.js +244 -0
  202. package/dist/chunk-MRRYZQUS.js +510 -0
  203. package/dist/chunk-MZV4HV2T.js +363 -0
  204. package/dist/chunk-N663LPHD.js +97 -0
  205. package/dist/chunk-NDG4GHYH.js +171 -0
  206. package/dist/chunk-NGK4DUTW.js +85 -0
  207. package/dist/chunk-O25CS3BH.js +836 -0
  208. package/dist/chunk-OADURIIN.js +258 -0
  209. package/dist/chunk-OCYNSIQR.js +204 -0
  210. package/dist/chunk-OGYVGJ7F.js +402 -0
  211. package/dist/chunk-OUKLRG7K.js +54 -0
  212. package/dist/chunk-OVOWVZXV.js +127 -0
  213. package/dist/chunk-P3AUAXMW.js +712 -0
  214. package/dist/chunk-P3YEMU7L.js +167 -0
  215. package/dist/chunk-P73YSDV7.js +284 -0
  216. package/dist/chunk-PAMQBA5K.js +157 -0
  217. package/dist/chunk-PDOGDOO6.js +81 -0
  218. package/dist/chunk-PDSMTX4H.js +448 -0
  219. package/dist/chunk-PN5VKI6G.js +448 -0
  220. package/dist/chunk-PW4S2SN7.js +14219 -0
  221. package/dist/chunk-PWJI2O5R.js +171 -0
  222. package/dist/chunk-PZLB7XHF.js +1119 -0
  223. package/dist/chunk-QLBF5REP.js +731 -0
  224. package/dist/chunk-QMU256CS.js +262 -0
  225. package/dist/chunk-QMVUSITJ.js +539 -0
  226. package/dist/chunk-QOWE36S5.js +1119 -0
  227. package/dist/chunk-QRLP3WDY.js +373 -0
  228. package/dist/chunk-QWFF3NWP.js +382 -0
  229. package/dist/chunk-RUF7DGXX.js +1350 -0
  230. package/dist/chunk-S5JWN7XT.js +382 -0
  231. package/dist/chunk-SEIYC4D4.js +197 -0
  232. package/dist/chunk-SFQXO7I6.js +1352 -0
  233. package/dist/chunk-SO4SCJZ2.js +362 -0
  234. package/dist/chunk-SOLGWOCM.js +836 -0
  235. package/dist/chunk-SVHHWATZ.js +377 -0
  236. package/dist/chunk-SVOMFAJM.js +50 -0
  237. package/dist/chunk-SYIROM36.js +197 -0
  238. package/dist/chunk-SYSDSINS.js +76 -0
  239. package/dist/chunk-T5XMAQAC.js +85 -0
  240. package/dist/chunk-TGHIBL4B.js +244 -0
  241. package/dist/chunk-TH22CNKK.js +70 -0
  242. package/dist/chunk-TJMNFB2W.js +58 -0
  243. package/dist/chunk-TWPNURFU.js +50 -0
  244. package/dist/chunk-U3PEZZ7D.js +712 -0
  245. package/dist/chunk-U76CXW3D.js +55 -0
  246. package/dist/chunk-UJUPYSVY.js +333 -0
  247. package/dist/chunk-UKVPGFD4.js +4318 -0
  248. package/dist/chunk-UVD2VXDC.js +127 -0
  249. package/dist/chunk-V6M2GKUD.js +89 -0
  250. package/dist/chunk-VD5NF6RG.js +348 -0
  251. package/dist/chunk-VFPBTJBN.js +58 -0
  252. package/dist/chunk-VIFBK7VL.js +510 -0
  253. package/dist/chunk-VNBHLJTU.js +76 -0
  254. package/dist/chunk-VO73AAFF.js +539 -0
  255. package/dist/chunk-VOZL5CBT.js +731 -0
  256. package/dist/chunk-WK2X6PE6.js +167 -0
  257. package/dist/chunk-WYU7FFTV.js +127 -0
  258. package/dist/chunk-WZLKGEUJ.js +510 -0
  259. package/dist/chunk-X46O77S4.js +630 -0
  260. package/dist/chunk-X6C2EL46.js +836 -0
  261. package/dist/chunk-XZ2KJ3OG.js +103 -0
  262. package/dist/chunk-Y2PCFIJE.js +345 -0
  263. package/dist/chunk-Y5OXHXCP.js +731 -0
  264. package/dist/chunk-YKRQXHXX.js +1352 -0
  265. package/dist/chunk-YMUH7TWT.js +382 -0
  266. package/dist/chunk-YO43YXZS.js +1076 -0
  267. package/dist/chunk-YWN6DKZJ.js +181 -0
  268. package/dist/chunk-Z42MXYWW.js +691 -0
  269. package/dist/chunk-Z75DAPMI.js +14219 -0
  270. package/dist/chunk-ZDCRV6PH.js +58 -0
  271. package/dist/chunk-ZDIKSXMV.js +58 -0
  272. package/dist/chunk-ZFU7SITA.js +284 -0
  273. package/dist/chunk-ZGBIUKNK.js +668 -0
  274. package/dist/chunk-ZJP3ZONM.js +3208 -0
  275. package/dist/chunk-ZLXATOXN.js +167 -0
  276. package/dist/chunk-ZM5WXR57.js +382 -0
  277. package/dist/chunk-ZQ4CBSJ3.js +171 -0
  278. package/dist/chunk-ZQXOZ4U2.js +14219 -0
  279. package/dist/chunk-ZTS2KRU5.js +333 -0
  280. package/dist/co-activation-PLLVFEDK.js +73 -0
  281. package/dist/co-occurrence-OIK6WLXN.js +94 -0
  282. package/dist/co-occurrence-QB4MQSY7.js +94 -0
  283. package/dist/code-context-index-CG4P2JZI.js +30 -0
  284. package/dist/conversation-entity-extractor-ZN3J4WGY.js +114 -0
  285. package/dist/core-memory-D3AWRAMA.js +110 -0
  286. package/dist/core-memory-JUTA3DWM.js +110 -0
  287. package/dist/core-memory-NW6GT543.js +110 -0
  288. package/dist/core-memory-TPY5XO3E.js +110 -0
  289. package/dist/crdt-sync-6GDTEJBT.js +33 -0
  290. package/dist/crm-webhook-2BYS65SZ.js +10 -0
  291. package/dist/crm-webhook-3AZQWNMQ.js +10 -0
  292. package/dist/crm-webhook-AUYAFOV3.js +10 -0
  293. package/dist/crm-webhook-VM72DSLW.js +10 -0
  294. package/dist/cto-delegation-gate-GQNNQON7.js +279 -0
  295. package/dist/cto-delegation-gate-LTI5OTGF.js +279 -0
  296. package/dist/cto-delegation-gate-Q2IIOK3T.js +279 -0
  297. package/dist/cto-delegation-gate-VVDKZGQ6.js +279 -0
  298. package/dist/daemon-orchestration-2ZD3N5AP.js +138 -0
  299. package/dist/daemon-orchestration-3J4K62I5.js +138 -0
  300. package/dist/daemon-orchestration-L47GDSJG.js +138 -0
  301. package/dist/daemon-orchestration-ZAQF437L.js +138 -0
  302. package/dist/db-backup-L64NT6GW.js +33 -0
  303. package/dist/doc-graph-extractor-7EXXBHN5.js +132 -0
  304. package/dist/doc-graph-extractor-M3G5IZAT.js +132 -0
  305. package/dist/dreaming-3CVAKE4O.js +33 -0
  306. package/dist/dreaming-DMKA2UH6.js +33 -0
  307. package/dist/dreaming-EP3WNLQ3.js +33 -0
  308. package/dist/dreaming-INJT3QVE.js +33 -0
  309. package/dist/entity-boost-DVQU26WN.js +375 -0
  310. package/dist/exe-drift-ZCUGNELY.js +69 -0
  311. package/dist/exe-export-5LKQALH2.js +75 -0
  312. package/dist/exe-export-7CME3MXT.js +75 -0
  313. package/dist/exe-export-GQMMQWON.js +75 -0
  314. package/dist/exe-export-Q5O2YADE.js +75 -0
  315. package/dist/exe-import-25AMCNVB.js +78 -0
  316. package/dist/exe-import-DMXDVIF2.js +78 -0
  317. package/dist/exe-import-EHJM6OZW.js +78 -0
  318. package/dist/exe-import-J6BPUDJ3.js +78 -0
  319. package/dist/exe-key-4SRZOC5W.js +580 -0
  320. package/dist/exe-key-5QK7VKBJ.js +580 -0
  321. package/dist/exe-key-GFLJRRHG.js +580 -0
  322. package/dist/exe-key-XWTYIY3B.js +580 -0
  323. package/dist/exe-snapshot-CR2AFYRP.js +337 -0
  324. package/dist/exe-snapshot-DWXKW6SC.js +337 -0
  325. package/dist/exe-snapshot-IYPOSAWY.js +337 -0
  326. package/dist/exe-snapshot-QIIQZXZM.js +337 -0
  327. package/dist/fast-db-init-BSUZIK6R.js +7 -0
  328. package/dist/fast-db-init-MAISJZ3L.js +7 -0
  329. package/dist/fast-db-init-WKK5SPFG.js +7 -0
  330. package/dist/fast-db-init-XZ6WHYNC.js +7 -0
  331. package/dist/gateway/index.js +8 -8
  332. package/dist/gateway-client-GRBOJQYC.js +11 -0
  333. package/dist/git-staleness-G7347RT3.js +111 -0
  334. package/dist/git-task-sweep-GGTGURJ6.js +41 -0
  335. package/dist/git-task-sweep-TQA4QTSM.js +41 -0
  336. package/dist/git-task-sweep-UCJ3KLDS.js +41 -0
  337. package/dist/git-task-sweep-XFX3OTBY.js +41 -0
  338. package/dist/global-procedures-3NYFIROX.js +21 -0
  339. package/dist/global-procedures-NOBNQDNA.js +21 -0
  340. package/dist/global-procedures-ZFIEDO7E.js +21 -0
  341. package/dist/gotrue-session-2IT7MDGW.js +171 -0
  342. package/dist/graph-auto-extract-HC576FNS.js +182 -0
  343. package/dist/graph-auto-extract-RMZT3EYN.js +182 -0
  344. package/dist/graph-rag-HFBYZF3M.js +31 -0
  345. package/dist/hooks/bug-report-worker.js +11 -11
  346. package/dist/hooks/codex-stop-task-finalizer.js +11 -11
  347. package/dist/hooks/commit-complete.js +11 -11
  348. package/dist/hooks/error-recall.js +7 -7
  349. package/dist/hooks/exe-heartbeat-hook.js +3 -3
  350. package/dist/hooks/ingest-worker.js +3 -3
  351. package/dist/hooks/ingest.js +6 -6
  352. package/dist/hooks/instructions-loaded.js +4 -4
  353. package/dist/hooks/manifest.json +20 -20
  354. package/dist/hooks/notification.js +4 -4
  355. package/dist/hooks/post-compact.js +10 -10
  356. package/dist/hooks/post-tool-combined.js +6 -6
  357. package/dist/hooks/pre-compact.js +14 -14
  358. package/dist/hooks/pre-tool-use.js +14 -14
  359. package/dist/hooks/prompt-submit.js +24 -24
  360. package/dist/hooks/session-end.js +19 -19
  361. package/dist/hooks/session-start.js +11 -11
  362. package/dist/hooks/stop.js +17 -17
  363. package/dist/hooks/subagent-stop.js +10 -10
  364. package/dist/hooks/summary-worker.js +18 -18
  365. package/dist/index.js +17 -17
  366. package/dist/installer-3QCLMBSY.js +297 -0
  367. package/dist/installer-6SAIKLV6.js +343 -0
  368. package/dist/installer-RN25LFX6.js +39 -0
  369. package/dist/lib/cloud-sync.js +4 -4
  370. package/dist/lib/consolidation.js +8 -8
  371. package/dist/lib/database.js +2 -2
  372. package/dist/lib/db-daemon-client.js +2 -2
  373. package/dist/lib/db.js +2 -2
  374. package/dist/lib/embedder.js +3 -3
  375. package/dist/lib/employee-templates.js +4 -4
  376. package/dist/lib/employees.js +2 -2
  377. package/dist/lib/exe-daemon-client.js +2 -2
  378. package/dist/lib/exe-daemon.js +41 -41
  379. package/dist/lib/hybrid-search.js +6 -6
  380. package/dist/lib/identity.js +2 -2
  381. package/dist/lib/keychain.js +1 -1
  382. package/dist/lib/messaging.js +9 -9
  383. package/dist/lib/reminders.js +3 -3
  384. package/dist/lib/schedules.js +6 -6
  385. package/dist/lib/session-registry.js +4 -4
  386. package/dist/lib/skill-learning.js +7 -7
  387. package/dist/lib/store.js +5 -5
  388. package/dist/lib/task-router.js +3 -3
  389. package/dist/lib/tasks.js +10 -10
  390. package/dist/lib/tmux-routing.js +8 -8
  391. package/dist/lib/token-spend.js +3 -3
  392. package/dist/lib/ws-client.js +1 -1
  393. package/dist/mcp/register-tools.js +63 -63
  394. package/dist/mcp/server.js +64 -64
  395. package/dist/mcp/tools/complete-reminder.js +4 -4
  396. package/dist/mcp/tools/create-reminder.js +4 -4
  397. package/dist/mcp/tools/create-task.js +12 -12
  398. package/dist/mcp/tools/deactivate-behavior.js +8 -8
  399. package/dist/mcp/tools/list-reminders.js +4 -4
  400. package/dist/mcp/tools/list-tasks.js +12 -12
  401. package/dist/mcp/tools/send-message.js +11 -11
  402. package/dist/mcp/tools/update-task.js +11 -11
  403. package/dist/mcp-http-config-YFZWGX4W.js +28 -0
  404. package/dist/memory-cards-AKXTAQZG.js +179 -0
  405. package/dist/memory-graph-extractor-O7KEZROX.js +21 -0
  406. package/dist/memory-graph-extractor-Q66O22GE.js +21 -0
  407. package/dist/memory-poisoning-defense-ADIGRTRJ.js +223 -0
  408. package/dist/memory-queue-client-4ZAOMEJR.js +16 -0
  409. package/dist/memory-reflection-RAWMCOLK.js +243 -0
  410. package/dist/message-queue-client-EDB46D6M.js +92 -0
  411. package/dist/notifications-JRKUMV4T.js +46 -0
  412. package/dist/notifications-MOTAHF7S.js +46 -0
  413. package/dist/notifications-SSRKYMKV.js +46 -0
  414. package/dist/notifications-XIMWAK7P.js +46 -0
  415. package/dist/orchestration-events-H6EZJEMV.js +26 -0
  416. package/dist/orchestrator-BCSQHCCZ.js +34 -0
  417. package/dist/orchestrator-J2EDJBWJ.js +34 -0
  418. package/dist/orchestrator-QODIF3U2.js +34 -0
  419. package/dist/orchestrator-W6AO4RZM.js +34 -0
  420. package/dist/pipeline-router-2IFHZ5KC.js +14 -0
  421. package/dist/pipeline-router-VCJCI5W7.js +14 -0
  422. package/dist/pipeline-router-VEP3NSZF.js +14 -0
  423. package/dist/pipeline-router-WV34UOJV.js +14 -0
  424. package/dist/plan-limits-IQK6XLCF.js +27 -0
  425. package/dist/project-boot-QWRBVBFG.js +299 -0
  426. package/dist/projection-worker-74KP2LHZ.js +1034 -0
  427. package/dist/projection-worker-GJ2M2BUF.js +1034 -0
  428. package/dist/projection-worker-HOLOWWX7.js +1034 -0
  429. package/dist/projection-worker-JEC7EM5Y.js +1034 -0
  430. package/dist/reranker-SIUVV2JD.js +19 -0
  431. package/dist/reranker-TEEWFPPU.js +19 -0
  432. package/dist/reranker-USWG7L7N.js +19 -0
  433. package/dist/reranker-VI3T6F2P.js +19 -0
  434. package/dist/retrieval-health-WIEQKVAV.js +7 -0
  435. package/dist/review-polling-DNBH4D7X.js +125 -0
  436. package/dist/review-polling-FAG2O7R4.js +125 -0
  437. package/dist/review-polling-RRD7IIEV.js +125 -0
  438. package/dist/review-polling-WVH6DK22.js +125 -0
  439. package/dist/runtime/index.js +11 -11
  440. package/dist/session-events-67N3ESQN.js +37 -0
  441. package/dist/session-events-NCPIQK5Q.js +37 -0
  442. package/dist/session-events-SF75L7NG.js +37 -0
  443. package/dist/session-events-VTP7KQQM.js +37 -0
  444. package/dist/session-kill-telemetry-5MTQD4JW.js +30 -0
  445. package/dist/session-scope-6QDWFFGE.js +87 -0
  446. package/dist/session-scope-FZ7CJ2PU.js +87 -0
  447. package/dist/session-scope-QGR72GYJ.js +87 -0
  448. package/dist/session-scope-YRJWFFQ5.js +87 -0
  449. package/dist/setup-wizard-2MGNOCDA.js +12 -0
  450. package/dist/setup-wizard-2ZHU6PBC.js +12 -0
  451. package/dist/setup-wizard-LGMBT5MA.js +12 -0
  452. package/dist/setup-wizard-MC6OYLSN.js +12 -0
  453. package/dist/skill-refinement-645HA6R7.js +158 -0
  454. package/dist/skill-refinement-6S5GJPBC.js +158 -0
  455. package/dist/skill-refinement-7M3OO2KL.js +158 -0
  456. package/dist/skill-refinement-HBS65LE7.js +158 -0
  457. package/dist/steward-gate-JSGYBZRR.js +14 -0
  458. package/dist/support-outbox-TIC66SRX.js +494 -0
  459. package/dist/support-outbox-YLXLMEKF.js +503 -0
  460. package/dist/task-enforcement-7CV4AMJY.js +439 -0
  461. package/dist/task-enforcement-BQ4L3T2J.js +439 -0
  462. package/dist/task-enforcement-L5EZK5MJ.js +439 -0
  463. package/dist/task-enforcement-S6KEUCL6.js +439 -0
  464. package/dist/task-scope-47VM3OGT.js +36 -0
  465. package/dist/task-scope-MONXB37O.js +36 -0
  466. package/dist/task-scope-RPYOVJOD.js +36 -0
  467. package/dist/task-scope-V6BS7L5C.js +36 -0
  468. package/dist/tasks-crud-AMWLBEJT.js +78 -0
  469. package/dist/tasks-crud-LD2WCC5Z.js +78 -0
  470. package/dist/tasks-crud-SMVAMAK7.js +78 -0
  471. package/dist/tasks-crud-UVSMJ7SQ.js +78 -0
  472. package/dist/tasks-notify-5KWFXJBA.js +39 -0
  473. package/dist/tasks-notify-6Q2CJIR5.js +39 -0
  474. package/dist/tasks-notify-FG2NXZP6.js +39 -0
  475. package/dist/tasks-notify-NBHN537I.js +39 -0
  476. package/dist/tasks-review-333PSSFU.js +48 -0
  477. package/dist/tasks-review-B6VOLVVZ.js +48 -0
  478. package/dist/tasks-review-MFD4VTZL.js +48 -0
  479. package/dist/tasks-review-MYPYFT6C.js +48 -0
  480. package/dist/telemetry-upload-45DH7FR7.js +740 -0
  481. package/dist/telemetry-upload-OSTVGOIS.js +740 -0
  482. package/dist/telemetry-upload-PNLXKL43.js +740 -0
  483. package/dist/telemetry-upload-QOKD4NUY.js +740 -0
  484. package/dist/token-budget-RJ2VKVYI.js +85 -0
  485. package/dist/tool-capability-index-ANXYTG5M.js +10 -0
  486. package/dist/tool-telemetry-W6I2BO5E.js +17 -0
  487. package/dist/tui/App.js +17 -17
  488. package/dist/tui-data-A6PDJW45.js +259 -0
  489. package/dist/tui-data-GOGDXQF5.js +259 -0
  490. package/dist/tui-data-VIY77WXK.js +259 -0
  491. package/dist/tui-data-YOZSLQMZ.js +259 -0
  492. package/dist/wiki-acl-Z5XZ6X4K.js +111 -0
  493. package/dist/worker-gate-34CD6WYY.js +21 -0
  494. package/dist/worker-gate-7T2DKS3A.js +21 -0
  495. package/dist/worker-gate-LN2IHRFB.js +21 -0
  496. package/dist/worker-gate-MQJTGE5N.js +21 -0
  497. package/dist/workflow-engine-KWAYDFUW.js +28 -0
  498. package/dist/workflow-engine-PXQ6N3C7.js +28 -0
  499. package/dist/workflow-engine-TECXAR65.js +28 -0
  500. package/dist/workflow-engine-UWEMT2OU.js +28 -0
  501. package/dist/worktree-5Q4VB2LR.js +27 -0
  502. package/dist/worktree-sweep-5KENYHYC.js +20 -0
  503. package/package.json +1 -1
  504. package/release-notes.json +87 -24
@@ -0,0 +1,456 @@
1
+ import {
2
+ getGitRoot,
3
+ isWorktreeDirty
4
+ } from "./chunk-DJ2MBAAF.js";
5
+
6
+ // src/lib/worktree-sweep.ts
7
+ import { execFileSync } from "child_process";
8
+ import { existsSync, readdirSync, readFileSync, statSync } from "fs";
9
+ import path from "path";
10
+ var GIT_TIMEOUT_MS = 1e4;
11
+ var DIRTY_ORPHAN_MAX_AGE_MS = 7 * 24 * 60 * 60 * 1e3;
12
+ function isWorktreeUnpushed(wtPath, branch) {
13
+ if (!branch) return false;
14
+ try {
15
+ const remote = execFileSync("git", ["-C", wtPath, "rev-parse", "--abbrev-ref", `${branch}@{upstream}`], { encoding: "utf-8", timeout: GIT_TIMEOUT_MS, stdio: ["pipe", "pipe", "ignore"] }).trim();
16
+ if (!remote) return true;
17
+ const ahead = execFileSync("git", ["-C", wtPath, "rev-list", `${remote}..${branch}`, "--count"], { encoding: "utf-8", timeout: GIT_TIMEOUT_MS, stdio: ["pipe", "pipe", "ignore"] }).trim();
18
+ return parseInt(ahead, 10) > 0;
19
+ } catch {
20
+ try {
21
+ let ahead = "";
22
+ try {
23
+ ahead = execFileSync("git", ["-C", wtPath, "rev-list", `main..${branch}`, "--count"], { encoding: "utf-8", timeout: GIT_TIMEOUT_MS, stdio: ["pipe", "pipe", "ignore"] }).trim();
24
+ } catch {
25
+ ahead = execFileSync("git", ["-C", wtPath, "rev-list", `master..${branch}`, "--count"], { encoding: "utf-8", timeout: GIT_TIMEOUT_MS, stdio: ["pipe", "pipe", "ignore"] }).trim();
26
+ }
27
+ return parseInt(ahead, 10) > 0;
28
+ } catch {
29
+ return true;
30
+ }
31
+ }
32
+ }
33
+ var REPO_ALIASES = {
34
+ "exe-crm": ["openclaw", "exe-crm"],
35
+ "exe-wiki": ["ink", "exe-wiki"]
36
+ };
37
+ function discoverRepoPaths() {
38
+ const roots = [];
39
+ let exeOsRoot = null;
40
+ let dir = path.dirname(new URL(import.meta.url).pathname);
41
+ for (let i = 0; i < 5; i++) {
42
+ const pkgPath = path.join(dir, "package.json");
43
+ if (existsSync(pkgPath)) {
44
+ try {
45
+ const pkg = JSON.parse(readFileSync(pkgPath, "utf8"));
46
+ if (pkg.name === "@askexenow/exe-os") {
47
+ exeOsRoot = dir;
48
+ break;
49
+ }
50
+ } catch {
51
+ }
52
+ }
53
+ dir = path.dirname(dir);
54
+ }
55
+ if (!exeOsRoot) {
56
+ exeOsRoot = process.cwd();
57
+ }
58
+ roots.push(exeOsRoot);
59
+ const parentDir = path.dirname(exeOsRoot);
60
+ try {
61
+ const siblings = readdirSync(parentDir);
62
+ for (const sibling of siblings) {
63
+ if (sibling.startsWith(".")) continue;
64
+ const siblingPath = path.join(parentDir, sibling);
65
+ if (siblingPath === exeOsRoot) continue;
66
+ const root = getGitRoot(siblingPath);
67
+ if (root && !roots.includes(root)) {
68
+ roots.push(root);
69
+ }
70
+ }
71
+ } catch {
72
+ }
73
+ for (const aliases of Object.values(REPO_ALIASES)) {
74
+ for (const alias of aliases) {
75
+ const aliasPath = path.join(parentDir, alias);
76
+ if (existsSync(aliasPath)) {
77
+ const root = getGitRoot(aliasPath);
78
+ if (root && !roots.includes(root)) {
79
+ roots.push(root);
80
+ }
81
+ }
82
+ }
83
+ }
84
+ return roots;
85
+ }
86
+ function listWorktrees(repoRoot) {
87
+ try {
88
+ const output = execFileSync("git", ["worktree", "list", "--porcelain"], {
89
+ cwd: repoRoot,
90
+ encoding: "utf8",
91
+ timeout: GIT_TIMEOUT_MS,
92
+ stdio: ["pipe", "pipe", "pipe"]
93
+ });
94
+ const worktrees = [];
95
+ let currentPath = "";
96
+ for (const line of output.split("\n")) {
97
+ if (line.startsWith("worktree ")) {
98
+ currentPath = line.slice("worktree ".length);
99
+ } else if (line.startsWith("branch ") && currentPath) {
100
+ const branch = line.slice("branch refs/heads/".length);
101
+ worktrees.push({ path: currentPath, branch });
102
+ currentPath = "";
103
+ }
104
+ }
105
+ return worktrees;
106
+ } catch {
107
+ return [];
108
+ }
109
+ }
110
+ function detectMainBranch(repoRoot) {
111
+ for (const candidate of ["main", "master"]) {
112
+ try {
113
+ execFileSync("git", ["rev-parse", "--verify", `refs/heads/${candidate}`], {
114
+ cwd: repoRoot,
115
+ encoding: "utf8",
116
+ timeout: GIT_TIMEOUT_MS,
117
+ stdio: ["pipe", "pipe", "pipe"]
118
+ });
119
+ return candidate;
120
+ } catch {
121
+ }
122
+ }
123
+ return null;
124
+ }
125
+ function isBranchMerged(repoRoot, branch, into) {
126
+ try {
127
+ const merged = execFileSync("git", ["branch", "--merged", into], {
128
+ cwd: repoRoot,
129
+ encoding: "utf8",
130
+ timeout: GIT_TIMEOUT_MS,
131
+ stdio: ["pipe", "pipe", "pipe"]
132
+ });
133
+ return merged.split("\n").map((l) => l.replace(/^[*+]?\s+/, "").trim()).includes(branch);
134
+ } catch {
135
+ return false;
136
+ }
137
+ }
138
+ function hasLiveTmuxSession(agentName) {
139
+ try {
140
+ const sessions = execFileSync("tmux", ["list-sessions", "-F", "#S"], {
141
+ encoding: "utf8",
142
+ timeout: 5e3,
143
+ stdio: ["pipe", "pipe", "ignore"]
144
+ }).trim();
145
+ if (!sessions) return false;
146
+ for (const session of sessions.split("\n")) {
147
+ const agentPart = session.split("-")[0];
148
+ if (!agentPart) continue;
149
+ const baseName = agentPart.replace(/\d+$/, "");
150
+ if (baseName === agentName || agentPart === agentName) return true;
151
+ }
152
+ return false;
153
+ } catch {
154
+ return false;
155
+ }
156
+ }
157
+ function removeWorktree(repoRoot, wtPath) {
158
+ try {
159
+ execFileSync("git", ["worktree", "remove", wtPath, "--force"], {
160
+ cwd: repoRoot,
161
+ encoding: "utf8",
162
+ timeout: GIT_TIMEOUT_MS,
163
+ stdio: ["pipe", "pipe", "pipe"]
164
+ });
165
+ return true;
166
+ } catch {
167
+ return false;
168
+ }
169
+ }
170
+ function deleteBranch(repoRoot, branch) {
171
+ try {
172
+ execFileSync("git", ["branch", "-D", branch], {
173
+ cwd: repoRoot,
174
+ encoding: "utf8",
175
+ timeout: GIT_TIMEOUT_MS,
176
+ stdio: ["pipe", "pipe", "pipe"]
177
+ });
178
+ return true;
179
+ } catch {
180
+ return false;
181
+ }
182
+ }
183
+ function deleteRemoteBranch(repoRoot, branch) {
184
+ try {
185
+ execFileSync("git", ["push", "origin", "--delete", branch], {
186
+ cwd: repoRoot,
187
+ encoding: "utf8",
188
+ timeout: 15e3,
189
+ stdio: ["pipe", "pipe", "pipe"]
190
+ });
191
+ return true;
192
+ } catch {
193
+ return false;
194
+ }
195
+ }
196
+ function pruneWorktreeRegistry(repoRoot) {
197
+ try {
198
+ execFileSync("git", ["worktree", "prune"], {
199
+ cwd: repoRoot,
200
+ encoding: "utf8",
201
+ timeout: GIT_TIMEOUT_MS,
202
+ stdio: ["pipe", "pipe", "pipe"]
203
+ });
204
+ } catch {
205
+ }
206
+ }
207
+ function clearStashes(repoRoot) {
208
+ try {
209
+ const stashList = execFileSync("git", ["stash", "list"], {
210
+ cwd: repoRoot,
211
+ encoding: "utf8",
212
+ timeout: GIT_TIMEOUT_MS,
213
+ stdio: ["pipe", "pipe", "pipe"]
214
+ }).trim();
215
+ if (!stashList) return 0;
216
+ const count = stashList.split("\n").length;
217
+ execFileSync("git", ["stash", "clear"], {
218
+ cwd: repoRoot,
219
+ encoding: "utf8",
220
+ timeout: GIT_TIMEOUT_MS,
221
+ stdio: ["pipe", "pipe", "pipe"]
222
+ });
223
+ return count;
224
+ } catch {
225
+ return 0;
226
+ }
227
+ }
228
+ function parseAgentName(wtPath) {
229
+ const dirName = path.basename(wtPath);
230
+ if (!dirName) return null;
231
+ return dirName.replace(/\d+$/, "") || dirName;
232
+ }
233
+ function getDirMtimeMs(dirPath) {
234
+ try {
235
+ return statSync(dirPath).mtimeMs;
236
+ } catch {
237
+ return null;
238
+ }
239
+ }
240
+ function archiveDirtyWorktree(wtPath, agentName) {
241
+ const timestamp = (/* @__PURE__ */ new Date()).toISOString().replace(/[:.]/g, "-").slice(0, 19);
242
+ const quarantineBranch = `quarantine/${agentName}-${timestamp}`;
243
+ try {
244
+ execFileSync("git", ["-C", wtPath, "checkout", "-b", quarantineBranch], {
245
+ encoding: "utf8",
246
+ timeout: GIT_TIMEOUT_MS,
247
+ stdio: ["pipe", "pipe", "pipe"]
248
+ });
249
+ execFileSync("git", ["-C", wtPath, "add", "-A"], {
250
+ encoding: "utf8",
251
+ timeout: GIT_TIMEOUT_MS,
252
+ stdio: ["pipe", "pipe", "pipe"]
253
+ });
254
+ execFileSync("git", [
255
+ "-C",
256
+ wtPath,
257
+ "commit",
258
+ "-m",
259
+ `[quarantine] Auto-archived dirty orphan worktree
260
+
261
+ Agent: ${agentName}
262
+ Original worktree: ${wtPath}
263
+ Archived by worktree-sweep after ${DIRTY_ORPHAN_MAX_AGE_MS / 864e5}-day dirty orphan threshold.`
264
+ ], {
265
+ encoding: "utf8",
266
+ timeout: GIT_TIMEOUT_MS,
267
+ stdio: ["pipe", "pipe", "pipe"],
268
+ env: {
269
+ ...process.env,
270
+ GIT_AUTHOR_NAME: "exe-os daemon",
271
+ GIT_AUTHOR_EMAIL: "daemon@exe-os.local",
272
+ GIT_COMMITTER_NAME: "exe-os daemon",
273
+ GIT_COMMITTER_EMAIL: "daemon@exe-os.local"
274
+ }
275
+ });
276
+ process.stderr.write(`[worktree-sweep] Archived dirty changes to branch ${quarantineBranch}
277
+ `);
278
+ return true;
279
+ } catch {
280
+ return false;
281
+ }
282
+ }
283
+ async function sweepWorktrees(options = {}) {
284
+ const dryRun = options.dryRun ?? false;
285
+ const repoPaths = options.repoPaths ?? discoverRepoPaths();
286
+ const result = {
287
+ reposScanned: 0,
288
+ removed: [],
289
+ branchesDeleted: [],
290
+ stashesCleared: 0,
291
+ skipped: [],
292
+ errors: []
293
+ };
294
+ for (const repoPath of repoPaths) {
295
+ const repoRoot = getGitRoot(repoPath);
296
+ if (!repoRoot) continue;
297
+ result.reposScanned++;
298
+ const repoName = path.basename(repoRoot);
299
+ const mainBranch = detectMainBranch(repoRoot);
300
+ if (!dryRun) {
301
+ pruneWorktreeRegistry(repoRoot);
302
+ }
303
+ const worktrees = listWorktrees(repoRoot);
304
+ for (const wt of worktrees) {
305
+ if (!wt.path.includes("/.worktrees/")) continue;
306
+ const agentName = parseAgentName(wt.path);
307
+ const wtName = path.basename(wt.path);
308
+ if (agentName && hasLiveTmuxSession(agentName)) {
309
+ result.skipped.push({
310
+ repo: repoName,
311
+ worktree: wtName,
312
+ branch: wt.branch,
313
+ reason: "live tmux session"
314
+ });
315
+ continue;
316
+ }
317
+ if (existsSync(wt.path) && isWorktreeDirty(wt.path)) {
318
+ const mtimeMs = getDirMtimeMs(wt.path);
319
+ const ageMs = mtimeMs !== null ? Date.now() - mtimeMs : 0;
320
+ if (ageMs >= DIRTY_ORPHAN_MAX_AGE_MS && agentName && !dryRun) {
321
+ const ageD = Math.round(ageMs / 864e5);
322
+ process.stderr.write(
323
+ `[worktree-sweep] Dirty orphan aged out (${ageD}d), archiving: ${repoName}/.worktrees/${wtName}
324
+ `
325
+ );
326
+ const archived = archiveDirtyWorktree(wt.path, agentName);
327
+ if (archived) {
328
+ } else {
329
+ result.skipped.push({
330
+ repo: repoName,
331
+ worktree: wtName,
332
+ branch: wt.branch,
333
+ reason: `uncommitted changes (archive failed after ${ageD}d)`
334
+ });
335
+ continue;
336
+ }
337
+ } else if (ageMs >= DIRTY_ORPHAN_MAX_AGE_MS && dryRun) {
338
+ const ageD = Math.round(ageMs / 864e5);
339
+ result.removed.push({ repo: repoName, worktree: wtName, branch: wt.branch });
340
+ process.stderr.write(
341
+ `[worktree-sweep] [DRY-RUN] Would archive+remove dirty orphan (${ageD}d): ${repoName}/.worktrees/${wtName}
342
+ `
343
+ );
344
+ continue;
345
+ } else {
346
+ result.skipped.push({
347
+ repo: repoName,
348
+ worktree: wtName,
349
+ branch: wt.branch,
350
+ reason: "uncommitted changes"
351
+ });
352
+ continue;
353
+ }
354
+ }
355
+ if (existsSync(wt.path) && isWorktreeUnpushed(wt.path, wt.branch)) {
356
+ result.skipped.push({
357
+ repo: repoName,
358
+ worktree: wtName,
359
+ branch: wt.branch,
360
+ reason: "unpushed commits \u2014 push first or use --force"
361
+ });
362
+ continue;
363
+ }
364
+ const isMerged = mainBranch ? isBranchMerged(repoRoot, wt.branch, mainBranch) : false;
365
+ if (dryRun) {
366
+ result.removed.push({ repo: repoName, worktree: wtName, branch: wt.branch });
367
+ if (isMerged || !mainBranch) {
368
+ result.branchesDeleted.push({ repo: repoName, branch: wt.branch, remote: true });
369
+ } else {
370
+ result.branchesDeleted.push({ repo: repoName, branch: wt.branch, remote: false });
371
+ }
372
+ continue;
373
+ }
374
+ const removed = removeWorktree(repoRoot, wt.path);
375
+ if (!removed) {
376
+ result.errors.push(`${repoName}: failed to remove worktree ${wtName}`);
377
+ continue;
378
+ }
379
+ result.removed.push({ repo: repoName, worktree: wtName, branch: wt.branch });
380
+ process.stderr.write(`[worktree-sweep] Removed ${repoName}/.worktrees/${wtName} (branch: ${wt.branch})
381
+ `);
382
+ const localDeleted = deleteBranch(repoRoot, wt.branch);
383
+ let remoteDeleted = false;
384
+ if (localDeleted) {
385
+ remoteDeleted = deleteRemoteBranch(repoRoot, wt.branch);
386
+ }
387
+ if (localDeleted) {
388
+ result.branchesDeleted.push({ repo: repoName, branch: wt.branch, remote: remoteDeleted });
389
+ }
390
+ }
391
+ if (!dryRun) {
392
+ const cleared = clearStashes(repoRoot);
393
+ if (cleared > 0) {
394
+ result.stashesCleared += cleared;
395
+ process.stderr.write(`[worktree-sweep] Cleared ${cleared} stash(es) in ${repoName}
396
+ `);
397
+ }
398
+ }
399
+ if (!dryRun) {
400
+ pruneWorktreeRegistry(repoRoot);
401
+ }
402
+ }
403
+ return result;
404
+ }
405
+ function cleanupAgentWorktree(repoRoot, agentName) {
406
+ const worktreesDir = path.join(repoRoot, ".worktrees");
407
+ if (!existsSync(worktreesDir)) return "";
408
+ const notes = [];
409
+ try {
410
+ const entries = readdirSync(worktreesDir);
411
+ for (const entry of entries) {
412
+ const baseName = entry.replace(/\d+$/, "") || entry;
413
+ const agentBase = agentName.replace(/\d+$/, "") || agentName;
414
+ if (baseName !== agentBase) continue;
415
+ const wtPath = path.join(worktreesDir, entry);
416
+ const branch = getWorktreeBranch(repoRoot, wtPath);
417
+ if (isWorktreeDirty(wtPath)) {
418
+ notes.push(`Worktree .worktrees/${entry} has uncommitted changes \u2014 preserved`);
419
+ continue;
420
+ }
421
+ if (isWorktreeUnpushed(wtPath, branch)) {
422
+ notes.push(`Worktree .worktrees/${entry} has unpushed commits \u2014 preserved`);
423
+ continue;
424
+ }
425
+ if (removeWorktree(repoRoot, wtPath)) {
426
+ notes.push(`Removed worktree .worktrees/${entry}`);
427
+ if (branch && deleteBranch(repoRoot, branch)) {
428
+ notes.push(`Deleted branch ${branch}`);
429
+ if (deleteRemoteBranch(repoRoot, branch)) {
430
+ notes.push(`Deleted remote branch ${branch}`);
431
+ }
432
+ }
433
+ }
434
+ }
435
+ } catch {
436
+ }
437
+ pruneWorktreeRegistry(repoRoot);
438
+ return notes.join("\n");
439
+ }
440
+ function getWorktreeBranch(repoRoot, wtPath) {
441
+ try {
442
+ const worktrees = listWorktrees(repoRoot);
443
+ for (const wt of worktrees) {
444
+ if (wt.path === wtPath) return wt.branch;
445
+ }
446
+ return null;
447
+ } catch {
448
+ return null;
449
+ }
450
+ }
451
+
452
+ export {
453
+ discoverRepoPaths,
454
+ sweepWorktrees,
455
+ cleanupAgentWorktree
456
+ };
@@ -0,0 +1,85 @@
1
+ import {
2
+ deactivateBehavior
3
+ } from "./chunk-GACE3UCH.js";
4
+ import {
5
+ getActiveAgent
6
+ } from "./chunk-DHP3ISXV.js";
7
+ import {
8
+ canCoordinate,
9
+ getClient
10
+ } from "./chunk-ZJP3ZONM.js";
11
+
12
+ // src/mcp/tools/deactivate-behavior.ts
13
+ import { z } from "zod";
14
+ function registerDeactivateBehavior(server) {
15
+ server.registerTool(
16
+ "deactivate_behavior",
17
+ {
18
+ title: "Deactivate Behavior",
19
+ description: "Soft-delete a behavior by setting active = 0. RESTRICTED: only coordinator or founder sessions can use this. Use list_behaviors to find the behavior ID first.",
20
+ inputSchema: {
21
+ behavior_id: z.string().describe("UUID of the behavior to deactivate")
22
+ }
23
+ },
24
+ async ({ behavior_id }) => {
25
+ const caller = getActiveAgent();
26
+ try {
27
+ const { StewardGate } = await import("./steward-gate-JSGYBZRR.js");
28
+ const steward = new StewardGate();
29
+ const gateDecision = await steward.checkAuthority(caller.agentId || "unknown", "deactivate_behavior", behavior_id);
30
+ if (!gateDecision.allowed) {
31
+ return { content: [{ type: "text", text: `Steward gate denied: ${gateDecision.reason}` }], isError: true };
32
+ }
33
+ } catch {
34
+ }
35
+ const allowed = canCoordinate(caller.agentId, caller.agentRole);
36
+ if (!allowed) {
37
+ return {
38
+ content: [{
39
+ type: "text",
40
+ text: `Permission denied. Only the coordinator or founder sessions can deactivate behaviors. You are "${caller.agentId}".`
41
+ }],
42
+ isError: true
43
+ };
44
+ }
45
+ const client = getClient();
46
+ const result = await client.execute({
47
+ sql: `SELECT id, agent_id, content, domain, priority FROM behaviors WHERE id = ?`,
48
+ args: [behavior_id]
49
+ });
50
+ if (result.rows.length === 0) {
51
+ return {
52
+ content: [{
53
+ type: "text",
54
+ text: `Behavior not found: ${behavior_id}`
55
+ }],
56
+ isError: true
57
+ };
58
+ }
59
+ const row = result.rows[0];
60
+ const wasActive = await deactivateBehavior(behavior_id);
61
+ if (!wasActive) {
62
+ return {
63
+ content: [{
64
+ type: "text",
65
+ text: `Behavior ${behavior_id} was already inactive.`
66
+ }]
67
+ };
68
+ }
69
+ return {
70
+ content: [{
71
+ type: "text",
72
+ text: `Deactivated behavior for ${row.agent_id}.
73
+ ID: ${row.id}
74
+ Domain: ${row.domain ?? "none"}
75
+ Priority: ${row.priority}
76
+ Content: ${row.content}`
77
+ }]
78
+ };
79
+ }
80
+ );
81
+ }
82
+
83
+ export {
84
+ registerDeactivateBehavior
85
+ };
@@ -0,0 +1,54 @@
1
+ import {
2
+ processCRMEvent
3
+ } from "./chunk-S5JWN7XT.js";
4
+
5
+ // src/gateway/adapters/crm-webhook.ts
6
+ function parseTwentyWebhook(payload) {
7
+ if (!payload || typeof payload !== "object") return null;
8
+ const p = payload;
9
+ const eventName = p.eventName;
10
+ if (!eventName || typeof eventName !== "string") return null;
11
+ const dotIndex = eventName.indexOf(".");
12
+ if (dotIndex === -1) return null;
13
+ const objectType = eventName.slice(0, dotIndex);
14
+ const eventType = eventName.slice(dotIndex + 1);
15
+ if (!objectType || !eventType) return null;
16
+ const normalizedObjectType = objectType.charAt(0).toUpperCase() + objectType.slice(1);
17
+ const record = p.record ?? {};
18
+ if (typeof record !== "object") return null;
19
+ return {
20
+ eventType,
21
+ objectType: normalizedObjectType,
22
+ record
23
+ };
24
+ }
25
+ function createCRMWebhookHandler(options) {
26
+ return async (body) => {
27
+ const event = parseTwentyWebhook(body);
28
+ if (!event) {
29
+ console.warn(
30
+ "[crm-webhook] Malformed CRM webhook payload \u2014 skipping"
31
+ );
32
+ return;
33
+ }
34
+ console.log(
35
+ `[crm-webhook] ${event.objectType}.${event.eventType} received`
36
+ );
37
+ try {
38
+ const logs = await processCRMEvent(event, options?.executor, options?.triggers);
39
+ if (logs.length > 0 && options?.onFired) {
40
+ options.onFired(logs);
41
+ }
42
+ } catch (err) {
43
+ console.error(
44
+ "[crm-webhook] Error processing CRM event:",
45
+ err instanceof Error ? err.message : err
46
+ );
47
+ }
48
+ };
49
+ }
50
+
51
+ export {
52
+ parseTwentyWebhook,
53
+ createCRMWebhookHandler
54
+ };
@@ -0,0 +1,81 @@
1
+ // src/bin/fast-db-init.ts
2
+ async function fastDbInit() {
3
+ const { isInitialized, getClient, setExternalClient } = await import("./lib/database.js");
4
+ if (isInitialized()) {
5
+ return getClient();
6
+ }
7
+ const forceDirect = process.env.EXE_DB_DIRECT === "1" || process.env.EXE_DB_READONLY === "1" || process.env.EXE_SKIP_DAEMON === "1";
8
+ if (!forceDirect) {
9
+ try {
10
+ const { connectEmbedDaemon, sendDaemonRequest, isClientConnected, disconnectClient } = await import("./lib/exe-daemon-client.js");
11
+ const { deserializeResultSet } = await import("./daemon-protocol-XW2OLNBS.js");
12
+ await Promise.race([
13
+ connectEmbedDaemon(),
14
+ new Promise((_, reject) => setTimeout(() => reject(new Error("Daemon socket timeout (2s)")), 2e3))
15
+ ]);
16
+ if (isClientConnected()) {
17
+ const daemonClient = {
18
+ async execute(stmt) {
19
+ const sql = typeof stmt === "string" ? stmt : stmt.sql;
20
+ const args = typeof stmt === "string" ? [] : Array.isArray(stmt.args) ? stmt.args : [];
21
+ const resp = await sendDaemonRequest({ type: "db-execute", sql, args });
22
+ if (resp.error) throw new Error(String(resp.error));
23
+ if (resp.db) return deserializeResultSet(resp.db);
24
+ throw new Error("Unexpected daemon response");
25
+ },
26
+ async batch(stmts, mode) {
27
+ const statements = stmts.map((s) => {
28
+ const sql = typeof s === "string" ? s : s.sql;
29
+ const args = typeof s === "string" ? [] : Array.isArray(s.args) ? s.args : [];
30
+ return { sql, args };
31
+ });
32
+ const resp = await sendDaemonRequest({ type: "db-batch", statements, mode: mode ?? "deferred" });
33
+ if (resp.error) throw new Error(String(resp.error));
34
+ const batchResults = resp["db-batch"];
35
+ if (batchResults) return batchResults.map(deserializeResultSet);
36
+ throw new Error("Unexpected daemon batch response");
37
+ },
38
+ async transaction(_mode) {
39
+ throw new Error("Transactions not supported via daemon socket");
40
+ },
41
+ async executeMultiple(_sql) {
42
+ throw new Error("executeMultiple not supported via daemon socket");
43
+ },
44
+ async migrate(_stmts) {
45
+ throw new Error("migrate not supported via daemon socket");
46
+ },
47
+ sync() {
48
+ return Promise.resolve(void 0);
49
+ },
50
+ close() {
51
+ },
52
+ get closed() {
53
+ return false;
54
+ },
55
+ get protocol() {
56
+ return "file";
57
+ }
58
+ };
59
+ try {
60
+ await daemonClient.execute("SELECT 1");
61
+ } catch {
62
+ try {
63
+ disconnectClient();
64
+ } catch {
65
+ }
66
+ throw new Error("Daemon socket validation failed");
67
+ }
68
+ setExternalClient(daemonClient);
69
+ return daemonClient;
70
+ }
71
+ } catch {
72
+ }
73
+ }
74
+ const { initStore } = await import("./lib/store.js");
75
+ await initStore({ lightweight: true });
76
+ return getClient();
77
+ }
78
+
79
+ export {
80
+ fastDbInit
81
+ };