@askexenow/exe-os 0.9.271 → 0.9.273

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 (562) hide show
  1. package/dist/active-agent-BDYXURXQ.js +26 -0
  2. package/dist/active-agent-YWBGAKGU.js +25 -0
  3. package/dist/agentic-ontology-56VHSVS3.js +25 -0
  4. package/dist/backfill-metadata-A3534S32.js +597 -0
  5. package/dist/backfill-metadata-B6F2KJJV.js +597 -0
  6. package/dist/backfill-metadata-BOM2MXLI.js +597 -0
  7. package/dist/backfill-metadata-G46ABBVR.js +597 -0
  8. package/dist/backfill-metadata-TAU33HJS.js +597 -0
  9. package/dist/backfill-metadata-VAV27KJK.js +597 -0
  10. package/dist/behaviors-USUTDXVA.js +25 -0
  11. package/dist/bin/agentic-ontology-backfill.js +5 -5
  12. package/dist/bin/agentic-reflection-backfill.js +6 -6
  13. package/dist/bin/agentic-semantic-label.js +5 -5
  14. package/dist/bin/backfill-conversations.js +4 -4
  15. package/dist/bin/backfill-responses.js +4 -4
  16. package/dist/bin/backfill-vectors.js +5 -5
  17. package/dist/bin/bulk-sync-postgres.js +6 -6
  18. package/dist/bin/cc-doctor.js +4 -4
  19. package/dist/bin/cleanup-stale-review-tasks.js +10 -10
  20. package/dist/bin/cli.js +16 -16
  21. package/dist/bin/exe-agent-config.js +3 -3
  22. package/dist/bin/exe-agent.js +4 -4
  23. package/dist/bin/exe-assign.js +5 -5
  24. package/dist/bin/exe-boot.js +17 -17
  25. package/dist/bin/exe-call.js +4 -4
  26. package/dist/bin/exe-cloud.js +4 -4
  27. package/dist/bin/exe-dispatch.js +10 -10
  28. package/dist/bin/exe-doctor.js +1 -1
  29. package/dist/bin/exe-export-behaviors.js +7 -7
  30. package/dist/bin/exe-forget.js +6 -6
  31. package/dist/bin/exe-gateway.js +7 -7
  32. package/dist/bin/exe-healthcheck.js +4 -4
  33. package/dist/bin/exe-heartbeat.js +10 -10
  34. package/dist/bin/exe-kill.js +13 -13
  35. package/dist/bin/exe-launch-agent.js +37 -19
  36. package/dist/bin/exe-new-employee.js +6 -6
  37. package/dist/bin/exe-pending-messages.js +11 -11
  38. package/dist/bin/exe-pending-notifications.js +33 -18
  39. package/dist/bin/exe-pending-reviews.js +10 -10
  40. package/dist/bin/exe-rename.js +4 -4
  41. package/dist/bin/exe-review.js +12 -12
  42. package/dist/bin/exe-search.js +5 -5
  43. package/dist/bin/exe-session-cleanup.js +15 -15
  44. package/dist/bin/exe-settings.js +5 -5
  45. package/dist/bin/exe-start-codex.js +11 -11
  46. package/dist/bin/exe-start-opencode.js +8 -8
  47. package/dist/bin/exe-status.js +11 -11
  48. package/dist/bin/exe-team.js +3 -3
  49. package/dist/bin/git-sweep.js +11 -11
  50. package/dist/bin/graph-backfill.js +4 -4
  51. package/dist/bin/graph-export.js +5 -5
  52. package/dist/bin/import-history.js +7 -7
  53. package/dist/bin/install.js +6 -6
  54. package/dist/bin/intercom-check.js +4 -4
  55. package/dist/bin/mcp-sessions.js +2 -2
  56. package/dist/bin/orchestration-metrics.js +4 -4
  57. package/dist/bin/postgres-agentic-reflection-backfill.js +2 -2
  58. package/dist/bin/postgres-agentic-semantic-backfill.js +1 -1
  59. package/dist/bin/scan-tasks.js +10 -10
  60. package/dist/bin/setup.js +1 -1
  61. package/dist/bin/shard-migrate.js +4 -4
  62. package/dist/capacity-monitor-2GJOFXGB.js +49 -0
  63. package/dist/capacity-monitor-3Z7W4K25.js +49 -0
  64. package/dist/capacity-monitor-BENS3N7B.js +49 -0
  65. package/dist/capacity-monitor-IFVRCIM7.js +49 -0
  66. package/dist/capacity-monitor-MQUUEZKB.js +49 -0
  67. package/dist/capacity-monitor-Q47GBDSY.js +49 -0
  68. package/dist/catchup-brief-B4KGAIPU.js +151 -0
  69. package/dist/catchup-brief-NMOV3SSP.js +151 -0
  70. package/dist/catchup-brief-RP4QHXNT.js +151 -0
  71. package/dist/catchup-brief-TKA6TEK4.js +151 -0
  72. package/dist/catchup-brief-VMF3ESTZ.js +151 -0
  73. package/dist/catchup-brief-ZL7V3BXC.js +151 -0
  74. package/dist/chunk-23KJ2LXY.js +58 -0
  75. package/dist/chunk-2KWVJV6I.js +171 -0
  76. package/dist/chunk-2NQQP3FF.js +630 -0
  77. package/dist/chunk-3A4SOC66.js +551 -0
  78. package/dist/chunk-3FU5I3KV.js +526 -0
  79. package/dist/chunk-3GSGDPLK.js +171 -0
  80. package/dist/chunk-3IM3JNQV.js +377 -0
  81. package/dist/chunk-3OM3V545.js +448 -0
  82. package/dist/chunk-3T27ZQT6.js +495 -0
  83. package/dist/chunk-3VI3QIHU.js +214 -0
  84. package/dist/chunk-3WG3RRWA.js +1345 -0
  85. package/dist/chunk-42A3JV3A.js +128 -0
  86. package/dist/chunk-46IEEKPU.js +13696 -0
  87. package/dist/chunk-46WLFLGP.js +1073 -0
  88. package/dist/chunk-4JMPQB7K.js +1148 -0
  89. package/dist/chunk-4L25LLQM.js +382 -0
  90. package/dist/chunk-4Q7X3SAM.js +204 -0
  91. package/dist/chunk-4UAUCFHA.js +526 -0
  92. package/dist/chunk-4VRJX2SP.js +495 -0
  93. package/dist/chunk-57RBAR2A.js +214 -0
  94. package/dist/chunk-57UAFTO2.js +3958 -0
  95. package/dist/chunk-5AS622MM.js +3958 -0
  96. package/dist/chunk-5JF5OQQU.js +89 -0
  97. package/dist/chunk-5LTY4GLX.js +13745 -0
  98. package/dist/chunk-5M5RYJ22.js +3955 -0
  99. package/dist/chunk-5YO2FER3.js +76 -0
  100. package/dist/chunk-62DEE65H.js +371 -0
  101. package/dist/chunk-62YI2JOC.js +333 -0
  102. package/dist/chunk-64T6DFSS.js +447 -0
  103. package/dist/chunk-6AGPWYFC.js +447 -0
  104. package/dist/chunk-6BWDP63Z.js +197 -0
  105. package/dist/chunk-6CH7TYBG.js +58 -0
  106. package/dist/chunk-6CHHFVRQ.js +284 -0
  107. package/dist/chunk-6D64562N.js +330 -0
  108. package/dist/chunk-6F35WOSR.js +447 -0
  109. package/dist/chunk-6GPYL7TX.js +214 -0
  110. package/dist/chunk-6HQ22FC6.js +81 -0
  111. package/dist/chunk-6KWLUVFL.js +54 -0
  112. package/dist/chunk-6N5ISWBF.js +1148 -0
  113. package/dist/chunk-6OD7PVMC.js +333 -0
  114. package/dist/chunk-6ZSH2BZR.js +244 -0
  115. package/dist/chunk-74MF4T3T.js +3962 -0
  116. package/dist/chunk-77H7IO3O.js +382 -0
  117. package/dist/chunk-7BUWNG6M.js +159 -0
  118. package/dist/chunk-7ET5CYTD.js +382 -0
  119. package/dist/chunk-7IWLKR6N.js +76 -0
  120. package/dist/chunk-7OEUOJL5.js +1021 -0
  121. package/dist/chunk-7YEQI2WF.js +13745 -0
  122. package/dist/chunk-AIRJTKDK.js +204 -0
  123. package/dist/chunk-AJ63GPM7.js +54 -0
  124. package/dist/chunk-ATJ3NXDP.js +244 -0
  125. package/dist/chunk-B5IS7LE4.js +128 -0
  126. package/dist/chunk-BFJ45HQT.js +244 -0
  127. package/dist/chunk-BKINEQVI.js +244 -0
  128. package/dist/chunk-BMHE3UQU.js +495 -0
  129. package/dist/chunk-BNTUZVPS.js +1921 -0
  130. package/dist/chunk-BOJV6NI3.js +128 -0
  131. package/dist/chunk-BPHWI6N2.js +284 -0
  132. package/dist/chunk-BXCQWWJP.js +185 -0
  133. package/dist/chunk-BZ6K7AY3.js +50 -0
  134. package/dist/chunk-C54KIFLS.js +214 -0
  135. package/dist/chunk-C6ODVGTC.js +818 -0
  136. package/dist/chunk-C6OYEJJI.js +260 -0
  137. package/dist/chunk-CHBGCQXG.js +333 -0
  138. package/dist/chunk-CHBHR5W6.js +3556 -0
  139. package/dist/chunk-CHUOANKE.js +346 -0
  140. package/dist/chunk-CSF4RUCN.js +58 -0
  141. package/dist/chunk-CXKHWCNN.js +204 -0
  142. package/dist/chunk-CZR6Z5D7.js +330 -0
  143. package/dist/chunk-D24ANCWY.js +204 -0
  144. package/dist/chunk-D2T3272U.js +171 -0
  145. package/dist/chunk-DBJCWK6T.js +377 -0
  146. package/dist/chunk-DCHEIVGT.js +221 -0
  147. package/dist/chunk-DF4SM6ZX.js +128 -0
  148. package/dist/chunk-DHIBLMSP.js +30 -0
  149. package/dist/chunk-DOAC6CLC.js +127 -0
  150. package/dist/chunk-DOGNJ4VR.js +818 -0
  151. package/dist/chunk-DYXJFUCI.js +818 -0
  152. package/dist/chunk-E2AF2WYY.js +346 -0
  153. package/dist/chunk-E2KZEZZW.js +1090 -0
  154. package/dist/chunk-E4KWB4WM.js +348 -0
  155. package/dist/chunk-EGR2NYID.js +50 -0
  156. package/dist/chunk-ENU7URWK.js +1073 -0
  157. package/dist/chunk-EQ5UBJGX.js +81 -0
  158. package/dist/chunk-EZ7KAZMC.js +132 -0
  159. package/dist/chunk-F4FSSHR4.js +1073 -0
  160. package/dist/chunk-FBRQGHSU.js +377 -0
  161. package/dist/chunk-FPXU56FG.js +346 -0
  162. package/dist/chunk-FY7HHR5I.js +128 -0
  163. package/dist/chunk-FZ42OCSP.js +333 -0
  164. package/dist/chunk-G2S2UMU4.js +159 -0
  165. package/dist/chunk-G33BHQCO.js +70 -0
  166. package/dist/chunk-G5HWDSBH.js +50 -0
  167. package/dist/chunk-GCBG5TFS.js +1345 -0
  168. package/dist/chunk-GESN6IDC.js +127 -0
  169. package/dist/chunk-GHD7QG6P.js +58 -0
  170. package/dist/chunk-GJAILPCX.js +171 -0
  171. package/dist/chunk-GJQTL7RX.js +127 -0
  172. package/dist/chunk-GKUODJS7.js +214 -0
  173. package/dist/chunk-GLCKDEM2.js +97 -0
  174. package/dist/chunk-GLDM2FOM.js +76 -0
  175. package/dist/chunk-GMA34SXV.js +240 -0
  176. package/dist/chunk-GMM2BLFB.js +127 -0
  177. package/dist/chunk-GNM75IOI.js +159 -0
  178. package/dist/chunk-GVAVEBYR.js +2091 -0
  179. package/dist/chunk-GYIX2HLD.js +81 -0
  180. package/dist/chunk-H4LLEQ3F.js +551 -0
  181. package/dist/chunk-HBVCBBDA.js +127 -0
  182. package/dist/chunk-HBYRWOH5.js +171 -0
  183. package/dist/chunk-HFINM2JG.js +284 -0
  184. package/dist/chunk-HJGHALOG.js +1345 -0
  185. package/dist/chunk-HOSJTLBQ.js +513 -0
  186. package/dist/chunk-HRB5CP43.js +13745 -0
  187. package/dist/chunk-IC6HVAS3.js +56 -0
  188. package/dist/chunk-IDCLPPIM.js +3959 -0
  189. package/dist/chunk-IDFJNO44.js +1051 -0
  190. package/dist/chunk-II5SVNBN.js +551 -0
  191. package/dist/chunk-IIRLKWNZ.js +50 -0
  192. package/dist/chunk-ILFJMEY5.js +97 -0
  193. package/dist/chunk-IQXLUTWC.js +50 -0
  194. package/dist/chunk-ISQAOSL3.js +1921 -0
  195. package/dist/chunk-IWXTFDLS.js +244 -0
  196. package/dist/chunk-J2TGVCPE.js +1090 -0
  197. package/dist/chunk-J4Z5GAJ4.js +551 -0
  198. package/dist/chunk-J6V2DCZK.js +382 -0
  199. package/dist/chunk-JJSDZFKM.js +1148 -0
  200. package/dist/chunk-JMN2KOC4.js +128 -0
  201. package/dist/chunk-JP4CLFLR.js +1148 -0
  202. package/dist/chunk-JQVYPBR2.js +81 -0
  203. package/dist/chunk-JTIOZHWG.js +58 -0
  204. package/dist/chunk-KDICWAYV.js +1345 -0
  205. package/dist/chunk-KMU7PFO3.js +1148 -0
  206. package/dist/chunk-KOBIB6WG.js +159 -0
  207. package/dist/chunk-KQFDDQB6.js +13696 -0
  208. package/dist/chunk-KZNSOHCB.js +280 -0
  209. package/dist/chunk-LDDCAATQ.js +1090 -0
  210. package/dist/chunk-LJN2O5IG.js +197 -0
  211. package/dist/chunk-LSIYHKDS.js +54 -0
  212. package/dist/chunk-LVMBYP3C.js +171 -0
  213. package/dist/chunk-M2WQW5NC.js +227 -0
  214. package/dist/chunk-MREDKOS4.js +731 -0
  215. package/dist/chunk-MSF2Y5MS.js +346 -0
  216. package/dist/chunk-MY647ZHR.js +448 -0
  217. package/dist/chunk-MY6SP5NZ.js +551 -0
  218. package/dist/chunk-MZ5CEHPQ.js +89 -0
  219. package/dist/chunk-N2ACW2ZG.js +363 -0
  220. package/dist/chunk-NESTX6DR.js +76 -0
  221. package/dist/chunk-NQZORF6L.js +731 -0
  222. package/dist/chunk-NSMJDATI.js +495 -0
  223. package/dist/chunk-NSQ5JE23.js +1090 -0
  224. package/dist/chunk-NWEFAFJS.js +197 -0
  225. package/dist/chunk-NYF7GHC5.js +526 -0
  226. package/dist/chunk-NZGGRM4P.js +731 -0
  227. package/dist/chunk-NZL567WG.js +81 -0
  228. package/dist/chunk-NZM4E6Y3.js +89 -0
  229. package/dist/chunk-O5OMH6LI.js +244 -0
  230. package/dist/chunk-O6XF6NUN.js +1090 -0
  231. package/dist/chunk-OBUV3W7L.js +163 -0
  232. package/dist/chunk-OF4KG3L7.js +1090 -0
  233. package/dist/chunk-OLDS7LJN.js +495 -0
  234. package/dist/chunk-OO2I22RX.js +38 -0
  235. package/dist/chunk-OPUUT33V.js +447 -0
  236. package/dist/chunk-OQZPSWVN.js +526 -0
  237. package/dist/chunk-OR6KJ5HH.js +58 -0
  238. package/dist/chunk-OT3VMTKB.js +50 -0
  239. package/dist/chunk-OV6NT6QX.js +128 -0
  240. package/dist/chunk-P6RVIOVA.js +157 -0
  241. package/dist/chunk-PDTR3YUU.js +54 -0
  242. package/dist/chunk-PEGTV6EJ.js +1345 -0
  243. package/dist/chunk-PITVTSQW.js +333 -0
  244. package/dist/chunk-PSUAO4MZ.js +345 -0
  245. package/dist/chunk-PUA5564C.js +210 -0
  246. package/dist/chunk-PUQLKLQX.js +731 -0
  247. package/dist/chunk-PWQIS5E5.js +382 -0
  248. package/dist/chunk-PXXHKWDH.js +818 -0
  249. package/dist/chunk-QOC46BDY.js +346 -0
  250. package/dist/chunk-QROKS65G.js +76 -0
  251. package/dist/chunk-R54I2N2T.js +818 -0
  252. package/dist/chunk-RCFYQHUP.js +818 -0
  253. package/dist/chunk-RJTND4YS.js +284 -0
  254. package/dist/chunk-RTA6KSSK.js +89 -0
  255. package/dist/chunk-SBLHQMMZ.js +81 -0
  256. package/dist/chunk-SBX6HSEO.js +159 -0
  257. package/dist/chunk-SEUST6U5.js +284 -0
  258. package/dist/chunk-SG2ANG5C.js +123 -0
  259. package/dist/chunk-SUEQF3ZS.js +214 -0
  260. package/dist/chunk-SVFNKSZV.js +333 -0
  261. package/dist/chunk-SWNAM2NW.js +526 -0
  262. package/dist/chunk-TAQT2DC7.js +330 -0
  263. package/dist/chunk-TB7HFW7M.js +127 -0
  264. package/dist/chunk-TBJP46RP.js +1148 -0
  265. package/dist/chunk-TS7NGPU4.js +1073 -0
  266. package/dist/chunk-TUPDOPMG.js +731 -0
  267. package/dist/chunk-TYKUZVCA.js +1921 -0
  268. package/dist/chunk-TZMXJVZV.js +345 -0
  269. package/dist/chunk-U2DCN7M6.js +1073 -0
  270. package/dist/chunk-UJZPLZLU.js +197 -0
  271. package/dist/chunk-UKRKOJQZ.js +54 -0
  272. package/dist/chunk-UUKDAIH2.js +731 -0
  273. package/dist/chunk-V6VEFEEH.js +1345 -0
  274. package/dist/chunk-VCVGE7HK.js +1921 -0
  275. package/dist/chunk-VIO2ALGH.js +290 -0
  276. package/dist/chunk-VK6YZ6K7.js +1073 -0
  277. package/dist/chunk-VKCUSNJW.js +377 -0
  278. package/dist/chunk-VKT4N6WM.js +495 -0
  279. package/dist/chunk-VQUEP7UA.js +244 -0
  280. package/dist/chunk-VRPPJFIQ.js +1921 -0
  281. package/dist/chunk-VXODHQXB.js +377 -0
  282. package/dist/chunk-WHK7GXFR.js +13745 -0
  283. package/dist/chunk-WP3PVBBP.js +204 -0
  284. package/dist/chunk-WQEUY7DC.js +129 -0
  285. package/dist/chunk-WWPJTPPQ.js +197 -0
  286. package/dist/chunk-WXMXUKCA.js +262 -0
  287. package/dist/chunk-WYZSWV6A.js +346 -0
  288. package/dist/chunk-X2WBH2IO.js +297 -0
  289. package/dist/chunk-X33TSJNO.js +394 -0
  290. package/dist/chunk-X7MMI2UI.js +89 -0
  291. package/dist/chunk-XD6VOXK3.js +159 -0
  292. package/dist/chunk-XG3BQZIK.js +85 -0
  293. package/dist/chunk-XIKBIAOS.js +75 -0
  294. package/dist/chunk-XPEB545Q.js +54 -0
  295. package/dist/chunk-XWH2MLWS.js +330 -0
  296. package/dist/chunk-YH7V73XW.js +89 -0
  297. package/dist/chunk-YHSATGMH.js +3955 -0
  298. package/dist/chunk-YJBCGD46.js +13745 -0
  299. package/dist/chunk-YLOJPYCJ.js +284 -0
  300. package/dist/chunk-YMLM5D65.js +135 -0
  301. package/dist/chunk-YNJPRQ6J.js +377 -0
  302. package/dist/chunk-YSNEHBI6.js +551 -0
  303. package/dist/chunk-Z33XSFND.js +76 -0
  304. package/dist/chunk-ZA7N3ZTA.js +1921 -0
  305. package/dist/chunk-ZD6BMW2K.js +33 -0
  306. package/dist/chunk-ZFRG2MNB.js +382 -0
  307. package/dist/chunk-ZKG5IYCG.js +668 -0
  308. package/dist/chunk-ZRRRSVQF.js +204 -0
  309. package/dist/chunk-ZU4K7ZNX.js +197 -0
  310. package/dist/co-activation-HZMJC34P.js +72 -0
  311. package/dist/co-occurrence-AVYXRV4L.js +74 -0
  312. package/dist/core-memory-554Q3YN5.js +110 -0
  313. package/dist/core-memory-BC4YN5F4.js +110 -0
  314. package/dist/core-memory-NID6R3YR.js +110 -0
  315. package/dist/core-memory-NPJCVUMF.js +110 -0
  316. package/dist/core-memory-OKGXL33Z.js +110 -0
  317. package/dist/core-memory-XHIC5NAB.js +110 -0
  318. package/dist/crdt-sync-ZCH55JNR.js +33 -0
  319. package/dist/crm-webhook-6OMVUUGR.js +10 -0
  320. package/dist/crm-webhook-MHZTXU5N.js +10 -0
  321. package/dist/crm-webhook-TMWJT2Z5.js +10 -0
  322. package/dist/crm-webhook-UCWF3XDB.js +10 -0
  323. package/dist/crm-webhook-XISULXI7.js +10 -0
  324. package/dist/crm-webhook-YJ5A7F2E.js +10 -0
  325. package/dist/cto-delegation-gate-4PMJZL2T.js +206 -0
  326. package/dist/cto-delegation-gate-A7YKXTRO.js +206 -0
  327. package/dist/cto-delegation-gate-JFZFZGC2.js +206 -0
  328. package/dist/cto-delegation-gate-K32M4GVM.js +206 -0
  329. package/dist/cto-delegation-gate-OREBAHUM.js +206 -0
  330. package/dist/cto-delegation-gate-POHESML5.js +206 -0
  331. package/dist/daemon-orchestration-2Q7BYOHC.js +135 -0
  332. package/dist/daemon-orchestration-4RJ2CZJL.js +135 -0
  333. package/dist/daemon-orchestration-HXYPHSYU.js +135 -0
  334. package/dist/daemon-orchestration-I5BE46P3.js +135 -0
  335. package/dist/daemon-orchestration-NKE4FYQS.js +135 -0
  336. package/dist/daemon-orchestration-YWEXRAZA.js +135 -0
  337. package/dist/db-backup-5GA2YFDX.js +33 -0
  338. package/dist/dreaming-3F72ROTL.js +32 -0
  339. package/dist/dreaming-I6KXO6E2.js +32 -0
  340. package/dist/dreaming-JD7MNJGS.js +32 -0
  341. package/dist/dreaming-LCKPA3B4.js +32 -0
  342. package/dist/dreaming-NJBK5ILR.js +32 -0
  343. package/dist/dreaming-SDS5IQYC.js +32 -0
  344. package/dist/exe-drift-VSMIMHL4.js +68 -0
  345. package/dist/exe-export-DVHHIA6Y.js +73 -0
  346. package/dist/exe-export-GIVQDENS.js +73 -0
  347. package/dist/exe-export-IZ2OYMT4.js +73 -0
  348. package/dist/exe-export-JNWX6ZCQ.js +73 -0
  349. package/dist/exe-export-OQXCJLWB.js +73 -0
  350. package/dist/exe-export-YLVAZQAV.js +73 -0
  351. package/dist/exe-import-7N46LSMQ.js +76 -0
  352. package/dist/exe-import-AEJYBLA7.js +76 -0
  353. package/dist/exe-import-FINYUV5T.js +76 -0
  354. package/dist/exe-import-HWPYARCG.js +76 -0
  355. package/dist/exe-import-K4TWTG24.js +76 -0
  356. package/dist/exe-import-LZKZQ54C.js +76 -0
  357. package/dist/exe-key-6FPQHBW6.js +579 -0
  358. package/dist/exe-key-H45JY44F.js +579 -0
  359. package/dist/exe-key-MAEQGTB7.js +579 -0
  360. package/dist/exe-key-N3XYSEXP.js +579 -0
  361. package/dist/exe-key-Q3ZNYT6L.js +579 -0
  362. package/dist/exe-key-Q47RPB45.js +579 -0
  363. package/dist/exe-snapshot-2USE2HHM.js +164 -0
  364. package/dist/exe-snapshot-3TEM3BFD.js +164 -0
  365. package/dist/exe-snapshot-HECGUHL3.js +164 -0
  366. package/dist/exe-snapshot-HZU66HXX.js +164 -0
  367. package/dist/exe-snapshot-L7OQWZUH.js +164 -0
  368. package/dist/exe-snapshot-X5N5KIVJ.js +164 -0
  369. package/dist/fast-db-init-3CNTADVO.js +7 -0
  370. package/dist/fast-db-init-C6IPNVPU.js +7 -0
  371. package/dist/fast-db-init-HXCS2AP5.js +7 -0
  372. package/dist/fast-db-init-I7CMGBAN.js +7 -0
  373. package/dist/fast-db-init-P6YESOUL.js +7 -0
  374. package/dist/fast-db-init-VDNEFVQF.js +7 -0
  375. package/dist/gateway/index.js +8 -8
  376. package/dist/git-staleness-YCEBBIVK.js +110 -0
  377. package/dist/git-task-sweep-C4OV2CEY.js +40 -0
  378. package/dist/git-task-sweep-H34STRNT.js +40 -0
  379. package/dist/git-task-sweep-J66SYJMW.js +40 -0
  380. package/dist/git-task-sweep-JYCD3ZKQ.js +40 -0
  381. package/dist/git-task-sweep-O723DB7F.js +40 -0
  382. package/dist/git-task-sweep-YL7NLDCK.js +40 -0
  383. package/dist/global-procedures-IHZM6C2K.js +20 -0
  384. package/dist/graph-auto-extract-RZQ3MHP2.js +162 -0
  385. package/dist/hooks/bug-report-worker.js +12 -12
  386. package/dist/hooks/codex-stop-task-finalizer.js +12 -12
  387. package/dist/hooks/commit-complete.js +12 -12
  388. package/dist/hooks/error-recall.js +6 -6
  389. package/dist/hooks/exe-heartbeat-hook.js +3 -3
  390. package/dist/hooks/ingest.js +6 -6
  391. package/dist/hooks/instructions-loaded.js +4 -4
  392. package/dist/hooks/manifest.json +19 -19
  393. package/dist/hooks/notification.js +4 -4
  394. package/dist/hooks/post-compact.js +11 -11
  395. package/dist/hooks/post-tool-combined.js +5 -5
  396. package/dist/hooks/pre-compact.js +12 -12
  397. package/dist/hooks/pre-tool-use.js +15 -15
  398. package/dist/hooks/prompt-submit.js +21 -21
  399. package/dist/hooks/session-end.js +16 -16
  400. package/dist/hooks/session-start.js +10 -10
  401. package/dist/hooks/stop.js +15 -15
  402. package/dist/hooks/subagent-stop.js +11 -11
  403. package/dist/hooks/summary-worker.js +15 -15
  404. package/dist/index.js +18 -18
  405. package/dist/installer-4EW5ZDGD.js +296 -0
  406. package/dist/installer-B2JTQO55.js +38 -0
  407. package/dist/installer-MIL352T7.js +342 -0
  408. package/dist/lib/agent-config.js +9 -3
  409. package/dist/lib/cloud-sync.js +4 -4
  410. package/dist/lib/consolidation.js +5 -5
  411. package/dist/lib/database.js +2 -2
  412. package/dist/lib/db.js +2 -2
  413. package/dist/lib/employee-templates.js +4 -4
  414. package/dist/lib/employees.js +2 -2
  415. package/dist/lib/exe-daemon.js +35 -34
  416. package/dist/lib/hybrid-search.js +5 -5
  417. package/dist/lib/identity.js +2 -2
  418. package/dist/lib/messaging.js +12 -10
  419. package/dist/lib/reminders.js +3 -3
  420. package/dist/lib/schedules.js +5 -5
  421. package/dist/lib/session-registry.js +4 -4
  422. package/dist/lib/skill-learning.js +4 -4
  423. package/dist/lib/store.js +4 -4
  424. package/dist/lib/task-router.js +3 -3
  425. package/dist/lib/tasks.js +11 -11
  426. package/dist/lib/tmux-routing.js +9 -9
  427. package/dist/lib/token-spend.js +3 -3
  428. package/dist/mcp/register-tools.js +54 -54
  429. package/dist/mcp/server.js +55 -55
  430. package/dist/mcp/tools/complete-reminder.js +4 -4
  431. package/dist/mcp/tools/create-reminder.js +4 -4
  432. package/dist/mcp/tools/create-task.js +13 -13
  433. package/dist/mcp/tools/deactivate-behavior.js +5 -5
  434. package/dist/mcp/tools/list-reminders.js +4 -4
  435. package/dist/mcp/tools/list-tasks.js +13 -13
  436. package/dist/mcp/tools/send-message.js +12 -12
  437. package/dist/mcp/tools/update-task.js +12 -12
  438. package/dist/mcp-http-config-OJQR246S.js +27 -0
  439. package/dist/memory-cards-IPULSQFA.js +174 -0
  440. package/dist/memory-graph-extractor-3TZZOKHY.js +17 -0
  441. package/dist/memory-poisoning-defense-SGUGR5YJ.js +225 -0
  442. package/dist/memory-reflection-H3WGCEM6.js +238 -0
  443. package/dist/notifications-65STXW6N.js +45 -0
  444. package/dist/notifications-K3JDUPL5.js +45 -0
  445. package/dist/notifications-KQOD66ZK.js +45 -0
  446. package/dist/notifications-PFK5OQEF.js +45 -0
  447. package/dist/notifications-VWPO6NJF.js +45 -0
  448. package/dist/notifications-WCSRQN2V.js +45 -0
  449. package/dist/orchestration-events-O5PSDEIO.js +25 -0
  450. package/dist/orchestrator-3D7QEVGP.js +33 -0
  451. package/dist/orchestrator-CC32RZO5.js +33 -0
  452. package/dist/orchestrator-DWAYSAFR.js +33 -0
  453. package/dist/orchestrator-RAPEJUOI.js +33 -0
  454. package/dist/orchestrator-TL37EAWA.js +33 -0
  455. package/dist/orchestrator-XPG6LJAI.js +33 -0
  456. package/dist/pipeline-router-5NT6FUC3.js +13 -0
  457. package/dist/pipeline-router-ADLTS6DZ.js +13 -0
  458. package/dist/pipeline-router-KSUXONDT.js +13 -0
  459. package/dist/pipeline-router-O6ZLSM6U.js +13 -0
  460. package/dist/pipeline-router-QKLYUYU7.js +13 -0
  461. package/dist/pipeline-router-W2W5XDND.js +13 -0
  462. package/dist/plan-limits-53NXLNDQ.js +26 -0
  463. package/dist/project-boot-ITN3FZMM.js +299 -0
  464. package/dist/projection-worker-27XX5M2W.js +964 -0
  465. package/dist/reranker-3KLYAHO4.js +19 -0
  466. package/dist/reranker-64KDRYPP.js +19 -0
  467. package/dist/reranker-GU7L2PJX.js +19 -0
  468. package/dist/reranker-MGY5A7BQ.js +19 -0
  469. package/dist/reranker-TZEXIJAN.js +19 -0
  470. package/dist/reranker-ZBX6HSU2.js +19 -0
  471. package/dist/review-polling-3ZZ2T26N.js +124 -0
  472. package/dist/review-polling-BBQUF54Q.js +124 -0
  473. package/dist/review-polling-FA2J2Q5O.js +124 -0
  474. package/dist/review-polling-MLS4BQ3N.js +124 -0
  475. package/dist/review-polling-RXQZPGRY.js +124 -0
  476. package/dist/review-polling-YBB6DKA5.js +124 -0
  477. package/dist/runtime/index.js +12 -12
  478. package/dist/session-events-EAODNMNR.js +36 -0
  479. package/dist/session-events-MVO6JNUL.js +36 -0
  480. package/dist/session-events-PRVDH3QS.js +36 -0
  481. package/dist/session-events-PU5OQKMB.js +36 -0
  482. package/dist/session-events-WWGF3B2N.js +36 -0
  483. package/dist/session-events-ZHXXAH6B.js +36 -0
  484. package/dist/session-kill-telemetry-O4TJHHOZ.js +29 -0
  485. package/dist/session-scope-CQXB7VMH.js +86 -0
  486. package/dist/session-scope-HHUMJYF6.js +86 -0
  487. package/dist/session-scope-M47JR2SD.js +86 -0
  488. package/dist/session-scope-MRQYSD5S.js +86 -0
  489. package/dist/session-scope-TAH5BUYW.js +86 -0
  490. package/dist/session-scope-UXZ6RUWC.js +86 -0
  491. package/dist/setup-wizard-UM2RHSBJ.js +12 -0
  492. package/dist/skill-refinement-447DZWNK.js +157 -0
  493. package/dist/skill-refinement-567JSF7L.js +157 -0
  494. package/dist/skill-refinement-6JVQ3TMS.js +157 -0
  495. package/dist/skill-refinement-MJPOHYD5.js +157 -0
  496. package/dist/skill-refinement-NVUBRK22.js +157 -0
  497. package/dist/skill-refinement-XNGD3C62.js +157 -0
  498. package/dist/stack-release-BAPCXMXW.js +713 -0
  499. package/dist/stack-release-W4TWTEZP.js +731 -0
  500. package/dist/steward-gate-VLE7OCKO.js +13 -0
  501. package/dist/task-enforcement-AZEO67N6.js +391 -0
  502. package/dist/task-enforcement-EOYP6IO4.js +391 -0
  503. package/dist/task-enforcement-FUHDL6UR.js +391 -0
  504. package/dist/task-enforcement-L5XQKFOV.js +391 -0
  505. package/dist/task-enforcement-QL3K4N3F.js +391 -0
  506. package/dist/task-enforcement-RJPWWEAE.js +391 -0
  507. package/dist/task-scope-DRQRNWB7.js +35 -0
  508. package/dist/task-scope-GS7TS3UV.js +35 -0
  509. package/dist/task-scope-KQNCP42W.js +35 -0
  510. package/dist/task-scope-SM5F6RD3.js +35 -0
  511. package/dist/task-scope-TZYMB634.js +35 -0
  512. package/dist/task-scope-ZVLUBS4C.js +35 -0
  513. package/dist/tasks-crud-4MSLJWXE.js +77 -0
  514. package/dist/tasks-crud-6TWWETGB.js +77 -0
  515. package/dist/tasks-crud-DBHYO4MM.js +77 -0
  516. package/dist/tasks-crud-EFYWPPEI.js +77 -0
  517. package/dist/tasks-crud-HIPXKRKX.js +77 -0
  518. package/dist/tasks-crud-JIS5B4GZ.js +77 -0
  519. package/dist/tasks-notify-7JBUNE7R.js +38 -0
  520. package/dist/tasks-notify-GEJKT5TO.js +38 -0
  521. package/dist/tasks-notify-OW3JDPLK.js +38 -0
  522. package/dist/tasks-notify-UPIJ3L4O.js +38 -0
  523. package/dist/tasks-notify-W5WVP2FG.js +38 -0
  524. package/dist/tasks-notify-YKEOYOKN.js +38 -0
  525. package/dist/tasks-review-5SJSFTUB.js +47 -0
  526. package/dist/tasks-review-DRKN34HO.js +47 -0
  527. package/dist/tasks-review-IQSAXXXE.js +47 -0
  528. package/dist/tasks-review-JHSYBR5I.js +47 -0
  529. package/dist/tasks-review-KWELLLS3.js +47 -0
  530. package/dist/tasks-review-SUJ6AKAS.js +47 -0
  531. package/dist/telemetry-upload-BSGOXGUP.js +739 -0
  532. package/dist/telemetry-upload-FPQAB6ZU.js +739 -0
  533. package/dist/telemetry-upload-LTX3C5HZ.js +739 -0
  534. package/dist/telemetry-upload-MYVBVUGE.js +739 -0
  535. package/dist/telemetry-upload-UPAABLGK.js +739 -0
  536. package/dist/telemetry-upload-UYEHBFGO.js +739 -0
  537. package/dist/token-budget-2CDWQU3Q.js +84 -0
  538. package/dist/tool-telemetry-7YS7EN7B.js +17 -0
  539. package/dist/tui/App.js +17 -17
  540. package/dist/tui-data-GDGBOS6G.js +258 -0
  541. package/dist/tui-data-LYUZFNO4.js +258 -0
  542. package/dist/tui-data-QM5BOKRF.js +258 -0
  543. package/dist/tui-data-VAE43SM3.js +258 -0
  544. package/dist/tui-data-VXF2RBVM.js +258 -0
  545. package/dist/tui-data-X7HT3FXF.js +258 -0
  546. package/dist/wiki-acl-MJIMXRQV.js +111 -0
  547. package/dist/worker-gate-BZBWTMCY.js +21 -0
  548. package/dist/worker-gate-CHVL6UGT.js +21 -0
  549. package/dist/worker-gate-KQFS4RJE.js +21 -0
  550. package/dist/worker-gate-NRP7CMS7.js +21 -0
  551. package/dist/worker-gate-WQGTZOSM.js +21 -0
  552. package/dist/worker-gate-X2YDTKTL.js +21 -0
  553. package/dist/workflow-engine-AKKOMJJQ.js +28 -0
  554. package/dist/workflow-engine-CYXRZXBM.js +28 -0
  555. package/dist/workflow-engine-EHWQO3LX.js +28 -0
  556. package/dist/workflow-engine-I3OUMSF4.js +28 -0
  557. package/dist/workflow-engine-KMLAXVA4.js +28 -0
  558. package/dist/workflow-engine-PHTLEAXP.js +28 -0
  559. package/dist/worktree-NLSKVRNC.js +26 -0
  560. package/dist/worktree-sweep-44TMEPLE.js +19 -0
  561. package/package.json +1 -1
  562. package/release-notes.json +46 -35
