@askexenow/exe-os 0.9.227 → 0.9.229

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 (446) hide show
  1. package/dist/active-agent-GJDG4CAW.js +24 -0
  2. package/dist/active-agent-WOP3ZHLN.js +25 -0
  3. package/dist/agent-context-ZPDQOAD2.js +9 -0
  4. package/dist/agent-heartbeat-AWTVGE4C.js +60 -0
  5. package/dist/agent-loop-7UM2ENGU.js +10 -0
  6. package/dist/agentic-ontology-ASORFII6.js +25 -0
  7. package/dist/asana-JN2UF47A.js +129 -0
  8. package/dist/assets/ghostty.conf +83 -0
  9. package/dist/assets/statusline-command.sh +44 -0
  10. package/dist/assets/tmux.conf +56 -0
  11. package/dist/assets/wezterm.lua +68 -0
  12. package/dist/backfill-metadata-JRWUECUS.js +596 -0
  13. package/dist/background-jobs-VTOMOTNA.js +25 -0
  14. package/dist/bash-XA65M6T6.js +8 -0
  15. package/dist/behaviors-36T3O2DC.js +24 -0
  16. package/dist/bin/age-ontology-load.js +85 -0
  17. package/dist/bin/agentic-ontology-backfill.js +84 -0
  18. package/dist/bin/agentic-reflection-backfill.js +45 -0
  19. package/dist/bin/agentic-semantic-label.js +193 -0
  20. package/dist/bin/backfill-conversations.js +399 -0
  21. package/dist/bin/backfill-responses.js +227 -0
  22. package/dist/bin/backfill-vectors.js +149 -0
  23. package/dist/bin/bulk-sync-postgres.js +92 -0
  24. package/dist/bin/cc-doctor.js +51 -0
  25. package/dist/bin/cleanup-stale-review-tasks.js +139 -0
  26. package/dist/bin/cli.js +1076 -0
  27. package/dist/bin/customer-readiness.js +389 -0
  28. package/dist/bin/deferred-daemon-restart.js +123 -0
  29. package/dist/bin/exe-agent-config.js +87 -0
  30. package/dist/bin/exe-agent.js +190 -0
  31. package/dist/bin/exe-assign.js +93 -0
  32. package/dist/bin/exe-boot.js +1114 -0
  33. package/dist/bin/exe-call.js +127 -0
  34. package/dist/bin/exe-cloud.js +484 -0
  35. package/dist/bin/exe-dispatch.js +72 -0
  36. package/dist/bin/exe-doctor.js +48 -0
  37. package/dist/bin/exe-export-behaviors.js +48 -0
  38. package/dist/bin/exe-forget.js +204 -0
  39. package/dist/bin/exe-gateway.js +1137 -0
  40. package/dist/bin/exe-healthcheck.js +14 -0
  41. package/dist/bin/exe-heartbeat.js +233 -0
  42. package/dist/bin/exe-kill.js +126 -0
  43. package/dist/bin/exe-launch-agent.js +678 -0
  44. package/dist/bin/exe-new-employee.js +160 -0
  45. package/dist/bin/exe-pending-messages.js +60 -0
  46. package/dist/bin/exe-pending-notifications.js +107 -0
  47. package/dist/bin/exe-pending-reviews.js +81 -0
  48. package/dist/bin/exe-rename.js +219 -0
  49. package/dist/bin/exe-repo-drift.js +95 -0
  50. package/dist/bin/exe-review.js +251 -0
  51. package/dist/bin/exe-search.js +65 -0
  52. package/dist/bin/exe-session-cleanup.js +331 -0
  53. package/dist/bin/exe-settings.js +364 -0
  54. package/dist/bin/exe-start-codex.js +404 -0
  55. package/dist/bin/exe-start-opencode.js +233 -0
  56. package/dist/bin/exe-start.sh +194 -0
  57. package/dist/bin/exe-status.js +34 -0
  58. package/dist/bin/exe-support.js +17 -0
  59. package/dist/bin/exe-team.js +83 -0
  60. package/dist/bin/generate-hook-manifest.js +30 -0
  61. package/dist/bin/git-sweep.js +74 -0
  62. package/dist/bin/graph-backfill.js +78 -0
  63. package/dist/bin/graph-export.js +66 -0
  64. package/dist/bin/graph-layer-benchmark.js +113 -0
  65. package/dist/bin/import-history.js +84 -0
  66. package/dist/bin/install-launchd.js +41 -0
  67. package/dist/bin/install.js +422 -0
  68. package/dist/bin/intercom-check.js +137 -0
  69. package/dist/bin/list-providers.js +128 -0
  70. package/dist/bin/mcp-sessions.js +194 -0
  71. package/dist/bin/orchestration-metrics.js +61 -0
  72. package/dist/bin/postgres-agentic-reflection-backfill.js +123 -0
  73. package/dist/bin/postgres-agentic-semantic-backfill.js +126 -0
  74. package/dist/bin/pre-build-guard.js +98 -0
  75. package/dist/bin/pre-publish.js +224 -0
  76. package/dist/bin/registry-proxy.js +44 -0
  77. package/dist/bin/scan-tasks.js +265 -0
  78. package/dist/bin/setup.js +19 -0
  79. package/dist/bin/shard-migrate.js +162 -0
  80. package/dist/bin/stack-update.js +372 -0
  81. package/dist/bin/update.js +354 -0
  82. package/dist/bin/verify-stack.js +389 -0
  83. package/dist/bin/vps-backup.js +170 -0
  84. package/dist/bin/vps-health-gate.js +232 -0
  85. package/dist/branding-I2TDZFUH.js +97 -0
  86. package/dist/browser-sanitizer-MRSSEJZE.js +229 -0
  87. package/dist/browser-session-store-RF45DSJR.js +232 -0
  88. package/dist/capacity-monitor-HZPAFQZH.js +48 -0
  89. package/dist/catchup-brief-CDG4KD5Y.js +150 -0
  90. package/dist/chunk-26PUEPOY.js +290 -0
  91. package/dist/chunk-2VZ6SY2R.js +142 -0
  92. package/dist/chunk-36DAY227.js +297 -0
  93. package/dist/chunk-3A5BZETG.js +463 -0
  94. package/dist/chunk-3DQ3IPPO.js +50 -0
  95. package/dist/chunk-3JP3FY33.js +258 -0
  96. package/dist/chunk-3MK3R5E6.js +85 -0
  97. package/dist/chunk-46SQTBQW.js +207 -0
  98. package/dist/chunk-4JERP7NT.js +132 -0
  99. package/dist/chunk-557C2IGL.js +0 -0
  100. package/dist/chunk-5BS5ELMC.js +85 -0
  101. package/dist/chunk-5NFBE376.js +391 -0
  102. package/dist/chunk-6A7P74QV.js +53 -0
  103. package/dist/chunk-6KFICEAT.js +20 -0
  104. package/dist/chunk-6MP5NOOR.js +151 -0
  105. package/dist/chunk-6Y4B3QF6.js +19 -0
  106. package/dist/chunk-7BPKHR4O.js +171 -0
  107. package/dist/chunk-7DNX45WB.js +244 -0
  108. package/dist/chunk-7EZCYO76.js +128 -0
  109. package/dist/chunk-7NNXBDOO.js +541 -0
  110. package/dist/chunk-ADJXHBEU.js +667 -0
  111. package/dist/chunk-AHMUF6RO.js +147 -0
  112. package/dist/chunk-AJWFPKQS.js +573 -0
  113. package/dist/chunk-AVE2B4DQ.js +140 -0
  114. package/dist/chunk-AZSCW64F.js +190 -0
  115. package/dist/chunk-BZAQ4UG7.js +614 -0
  116. package/dist/chunk-CHCA3ZM2.js +167 -0
  117. package/dist/chunk-CHT3THVG.js +240 -0
  118. package/dist/chunk-CLGB3FGL.js +48 -0
  119. package/dist/chunk-CQDSTBKT.js +1919 -0
  120. package/dist/chunk-CTFKTUYN.js +627 -0
  121. package/dist/chunk-CVYC6DUW.js +78 -0
  122. package/dist/chunk-CX6GL3ZJ.js +274 -0
  123. package/dist/chunk-D4IVTUNN.js +377 -0
  124. package/dist/chunk-DGOGCPYU.js +390 -0
  125. package/dist/chunk-DKRTWILB.js +81 -0
  126. package/dist/chunk-DLXTKVBO.js +183 -0
  127. package/dist/chunk-E6ORBQHP.js +225 -0
  128. package/dist/chunk-ECGTESAP.js +236 -0
  129. package/dist/chunk-ECQBG62Y.js +363 -0
  130. package/dist/chunk-ECSNSHZ7.js +431 -0
  131. package/dist/chunk-EEAKFEEA.js +221 -0
  132. package/dist/chunk-EGWPJQRQ.js +159 -0
  133. package/dist/chunk-EHKIJPVX.js +30 -0
  134. package/dist/chunk-EIT6J37V.js +119 -0
  135. package/dist/chunk-EQSQ4HBW.js +9 -0
  136. package/dist/chunk-ETSREHYC.js +55 -0
  137. package/dist/chunk-F2GUJW5O.js +1090 -0
  138. package/dist/chunk-F7LU65PQ.js +33 -0
  139. package/dist/chunk-FF62UWIJ.js +90 -0
  140. package/dist/chunk-FIPU4BDF.js +123 -0
  141. package/dist/chunk-FLSASUV3.js +177 -0
  142. package/dist/chunk-FWFFZGSC.js +94 -0
  143. package/dist/chunk-FXU7JOXK.js +6 -0
  144. package/dist/chunk-G4LLKD4Z.js +147 -0
  145. package/dist/chunk-GFCQJZTO.js +1051 -0
  146. package/dist/chunk-GGV3PFUW.js +41 -0
  147. package/dist/chunk-GJV3WDWM.js +14 -0
  148. package/dist/chunk-GKM7RYN3.js +1020 -0
  149. package/dist/chunk-GNHN5HRQ.js +40 -0
  150. package/dist/chunk-GP6G6EQI.js +632 -0
  151. package/dist/chunk-GUMRIUI5.js +63 -0
  152. package/dist/chunk-GVP5U4WL.js +113 -0
  153. package/dist/chunk-HF25XPZE.js +83 -0
  154. package/dist/chunk-HFJNYSTQ.js +1088 -0
  155. package/dist/chunk-HO5SBL4B.js +97 -0
  156. package/dist/chunk-HOKOOBDL.js +52 -0
  157. package/dist/chunk-HQMEOIUJ.js +69 -0
  158. package/dist/chunk-HTCBLSIB.js +813 -0
  159. package/dist/chunk-HYZV25LY.js +34 -0
  160. package/dist/chunk-I2CDSGQW.js +280 -0
  161. package/dist/chunk-I7AW4237.js +251 -0
  162. package/dist/chunk-IKTMX6N7.js +495 -0
  163. package/dist/chunk-IQT43SDJ.js +357 -0
  164. package/dist/chunk-IW53DAYO.js +210 -0
  165. package/dist/chunk-JBKA7F5V.js +2017 -0
  166. package/dist/chunk-JJNXFW7M.js +330 -0
  167. package/dist/chunk-JKGAJAM7.js +214 -0
  168. package/dist/chunk-JQ6TLNIV.js +133 -0
  169. package/dist/chunk-JSH5MAMM.js +284 -0
  170. package/dist/chunk-KCUYRZSX.js +72 -0
  171. package/dist/chunk-KH5Y6RR4.js +360 -0
  172. package/dist/chunk-L24HYX62.js +498 -0
  173. package/dist/chunk-L3TB7CC3.js +170 -0
  174. package/dist/chunk-LHOIY5LQ.js +58 -0
  175. package/dist/chunk-LWVZLTMD.js +412 -0
  176. package/dist/chunk-LYH5HE24.js +73 -0
  177. package/dist/chunk-M37HYGAG.js +346 -0
  178. package/dist/chunk-MJXEOKIW.js +54 -0
  179. package/dist/chunk-MKVFPQH2.js +1051 -0
  180. package/dist/chunk-MLXJ5EZG.js +90 -0
  181. package/dist/chunk-MP2AFCGL.js +53 -0
  182. package/dist/chunk-MSCB4ACU.js +356 -0
  183. package/dist/chunk-MVW62NIZ.js +20 -0
  184. package/dist/chunk-MZIGUUDQ.js +42 -0
  185. package/dist/chunk-N5RRQOAC.js +134 -0
  186. package/dist/chunk-NFB4N53K.js +159 -0
  187. package/dist/chunk-NGP6LSV2.js +25 -0
  188. package/dist/chunk-NGVOA6ZQ.js +84 -0
  189. package/dist/chunk-NRFVWJHP.js +575 -0
  190. package/dist/chunk-NUVDSQNY.js +1345 -0
  191. package/dist/chunk-O377P7GM.js +100 -0
  192. package/dist/chunk-OE6SYHTC.js +157 -0
  193. package/dist/chunk-OHPRXEUA.js +75 -0
  194. package/dist/chunk-OI6MVDSY.js +33 -0
  195. package/dist/chunk-ONKIWA3R.js +249 -0
  196. package/dist/chunk-OPU3NYOO.js +55 -0
  197. package/dist/chunk-ORCCI2VV.js +140 -0
  198. package/dist/chunk-OSMMWGJ2.js +204 -0
  199. package/dist/chunk-OYNKIAVW.js +181 -0
  200. package/dist/chunk-PRKVT4KN.js +90 -0
  201. package/dist/chunk-PW2YH2ZR.js +403 -0
  202. package/dist/chunk-PWMMIGVQ.js +332 -0
  203. package/dist/chunk-Q3V7K4ME.js +149 -0
  204. package/dist/chunk-Q5GUJUDW.js +348 -0
  205. package/dist/chunk-Q7RGLXQO.js +574 -0
  206. package/dist/chunk-Q7XA3SQ4.js +13097 -0
  207. package/dist/chunk-QGGH7LOU.js +93 -0
  208. package/dist/chunk-QHIGMP2M.js +237 -0
  209. package/dist/chunk-QI4IXJN7.js +132 -0
  210. package/dist/chunk-R2E4TV5V.js +56 -0
  211. package/dist/chunk-R4WMF32C.js +81 -0
  212. package/dist/chunk-R5U7XKVJ.js +16 -0
  213. package/dist/chunk-RJT7H2KR.js +349 -0
  214. package/dist/chunk-RMPAMMYW.js +70 -0
  215. package/dist/chunk-RTXGUKY3.js +731 -0
  216. package/dist/chunk-SH45SJQW.js +0 -0
  217. package/dist/chunk-SUNYJ6YE.js +204 -0
  218. package/dist/chunk-SVXDCELZ.js +163 -0
  219. package/dist/chunk-TMEE7AT7.js +72 -0
  220. package/dist/chunk-TNTFEWU5.js +361 -0
  221. package/dist/chunk-TOQZO2XX.js +76 -0
  222. package/dist/chunk-UBMGUX6T.js +3753 -0
  223. package/dist/chunk-UJOSFVWG.js +3511 -0
  224. package/dist/chunk-UPSZ2VKV.js +197 -0
  225. package/dist/chunk-UV4ZHXUP.js +38 -0
  226. package/dist/chunk-UWISNP4U.js +1073 -0
  227. package/dist/chunk-V3QAAU2U.js +129 -0
  228. package/dist/chunk-V4TZI6EO.js +60 -0
  229. package/dist/chunk-W6TC6A73.js +77 -0
  230. package/dist/chunk-WA67SFFZ.js +227 -0
  231. package/dist/chunk-WWPX2LLP.js +262 -0
  232. package/dist/chunk-WZ2RVKRO.js +121 -0
  233. package/dist/chunk-X2Z5GT3V.js +118 -0
  234. package/dist/chunk-X3AVWFWW.js +294 -0
  235. package/dist/chunk-XEKO37NM.js +43 -0
  236. package/dist/chunk-YADYM2DE.js +42 -0
  237. package/dist/chunk-YCTCKUZE.js +128 -0
  238. package/dist/chunk-YGAAZN3E.js +47 -0
  239. package/dist/chunk-YKIPAQZG.js +333 -0
  240. package/dist/chunk-YSU7JB7H.js +0 -0
  241. package/dist/chunk-YZFZDJWZ.js +107 -0
  242. package/dist/chunk-YZKJLGWL.js +169 -0
  243. package/dist/chunk-Z3TT2SVJ.js +135 -0
  244. package/dist/chunk-Z3ZCLTP7.js +382 -0
  245. package/dist/chunk-ZVSG2KKG.js +106 -0
  246. package/dist/co-activation-AJZTQHI3.js +71 -0
  247. package/dist/co-occurrence-FGEJIMMV.js +73 -0
  248. package/dist/code-context-index-KHUYATRB.js +29 -0
  249. package/dist/content-extractor-CUJOBFBU.js +9 -0
  250. package/dist/conversation-entity-extractor-TW4W57K4.js +114 -0
  251. package/dist/conversation-wiki-populator-GNFRTS7X.js +105 -0
  252. package/dist/core-memory-R7QBLN4C.js +110 -0
  253. package/dist/crdt-sync-K25AKQAD.js +33 -0
  254. package/dist/crm-bridge-NG5WJMGF.js +19 -0
  255. package/dist/crm-webhook-3ODT32F7.js +10 -0
  256. package/dist/cto-delegation-gate-4XDMTK6H.js +205 -0
  257. package/dist/daemon-auth-WFQMMNSD.js +13 -0
  258. package/dist/daemon-orchestration-5I7RLXCP.js +133 -0
  259. package/dist/daemon-protocol-4FUHT5NH.js +17 -0
  260. package/dist/db-backup-MSQKO6M5.js +25 -0
  261. package/dist/devtools-J4QYYO7U.js +8 -0
  262. package/dist/discord-7UHIZNJ3.js +7 -0
  263. package/dist/dispatch-ack-RMVFHO4I.js +13 -0
  264. package/dist/dreaming-UL7T5ZXA.js +12 -0
  265. package/dist/email-T6PQUUY6.js +137 -0
  266. package/dist/entity-boost-7MB2IYAE.js +332 -0
  267. package/dist/exe-drift-2KHRPBUK.js +67 -0
  268. package/dist/exe-export-UZN6EFOR.js +72 -0
  269. package/dist/exe-import-OSM3U36A.js +75 -0
  270. package/dist/exe-key-OG35WPBA.js +573 -0
  271. package/dist/exe-org-JRBBON5H.js +73 -0
  272. package/dist/exe-snapshot-7TQIN7XI.js +145 -0
  273. package/dist/factory-UQSRMKJW.js +67 -0
  274. package/dist/fast-db-init-4VXDSFUY.js +7 -0
  275. package/dist/file-edit-YORRFENG.js +8 -0
  276. package/dist/file-read-RMQFDE5L.js +8 -0
  277. package/dist/file-write-VO4MQW5Y.js +8 -0
  278. package/dist/founder-context-3N6BMG7B.js +96 -0
  279. package/dist/gateway/index.js +148 -0
  280. package/dist/gateway-client-V7NH35Q2.js +11 -0
  281. package/dist/git-staleness-JW57ZGEJ.js +109 -0
  282. package/dist/git-task-sweep-HYAPIM44.js +39 -0
  283. package/dist/glob-2LXRC3F5.js +7 -0
  284. package/dist/global-procedures-NY3W7L5Q.js +19 -0
  285. package/dist/graph-auto-extract-5GZ34NXS.js +161 -0
  286. package/dist/graph-query-YZ4RZEIL.js +26 -0
  287. package/dist/graph-rag-S5SBJW5J.js +29 -0
  288. package/dist/grep-OY7KCRLQ.js +7 -0
  289. package/dist/hook-integrity-OKSYTGVP.js +89 -0
  290. package/dist/hooks/bug-report-worker.js +179 -0
  291. package/dist/hooks/codex-stop-task-finalizer.js +258 -0
  292. package/dist/hooks/commit-complete.js +162 -0
  293. package/dist/hooks/error-recall.js +129 -0
  294. package/dist/hooks/exe-heartbeat-hook.js +78 -0
  295. package/dist/hooks/ingest-worker.js +51 -0
  296. package/dist/hooks/ingest.js +491 -0
  297. package/dist/hooks/instructions-loaded.js +119 -0
  298. package/dist/hooks/manifest.json +25 -0
  299. package/dist/hooks/notification.js +67 -0
  300. package/dist/hooks/post-compact.js +138 -0
  301. package/dist/hooks/post-tool-combined.js +152 -0
  302. package/dist/hooks/pre-compact.js +159 -0
  303. package/dist/hooks/pre-tool-use.js +512 -0
  304. package/dist/hooks/prompt-submit.js +699 -0
  305. package/dist/hooks/session-end.js +482 -0
  306. package/dist/hooks/session-start.js +362 -0
  307. package/dist/hooks/stop.js +332 -0
  308. package/dist/hooks/subagent-stop.js +85 -0
  309. package/dist/hooks/summary-worker.js +298 -0
  310. package/dist/hooks-RPTZV5KX.js +9 -0
  311. package/dist/imessage-CE5USLTI.js +7 -0
  312. package/dist/index.js +60 -0
  313. package/dist/installer-GMIVB2JS.js +341 -0
  314. package/dist/installer-OBYQ6O3C.js +295 -0
  315. package/dist/installer-UAMA6ZVH.js +37 -0
  316. package/dist/intercom-queue-USIXVVJQ.js +17 -0
  317. package/dist/key-backup-status-TVFMMWTT.js +39 -0
  318. package/dist/keyword-extractor-OGQRRVTB.js +11 -0
  319. package/dist/lib/agent-config.js +30 -0
  320. package/dist/lib/cloud-sync.js +103 -0
  321. package/dist/lib/cloudflare-dns.js +13 -0
  322. package/dist/lib/config.js +32 -0
  323. package/dist/lib/consolidation.js +38 -0
  324. package/dist/lib/crypto.js +13 -0
  325. package/dist/lib/database.js +31 -0
  326. package/dist/lib/db-daemon-client.js +141 -0
  327. package/dist/lib/db.js +31 -0
  328. package/dist/lib/device-registry.js +70 -0
  329. package/dist/lib/embed-worker.js +165 -0
  330. package/dist/lib/embedder.js +19 -0
  331. package/dist/lib/employee-templates.js +34 -0
  332. package/dist/lib/employees.js +63 -0
  333. package/dist/lib/error-detector.js +16 -0
  334. package/dist/lib/exe-daemon-client.js +25 -0
  335. package/dist/lib/exe-daemon.js +4454 -0
  336. package/dist/lib/file-grep.js +242 -0
  337. package/dist/lib/hybrid-search.js +28 -0
  338. package/dist/lib/identity-templates.js +650 -0
  339. package/dist/lib/identity.js +19 -0
  340. package/dist/lib/keychain.js +17 -0
  341. package/dist/lib/license.js +35 -0
  342. package/dist/lib/messaging.js +59 -0
  343. package/dist/lib/post-tool-memory.js +13 -0
  344. package/dist/lib/registry-proxy.js +15 -0
  345. package/dist/lib/reminders.js +16 -0
  346. package/dist/lib/runtime-table.js +9 -0
  347. package/dist/lib/schedules.js +24 -0
  348. package/dist/lib/session-registry.js +21 -0
  349. package/dist/lib/session-wrappers.js +7 -0
  350. package/dist/lib/skill-learning.js +29 -0
  351. package/dist/lib/status-brief.js +7 -0
  352. package/dist/lib/store.js +43 -0
  353. package/dist/lib/task-router.js +22 -0
  354. package/dist/lib/tasks.js +66 -0
  355. package/dist/lib/tmux-routing.js +70 -0
  356. package/dist/lib/tmux-status.js +29 -0
  357. package/dist/lib/tmux-transport.js +7 -0
  358. package/dist/lib/token-spend.js +12 -0
  359. package/dist/lib/transport.js +10 -0
  360. package/dist/lib/ws-auth.js +11 -0
  361. package/dist/lib/ws-client.js +190 -0
  362. package/dist/license-gate-7QVCYARF.js +14 -0
  363. package/dist/mcp/register-tools.js +102 -0
  364. package/dist/mcp/server.js +370 -0
  365. package/dist/mcp/tools/complete-reminder.js +13 -0
  366. package/dist/mcp/tools/create-reminder.js +13 -0
  367. package/dist/mcp/tools/create-task.js +34 -0
  368. package/dist/mcp/tools/deactivate-behavior.js +16 -0
  369. package/dist/mcp/tools/list-reminders.js +13 -0
  370. package/dist/mcp/tools/list-tasks.js +33 -0
  371. package/dist/mcp/tools/send-message.js +33 -0
  372. package/dist/mcp/tools/update-task.js +32 -0
  373. package/dist/mcp-diagnostics-5T5OZ52S.js +200 -0
  374. package/dist/mcp-disconnect-tracker-VINUVEZJ.js +79 -0
  375. package/dist/mcp-http-config-YPF4WGU5.js +26 -0
  376. package/dist/memory-cards-XHZEOX7Q.js +173 -0
  377. package/dist/memory-graph-extractor-J3K7B4GC.js +16 -0
  378. package/dist/memory-poisoning-defense-I76FGNHK.js +224 -0
  379. package/dist/memory-queue-WEVFXPZO.js +19 -0
  380. package/dist/memory-queue-client-5XBHYAQR.js +15 -0
  381. package/dist/memory-reflection-YJGI6IDI.js +237 -0
  382. package/dist/message-queue-client-FUKX43JD.js +92 -0
  383. package/dist/notifications-H4F77BYT.js +44 -0
  384. package/dist/oauth-server-CCZPDTZJ.js +437 -0
  385. package/dist/orchestration-events-LXVPJL6S.js +24 -0
  386. package/dist/orchestration-phase-HXRKMZXM.js +23 -0
  387. package/dist/orchestrator-HXUZ6LYM.js +32 -0
  388. package/dist/permission-presets-UPVLJWZD.js +25 -0
  389. package/dist/permissions-C4EMHPDD.js +14 -0
  390. package/dist/pg-ssl-GD3332YS.js +7 -0
  391. package/dist/pipeline-router-QRJQWMFF.js +12 -0
  392. package/dist/plan-limits-NFQVRHS5.js +25 -0
  393. package/dist/prediction-log-C2BD3AHR.js +120 -0
  394. package/dist/preferences-5ARPMYE7.js +10 -0
  395. package/dist/preflight-TZOGLBZU.js +287 -0
  396. package/dist/project-boot-JIGOSGCN.js +254 -0
  397. package/dist/project-name-4SKOH2UO.js +10 -0
  398. package/dist/projection-worker-JZQTL4NU.js +877 -0
  399. package/dist/push-notifications-3GNJ5SZS.js +15 -0
  400. package/dist/reranker-U6DEAT4S.js +19 -0
  401. package/dist/review-gate-I66GDXNR.js +120 -0
  402. package/dist/review-polling-W2S3XAAU.js +123 -0
  403. package/dist/runtime/index.js +129 -0
  404. package/dist/self-query-router-QMK5ZSZR.js +188 -0
  405. package/dist/session-events-MNWHGZY5.js +35 -0
  406. package/dist/session-kill-telemetry-JHSI7D3F.js +28 -0
  407. package/dist/session-scope-SMT225X3.js +85 -0
  408. package/dist/setup-wizard-RBUTEZB2.js +12 -0
  409. package/dist/shard-manager-ON2WWCRM.js +29 -0
  410. package/dist/signal-KF2LIO7Y.js +7 -0
  411. package/dist/signal-paths-5ZTWCBUX.js +19 -0
  412. package/dist/skill-refinement-LKJHUW2U.js +156 -0
  413. package/dist/slack-JRDUD5Z7.js +7 -0
  414. package/dist/stack-update-ZIMV4OEQ.js +50 -0
  415. package/dist/steward-gate-6IKH335D.js +12 -0
  416. package/dist/support-outbox-HIJVUDA2.js +206 -0
  417. package/dist/task-enforcement-UIEWTA6H.js +292 -0
  418. package/dist/task-scanner-5OQBNC2N.js +11 -0
  419. package/dist/task-scope-DNQURKOQ.js +34 -0
  420. package/dist/tasks-crud-CLAYZZ4O.js +76 -0
  421. package/dist/tasks-review-OHR2P4QE.js +46 -0
  422. package/dist/telegram-COCYUCT7.js +7 -0
  423. package/dist/telemetry-QKWQKAUC.js +9 -0
  424. package/dist/telemetry-upload-APVDPCEV.js +609 -0
  425. package/dist/token-budget-6IQNYKLR.js +83 -0
  426. package/dist/tool-capability-index-UUNF7VPA.js +10 -0
  427. package/dist/tool-gates-6A6LE4DZ.js +14 -0
  428. package/dist/tool-gates-RNWEH5IK.js +13 -0
  429. package/dist/tool-registry-KL24CAFR.js +11 -0
  430. package/dist/tool-telemetry-SJSIL5M5.js +17 -0
  431. package/dist/tui/App.js +10223 -0
  432. package/dist/tui-data-L6XG4Z52.js +161 -0
  433. package/dist/typed-messages-53Q7L3LB.js +17 -0
  434. package/dist/update-check-5IL5I3E2.js +11 -0
  435. package/dist/webhook-VXGIH7PN.js +96 -0
  436. package/dist/webhook-pipe-4WPFGGFD.js +114 -0
  437. package/dist/whatsapp-PSMKCDS7.js +9 -0
  438. package/dist/whatsapp-accounts-4OKWFRWL.js +15 -0
  439. package/dist/whatsapp-config-ZG5LX4O4.js +125 -0
  440. package/dist/wiki-acl-XCT6QQGP.js +111 -0
  441. package/dist/wiki-client-KE622HKY.js +157 -0
  442. package/dist/worker-gate-GFKXZ6V5.js +21 -0
  443. package/dist/workflow-engine-6HTKI2ZE.js +28 -0
  444. package/dist/working-memory-Z3EB3FW6.js +77 -0
  445. package/dist/worktree-BO7QQ32T.js +25 -0
  446. package/package.json +1 -1
