@askexenow/exe-os 0.9.280 → 0.9.281

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 (436) hide show
  1. package/deploy/compose/.env.customer.example +1 -1
  2. package/deploy/compose/.env.default +2 -1
  3. package/deploy/compose/.env.example +1 -1
  4. package/deploy/compose/docker-compose.yml +74 -13
  5. package/deploy/compose/erp-nginx/nginx.conf +52 -0
  6. package/deploy/compose/generate-env.ts +1 -1
  7. package/deploy/compose/init-db.sql +13 -2
  8. package/deploy/stack-manifests/v0.9.json +11 -31
  9. package/dist/active-agent-6ZBHGHXF.js +26 -0
  10. package/dist/active-agent-E23SCYER.js +27 -0
  11. package/dist/active-agent-KMZT44S4.js +26 -0
  12. package/dist/active-agent-LFFTVROM.js +27 -0
  13. package/dist/agentic-ontology-PCZB5HV5.js +25 -0
  14. package/dist/agentic-ontology-PGGJN2ES.js +25 -0
  15. package/dist/assets/tmux.conf +2 -0
  16. package/dist/backfill-metadata-KQ4FEVUR.js +599 -0
  17. package/dist/backfill-metadata-Y3YWCHKJ.js +599 -0
  18. package/dist/behaviors-H4DZECKL.js +39 -0
  19. package/dist/behaviors-WIUTIJF6.js +39 -0
  20. package/dist/bin/agentic-ontology-backfill.js +5 -5
  21. package/dist/bin/agentic-reflection-backfill.js +6 -6
  22. package/dist/bin/agentic-semantic-label.js +5 -5
  23. package/dist/bin/backfill-conversations.js +4 -4
  24. package/dist/bin/backfill-responses.js +4 -4
  25. package/dist/bin/backfill-vectors.js +5 -5
  26. package/dist/bin/bulk-sync-postgres.js +7 -7
  27. package/dist/bin/cc-doctor.js +4 -4
  28. package/dist/bin/cleanup-stale-review-tasks.js +10 -10
  29. package/dist/bin/cli.js +15 -15
  30. package/dist/bin/exe-agent-config.js +2 -2
  31. package/dist/bin/exe-agent.js +4 -4
  32. package/dist/bin/exe-assign.js +5 -5
  33. package/dist/bin/exe-boot.js +17 -17
  34. package/dist/bin/exe-call.js +4 -4
  35. package/dist/bin/exe-cloud.js +5 -5
  36. package/dist/bin/exe-dispatch.js +10 -10
  37. package/dist/bin/exe-doctor.js +1 -1
  38. package/dist/bin/exe-export-behaviors.js +7 -7
  39. package/dist/bin/exe-forget.js +6 -6
  40. package/dist/bin/exe-gateway.js +7 -7
  41. package/dist/bin/exe-healthcheck.js +4 -4
  42. package/dist/bin/exe-heartbeat.js +10 -10
  43. package/dist/bin/exe-kill.js +13 -13
  44. package/dist/bin/exe-launch-agent.js +17 -17
  45. package/dist/bin/exe-new-employee.js +7 -7
  46. package/dist/bin/exe-pending-messages.js +11 -11
  47. package/dist/bin/exe-pending-notifications.js +10 -10
  48. package/dist/bin/exe-pending-reviews.js +10 -10
  49. package/dist/bin/exe-rename.js +4 -4
  50. package/dist/bin/exe-review.js +12 -12
  51. package/dist/bin/exe-search.js +5 -5
  52. package/dist/bin/exe-session-cleanup.js +15 -15
  53. package/dist/bin/exe-settings.js +5 -5
  54. package/dist/bin/exe-start-codex.js +11 -11
  55. package/dist/bin/exe-start-opencode.js +8 -8
  56. package/dist/bin/exe-status.js +11 -11
  57. package/dist/bin/exe-support.js +2 -2
  58. package/dist/bin/exe-team.js +3 -3
  59. package/dist/bin/exe-watchdog.js +17 -2
  60. package/dist/bin/git-sweep.js +11 -11
  61. package/dist/bin/graph-backfill.js +4 -4
  62. package/dist/bin/graph-export.js +5 -5
  63. package/dist/bin/import-history.js +7 -7
  64. package/dist/bin/install.js +8 -7
  65. package/dist/bin/intercom-check.js +4 -4
  66. package/dist/bin/mcp-sessions.js +2 -2
  67. package/dist/bin/orchestration-metrics.js +4 -4
  68. package/dist/bin/postgres-agentic-reflection-backfill.js +2 -2
  69. package/dist/bin/postgres-agentic-semantic-backfill.js +1 -1
  70. package/dist/bin/scan-tasks.js +10 -10
  71. package/dist/bin/setup.js +1 -1
  72. package/dist/bin/shard-migrate.js +4 -4
  73. package/dist/bin/stack-update.js +3 -3
  74. package/dist/bin/vps-health-gate.js +1 -1
  75. package/dist/capability-cards-F22XWGLB.js +88 -0
  76. package/dist/capability-cards-KCKITXXZ.js +88 -0
  77. package/dist/capacity-monitor-CHXGKVEO.js +50 -0
  78. package/dist/capacity-monitor-L3M5KB6T.js +50 -0
  79. package/dist/catchup-brief-BVZANLRZ.js +154 -0
  80. package/dist/catchup-brief-LDUGMC7S.js +154 -0
  81. package/dist/catchup-brief-NZDLL7SA.js +154 -0
  82. package/dist/catchup-brief-OOIXVGBA.js +154 -0
  83. package/dist/catchup-brief-UPXHDYTB.js +154 -0
  84. package/dist/chunk-2BI3FQKL.js +1876 -0
  85. package/dist/chunk-2CJUQGHH.js +362 -0
  86. package/dist/chunk-2EVYBMBJ.js +128 -0
  87. package/dist/chunk-2NQOZOXG.js +2113 -0
  88. package/dist/chunk-2QK5E3LB.js +128 -0
  89. package/dist/chunk-2VTCG4ZU.js +1352 -0
  90. package/dist/chunk-2YGI36DV.js +1119 -0
  91. package/dist/chunk-32BQN2QN.js +185 -0
  92. package/dist/chunk-33JMO4UV.js +157 -0
  93. package/dist/chunk-3DZAYLXY.js +377 -0
  94. package/dist/chunk-3MGBE7GR.js +76 -0
  95. package/dist/chunk-3MTV4FJL.js +271 -0
  96. package/dist/chunk-3NN7VQ27.js +1352 -0
  97. package/dist/chunk-4533HNOG.js +70 -0
  98. package/dist/chunk-456UW3MT.js +731 -0
  99. package/dist/chunk-4AU56XV2.js +58 -0
  100. package/dist/chunk-4MRP6EBR.js +280 -0
  101. package/dist/chunk-4MRWW52U.js +14219 -0
  102. package/dist/chunk-4WWECNAY.js +50 -0
  103. package/dist/chunk-4ZJDDR6L.js +171 -0
  104. package/dist/chunk-522EOPM6.js +382 -0
  105. package/dist/chunk-52UDAVZE.js +3208 -0
  106. package/dist/chunk-5FAMUB4X.js +204 -0
  107. package/dist/chunk-5PGZJQUI.js +58 -0
  108. package/dist/chunk-67TZJXNZ.js +262 -0
  109. package/dist/chunk-6FEZ7GN2.js +123 -0
  110. package/dist/chunk-6MOGND7S.js +14219 -0
  111. package/dist/chunk-6TRSVY7L.js +181 -0
  112. package/dist/chunk-6WCS7ZNK.js +85 -0
  113. package/dist/chunk-6WRYDREW.js +539 -0
  114. package/dist/chunk-72UA2FB3.js +181 -0
  115. package/dist/chunk-77DMFEOL.js +30 -0
  116. package/dist/chunk-7COXVQ5W.js +214 -0
  117. package/dist/chunk-7HLWBYH7.js +60 -0
  118. package/dist/chunk-ALSTZCWT.js +204 -0
  119. package/dist/chunk-ARUTDXZX.js +280 -0
  120. package/dist/chunk-AU47B4QY.js +129 -0
  121. package/dist/chunk-AXOREWVL.js +836 -0
  122. package/dist/chunk-B5MNC54V.js +127 -0
  123. package/dist/chunk-B74VSMKX.js +1350 -0
  124. package/dist/chunk-BHWLH44J.js +362 -0
  125. package/dist/chunk-BUPZ3HD2.js +85 -0
  126. package/dist/chunk-BWVLMA53.js +2113 -0
  127. package/dist/chunk-C5WLBKMJ.js +50 -0
  128. package/dist/chunk-C62T6R2A.js +97 -0
  129. package/dist/chunk-CV5KBAIK.js +33 -0
  130. package/dist/chunk-DAYSDWXA.js +1068 -0
  131. package/dist/chunk-DI4URIUB.js +227 -0
  132. package/dist/chunk-DNTCYFJ6.js +76 -0
  133. package/dist/chunk-DPDRRS7T.js +103 -0
  134. package/dist/chunk-DT3EV6CW.js +103 -0
  135. package/dist/chunk-DX45HDWY.js +1076 -0
  136. package/dist/chunk-E72BD6MG.js +284 -0
  137. package/dist/chunk-EAPUSVKS.js +375 -0
  138. package/dist/chunk-EFUANRRT.js +85 -0
  139. package/dist/chunk-EG2SCT5R.js +1352 -0
  140. package/dist/chunk-EJD2JU77.js +58 -0
  141. package/dist/chunk-EMXYUAVP.js +81 -0
  142. package/dist/chunk-ENM2TAAM.js +14219 -0
  143. package/dist/chunk-EPDRTPVP.js +1876 -0
  144. package/dist/chunk-EW6XDHID.js +221 -0
  145. package/dist/chunk-EYEGSAWZ.js +1094 -0
  146. package/dist/chunk-F6L33PAQ.js +231 -0
  147. package/dist/chunk-FC2SCTVE.js +38 -0
  148. package/dist/chunk-FSRKIZGZ.js +630 -0
  149. package/dist/chunk-FTG7I5CB.js +81 -0
  150. package/dist/chunk-GVFRLWX7.js +30 -0
  151. package/dist/chunk-H3XMZOWW.js +1119 -0
  152. package/dist/chunk-HAKXE6LN.js +123 -0
  153. package/dist/chunk-HLP3ZDTW.js +448 -0
  154. package/dist/chunk-HOYWKQAA.js +510 -0
  155. package/dist/chunk-HWDD64IW.js +712 -0
  156. package/dist/chunk-HWMCULHY.js +127 -0
  157. package/dist/chunk-HZZHRZPK.js +210 -0
  158. package/dist/chunk-ICRWTYNW.js +103 -0
  159. package/dist/chunk-J5MWPC33.js +167 -0
  160. package/dist/chunk-JBXANNNB.js +70 -0
  161. package/dist/chunk-JPBMIYWF.js +1352 -0
  162. package/dist/chunk-JY6EXBFI.js +373 -0
  163. package/dist/chunk-JZLIBXI7.js +14219 -0
  164. package/dist/chunk-JZPTKXJ6.js +668 -0
  165. package/dist/chunk-KEYMA4ZP.js +510 -0
  166. package/dist/chunk-KHGNN6GL.js +2078 -0
  167. package/dist/chunk-KVLB2PD6.js +97 -0
  168. package/dist/chunk-L3YBRBKL.js +1076 -0
  169. package/dist/chunk-L7VZ32NA.js +89 -0
  170. package/dist/chunk-LEHLADW4.js +221 -0
  171. package/dist/chunk-LPD4HILQ.js +262 -0
  172. package/dist/chunk-LSJ3ADDI.js +51 -0
  173. package/dist/chunk-LUMS2MAS.js +58 -0
  174. package/dist/chunk-LV4SEC6C.js +394 -0
  175. package/dist/chunk-LXXBEI4A.js +284 -0
  176. package/dist/chunk-M4NPCAIH.js +456 -0
  177. package/dist/chunk-MFJ62LQ5.js +157 -0
  178. package/dist/chunk-MGEZNKOD.js +836 -0
  179. package/dist/chunk-MJ7X5IBW.js +227 -0
  180. package/dist/chunk-MLGRWCY4.js +54 -0
  181. package/dist/chunk-MQZX57IY.js +348 -0
  182. package/dist/chunk-MY7MFF6J.js +103 -0
  183. package/dist/chunk-MYA2X5OY.js +185 -0
  184. package/dist/chunk-MYEABW5Z.js +630 -0
  185. package/dist/chunk-MZ2TDCAL.js +402 -0
  186. package/dist/chunk-NF3FRB7Z.js +271 -0
  187. package/dist/chunk-NXYIFEPV.js +539 -0
  188. package/dist/chunk-O2GVE5B5.js +58 -0
  189. package/dist/chunk-O5GUCDR2.js +456 -0
  190. package/dist/chunk-OBZNRECA.js +128 -0
  191. package/dist/chunk-OMZ2RLJG.js +214 -0
  192. package/dist/chunk-ORDHJRWN.js +299 -0
  193. package/dist/chunk-OSPIJMCD.js +210 -0
  194. package/dist/chunk-OUGWEH4J.js +240 -0
  195. package/dist/chunk-OV5MJQGC.js +1876 -0
  196. package/dist/chunk-PC635OAG.js +4318 -0
  197. package/dist/chunk-PH46R4J6.js +348 -0
  198. package/dist/chunk-PJP2EP7P.js +394 -0
  199. package/dist/chunk-PODFWH3V.js +333 -0
  200. package/dist/chunk-PPWH3SHR.js +1068 -0
  201. package/dist/chunk-PWPJK7KB.js +4318 -0
  202. package/dist/chunk-PXONZVG4.js +377 -0
  203. package/dist/chunk-QAOGJRZD.js +369 -0
  204. package/dist/chunk-QC3LAEI7.js +197 -0
  205. package/dist/chunk-QDWQDUWI.js +668 -0
  206. package/dist/chunk-QKJFD6BH.js +1350 -0
  207. package/dist/chunk-QNYVJGFM.js +345 -0
  208. package/dist/chunk-QQF3XGQ5.js +14219 -0
  209. package/dist/chunk-QRPFQNI3.js +150 -0
  210. package/dist/chunk-QSSU5XWD.js +731 -0
  211. package/dist/chunk-QXZAGVAV.js +2078 -0
  212. package/dist/chunk-RA54MW64.js +244 -0
  213. package/dist/chunk-RF7PUWXI.js +197 -0
  214. package/dist/chunk-S3INDYSO.js +244 -0
  215. package/dist/chunk-SLQVTHH5.js +369 -0
  216. package/dist/chunk-SY2B74KL.js +345 -0
  217. package/dist/chunk-T6QPXXXW.js +712 -0
  218. package/dist/chunk-TO5M5YCT.js +41 -0
  219. package/dist/chunk-TQ4VXUAF.js +129 -0
  220. package/dist/chunk-UAB7RQC4.js +41 -0
  221. package/dist/chunk-UMEIBDYW.js +97 -0
  222. package/dist/chunk-UXW5TB7Y.js +240 -0
  223. package/dist/chunk-VB2N5WOX.js +150 -0
  224. package/dist/chunk-VLZEMRG3.js +167 -0
  225. package/dist/chunk-VM3V6VK7.js +230 -0
  226. package/dist/chunk-VMCGKBHB.js +1352 -0
  227. package/dist/chunk-VNIYZAR5.js +128 -0
  228. package/dist/chunk-VYV4KOD2.js +85 -0
  229. package/dist/chunk-W4SRJBAT.js +171 -0
  230. package/dist/chunk-W5W3LZ3Q.js +54 -0
  231. package/dist/chunk-WDNZEOM3.js +38 -0
  232. package/dist/chunk-WUKEXVOR.js +3208 -0
  233. package/dist/chunk-X3Z35Q6L.js +373 -0
  234. package/dist/chunk-X4VOU6BQ.js +382 -0
  235. package/dist/chunk-X6EEVSVG.js +290 -0
  236. package/dist/chunk-XFHGWGNB.js +1094 -0
  237. package/dist/chunk-XKOLRWYA.js +33 -0
  238. package/dist/chunk-XMMIL3UD.js +402 -0
  239. package/dist/chunk-XWILC6VA.js +290 -0
  240. package/dist/chunk-Y4OQCX4C.js +97 -0
  241. package/dist/chunk-Y67VYYOA.js +231 -0
  242. package/dist/chunk-YGQCQTQH.js +230 -0
  243. package/dist/chunk-YGWFBN5A.js +299 -0
  244. package/dist/chunk-YMKUXZIG.js +379 -0
  245. package/dist/chunk-YOMLMT7E.js +230 -0
  246. package/dist/chunk-YPESIZOB.js +14219 -0
  247. package/dist/chunk-Z2CGCIU2.js +89 -0
  248. package/dist/chunk-ZLAWNHQR.js +448 -0
  249. package/dist/chunk-ZME5UQSN.js +333 -0
  250. package/dist/co-activation-NUEQYXE5.js +73 -0
  251. package/dist/co-activation-ZG5HLBCZ.js +73 -0
  252. package/dist/co-occurrence-7S5KWQB2.js +94 -0
  253. package/dist/co-occurrence-X5SWDXT2.js +94 -0
  254. package/dist/core-memory-GOPBRGGZ.js +110 -0
  255. package/dist/core-memory-XLCU6L5M.js +110 -0
  256. package/dist/crdt-sync-EPKHPGRZ.js +33 -0
  257. package/dist/crdt-sync-UIQJ5U7T.js +33 -0
  258. package/dist/crm-webhook-MKN23JNU.js +10 -0
  259. package/dist/crm-webhook-SM63BPXO.js +10 -0
  260. package/dist/cto-delegation-gate-PQY5TOVZ.js +279 -0
  261. package/dist/cto-delegation-gate-V5VVUR3G.js +279 -0
  262. package/dist/daemon-orchestration-C7AAS67Q.js +138 -0
  263. package/dist/daemon-orchestration-OBCAJB2H.js +138 -0
  264. package/dist/db-backup-F7VP4QRH.js +33 -0
  265. package/dist/db-backup-KVYC57W7.js +33 -0
  266. package/dist/doc-graph-extractor-H2ETEINP.js +132 -0
  267. package/dist/doc-graph-extractor-PCUZEYCH.js +132 -0
  268. package/dist/dreaming-4OZXSLE3.js +33 -0
  269. package/dist/dreaming-Z2RYEYNT.js +33 -0
  270. package/dist/exe-drift-GEWNIK7A.js +69 -0
  271. package/dist/exe-drift-XCGH7AFO.js +69 -0
  272. package/dist/exe-export-7DKAU5IP.js +75 -0
  273. package/dist/exe-export-BCHH6OE6.js +75 -0
  274. package/dist/exe-import-PDRIZVYF.js +78 -0
  275. package/dist/exe-import-ZCKUDFKL.js +78 -0
  276. package/dist/exe-key-FUWLLI3U.js +580 -0
  277. package/dist/exe-key-RKKNVUMP.js +580 -0
  278. package/dist/exe-snapshot-G4I5FQMK.js +337 -0
  279. package/dist/exe-snapshot-GWU7QTZK.js +337 -0
  280. package/dist/fast-db-init-6QG6YQNT.js +7 -0
  281. package/dist/fast-db-init-X2QDQUA4.js +7 -0
  282. package/dist/founder-context-TOMNUBGJ.js +96 -0
  283. package/dist/founder-context-UU3V6MAS.js +96 -0
  284. package/dist/gateway/index.js +8 -8
  285. package/dist/git-staleness-FEPFMZKF.js +111 -0
  286. package/dist/git-staleness-HYVYLCW3.js +111 -0
  287. package/dist/git-task-sweep-IRV52JIM.js +41 -0
  288. package/dist/git-task-sweep-T6BSM3GS.js +41 -0
  289. package/dist/global-procedures-3AURRMKO.js +21 -0
  290. package/dist/global-procedures-JPCYBZYC.js +21 -0
  291. package/dist/graph-auto-extract-OC3AOSMW.js +182 -0
  292. package/dist/graph-auto-extract-PVDYEJBY.js +182 -0
  293. package/dist/hooks/bug-report-worker.js +12 -12
  294. package/dist/hooks/codex-stop-task-finalizer.js +12 -12
  295. package/dist/hooks/commit-complete.js +12 -12
  296. package/dist/hooks/error-recall.js +6 -6
  297. package/dist/hooks/exe-heartbeat-hook.js +3 -3
  298. package/dist/hooks/ingest.js +6 -6
  299. package/dist/hooks/instructions-loaded.js +4 -4
  300. package/dist/hooks/manifest.json +19 -19
  301. package/dist/hooks/notification.js +4 -4
  302. package/dist/hooks/post-compact.js +11 -11
  303. package/dist/hooks/post-tool-combined.js +5 -5
  304. package/dist/hooks/pre-compact.js +12 -12
  305. package/dist/hooks/pre-tool-use.js +15 -15
  306. package/dist/hooks/prompt-submit.js +22 -22
  307. package/dist/hooks/session-end.js +16 -16
  308. package/dist/hooks/session-start.js +10 -10
  309. package/dist/hooks/stop.js +15 -15
  310. package/dist/hooks/subagent-stop.js +11 -11
  311. package/dist/hooks/summary-worker.js +15 -15
  312. package/dist/index.js +18 -18
  313. package/dist/installer-72XXLBRP.js +39 -0
  314. package/dist/installer-HDXG2BZN.js +343 -0
  315. package/dist/installer-JALMKPCS.js +297 -0
  316. package/dist/installer-Q46SNNLU.js +39 -0
  317. package/dist/installer-W7PIPRCX.js +343 -0
  318. package/dist/installer-Z7WQEOS7.js +297 -0
  319. package/dist/lib/cloud-sync.js +5 -5
  320. package/dist/lib/consolidation.js +5 -5
  321. package/dist/lib/database.js +2 -2
  322. package/dist/lib/db.js +2 -2
  323. package/dist/lib/employee-templates.js +4 -4
  324. package/dist/lib/employees.js +2 -2
  325. package/dist/lib/exe-daemon.js +45 -41
  326. package/dist/lib/hybrid-search.js +5 -5
  327. package/dist/lib/identity.js +2 -2
  328. package/dist/lib/license.js +1 -1
  329. package/dist/lib/messaging.js +10 -10
  330. package/dist/lib/reminders.js +3 -3
  331. package/dist/lib/schedules.js +5 -5
  332. package/dist/lib/session-registry.js +4 -4
  333. package/dist/lib/skill-learning.js +6 -6
  334. package/dist/lib/store.js +4 -4
  335. package/dist/lib/task-router.js +3 -3
  336. package/dist/lib/tasks.js +11 -11
  337. package/dist/lib/tmux-routing.js +9 -9
  338. package/dist/lib/token-spend.js +3 -3
  339. package/dist/license-gate-7JZCHOAG.js +14 -0
  340. package/dist/license-gate-OP4SKL4P.js +14 -0
  341. package/dist/mcp/register-tools.js +58 -58
  342. package/dist/mcp/server.js +59 -59
  343. package/dist/mcp/tools/complete-reminder.js +4 -4
  344. package/dist/mcp/tools/create-reminder.js +4 -4
  345. package/dist/mcp/tools/create-task.js +13 -13
  346. package/dist/mcp/tools/deactivate-behavior.js +7 -7
  347. package/dist/mcp/tools/list-reminders.js +4 -4
  348. package/dist/mcp/tools/list-tasks.js +13 -13
  349. package/dist/mcp/tools/send-message.js +12 -12
  350. package/dist/mcp/tools/update-task.js +12 -12
  351. package/dist/mcp-health-VULNT722.js +17 -0
  352. package/dist/mcp-health-WDOB6XUB.js +19 -0
  353. package/dist/mcp-http-config-2OZ7N74D.js +28 -0
  354. package/dist/mcp-http-config-4VXA5K73.js +28 -0
  355. package/dist/memory-cards-2K6QRZU6.js +179 -0
  356. package/dist/memory-cards-KSJF5OH2.js +179 -0
  357. package/dist/memory-graph-extractor-IJD5HWYT.js +21 -0
  358. package/dist/memory-graph-extractor-O4GAXOK5.js +21 -0
  359. package/dist/memory-poisoning-defense-2JRPWT5V.js +223 -0
  360. package/dist/memory-poisoning-defense-DH4A25NU.js +223 -0
  361. package/dist/memory-reflection-ISY2BBDB.js +243 -0
  362. package/dist/memory-reflection-Z5AQRR6H.js +243 -0
  363. package/dist/notifications-2VSWK2UJ.js +46 -0
  364. package/dist/notifications-4S253VQM.js +46 -0
  365. package/dist/oauth-server-D7D4574D.js +437 -0
  366. package/dist/oauth-server-MACN54SJ.js +437 -0
  367. package/dist/orchestration-events-BGP5RYQI.js +26 -0
  368. package/dist/orchestration-events-MDXUEVRZ.js +26 -0
  369. package/dist/orchestrator-DHK7RSSH.js +34 -0
  370. package/dist/orchestrator-R75WHQVA.js +34 -0
  371. package/dist/pipeline-router-4WUKQQEC.js +14 -0
  372. package/dist/pipeline-router-GWB2XK2Q.js +14 -0
  373. package/dist/plan-limits-NNJRAESF.js +27 -0
  374. package/dist/plan-limits-YTQW4UR4.js +27 -0
  375. package/dist/project-boot-46GZJTEX.js +299 -0
  376. package/dist/project-boot-PPHBBGIF.js +299 -0
  377. package/dist/projection-worker-UPAWXI7P.js +1034 -0
  378. package/dist/projection-worker-ZIKDYBW5.js +1034 -0
  379. package/dist/reranker-5ZBP2RRN.js +19 -0
  380. package/dist/reranker-E2MQIMJL.js +19 -0
  381. package/dist/reranker-GLSDJT3V.js +19 -0
  382. package/dist/reranker-LBBXWNOD.js +19 -0
  383. package/dist/reranker-XZ2EF4OH.js +19 -0
  384. package/dist/retrieval-health-JYRKPSII.js +7 -0
  385. package/dist/retrieval-health-OUV25J6S.js +7 -0
  386. package/dist/retrieval-health-U73JUAZL.js +7 -0
  387. package/dist/retrieval-health-WSZ7TYFF.js +7 -0
  388. package/dist/review-polling-62JV55ZT.js +125 -0
  389. package/dist/review-polling-CJXLWFWK.js +125 -0
  390. package/dist/runtime/index.js +12 -12
  391. package/dist/session-events-2ADD54VI.js +37 -0
  392. package/dist/session-events-QIJVBSKS.js +37 -0
  393. package/dist/session-kill-telemetry-HS6HD2YE.js +30 -0
  394. package/dist/session-kill-telemetry-MRT5FVSM.js +30 -0
  395. package/dist/session-scope-7ICYPC33.js +87 -0
  396. package/dist/session-scope-KMXD6EE6.js +87 -0
  397. package/dist/setup-wizard-B6GIT7YC.js +12 -0
  398. package/dist/setup-wizard-JUIJ4UZO.js +12 -0
  399. package/dist/skill-refinement-HIOX4VMC.js +158 -0
  400. package/dist/skill-refinement-T7JXRYUW.js +158 -0
  401. package/dist/stack-update-5KE6BZKQ.js +74 -0
  402. package/dist/stack-update-OP2RHP7N.js +74 -0
  403. package/dist/stack-update-VGCWDJEE.js +74 -0
  404. package/dist/steward-gate-L22WE3SY.js +14 -0
  405. package/dist/steward-gate-YKD2LUWN.js +14 -0
  406. package/dist/task-enforcement-5AOKXTY4.js +439 -0
  407. package/dist/task-enforcement-VO3YEGIO.js +439 -0
  408. package/dist/task-scope-YV2WPKRD.js +36 -0
  409. package/dist/task-scope-ZSXDZBRE.js +36 -0
  410. package/dist/tasks-crud-C6KADACT.js +78 -0
  411. package/dist/tasks-crud-NV6JEWGL.js +78 -0
  412. package/dist/tasks-notify-E22HSN6O.js +39 -0
  413. package/dist/tasks-notify-RPSEQ4WV.js +39 -0
  414. package/dist/tasks-review-V4ZLXOAZ.js +48 -0
  415. package/dist/tasks-review-ZVRI73JE.js +48 -0
  416. package/dist/telemetry-upload-LXUH7SKI.js +740 -0
  417. package/dist/telemetry-upload-TCDAZTUQ.js +740 -0
  418. package/dist/token-budget-OFBEZJTA.js +85 -0
  419. package/dist/token-budget-WAN57V6S.js +85 -0
  420. package/dist/tool-telemetry-UA3N32PK.js +17 -0
  421. package/dist/tool-telemetry-XXZJ35RR.js +17 -0
  422. package/dist/tui/App.js +17 -17
  423. package/dist/tui-data-46QLCJUE.js +259 -0
  424. package/dist/tui-data-ZDB7BLP2.js +259 -0
  425. package/dist/wiki-acl-HHSIBPF3.js +111 -0
  426. package/dist/wiki-acl-O65GZ2ZF.js +111 -0
  427. package/dist/worker-gate-27I4GAEZ.js +21 -0
  428. package/dist/worker-gate-DXU4HEPY.js +21 -0
  429. package/dist/workflow-engine-63EOEJ5Q.js +28 -0
  430. package/dist/workflow-engine-C6F2RMPN.js +28 -0
  431. package/dist/worktree-SFKKOMFD.js +27 -0
  432. package/dist/worktree-SVCE3S7X.js +27 -0
  433. package/dist/worktree-sweep-S3JHJTVP.js +20 -0
  434. package/dist/worktree-sweep-U3TIQ7WL.js +20 -0
  435. package/package.json +1 -1
  436. package/release-notes.json +88 -26
