@askexenow/exe-os 0.9.286 → 0.9.288

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 (458) hide show
  1. package/deploy/compose/.env.customer.example +10 -1
  2. package/deploy/compose/.env.example +8 -1
  3. package/deploy/compose/README.md +21 -0
  4. package/deploy/compose/docker-compose.yml +24 -1
  5. package/deploy/compose/generate-env.ts +16 -2
  6. package/deploy/compose/setup.sh +63 -0
  7. package/deploy/stack-manifests/v0.9.json +1 -1
  8. package/dist/active-agent-KB4346K6.js +26 -0
  9. package/dist/active-agent-LTYLGBJX.js +27 -0
  10. package/dist/active-agent-V4W557J4.js +26 -0
  11. package/dist/active-agent-XZVU5XBO.js +27 -0
  12. package/dist/agentic-ontology-4PNQX4YW.js +25 -0
  13. package/dist/agentic-ontology-WOTOTSR7.js +25 -0
  14. package/dist/backfill-metadata-O2BQIEVT.js +599 -0
  15. package/dist/backfill-metadata-PHXNTBNR.js +599 -0
  16. package/dist/background-jobs-RIECIYW5.js +25 -0
  17. package/dist/behaviors-MO5BWFPW.js +39 -0
  18. package/dist/behaviors-TMA2HRTL.js +39 -0
  19. package/dist/bin/age-ontology-load.js +2 -2
  20. package/dist/bin/agentic-ontology-backfill.js +7 -7
  21. package/dist/bin/agentic-reflection-backfill.js +8 -8
  22. package/dist/bin/agentic-semantic-label.js +7 -7
  23. package/dist/bin/backfill-conversations.js +7 -7
  24. package/dist/bin/backfill-responses.js +7 -7
  25. package/dist/bin/backfill-vectors.js +10 -10
  26. package/dist/bin/bulk-sync-postgres.js +8 -8
  27. package/dist/bin/cc-doctor.js +7 -6
  28. package/dist/bin/cleanup-stale-review-tasks.js +13 -13
  29. package/dist/bin/cli.js +20 -20
  30. package/dist/bin/exe-agent-config.js +4 -4
  31. package/dist/bin/exe-agent.js +9 -9
  32. package/dist/bin/exe-assign.js +9 -9
  33. package/dist/bin/exe-boot.js +32 -21
  34. package/dist/bin/exe-call.js +5 -5
  35. package/dist/bin/exe-cloud.js +7 -7
  36. package/dist/bin/exe-dispatch.js +13 -13
  37. package/dist/bin/exe-doctor.js +4 -1
  38. package/dist/bin/exe-export-behaviors.js +8 -8
  39. package/dist/bin/exe-forget.js +7 -7
  40. package/dist/bin/exe-gateway.js +8 -8
  41. package/dist/bin/exe-healthcheck.js +9 -6
  42. package/dist/bin/exe-heartbeat.js +13 -13
  43. package/dist/bin/exe-kill.js +16 -16
  44. package/dist/bin/exe-launch-agent.js +20 -20
  45. package/dist/bin/exe-new-employee.js +8 -8
  46. package/dist/bin/exe-pending-messages.js +14 -14
  47. package/dist/bin/exe-pending-notifications.js +13 -13
  48. package/dist/bin/exe-pending-reviews.js +13 -13
  49. package/dist/bin/exe-rename.js +5 -5
  50. package/dist/bin/exe-review.js +15 -15
  51. package/dist/bin/exe-search.js +6 -6
  52. package/dist/bin/exe-session-cleanup.js +18 -18
  53. package/dist/bin/exe-settings.js +7 -7
  54. package/dist/bin/exe-start-codex.js +12 -12
  55. package/dist/bin/exe-start-opencode.js +9 -9
  56. package/dist/bin/exe-status.js +14 -14
  57. package/dist/bin/exe-support.js +3 -3
  58. package/dist/bin/exe-team.js +4 -4
  59. package/dist/bin/git-sweep.js +14 -14
  60. package/dist/bin/graph-backfill.js +8 -8
  61. package/dist/bin/graph-export.js +6 -6
  62. package/dist/bin/import-history.js +10 -10
  63. package/dist/bin/install.js +7 -7
  64. package/dist/bin/intercom-check.js +4 -4
  65. package/dist/bin/mcp-sessions.js +2 -2
  66. package/dist/bin/orchestration-metrics.js +5 -5
  67. package/dist/bin/postgres-agentic-reflection-backfill.js +4 -4
  68. package/dist/bin/postgres-agentic-semantic-backfill.js +3 -3
  69. package/dist/bin/scan-tasks.js +13 -13
  70. package/dist/bin/setup.js +2 -2
  71. package/dist/bin/shard-migrate.js +6 -6
  72. package/dist/bin/stack-update.js +4 -4
  73. package/dist/bin/vps-health-gate.js +1 -1
  74. package/dist/branding-6PY5DNDC.js +97 -0
  75. package/dist/capability-cards-4NKVY6GD.js +88 -0
  76. package/dist/capability-cards-UD5TCSAZ.js +88 -0
  77. package/dist/capacity-monitor-AU7MVZED.js +50 -0
  78. package/dist/capacity-monitor-CV7PWPYR.js +50 -0
  79. package/dist/catchup-brief-AZND3EET.js +174 -0
  80. package/dist/catchup-brief-TFL6MYOZ.js +154 -0
  81. package/dist/chunk-22R3G3GD.js +297 -0
  82. package/dist/chunk-2CO47E5Q.js +210 -0
  83. package/dist/chunk-2F5UVNYP.js +167 -0
  84. package/dist/chunk-2IJCGYY2.js +30 -0
  85. package/dist/chunk-2V52EJI7.js +14365 -0
  86. package/dist/chunk-2WCXJVSN.js +456 -0
  87. package/dist/chunk-2X52UGP7.js +190 -0
  88. package/dist/chunk-3H5FNTXS.js +85 -0
  89. package/dist/chunk-3OC6MJIX.js +210 -0
  90. package/dist/chunk-3OSDE4Y2.js +1119 -0
  91. package/dist/chunk-43QFBQHT.js +1094 -0
  92. package/dist/chunk-4EBW3URQ.js +4318 -0
  93. package/dist/chunk-4KVMYS3U.js +280 -0
  94. package/dist/chunk-4UTH3H4H.js +128 -0
  95. package/dist/chunk-5BKYHLA3.js +411 -0
  96. package/dist/chunk-5RRYMKXN.js +150 -0
  97. package/dist/chunk-5TYYOPTD.js +50 -0
  98. package/dist/chunk-5XOAYMSU.js +4318 -0
  99. package/dist/chunk-6DQNLI55.js +240 -0
  100. package/dist/chunk-6GOT6FNJ.js +1352 -0
  101. package/dist/chunk-6KH24PJ7.js +221 -0
  102. package/dist/chunk-6TV66RAI.js +192 -0
  103. package/dist/chunk-6UD5CM2H.js +244 -0
  104. package/dist/chunk-6YR3J6WG.js +203 -0
  105. package/dist/chunk-77HA7ATH.js +89 -0
  106. package/dist/chunk-7G52QPUX.js +271 -0
  107. package/dist/chunk-7M5ZHD4E.js +214 -0
  108. package/dist/chunk-A3GC762G.js +333 -0
  109. package/dist/chunk-ALTFDYI6.js +97 -0
  110. package/dist/chunk-AN25OIRX.js +38 -0
  111. package/dist/chunk-AOWC2J6S.js +14225 -0
  112. package/dist/chunk-ASL5PHCT.js +1934 -0
  113. package/dist/chunk-AVTDW4L6.js +562 -0
  114. package/dist/chunk-BEQTE7GH.js +668 -0
  115. package/dist/chunk-BJTBA4XS.js +290 -0
  116. package/dist/chunk-BQBPNRUW.js +231 -0
  117. package/dist/chunk-BQD4XYWX.js +159 -0
  118. package/dist/chunk-BVFCZNJH.js +41 -0
  119. package/dist/chunk-BW7HTZMW.js +240 -0
  120. package/dist/chunk-BZP3ZSRI.js +97 -0
  121. package/dist/chunk-C2NCSKRZ.js +373 -0
  122. package/dist/chunk-C3AH5JAS.js +510 -0
  123. package/dist/chunk-CEKZ77KA.js +471 -0
  124. package/dist/chunk-CNTBRVYW.js +54 -0
  125. package/dist/chunk-CTJQX44O.js +271 -0
  126. package/dist/chunk-CVG2PBCO.js +1105 -0
  127. package/dist/chunk-CZ47BFAT.js +299 -0
  128. package/dist/chunk-CZHC3HIO.js +362 -0
  129. package/dist/chunk-DIZOFRZO.js +284 -0
  130. package/dist/chunk-DRX46W5O.js +1068 -0
  131. package/dist/chunk-DYICAAAM.js +630 -0
  132. package/dist/chunk-E4BXNYLD.js +128 -0
  133. package/dist/chunk-EKXOBH7F.js +227 -0
  134. package/dist/chunk-ELQZYKVN.js +394 -0
  135. package/dist/chunk-EVM22AGQ.js +382 -0
  136. package/dist/chunk-EY7TBDZ5.js +38 -0
  137. package/dist/chunk-FDOEMBUB.js +345 -0
  138. package/dist/chunk-FG2OXKU5.js +539 -0
  139. package/dist/chunk-FP6TDXIL.js +456 -0
  140. package/dist/chunk-FVWATWI2.js +377 -0
  141. package/dist/chunk-G2OW4LUS.js +55 -0
  142. package/dist/chunk-GAYD7KBH.js +836 -0
  143. package/dist/chunk-GETGWHCO.js +227 -0
  144. package/dist/chunk-GGLUKNFC.js +1350 -0
  145. package/dist/chunk-GLEE2MUJ.js +262 -0
  146. package/dist/chunk-GUODMEAR.js +42 -0
  147. package/dist/chunk-H6LA4UV5.js +735 -0
  148. package/dist/chunk-H6PW4LNY.js +129 -0
  149. package/dist/chunk-HEMJ5RDU.js +345 -0
  150. package/dist/chunk-HMP6KB4V.js +382 -0
  151. package/dist/chunk-I35KAK3E.js +458 -0
  152. package/dist/chunk-I4DA5D5Q.js +1922 -0
  153. package/dist/chunk-I53O26HI.js +1119 -0
  154. package/dist/chunk-IBLEQQDQ.js +181 -0
  155. package/dist/chunk-IS2BEXUC.js +2113 -0
  156. package/dist/chunk-ISCEGQHA.js +244 -0
  157. package/dist/chunk-JCERHH3L.js +85 -0
  158. package/dist/chunk-JCNCPBWU.js +97 -0
  159. package/dist/chunk-JEMLH7H2.js +1350 -0
  160. package/dist/chunk-JMR2X5FJ.js +630 -0
  161. package/dist/chunk-JR3MYBWG.js +2078 -0
  162. package/dist/chunk-JSEICUAL.js +197 -0
  163. package/dist/chunk-K3KOLZTH.js +123 -0
  164. package/dist/chunk-K4OH3B2I.js +14248 -0
  165. package/dist/chunk-KQ4Z2G24.js +260 -0
  166. package/dist/chunk-KVH5DSTA.js +369 -0
  167. package/dist/chunk-L4R5NOVT.js +81 -0
  168. package/dist/chunk-LCB6YCE6.js +70 -0
  169. package/dist/chunk-M543SLJZ.js +1352 -0
  170. package/dist/chunk-M6KDMU5P.js +2113 -0
  171. package/dist/chunk-MDAGRPZG.js +197 -0
  172. package/dist/chunk-MLNOSXRZ.js +402 -0
  173. package/dist/chunk-MNI5K34D.js +290 -0
  174. package/dist/chunk-MUDH7ZLR.js +129 -0
  175. package/dist/chunk-MUMBWV57.js +379 -0
  176. package/dist/chunk-NAQLGLOG.js +176 -0
  177. package/dist/chunk-NIBCUAEI.js +123 -0
  178. package/dist/chunk-NIZCTXYW.js +89 -0
  179. package/dist/chunk-NS5G36TN.js +712 -0
  180. package/dist/chunk-NSKQWLQL.js +76 -0
  181. package/dist/chunk-NUA3WRTO.js +1157 -0
  182. package/dist/chunk-O3IESEF6.js +85 -0
  183. package/dist/chunk-OAO2BK25.js +81 -0
  184. package/dist/chunk-OFY7RGLL.js +348 -0
  185. package/dist/chunk-OICU3UHF.js +181 -0
  186. package/dist/chunk-OK6HCC2Z.js +731 -0
  187. package/dist/chunk-ONTUBOYP.js +230 -0
  188. package/dist/chunk-OQB7TERT.js +54 -0
  189. package/dist/chunk-P362EYLO.js +106 -0
  190. package/dist/chunk-P4T4JOCE.js +192 -0
  191. package/dist/chunk-QAOWXQKA.js +333 -0
  192. package/dist/chunk-QEFT6G6J.js +2078 -0
  193. package/dist/chunk-QFVY5MHR.js +402 -0
  194. package/dist/chunk-QLMSROQC.js +604 -0
  195. package/dist/chunk-QNR4ZQDU.js +14365 -0
  196. package/dist/chunk-QQ3T45AO.js +348 -0
  197. package/dist/chunk-QV6HNEMH.js +230 -0
  198. package/dist/chunk-R5LCP56X.js +299 -0
  199. package/dist/chunk-RHTZA6X6.js +1922 -0
  200. package/dist/chunk-RL4RQIEI.js +731 -0
  201. package/dist/chunk-RW4EMKQF.js +185 -0
  202. package/dist/chunk-S35K4C6F.js +127 -0
  203. package/dist/chunk-SFQYQH5Z.js +50 -0
  204. package/dist/chunk-SLFB2RY6.js +133 -0
  205. package/dist/chunk-SSC7EKY2.js +133 -0
  206. package/dist/chunk-SWFFGWAF.js +262 -0
  207. package/dist/chunk-SXZCFZ5T.js +157 -0
  208. package/dist/chunk-T5LT62O5.js +14365 -0
  209. package/dist/chunk-TDGPZF5T.js +539 -0
  210. package/dist/chunk-TF6DEHEL.js +167 -0
  211. package/dist/chunk-TH7ZNVGB.js +33 -0
  212. package/dist/chunk-TTNYB6OH.js +33 -0
  213. package/dist/chunk-TUHR7Z7R.js +221 -0
  214. package/dist/chunk-UHKXYDBM.js +668 -0
  215. package/dist/chunk-UQBD2L52.js +128 -0
  216. package/dist/chunk-UTARH2WY.js +76 -0
  217. package/dist/chunk-UXYAQCIB.js +30 -0
  218. package/dist/chunk-UZHCPLB2.js +127 -0
  219. package/dist/chunk-VNJKA3K5.js +171 -0
  220. package/dist/chunk-VP4MDSUA.js +1156 -0
  221. package/dist/chunk-VWA7OCXI.js +58 -0
  222. package/dist/chunk-VWZZF3YB.js +70 -0
  223. package/dist/chunk-VYPKS352.js +214 -0
  224. package/dist/chunk-W6JB72KR.js +448 -0
  225. package/dist/chunk-WG4PSSI5.js +510 -0
  226. package/dist/chunk-WJPZPASS.js +373 -0
  227. package/dist/chunk-WLDBPKRL.js +3246 -0
  228. package/dist/chunk-WO2SPDUE.js +231 -0
  229. package/dist/chunk-WXEPPHDU.js +1094 -0
  230. package/dist/chunk-WXNSOT6K.js +82 -0
  231. package/dist/chunk-X2PSVVHB.js +448 -0
  232. package/dist/chunk-X5Y4JSD4.js +128 -0
  233. package/dist/chunk-X7VPB6Z5.js +621 -0
  234. package/dist/chunk-XA2GMH53.js +85 -0
  235. package/dist/chunk-XC2ZMYDN.js +204 -0
  236. package/dist/chunk-XFQJH67J.js +157 -0
  237. package/dist/chunk-XLF5F55U.js +230 -0
  238. package/dist/chunk-XQ5LT6UM.js +362 -0
  239. package/dist/chunk-XRMBKPIP.js +204 -0
  240. package/dist/chunk-XUC7YYW5.js +171 -0
  241. package/dist/chunk-XVDWHYIK.js +3276 -0
  242. package/dist/chunk-Y6CVAZ7T.js +97 -0
  243. package/dist/chunk-YA7WVZF5.js +377 -0
  244. package/dist/chunk-YACAOZVG.js +185 -0
  245. package/dist/chunk-YEHV3FN5.js +836 -0
  246. package/dist/chunk-YMZ6IGC3.js +284 -0
  247. package/dist/chunk-Z5P7AUFM.js +280 -0
  248. package/dist/chunk-Z5YFGOLZ.js +1068 -0
  249. package/dist/chunk-ZLYKY6GP.js +150 -0
  250. package/dist/chunk-ZOP7NAM2.js +58 -0
  251. package/dist/chunk-ZUNYZYKV.js +1157 -0
  252. package/dist/co-activation-54LO5GAA.js +73 -0
  253. package/dist/co-activation-ESPLEOMH.js +73 -0
  254. package/dist/co-occurrence-52ZTRX2I.js +94 -0
  255. package/dist/co-occurrence-O4G6VQUU.js +94 -0
  256. package/dist/code-context-index-OX3LN34G.js +30 -0
  257. package/dist/conversation-wiki-populator-IWSKIHQK.js +105 -0
  258. package/dist/core-memory-J6AEOYFN.js +110 -0
  259. package/dist/core-memory-XF4CLLDR.js +110 -0
  260. package/dist/cpu-steal-5YKTUPWF.js +23 -0
  261. package/dist/crdt-sync-5JOW6T2I.js +33 -0
  262. package/dist/crdt-sync-6L4OI4OA.js +33 -0
  263. package/dist/crm-webhook-BAXEYDPD.js +10 -0
  264. package/dist/crm-webhook-KVBGOUHU.js +10 -0
  265. package/dist/cto-delegation-gate-3WUTWBCT.js +279 -0
  266. package/dist/cto-delegation-gate-DZF3Z66I.js +279 -0
  267. package/dist/daemon-auth-M2G5PBME.js +13 -0
  268. package/dist/daemon-orchestration-3ANZVE7Y.js +138 -0
  269. package/dist/daemon-orchestration-APVUUNFB.js +138 -0
  270. package/dist/daemon-restart-report-F3P5AQS4.js +9 -0
  271. package/dist/db-backup-J7253HNV.js +33 -0
  272. package/dist/db-backup-M733ORYE.js +33 -0
  273. package/dist/db-restore-events-AIL6GSEK.js +76 -0
  274. package/dist/db-restore-events-LB3O46HH.js +76 -0
  275. package/dist/doc-graph-extractor-CF2WBSGL.js +132 -0
  276. package/dist/doc-graph-extractor-RSYHLOKD.js +132 -0
  277. package/dist/dreaming-L4FLJJO2.js +33 -0
  278. package/dist/dreaming-YKEKUE55.js +33 -0
  279. package/dist/entity-boost-ZKACOJKH.js +375 -0
  280. package/dist/exe-drift-AVJRXHCB.js +69 -0
  281. package/dist/exe-drift-MYT5NQ52.js +69 -0
  282. package/dist/exe-export-T2FHC5GC.js +75 -0
  283. package/dist/exe-export-TBV2JI4P.js +75 -0
  284. package/dist/exe-import-6UAKJF3Y.js +78 -0
  285. package/dist/exe-import-KJQO4PJX.js +78 -0
  286. package/dist/exe-key-KGQUC27D.js +580 -0
  287. package/dist/exe-key-Q772PMBM.js +580 -0
  288. package/dist/exe-org-KK22SSB3.js +73 -0
  289. package/dist/exe-snapshot-KF3HPOWJ.js +337 -0
  290. package/dist/exe-snapshot-SK6PMOFA.js +337 -0
  291. package/dist/fast-db-init-EXNYB2HK.js +7 -0
  292. package/dist/fast-db-init-FMECTLNS.js +7 -0
  293. package/dist/founder-context-N2VZ5MY2.js +96 -0
  294. package/dist/gateway/index.js +12 -12
  295. package/dist/git-staleness-2EOHIOMZ.js +111 -0
  296. package/dist/git-staleness-ZEYJXPFP.js +111 -0
  297. package/dist/git-task-sweep-I74JXGNT.js +41 -0
  298. package/dist/git-task-sweep-YKLOPYYV.js +41 -0
  299. package/dist/global-procedures-B23F4IQ3.js +21 -0
  300. package/dist/global-procedures-LUBLZ6WN.js +21 -0
  301. package/dist/graph-auto-extract-CSLZXRDY.js +182 -0
  302. package/dist/graph-auto-extract-DZRIETGW.js +182 -0
  303. package/dist/hook-integrity-HJBXTLQD.js +89 -0
  304. package/dist/hooks/bug-report-worker.js +15 -15
  305. package/dist/hooks/codex-stop-task-finalizer.js +15 -15
  306. package/dist/hooks/commit-complete.js +16 -16
  307. package/dist/hooks/error-recall.js +8 -8
  308. package/dist/hooks/exe-heartbeat-hook.js +5 -5
  309. package/dist/hooks/ingest-worker.js +5 -5
  310. package/dist/hooks/ingest.js +12 -12
  311. package/dist/hooks/instructions-loaded.js +6 -6
  312. package/dist/hooks/manifest.json +20 -20
  313. package/dist/hooks/notification.js +6 -6
  314. package/dist/hooks/post-compact.js +15 -15
  315. package/dist/hooks/post-tool-combined.js +7 -7
  316. package/dist/hooks/pre-compact.js +20 -20
  317. package/dist/hooks/pre-tool-use.js +19 -19
  318. package/dist/hooks/prompt-submit.js +27 -27
  319. package/dist/hooks/session-end.js +25 -25
  320. package/dist/hooks/session-start.js +37 -13
  321. package/dist/hooks/stop.js +22 -22
  322. package/dist/hooks/subagent-stop.js +15 -15
  323. package/dist/hooks/summary-worker.js +22 -22
  324. package/dist/index.js +23 -23
  325. package/dist/installer-AU5VMP4U.js +39 -0
  326. package/dist/installer-H7BIYSIK.js +39 -0
  327. package/dist/installer-L4NJWZGV.js +297 -0
  328. package/dist/installer-QE3LBMVF.js +343 -0
  329. package/dist/installer-QH75OOGL.js +297 -0
  330. package/dist/installer-XREYYGF2.js +343 -0
  331. package/dist/key-backup-status-IJCQT4NV.js +39 -0
  332. package/dist/lib/agent-config.js +2 -2
  333. package/dist/lib/cloud-sync.js +6 -6
  334. package/dist/lib/config.js +7 -3
  335. package/dist/lib/consolidation.js +8 -8
  336. package/dist/lib/database.js +3 -3
  337. package/dist/lib/db-daemon-client.js +3 -3
  338. package/dist/lib/db.js +3 -3
  339. package/dist/lib/device-registry.js +1 -1
  340. package/dist/lib/embed-worker.js +1 -1
  341. package/dist/lib/embedder.js +4 -4
  342. package/dist/lib/employee-templates.js +5 -5
  343. package/dist/lib/employees.js +3 -3
  344. package/dist/lib/exe-daemon-client.js +3 -3
  345. package/dist/lib/exe-daemon.js +51 -51
  346. package/dist/lib/hybrid-search.js +6 -6
  347. package/dist/lib/identity.js +3 -3
  348. package/dist/lib/license.js +2 -2
  349. package/dist/lib/messaging.js +13 -13
  350. package/dist/lib/reminders.js +4 -4
  351. package/dist/lib/schedules.js +6 -6
  352. package/dist/lib/session-registry.js +5 -5
  353. package/dist/lib/skill-learning.js +7 -7
  354. package/dist/lib/status-brief.js +1 -1
  355. package/dist/lib/store.js +5 -5
  356. package/dist/lib/task-router.js +4 -4
  357. package/dist/lib/tasks.js +14 -14
  358. package/dist/lib/tmux-routing.js +12 -12
  359. package/dist/lib/token-spend.js +4 -4
  360. package/dist/license-gate-X57APN2E.js +14 -0
  361. package/dist/mcp/register-tools.js +71 -69
  362. package/dist/mcp/server.js +73 -71
  363. package/dist/mcp/tools/complete-reminder.js +5 -5
  364. package/dist/mcp/tools/create-reminder.js +5 -5
  365. package/dist/mcp/tools/create-task.js +16 -16
  366. package/dist/mcp/tools/deactivate-behavior.js +8 -8
  367. package/dist/mcp/tools/list-reminders.js +5 -5
  368. package/dist/mcp/tools/list-tasks.js +16 -16
  369. package/dist/mcp/tools/send-message.js +15 -15
  370. package/dist/mcp/tools/update-task.js +15 -15
  371. package/dist/mcp-http-config-KMP55RXI.js +28 -0
  372. package/dist/mcp-http-config-XYHPQVRA.js +28 -0
  373. package/dist/memory-cards-AULW7ITU.js +179 -0
  374. package/dist/memory-cards-NLTRIBSD.js +179 -0
  375. package/dist/memory-graph-extractor-NGJQIKAA.js +21 -0
  376. package/dist/memory-graph-extractor-QWFPKSX5.js +21 -0
  377. package/dist/memory-poisoning-defense-5WWOLHUQ.js +223 -0
  378. package/dist/memory-poisoning-defense-742X4H52.js +223 -0
  379. package/dist/memory-queue-OXHHNDOC.js +19 -0
  380. package/dist/memory-queue-client-P4TZNVQB.js +16 -0
  381. package/dist/memory-reflection-6GF5OK2W.js +243 -0
  382. package/dist/memory-reflection-SGIE7OJ7.js +243 -0
  383. package/dist/message-queue-client-ELWCWKBO.js +92 -0
  384. package/dist/notifications-67M5SPLO.js +46 -0
  385. package/dist/notifications-HUH2H5WZ.js +46 -0
  386. package/dist/oauth-server-RKCMPBIP.js +437 -0
  387. package/dist/orchestration-events-MC3IZ46I.js +26 -0
  388. package/dist/orchestration-events-NZCUTMCJ.js +26 -0
  389. package/dist/orchestration-phase-FPAVQ57X.js +23 -0
  390. package/dist/orchestrator-3MJ6YJKT.js +34 -0
  391. package/dist/orchestrator-HOXFT4PP.js +34 -0
  392. package/dist/pipeline-router-NCUDK335.js +14 -0
  393. package/dist/pipeline-router-POLBFEBM.js +14 -0
  394. package/dist/plan-limits-DGAFE7V6.js +27 -0
  395. package/dist/plan-limits-J4WXJVDS.js +27 -0
  396. package/dist/project-boot-FRCQHQTF.js +299 -0
  397. package/dist/project-boot-QHXOUJGT.js +299 -0
  398. package/dist/projection-worker-QZW4DOY3.js +1034 -0
  399. package/dist/projection-worker-XDKC3GIZ.js +1034 -0
  400. package/dist/prospective-memory-JIGVZM2I.js +231 -0
  401. package/dist/push-notifications-ERC4SQSQ.js +15 -0
  402. package/dist/reranker-SF3LMYGY.js +19 -0
  403. package/dist/reranker-SOM2WMD6.js +19 -0
  404. package/dist/retrieval-health-7FRD2KLM.js +11 -0
  405. package/dist/retrieval-health-P6QHP263.js +11 -0
  406. package/dist/review-polling-66EJAMR3.js +125 -0
  407. package/dist/review-polling-SYKYNFRK.js +125 -0
  408. package/dist/runtime/index.js +19 -19
  409. package/dist/session-events-A6EDTM27.js +37 -0
  410. package/dist/session-events-DONPZ7DR.js +37 -0
  411. package/dist/session-kill-telemetry-NV2S2YZ2.js +30 -0
  412. package/dist/session-kill-telemetry-Y47QAFHP.js +30 -0
  413. package/dist/session-scope-H3FJVQ6E.js +87 -0
  414. package/dist/session-scope-I56DVQEY.js +87 -0
  415. package/dist/setup-wizard-MX3S3DVH.js +12 -0
  416. package/dist/setup-wizard-YRBCVPCU.js +12 -0
  417. package/dist/shard-manager-AX4W5B3N.js +30 -0
  418. package/dist/skill-refinement-57DCIDKT.js +158 -0
  419. package/dist/skill-refinement-XTBCHOMO.js +158 -0
  420. package/dist/stack-update-45SNTDZ6.js +76 -0
  421. package/dist/stack-update-CZ2QHS6T.js +76 -0
  422. package/dist/stack-update-XNEO4WQH.js +76 -0
  423. package/dist/steward-gate-J7VMPHEN.js +14 -0
  424. package/dist/steward-gate-PVUKWYED.js +14 -0
  425. package/dist/task-enforcement-G4MYUJ2E.js +439 -0
  426. package/dist/task-enforcement-QBF44BXN.js +439 -0
  427. package/dist/task-scope-D2VOYU3P.js +36 -0
  428. package/dist/task-scope-HGL6VACL.js +36 -0
  429. package/dist/tasks-crud-DFE4XOW7.js +78 -0
  430. package/dist/tasks-crud-J5TSLFQN.js +78 -0
  431. package/dist/tasks-notify-2VRKOK74.js +39 -0
  432. package/dist/tasks-notify-Q23MIKDA.js +39 -0
  433. package/dist/tasks-review-NRSVHN7V.js +48 -0
  434. package/dist/tasks-review-VV3RLPLT.js +48 -0
  435. package/dist/telemetry-upload-ISI6TEX4.js +740 -0
  436. package/dist/telemetry-upload-XML6WVPW.js +740 -0
  437. package/dist/token-budget-KVRHMY7V.js +85 -0
  438. package/dist/token-budget-WV2GIFYJ.js +85 -0
  439. package/dist/tool-capability-index-NOMFY27N.js +10 -0
  440. package/dist/tool-telemetry-6DGIQUV3.js +17 -0
  441. package/dist/tool-telemetry-NXPM2T5E.js +17 -0
  442. package/dist/tui/App.js +80 -38
  443. package/dist/tui-data-C4474APN.js +259 -0
  444. package/dist/tui-data-KP66NOW3.js +259 -0
  445. package/dist/webhook-pipe-ZAEPBTDB.js +114 -0
  446. package/dist/wiki-acl-4A3ZUPJK.js +111 -0
  447. package/dist/wiki-acl-DRTEVIHT.js +111 -0
  448. package/dist/wiki-client-AN52BINX.js +157 -0
  449. package/dist/worker-gate-EVSFKALM.js +21 -0
  450. package/dist/worker-gate-O2KXQN5T.js +21 -0
  451. package/dist/workflow-engine-MUO435MX.js +28 -0
  452. package/dist/workflow-engine-RV6JLGHQ.js +28 -0
  453. package/dist/worktree-36S7LYES.js +27 -0
  454. package/dist/worktree-WTNPY42O.js +27 -0
  455. package/dist/worktree-sweep-M5AXCSU7.js +20 -0
  456. package/dist/worktree-sweep-NKEGKQT3.js +20 -0
  457. package/package.json +1 -1
  458. package/release-notes.json +20 -20
