@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,203 @@
1
+ import {
2
+ EXE_AI_DIR
3
+ } from "./chunk-CEKZ77KA.js";
4
+
5
+ // src/lib/mcp-transport-health.ts
6
+ import { appendFileSync, closeSync, existsSync, mkdirSync, openSync, readFileSync, readSync, statSync, writeFileSync } from "fs";
7
+ import path from "path";
8
+ import { fileURLToPath } from "url";
9
+ var MCP_HTTP_EVENTS_PATH = path.join(EXE_AI_DIR, "mcp-http-events.jsonl");
10
+ var MCP_MONITOR_DIR = path.join(EXE_AI_DIR, "monitor");
11
+ var MCP_TRANSPORT_SUMMARY_PATH = path.join(MCP_MONITOR_DIR, "mcp-transport-summary.json");
12
+ var DEFAULT_EVENT_READ_BYTES = 256 * 1024;
13
+ var DEFAULT_EVENT_MAX_BYTES = 1024 * 1024;
14
+ var EVENT_READ_BYTES = parsePositiveInt(process.env.EXE_MCP_HTTP_EVENT_READ_BYTES, DEFAULT_EVENT_READ_BYTES);
15
+ var EVENT_MAX_BYTES = parsePositiveInt(process.env.EXE_MCP_HTTP_EVENT_MAX_BYTES, DEFAULT_EVENT_MAX_BYTES);
16
+ function parsePositiveInt(value, fallback) {
17
+ if (!value) return fallback;
18
+ const parsed = Number.parseInt(value, 10);
19
+ return Number.isFinite(parsed) && parsed > 0 ? parsed : fallback;
20
+ }
21
+ function readTailText(filePath, maxBytes) {
22
+ const stats = statSync(filePath);
23
+ if (stats.size <= maxBytes) return readFileSync(filePath, "utf8");
24
+ const fd = openSync(filePath, "r");
25
+ try {
26
+ const buffer = Buffer.allocUnsafe(maxBytes);
27
+ readSync(fd, buffer, 0, maxBytes, stats.size - maxBytes);
28
+ const text = buffer.toString("utf8");
29
+ const firstNewline = text.indexOf("\n");
30
+ return firstNewline >= 0 ? text.slice(firstNewline + 1) : text;
31
+ } finally {
32
+ closeSync(fd);
33
+ }
34
+ }
35
+ function rotateMcpHttpEventLogIfNeeded() {
36
+ if (!existsSync(MCP_HTTP_EVENTS_PATH)) return;
37
+ const stats = statSync(MCP_HTTP_EVENTS_PATH);
38
+ if (stats.size <= EVENT_MAX_BYTES) return;
39
+ const keepBytes = Math.min(EVENT_READ_BYTES, EVENT_MAX_BYTES);
40
+ const tail = readTailText(MCP_HTTP_EVENTS_PATH, keepBytes);
41
+ writeFileSync(MCP_HTTP_EVENTS_PATH, tail, "utf8");
42
+ }
43
+ var MCP_SESSION_OPEN_MESSAGES = /* @__PURE__ */ new Set([
44
+ "session_initialized",
45
+ "session_recovered"
46
+ ]);
47
+ var MCP_SESSION_CLOSE_MESSAGES = /* @__PURE__ */ new Set([
48
+ "session_closed",
49
+ "session_expired",
50
+ "duplicate_session_eviction",
51
+ "session_cap_eviction",
52
+ "session_cap_eviction_forced",
53
+ "rss_pressure_evict",
54
+ "heap_pressure_evict",
55
+ "zombie_full_cleanup",
56
+ "recovery_failed",
57
+ // When a stale session begins recovery, the old stale session ID is no longer
58
+ // active — a new recovered session ID will be emitted as session_recovered.
59
+ // Without this, the stale ID stays in the open-session tracking set, causing
60
+ // activeSessionsByRuntime to overcount by 1 per recovered session.
61
+ "session_stale_recovering"
62
+ ]);
63
+ function readPackageVersion() {
64
+ let dir = path.dirname(fileURLToPath(import.meta.url));
65
+ const { root } = path.parse(dir);
66
+ while (dir !== root) {
67
+ const pkgPath = path.join(dir, "package.json");
68
+ if (existsSync(pkgPath)) {
69
+ try {
70
+ const parsed = JSON.parse(readFileSync(pkgPath, "utf8"));
71
+ return parsed.version ?? "unknown";
72
+ } catch {
73
+ return "unknown";
74
+ }
75
+ }
76
+ dir = path.dirname(dir);
77
+ }
78
+ return "unknown";
79
+ }
80
+ function inferMcpRuntime(input) {
81
+ const text = [input.runtimeHeader, input.userAgent, input.agentId, input.clientName].filter(Boolean).join(" ").toLowerCase();
82
+ if (text.includes("codex")) return "Codex";
83
+ if (text.includes("claude")) return "Claude";
84
+ if (text.includes("opencode") || text.includes("open-code")) return "OpenCode";
85
+ return "Unknown";
86
+ }
87
+ function getMcpToolFamily(toolName) {
88
+ if (!toolName) return "unknown";
89
+ if (/task|employee|review|checkpoint|resume/i.test(toolName)) return "task";
90
+ if (/memory|consolidat|document|search_everything|get_session_context/i.test(toolName)) return "memory";
91
+ if (/config|daemon|worker|auto_wake|license|trigger|starter|orchestration|cloud_sync|backup/i.test(toolName)) return "config";
92
+ if (/message|whatsapp|conversation|gateway/i.test(toolName)) return "gateway";
93
+ if (/wiki|crm|raw_data|person|people/i.test(toolName)) return "company-data";
94
+ if (/graph|entity|relationship|trajectory/i.test(toolName)) return "graph";
95
+ if (/identity|behavior|decision|procedure/i.test(toolName)) return "cognition";
96
+ if (/ping|health/i.test(toolName)) return "health";
97
+ return "other";
98
+ }
99
+ function parseMcpHttpEventLines(raw, limit = 200) {
100
+ const lines = raw.trim().split("\n").filter(Boolean).slice(-limit);
101
+ const events = [];
102
+ for (const line of lines) {
103
+ try {
104
+ events.push(JSON.parse(line));
105
+ } catch {
106
+ }
107
+ }
108
+ return events;
109
+ }
110
+ function readMcpHttpEvents(limit = 200) {
111
+ if (!existsSync(MCP_HTTP_EVENTS_PATH)) return [];
112
+ const raw = readTailText(MCP_HTTP_EVENTS_PATH, EVENT_READ_BYTES);
113
+ return parseMcpHttpEventLines(raw, limit);
114
+ }
115
+ function summarizeMcpTransport(events = readMcpHttpEvents()) {
116
+ const lastServerStartIndex = events.map((event) => event.message).lastIndexOf("server_started");
117
+ const scopedEvents = lastServerStartIndex >= 0 ? events.slice(lastServerStartIndex) : events;
118
+ const activeSessionEvent = [...scopedEvents].reverse().find((event) => typeof event.activeSessions === "number");
119
+ const successfulToolCalls = scopedEvents.filter((event) => event.message === "tool_call_ok");
120
+ const lastSuccessfulToolCall = successfulToolCalls.at(-1) ?? null;
121
+ const summary = {
122
+ generatedAt: (/* @__PURE__ */ new Date()).toISOString(),
123
+ version: readPackageVersion(),
124
+ scope: "local",
125
+ privacy: "metadata_only",
126
+ eventLogPath: MCP_HTTP_EVENTS_PATH,
127
+ activeSessions: activeSessionEvent?.activeSessions ?? null,
128
+ sessionsCreated: scopedEvents.filter((event) => event.message && MCP_SESSION_OPEN_MESSAGES.has(event.message)).length,
129
+ sessionsClosed: scopedEvents.filter((event) => event.message && MCP_SESSION_CLOSE_MESSAGES.has(event.message)).length,
130
+ missingSessionErrors: scopedEvents.filter((event) => event.message?.includes("missing MCP session")).length,
131
+ staleSessionErrors: scopedEvents.filter((event) => event.message?.includes("stale or unknown")).length,
132
+ transportErrors: scopedEvents.filter((event) => event.level === "warn" || event.level === "error").length,
133
+ lastSuccessfulHandshake: scopedEvents.filter((event) => event.message === "session_initialized").at(-1)?.timestamp ?? null,
134
+ lastSuccessfulToolCall: lastSuccessfulToolCall?.timestamp ?? null,
135
+ lastSuccessfulToolCallByRuntime: {},
136
+ lastSuccessfulToolCallByAgent: {},
137
+ lastSuccessfulToolCallByFamily: {},
138
+ activeSessionsByRuntime: {},
139
+ recentWarnings: scopedEvents.filter((event) => event.level === "warn" || event.level === "error").slice(-10),
140
+ remediation: [
141
+ "If MCP tools fail with missing/stale session, reconnect the MCP client (/mcp or restart the runtime).",
142
+ "Do not access the database directly; MCP is the only data interface.",
143
+ "Check get_daemon_health or exe-healthcheck for daemon/MCP endpoint status before retrying work."
144
+ ]
145
+ };
146
+ const createdBySession = /* @__PURE__ */ new Map();
147
+ for (const event of scopedEvents) {
148
+ if (event.message && MCP_SESSION_OPEN_MESSAGES.has(event.message) && event.sessionId) createdBySession.set(event.sessionId, event);
149
+ if (event.message && MCP_SESSION_CLOSE_MESSAGES.has(event.message) && event.sessionId) {
150
+ createdBySession.delete(event.sessionId);
151
+ }
152
+ }
153
+ if (typeof summary.activeSessions === "number") {
154
+ while (createdBySession.size > summary.activeSessions) {
155
+ const oldestSessionId = createdBySession.keys().next().value;
156
+ if (!oldestSessionId) break;
157
+ createdBySession.delete(oldestSessionId);
158
+ }
159
+ }
160
+ for (const event of createdBySession.values()) {
161
+ const runtime = event.runtime ?? "Unknown";
162
+ summary.activeSessionsByRuntime[runtime] = (summary.activeSessionsByRuntime[runtime] ?? 0) + 1;
163
+ }
164
+ if (typeof summary.activeSessions === "number") {
165
+ const knownActiveSessions = Object.values(summary.activeSessionsByRuntime).reduce((sum, count) => sum + count, 0);
166
+ const missingActiveSessions = summary.activeSessions - knownActiveSessions;
167
+ if (missingActiveSessions > 0) {
168
+ summary.activeSessionsByRuntime.Unknown = (summary.activeSessionsByRuntime.Unknown ?? 0) + missingActiveSessions;
169
+ }
170
+ }
171
+ for (const event of successfulToolCalls) {
172
+ if (event.runtime) summary.lastSuccessfulToolCallByRuntime[event.runtime] = event.timestamp ?? "";
173
+ if (event.agentId) summary.lastSuccessfulToolCallByAgent[event.agentId] = event.timestamp ?? "";
174
+ if (event.toolFamily) summary.lastSuccessfulToolCallByFamily[event.toolFamily] = event.timestamp ?? "";
175
+ }
176
+ return summary;
177
+ }
178
+ function writeMcpTransportSummary(events) {
179
+ try {
180
+ mkdirSync(MCP_MONITOR_DIR, { recursive: true });
181
+ writeFileSync(MCP_TRANSPORT_SUMMARY_PATH, JSON.stringify(summarizeMcpTransport(events), null, 2) + "\n");
182
+ } catch {
183
+ }
184
+ }
185
+ function recordMcpHttpEvent(event) {
186
+ try {
187
+ mkdirSync(EXE_AI_DIR, { recursive: true });
188
+ const enriched = { timestamp: (/* @__PURE__ */ new Date()).toISOString(), ...event };
189
+ appendFileSync(MCP_HTTP_EVENTS_PATH, JSON.stringify(enriched) + "\n");
190
+ rotateMcpHttpEventLogIfNeeded();
191
+ writeMcpTransportSummary(readMcpHttpEvents());
192
+ } catch {
193
+ }
194
+ }
195
+
196
+ export {
197
+ inferMcpRuntime,
198
+ getMcpToolFamily,
199
+ readMcpHttpEvents,
200
+ summarizeMcpTransport,
201
+ writeMcpTransportSummary,
202
+ recordMcpHttpEvent
203
+ };
@@ -0,0 +1,89 @@
1
+ import {
2
+ getActiveAgent
3
+ } from "./chunk-YACAOZVG.js";
4
+ import {
5
+ listTasks
6
+ } from "./chunk-5XOAYMSU.js";
7
+ import {
8
+ getAgentContext
9
+ } from "./chunk-GJV3WDWM.js";
10
+ import {
11
+ isCoordinatorName
12
+ } from "./chunk-WLDBPKRL.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,271 @@
1
+ import {
2
+ vectorToSqlLiteral
3
+ } from "./chunk-YEHV3FN5.js";
4
+ import {
5
+ blobToVector
6
+ } from "./chunk-OTVEIJUQ.js";
7
+ import {
8
+ getClient
9
+ } from "./chunk-WLDBPKRL.js";
10
+
11
+ // src/lib/behaviors.ts
12
+ import crypto from "crypto";
13
+ function formatReflexContent(trigger, action) {
14
+ return `\u26A1 REFLEX: When ${trigger} \u2192 ${action}. Decide whether to act.`;
15
+ }
16
+ function isReflexBehavior(behavior) {
17
+ return behavior.domain === "reflex";
18
+ }
19
+ async function storeReflexBehavior(opts) {
20
+ const content = formatReflexContent(opts.trigger, opts.action);
21
+ return storeBehavior({
22
+ agentId: opts.agentId,
23
+ content,
24
+ domain: "reflex",
25
+ projectName: opts.projectName,
26
+ priority: "p0",
27
+ // Always injected — impossible to miss
28
+ deviceScoped: opts.deviceScoped ?? false
29
+ });
30
+ }
31
+ async function storeBehavior(opts) {
32
+ try {
33
+ const { loadEmployeesSync, baseAgentName } = await import("./lib/employees.js");
34
+ const roster = loadEmployeesSync();
35
+ if (roster.length > 0) {
36
+ const base = baseAgentName(opts.agentId, roster);
37
+ if (!roster.some((e) => e.name === opts.agentId || e.name === base)) {
38
+ process.stderr.write(
39
+ `[behaviors] WARNING: Agent "${opts.agentId}" not found in roster. Storing behavior anyway \u2014 may be orphaned.
40
+ `
41
+ );
42
+ }
43
+ }
44
+ } catch {
45
+ }
46
+ const client = getClient();
47
+ const id = crypto.randomUUID();
48
+ const now = (/* @__PURE__ */ new Date()).toISOString();
49
+ const duplicate = await client.execute({
50
+ sql: `SELECT id FROM behaviors
51
+ WHERE agent_id = ?
52
+ AND COALESCE(domain, '') = COALESCE(?, '')
53
+ AND COALESCE(project_name, '') = COALESCE(?, '')
54
+ AND active = 1
55
+ AND lower(trim(content)) = lower(trim(?))
56
+ ORDER BY updated_at DESC
57
+ LIMIT 1`,
58
+ args: [opts.agentId, opts.domain ?? null, opts.projectName ?? null, opts.content]
59
+ });
60
+ const existingId = duplicate.rows[0]?.id;
61
+ if (existingId) return String(existingId);
62
+ let vector = null;
63
+ if (!process.env.VITEST) {
64
+ try {
65
+ const { embed } = await import("./lib/embedder.js");
66
+ const vec = await embed(opts.content);
67
+ vector = new Float32Array(vec);
68
+ } catch {
69
+ }
70
+ }
71
+ let createdByDevice = null;
72
+ try {
73
+ const { loadDeviceId } = await import("./lib/license.js");
74
+ createdByDevice = loadDeviceId() ?? null;
75
+ } catch {
76
+ }
77
+ const createdByAgent = process.env.AGENT_ID ?? null;
78
+ const sourceSessionId = process.env.CLAUDE_SESSION_ID ?? process.env.SESSION_ID ?? null;
79
+ let deviceId = null;
80
+ if (opts.deviceScoped) {
81
+ try {
82
+ const { loadDeviceId } = await import("./lib/license.js");
83
+ deviceId = loadDeviceId() ?? null;
84
+ } catch {
85
+ }
86
+ }
87
+ await client.execute({
88
+ sql: `INSERT INTO behaviors (id, agent_id, project_name, domain, priority, content, active, created_at, updated_at, vector, created_by_agent, created_by_device, source_session_id, device_id)
89
+ VALUES (?, ?, ?, ?, ?, ?, 1, ?, ?, ?, ?, ?, ?, ?)`,
90
+ args: [id, opts.agentId, opts.projectName ?? null, opts.domain ?? null, opts.priority ?? "p1", opts.content, now, now, vector ? vectorToSqlLiteral(vector) : null, createdByAgent, createdByDevice, sourceSessionId, deviceId]
91
+ });
92
+ return id;
93
+ }
94
+ async function listBehaviors(agentId, projectName, limit = 30) {
95
+ const client = getClient();
96
+ let currentDeviceId = null;
97
+ try {
98
+ const { loadDeviceId } = await import("./lib/license.js");
99
+ currentDeviceId = loadDeviceId() ?? null;
100
+ } catch {
101
+ }
102
+ const result = await client.execute({
103
+ sql: `SELECT id, agent_id, project_name, domain, priority, content, active, created_at, updated_at, vector, created_by_agent, created_by_device, source_session_id, device_id
104
+ FROM behaviors
105
+ WHERE agent_id = ? AND active = 1
106
+ AND (project_name IS NULL OR project_name = ?)
107
+ AND (device_id IS NULL OR device_id = ?)
108
+ ORDER BY
109
+ CASE WHEN priority = 'p0' THEN 0
110
+ WHEN priority = 'p1' THEN 1
111
+ ELSE 2 END,
112
+ CASE
113
+ WHEN lower(coalesce(domain, '')) IN ('identity', 'title', 'role') THEN 0
114
+ WHEN lower(content) LIKE '%identity%' THEN 0
115
+ WHEN lower(content) LIKE '%title%' THEN 0
116
+ WHEN lower(content) LIKE '%who are you%' THEN 0
117
+ ELSE 1
118
+ END,
119
+ updated_at DESC
120
+ LIMIT ?`,
121
+ args: [agentId, projectName ?? "", currentDeviceId ?? "", limit]
122
+ });
123
+ return result.rows.map((r) => ({
124
+ id: String(r.id),
125
+ agent_id: String(r.agent_id),
126
+ project_name: r.project_name ? String(r.project_name) : null,
127
+ domain: r.domain ? String(r.domain) : null,
128
+ priority: String(r.priority || "p1"),
129
+ content: String(r.content),
130
+ active: Number(r.active),
131
+ created_at: String(r.created_at),
132
+ updated_at: String(r.updated_at),
133
+ vector: r.vector ? blobToVector(r.vector) : null,
134
+ created_by_agent: r.created_by_agent ? String(r.created_by_agent) : null,
135
+ created_by_device: r.created_by_device ? String(r.created_by_device) : null,
136
+ source_session_id: r.source_session_id ? String(r.source_session_id) : null,
137
+ device_id: r.device_id ? String(r.device_id) : null
138
+ }));
139
+ }
140
+ async function listBehaviorsByDomain(agentId, domain) {
141
+ const client = getClient();
142
+ const result = await client.execute({
143
+ sql: `SELECT id, agent_id, project_name, domain, priority, content, active, created_at, updated_at, vector
144
+ FROM behaviors
145
+ WHERE agent_id = ? AND domain = ? AND active = 1`,
146
+ args: [agentId, domain]
147
+ });
148
+ return result.rows.map((r) => ({
149
+ id: String(r.id),
150
+ agent_id: String(r.agent_id),
151
+ project_name: r.project_name ? String(r.project_name) : null,
152
+ domain: r.domain ? String(r.domain) : null,
153
+ priority: String(r.priority || "p1"),
154
+ content: String(r.content),
155
+ active: Number(r.active),
156
+ created_at: String(r.created_at),
157
+ updated_at: String(r.updated_at),
158
+ vector: r.vector ? blobToVector(r.vector) : null,
159
+ created_by_agent: r.created_by_agent ? String(r.created_by_agent) : null,
160
+ created_by_device: r.created_by_device ? String(r.created_by_device) : null,
161
+ source_session_id: r.source_session_id ? String(r.source_session_id) : null,
162
+ device_id: r.device_id ? String(r.device_id) : null
163
+ }));
164
+ }
165
+ async function listBehaviorsSince(agentId, sinceIso, projectName, limit = 15) {
166
+ const client = getClient();
167
+ let currentDeviceId = null;
168
+ try {
169
+ const { loadDeviceId } = await import("./lib/license.js");
170
+ currentDeviceId = loadDeviceId() ?? null;
171
+ } catch {
172
+ }
173
+ const result = await client.execute({
174
+ sql: `SELECT id, agent_id, project_name, domain, priority, content, active, created_at, updated_at, vector, created_by_agent, created_by_device, source_session_id, device_id
175
+ FROM behaviors
176
+ WHERE agent_id = ? AND active = 1
177
+ AND (project_name IS NULL OR project_name = ?)
178
+ AND (device_id IS NULL OR device_id = ?)
179
+ AND (created_at > ? OR updated_at > ?)
180
+ ORDER BY
181
+ CASE WHEN priority = 'p0' THEN 0
182
+ WHEN priority = 'p1' THEN 1
183
+ ELSE 2 END,
184
+ updated_at DESC
185
+ LIMIT ?`,
186
+ args: [agentId, projectName ?? "", currentDeviceId ?? "", sinceIso, sinceIso, limit]
187
+ });
188
+ return result.rows.map((r) => ({
189
+ id: String(r.id),
190
+ agent_id: String(r.agent_id),
191
+ project_name: r.project_name ? String(r.project_name) : null,
192
+ domain: r.domain ? String(r.domain) : null,
193
+ priority: String(r.priority || "p1"),
194
+ content: String(r.content),
195
+ active: Number(r.active),
196
+ created_at: String(r.created_at),
197
+ updated_at: String(r.updated_at),
198
+ vector: r.vector ? blobToVector(r.vector) : null,
199
+ created_by_agent: r.created_by_agent ? String(r.created_by_agent) : null,
200
+ created_by_device: r.created_by_device ? String(r.created_by_device) : null,
201
+ source_session_id: r.source_session_id ? String(r.source_session_id) : null,
202
+ device_id: r.device_id ? String(r.device_id) : null
203
+ }));
204
+ }
205
+ async function listSharedSkills(currentAgentId, projectName, limit = 30) {
206
+ const client = getClient();
207
+ let currentDeviceId = null;
208
+ try {
209
+ const { loadDeviceId } = await import("./lib/license.js");
210
+ currentDeviceId = loadDeviceId() ?? null;
211
+ } catch {
212
+ }
213
+ const result = await client.execute({
214
+ sql: `SELECT id, agent_id, project_name, domain, priority, content, active, created_at, updated_at, vector, created_by_agent, created_by_device, source_session_id, device_id
215
+ FROM behaviors
216
+ WHERE domain = 'skill' AND active = 1
217
+ AND (project_name IS NULL OR project_name = ?)
218
+ AND (device_id IS NULL OR device_id = ?)
219
+ ORDER BY
220
+ CASE WHEN agent_id = ? THEN 0 ELSE 1 END,
221
+ updated_at DESC
222
+ LIMIT ?`,
223
+ args: [projectName ?? "", currentDeviceId ?? "", currentAgentId, limit]
224
+ });
225
+ return result.rows.map((r) => ({
226
+ id: String(r.id),
227
+ agent_id: String(r.agent_id),
228
+ project_name: r.project_name ? String(r.project_name) : null,
229
+ domain: r.domain ? String(r.domain) : null,
230
+ priority: String(r.priority || "p1"),
231
+ content: String(r.content),
232
+ active: Number(r.active),
233
+ created_at: String(r.created_at),
234
+ updated_at: String(r.updated_at),
235
+ vector: r.vector ? blobToVector(r.vector) : null,
236
+ created_by_agent: r.created_by_agent ? String(r.created_by_agent) : null,
237
+ created_by_device: r.created_by_device ? String(r.created_by_device) : null,
238
+ source_session_id: r.source_session_id ? String(r.source_session_id) : null,
239
+ device_id: r.device_id ? String(r.device_id) : null,
240
+ shared: String(r.agent_id) !== currentAgentId
241
+ }));
242
+ }
243
+ async function deactivateBehavior(id) {
244
+ const client = getClient();
245
+ const result = await client.execute({
246
+ sql: `UPDATE behaviors SET active = 0, updated_at = ? WHERE id = ? AND active = 1`,
247
+ args: [(/* @__PURE__ */ new Date()).toISOString(), id]
248
+ });
249
+ return (result.rowsAffected ?? 0) > 0;
250
+ }
251
+ async function reactivateBehavior(id) {
252
+ const client = getClient();
253
+ const result = await client.execute({
254
+ sql: `UPDATE behaviors SET active = 1, updated_at = ? WHERE id = ? AND active = 0`,
255
+ args: [(/* @__PURE__ */ new Date()).toISOString(), id]
256
+ });
257
+ return (result.rowsAffected ?? 0) > 0;
258
+ }
259
+
260
+ export {
261
+ formatReflexContent,
262
+ isReflexBehavior,
263
+ storeReflexBehavior,
264
+ storeBehavior,
265
+ listBehaviors,
266
+ listBehaviorsByDomain,
267
+ listBehaviorsSince,
268
+ listSharedSkills,
269
+ deactivateBehavior,
270
+ reactivateBehavior
271
+ };