@@ -0,0 +1,260 @@
1
+ import {
2
+ EXE_AI_DIR
3
+ } from "./chunk-VXIMSRTO.js";
4
+
5
+ // src/lib/db-backup.ts
6
+ import { existsSync, readdirSync, unlinkSync, statSync, statfsSync } from "fs";
7
+ import { copyFile, mkdir, unlink } from "fs/promises";
8
+ import path from "path";
9
+ var BACKUP_DIR = path.join(EXE_AI_DIR, "backups");
10
+ var DEFAULT_KEEP_DAYS = 3;
11
+ var DB_NAMES = ["memories.db", "exe-mem.db", "exe-os.db", "exe.db"];
12
+ var REASON_COUNT_CAP = {
13
+ "pre-restart": 5,
14
+ "pre-consolidation": 5,
15
+ "pre-fix": 5,
16
+ "pre-restore": 5
17
+ };
18
+ var MIN_FREE_BYTES = 5 * 1024 * 1024 * 1024;
19
+ function findActiveDb() {
20
+ for (const name of DB_NAMES) {
21
+ const p = path.join(EXE_AI_DIR, name);
22
+ if (existsSync(p)) return p;
23
+ }
24
+ return null;
25
+ }
26
+ async function createBackup(reason = "manual") {
27
+ return createBackupAsync(reason);
28
+ }
29
+ async function createBackupAsync(reason = "manual") {
30
+ const dbPath = findActiveDb();
31
+ if (!dbPath) return null;
32
+ await mkdir(BACKUP_DIR, { recursive: true });
33
+ try {
34
+ let dbSize = 0;
35
+ try {
36
+ dbSize = statSync(dbPath).size;
37
+ } catch {
38
+ }
39
+ const freeBytes = getFreeBytes(BACKUP_DIR);
40
+ if (!hasEnoughDiskSpace(freeBytes, dbSize)) {
41
+ process.stderr.write(
42
+ `[db-backup] DISK GUARD: skipping "${reason}" backup \u2014 ${Math.round(freeBytes / 1024 / 1024)}MB free, need >${Math.round(Math.max(MIN_FREE_BYTES, dbSize * 2) / 1024 / 1024)}MB. Disk is nearly full; refusing to make it worse.
43
+ `
44
+ );
45
+ return null;
46
+ }
47
+ } catch {
48
+ }
49
+ const dbName = path.basename(dbPath, ".db");
50
+ const timestamp = (/* @__PURE__ */ new Date()).toISOString().replace(/[:.]/g, "-").slice(0, 19);
51
+ const backupName = `${dbName}-${reason}-${timestamp}.db`;
52
+ const backupPath = path.join(BACKUP_DIR, backupName);
53
+ try {
54
+ const { getClient } = await import("./lib/database.js");
55
+ const client = getClient();
56
+ await client.execute("PRAGMA wal_checkpoint(TRUNCATE)");
57
+ } catch {
58
+ try {
59
+ const { execFile: execFileCb } = await import("child_process");
60
+ const { promisify } = await import("util");
61
+ const execFileAsync = promisify(execFileCb);
62
+ await execFileAsync("sqlite3", [dbPath, "PRAGMA wal_checkpoint(TRUNCATE);"], { timeout: 3e4 });
63
+ } catch {
64
+ process.stderr.write(`[db-backup] WAL checkpoint skipped \u2014 proceeding with copy (backup may include stale WAL)
65
+ `);
66
+ }
67
+ }
68
+ await copyFile(dbPath, backupPath);
69
+ try {
70
+ const { getClient } = await import("./lib/database.js");
71
+ const client = getClient();
72
+ const chk = await client.execute("PRAGMA quick_check;");
73
+ const result = String(chk.rows[0]?.quick_check ?? chk.rows[0]?.[0] ?? "").trim();
74
+ if (result && result !== "ok") {
75
+ process.stderr.write(`[db-backup] WARNING: backup source failed quick_check (${reason}): ${result}
76
+ `);
77
+ try {
78
+ await unlink(backupPath);
79
+ } catch {
80
+ }
81
+ return null;
82
+ }
83
+ } catch {
84
+ process.stderr.write(`[db-backup] Backup validation skipped (encrypted DB or CLI context) \u2014 proceeding with checkpoint-consistent copy.
85
+ `);
86
+ }
87
+ const walPath = dbPath + "-wal";
88
+ if (existsSync(walPath)) {
89
+ try {
90
+ await copyFile(walPath, backupPath + "-wal");
91
+ } catch {
92
+ }
93
+ }
94
+ const shmPath = dbPath + "-shm";
95
+ if (existsSync(shmPath)) {
96
+ try {
97
+ await copyFile(shmPath, backupPath + "-shm");
98
+ } catch {
99
+ }
100
+ }
101
+ return backupPath;
102
+ }
103
+ function rotateBackups(keepDays = DEFAULT_KEEP_DAYS) {
104
+ if (!existsSync(BACKUP_DIR)) return 0;
105
+ const cutoff = Date.now() - keepDays * 24 * 60 * 60 * 1e3;
106
+ let deleted = 0;
107
+ try {
108
+ const files = readdirSync(BACKUP_DIR);
109
+ for (const file of files) {
110
+ if (!file.endsWith(".db") && !file.endsWith(".db-wal") && !file.endsWith(".db-shm")) continue;
111
+ const filePath = path.join(BACKUP_DIR, file);
112
+ try {
113
+ const stat = statSync(filePath);
114
+ if (stat.mtimeMs < cutoff) {
115
+ unlinkSync(filePath);
116
+ deleted++;
117
+ }
118
+ } catch {
119
+ }
120
+ }
121
+ } catch {
122
+ }
123
+ return deleted;
124
+ }
125
+ function selectBackupsToDelete(backups, keep) {
126
+ if (keep < 0) keep = 0;
127
+ const sorted = [...backups].sort((a, b) => b.mtimeMs - a.mtimeMs);
128
+ return sorted.slice(keep).map((b) => b.path);
129
+ }
130
+ function hasEnoughDiskSpace(freeBytes, backupSizeBytes, minFreeBytes = MIN_FREE_BYTES) {
131
+ const required = Math.max(minFreeBytes, backupSizeBytes * 2);
132
+ return freeBytes >= required;
133
+ }
134
+ function getFreeBytes(dir) {
135
+ try {
136
+ const s = statfsSync(dir);
137
+ return s.bavail * s.bsize;
138
+ } catch {
139
+ return Number.POSITIVE_INFINITY;
140
+ }
141
+ }
142
+ function rotateBackupsByReason(reason, keep) {
143
+ if (!existsSync(BACKUP_DIR)) return 0;
144
+ let deleted = 0;
145
+ try {
146
+ const files = readdirSync(BACKUP_DIR);
147
+ const matches = [];
148
+ for (const file of files) {
149
+ if (!file.endsWith(".db")) continue;
150
+ if (!file.includes(`-${reason}-`)) continue;
151
+ const filePath = path.join(BACKUP_DIR, file);
152
+ try {
153
+ matches.push({ path: filePath, mtimeMs: statSync(filePath).mtimeMs });
154
+ } catch {
155
+ }
156
+ }
157
+ for (const target of selectBackupsToDelete(matches, keep)) {
158
+ for (const p of [target, target + "-wal", target + "-shm"]) {
159
+ try {
160
+ if (existsSync(p)) {
161
+ unlinkSync(p);
162
+ if (p === target) deleted++;
163
+ }
164
+ } catch {
165
+ }
166
+ }
167
+ }
168
+ } catch {
169
+ }
170
+ return deleted;
171
+ }
172
+ function enforceRetention(reason, keepDays = DEFAULT_KEEP_DAYS) {
173
+ let deleted = rotateBackups(keepDays);
174
+ const cap = REASON_COUNT_CAP[reason];
175
+ if (typeof cap === "number") {
176
+ deleted += rotateBackupsByReason(reason, cap);
177
+ }
178
+ return deleted;
179
+ }
180
+ function listBackups() {
181
+ if (!existsSync(BACKUP_DIR)) return [];
182
+ try {
183
+ const files = readdirSync(BACKUP_DIR).filter((f) => f.endsWith(".db") && !f.endsWith("-wal") && !f.endsWith("-shm"));
184
+ return files.map((name) => {
185
+ const p = path.join(BACKUP_DIR, name);
186
+ const stat = statSync(p);
187
+ return { path: p, name, size: stat.size, date: stat.mtime };
188
+ }).sort((a, b) => b.date.getTime() - a.date.getTime());
189
+ } catch {
190
+ return [];
191
+ }
192
+ }
193
+ function hasBackupToday(reason) {
194
+ const today = (/* @__PURE__ */ new Date()).toISOString().slice(0, 10);
195
+ const backups = listBackups();
196
+ return backups.some((b) => b.name.includes(reason) && b.name.includes(today.replace(/-/g, "-")));
197
+ }
198
+ function getLatestBackup() {
199
+ const backups = listBackups();
200
+ return backups.length > 0 ? backups[0].path : null;
201
+ }
202
+ async function restoreBackup(backupPath) {
203
+ const dbPath = findActiveDb();
204
+ if (!dbPath) {
205
+ const target = path.join(EXE_AI_DIR, DB_NAMES[0]);
206
+ const source2 = backupPath ?? getLatestBackup();
207
+ if (!source2 || !existsSync(source2)) return null;
208
+ await copyFile(source2, target);
209
+ return { restored: path.basename(source2), preRestoreBackup: null };
210
+ }
211
+ const source = backupPath ?? getLatestBackup();
212
+ if (!source || !existsSync(source)) return null;
213
+ if (path.resolve(source) === path.resolve(dbPath)) return null;
214
+ const preRestoreBackup = await createBackup("pre-restore");
215
+ await copyFile(source, dbPath);
216
+ const walPath = source + "-wal";
217
+ const shmPath = source + "-shm";
218
+ if (existsSync(walPath)) {
219
+ try {
220
+ await copyFile(walPath, dbPath + "-wal");
221
+ } catch {
222
+ }
223
+ } else {
224
+ try {
225
+ unlinkSync(dbPath + "-wal");
226
+ } catch {
227
+ }
228
+ }
229
+ if (existsSync(shmPath)) {
230
+ try {
231
+ await copyFile(shmPath, dbPath + "-shm");
232
+ } catch {
233
+ }
234
+ } else {
235
+ try {
236
+ unlinkSync(dbPath + "-shm");
237
+ } catch {
238
+ }
239
+ }
240
+ return { restored: path.basename(source), preRestoreBackup };
241
+ }
242
+ function getBackupDir() {
243
+ return BACKUP_DIR;
244
+ }
245
+
246
+ export {
247
+ findActiveDb,
248
+ createBackup,
249
+ createBackupAsync,
250
+ rotateBackups,
251
+ selectBackupsToDelete,
252
+ hasEnoughDiskSpace,
253
+ rotateBackupsByReason,
254
+ enforceRetention,
255
+ listBackups,
256
+ hasBackupToday,
257
+ getLatestBackup,
258
+ restoreBackup,
259
+ getBackupDir
260
+ };
@@ -0,0 +1,333 @@
1
+ import {
2
+ executeAction,
3
+ substituteTemplate
4
+ } from "./chunk-ZFRG2MNB.js";
5
+
6
+ // src/automation/workflow-engine.ts
7
+ import { randomUUID } from "crypto";
8
+ var _definitions = /* @__PURE__ */ new Map();
9
+ var _instances = /* @__PURE__ */ new Map();
10
+ function createWorkflowDefinition(input) {
11
+ const def = {
12
+ id: randomUUID().slice(0, 12),
13
+ ...input,
14
+ created_at: (/* @__PURE__ */ new Date()).toISOString()
15
+ };
16
+ def.steps = def.steps.map((s, i) => ({ ...s, index: s.index || i + 1 }));
17
+ _definitions.set(def.id, def);
18
+ return def;
19
+ }
20
+ function getWorkflowDefinition(id) {
21
+ return _definitions.get(id);
22
+ }
23
+ function listWorkflowDefinitions() {
24
+ return [..._definitions.values()];
25
+ }
26
+ function buildTemplateContext(instance) {
27
+ const ctx = { ...instance.context };
28
+ const stepMap = {};
29
+ for (const sr of instance.step_results) {
30
+ stepMap[String(sr.step_index)] = {
31
+ status: sr.status,
32
+ result: sr.result,
33
+ error: sr.error
34
+ };
35
+ }
36
+ ctx.step = stepMap;
37
+ return ctx;
38
+ }
39
+ function resolveActionParams(action, context) {
40
+ const resolved = {};
41
+ for (const [key, val] of Object.entries(action.params)) {
42
+ resolved[key] = substituteTemplate(val, context);
43
+ }
44
+ return { ...action, params: resolved };
45
+ }
46
+ function startWorkflow(definitionId, context = {}) {
47
+ const def = _definitions.get(definitionId);
48
+ if (!def) throw new Error(`Workflow definition "${definitionId}" not found`);
49
+ const instance = {
50
+ id: randomUUID().slice(0, 12),
51
+ definition_id: definitionId,
52
+ status: "running",
53
+ current_step: 1,
54
+ step_results: [],
55
+ context,
56
+ created_at: (/* @__PURE__ */ new Date()).toISOString(),
57
+ updated_at: (/* @__PURE__ */ new Date()).toISOString()
58
+ };
59
+ _instances.set(instance.id, instance);
60
+ return instance;
61
+ }
62
+ function getWorkflowInstance(id) {
63
+ return _instances.get(id);
64
+ }
65
+ function listWorkflowInstances(status) {
66
+ const all = [..._instances.values()];
67
+ return status ? all.filter((i) => i.status === status) : all;
68
+ }
69
+ async function advanceWorkflow(instanceId) {
70
+ const instance = _instances.get(instanceId);
71
+ if (!instance) throw new Error(`Workflow instance "${instanceId}" not found`);
72
+ if (instance.status !== "running") {
73
+ throw new Error(`Workflow "${instanceId}" is ${instance.status}, cannot advance`);
74
+ }
75
+ const def = _definitions.get(instance.definition_id);
76
+ if (!def) throw new Error(`Workflow definition "${instance.definition_id}" not found`);
77
+ const step = def.steps.find((s) => s.index === instance.current_step);
78
+ if (!step) {
79
+ instance.status = "completed";
80
+ instance.updated_at = (/* @__PURE__ */ new Date()).toISOString();
81
+ return instance;
82
+ }
83
+ const templateCtx = buildTemplateContext(instance);
84
+ const stepResult = {
85
+ step_index: step.index,
86
+ status: "success",
87
+ started_at: (/* @__PURE__ */ new Date()).toISOString()
88
+ };
89
+ switch (step.type) {
90
+ case "execute_action": {
91
+ const action = step.action ?? buildActionFromConnector(step);
92
+ if (!action) {
93
+ stepResult.status = "failed";
94
+ stepResult.error = "No action defined for execute_action step";
95
+ break;
96
+ }
97
+ const resolvedAction = resolveActionParams(action, templateCtx);
98
+ const result = await executeAction(resolvedAction, templateCtx);
99
+ stepResult.status = result.success ? "success" : "failed";
100
+ stepResult.result = result;
101
+ stepResult.error = result.error;
102
+ if (!result.success) {
103
+ instance.status = "failed";
104
+ }
105
+ break;
106
+ }
107
+ case "wait_for_approval": {
108
+ const { createTask } = await import("./lib/tasks.js");
109
+ const { getCoordinatorName } = await import("./lib/employees.js");
110
+ const message = step.approval_message ? substituteTemplate(step.approval_message, templateCtx) : `Workflow "${def.name}" step ${step.index} ("${step.name}") requires approval.`;
111
+ const task = await createTask({
112
+ title: `[Workflow Approval] ${def.name}: ${step.name}`,
113
+ assignedTo: getCoordinatorName(),
114
+ assignedBy: "workflow-engine",
115
+ projectName: "exe-os",
116
+ priority: "p1",
117
+ context: `${message}
118
+
119
+ **Workflow:** ${def.name} (${instance.id})
120
+ **Step:** ${step.index} \u2014 ${step.name}
121
+
122
+ To approve: call approve_workflow_step with instance_id="${instance.id}"
123
+ To reject: call approve_workflow_step with instance_id="${instance.id}" approved=false`,
124
+ baseDir: process.cwd()
125
+ });
126
+ instance.approval_task_id = task.id;
127
+ instance.status = "waiting_approval";
128
+ stepResult.status = "pending_approval";
129
+ break;
130
+ }
131
+ case "conditional": {
132
+ if (!step.condition) {
133
+ stepResult.status = "failed";
134
+ stepResult.error = "No condition defined for conditional step";
135
+ break;
136
+ }
137
+ const resolvedExpr = substituteTemplate(step.condition.expression, templateCtx);
138
+ const conditionMet = evaluateSimpleExpression(resolvedExpr);
139
+ stepResult.result = { expression: resolvedExpr, met: conditionMet };
140
+ if (conditionMet && step.condition.then_step) {
141
+ instance.current_step = step.condition.then_step;
142
+ stepResult.completed_at = (/* @__PURE__ */ new Date()).toISOString();
143
+ instance.step_results.push(stepResult);
144
+ instance.updated_at = (/* @__PURE__ */ new Date()).toISOString();
145
+ return instance;
146
+ } else if (!conditionMet && step.condition.else_step) {
147
+ instance.current_step = step.condition.else_step;
148
+ stepResult.completed_at = (/* @__PURE__ */ new Date()).toISOString();
149
+ instance.step_results.push(stepResult);
150
+ instance.updated_at = (/* @__PURE__ */ new Date()).toISOString();
151
+ return instance;
152
+ }
153
+ break;
154
+ }
155
+ }
156
+ stepResult.completed_at = (/* @__PURE__ */ new Date()).toISOString();
157
+ instance.step_results.push(stepResult);
158
+ if (instance.status === "running") {
159
+ const nextStep = def.steps.find((s) => s.index > step.index);
160
+ if (nextStep) {
161
+ instance.current_step = nextStep.index;
162
+ } else {
163
+ instance.status = "completed";
164
+ }
165
+ }
166
+ instance.updated_at = (/* @__PURE__ */ new Date()).toISOString();
167
+ return instance;
168
+ }
169
+ async function runWorkflow(instanceId) {
170
+ let instance = _instances.get(instanceId);
171
+ if (!instance) throw new Error(`Workflow instance "${instanceId}" not found`);
172
+ while (instance.status === "running") {
173
+ instance = await advanceWorkflow(instanceId);
174
+ }
175
+ return instance;
176
+ }
177
+ async function approveWorkflowStep(instanceId, approved = true) {
178
+ const instance = _instances.get(instanceId);
179
+ if (!instance) throw new Error(`Workflow instance "${instanceId}" not found`);
180
+ if (instance.status !== "waiting_approval") {
181
+ throw new Error(`Workflow "${instanceId}" is not waiting for approval (status: ${instance.status})`);
182
+ }
183
+ const pendingResult = instance.step_results.find(
184
+ (sr) => sr.step_index === instance.current_step && sr.status === "pending_approval"
185
+ );
186
+ if (pendingResult) {
187
+ pendingResult.status = approved ? "approved" : "failed";
188
+ pendingResult.completed_at = (/* @__PURE__ */ new Date()).toISOString();
189
+ pendingResult.result = { approved };
190
+ }
191
+ if (!approved) {
192
+ instance.status = "cancelled";
193
+ instance.updated_at = (/* @__PURE__ */ new Date()).toISOString();
194
+ return instance;
195
+ }
196
+ const def = _definitions.get(instance.definition_id);
197
+ if (!def) throw new Error(`Workflow definition "${instance.definition_id}" not found`);
198
+ const currentStep = def.steps.find((s) => s.index === instance.current_step);
199
+ const nextStep = currentStep ? def.steps.find((s) => s.index > currentStep.index) : void 0;
200
+ if (nextStep) {
201
+ instance.current_step = nextStep.index;
202
+ instance.status = "running";
203
+ } else {
204
+ instance.status = "completed";
205
+ }
206
+ instance.approval_task_id = void 0;
207
+ instance.updated_at = (/* @__PURE__ */ new Date()).toISOString();
208
+ if (instance.status === "running") {
209
+ return runWorkflow(instanceId);
210
+ }
211
+ return instance;
212
+ }
213
+ function buildActionFromConnector(step) {
214
+ if (!step.connector || !step.operation) return null;
215
+ const params = {};
216
+ if (step.payload) {
217
+ for (const [k, v] of Object.entries(step.payload)) {
218
+ params[k] = String(v);
219
+ }
220
+ }
221
+ params._connector = step.connector;
222
+ params._operation = step.operation;
223
+ return {
224
+ type: "mcp_tool",
225
+ params
226
+ };
227
+ }
228
+ function evaluateSimpleExpression(expr) {
229
+ const operators = ["==", "!=", ">=", "<=", ">", "<"];
230
+ for (const op of operators) {
231
+ const idx = expr.indexOf(op);
232
+ if (idx === -1) continue;
233
+ const left = expr.slice(0, idx).trim();
234
+ const right = expr.slice(idx + op.length).trim();
235
+ switch (op) {
236
+ case "==":
237
+ return left === right;
238
+ case "!=":
239
+ return left !== right;
240
+ case ">":
241
+ return Number(left) > Number(right);
242
+ case "<":
243
+ return Number(left) < Number(right);
244
+ case ">=":
245
+ return Number(left) >= Number(right);
246
+ case "<=":
247
+ return Number(left) <= Number(right);
248
+ }
249
+ }
250
+ return expr.trim() !== "" && expr.trim() !== "false" && expr.trim() !== "0";
251
+ }
252
+ async function persistWorkflows() {
253
+ try {
254
+ const { getClient } = await import("./lib/database.js");
255
+ const client = getClient();
256
+ for (const def of _definitions.values()) {
257
+ await client.execute({
258
+ sql: `INSERT OR REPLACE INTO workflow_definitions (id, name, description, steps, trigger_event, created_at)
259
+ VALUES (?, ?, ?, ?, ?, ?)`,
260
+ args: [def.id, def.name, def.description ?? null, JSON.stringify(def.steps), def.trigger_event ?? null, def.created_at]
261
+ });
262
+ }
263
+ for (const inst of _instances.values()) {
264
+ await client.execute({
265
+ sql: `INSERT OR REPLACE INTO workflow_instances
266
+ (id, definition_id, status, current_step, step_results, context, approval_task_id, created_at, updated_at)
267
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`,
268
+ args: [
269
+ inst.id,
270
+ inst.definition_id,
271
+ inst.status,
272
+ inst.current_step,
273
+ JSON.stringify(inst.step_results),
274
+ JSON.stringify(inst.context),
275
+ inst.approval_task_id ?? null,
276
+ inst.created_at,
277
+ inst.updated_at
278
+ ]
279
+ });
280
+ }
281
+ } catch (e) {
282
+ process.stderr.write(`[workflow-engine] persist failed: ${e instanceof Error ? e.message : String(e)}
283
+ `);
284
+ }
285
+ }
286
+ async function loadWorkflows() {
287
+ try {
288
+ const { getClient } = await import("./lib/database.js");
289
+ const client = getClient();
290
+ const defs = await client.execute("SELECT * FROM workflow_definitions");
291
+ for (const row of defs.rows) {
292
+ const def = {
293
+ id: String(row.id),
294
+ name: String(row.name),
295
+ description: String(row.description),
296
+ steps: JSON.parse(String(row.steps)),
297
+ trigger_event: String(row.trigger_event),
298
+ created_at: String(row.created_at)
299
+ };
300
+ _definitions.set(def.id, def);
301
+ }
302
+ const insts = await client.execute("SELECT * FROM workflow_instances WHERE status NOT IN ('completed', 'cancelled')");
303
+ for (const row of insts.rows) {
304
+ const inst = {
305
+ id: String(row.id),
306
+ definition_id: String(row.definition_id),
307
+ status: String(row.status),
308
+ current_step: Number(row.current_step),
309
+ step_results: JSON.parse(String(row.step_results)),
310
+ context: JSON.parse(String(row.context)),
311
+ approval_task_id: row.approval_task_id ? String(row.approval_task_id) : void 0,
312
+ created_at: String(row.created_at),
313
+ updated_at: String(row.updated_at)
314
+ };
315
+ _instances.set(inst.id, inst);
316
+ }
317
+ } catch {
318
+ }
319
+ }
320
+
321
+ export {
322
+ createWorkflowDefinition,
323
+ getWorkflowDefinition,
324
+ listWorkflowDefinitions,
325
+ startWorkflow,
326
+ getWorkflowInstance,
327
+ listWorkflowInstances,
328
+ advanceWorkflow,
329
+ runWorkflow,
330
+ approveWorkflowStep,
331
+ persistWorkflows,
332
+ loadWorkflows
333
+ };