@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,259 @@
1
+ import {
2
+ sessionScopeFilter
3
+ } from "./chunk-4EBW3URQ.js";
4
+ import "./chunk-4KVMYS3U.js";
5
+ import "./chunk-4JERP7NT.js";
6
+ import "./chunk-4FVVJ7ME.js";
7
+ import "./chunk-BQBPNRUW.js";
8
+ import "./chunk-MVW62NIZ.js";
9
+ import "./chunk-OYNKIAVW.js";
10
+ import "./chunk-SSTLTIF3.js";
11
+ import "./chunk-DYICAAAM.js";
12
+ import "./chunk-SLFB2RY6.js";
13
+ import "./chunk-NGP6LSV2.js";
14
+ import "./chunk-H6PW4LNY.js";
15
+ import "./chunk-CVYC6DUW.js";
16
+ import "./chunk-OPU3NYOO.js";
17
+ import "./chunk-GJV3WDWM.js";
18
+ import "./chunk-MP2AFCGL.js";
19
+ import "./chunk-LCB6YCE6.js";
20
+ import "./chunk-HYZV25LY.js";
21
+ import {
22
+ getClient
23
+ } from "./chunk-XVDWHYIK.js";
24
+ import "./chunk-2I23RPSI.js";
25
+ import "./chunk-CZ47BFAT.js";
26
+ import "./chunk-5DNJPRDW.js";
27
+ import "./chunk-FXU7JOXK.js";
28
+ import "./chunk-MUMBWV57.js";
29
+ import "./chunk-CEKZ77KA.js";
30
+ import "./chunk-LYH5HE24.js";
31
+ import "./chunk-MLKGABMK.js";
32
+
33
+ // src/lib/tui-data.ts
34
+ async function loadMemoryDashboard(limit) {
35
+ const client = getClient();
36
+ const [countResult, recentResult, agentResult] = await Promise.all([
37
+ client.execute("SELECT COUNT(*) as cnt FROM memories"),
38
+ client.execute({
39
+ sql: "SELECT agent_id, tool_name, project_name, raw_text, timestamp FROM memories ORDER BY timestamp DESC LIMIT ?",
40
+ args: [limit]
41
+ }),
42
+ client.execute("SELECT agent_id, COUNT(*) as cnt FROM memories GROUP BY agent_id ORDER BY cnt DESC")
43
+ ]);
44
+ return {
45
+ total: Number(countResult.rows[0]?.cnt ?? 0),
46
+ recent: recentResult.rows.map((row) => ({
47
+ agentId: String(row.agent_id ?? "unknown"),
48
+ toolName: String(row.tool_name ?? ""),
49
+ projectName: String(row.project_name ?? ""),
50
+ rawText: String(row.raw_text ?? ""),
51
+ timestamp: String(row.timestamp ?? "")
52
+ })),
53
+ byAgent: agentResult.rows.map((row) => ({
54
+ agentId: String(row.agent_id ?? "unknown"),
55
+ count: Number(row.cnt ?? 0)
56
+ }))
57
+ };
58
+ }
59
+ async function loadTeamBadgeCounts() {
60
+ const client = getClient();
61
+ const memoryCounts = /* @__PURE__ */ new Map();
62
+ const memResult = await client.execute("SELECT agent_id, COUNT(*) as cnt FROM memories GROUP BY agent_id");
63
+ for (const row of memResult.rows) {
64
+ memoryCounts.set(String(row.agent_id), Number(row.cnt));
65
+ }
66
+ return memoryCounts;
67
+ }
68
+ async function loadTeamDetailMetrics(employeeNames) {
69
+ const client = getClient();
70
+ const projectsByEmployee = /* @__PURE__ */ new Map();
71
+ const currentTaskByEmployee = /* @__PURE__ */ new Map();
72
+ const scope = sessionScopeFilter();
73
+ for (const employeeName of employeeNames) {
74
+ const [projectResult, taskResult] = await Promise.all([
75
+ client.execute({
76
+ sql: `SELECT DISTINCT project_name,
77
+ MAX(CASE WHEN status = 'in_progress' THEN 1 WHEN status = 'open' THEN 2 ELSE 3 END) as urgency
78
+ FROM tasks
79
+ WHERE assigned_to = ? AND status IN ('open','in_progress','done')${scope.sql}
80
+ GROUP BY project_name
81
+ ORDER BY urgency ASC
82
+ LIMIT 5`,
83
+ args: [employeeName, ...scope.args]
84
+ }),
85
+ client.execute({
86
+ sql: `SELECT title FROM tasks
87
+ WHERE assigned_to = ? AND status = 'in_progress'${scope.sql}
88
+ ORDER BY updated_at DESC
89
+ LIMIT 1`,
90
+ args: [employeeName, ...scope.args]
91
+ })
92
+ ]);
93
+ const projects = projectResult.rows.map((row) => {
94
+ const urgency = Number(row.urgency);
95
+ return {
96
+ name: String(row.project_name),
97
+ status: urgency === 1 ? "active" : urgency === 2 ? "has_tasks" : "idle"
98
+ };
99
+ });
100
+ if (projects.length > 0) projectsByEmployee.set(employeeName, projects);
101
+ if (taskResult.rows.length > 0) {
102
+ currentTaskByEmployee.set(employeeName, String(taskResult.rows[0].title));
103
+ }
104
+ }
105
+ return { projectsByEmployee, currentTaskByEmployee };
106
+ }
107
+ async function loadTeamMetrics(employeeNames) {
108
+ const [memoryCounts, { projectsByEmployee, currentTaskByEmployee }] = await Promise.all([
109
+ loadTeamBadgeCounts(),
110
+ loadTeamDetailMetrics(employeeNames)
111
+ ]);
112
+ return { memoryCounts, projectsByEmployee, currentTaskByEmployee };
113
+ }
114
+ async function loadTaskList() {
115
+ const client = getClient();
116
+ const scope = sessionScopeFilter();
117
+ const result = await client.execute({
118
+ sql: `SELECT id, title, priority, assigned_to, assigned_by, status, project_name, created_at, result
119
+ FROM tasks
120
+ WHERE 1=1${scope.sql}
121
+ ORDER BY
122
+ CASE status WHEN 'in_progress' THEN 0 WHEN 'open' THEN 1 WHEN 'blocked' THEN 2 WHEN 'needs_review' THEN 3 WHEN 'done' THEN 4 ELSE 5 END,
123
+ CASE priority WHEN 'p0' THEN 0 WHEN 'p1' THEN 1 WHEN 'p2' THEN 2 ELSE 3 END,
124
+ created_at DESC`,
125
+ args: [...scope.args]
126
+ });
127
+ return result.rows.map((row) => ({
128
+ id: String(row.id ?? ""),
129
+ title: String(row.title ?? ""),
130
+ priority: String(row.priority ?? "p2").toUpperCase(),
131
+ assignedTo: String(row.assigned_to ?? ""),
132
+ assignedBy: String(row.assigned_by ?? ""),
133
+ status: String(row.status ?? "open"),
134
+ projectName: String(row.project_name ?? ""),
135
+ createdAt: String(row.created_at ?? ""),
136
+ result: String(row.result ?? "")
137
+ }));
138
+ }
139
+ async function searchWikiMemoryRows(query) {
140
+ const client = getClient();
141
+ const result = await client.execute({
142
+ sql: `SELECT id, agent_id, raw_text, timestamp, project_name
143
+ FROM memories
144
+ WHERE raw_text LIKE ? AND COALESCE(status, 'active') = 'active'
145
+ ORDER BY timestamp DESC LIMIT 20`,
146
+ args: [`%${query}%`]
147
+ });
148
+ return result.rows.map((row) => ({
149
+ id: String(row.id),
150
+ agentId: String(row.agent_id),
151
+ rawText: String(row.raw_text),
152
+ timestamp: String(row.timestamp),
153
+ projectName: String(row.project_name ?? "")
154
+ }));
155
+ }
156
+ async function loadEntityProfile(entityName) {
157
+ const client = getClient();
158
+ const { getEntityByName, getRelationships, getEntityTimeline } = await import("./graph-query-XEDHA2PQ.js");
159
+ const entity = await getEntityByName(client, entityName);
160
+ if (!entity) return null;
161
+ const [relationships, timelineRaw] = await Promise.all([
162
+ getRelationships(client, entity.id, { direction: "both" }),
163
+ getEntityTimeline(client, entity.id)
164
+ ]);
165
+ const neighbors = relationships.map((r) => {
166
+ const isOutgoing = r.sourceEntityId === entity.id;
167
+ return {
168
+ name: isOutgoing ? r.targetName : r.sourceName,
169
+ type: isOutgoing ? "target" : "source",
170
+ relType: r.type,
171
+ direction: isOutgoing ? "outgoing" : "incoming",
172
+ weight: r.weight,
173
+ confidence: r.confidence
174
+ };
175
+ });
176
+ const timeline = timelineRaw.slice(0, 20).map((t) => {
177
+ const isOutgoing = t.relationship.sourceEntityId === entity.id;
178
+ return {
179
+ timestamp: t.timestamp,
180
+ relType: t.relationship.type,
181
+ partnerName: isOutgoing ? t.relationship.targetName : t.relationship.sourceName,
182
+ direction: isOutgoing ? "outgoing" : "incoming"
183
+ };
184
+ });
185
+ const relationshipTypes = {};
186
+ for (const r of relationships) {
187
+ relationshipTypes[r.type] = (relationshipTypes[r.type] ?? 0) + 1;
188
+ }
189
+ return {
190
+ entity,
191
+ neighbors,
192
+ timeline,
193
+ stats: {
194
+ totalRelationships: relationships.length,
195
+ relationshipTypes
196
+ }
197
+ };
198
+ }
199
+ async function searchEntitiesList(query, limit = 20) {
200
+ const client = getClient();
201
+ const { searchEntities } = await import("./graph-query-XEDHA2PQ.js");
202
+ const entities = await searchEntities(client, query, limit);
203
+ if (entities.length === 0) return [];
204
+ const placeholders = entities.map(() => "?").join(",");
205
+ const ids = entities.map((e) => e.id);
206
+ const countResult = await client.execute({
207
+ sql: `SELECT source_entity_id as eid, COUNT(*) as cnt FROM relationships WHERE source_entity_id IN (${placeholders}) AND valid_until IS NULL GROUP BY source_entity_id
208
+ UNION ALL
209
+ SELECT target_entity_id as eid, COUNT(*) as cnt FROM relationships WHERE target_entity_id IN (${placeholders}) AND valid_until IS NULL GROUP BY target_entity_id`,
210
+ args: [...ids, ...ids]
211
+ });
212
+ const countMap = /* @__PURE__ */ new Map();
213
+ for (const row of countResult.rows) {
214
+ const eid = String(row.eid);
215
+ countMap.set(eid, (countMap.get(eid) ?? 0) + Number(row.cnt));
216
+ }
217
+ return entities.map((e) => ({
218
+ id: e.id,
219
+ name: e.name,
220
+ type: e.type,
221
+ lastSeen: e.lastSeen,
222
+ relationshipCount: countMap.get(e.id) ?? 0
223
+ }));
224
+ }
225
+ async function loadHotEntities(limit = 15) {
226
+ const client = getClient();
227
+ const { getHotEntities } = await import("./graph-query-XEDHA2PQ.js");
228
+ const since = new Date(Date.now() - 7 * 24 * 60 * 60 * 1e3);
229
+ const hot = await getHotEntities(client, since, limit);
230
+ return hot.map((h) => ({
231
+ id: h.entity.id,
232
+ name: h.entity.name,
233
+ type: h.entity.type,
234
+ lastSeen: h.entity.lastSeen,
235
+ relationshipCount: h.newRelationships
236
+ }));
237
+ }
238
+ async function loadGraphOverview() {
239
+ const client = getClient();
240
+ const { getGraphStats } = await import("./graph-query-XEDHA2PQ.js");
241
+ const stats = await getGraphStats(client);
242
+ return {
243
+ totalEntities: stats.entities,
244
+ totalRelationships: stats.relationships,
245
+ entityTypes: stats.types
246
+ };
247
+ }
248
+ export {
249
+ loadEntityProfile,
250
+ loadGraphOverview,
251
+ loadHotEntities,
252
+ loadMemoryDashboard,
253
+ loadTaskList,
254
+ loadTeamBadgeCounts,
255
+ loadTeamDetailMetrics,
256
+ loadTeamMetrics,
257
+ searchEntitiesList,
258
+ searchWikiMemoryRows
259
+ };
@@ -0,0 +1,259 @@
1
+ import {
2
+ sessionScopeFilter
3
+ } from "./chunk-5XOAYMSU.js";
4
+ import "./chunk-Z5P7AUFM.js";
5
+ import "./chunk-4JERP7NT.js";
6
+ import "./chunk-4FVVJ7ME.js";
7
+ import "./chunk-WO2SPDUE.js";
8
+ import "./chunk-MVW62NIZ.js";
9
+ import "./chunk-OYNKIAVW.js";
10
+ import "./chunk-SSTLTIF3.js";
11
+ import "./chunk-JMR2X5FJ.js";
12
+ import "./chunk-PMVOUPTY.js";
13
+ import "./chunk-NGP6LSV2.js";
14
+ import "./chunk-MUDH7ZLR.js";
15
+ import "./chunk-CVYC6DUW.js";
16
+ import "./chunk-OPU3NYOO.js";
17
+ import "./chunk-GJV3WDWM.js";
18
+ import "./chunk-MP2AFCGL.js";
19
+ import "./chunk-VWZZF3YB.js";
20
+ import "./chunk-HYZV25LY.js";
21
+ import {
22
+ getClient
23
+ } from "./chunk-WLDBPKRL.js";
24
+ import "./chunk-2I23RPSI.js";
25
+ import "./chunk-R5LCP56X.js";
26
+ import "./chunk-5DNJPRDW.js";
27
+ import "./chunk-FXU7JOXK.js";
28
+ import "./chunk-YMKUXZIG.js";
29
+ import "./chunk-T3B5RK4H.js";
30
+ import "./chunk-LYH5HE24.js";
31
+ import "./chunk-MLKGABMK.js";
32
+
33
+ // src/lib/tui-data.ts
34
+ async function loadMemoryDashboard(limit) {
35
+ const client = getClient();
36
+ const [countResult, recentResult, agentResult] = await Promise.all([
37
+ client.execute("SELECT COUNT(*) as cnt FROM memories"),
38
+ client.execute({
39
+ sql: "SELECT agent_id, tool_name, project_name, raw_text, timestamp FROM memories ORDER BY timestamp DESC LIMIT ?",
40
+ args: [limit]
41
+ }),
42
+ client.execute("SELECT agent_id, COUNT(*) as cnt FROM memories GROUP BY agent_id ORDER BY cnt DESC")
43
+ ]);
44
+ return {
45
+ total: Number(countResult.rows[0]?.cnt ?? 0),
46
+ recent: recentResult.rows.map((row) => ({
47
+ agentId: String(row.agent_id ?? "unknown"),
48
+ toolName: String(row.tool_name ?? ""),
49
+ projectName: String(row.project_name ?? ""),
50
+ rawText: String(row.raw_text ?? ""),
51
+ timestamp: String(row.timestamp ?? "")
52
+ })),
53
+ byAgent: agentResult.rows.map((row) => ({
54
+ agentId: String(row.agent_id ?? "unknown"),
55
+ count: Number(row.cnt ?? 0)
56
+ }))
57
+ };
58
+ }
59
+ async function loadTeamBadgeCounts() {
60
+ const client = getClient();
61
+ const memoryCounts = /* @__PURE__ */ new Map();
62
+ const memResult = await client.execute("SELECT agent_id, COUNT(*) as cnt FROM memories GROUP BY agent_id");
63
+ for (const row of memResult.rows) {
64
+ memoryCounts.set(String(row.agent_id), Number(row.cnt));
65
+ }
66
+ return memoryCounts;
67
+ }
68
+ async function loadTeamDetailMetrics(employeeNames) {
69
+ const client = getClient();
70
+ const projectsByEmployee = /* @__PURE__ */ new Map();
71
+ const currentTaskByEmployee = /* @__PURE__ */ new Map();
72
+ const scope = sessionScopeFilter();
73
+ for (const employeeName of employeeNames) {
74
+ const [projectResult, taskResult] = await Promise.all([
75
+ client.execute({
76
+ sql: `SELECT DISTINCT project_name,
77
+ MAX(CASE WHEN status = 'in_progress' THEN 1 WHEN status = 'open' THEN 2 ELSE 3 END) as urgency
78
+ FROM tasks
79
+ WHERE assigned_to = ? AND status IN ('open','in_progress','done')${scope.sql}
80
+ GROUP BY project_name
81
+ ORDER BY urgency ASC
82
+ LIMIT 5`,
83
+ args: [employeeName, ...scope.args]
84
+ }),
85
+ client.execute({
86
+ sql: `SELECT title FROM tasks
87
+ WHERE assigned_to = ? AND status = 'in_progress'${scope.sql}
88
+ ORDER BY updated_at DESC
89
+ LIMIT 1`,
90
+ args: [employeeName, ...scope.args]
91
+ })
92
+ ]);
93
+ const projects = projectResult.rows.map((row) => {
94
+ const urgency = Number(row.urgency);
95
+ return {
96
+ name: String(row.project_name),
97
+ status: urgency === 1 ? "active" : urgency === 2 ? "has_tasks" : "idle"
98
+ };
99
+ });
100
+ if (projects.length > 0) projectsByEmployee.set(employeeName, projects);
101
+ if (taskResult.rows.length > 0) {
102
+ currentTaskByEmployee.set(employeeName, String(taskResult.rows[0].title));
103
+ }
104
+ }
105
+ return { projectsByEmployee, currentTaskByEmployee };
106
+ }
107
+ async function loadTeamMetrics(employeeNames) {
108
+ const [memoryCounts, { projectsByEmployee, currentTaskByEmployee }] = await Promise.all([
109
+ loadTeamBadgeCounts(),
110
+ loadTeamDetailMetrics(employeeNames)
111
+ ]);
112
+ return { memoryCounts, projectsByEmployee, currentTaskByEmployee };
113
+ }
114
+ async function loadTaskList() {
115
+ const client = getClient();
116
+ const scope = sessionScopeFilter();
117
+ const result = await client.execute({
118
+ sql: `SELECT id, title, priority, assigned_to, assigned_by, status, project_name, created_at, result
119
+ FROM tasks
120
+ WHERE 1=1${scope.sql}
121
+ ORDER BY
122
+ CASE status WHEN 'in_progress' THEN 0 WHEN 'open' THEN 1 WHEN 'blocked' THEN 2 WHEN 'needs_review' THEN 3 WHEN 'done' THEN 4 ELSE 5 END,
123
+ CASE priority WHEN 'p0' THEN 0 WHEN 'p1' THEN 1 WHEN 'p2' THEN 2 ELSE 3 END,
124
+ created_at DESC`,
125
+ args: [...scope.args]
126
+ });
127
+ return result.rows.map((row) => ({
128
+ id: String(row.id ?? ""),
129
+ title: String(row.title ?? ""),
130
+ priority: String(row.priority ?? "p2").toUpperCase(),
131
+ assignedTo: String(row.assigned_to ?? ""),
132
+ assignedBy: String(row.assigned_by ?? ""),
133
+ status: String(row.status ?? "open"),
134
+ projectName: String(row.project_name ?? ""),
135
+ createdAt: String(row.created_at ?? ""),
136
+ result: String(row.result ?? "")
137
+ }));
138
+ }
139
+ async function searchWikiMemoryRows(query) {
140
+ const client = getClient();
141
+ const result = await client.execute({
142
+ sql: `SELECT id, agent_id, raw_text, timestamp, project_name
143
+ FROM memories
144
+ WHERE raw_text LIKE ? AND COALESCE(status, 'active') = 'active'
145
+ ORDER BY timestamp DESC LIMIT 20`,
146
+ args: [`%${query}%`]
147
+ });
148
+ return result.rows.map((row) => ({
149
+ id: String(row.id),
150
+ agentId: String(row.agent_id),
151
+ rawText: String(row.raw_text),
152
+ timestamp: String(row.timestamp),
153
+ projectName: String(row.project_name ?? "")
154
+ }));
155
+ }
156
+ async function loadEntityProfile(entityName) {
157
+ const client = getClient();
158
+ const { getEntityByName, getRelationships, getEntityTimeline } = await import("./graph-query-XEDHA2PQ.js");
159
+ const entity = await getEntityByName(client, entityName);
160
+ if (!entity) return null;
161
+ const [relationships, timelineRaw] = await Promise.all([
162
+ getRelationships(client, entity.id, { direction: "both" }),
163
+ getEntityTimeline(client, entity.id)
164
+ ]);
165
+ const neighbors = relationships.map((r) => {
166
+ const isOutgoing = r.sourceEntityId === entity.id;
167
+ return {
168
+ name: isOutgoing ? r.targetName : r.sourceName,
169
+ type: isOutgoing ? "target" : "source",
170
+ relType: r.type,
171
+ direction: isOutgoing ? "outgoing" : "incoming",
172
+ weight: r.weight,
173
+ confidence: r.confidence
174
+ };
175
+ });
176
+ const timeline = timelineRaw.slice(0, 20).map((t) => {
177
+ const isOutgoing = t.relationship.sourceEntityId === entity.id;
178
+ return {
179
+ timestamp: t.timestamp,
180
+ relType: t.relationship.type,
181
+ partnerName: isOutgoing ? t.relationship.targetName : t.relationship.sourceName,
182
+ direction: isOutgoing ? "outgoing" : "incoming"
183
+ };
184
+ });
185
+ const relationshipTypes = {};
186
+ for (const r of relationships) {
187
+ relationshipTypes[r.type] = (relationshipTypes[r.type] ?? 0) + 1;
188
+ }
189
+ return {
190
+ entity,
191
+ neighbors,
192
+ timeline,
193
+ stats: {
194
+ totalRelationships: relationships.length,
195
+ relationshipTypes
196
+ }
197
+ };
198
+ }
199
+ async function searchEntitiesList(query, limit = 20) {
200
+ const client = getClient();
201
+ const { searchEntities } = await import("./graph-query-XEDHA2PQ.js");
202
+ const entities = await searchEntities(client, query, limit);
203
+ if (entities.length === 0) return [];
204
+ const placeholders = entities.map(() => "?").join(",");
205
+ const ids = entities.map((e) => e.id);
206
+ const countResult = await client.execute({
207
+ sql: `SELECT source_entity_id as eid, COUNT(*) as cnt FROM relationships WHERE source_entity_id IN (${placeholders}) AND valid_until IS NULL GROUP BY source_entity_id
208
+ UNION ALL
209
+ SELECT target_entity_id as eid, COUNT(*) as cnt FROM relationships WHERE target_entity_id IN (${placeholders}) AND valid_until IS NULL GROUP BY target_entity_id`,
210
+ args: [...ids, ...ids]
211
+ });
212
+ const countMap = /* @__PURE__ */ new Map();
213
+ for (const row of countResult.rows) {
214
+ const eid = String(row.eid);
215
+ countMap.set(eid, (countMap.get(eid) ?? 0) + Number(row.cnt));
216
+ }
217
+ return entities.map((e) => ({
218
+ id: e.id,
219
+ name: e.name,
220
+ type: e.type,
221
+ lastSeen: e.lastSeen,
222
+ relationshipCount: countMap.get(e.id) ?? 0
223
+ }));
224
+ }
225
+ async function loadHotEntities(limit = 15) {
226
+ const client = getClient();
227
+ const { getHotEntities } = await import("./graph-query-XEDHA2PQ.js");
228
+ const since = new Date(Date.now() - 7 * 24 * 60 * 60 * 1e3);
229
+ const hot = await getHotEntities(client, since, limit);
230
+ return hot.map((h) => ({
231
+ id: h.entity.id,
232
+ name: h.entity.name,
233
+ type: h.entity.type,
234
+ lastSeen: h.entity.lastSeen,
235
+ relationshipCount: h.newRelationships
236
+ }));
237
+ }
238
+ async function loadGraphOverview() {
239
+ const client = getClient();
240
+ const { getGraphStats } = await import("./graph-query-XEDHA2PQ.js");
241
+ const stats = await getGraphStats(client);
242
+ return {
243
+ totalEntities: stats.entities,
244
+ totalRelationships: stats.relationships,
245
+ entityTypes: stats.types
246
+ };
247
+ }
248
+ export {
249
+ loadEntityProfile,
250
+ loadGraphOverview,
251
+ loadHotEntities,
252
+ loadMemoryDashboard,
253
+ loadTaskList,
254
+ loadTeamBadgeCounts,
255
+ loadTeamDetailMetrics,
256
+ loadTeamMetrics,
257
+ searchEntitiesList,
258
+ searchWikiMemoryRows
259
+ };
@@ -0,0 +1,114 @@
1
+ import "./chunk-MLKGABMK.js";
2
+
3
+ // src/lib/webhook-pipe.ts
4
+ import { createHmac, timingSafeEqual } from "crypto";
5
+ var BUILTIN_SERVICE_DEFAULTS = {
6
+ fireflies: {
7
+ text_field: "transcript.text",
8
+ source: "fireflies",
9
+ source_id_field: "transcript.id",
10
+ event_type_field: "event_type",
11
+ hmac_header: "x-fireflies-signature",
12
+ hmac_secret_env: "FIREFLIES_HMAC_SECRET"
13
+ },
14
+ github: {
15
+ text_field: "action",
16
+ source: "github",
17
+ source_id_field: "repository.full_name",
18
+ event_type_field: "action",
19
+ hmac_header: "x-hub-signature-256",
20
+ hmac_secret_env: "GITHUB_WEBHOOK_SECRET",
21
+ hmac_algorithm: "sha256",
22
+ hmac_prefix: "sha256="
23
+ },
24
+ stripe: {
25
+ text_field: "type",
26
+ source: "stripe",
27
+ source_id_field: "id",
28
+ event_type_field: "type",
29
+ hmac_header: "stripe-signature",
30
+ hmac_secret_env: "STRIPE_WEBHOOK_SECRET"
31
+ },
32
+ otter: {
33
+ text_field: "data.transcript",
34
+ source: "otter",
35
+ source_id_field: "data.id",
36
+ event_type_field: "event"
37
+ },
38
+ granola: {
39
+ text_field: "content",
40
+ source: "granola",
41
+ source_id_field: "id",
42
+ event_type_field: "type"
43
+ }
44
+ };
45
+ function resolvePath(obj, dotPath) {
46
+ let current = obj;
47
+ for (const segment of dotPath.split(".")) {
48
+ if (current == null || typeof current !== "object") return void 0;
49
+ current = current[segment];
50
+ }
51
+ return current;
52
+ }
53
+ function verifyHmac(rawBody, headers, config) {
54
+ if (!config.hmac_header || !config.hmac_secret_env) return false;
55
+ const secret = process.env[config.hmac_secret_env];
56
+ if (!secret) {
57
+ process.stderr.write(
58
+ `[webhook-pipe] WARN: HMAC header "${config.hmac_header}" configured but ${config.hmac_secret_env} not set \u2014 rejecting webhook
59
+ `
60
+ );
61
+ return false;
62
+ }
63
+ const headerValue = headers[config.hmac_header.toLowerCase()];
64
+ const signature = Array.isArray(headerValue) ? headerValue[0] : headerValue;
65
+ if (!signature) return false;
66
+ const algorithm = config.hmac_algorithm ?? "sha256";
67
+ const computed = createHmac(algorithm, secret).update(typeof rawBody === "string" ? rawBody : rawBody).digest("hex");
68
+ const cleanSignature = config.hmac_prefix && signature.startsWith(config.hmac_prefix) ? signature.slice(config.hmac_prefix.length) : signature;
69
+ try {
70
+ return timingSafeEqual(Buffer.from(computed, "hex"), Buffer.from(cleanSignature, "hex"));
71
+ } catch {
72
+ return false;
73
+ }
74
+ }
75
+ async function loadWebhookConfig() {
76
+ try {
77
+ const { loadConfig } = await import("./lib/config.js");
78
+ const config = await loadConfig();
79
+ const webhooks = config.webhooks;
80
+ if (webhooks && typeof webhooks === "object") {
81
+ return { ...BUILTIN_SERVICE_DEFAULTS, ...webhooks };
82
+ }
83
+ } catch {
84
+ }
85
+ return { ...BUILTIN_SERVICE_DEFAULTS };
86
+ }
87
+ function processWebhook(serviceName, payload, serviceConfig) {
88
+ if (!payload || typeof payload !== "object") {
89
+ return { ok: false, source: serviceConfig.source, error: "Payload must be a JSON object" };
90
+ }
91
+ const text = resolvePath(payload, serviceConfig.text_field);
92
+ if (text === void 0 || text === null || text === "") {
93
+ return {
94
+ ok: false,
95
+ source: serviceConfig.source,
96
+ error: `No text found at path "${serviceConfig.text_field}"`
97
+ };
98
+ }
99
+ const sourceId = serviceConfig.source_id_field ? String(resolvePath(payload, serviceConfig.source_id_field) ?? "") : "";
100
+ const eventType = serviceConfig.event_type_field ? String(resolvePath(payload, serviceConfig.event_type_field) ?? serviceName) : serviceName;
101
+ return {
102
+ ok: true,
103
+ source: serviceConfig.source,
104
+ text: String(text),
105
+ sourceId,
106
+ eventType
107
+ };
108
+ }
109
+ export {
110
+ BUILTIN_SERVICE_DEFAULTS,
111
+ loadWebhookConfig,
112
+ processWebhook,
113
+ verifyHmac
114
+ };