@@ -0,0 +1,89 @@
1
+ import {
2
+ getActiveAgent
3
+ } from "./chunk-32BQN2QN.js";
4
+ import {
5
+ listTasks
6
+ } from "./chunk-PWPJK7KB.js";
7
+ import {
8
+ getAgentContext
9
+ } from "./chunk-GJV3WDWM.js";
10
+ import {
11
+ isCoordinatorName
12
+ } from "./chunk-WUKEXVOR.js";
13
+
14
+ // src/mcp/tools/list-tasks.ts
15
+ import { z } from "zod";
16
+ function registerListTasks(server) {
17
+ server.registerTool(
18
+ "list_tasks",
19
+ {
20
+ title: "List Tasks",
21
+ description: "Query tasks by assignee, status, project, or priority. Defaults to current project. Pass project_name='all' for all projects. When querying your own tasks, project filter is skipped automatically.",
22
+ inputSchema: {
23
+ assigned_to: z.string().optional().describe("Filter by employee name"),
24
+ status: z.enum(["open", "in_progress", "done", "needs_review", "blocked", "cancelled", "closed"]).optional().describe("Filter by status. Default: active tasks only (excludes closed/cancelled)"),
25
+ project_name: z.string().optional().describe("Project name. Defaults to current project. Pass 'all' for all projects."),
26
+ priority: z.enum(["p0", "p1", "p2"]).optional().describe("Filter by priority"),
27
+ cross_session: z.boolean().optional().describe("When true, return tasks from ALL coordinator sessions (read-only). Default: false.")
28
+ }
29
+ },
30
+ async ({ assigned_to, status, project_name, priority, cross_session }) => {
31
+ try {
32
+ const { agentId } = getActiveAgent();
33
+ const isReviewQueue = status === "needs_review";
34
+ const shouldDefaultToOwnQueue = !assigned_to && !isReviewQueue && !isCoordinatorName(agentId);
35
+ const effectiveAssignedTo = assigned_to ?? (shouldDefaultToOwnQueue ? agentId : void 0);
36
+ const effectiveReviewer = !assigned_to && isReviewQueue ? agentId : void 0;
37
+ const isOwnQuery = effectiveAssignedTo === agentId;
38
+ const callerSession = getAgentContext()?.sessionHint || process.env.EXE_SESSION_NAME || process.env.EXE_SESSION || null;
39
+ const resolvedProject = project_name && project_name !== "all" ? project_name : null;
40
+ const effectiveCrossSession = cross_session === true;
41
+ const tasks = await listTasks({
42
+ assignedTo: effectiveAssignedTo,
43
+ reviewer: effectiveReviewer,
44
+ status,
45
+ projectName: resolvedProject,
46
+ priority,
47
+ crossSession: effectiveCrossSession,
48
+ isOwnQuery: !!isOwnQuery,
49
+ callerSession
50
+ });
51
+ if (tasks.length === 0) {
52
+ return {
53
+ content: [{ type: "text", text: "No tasks found." }]
54
+ };
55
+ }
56
+ const lines = tasks.map((t) => {
57
+ const cpIndicator = t.checkpointCount && t.checkpointCount > 0 ? ` [cp:${t.checkpointCount}]` : "";
58
+ let budgetNote = "";
59
+ if (t.budgetTokens !== null) {
60
+ const pct = Math.round(t.tokensUsed / t.budgetTokens * 100);
61
+ budgetNote = ` [${t.tokensUsed}/${t.budgetTokens} tokens, ${pct}%]`;
62
+ }
63
+ const shortId = t.id.slice(0, 8);
64
+ const sessionNote = cross_session && t.sessionScope ? ` [session:${t.sessionScope}]` : "";
65
+ return `- [${t.priority.toUpperCase()}] ${t.title} (${t.projectName}) \u2014 ${t.status}${cpIndicator}${budgetNote}${sessionNote} \u2192 ${t.assignedTo} [id:${shortId}]`;
66
+ });
67
+ return {
68
+ content: [
69
+ {
70
+ type: "text",
71
+ text: `${tasks.length} task(s):
72
+ ${lines.join("\n")}`
73
+ }
74
+ ]
75
+ };
76
+ } catch (err) {
77
+ const msg = err instanceof Error ? err.message : String(err);
78
+ return {
79
+ content: [{ type: "text", text: `Failed to list tasks: ${msg}` }],
80
+ isError: true
81
+ };
82
+ }
83
+ }
84
+ );
85
+ }
86
+
87
+ export {
88
+ registerListTasks
89
+ };
@@ -0,0 +1,221 @@
1
+ // src/lib/crdt-sync.ts
2
+ import * as Y from "yjs";
3
+ import { readFileSync, writeFileSync, existsSync, mkdirSync, unlinkSync } from "fs";
4
+ import path from "path";
5
+ import { homedir } from "os";
6
+ var DEFAULT_STATE_PATH = path.join(homedir(), ".exe-os", "crdt-state.bin");
7
+ var _statePathOverride = null;
8
+ function getStatePath() {
9
+ return _statePathOverride ?? DEFAULT_STATE_PATH;
10
+ }
11
+ function _setStatePath(p) {
12
+ _statePathOverride = p;
13
+ }
14
+ var doc = null;
15
+ function initCrdtDoc() {
16
+ if (doc) return doc;
17
+ doc = new Y.Doc();
18
+ const sp = getStatePath();
19
+ if (existsSync(sp)) {
20
+ try {
21
+ const state = readFileSync(sp);
22
+ Y.applyUpdate(doc, new Uint8Array(state));
23
+ } catch {
24
+ console.warn("[crdt-sync] WARN: corrupted state file, rebuilding from DB");
25
+ try {
26
+ unlinkSync(sp);
27
+ } catch {
28
+ }
29
+ rebuildFromDb().catch((err) => {
30
+ console.warn("[crdt-sync] rebuild from DB failed:", err);
31
+ });
32
+ }
33
+ }
34
+ doc.on("update", () => {
35
+ persistState();
36
+ });
37
+ return doc;
38
+ }
39
+ function getMemoriesMap() {
40
+ const d = initCrdtDoc();
41
+ return d.getMap("memories");
42
+ }
43
+ function getBehaviorsMap() {
44
+ const d = initCrdtDoc();
45
+ return d.getMap("behaviors");
46
+ }
47
+ function applyRemoteUpdate(update) {
48
+ const d = initCrdtDoc();
49
+ Y.applyUpdate(d, update);
50
+ }
51
+ function getFullState() {
52
+ const d = initCrdtDoc();
53
+ return Y.encodeStateAsUpdate(d);
54
+ }
55
+ function getDiffUpdate(remoteStateVector) {
56
+ const d = initCrdtDoc();
57
+ return Y.encodeStateAsUpdate(d, remoteStateVector);
58
+ }
59
+ function getStateVector() {
60
+ const d = initCrdtDoc();
61
+ return Y.encodeStateVector(d);
62
+ }
63
+ function importExistingMemories(memories) {
64
+ const map = getMemoriesMap();
65
+ const d = initCrdtDoc();
66
+ let imported = 0;
67
+ d.transact(() => {
68
+ for (const mem of memories) {
69
+ if (!mem.id) continue;
70
+ if (map.has(mem.id)) continue;
71
+ const entry = new Y.Map();
72
+ entry.set("id", mem.id);
73
+ entry.set("agent_id", mem.agent_id ?? null);
74
+ entry.set("agent_role", mem.agent_role ?? null);
75
+ entry.set("session_id", mem.session_id ?? null);
76
+ entry.set("timestamp", mem.timestamp ?? null);
77
+ entry.set("tool_name", mem.tool_name ?? null);
78
+ entry.set("project_name", mem.project_name ?? null);
79
+ entry.set("has_error", mem.has_error ?? 0);
80
+ entry.set("raw_text", mem.raw_text ?? "");
81
+ entry.set("version", mem.version ?? 0);
82
+ entry.set("author_device_id", mem.author_device_id ?? null);
83
+ entry.set("scope", mem.scope ?? "business");
84
+ map.set(mem.id, entry);
85
+ imported++;
86
+ }
87
+ });
88
+ return imported;
89
+ }
90
+ function importExistingBehaviors(behaviors) {
91
+ const map = getBehaviorsMap();
92
+ const d = initCrdtDoc();
93
+ let imported = 0;
94
+ d.transact(() => {
95
+ for (const beh of behaviors) {
96
+ if (!beh.id) continue;
97
+ if (map.has(beh.id)) continue;
98
+ const entry = new Y.Map();
99
+ entry.set("id", beh.id);
100
+ entry.set("agent_id", beh.agent_id ?? null);
101
+ entry.set("project_name", beh.project_name ?? null);
102
+ entry.set("domain", beh.domain ?? null);
103
+ entry.set("content", beh.content ?? null);
104
+ entry.set("active", beh.active ?? 1);
105
+ entry.set("priority", beh.priority ?? "p1");
106
+ entry.set("created_at", beh.created_at ?? null);
107
+ entry.set("updated_at", beh.updated_at ?? null);
108
+ map.set(beh.id, entry);
109
+ imported++;
110
+ }
111
+ });
112
+ return imported;
113
+ }
114
+ function readAllMemories() {
115
+ const map = getMemoriesMap();
116
+ const records = [];
117
+ map.forEach((entry, id) => {
118
+ records.push({
119
+ id,
120
+ agent_id: entry.get("agent_id"),
121
+ agent_role: entry.get("agent_role"),
122
+ session_id: entry.get("session_id"),
123
+ timestamp: entry.get("timestamp"),
124
+ tool_name: entry.get("tool_name"),
125
+ project_name: entry.get("project_name"),
126
+ has_error: entry.get("has_error"),
127
+ raw_text: entry.get("raw_text"),
128
+ version: entry.get("version"),
129
+ author_device_id: entry.get("author_device_id"),
130
+ scope: entry.get("scope"),
131
+ session_scope: entry.get("session_scope")
132
+ });
133
+ });
134
+ return records;
135
+ }
136
+ function readAllBehaviors() {
137
+ const map = getBehaviorsMap();
138
+ const records = [];
139
+ map.forEach((entry, id) => {
140
+ records.push({
141
+ id,
142
+ agent_id: entry.get("agent_id"),
143
+ project_name: entry.get("project_name"),
144
+ domain: entry.get("domain"),
145
+ content: entry.get("content"),
146
+ active: entry.get("active"),
147
+ priority: entry.get("priority"),
148
+ created_at: entry.get("created_at"),
149
+ updated_at: entry.get("updated_at")
150
+ });
151
+ });
152
+ return records;
153
+ }
154
+ function onUpdate(callback) {
155
+ const d = initCrdtDoc();
156
+ const handler = (update) => callback(update);
157
+ d.on("update", handler);
158
+ return () => d.off("update", handler);
159
+ }
160
+ function persistState() {
161
+ if (!doc) return;
162
+ try {
163
+ const sp = getStatePath();
164
+ const dir = path.dirname(sp);
165
+ if (!existsSync(dir)) mkdirSync(dir, { recursive: true });
166
+ const state = Y.encodeStateAsUpdate(doc);
167
+ writeFileSync(sp, Buffer.from(state));
168
+ } catch {
169
+ }
170
+ }
171
+ function isCrdtSyncEnabled() {
172
+ return process.env.EXE_CRDT_SYNC === "1";
173
+ }
174
+ async function rebuildFromDb() {
175
+ const { getClient } = await import("./lib/database.js");
176
+ const client = getClient();
177
+ const result = await client.execute(
178
+ "SELECT id, agent_id, agent_role, session_id, timestamp, tool_name, project_name, has_error, raw_text, version, author_device_id, scope, session_scope FROM memories"
179
+ );
180
+ const memories = result.rows.map((row) => ({
181
+ id: String(row.id),
182
+ agent_id: row.agent_id,
183
+ agent_role: row.agent_role,
184
+ session_id: row.session_id,
185
+ timestamp: row.timestamp,
186
+ tool_name: row.tool_name,
187
+ project_name: row.project_name,
188
+ has_error: row.has_error,
189
+ raw_text: row.raw_text,
190
+ version: row.version,
191
+ author_device_id: row.author_device_id,
192
+ scope: row.scope,
193
+ session_scope: row.session_scope
194
+ }));
195
+ const count = importExistingMemories(memories);
196
+ persistState();
197
+ return count;
198
+ }
199
+ function destroyCrdtDoc() {
200
+ if (doc) {
201
+ doc.destroy();
202
+ doc = null;
203
+ }
204
+ }
205
+
206
+ export {
207
+ _setStatePath,
208
+ initCrdtDoc,
209
+ applyRemoteUpdate,
210
+ getFullState,
211
+ getDiffUpdate,
212
+ getStateVector,
213
+ importExistingMemories,
214
+ importExistingBehaviors,
215
+ readAllMemories,
216
+ readAllBehaviors,
217
+ onUpdate,
218
+ isCrdtSyncEnabled,
219
+ rebuildFromDb,
220
+ destroyCrdtDoc
221
+ };
@@ -0,0 +1,262 @@
1
+ // src/lib/agentic-ontology.ts
2
+ import { createHash } from "crypto";
3
+ function stableId(...parts) {
4
+ return createHash("sha256").update(parts.map((p) => String(p ?? "")).join("::")).digest("hex").slice(0, 32);
5
+ }
6
+ function clean(text, max = 240) {
7
+ return text.replace(/\u0000/g, "").replace(/```[\s\S]*?```/g, " ").replace(/\s+/g, " ").trim().slice(0, max);
8
+ }
9
+ function inferOntologyEventType(row) {
10
+ const lower = row.raw_text.toLowerCase();
11
+ if (row.has_error) return "error";
12
+ if (/\b(done|complete|completed|fixed|resolved|shipped|deployed|pushed|published)\b/.test(lower)) return "milestone";
13
+ if (/\b(blocked|failed|error|bug|regression|broken)\b/.test(lower)) return "problem";
14
+ if (/\b(decided|decision|adr|we chose|approved|rejected)\b/.test(lower)) return "decision";
15
+ if (/\b(goal|need to|we need|want to|trying to|objective)\b/.test(lower)) return "goal_signal";
16
+ if (["Bash", "Read", "Edit", "Write", "Grep", "Glob"].includes(row.tool_name)) return "tool_action";
17
+ if (row.tool_name.startsWith("memory_card")) return "memory_card";
18
+ return "memory_observation";
19
+ }
20
+ function inferIntention(row) {
21
+ if (row.intent) return clean(row.intent, 220);
22
+ const text = clean(row.raw_text, 1e3);
23
+ const patterns = [
24
+ /(?:we need to|need to|let'?s|i want to|we should|goal is to|objective is to|trying to)\s+([^.!?\n]{8,220})/i,
25
+ /(?:so that|in order to)\s+([^.!?\n]{8,220})/i,
26
+ /(?:task|plan):\s*([^.!?\n]{8,220})/i
27
+ ];
28
+ for (const p of patterns) {
29
+ const m = text.match(p);
30
+ if (m?.[1]) return clean(m[1], 220);
31
+ }
32
+ if (["Bash", "Read", "Edit", "Write", "Grep", "Glob"].includes(row.tool_name)) {
33
+ return `${row.tool_name} during ${row.project_name}`;
34
+ }
35
+ return null;
36
+ }
37
+ function inferOutcome(row) {
38
+ if (row.outcome) return clean(row.outcome, 220);
39
+ if (row.has_error) return "error";
40
+ const lower = row.raw_text.toLowerCase();
41
+ if (/\b(done|complete|completed|fixed|resolved|shipped|deployed|pushed|published|passed)\b/.test(lower)) return "success_signal";
42
+ if (/\b(blocked|failed|error|regression|broken|not working|could not)\b/.test(lower)) return "failure_signal";
43
+ if (/\b(warning|risk|concern|caveat)\b/.test(lower)) return "risk_signal";
44
+ return null;
45
+ }
46
+ function extractGoalCandidates(row) {
47
+ const text = clean(row.raw_text, 1600);
48
+ const patterns = [
49
+ /(?:we need to|need to|i want to|we should|goal is to|objective is to|trying to|let'?s)\s+([^.!?\n]{12,220})/gi,
50
+ /(?:success means|success criteria|so that)\s+([^.!?\n]{12,220})/gi
51
+ ];
52
+ const out = [];
53
+ for (const pattern of patterns) {
54
+ for (const m of text.matchAll(pattern)) {
55
+ const candidate = clean(m[1] ?? "", 220);
56
+ if (candidate.length >= 12 && !out.some((x) => x.toLowerCase() === candidate.toLowerCase())) out.push(candidate);
57
+ if (out.length >= 3) return out;
58
+ }
59
+ }
60
+ return out;
61
+ }
62
+ function uniq(values, max = 6) {
63
+ const out = [];
64
+ for (const value of values.map((v) => clean(v, 220)).filter(Boolean)) {
65
+ if (!out.some((x) => x.toLowerCase() === value.toLowerCase())) out.push(value);
66
+ if (out.length >= max) break;
67
+ }
68
+ return out;
69
+ }
70
+ function extractMatches(text, patterns, max = 5) {
71
+ const out = [];
72
+ for (const pattern of patterns) {
73
+ for (const match of text.matchAll(pattern)) {
74
+ const value = match[1] ?? match[0];
75
+ if (value) out.push(value);
76
+ if (out.length >= max) return uniq(out, max);
77
+ }
78
+ }
79
+ return uniq(out, max);
80
+ }
81
+ function inferSemanticLabel(row) {
82
+ const text = clean(row.raw_text, 2400);
83
+ const eventType = inferOntologyEventType(row);
84
+ const intention = inferIntention(row);
85
+ const outcome = inferOutcome(row);
86
+ const goals = extractGoalCandidates(row);
87
+ const milestones = extractMatches(text, [
88
+ /\b(?:completed|finished|fixed|resolved|shipped|deployed|published|pushed|passed)\b([^.!?\n]{0,180})/gi,
89
+ /(?:milestone|done):\s*([^.!?\n]{8,220})/gi
90
+ ]);
91
+ const problems = extractMatches(text, [
92
+ /\b(?:blocked by|failed because|bug|regression|broken|not working|error)\b([^.!?\n]{0,180})/gi,
93
+ /(?:problem|issue|risk):\s*([^.!?\n]{8,220})/gi
94
+ ]);
95
+ const decisions = extractMatches(text, [
96
+ /(?:decided|decision|adr|we chose|approved|rejected)\s+([^.!?\n]{8,220})/gi
97
+ ]);
98
+ const temporalAnchors = extractMatches(text, [
99
+ /\b(\d{4}-\d{2}-\d{2}(?:[T ][0-9:.+-Z]+)?)\b/g,
100
+ /\b(today|yesterday|tomorrow|this week|next week|last week|morning|afternoon|tonight)\b/gi
101
+ ], 8);
102
+ const nextActions = extractMatches(text, [
103
+ /(?:next|todo|follow[- ]?up|remaining|need to)\s*:?\s*([^.!?\n]{8,220})/gi
104
+ ]);
105
+ const actors = uniq([
106
+ row.agent_id,
107
+ ...extractMatches(text, [/\b(?:agent|employee|owner|assignee)[:= ]+([a-zA-Z][a-zA-Z0-9_-]{1,40})/gi], 5)
108
+ ], 6);
109
+ const successSignals = milestones.length ? milestones : outcome === "success_signal" ? [clean(text, 180)] : [];
110
+ const failureSignals = problems.length ? problems : outcome === "failure_signal" || row.has_error ? [clean(text, 180)] : [];
111
+ const impact = successSignals.length && failureSignals.length ? "mixed" : failureSignals.length ? "negative" : successSignals.length ? "positive" : "neutral";
112
+ const signalCount = goals.length + milestones.length + problems.length + decisions.length + nextActions.length;
113
+ return {
114
+ labeler: "deterministic",
115
+ schemaVersion: 1,
116
+ eventType,
117
+ intention,
118
+ outcome,
119
+ impact,
120
+ confidence: Math.min(0.95, 0.45 + signalCount * 0.08 + (intention ? 0.1 : 0) + (outcome ? 0.1 : 0)),
121
+ goals,
122
+ milestones,
123
+ problems,
124
+ decisions,
125
+ actors,
126
+ temporalAnchors,
127
+ successSignals,
128
+ failureSignals,
129
+ nextActions,
130
+ summary: clean(text, 280)
131
+ };
132
+ }
133
+ function ontologyPayload(row) {
134
+ const semantic = inferSemanticLabel(row);
135
+ return {
136
+ tool_name: row.tool_name,
137
+ memory_version: row.version ?? null,
138
+ domain: row.domain ?? null,
139
+ trajectory: row.trajectory ? safeJson(row.trajectory) : null,
140
+ semantic
141
+ };
142
+ }
143
+ function safeJson(value) {
144
+ try {
145
+ return JSON.parse(value);
146
+ } catch {
147
+ return value.slice(0, 1e3);
148
+ }
149
+ }
150
+ async function resolveClient(client) {
151
+ if (client) return client;
152
+ const { getClient } = await import("./lib/database.js");
153
+ return getClient();
154
+ }
155
+ async function insertOntologyForMemory(row, client) {
156
+ const db = await resolveClient(client);
157
+ const occurredAt = row.timestamp;
158
+ const sequence = Number(row.version ?? 0) || Math.floor(new Date(occurredAt).getTime() / 1e3);
159
+ const eventType = inferOntologyEventType(row);
160
+ const intention = inferIntention(row);
161
+ const outcome = inferOutcome(row);
162
+ const eventId = stableId("event", row.id);
163
+ const now = (/* @__PURE__ */ new Date()).toISOString();
164
+ await db.execute({
165
+ sql: `INSERT INTO agent_sessions (id, agent_id, project_name, started_at, last_event_at, event_count, properties)
166
+ VALUES (?, ?, ?, ?, ?, 1, ?)
167
+ ON CONFLICT(id) DO UPDATE SET last_event_at = MAX(last_event_at, excluded.last_event_at),
168
+ event_count = event_count + 1`,
169
+ args: [row.session_id, row.agent_id, row.project_name, occurredAt, occurredAt, JSON.stringify({ agent_role: row.agent_role })]
170
+ });
171
+ await db.execute({
172
+ sql: `INSERT OR IGNORE INTO agent_events
173
+ (id, event_type, occurred_at, sequence_index, actor_agent_id, agent_role, project_name,
174
+ session_id, task_id, goal_id, parent_event_id, intention, outcome, evidence_memory_id,
175
+ impact, payload, created_at)
176
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, NULL, NULL, ?, ?, ?, ?, ?, ?)`,
177
+ args: [
178
+ eventId,
179
+ eventType,
180
+ occurredAt,
181
+ sequence,
182
+ row.agent_id,
183
+ row.agent_role,
184
+ row.project_name,
185
+ row.session_id,
186
+ row.task_id ?? null,
187
+ intention,
188
+ outcome,
189
+ row.id,
190
+ row.has_error ? "negative" : outcome === "success_signal" ? "positive" : "neutral",
191
+ JSON.stringify(ontologyPayload(row)),
192
+ now
193
+ ]
194
+ });
195
+ const semantic = inferSemanticLabel(row);
196
+ await db.execute({
197
+ sql: `INSERT INTO agent_semantic_labels
198
+ (id, source_memory_id, event_id, labeler, schema_version, confidence, labels, created_at, updated_at)
199
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
200
+ ON CONFLICT(id) DO UPDATE SET confidence = excluded.confidence,
201
+ labels = excluded.labels, updated_at = excluded.updated_at`,
202
+ args: [
203
+ stableId("semantic", row.id, semantic.labeler, semantic.schemaVersion),
204
+ row.id,
205
+ eventId,
206
+ semantic.labeler,
207
+ semantic.schemaVersion,
208
+ semantic.confidence,
209
+ JSON.stringify(semantic),
210
+ now,
211
+ now
212
+ ]
213
+ });
214
+ for (const statement of extractGoalCandidates(row)) {
215
+ const goalId = stableId("goal", row.project_name, statement.toLowerCase());
216
+ await db.execute({
217
+ sql: `INSERT INTO agent_goals
218
+ (id, statement, owner_agent_id, project_name, status, priority, success_criteria,
219
+ parent_goal_id, due_at, achieved_at, supersedes_id, created_at, updated_at, source_memory_id)
220
+ VALUES (?, ?, ?, ?, 'open', 5, NULL, NULL, NULL, NULL, NULL, ?, ?, ?)
221
+ ON CONFLICT(id) DO UPDATE SET updated_at = excluded.updated_at`,
222
+ args: [goalId, statement, row.agent_id, row.project_name, now, now, row.id]
223
+ });
224
+ await db.execute({
225
+ sql: `INSERT OR IGNORE INTO agent_goal_links
226
+ (id, goal_id, link_type, target_id, target_type, created_at)
227
+ VALUES (?, ?, 'evidence', ?, 'memory', ?)`,
228
+ args: [stableId("goal_link", goalId, row.id, "memory"), goalId, row.id, now]
229
+ });
230
+ await db.execute({
231
+ sql: `INSERT OR IGNORE INTO agent_goal_links
232
+ (id, goal_id, link_type, target_id, target_type, created_at)
233
+ VALUES (?, ?, 'event', ?, 'event', ?)`,
234
+ args: [stableId("goal_link", goalId, eventId, "event"), goalId, eventId, now]
235
+ });
236
+ }
237
+ }
238
+ async function insertOntologyForBatch(rows, client) {
239
+ const db = await resolveClient(client);
240
+ let count = 0;
241
+ for (const row of rows) {
242
+ try {
243
+ await insertOntologyForMemory(row, db);
244
+ count++;
245
+ } catch {
246
+ }
247
+ }
248
+ return count;
249
+ }
250
+
251
+ export {
252
+ stableId,
253
+ clean,
254
+ inferOntologyEventType,
255
+ inferIntention,
256
+ inferOutcome,
257
+ extractGoalCandidates,
258
+ inferSemanticLabel,
259
+ ontologyPayload,
260
+ insertOntologyForMemory,
261
+ insertOntologyForBatch
262
+ };
@@ -0,0 +1,51 @@
1
+ // src/lib/mcp-health.ts
2
+ import { existsSync, readFileSync } from "fs";
3
+ import path from "path";
4
+ import { homedir } from "os";
5
+ var PID_PATH = path.join(homedir(), ".exe-os", "exed.pid");
6
+ function isDaemonAlive() {
7
+ try {
8
+ if (!existsSync(PID_PATH)) {
9
+ const socketPath = process.env.EXE_DAEMON_SOCK ?? path.join(homedir(), ".exe-os", "exed.sock");
10
+ if (existsSync(socketPath)) return { alive: true, pid: null };
11
+ return { alive: false, pid: null };
12
+ }
13
+ const pid = parseInt(readFileSync(PID_PATH, "utf8").trim(), 10);
14
+ if (!Number.isFinite(pid) || pid <= 0) return { alive: false, pid: null };
15
+ process.kill(pid, 0);
16
+ return { alive: true, pid };
17
+ } catch {
18
+ return { alive: false, pid: null };
19
+ }
20
+ }
21
+ function isMcpHealthy(_timeoutMs = 2e3) {
22
+ const { alive } = isDaemonAlive();
23
+ if (!alive) return false;
24
+ const socketPath = process.env.EXE_DAEMON_SOCK ?? process.env.EXE_EMBED_SOCK ?? path.join(homedir(), ".exe-os", "exed.sock");
25
+ return existsSync(socketPath);
26
+ }
27
+ var EVENT_LOOP_DEGRADED_THRESHOLD_MS = 5e3;
28
+ var _eventLoopLagMs = 0;
29
+ var _eventLoopLagUpdatedAt = 0;
30
+ function setEventLoopLagMs(lagMs) {
31
+ _eventLoopLagMs = lagMs;
32
+ _eventLoopLagUpdatedAt = Date.now();
33
+ }
34
+ function getEventLoopLagMs() {
35
+ return _eventLoopLagMs;
36
+ }
37
+ function getEventLoopLagUpdatedAt() {
38
+ return _eventLoopLagUpdatedAt;
39
+ }
40
+ function isEventLoopDegraded() {
41
+ return _eventLoopLagMs > EVENT_LOOP_DEGRADED_THRESHOLD_MS;
42
+ }
43
+
44
+ export {
45
+ isDaemonAlive,
46
+ isMcpHealthy,
47
+ setEventLoopLagMs,
48
+ getEventLoopLagMs,
49
+ getEventLoopLagUpdatedAt,
50
+ isEventLoopDegraded
51
+ };
@@ -0,0 +1,58 @@
1
+ import {
2
+ MODELS_DIR
3
+ } from "./chunk-T3B5RK4H.js";
4
+
5
+ // src/lib/reranker.ts
6
+ import path from "path";
7
+ import { existsSync } from "fs";
8
+ var RERANKER_MODEL_FILE = process.env.EXE_RERANK_MODEL_FILE ?? "exe-reranker-v1-q4_k_m.gguf";
9
+ function isRerankerAvailable() {
10
+ return existsSync(path.join(MODELS_DIR, RERANKER_MODEL_FILE));
11
+ }
12
+ function getRerankerModelPath() {
13
+ return path.join(MODELS_DIR, RERANKER_MODEL_FILE);
14
+ }
15
+ async function disposeReranker() {
16
+ }
17
+ async function rerankWithScores(query, texts, topK) {
18
+ if (texts.length === 0) return [];
19
+ const { rerankViaWorker } = await import("./lib/exe-daemon.js");
20
+ const scored = await rerankViaWorker(query, texts, topK);
21
+ return scored.map((s) => ({
22
+ text: texts[s.index] ?? "",
23
+ score: s.score,
24
+ index: s.index
25
+ }));
26
+ }
27
+ async function rerank(query, candidates, topK = 5) {
28
+ if (candidates.length === 0) return [];
29
+ if (candidates.length <= topK) return candidates;
30
+ const scored = await rerankWithScores(
31
+ query,
32
+ candidates.map((c) => c.raw_text),
33
+ topK
34
+ );
35
+ return scored.map((s) => candidates[s.index]);
36
+ }
37
+ async function rerankWithContext(query, candidates, topK) {
38
+ if (candidates.length === 0) return [];
39
+ const formattedTexts = candidates.map(
40
+ (c) => c.context ? `[${c.context}] ${c.text.slice(0, 460)}` : c.text.slice(0, 512)
41
+ );
42
+ const { rerankViaWorker } = await import("./lib/exe-daemon.js");
43
+ const scored = await rerankViaWorker(query, formattedTexts, topK);
44
+ return scored.map((s) => ({
45
+ text: candidates[s.index]?.text ?? "",
46
+ score: s.score,
47
+ index: s.index
48
+ }));
49
+ }
50
+
51
+ export {
52
+ isRerankerAvailable,
53
+ getRerankerModelPath,
54
+ disposeReranker,
55
+ rerankWithScores,
56
+ rerank,
57
+ rerankWithContext
58
+ };