@@ -0,0 +1,100 @@
1
+ // src/runtime/hooks.ts
2
+ function createDefaultHooks() {
3
+ return {};
4
+ }
5
+ function composeHooks(...pipelines) {
6
+ return {
7
+ async onSessionStart(context) {
8
+ for (const p of pipelines) {
9
+ if (p.onSessionStart) await p.onSessionStart(context);
10
+ }
11
+ },
12
+ async onSessionEnd(context, summary) {
13
+ for (const p of pipelines) {
14
+ if (p.onSessionEnd) await p.onSessionEnd(context, summary);
15
+ }
16
+ },
17
+ async beforeToolUse(block, context) {
18
+ for (const p of pipelines) {
19
+ if (p.beforeToolUse) {
20
+ const result = await p.beforeToolUse(block, context);
21
+ if (result) return result;
22
+ }
23
+ }
24
+ return null;
25
+ },
26
+ async afterToolUse(block, result, context) {
27
+ for (const p of pipelines) {
28
+ if (p.afterToolUse) await p.afterToolUse(block, result, context);
29
+ }
30
+ },
31
+ async onError(error, context) {
32
+ for (const p of pipelines) {
33
+ if (p.onError) await p.onError(error, context);
34
+ }
35
+ },
36
+ async onCompact(removedMessages, summaryLength) {
37
+ for (const p of pipelines) {
38
+ if (p.onCompact) await p.onCompact(removedMessages, summaryLength);
39
+ }
40
+ },
41
+ async onPostCompact(removedMessages, injectedSummary) {
42
+ for (const p of pipelines) {
43
+ if (p.onPostCompact) await p.onPostCompact(removedMessages, injectedSummary);
44
+ }
45
+ },
46
+ async onSubagentStop(reason) {
47
+ for (const p of pipelines) {
48
+ if (p.onSubagentStop) {
49
+ const result = await p.onSubagentStop(reason);
50
+ if (result.block) return result;
51
+ }
52
+ }
53
+ return { block: false };
54
+ },
55
+ async onNotification(message) {
56
+ for (const p of pipelines) {
57
+ if (p.onNotification) await p.onNotification(message);
58
+ }
59
+ },
60
+ async onPermissionRequest(toolName, reason) {
61
+ for (const p of pipelines) {
62
+ if (p.onPermissionRequest) {
63
+ const result = await p.onPermissionRequest(toolName, reason);
64
+ if (result.autoApprove) return result;
65
+ }
66
+ }
67
+ return { autoApprove: false };
68
+ },
69
+ async onTaskAssigned(event) {
70
+ for (const p of pipelines) {
71
+ if (p.onTaskAssigned) await p.onTaskAssigned(event);
72
+ }
73
+ },
74
+ async onReviewReceived(event) {
75
+ for (const p of pipelines) {
76
+ if (p.onReviewReceived) await p.onReviewReceived(event);
77
+ }
78
+ },
79
+ async onContextPressure(event) {
80
+ for (const p of pipelines) {
81
+ if (p.onContextPressure) await p.onContextPressure(event);
82
+ }
83
+ },
84
+ async onCrossAgentMessage(event) {
85
+ for (const p of pipelines) {
86
+ if (p.onCrossAgentMessage) await p.onCrossAgentMessage(event);
87
+ }
88
+ },
89
+ async onTokenBudgetExceeded(ctx, fallback) {
90
+ for (const p of pipelines) {
91
+ if (p.onTokenBudgetExceeded) await p.onTokenBudgetExceeded(ctx, fallback);
92
+ }
93
+ }
94
+ };
95
+ }
96
+
97
+ export {
98
+ createDefaultHooks,
99
+ composeHooks
100
+ };
@@ -0,0 +1,157 @@
1
+ import {
2
+ clean,
3
+ stableId
4
+ } from "./chunk-WWPX2LLP.js";
5
+
6
+ // src/lib/reflection-checkpoints.ts
7
+ function parsePayload(payload) {
8
+ if (!payload) return {};
9
+ try {
10
+ return JSON.parse(payload);
11
+ } catch {
12
+ return {};
13
+ }
14
+ }
15
+ function semanticArray(event, key) {
16
+ const payload = parsePayload(event.payload);
17
+ const semantic = payload.semantic;
18
+ const value = semantic?.[key];
19
+ return Array.isArray(value) ? value.map(String).filter(Boolean) : [];
20
+ }
21
+ function buildReflectionCheckpoint(events) {
22
+ if (!events.length) return null;
23
+ const sorted = [...events].sort((a, b) => a.occurred_at.localeCompare(b.occurred_at));
24
+ const first = sorted[0];
25
+ const last = sorted[sorted.length - 1];
26
+ const goals = /* @__PURE__ */ new Set();
27
+ const successes = [];
28
+ const failures = [];
29
+ const risks = [];
30
+ const nextActions = [];
31
+ const decisions = [];
32
+ for (const event of sorted) {
33
+ for (const goal of semanticArray(event, "goals")) goals.add(goal);
34
+ for (const item of semanticArray(event, "successSignals")) successes.push(item);
35
+ for (const item of semanticArray(event, "failureSignals")) failures.push(item);
36
+ for (const item of semanticArray(event, "nextActions")) nextActions.push(item);
37
+ for (const item of semanticArray(event, "decisions")) decisions.push(item);
38
+ if (event.impact === "negative" || event.outcome === "failure_signal" || event.event_type === "problem" || event.event_type === "error") {
39
+ failures.push(event.outcome || event.intention || event.event_type);
40
+ }
41
+ if (event.outcome === "risk_signal") risks.push(event.intention || event.outcome);
42
+ if (event.impact === "positive" || event.outcome === "success_signal" || event.event_type === "milestone") {
43
+ successes.push(event.outcome || event.intention || event.event_type);
44
+ }
45
+ }
46
+ const uniqueGoals = [...goals].slice(0, 6);
47
+ const uniqueSuccesses = [...new Set(successes.map((x) => clean(x, 180)).filter(Boolean))].slice(0, 6);
48
+ const uniqueFailures = [...new Set(failures.map((x) => clean(x, 180)).filter(Boolean))].slice(0, 6);
49
+ const uniqueRisks = [...new Set(risks.map((x) => clean(x, 180)).filter(Boolean))].slice(0, 6);
50
+ const uniqueNext = [...new Set(nextActions.map((x) => clean(x, 180)).filter(Boolean))].slice(0, 6);
51
+ const uniqueDecisions = [...new Set(decisions.map((x) => clean(x, 180)).filter(Boolean))].slice(0, 6);
52
+ const learnings = [
53
+ uniqueSuccesses.length ? `Working: ${uniqueSuccesses.slice(0, 3).join("; ")}` : "Working: no strong success signal yet",
54
+ uniqueFailures.length ? `Improve: ${uniqueFailures.slice(0, 3).join("; ")}` : "Improve: no strong failure signal in this window",
55
+ uniqueDecisions.length ? `Decision context: ${uniqueDecisions.slice(0, 2).join("; ")}` : "Decision context: no explicit decision signal"
56
+ ];
57
+ const summary = clean([
58
+ `Window ${first.occurred_at} \u2192 ${last.occurred_at}`,
59
+ `${sorted.length} events`,
60
+ uniqueGoals.length ? `goals: ${uniqueGoals.join("; ")}` : "goals: inferred from event trajectory",
61
+ uniqueSuccesses.length ? `successes: ${uniqueSuccesses.slice(0, 2).join("; ")}` : "successes: none explicit",
62
+ uniqueFailures.length ? `failures: ${uniqueFailures.slice(0, 2).join("; ")}` : "failures: none explicit"
63
+ ].join(". "), 1200);
64
+ return {
65
+ id: stableId("reflection", first.project_name ?? "", first.session_id ?? "", first.occurred_at, last.occurred_at, sorted.length),
66
+ projectName: first.project_name ?? null,
67
+ sessionId: first.session_id ?? null,
68
+ windowStartAt: first.occurred_at,
69
+ windowEndAt: last.occurred_at,
70
+ eventCount: sorted.length,
71
+ goalCount: uniqueGoals.length,
72
+ successCount: uniqueSuccesses.length,
73
+ failureCount: uniqueFailures.length,
74
+ riskCount: uniqueRisks.length,
75
+ summary,
76
+ learnings,
77
+ nextActions: uniqueNext.length ? uniqueNext : ["Continue from latest successful event and resolve highest-impact failure/risk first."],
78
+ evidenceEventIds: sorted.slice(-25).map((e) => e.id),
79
+ confidence: Math.min(0.95, 0.5 + Math.min(sorted.length, 100) / 250 + uniqueGoals.length * 0.03)
80
+ };
81
+ }
82
+ async function resolveClient(client) {
83
+ if (client) return client;
84
+ const { getClient } = await import("./lib/database.js");
85
+ return getClient();
86
+ }
87
+ async function insertReflectionCheckpoint(checkpoint, client) {
88
+ const db = await resolveClient(client);
89
+ const now = (/* @__PURE__ */ new Date()).toISOString();
90
+ await db.execute({
91
+ sql: `INSERT INTO agent_reflection_checkpoints
92
+ (id, project_name, session_id, window_start_at, window_end_at, event_count, goal_count,
93
+ success_count, failure_count, risk_count, summary, learnings, next_actions, evidence_event_ids,
94
+ confidence, created_at)
95
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
96
+ ON CONFLICT(id) DO UPDATE SET summary = excluded.summary, learnings = excluded.learnings,
97
+ next_actions = excluded.next_actions, confidence = excluded.confidence`,
98
+ args: [
99
+ checkpoint.id,
100
+ checkpoint.projectName,
101
+ checkpoint.sessionId,
102
+ checkpoint.windowStartAt,
103
+ checkpoint.windowEndAt,
104
+ checkpoint.eventCount,
105
+ checkpoint.goalCount,
106
+ checkpoint.successCount,
107
+ checkpoint.failureCount,
108
+ checkpoint.riskCount,
109
+ checkpoint.summary,
110
+ JSON.stringify(checkpoint.learnings),
111
+ JSON.stringify(checkpoint.nextActions),
112
+ JSON.stringify(checkpoint.evidenceEventIds),
113
+ checkpoint.confidence,
114
+ now
115
+ ]
116
+ });
117
+ }
118
+ async function generateReflectionCheckpoints(opts = {}) {
119
+ const db = await resolveClient(opts.client);
120
+ const windowSize = opts.windowSize ?? 100;
121
+ const minEvents = opts.minEvents ?? 20;
122
+ const limit = opts.limit ?? 5e3;
123
+ const where = opts.projectName ? "WHERE project_name = ?" : "";
124
+ const args = opts.projectName ? [opts.projectName] : [];
125
+ const result = await db.execute({
126
+ sql: `SELECT id, event_type, occurred_at, actor_agent_id, project_name, session_id, intention, outcome, impact, evidence_memory_id, payload
127
+ FROM agent_events ${where}
128
+ ORDER BY project_name, session_id, occurred_at, sequence_index
129
+ LIMIT ?`,
130
+ args: [...args, limit]
131
+ });
132
+ const groups = /* @__PURE__ */ new Map();
133
+ for (const row of result.rows) {
134
+ const event = row;
135
+ const key = `${event.project_name ?? ""}::${event.session_id ?? ""}`;
136
+ const bucket = groups.get(key) ?? [];
137
+ bucket.push(event);
138
+ groups.set(key, bucket);
139
+ }
140
+ let inserted = 0;
141
+ for (const events of groups.values()) {
142
+ for (let i = 0; i < events.length; i += windowSize) {
143
+ const window = events.slice(i, i + windowSize);
144
+ if (window.length < minEvents) continue;
145
+ const checkpoint = buildReflectionCheckpoint(window);
146
+ if (!checkpoint) continue;
147
+ await insertReflectionCheckpoint(checkpoint, db);
148
+ inserted++;
149
+ }
150
+ }
151
+ return inserted;
152
+ }
153
+
154
+ export {
155
+ buildReflectionCheckpoint,
156
+ generateReflectionCheckpoints
157
+ };
@@ -0,0 +1,75 @@
1
+ import {
2
+ PLATFORM_PROCEDURES,
3
+ PLATFORM_PROCEDURE_TITLES
4
+ } from "./chunk-5NFBE376.js";
5
+ import {
6
+ getClient
7
+ } from "./chunk-UJOSFVWG.js";
8
+
9
+ // src/lib/global-procedures.ts
10
+ import { randomUUID } from "crypto";
11
+ var _customerCache = "";
12
+ var _cacheLoaded = false;
13
+ var _platformCache = PLATFORM_PROCEDURES.map((p) => `### ${p.title}
14
+ ${p.content}`).join("\n\n");
15
+ async function loadGlobalProcedures() {
16
+ const client = getClient();
17
+ const result = await client.execute({
18
+ sql: "SELECT * FROM company_procedures WHERE active = 1 ORDER BY priority ASC, created_at ASC",
19
+ args: []
20
+ });
21
+ const allRows = result.rows;
22
+ const customerOnly = allRows.filter((p) => !PLATFORM_PROCEDURE_TITLES.has(p.title));
23
+ const values = customerOnly.filter((p) => p.kind === "value");
24
+ const procedures = customerOnly.filter((p) => p.kind !== "value");
25
+ const parts = [];
26
+ if (values.length > 0) {
27
+ parts.push("### Company Values\n" + values.map((v) => `- **${v.title}:** ${v.content}`).join("\n"));
28
+ }
29
+ if (procedures.length > 0) {
30
+ parts.push(procedures.map((p) => `### ${p.title}
31
+ ${p.content}`).join("\n\n"));
32
+ }
33
+ _customerCache = parts.join("\n\n");
34
+ _cacheLoaded = true;
35
+ return customerOnly;
36
+ }
37
+ function getGlobalProceduresBlock() {
38
+ const sections = [];
39
+ if (_platformCache) sections.push(_platformCache);
40
+ if (_cacheLoaded && _customerCache) sections.push(_customerCache);
41
+ if (sections.length === 0) return "";
42
+ return `## Organization-Wide Procedures (MANDATORY \u2014 supersedes all other rules)
43
+
44
+ ${sections.join("\n\n")}
45
+ `;
46
+ }
47
+ async function storeGlobalProcedure(input) {
48
+ const id = randomUUID();
49
+ const now = (/* @__PURE__ */ new Date()).toISOString();
50
+ const client = getClient();
51
+ await client.execute({
52
+ sql: `INSERT INTO company_procedures (id, title, content, priority, domain, kind, active, created_at, updated_at)
53
+ VALUES (?, ?, ?, ?, ?, ?, 1, ?, ?)`,
54
+ args: [id, input.title, input.content, input.priority ?? "p0", input.domain ?? null, input.kind ?? "procedure", now, now]
55
+ });
56
+ await loadGlobalProcedures();
57
+ return id;
58
+ }
59
+ async function deactivateGlobalProcedure(id) {
60
+ const now = (/* @__PURE__ */ new Date()).toISOString();
61
+ const client = getClient();
62
+ const result = await client.execute({
63
+ sql: "UPDATE company_procedures SET active = 0, updated_at = ? WHERE id = ?",
64
+ args: [now, id]
65
+ });
66
+ await loadGlobalProcedures();
67
+ return result.rowsAffected > 0;
68
+ }
69
+
70
+ export {
71
+ loadGlobalProcedures,
72
+ getGlobalProceduresBlock,
73
+ storeGlobalProcedure,
74
+ deactivateGlobalProcedure
75
+ };
@@ -0,0 +1,33 @@
1
+ import {
2
+ completeReminder
3
+ } from "./chunk-R2E4TV5V.js";
4
+
5
+ // src/mcp/tools/complete-reminder.ts
6
+ import { z } from "zod";
7
+ function registerCompleteReminder(server) {
8
+ server.registerTool(
9
+ "complete_reminder",
10
+ {
11
+ title: "Complete Reminder",
12
+ description: "Mark a reminder as done. Accepts UUID or text substring.",
13
+ inputSchema: {
14
+ reminder_id: z.string().describe("Reminder UUID or text substring to match")
15
+ }
16
+ },
17
+ async ({ reminder_id }) => {
18
+ const reminder = await completeReminder(reminder_id);
19
+ if (!reminder) {
20
+ return {
21
+ content: [{ type: "text", text: `No active reminder matching "${reminder_id}".` }]
22
+ };
23
+ }
24
+ return {
25
+ content: [{ type: "text", text: `Reminder completed: "${reminder.text}"` }]
26
+ };
27
+ }
28
+ );
29
+ }
30
+
31
+ export {
32
+ registerCompleteReminder
33
+ };
@@ -0,0 +1,249 @@
1
+ // src/gateway/crm-bridge.ts
2
+ var config = null;
3
+ var disabledLogged = false;
4
+ function initCRMBridge() {
5
+ const apiToken = process.env.EXE_CRM_ADMIN_TOKEN || process.env.CRM_API_TOKEN;
6
+ if (!apiToken) {
7
+ if (!disabledLogged) {
8
+ console.log("[crm-bridge] Disabled \u2014 EXE_CRM_ADMIN_TOKEN not set");
9
+ disabledLogged = true;
10
+ }
11
+ config = null;
12
+ return false;
13
+ }
14
+ const graphqlUrl = process.env.CRM_GRAPHQL_URL || "http://localhost:3000";
15
+ config = { graphqlUrl, apiToken };
16
+ console.log(`[crm-bridge] Enabled \u2014 pushing to ${graphqlUrl}`);
17
+ return true;
18
+ }
19
+ function isCRMBridgeEnabled() {
20
+ return config !== null;
21
+ }
22
+ async function gqlRequest(query, variables) {
23
+ const res = await fetch(`${config.graphqlUrl}/api`, {
24
+ method: "POST",
25
+ headers: {
26
+ "Content-Type": "application/json",
27
+ Authorization: `Bearer ${config.apiToken}`
28
+ },
29
+ body: JSON.stringify({ query, variables }),
30
+ signal: AbortSignal.timeout(3e4)
31
+ });
32
+ if (!res.ok) {
33
+ throw new Error(`CRM GraphQL request failed: ${res.status} ${res.statusText}`);
34
+ }
35
+ return res.json();
36
+ }
37
+ async function findPersonByContact(platform, senderId) {
38
+ const isEmail = platform === "email";
39
+ const query = isEmail ? `query FindPerson($value: String!) {
40
+ people(filter: { emails: { primaryEmail: { eq: $value } } }, first: 1) {
41
+ edges { node { id } }
42
+ }
43
+ }` : `query FindPerson($value: String!) {
44
+ people(filter: { phones: { primaryPhoneNumber: { eq: $value } } }, first: 1) {
45
+ edges { node { id } }
46
+ }
47
+ }`;
48
+ const res = await gqlRequest(query, { value: senderId });
49
+ if (res.errors && res.errors.length > 0) {
50
+ console.error("[crm-bridge] findPerson error:", res.errors[0].message);
51
+ return null;
52
+ }
53
+ const edges = res.data?.people?.edges;
54
+ return edges && edges.length > 0 ? edges[0].node.id : null;
55
+ }
56
+ async function createPerson(platform, senderId, senderName) {
57
+ const firstName = senderName?.split(" ")[0] || "";
58
+ const lastName = senderName?.split(" ").slice(1).join(" ") || "";
59
+ const isEmail = platform === "email";
60
+ const input = {
61
+ name: { firstName, lastName }
62
+ };
63
+ if (isEmail) {
64
+ input.emails = { primaryEmail: senderId, additionalEmails: [] };
65
+ } else {
66
+ input.phones = {
67
+ primaryPhoneNumber: senderId,
68
+ primaryPhoneCountryCode: "",
69
+ primaryPhoneCallingCode: "",
70
+ additionalPhones: []
71
+ };
72
+ }
73
+ const query = `
74
+ mutation CreatePerson($input: PersonCreateInput!) {
75
+ createPerson(data: $input) {
76
+ id
77
+ }
78
+ }
79
+ `;
80
+ const res = await gqlRequest(query, {
81
+ input
82
+ });
83
+ if (res.errors && res.errors.length > 0) {
84
+ console.error("[crm-bridge] createPerson error:", res.errors[0].message);
85
+ return null;
86
+ }
87
+ return res.data?.createPerson?.id ?? null;
88
+ }
89
+ async function createTimelineActivity(personId, params) {
90
+ const channelLabel = params.platform.charAt(0).toUpperCase() + params.platform.slice(1);
91
+ const label = params.direction === "inbound" ? "message from" : "conversation with";
92
+ const input = {
93
+ name: `${channelLabel} ${label} ${params.senderName || params.senderId}`,
94
+ happensAt: params.timestamp,
95
+ properties: {
96
+ channel: params.platform,
97
+ senderId: params.senderId,
98
+ senderName: params.senderName || null,
99
+ messageText: params.messageText,
100
+ agentResponse: params.agentResponse || null,
101
+ agentName: params.agentName || null,
102
+ threadId: `${params.platform}:${params.senderId}`,
103
+ direction: params.direction,
104
+ accountId: params.accountId || null
105
+ },
106
+ targetPersonId: personId
107
+ };
108
+ const query = `
109
+ mutation CreateTimelineActivity($input: TimelineActivityCreateInput!) {
110
+ createTimelineActivity(data: $input) {
111
+ id
112
+ }
113
+ }
114
+ `;
115
+ const res = await gqlRequest(
116
+ query,
117
+ { input }
118
+ );
119
+ if (res.errors && res.errors.length > 0) {
120
+ console.error(
121
+ "[crm-bridge] createTimelineActivity error:",
122
+ res.errors[0].message
123
+ );
124
+ return false;
125
+ }
126
+ return true;
127
+ }
128
+ async function pushConversationToCRM(params) {
129
+ if (!config) return;
130
+ try {
131
+ let personId = await findPersonByContact(params.platform, params.senderId);
132
+ if (!personId) {
133
+ personId = await createPerson(
134
+ params.platform,
135
+ params.senderId,
136
+ params.senderName
137
+ );
138
+ }
139
+ if (!personId) {
140
+ console.error("[crm-bridge] Failed to find or create person for", params.senderId);
141
+ return;
142
+ }
143
+ const ok = await createTimelineActivity(personId, {
144
+ ...params,
145
+ direction: "conversation"
146
+ });
147
+ if (ok) {
148
+ console.log(
149
+ `[crm-bridge] Pushed ${params.platform}/${params.senderId} \u2192 person ${personId}`
150
+ );
151
+ }
152
+ } catch (err) {
153
+ console.error("[crm-bridge] Push failed:", err instanceof Error ? err.message : err);
154
+ }
155
+ }
156
+ async function pushInboundMessageToCRM(params) {
157
+ if (!config) return;
158
+ try {
159
+ let personId = await findPersonByContact(params.platform, params.senderId);
160
+ if (!personId) {
161
+ personId = await createPerson(
162
+ params.platform,
163
+ params.senderId,
164
+ params.senderName
165
+ );
166
+ }
167
+ if (!personId) {
168
+ console.error("[crm-bridge] Failed to find or create person for", params.senderId);
169
+ return;
170
+ }
171
+ const ok = await createTimelineActivity(personId, {
172
+ ...params,
173
+ direction: "inbound"
174
+ });
175
+ if (ok) {
176
+ console.log(
177
+ `[crm-bridge] Inbound ${params.platform}/${params.senderId} \u2192 person ${personId}`
178
+ );
179
+ }
180
+ } catch (err) {
181
+ console.error("[crm-bridge] Inbound push failed:", err instanceof Error ? err.message : err);
182
+ }
183
+ }
184
+ async function pushGatewayEventToCRM(params) {
185
+ if (!config) return;
186
+ try {
187
+ let personId = await findPersonByContact(params.platform, params.senderId);
188
+ if (!personId) {
189
+ personId = await createPerson(
190
+ params.platform,
191
+ params.senderId,
192
+ params.senderName
193
+ );
194
+ }
195
+ if (!personId) {
196
+ console.error("[crm-bridge] Failed to find or create person for", params.senderId);
197
+ return;
198
+ }
199
+ const channelLabel = params.platform.charAt(0).toUpperCase() + params.platform.slice(1);
200
+ const categoryLabel = params.dataCategory.replace(/_/g, " ");
201
+ const input = {
202
+ name: `${channelLabel} ${categoryLabel} \u2014 ${params.senderName || params.senderId}`,
203
+ happensAt: params.timestamp,
204
+ properties: {
205
+ channel: params.platform,
206
+ dataCategory: params.dataCategory,
207
+ senderId: params.senderId,
208
+ senderName: params.senderName || null,
209
+ accountId: params.accountId || null,
210
+ direction: "inbound",
211
+ ...params.eventData
212
+ },
213
+ targetPersonId: personId
214
+ };
215
+ const query = `
216
+ mutation CreateTimelineActivity($input: TimelineActivityCreateInput!) {
217
+ createTimelineActivity(data: $input) {
218
+ id
219
+ }
220
+ }
221
+ `;
222
+ const res = await gqlRequest(
223
+ query,
224
+ { input }
225
+ );
226
+ if (res.errors && res.errors.length > 0) {
227
+ console.error(
228
+ "[crm-bridge] pushGatewayEvent error:",
229
+ res.errors[0].message
230
+ );
231
+ return;
232
+ }
233
+ console.log(
234
+ `[crm-bridge] Event ${params.dataCategory} ${params.platform}/${params.senderId} \u2192 person ${personId}`
235
+ );
236
+ } catch (err) {
237
+ console.error("[crm-bridge] Event push failed:", err instanceof Error ? err.message : err);
238
+ }
239
+ }
240
+
241
+ export {
242
+ initCRMBridge,
243
+ isCRMBridgeEnabled,
244
+ findPersonByContact,
245
+ createPerson,
246
+ pushConversationToCRM,
247
+ pushInboundMessageToCRM,
248
+ pushGatewayEventToCRM
249
+ };
@@ -0,0 +1,55 @@
1
+ import {
2
+ getAgentContext
3
+ } from "./chunk-GJV3WDWM.js";
4
+
5
+ // src/lib/project-name.ts
6
+ import { execSync } from "child_process";
7
+ import path from "path";
8
+ var _cached = null;
9
+ var _cachedCwd = null;
10
+ function getProjectName(cwd) {
11
+ if (!cwd) {
12
+ try {
13
+ const ctx = getAgentContext();
14
+ if (ctx?.projectName) return ctx.projectName;
15
+ } catch {
16
+ }
17
+ }
18
+ const dir = cwd ?? process.cwd();
19
+ if (_cached && _cachedCwd === dir) return _cached;
20
+ try {
21
+ let repoRoot;
22
+ try {
23
+ const gitCommonDir = execSync("git rev-parse --path-format=absolute --git-common-dir", {
24
+ cwd: dir,
25
+ encoding: "utf8",
26
+ timeout: 2e3,
27
+ stdio: ["pipe", "pipe", "pipe"]
28
+ }).trim();
29
+ repoRoot = path.dirname(gitCommonDir);
30
+ } catch {
31
+ repoRoot = execSync("git rev-parse --show-toplevel", {
32
+ cwd: dir,
33
+ encoding: "utf8",
34
+ timeout: 2e3,
35
+ stdio: ["pipe", "pipe", "pipe"]
36
+ }).trim();
37
+ }
38
+ _cached = path.basename(repoRoot);
39
+ _cachedCwd = dir;
40
+ return _cached;
41
+ } catch {
42
+ _cached = path.basename(dir);
43
+ _cachedCwd = dir;
44
+ return _cached;
45
+ }
46
+ }
47
+ function _resetCache() {
48
+ _cached = null;
49
+ _cachedCwd = null;
50
+ }
51
+
52
+ export {
53
+ getProjectName,
54
+ _resetCache
55
+ };