@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,90 @@
1
+ // src/lib/dispatch-ack.ts
2
+ import { existsSync, mkdirSync, readFileSync, writeFileSync, unlinkSync, readdirSync } from "fs";
3
+ import path from "path";
4
+ import os from "os";
5
+ var ACK_DIR = path.join(os.homedir(), ".exe-os", "dispatch-acks");
6
+ function ensureAckDir() {
7
+ if (!existsSync(ACK_DIR)) mkdirSync(ACK_DIR, { recursive: true });
8
+ }
9
+ function writeDispatchPending(taskId, assignedTo, sessionName) {
10
+ ensureAckDir();
11
+ const signal = {
12
+ taskId,
13
+ assignedTo,
14
+ dispatchedAt: (/* @__PURE__ */ new Date()).toISOString(),
15
+ sessionName
16
+ };
17
+ writeFileSync(path.join(ACK_DIR, `${taskId}.pending`), JSON.stringify(signal), "utf-8");
18
+ }
19
+ function writeDispatchAck(taskId, agentId) {
20
+ ensureAckDir();
21
+ const pendingPath = path.join(ACK_DIR, `${taskId}.pending`);
22
+ const ackPath = path.join(ACK_DIR, `${taskId}.ack`);
23
+ let signal;
24
+ try {
25
+ signal = JSON.parse(readFileSync(pendingPath, "utf-8"));
26
+ } catch {
27
+ signal = { taskId, assignedTo: agentId, dispatchedAt: (/* @__PURE__ */ new Date()).toISOString() };
28
+ }
29
+ signal.ackedAt = (/* @__PURE__ */ new Date()).toISOString();
30
+ writeFileSync(ackPath, JSON.stringify(signal), "utf-8");
31
+ try {
32
+ unlinkSync(pendingPath);
33
+ } catch {
34
+ }
35
+ }
36
+ function checkDispatchStatus(taskId) {
37
+ ensureAckDir();
38
+ const ackPath = path.join(ACK_DIR, `${taskId}.ack`);
39
+ const pendingPath = path.join(ACK_DIR, `${taskId}.pending`);
40
+ if (existsSync(ackPath)) {
41
+ try {
42
+ const signal = JSON.parse(readFileSync(ackPath, "utf-8"));
43
+ return { status: "acked", signal };
44
+ } catch {
45
+ return { status: "acked" };
46
+ }
47
+ }
48
+ if (existsSync(pendingPath)) {
49
+ try {
50
+ const signal = JSON.parse(readFileSync(pendingPath, "utf-8"));
51
+ return { status: "pending", signal };
52
+ } catch {
53
+ return { status: "pending" };
54
+ }
55
+ }
56
+ return { status: "unknown" };
57
+ }
58
+ function cleanStaleDispatchAcks(maxAgeMs = 60 * 60 * 1e3) {
59
+ ensureAckDir();
60
+ const now = Date.now();
61
+ let cleaned = 0;
62
+ try {
63
+ for (const file of readdirSync(ACK_DIR)) {
64
+ const fullPath = path.join(ACK_DIR, file);
65
+ try {
66
+ const signal = JSON.parse(readFileSync(fullPath, "utf-8"));
67
+ const ts = signal.ackedAt ?? signal.dispatchedAt;
68
+ if (now - new Date(ts).getTime() > maxAgeMs) {
69
+ unlinkSync(fullPath);
70
+ cleaned++;
71
+ }
72
+ } catch {
73
+ try {
74
+ unlinkSync(fullPath);
75
+ cleaned++;
76
+ } catch {
77
+ }
78
+ }
79
+ }
80
+ } catch {
81
+ }
82
+ return cleaned;
83
+ }
84
+
85
+ export {
86
+ writeDispatchPending,
87
+ writeDispatchAck,
88
+ checkDispatchStatus,
89
+ cleanStaleDispatchAcks
90
+ };
@@ -0,0 +1,53 @@
1
+ // src/lib/state-bus.ts
2
+ var StateBus = class {
3
+ handlers = /* @__PURE__ */ new Map();
4
+ globalHandlers = /* @__PURE__ */ new Set();
5
+ /** Emit an event to all subscribers */
6
+ emit(event) {
7
+ const typeHandlers = this.handlers.get(event.type);
8
+ if (typeHandlers) {
9
+ for (const handler of typeHandlers) {
10
+ try {
11
+ handler(event);
12
+ } catch {
13
+ }
14
+ }
15
+ }
16
+ for (const handler of this.globalHandlers) {
17
+ try {
18
+ handler(event);
19
+ } catch {
20
+ }
21
+ }
22
+ }
23
+ /** Subscribe to a specific event type */
24
+ on(type, handler) {
25
+ if (!this.handlers.has(type)) {
26
+ this.handlers.set(type, /* @__PURE__ */ new Set());
27
+ }
28
+ this.handlers.get(type).add(handler);
29
+ }
30
+ /** Subscribe to ALL events */
31
+ onAny(handler) {
32
+ this.globalHandlers.add(handler);
33
+ }
34
+ /** Unsubscribe from a specific event type */
35
+ off(type, handler) {
36
+ this.handlers.get(type)?.delete(handler);
37
+ }
38
+ /** Unsubscribe from ALL events */
39
+ offAny(handler) {
40
+ this.globalHandlers.delete(handler);
41
+ }
42
+ /** Remove all listeners */
43
+ clear() {
44
+ this.handlers.clear();
45
+ this.globalHandlers.clear();
46
+ }
47
+ };
48
+ var orgBus = new StateBus();
49
+
50
+ export {
51
+ StateBus,
52
+ orgBus
53
+ };
@@ -0,0 +1,356 @@
1
+ import {
2
+ extractMemoryGraph
3
+ } from "./chunk-36DAY227.js";
4
+ import {
5
+ flushBatch,
6
+ writeMemory
7
+ } from "./chunk-HTCBLSIB.js";
8
+ import {
9
+ extractKeywords
10
+ } from "./chunk-CHCA3ZM2.js";
11
+ import {
12
+ getActiveAgent
13
+ } from "./chunk-DLXTKVBO.js";
14
+
15
+ // src/mcp/tools/import-conversations.ts
16
+ import { z } from "zod";
17
+ import crypto from "crypto";
18
+ import { readdir, readFile, stat } from "fs/promises";
19
+ import path from "path";
20
+
21
+ // src/lib/conversation-parser.ts
22
+ function detectFormat(content, filePath) {
23
+ const lower = filePath.toLowerCase();
24
+ if (lower.endsWith(".md") || lower.endsWith(".markdown")) return "markdown";
25
+ const trimmed = content.trimStart();
26
+ if (!trimmed.startsWith("[") && !trimmed.startsWith("{")) return "markdown";
27
+ try {
28
+ const parsed = JSON.parse(trimmed);
29
+ if (Array.isArray(parsed) && parsed.length > 0) {
30
+ const first = parsed[0];
31
+ if (first && typeof first === "object") {
32
+ if ("mapping" in first && typeof first.mapping === "object") return "chatgpt";
33
+ if ("chat_messages" in first) return "claude";
34
+ if ("uuid" in first && "name" in first) return "claude";
35
+ }
36
+ }
37
+ return "generic";
38
+ } catch {
39
+ return "markdown";
40
+ }
41
+ }
42
+ function extractChatGPTContent(node) {
43
+ const parts = node.message?.content?.parts;
44
+ if (!Array.isArray(parts)) return "";
45
+ return parts.filter((p) => typeof p === "string").join("\n").trim();
46
+ }
47
+ function parseChatGPT(content, sourceFile = "conversations.json") {
48
+ const data = JSON.parse(content);
49
+ if (!Array.isArray(data)) return [];
50
+ return data.map((conv) => {
51
+ const title = conv.title ?? "Untitled";
52
+ const messages = [];
53
+ if (conv.mapping) {
54
+ const nodes = Object.values(conv.mapping).filter((n) => n.message?.content?.parts && extractChatGPTContent(n).length > 0).sort((a, b) => (a.message?.create_time ?? 0) - (b.message?.create_time ?? 0));
55
+ for (const node of nodes) {
56
+ const role = node.message?.author?.role ?? "unknown";
57
+ const text = extractChatGPTContent(node);
58
+ if (!text) continue;
59
+ const createTime = node.message?.create_time;
60
+ messages.push({
61
+ role,
62
+ content: text,
63
+ timestamp: createTime ? new Date(createTime * 1e3).toISOString() : void 0
64
+ });
65
+ }
66
+ }
67
+ return { title, messages, sourceFile };
68
+ }).filter((c) => c.messages.length > 0);
69
+ }
70
+ function parseClaude(content, sourceFile = "conversations.json") {
71
+ const data = JSON.parse(content);
72
+ if (!Array.isArray(data)) return [];
73
+ return data.map((conv) => {
74
+ const title = conv.name ?? conv.uuid ?? "Untitled";
75
+ const messages = [];
76
+ if (conv.chat_messages) {
77
+ for (const msg of conv.chat_messages) {
78
+ let text = msg.text ?? "";
79
+ if (!text && Array.isArray(msg.content)) {
80
+ text = msg.content.filter((c) => c.type === "text" && c.text).map((c) => c.text).join("\n");
81
+ }
82
+ if (!text.trim()) continue;
83
+ messages.push({
84
+ role: msg.sender ?? "unknown",
85
+ content: text.trim(),
86
+ timestamp: msg.created_at
87
+ });
88
+ }
89
+ }
90
+ return { title, messages, sourceFile };
91
+ }).filter((c) => c.messages.length > 0);
92
+ }
93
+ function parseGeneric(content, sourceFile = "conversations.json") {
94
+ const trimmed = content.trimStart();
95
+ try {
96
+ const data = JSON.parse(trimmed);
97
+ if (Array.isArray(data)) {
98
+ if (data.length > 0 && typeof data[0] === "object" && ("role" in data[0] || "content" in data[0])) {
99
+ const messages = data.map((msg) => ({
100
+ role: msg.role ?? "unknown",
101
+ content: (msg.content ?? msg.text ?? "").trim(),
102
+ timestamp: msg.timestamp ?? msg.created_at
103
+ })).filter((m) => m.content.length > 0);
104
+ if (messages.length > 0) {
105
+ return [{ title: sourceFile, messages, sourceFile }];
106
+ }
107
+ }
108
+ }
109
+ } catch {
110
+ }
111
+ return parseMarkdown(content, sourceFile);
112
+ }
113
+ function parseMarkdown(content, sourceFile = "conversation.md") {
114
+ const lines = content.split("\n");
115
+ const conversations = [];
116
+ let currentTitle = sourceFile;
117
+ let currentMessages = [];
118
+ let currentRole = "user";
119
+ let currentContent = [];
120
+ function flushMessage() {
121
+ const text = currentContent.join("\n").trim();
122
+ if (text) {
123
+ currentMessages.push({ role: currentRole, content: text });
124
+ }
125
+ currentContent = [];
126
+ }
127
+ function flushConversation() {
128
+ flushMessage();
129
+ if (currentMessages.length > 0) {
130
+ conversations.push({ title: currentTitle, messages: [...currentMessages], sourceFile });
131
+ }
132
+ currentMessages = [];
133
+ }
134
+ for (const line of lines) {
135
+ const h1Match = line.match(/^# (.+)$/);
136
+ if (h1Match) {
137
+ flushConversation();
138
+ currentTitle = h1Match[1];
139
+ continue;
140
+ }
141
+ const roleMatch = line.match(/^(?:##\s+|\*\*)(user|assistant|human|system|ai|claude|gpt)(?:\*\*)?:?\s*/i);
142
+ if (roleMatch) {
143
+ flushMessage();
144
+ const raw = roleMatch[1].toLowerCase();
145
+ currentRole = raw === "human" || raw === "user" ? "user" : raw === "assistant" || raw === "ai" || raw === "claude" || raw === "gpt" ? "assistant" : raw;
146
+ continue;
147
+ }
148
+ currentContent.push(line);
149
+ }
150
+ flushConversation();
151
+ return conversations;
152
+ }
153
+ function conversationsToMemories(convos, format = "generic") {
154
+ const memories = [];
155
+ for (const convo of convos) {
156
+ for (const msg of convo.messages) {
157
+ if (msg.content.length < 10) continue;
158
+ memories.push({
159
+ text: msg.content,
160
+ kind: "conversation",
161
+ metadata: {
162
+ source_type: "import",
163
+ source_format: format,
164
+ source_path: convo.sourceFile,
165
+ conversation_title: convo.title,
166
+ role: msg.role,
167
+ original_timestamp: msg.timestamp
168
+ }
169
+ });
170
+ }
171
+ }
172
+ return memories;
173
+ }
174
+
175
+ // src/mcp/tools/import-conversations.ts
176
+ var DEFAULT_CAP = 5e4;
177
+ var YIELD_INTERVAL = 50;
178
+ async function readInputFiles(inputPath) {
179
+ const files = [];
180
+ const info = await stat(inputPath);
181
+ if (info.isDirectory()) {
182
+ const entries = await readdir(inputPath);
183
+ for (const entry of entries) {
184
+ const fullPath = path.join(inputPath, entry);
185
+ const entryStat = await stat(fullPath);
186
+ if (entryStat.isFile() && (entry.endsWith(".json") || entry.endsWith(".md") || entry.endsWith(".txt"))) {
187
+ files.push({ path: fullPath, content: await readFile(fullPath, "utf-8") });
188
+ }
189
+ }
190
+ } else {
191
+ files.push({ path: inputPath, content: await readFile(inputPath, "utf-8") });
192
+ }
193
+ return files;
194
+ }
195
+ function parseFile(content, filePath, requestedFormat) {
196
+ const format = requestedFormat && requestedFormat !== "auto" ? requestedFormat : detectFormat(content, filePath);
197
+ let conversations;
198
+ switch (format) {
199
+ case "chatgpt":
200
+ conversations = parseChatGPT(content, filePath);
201
+ break;
202
+ case "claude":
203
+ conversations = parseClaude(content, filePath);
204
+ break;
205
+ case "markdown":
206
+ conversations = parseMarkdown(content, filePath);
207
+ break;
208
+ case "generic":
209
+ default:
210
+ conversations = parseGeneric(content, filePath);
211
+ break;
212
+ }
213
+ return { format, conversations };
214
+ }
215
+ function registerImportConversations(server) {
216
+ server.registerTool(
217
+ "import_conversations",
218
+ {
219
+ title: "Import Conversations",
220
+ description: "Import ChatGPT, Claude, or generic conversation exports into memory. Parses, extracts keywords + graph entities, stores with proper metadata. Deduplicates via content_hash. Supports JSON, markdown, and directory input.",
221
+ inputSchema: {
222
+ path: z.string().describe("File or directory path to import"),
223
+ format: z.enum(["chatgpt", "claude", "generic", "markdown", "auto"]).default("auto").describe("Source format (default: auto-detect)"),
224
+ project_name: z.string().optional().describe("Project name for imported memories"),
225
+ dry_run: z.boolean().default(false).describe("Parse and report counts without storing"),
226
+ force: z.boolean().default(false).describe("Override 50K memory cap"),
227
+ agent_id: z.string().optional().describe("Agent to attribute memories to (default: current agent)")
228
+ }
229
+ },
230
+ async ({ path: inputPath, format: requestedFormat, project_name, dry_run, force, agent_id: overrideAgentId }) => {
231
+ const { agentId: currentAgentId, agentRole } = getActiveAgent();
232
+ const agentId = overrideAgentId ?? currentAgentId;
233
+ const projectName = project_name ?? "imported";
234
+ let files;
235
+ try {
236
+ files = await readInputFiles(inputPath);
237
+ } catch (err) {
238
+ return {
239
+ content: [{ type: "text", text: `Error reading ${inputPath}: ${err instanceof Error ? err.message : String(err)}` }],
240
+ isError: true
241
+ };
242
+ }
243
+ if (files.length === 0) {
244
+ return {
245
+ content: [{ type: "text", text: `No importable files found at ${inputPath}` }],
246
+ isError: true
247
+ };
248
+ }
249
+ const allMemories = [];
250
+ let conversationCount = 0;
251
+ const formatCounts = {};
252
+ for (const file of files) {
253
+ const { format, conversations } = parseFile(file.content, file.path, requestedFormat);
254
+ formatCounts[format] = (formatCounts[format] ?? 0) + conversations.length;
255
+ conversationCount += conversations.length;
256
+ const memories = conversationsToMemories(conversations, format);
257
+ allMemories.push(...memories);
258
+ }
259
+ if (allMemories.length > DEFAULT_CAP && !force) {
260
+ return {
261
+ content: [{
262
+ type: "text",
263
+ text: `Import would create ${allMemories.length} memories (cap: ${DEFAULT_CAP}). Use force=true to override. Files: ${files.length}, Conversations: ${conversationCount}`
264
+ }],
265
+ isError: true
266
+ };
267
+ }
268
+ if (dry_run) {
269
+ const formatSummary2 = Object.entries(formatCounts).map(([f, c]) => `${f}: ${c}`).join(", ");
270
+ return {
271
+ content: [{
272
+ type: "text",
273
+ text: `[DRY RUN] Would import:
274
+ Files: ${files.length}
275
+ Conversations: ${conversationCount} (${formatSummary2})
276
+ Memories: ${allMemories.length}
277
+ Agent: ${agentId}
278
+ Project: ${projectName}`
279
+ }]
280
+ };
281
+ }
282
+ let stored = 0;
283
+ let skipped = 0;
284
+ let errors = 0;
285
+ for (let i = 0; i < allMemories.length; i++) {
286
+ const memory = allMemories[i];
287
+ try {
288
+ const keywords = extractKeywords(memory.text);
289
+ const keywordsStr = keywords.length > 0 ? keywords.join(" ") : null;
290
+ let entities = null;
291
+ try {
292
+ const graph = extractMemoryGraph(memory.text, agentId, projectName, "import_conversations");
293
+ if (graph.entities.length > 0) {
294
+ entities = JSON.stringify(graph.entities.map((e) => e.name));
295
+ }
296
+ } catch {
297
+ }
298
+ const id = crypto.randomUUID();
299
+ await writeMemory({
300
+ id,
301
+ agent_id: agentId,
302
+ agent_role: agentRole,
303
+ session_id: process.env.SESSION_ID ?? "import",
304
+ timestamp: memory.metadata.original_timestamp ?? (/* @__PURE__ */ new Date()).toISOString(),
305
+ tool_name: "import_conversations",
306
+ project_name: projectName,
307
+ has_error: false,
308
+ raw_text: memory.text,
309
+ vector: null,
310
+ // Backfill later
311
+ source_path: memory.metadata.source_path,
312
+ source_type: "import",
313
+ memory_type: "conversation",
314
+ tier: 3,
315
+ // Passive ingestion
316
+ importance: memory.metadata.role === "assistant" ? 5 : 4,
317
+ intent: "observation",
318
+ domain: projectName,
319
+ referenced_entities: entities,
320
+ keywords: keywordsStr,
321
+ valid_from: memory.metadata.original_timestamp ?? void 0
322
+ });
323
+ stored++;
324
+ } catch {
325
+ skipped++;
326
+ }
327
+ if ((i + 1) % YIELD_INTERVAL === 0) {
328
+ await flushBatch();
329
+ await new Promise((r) => setTimeout(r, 0));
330
+ if ((i + 1) % (YIELD_INTERVAL * 10) === 0) {
331
+ console.log(`[import] ${i + 1}/${allMemories.length} memories processed, ${stored} stored`);
332
+ }
333
+ }
334
+ }
335
+ await flushBatch();
336
+ const formatSummary = Object.entries(formatCounts).map(([f, c]) => `${f}: ${c}`).join(", ");
337
+ return {
338
+ content: [{
339
+ type: "text",
340
+ text: `Import complete.
341
+ Files: ${files.length}
342
+ Conversations: ${conversationCount} (${formatSummary})
343
+ Memories stored: ${stored}
344
+ Duplicates skipped: ${skipped}
345
+ Errors: ${errors}
346
+ Agent: ${agentId}
347
+ Project: ${projectName}`
348
+ }]
349
+ };
350
+ }
351
+ );
352
+ }
353
+
354
+ export {
355
+ registerImportConversations
356
+ };
@@ -0,0 +1,20 @@
1
+ import {
2
+ TmuxTransport
3
+ } from "./chunk-OYNKIAVW.js";
4
+
5
+ // src/lib/transport.ts
6
+ var _transport = null;
7
+ function getTransport() {
8
+ if (!_transport) {
9
+ _transport = new TmuxTransport();
10
+ }
11
+ return _transport;
12
+ }
13
+ function setTransport(t) {
14
+ _transport = t;
15
+ }
16
+
17
+ export {
18
+ getTransport,
19
+ setTransport
20
+ };
@@ -0,0 +1,42 @@
1
+ // src/lib/update-check.ts
2
+ import { execSync } from "child_process";
3
+ import { readFileSync } from "fs";
4
+ import path from "path";
5
+ function getLocalVersion(packageRoot) {
6
+ const pkgPath = path.join(packageRoot, "package.json");
7
+ const pkg = JSON.parse(readFileSync(pkgPath, "utf-8"));
8
+ return pkg.version;
9
+ }
10
+ function getRemoteVersion() {
11
+ try {
12
+ const output = execSync("npm view @askexenow/exe-os version", {
13
+ encoding: "utf-8",
14
+ timeout: 15e3,
15
+ stdio: ["pipe", "pipe", "pipe"]
16
+ });
17
+ return output.trim();
18
+ } catch {
19
+ return null;
20
+ }
21
+ }
22
+ function checkForUpdate(packageRoot) {
23
+ const localVersion = getLocalVersion(packageRoot);
24
+ const remoteVersion = getRemoteVersion();
25
+ if (!remoteVersion) {
26
+ return {
27
+ updateAvailable: false,
28
+ localVersion,
29
+ error: "Could not reach npm registry or package not published yet"
30
+ };
31
+ }
32
+ if (remoteVersion === localVersion) {
33
+ return { updateAvailable: false, localVersion, remoteVersion };
34
+ }
35
+ return { updateAvailable: true, localVersion, remoteVersion };
36
+ }
37
+
38
+ export {
39
+ getLocalVersion,
40
+ getRemoteVersion,
41
+ checkForUpdate
42
+ };
@@ -0,0 +1,134 @@
1
+ // src/gateway/adapters/discord.ts
2
+ var DiscordAdapter = class {
3
+ platform = "discord";
4
+ client = null;
5
+ messageHandler = null;
6
+ connected = false;
7
+ async connect(config) {
8
+ const { Client, GatewayIntentBits } = await import("discord.js");
9
+ const token = config.credentials.bot_token ?? config.credentials.token;
10
+ if (!token) {
11
+ throw new Error("Discord requires bot_token in credentials");
12
+ }
13
+ const discordClient = new Client({
14
+ intents: [
15
+ GatewayIntentBits.Guilds,
16
+ GatewayIntentBits.GuildMessages,
17
+ GatewayIntentBits.MessageContent,
18
+ GatewayIntentBits.DirectMessages
19
+ ]
20
+ });
21
+ this.client = discordClient;
22
+ discordClient.on("ready", () => {
23
+ this.connected = true;
24
+ console.log(`[discord] Connected as ${this.client?.user?.tag}`);
25
+ });
26
+ discordClient.on("messageCreate", async (msg) => {
27
+ const m = msg;
28
+ if (!this.messageHandler) return;
29
+ if (m.author.bot) return;
30
+ const isGroup = m.guild !== null;
31
+ const media = this.extractMedia(m);
32
+ const normalized = {
33
+ messageId: m.id,
34
+ platform: "discord",
35
+ senderId: m.author.id,
36
+ senderName: m.author.username,
37
+ channelId: m.channelId,
38
+ chatType: isGroup ? "group" : "direct",
39
+ text: m.content ?? "",
40
+ timestamp: m.createdAt.toISOString(),
41
+ threadId: m.thread?.id ?? (m.channel.isThread?.() ? m.channelId : void 0),
42
+ replyTo: m.reference ? {
43
+ messageId: m.reference.messageId ?? "",
44
+ text: "",
45
+ senderId: ""
46
+ } : void 0,
47
+ media,
48
+ raw: m
49
+ };
50
+ try {
51
+ await this.messageHandler(normalized);
52
+ } catch (err) {
53
+ console.error("[discord] Message handler error:", err);
54
+ }
55
+ });
56
+ await discordClient.login(token);
57
+ }
58
+ async disconnect() {
59
+ await this.client?.destroy();
60
+ this.client = null;
61
+ this.connected = false;
62
+ }
63
+ onMessage(handler) {
64
+ this.messageHandler = handler;
65
+ }
66
+ async sendText(channelId, text, options) {
67
+ if (!this.client || !this.connected) throw new Error("Discord not connected");
68
+ const channel = await this.client.channels.fetch(channelId);
69
+ if (!channel || !channel.send) {
70
+ throw new Error(`Discord channel ${channelId} not found or not text-based`);
71
+ }
72
+ await channel.send({
73
+ content: text,
74
+ ...options?.replyToMessageId ? { reply: { messageReference: options.replyToMessageId } } : {}
75
+ });
76
+ }
77
+ async sendTyping(channelId) {
78
+ if (!this.client || !this.connected) return;
79
+ try {
80
+ const channel = await this.client.channels.fetch(channelId);
81
+ if (channel?.sendTyping) {
82
+ await channel.sendTyping();
83
+ }
84
+ } catch {
85
+ }
86
+ }
87
+ async healthCheck() {
88
+ if (!this.client) return { connected: false };
89
+ return {
90
+ connected: this.connected,
91
+ latencyMs: (this.client.ws?.ping ?? -1) >= 0 ? this.client.ws.ping : void 0
92
+ };
93
+ }
94
+ /** Inject a raw Discord message payload from webhook server */
95
+ async injectMessage(rawPayload) {
96
+ if (!this.messageHandler) return;
97
+ const msg = rawPayload;
98
+ if (!msg.id || msg.author?.bot) return;
99
+ const isGroup = !!msg.guild_id;
100
+ const normalized = {
101
+ messageId: msg.id,
102
+ platform: "discord",
103
+ senderId: msg.author?.id ?? "",
104
+ senderName: msg.author?.username,
105
+ channelId: msg.channel_id ?? "",
106
+ chatType: isGroup ? "group" : "direct",
107
+ text: msg.content ?? "",
108
+ timestamp: msg.timestamp ? new Date(msg.timestamp).toISOString() : (/* @__PURE__ */ new Date()).toISOString(),
109
+ raw: rawPayload
110
+ };
111
+ try {
112
+ await this.messageHandler(normalized);
113
+ } catch (err) {
114
+ console.error("[discord] injectMessage handler error:", err);
115
+ }
116
+ }
117
+ extractMedia(msg) {
118
+ if (!msg.attachments?.size) return void 0;
119
+ const media = [];
120
+ for (const [, att] of msg.attachments) {
121
+ const ct = att.contentType ?? "";
122
+ let type = "document";
123
+ if (ct.startsWith("image/")) type = "image";
124
+ else if (ct.startsWith("video/")) type = "video";
125
+ else if (ct.startsWith("audio/")) type = "audio";
126
+ media.push({ type, url: att.url, fileName: att.name ?? void 0 });
127
+ }
128
+ return media.length > 0 ? media : void 0;
129
+ }
130
+ };
131
+
132
+ export {
133
+ DiscordAdapter
134
+ };