@@ -0,0 +1,85 @@
1
+ import {
2
+ PLATFORM_PROCEDURES,
3
+ PLATFORM_PROCEDURE_TITLES
4
+ } from "./chunk-VUH67PT4.js";
5
+ import {
6
+ getClient
7
+ } from "./chunk-WLDBPKRL.js";
8
+
9
+ // src/lib/global-procedures.ts
10
+ import { randomUUID } from "crypto";
11
+ var _customerCache = "";
12
+ var _cacheLoaded = false;
13
+ var _platformCache = PLATFORM_PROCEDURES.map((p) => `### ${p.title}
14
+ ${p.content}`).join("\n\n");
15
+ async function loadGlobalProcedures() {
16
+ const client = getClient();
17
+ const result = await client.execute({
18
+ sql: "SELECT * FROM company_procedures WHERE active = 1 ORDER BY priority ASC, created_at ASC",
19
+ args: []
20
+ });
21
+ const allRows = result.rows;
22
+ const customerOnly = allRows.filter((p) => {
23
+ if (PLATFORM_PROCEDURE_TITLES.has(p.title)) return false;
24
+ const title = (p.title ?? "").trim();
25
+ const content = (p.content ?? "").trim();
26
+ if (!title || title === "(untitled)") return false;
27
+ if (!content) return false;
28
+ return true;
29
+ });
30
+ const values = customerOnly.filter((p) => p.kind === "value");
31
+ const procedures = customerOnly.filter((p) => p.kind !== "value");
32
+ const parts = [];
33
+ if (values.length > 0) {
34
+ parts.push("### Company Values\n" + values.map((v) => `- **${v.title}:** ${v.content}`).join("\n"));
35
+ }
36
+ if (procedures.length > 0) {
37
+ parts.push(procedures.map((p) => `### ${p.title}
38
+ ${p.content}`).join("\n\n"));
39
+ }
40
+ _customerCache = parts.join("\n\n");
41
+ _cacheLoaded = true;
42
+ return customerOnly;
43
+ }
44
+ function getGlobalProceduresBlock() {
45
+ const sections = [];
46
+ if (_platformCache) sections.push(_platformCache);
47
+ if (_cacheLoaded && _customerCache) sections.push(_customerCache);
48
+ if (sections.length === 0) return "";
49
+ return `## Organization-Wide Procedures (MANDATORY \u2014 supersedes all other rules)
50
+
51
+ ${sections.join("\n\n")}
52
+ `;
53
+ }
54
+ async function storeGlobalProcedure(input) {
55
+ if (!input.title?.trim() || !input.content?.trim()) {
56
+ throw new Error("storeGlobalProcedure requires a non-empty title and content");
57
+ }
58
+ const id = randomUUID();
59
+ const now = (/* @__PURE__ */ new Date()).toISOString();
60
+ const client = getClient();
61
+ await client.execute({
62
+ sql: `INSERT INTO company_procedures (id, title, content, priority, domain, kind, active, created_at, updated_at)
63
+ VALUES (?, ?, ?, ?, ?, ?, 1, ?, ?)`,
64
+ args: [id, input.title, input.content, input.priority ?? "p0", input.domain ?? null, input.kind ?? "procedure", now, now]
65
+ });
66
+ await loadGlobalProcedures();
67
+ return id;
68
+ }
69
+ async function deactivateGlobalProcedure(id) {
70
+ const now = (/* @__PURE__ */ new Date()).toISOString();
71
+ const client = getClient();
72
+ const result = await client.execute({
73
+ sql: "UPDATE company_procedures SET active = 0, updated_at = ? WHERE id = ?",
74
+ args: [now, id]
75
+ });
76
+ await loadGlobalProcedures();
77
+ return result.rowsAffected > 0;
78
+ }
79
+
80
+ export {
81
+ loadGlobalProcedures,
82
+ getGlobalProceduresBlock,
83
+ storeGlobalProcedure,
84
+ deactivateGlobalProcedure
85
+ };
@@ -0,0 +1,81 @@
1
+ // src/bin/fast-db-init.ts
2
+ async function fastDbInit() {
3
+ const { isInitialized, getClient, setExternalClient } = await import("./lib/database.js");
4
+ if (isInitialized()) {
5
+ return getClient();
6
+ }
7
+ const forceDirect = process.env.EXE_DB_DIRECT === "1" || process.env.EXE_DB_READONLY === "1" || process.env.EXE_SKIP_DAEMON === "1";
8
+ if (!forceDirect) {
9
+ try {
10
+ const { connectEmbedDaemon, sendDaemonRequest, isClientConnected, disconnectClient } = await import("./lib/exe-daemon-client.js");
11
+ const { deserializeResultSet } = await import("./daemon-protocol-XW2OLNBS.js");
12
+ await Promise.race([
13
+ connectEmbedDaemon(),
14
+ new Promise((_, reject) => setTimeout(() => reject(new Error("Daemon socket timeout (2s)")), 2e3))
15
+ ]);
16
+ if (isClientConnected()) {
17
+ const daemonClient = {
18
+ async execute(stmt) {
19
+ const sql = typeof stmt === "string" ? stmt : stmt.sql;
20
+ const args = typeof stmt === "string" ? [] : Array.isArray(stmt.args) ? stmt.args : [];
21
+ const resp = await sendDaemonRequest({ type: "db-execute", sql, args });
22
+ if (resp.error) throw new Error(String(resp.error));
23
+ if (resp.db) return deserializeResultSet(resp.db);
24
+ throw new Error("Unexpected daemon response");
25
+ },
26
+ async batch(stmts, mode) {
27
+ const statements = stmts.map((s) => {
28
+ const sql = typeof s === "string" ? s : s.sql;
29
+ const args = typeof s === "string" ? [] : Array.isArray(s.args) ? s.args : [];
30
+ return { sql, args };
31
+ });
32
+ const resp = await sendDaemonRequest({ type: "db-batch", statements, mode: mode ?? "deferred" });
33
+ if (resp.error) throw new Error(String(resp.error));
34
+ const batchResults = resp["db-batch"];
35
+ if (batchResults) return batchResults.map(deserializeResultSet);
36
+ throw new Error("Unexpected daemon batch response");
37
+ },
38
+ async transaction(_mode) {
39
+ throw new Error("Transactions not supported via daemon socket");
40
+ },
41
+ async executeMultiple(_sql) {
42
+ throw new Error("executeMultiple not supported via daemon socket");
43
+ },
44
+ async migrate(_stmts) {
45
+ throw new Error("migrate not supported via daemon socket");
46
+ },
47
+ sync() {
48
+ return Promise.resolve(void 0);
49
+ },
50
+ close() {
51
+ },
52
+ get closed() {
53
+ return false;
54
+ },
55
+ get protocol() {
56
+ return "file";
57
+ }
58
+ };
59
+ try {
60
+ await daemonClient.execute("SELECT 1");
61
+ } catch {
62
+ try {
63
+ disconnectClient();
64
+ } catch {
65
+ }
66
+ throw new Error("Daemon socket validation failed");
67
+ }
68
+ setExternalClient(daemonClient);
69
+ return daemonClient;
70
+ }
71
+ } catch {
72
+ }
73
+ }
74
+ const { initStore } = await import("./lib/store.js");
75
+ await initStore({ lightweight: true });
76
+ return getClient();
77
+ }
78
+
79
+ export {
80
+ fastDbInit
81
+ };
@@ -0,0 +1,348 @@
1
+ import {
2
+ getIdentity,
3
+ loadEmployeesSync
4
+ } from "./chunk-XVDWHYIK.js";
5
+
6
+ // src/lib/drift-probes.ts
7
+ var DRIFT_THRESHOLD = 80;
8
+ async function getRecentMemories(agentId, limit) {
9
+ try {
10
+ const { getClient, isInitialized } = await import("./lib/database.js");
11
+ if (!isInitialized()) return { count: 0, texts: [] };
12
+ const client = getClient();
13
+ const result = await client.execute({
14
+ sql: `SELECT text FROM memories WHERE agent_id = ? ORDER BY created_at DESC LIMIT ?`,
15
+ args: [agentId, limit]
16
+ });
17
+ const texts = result.rows.map((r) => String(r.text ?? ""));
18
+ return { count: texts.length, texts };
19
+ } catch {
20
+ return { count: 0, texts: [] };
21
+ }
22
+ }
23
+ async function getDecisionCount(agentId) {
24
+ try {
25
+ const { getClient, isInitialized } = await import("./lib/database.js");
26
+ if (!isInitialized()) return 0;
27
+ const client = getClient();
28
+ const result = await client.execute({
29
+ sql: `SELECT COUNT(*) as cnt FROM memories WHERE agent_id = ? AND memory_type = 'decision'`,
30
+ args: [agentId]
31
+ });
32
+ return Number(result.rows[0]?.cnt ?? 0);
33
+ } catch {
34
+ return 0;
35
+ }
36
+ }
37
+ function probeContinuity(ctx) {
38
+ const memCount = ctx.recentMemoryCount;
39
+ let score;
40
+ let detail;
41
+ if (memCount >= 20) {
42
+ score = 95;
43
+ detail = `${memCount} recent memories \u2014 strong continuity`;
44
+ } else if (memCount >= 10) {
45
+ score = 85;
46
+ detail = `${memCount} recent memories \u2014 adequate continuity`;
47
+ } else if (memCount >= 3) {
48
+ score = 70;
49
+ detail = `${memCount} recent memories \u2014 limited continuity`;
50
+ } else if (memCount >= 1) {
51
+ score = 50;
52
+ detail = `${memCount} recent memories \u2014 weak continuity`;
53
+ } else {
54
+ score = 30;
55
+ detail = "No recent memories \u2014 agent may lack session context";
56
+ }
57
+ if (ctx.storedDecisionCount > 0) {
58
+ score = Math.min(100, score + 5);
59
+ detail += ` (+${ctx.storedDecisionCount} decisions)`;
60
+ }
61
+ return { axis: "continuity", score, detail };
62
+ }
63
+ function probeConsistency(ctx) {
64
+ if (!ctx.identityBody || ctx.recentMemoryTexts.length === 0) {
65
+ return {
66
+ axis: "consistency",
67
+ score: ctx.identityBody ? 80 : 50,
68
+ detail: ctx.identityBody ? "No memories to check against identity" : "No identity file \u2014 cannot assess consistency"
69
+ };
70
+ }
71
+ const identityTerms = extractKeyTerms(ctx.identityBody);
72
+ if (identityTerms.length === 0) {
73
+ return { axis: "consistency", score: 75, detail: "Identity has no extractable key terms" };
74
+ }
75
+ const memoryText = ctx.recentMemoryTexts.join(" ").toLowerCase();
76
+ let matched = 0;
77
+ for (const term of identityTerms) {
78
+ if (memoryText.includes(term.toLowerCase())) matched++;
79
+ }
80
+ const ratio = matched / identityTerms.length;
81
+ const score = Math.round(50 + ratio * 50);
82
+ const detail = `${matched}/${identityTerms.length} identity terms found in recent memories`;
83
+ return { axis: "consistency", score, detail };
84
+ }
85
+ function probeRoleFidelity(ctx) {
86
+ const flags = [];
87
+ if (!ctx.identityBody) {
88
+ return {
89
+ axis: "role-fidelity",
90
+ score: 40,
91
+ detail: `No identity file for ${ctx.agent.name}`
92
+ };
93
+ }
94
+ let score = 100;
95
+ const identityLower = ctx.identityBody.toLowerCase();
96
+ const rosterRole = ctx.agent.role.toLowerCase();
97
+ if (!identityLower.includes(rosterRole)) {
98
+ score -= 15;
99
+ flags.push(`Identity does not mention role "${ctx.agent.role}"`);
100
+ }
101
+ if (!identityLower.includes(ctx.agent.name.toLowerCase())) {
102
+ score -= 10;
103
+ flags.push(`Identity does not mention agent name "${ctx.agent.name}"`);
104
+ }
105
+ const hasScopeBoundary = identityLower.includes("do not") || identityLower.includes("don't") || identityLower.includes("not your") || identityLower.includes("outside your") || identityLower.includes("you do not");
106
+ if (!hasScopeBoundary) {
107
+ score -= 10;
108
+ flags.push("Identity lacks explicit scope boundaries (what NOT to do)");
109
+ }
110
+ if (ctx.agent.systemPrompt) {
111
+ const promptTerms = extractKeyTerms(ctx.agent.systemPrompt);
112
+ const identityText = ctx.identityBody.toLowerCase();
113
+ let promptMatched = 0;
114
+ for (const term of promptTerms.slice(0, 20)) {
115
+ if (identityText.includes(term.toLowerCase())) promptMatched++;
116
+ }
117
+ const promptRatio = promptTerms.length > 0 ? promptMatched / Math.min(promptTerms.length, 20) : 1;
118
+ if (promptRatio < 0.3) {
119
+ score -= 15;
120
+ flags.push("Identity content diverges significantly from roster systemPrompt");
121
+ }
122
+ }
123
+ if (ctx.recentMemoryTexts.length > 5) {
124
+ const roleKeywords = extractRoleKeywords(ctx.agent.role);
125
+ const memoryText = ctx.recentMemoryTexts.join(" ").toLowerCase();
126
+ let domainHits = 0;
127
+ for (const kw of roleKeywords) {
128
+ if (memoryText.includes(kw)) domainHits++;
129
+ }
130
+ const domainRatio = roleKeywords.length > 0 ? domainHits / roleKeywords.length : 1;
131
+ if (domainRatio < 0.2) {
132
+ score -= 10;
133
+ flags.push(`Recent work shows little overlap with ${ctx.agent.role} domain keywords`);
134
+ }
135
+ }
136
+ score = Math.max(0, Math.min(100, score));
137
+ const detail = flags.length > 0 ? flags.join("; ") : "Identity aligns with roster definition";
138
+ return { axis: "role-fidelity", score, detail };
139
+ }
140
+ function probeWorldModel(ctx) {
141
+ if (!ctx.identityBody) {
142
+ return {
143
+ axis: "world-model",
144
+ score: 50,
145
+ detail: "No identity file \u2014 cannot assess org awareness"
146
+ };
147
+ }
148
+ const identityLower = ctx.identityBody.toLowerCase();
149
+ const flags = [];
150
+ let score = 100;
151
+ const otherAgents = ctx.allEmployees.filter((e) => e.name !== ctx.agent.name);
152
+ let mentionedAgents = 0;
153
+ for (const other of otherAgents) {
154
+ if (identityLower.includes(other.name.toLowerCase())) mentionedAgents++;
155
+ }
156
+ if (otherAgents.length > 0) {
157
+ const mentionRatio = mentionedAgents / otherAgents.length;
158
+ if (mentionRatio < 0.3) {
159
+ score -= 15;
160
+ flags.push(`Identity mentions ${mentionedAgents}/${otherAgents.length} team members`);
161
+ }
162
+ }
163
+ const hasReportingChain = identityLower.includes("report") || identityLower.includes("manager") || identityLower.includes("coo") || identityLower.includes("coordinator");
164
+ if (!hasReportingChain) {
165
+ score -= 10;
166
+ flags.push("Identity does not reference reporting chain");
167
+ }
168
+ const orgTerms = ["exe-os", "exe-wiki", "exe-crm", "askexe"];
169
+ let orgMentions = 0;
170
+ for (const term of orgTerms) {
171
+ if (identityLower.includes(term)) orgMentions++;
172
+ }
173
+ if (orgMentions === 0) {
174
+ score -= 5;
175
+ flags.push("Identity does not reference any org products");
176
+ }
177
+ score = Math.max(0, Math.min(100, score));
178
+ const detail = flags.length > 0 ? flags.join("; ") : "Identity reflects org structure";
179
+ return { axis: "world-model", score, detail };
180
+ }
181
+ function extractKeyTerms(text) {
182
+ const stopwords = /* @__PURE__ */ new Set([
183
+ "the",
184
+ "and",
185
+ "for",
186
+ "are",
187
+ "but",
188
+ "not",
189
+ "you",
190
+ "all",
191
+ "any",
192
+ "can",
193
+ "had",
194
+ "her",
195
+ "was",
196
+ "one",
197
+ "our",
198
+ "out",
199
+ "has",
200
+ "his",
201
+ "how",
202
+ "its",
203
+ "may",
204
+ "new",
205
+ "now",
206
+ "old",
207
+ "see",
208
+ "way",
209
+ "who",
210
+ "did",
211
+ "get",
212
+ "got",
213
+ "let",
214
+ "say",
215
+ "she",
216
+ "too",
217
+ "use",
218
+ "with",
219
+ "this",
220
+ "that",
221
+ "from",
222
+ "they",
223
+ "been",
224
+ "have",
225
+ "will",
226
+ "your",
227
+ "what",
228
+ "when",
229
+ "make",
230
+ "like",
231
+ "just",
232
+ "over",
233
+ "such",
234
+ "take",
235
+ "than",
236
+ "them",
237
+ "very",
238
+ "some",
239
+ "could",
240
+ "into",
241
+ "then",
242
+ "more",
243
+ "also",
244
+ "after",
245
+ "should",
246
+ "would",
247
+ "about",
248
+ "their",
249
+ "which",
250
+ "these",
251
+ "other",
252
+ "every",
253
+ "does",
254
+ "being",
255
+ "those",
256
+ "never",
257
+ "before",
258
+ "through"
259
+ ]);
260
+ const words = text.replace(/[^\w\s-]/g, " ").split(/\s+/).filter((w) => w.length > 3 && !stopwords.has(w.toLowerCase()));
261
+ return [...new Set(words.map((w) => w.toLowerCase()))].slice(0, 50);
262
+ }
263
+ function extractRoleKeywords(role) {
264
+ const roleKeywordMap = {
265
+ "coo": ["coordinate", "review", "status", "team", "task", "priority", "dispatch"],
266
+ "cto": ["architecture", "code", "technical", "system", "design", "review", "security"],
267
+ "cmo": ["marketing", "brand", "content", "design", "seo", "social", "campaign"],
268
+ "principal engineer": ["code", "implement", "test", "fix", "feature", "refactor", "build"],
269
+ "staff code reviewer": ["review", "code", "quality", "issue", "fix", "pattern"],
270
+ "content production specialist": ["video", "image", "render", "content", "produce", "media"],
271
+ "ai product lead": ["competitive", "analysis", "feature", "product", "research", "repo"]
272
+ };
273
+ const normalized = role.toLowerCase();
274
+ return roleKeywordMap[normalized] ?? normalized.split(/\s+/).filter((w) => w.length > 2);
275
+ }
276
+ async function runDriftProbes(options = {}) {
277
+ const employees = loadEmployeesSync();
278
+ const targetAgents = options.agentId ? employees.filter((e) => e.name === options.agentId) : employees;
279
+ if (targetAgents.length === 0) {
280
+ return [];
281
+ }
282
+ const axes = options.axes ?? ["continuity", "consistency", "role-fidelity", "world-model"];
283
+ const results = [];
284
+ for (const agent of targetAgents) {
285
+ const identity = getIdentity(agent.name);
286
+ const { count: memCount, texts: memTexts } = await getRecentMemories(agent.name, 50);
287
+ const decisionCount = await getDecisionCount(agent.name);
288
+ const ctx = {
289
+ agent,
290
+ identityBody: identity?.body ?? null,
291
+ identityRole: identity?.frontmatter.role ?? null,
292
+ recentMemoryCount: memCount,
293
+ recentMemoryTexts: memTexts,
294
+ storedDecisionCount: decisionCount,
295
+ allEmployees: employees
296
+ };
297
+ const probes = [];
298
+ const probeFns = {
299
+ continuity: probeContinuity,
300
+ consistency: probeConsistency,
301
+ "role-fidelity": probeRoleFidelity,
302
+ "world-model": probeWorldModel
303
+ };
304
+ for (const axis of axes) {
305
+ probes.push(probeFns[axis](ctx));
306
+ }
307
+ const scores = {
308
+ continuity: 0,
309
+ consistency: 0,
310
+ "role-fidelity": 0,
311
+ "world-model": 0
312
+ };
313
+ for (const probe of probes) {
314
+ scores[probe.axis] = probe.score;
315
+ }
316
+ const weights = {
317
+ continuity: 0.2,
318
+ consistency: 0.2,
319
+ "role-fidelity": 0.35,
320
+ "world-model": 0.25
321
+ };
322
+ let weightedSum = 0;
323
+ let weightTotal = 0;
324
+ for (const axis of axes) {
325
+ weightedSum += scores[axis] * weights[axis];
326
+ weightTotal += weights[axis];
327
+ }
328
+ const overall = Math.round(weightTotal > 0 ? weightedSum / weightTotal : 0);
329
+ const flags = [];
330
+ for (const probe of probes) {
331
+ if (probe.score < DRIFT_THRESHOLD) {
332
+ flags.push(`${probe.axis} at ${probe.score}% \u2014 ${probe.detail}`);
333
+ }
334
+ }
335
+ results.push({
336
+ agent: agent.name,
337
+ scores,
338
+ overall,
339
+ drifting: flags.length > 0,
340
+ flags
341
+ });
342
+ }
343
+ return results;
344
+ }
345
+
346
+ export {
347
+ runDriftProbes
348
+ };
@@ -0,0 +1,181 @@
1
+ import {
2
+ getClient
3
+ } from "./chunk-XVDWHYIK.js";
4
+ import {
5
+ loadConfig
6
+ } from "./chunk-CEKZ77KA.js";
7
+
8
+ // src/lib/reminders.ts
9
+ import crypto from "crypto";
10
+ async function getCloudConfig() {
11
+ try {
12
+ const config = await loadConfig();
13
+ if (config.cloud?.apiKey && config.cloud?.endpoint) {
14
+ return { apiKey: config.cloud.apiKey, endpoint: config.cloud.endpoint };
15
+ }
16
+ } catch {
17
+ }
18
+ return null;
19
+ }
20
+ function apiBaseUrl(cloud) {
21
+ try {
22
+ const url = new URL(cloud.endpoint);
23
+ if (url.hostname.startsWith("sync.")) {
24
+ url.hostname = url.hostname.replace(/^sync\./, "api.");
25
+ return url.origin;
26
+ }
27
+ } catch {
28
+ }
29
+ return "https://api.askexe.com";
30
+ }
31
+ async function cloudPushReminder(cloud, text, dueDate) {
32
+ try {
33
+ const base = apiBaseUrl(cloud);
34
+ await fetch(`${base}/v1/reminders`, {
35
+ method: "POST",
36
+ headers: {
37
+ "Authorization": `Bearer ${cloud.apiKey}`,
38
+ "Content-Type": "application/json"
39
+ },
40
+ body: JSON.stringify({ text, due_date: dueDate })
41
+ });
42
+ } catch (err) {
43
+ process.stderr.write(`[reminders] cloud push failed: ${err instanceof Error ? err.message : String(err)}
44
+ `);
45
+ }
46
+ }
47
+ async function cloudFetchReminders(cloud) {
48
+ try {
49
+ const base = apiBaseUrl(cloud);
50
+ const res = await fetch(`${base}/v1/reminders`, {
51
+ method: "GET",
52
+ headers: {
53
+ "Authorization": `Bearer ${cloud.apiKey}`
54
+ }
55
+ });
56
+ if (!res.ok) return [];
57
+ const data = await res.json();
58
+ if (!Array.isArray(data.items)) return [];
59
+ return data.items.map((r) => ({
60
+ id: r.id,
61
+ text: r.text,
62
+ createdAt: r.created_at,
63
+ dueDate: r.due_date,
64
+ completedAt: r.completed_at,
65
+ source: "cloud"
66
+ }));
67
+ } catch (err) {
68
+ process.stderr.write(`[reminders] cloud fetch failed: ${err instanceof Error ? err.message : String(err)}
69
+ `);
70
+ return [];
71
+ }
72
+ }
73
+ async function cloudDeleteReminder(cloud, id) {
74
+ try {
75
+ const base = apiBaseUrl(cloud);
76
+ await fetch(`${base}/v1/reminders/${encodeURIComponent(id)}`, {
77
+ method: "DELETE",
78
+ headers: {
79
+ "Authorization": `Bearer ${cloud.apiKey}`
80
+ }
81
+ });
82
+ } catch (err) {
83
+ process.stderr.write(`[reminders] cloud delete failed: ${err instanceof Error ? err.message : String(err)}
84
+ `);
85
+ }
86
+ }
87
+ function dedup(local, cloud) {
88
+ const localKeys = /* @__PURE__ */ new Set();
89
+ for (const r of local) {
90
+ localKeys.add(`${r.text.trim().toLowerCase()}|${r.dueDate ?? ""}`);
91
+ }
92
+ const merged = local.map((r) => ({ ...r, source: "local" }));
93
+ for (const r of cloud) {
94
+ const key = `${r.text.trim().toLowerCase()}|${r.dueDate ?? ""}`;
95
+ if (localKeys.has(key)) {
96
+ const existing = merged.find(
97
+ (m) => m.text.trim().toLowerCase() === r.text.trim().toLowerCase() && (m.dueDate ?? "") === (r.dueDate ?? "")
98
+ );
99
+ if (existing) existing.source = "both";
100
+ } else {
101
+ merged.push({ ...r, source: "cloud" });
102
+ }
103
+ }
104
+ return merged;
105
+ }
106
+ async function createReminder(text, dueDate) {
107
+ const client = getClient();
108
+ const id = crypto.randomUUID();
109
+ const now = (/* @__PURE__ */ new Date()).toISOString();
110
+ await client.execute({
111
+ sql: `INSERT INTO reminders (id, text, created_at, due_date) VALUES (?, ?, ?, ?)`,
112
+ args: [id, text, now, dueDate ?? null]
113
+ });
114
+ const cloud = await getCloudConfig();
115
+ if (cloud) {
116
+ cloudPushReminder(cloud, text, dueDate ?? null).catch(() => {
117
+ });
118
+ }
119
+ return { id, text, createdAt: now, dueDate: dueDate ?? null, completedAt: null };
120
+ }
121
+ async function listReminders(includeCompleted = false) {
122
+ const client = getClient();
123
+ const sql = includeCompleted ? `SELECT id, text, created_at, due_date, completed_at FROM reminders ORDER BY due_date ASC NULLS LAST LIMIT 500` : `SELECT id, text, created_at, due_date, completed_at FROM reminders WHERE completed_at IS NULL ORDER BY due_date ASC NULLS LAST LIMIT 500`;
124
+ const result = await client.execute(sql);
125
+ const local = result.rows.map((row) => ({
126
+ id: String(row.id),
127
+ text: String(row.text),
128
+ createdAt: String(row.created_at),
129
+ dueDate: row.due_date ? String(row.due_date) : null,
130
+ completedAt: row.completed_at ? String(row.completed_at) : null
131
+ }));
132
+ const cloud = await getCloudConfig();
133
+ if (cloud) {
134
+ const cloudReminders = await cloudFetchReminders(cloud);
135
+ return dedup(local, cloudReminders);
136
+ }
137
+ return local;
138
+ }
139
+ async function completeReminder(idOrText) {
140
+ const client = getClient();
141
+ const now = (/* @__PURE__ */ new Date()).toISOString();
142
+ let result = await client.execute({
143
+ sql: `SELECT id, text FROM reminders WHERE id = ? AND completed_at IS NULL`,
144
+ args: [idOrText]
145
+ });
146
+ if (result.rows.length === 0) {
147
+ result = await client.execute({
148
+ sql: `SELECT id, text FROM reminders WHERE completed_at IS NULL AND text LIKE '%' || ? || '%' LIMIT 1`,
149
+ args: [idOrText]
150
+ });
151
+ }
152
+ if (result.rows.length === 0) return null;
153
+ const row = result.rows[0];
154
+ const id = String(row.id);
155
+ const text = String(row.text);
156
+ await client.execute({
157
+ sql: `UPDATE reminders SET completed_at = ? WHERE id = ?`,
158
+ args: [now, id]
159
+ });
160
+ const cloud = await getCloudConfig();
161
+ if (cloud) {
162
+ cloudDeleteReminder(cloud, id).catch(() => {
163
+ });
164
+ cloudFetchReminders(cloud).then((cloudReminders) => {
165
+ for (const cr of cloudReminders) {
166
+ if (cr.text.trim().toLowerCase() === text.trim().toLowerCase()) {
167
+ cloudDeleteReminder(cloud, cr.id).catch(() => {
168
+ });
169
+ }
170
+ }
171
+ }).catch(() => {
172
+ });
173
+ }
174
+ return { id, text, createdAt: "", dueDate: null, completedAt: now };
175
+ }
176
+
177
+ export {
178
+ createReminder,
179
+ listReminders,
180
+ completeReminder
181
+ };