@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,258 @@
1
+ // src/lib/message-queue.ts
2
+ var DEFAULT_MAX_SIZE = 1e3;
3
+ var DEFAULT_TTL_MS = 5 * 60 * 1e3;
4
+ var MessageQueue = class {
5
+ queue = [];
6
+ maxSize;
7
+ ttlMs;
8
+ constructor(maxSize = DEFAULT_MAX_SIZE, ttlMs = DEFAULT_TTL_MS) {
9
+ this.maxSize = maxSize;
10
+ this.ttlMs = ttlMs;
11
+ }
12
+ /** Add a message to the queue. Drops oldest if at capacity. */
13
+ enqueue(data) {
14
+ this.pruneExpired();
15
+ if (this.queue.length >= this.maxSize) {
16
+ process.stderr.write(`[msg-queue] Dropping oldest message (queue at ${this.maxSize} cap)
17
+ `);
18
+ this.queue.shift();
19
+ }
20
+ this.queue.push({ data, enqueuedAt: Date.now() });
21
+ }
22
+ /** Remove and return all queued messages (oldest first). Prunes expired entries. */
23
+ flush() {
24
+ this.pruneExpired();
25
+ const messages = this.queue.map((m) => m.data);
26
+ this.queue = [];
27
+ return messages;
28
+ }
29
+ /** Current number of queued (non-expired) messages. */
30
+ get size() {
31
+ this.pruneExpired();
32
+ return this.queue.length;
33
+ }
34
+ /** Remove all messages from the queue. */
35
+ clear() {
36
+ this.queue = [];
37
+ }
38
+ /** Remove messages whose TTL has expired. */
39
+ pruneExpired() {
40
+ const now = Date.now();
41
+ this.queue = this.queue.filter((m) => now - m.enqueuedAt < this.ttlMs);
42
+ }
43
+ };
44
+
45
+ // src/lib/gateway-client.ts
46
+ var MIN_RECONNECT_MS = 1e3;
47
+ var MAX_RECONNECT_MS = 3e4;
48
+ var AUTH_RESPONSE_TIMEOUT_MS = 5e3;
49
+ var DEFAULT_CHANNELS = ["all"];
50
+ var GATEWAY_EVENT_TYPES = /* @__PURE__ */ new Set([
51
+ "message_received",
52
+ "response_sent",
53
+ "agent_status",
54
+ "health",
55
+ "escalation"
56
+ ]);
57
+ function createGatewayClient(config) {
58
+ assertSecureWsUrl(config.url);
59
+ let ws = null;
60
+ let currentStatus = "disconnected";
61
+ let closed = false;
62
+ let reconnectDelay = MIN_RECONNECT_MS;
63
+ let reconnectTimer = null;
64
+ let authTimer = null;
65
+ const eventHandlers = /* @__PURE__ */ new Set();
66
+ const statusHandlers = /* @__PURE__ */ new Set();
67
+ const channels = config.channels ?? DEFAULT_CHANNELS;
68
+ const outboundQueue = new MessageQueue();
69
+ function setStatus(next) {
70
+ if (next === currentStatus) return;
71
+ currentStatus = next;
72
+ for (const handler of statusHandlers) {
73
+ handler(next);
74
+ }
75
+ }
76
+ function connect() {
77
+ if (closed) return;
78
+ setStatus("connecting");
79
+ try {
80
+ ws = new WebSocket(config.url);
81
+ ws.onopen = () => {
82
+ setStatus("authenticating");
83
+ sendRaw({ type: "auth", token: config.authTokenHex });
84
+ authTimer = setTimeout(() => {
85
+ if (currentStatus === "authenticating") {
86
+ ws?.close();
87
+ }
88
+ }, AUTH_RESPONSE_TIMEOUT_MS);
89
+ };
90
+ ws.onmessage = (event) => {
91
+ const data = typeof event.data === "string" ? event.data : String(event.data);
92
+ handleMessage(data);
93
+ };
94
+ ws.onclose = () => {
95
+ clearAuthTimer();
96
+ if (!closed) {
97
+ setStatus("reconnecting");
98
+ scheduleReconnect();
99
+ } else {
100
+ setStatus("disconnected");
101
+ }
102
+ };
103
+ ws.onerror = () => {
104
+ };
105
+ } catch {
106
+ setStatus("reconnecting");
107
+ scheduleReconnect();
108
+ }
109
+ }
110
+ function handleMessage(raw) {
111
+ let msg;
112
+ try {
113
+ msg = JSON.parse(raw);
114
+ } catch {
115
+ return;
116
+ }
117
+ if (msg.type === "auth" && msg.status === "ok") {
118
+ clearAuthTimer();
119
+ reconnectDelay = MIN_RECONNECT_MS;
120
+ setStatus("connected");
121
+ if (channels.length > 0) {
122
+ sendRaw({ type: "subscribe", channels });
123
+ }
124
+ const queued = outboundQueue.flush();
125
+ for (const data of queued) {
126
+ try {
127
+ ws?.send(data);
128
+ } catch {
129
+ }
130
+ }
131
+ return;
132
+ }
133
+ if (msg.type === "error" && currentStatus === "authenticating") {
134
+ clearAuthTimer();
135
+ ws?.close();
136
+ return;
137
+ }
138
+ if (msg.type === "ping") {
139
+ sendRaw({ type: "pong" });
140
+ return;
141
+ }
142
+ if (currentStatus === "connected" && isGatewayEvent(msg)) {
143
+ for (const handler of eventHandlers) {
144
+ handler(msg);
145
+ }
146
+ }
147
+ }
148
+ function sendRaw(data) {
149
+ if (ws?.readyState === WebSocket.OPEN) {
150
+ try {
151
+ ws.send(JSON.stringify(data));
152
+ } catch {
153
+ }
154
+ }
155
+ }
156
+ function scheduleReconnect() {
157
+ if (closed || reconnectTimer) return;
158
+ reconnectTimer = setTimeout(() => {
159
+ reconnectTimer = null;
160
+ reconnectDelay = Math.min(reconnectDelay * 2, MAX_RECONNECT_MS);
161
+ connect();
162
+ }, reconnectDelay);
163
+ }
164
+ function clearAuthTimer() {
165
+ if (authTimer) {
166
+ clearTimeout(authTimer);
167
+ authTimer = null;
168
+ }
169
+ }
170
+ connect();
171
+ return {
172
+ get status() {
173
+ return currentStatus;
174
+ },
175
+ get queueSize() {
176
+ return outboundQueue.size;
177
+ },
178
+ send(data) {
179
+ const serialized = JSON.stringify(data);
180
+ if (currentStatus === "connected" && ws?.readyState === WebSocket.OPEN) {
181
+ try {
182
+ ws.send(serialized);
183
+ } catch {
184
+ outboundQueue.enqueue(serialized);
185
+ }
186
+ } else {
187
+ outboundQueue.enqueue(serialized);
188
+ }
189
+ },
190
+ onEvent(handler) {
191
+ eventHandlers.add(handler);
192
+ return () => {
193
+ eventHandlers.delete(handler);
194
+ };
195
+ },
196
+ onStatusChange(handler) {
197
+ statusHandlers.add(handler);
198
+ return () => {
199
+ statusHandlers.delete(handler);
200
+ };
201
+ },
202
+ close() {
203
+ closed = true;
204
+ clearAuthTimer();
205
+ outboundQueue.clear();
206
+ if (reconnectTimer) {
207
+ clearTimeout(reconnectTimer);
208
+ reconnectTimer = null;
209
+ }
210
+ if (ws) {
211
+ try {
212
+ ws.close();
213
+ } catch {
214
+ }
215
+ ws = null;
216
+ }
217
+ setStatus("disconnected");
218
+ }
219
+ };
220
+ }
221
+ async function connectGateway(url) {
222
+ const { getMasterKey } = await import("./lib/keychain.js");
223
+ const { deriveWsAuthToken } = await import("./lib/ws-auth.js");
224
+ const masterKey = await getMasterKey();
225
+ if (!masterKey) return null;
226
+ const token = deriveWsAuthToken(masterKey);
227
+ return createGatewayClient({
228
+ url,
229
+ authTokenHex: token.toString("hex")
230
+ });
231
+ }
232
+ var LOCALHOST_PATTERNS = /^(localhost|127\.0\.0\.1|\[::1\])$/i;
233
+ function assertSecureWsUrl(url) {
234
+ if (url.startsWith("wss://")) return;
235
+ if (url.startsWith("ws://")) {
236
+ let parsed;
237
+ try {
238
+ parsed = new URL(url);
239
+ } catch {
240
+ throw new Error(
241
+ `Malformed WebSocket URL rejected: "${url}".`
242
+ );
243
+ }
244
+ if (LOCALHOST_PATTERNS.test(parsed.hostname)) return;
245
+ throw new Error(
246
+ `Insecure WebSocket URL rejected: "${url}". Use wss:// for remote hosts. Plain ws:// is only allowed for localhost.`
247
+ );
248
+ }
249
+ }
250
+ function isGatewayEvent(msg) {
251
+ return typeof msg.type === "string" && GATEWAY_EVENT_TYPES.has(msg.type);
252
+ }
253
+
254
+ export {
255
+ createGatewayClient,
256
+ connectGateway,
257
+ assertSecureWsUrl
258
+ };
@@ -0,0 +1,85 @@
1
+ import {
2
+ deactivateBehavior
3
+ } from "./chunk-7DNX45WB.js";
4
+ import {
5
+ getActiveAgent
6
+ } from "./chunk-DLXTKVBO.js";
7
+ import {
8
+ canCoordinate,
9
+ getClient
10
+ } from "./chunk-UJOSFVWG.js";
11
+
12
+ // src/mcp/tools/deactivate-behavior.ts
13
+ import { z } from "zod";
14
+ function registerDeactivateBehavior(server) {
15
+ server.registerTool(
16
+ "deactivate_behavior",
17
+ {
18
+ title: "Deactivate Behavior",
19
+ description: "Soft-delete a behavior by setting active = 0. RESTRICTED: only coordinator or founder sessions can use this. Use list_behaviors to find the behavior ID first.",
20
+ inputSchema: {
21
+ behavior_id: z.string().describe("UUID of the behavior to deactivate")
22
+ }
23
+ },
24
+ async ({ behavior_id }) => {
25
+ const caller = getActiveAgent();
26
+ try {
27
+ const { StewardGate } = await import("./steward-gate-6IKH335D.js");
28
+ const steward = new StewardGate();
29
+ const gateDecision = await steward.checkAuthority(caller.agentId || "unknown", "deactivate_behavior", behavior_id);
30
+ if (!gateDecision.allowed) {
31
+ return { content: [{ type: "text", text: `Steward gate denied: ${gateDecision.reason}` }], isError: true };
32
+ }
33
+ } catch {
34
+ }
35
+ const allowed = canCoordinate(caller.agentId, caller.agentRole);
36
+ if (!allowed) {
37
+ return {
38
+ content: [{
39
+ type: "text",
40
+ text: `Permission denied. Only the coordinator or founder sessions can deactivate behaviors. You are "${caller.agentId}".`
41
+ }],
42
+ isError: true
43
+ };
44
+ }
45
+ const client = getClient();
46
+ const result = await client.execute({
47
+ sql: `SELECT id, agent_id, content, domain, priority FROM behaviors WHERE id = ?`,
48
+ args: [behavior_id]
49
+ });
50
+ if (result.rows.length === 0) {
51
+ return {
52
+ content: [{
53
+ type: "text",
54
+ text: `Behavior not found: ${behavior_id}`
55
+ }],
56
+ isError: true
57
+ };
58
+ }
59
+ const row = result.rows[0];
60
+ const wasActive = await deactivateBehavior(behavior_id);
61
+ if (!wasActive) {
62
+ return {
63
+ content: [{
64
+ type: "text",
65
+ text: `Behavior ${behavior_id} was already inactive.`
66
+ }]
67
+ };
68
+ }
69
+ return {
70
+ content: [{
71
+ type: "text",
72
+ text: `Deactivated behavior for ${row.agent_id}.
73
+ ID: ${row.id}
74
+ Domain: ${row.domain ?? "none"}
75
+ Priority: ${row.priority}
76
+ Content: ${row.content}`
77
+ }]
78
+ };
79
+ }
80
+ );
81
+ }
82
+
83
+ export {
84
+ registerDeactivateBehavior
85
+ };
@@ -0,0 +1,207 @@
1
+ // src/lib/graph-export.ts
2
+ async function loadGraphData(client) {
3
+ const entityResult = await client.execute(`
4
+ SELECT e.id, e.name, e.type,
5
+ (SELECT COUNT(*) FROM relationships r WHERE r.source_entity_id = e.id OR r.target_entity_id = e.id) as degree
6
+ FROM entities e
7
+ ORDER BY degree DESC
8
+ `);
9
+ const nodes = entityResult.rows.map((row) => ({
10
+ id: String(row.id),
11
+ label: String(row.name),
12
+ type: String(row.type),
13
+ degree: Number(row.degree ?? 0)
14
+ }));
15
+ const relResult = await client.execute(`
16
+ SELECT source_entity_id, target_entity_id, type, weight,
17
+ COALESCE(confidence, 1.0) as confidence,
18
+ COALESCE(confidence_label, 'extracted') as confidence_label
19
+ FROM relationships
20
+ `);
21
+ const edges = relResult.rows.map((row) => ({
22
+ from: String(row.source_entity_id),
23
+ to: String(row.target_entity_id),
24
+ label: String(row.type),
25
+ weight: Number(row.weight),
26
+ confidence: Number(row.confidence),
27
+ confidenceLabel: String(row.confidence_label)
28
+ }));
29
+ return { nodes, edges };
30
+ }
31
+ function detectCommunities(nodes, edges) {
32
+ const communities = /* @__PURE__ */ new Map();
33
+ nodes.forEach((n, i) => communities.set(n.id, i));
34
+ const adjacency = /* @__PURE__ */ new Map();
35
+ for (const e of edges) {
36
+ if (!adjacency.has(e.from)) adjacency.set(e.from, []);
37
+ if (!adjacency.has(e.to)) adjacency.set(e.to, []);
38
+ adjacency.get(e.from).push(e.to);
39
+ adjacency.get(e.to).push(e.from);
40
+ }
41
+ for (let iter = 0; iter < 5; iter++) {
42
+ for (const node of nodes) {
43
+ const neighbors = adjacency.get(node.id) ?? [];
44
+ if (neighbors.length === 0) continue;
45
+ const counts = /* @__PURE__ */ new Map();
46
+ for (const n of neighbors) {
47
+ const c = communities.get(n) ?? 0;
48
+ counts.set(c, (counts.get(c) ?? 0) + 1);
49
+ }
50
+ let maxCount = 0;
51
+ let maxCommunity = communities.get(node.id) ?? 0;
52
+ for (const [c, count] of counts) {
53
+ if (count > maxCount) {
54
+ maxCount = count;
55
+ maxCommunity = c;
56
+ }
57
+ }
58
+ communities.set(node.id, maxCommunity);
59
+ }
60
+ }
61
+ return communities;
62
+ }
63
+ var TYPE_COLORS = {
64
+ person: "#F5D76E",
65
+ project: "#6B4C9A",
66
+ tool: "#22C55E",
67
+ decision: "#EF4444",
68
+ concept: "#3B82F6",
69
+ file: "#6B7280",
70
+ rationale: "#F97316"
71
+ };
72
+ async function exportGraphHTML(client, projectName) {
73
+ const { nodes, edges } = await loadGraphData(client);
74
+ if (nodes.length === 0) return "<html><body>No graph data.</body></html>";
75
+ const communities = detectCommunities(nodes, edges);
76
+ for (const node of nodes) {
77
+ node.community = communities.get(node.id) ?? 0;
78
+ }
79
+ const visNodes = nodes.map((n) => ({
80
+ id: n.id,
81
+ label: n.label,
82
+ size: Math.max(10, Math.min(50, n.degree * 5)),
83
+ color: TYPE_COLORS[n.type] ?? "#999",
84
+ title: `${n.label} (${n.type})
85
+ Degree: ${n.degree}
86
+ Community: ${n.community}`,
87
+ group: n.type
88
+ }));
89
+ const visEdges = edges.map((e, i) => ({
90
+ id: `e${i}`,
91
+ from: e.from,
92
+ to: e.to,
93
+ label: e.label,
94
+ width: Math.max(1, e.weight),
95
+ color: e.confidenceLabel === "ambiguous" ? "#EF4444" : e.confidenceLabel === "inferred" ? "#F59E0B" : "#6B7280",
96
+ title: `${e.label} (confidence: ${e.confidence.toFixed(1)}, ${e.confidenceLabel})`
97
+ }));
98
+ const title = projectName ? `${projectName} Knowledge Graph` : "exe-os Knowledge Graph";
99
+ return `<!DOCTYPE html>
100
+ <html>
101
+ <head>
102
+ <title>${title}</title>
103
+ <style>
104
+ body { margin: 0; background: #0F0E1A; color: #F0EDE8; font-family: 'Manrope', sans-serif; }
105
+ #graph { width: 100%; height: 80vh; border: 1px solid #3D3660; }
106
+ #sidebar { padding: 16px; background: #1A1830; }
107
+ #search { width: 300px; padding: 8px; background: #2A2840; color: #F0EDE8; border: 1px solid #3D3660; border-radius: 4px; margin: 8px; }
108
+ .stat { color: #6B4C9A; margin: 4px 8px; }
109
+ h1 { color: #F5D76E; margin: 8px; font-size: 1.5em; }
110
+ .legend { display: flex; gap: 12px; margin: 8px; flex-wrap: wrap; }
111
+ .legend-item { display: flex; align-items: center; gap: 4px; font-size: 0.85em; }
112
+ .legend-dot { width: 10px; height: 10px; border-radius: 50%; }
113
+ </style>
114
+ <script src="https://unpkg.com/vis-network@9.1.9/standalone/umd/vis-network.min.js"></script>
115
+ </head>
116
+ <body>
117
+ <div id="sidebar">
118
+ <h1>${title}</h1>
119
+ <input id="search" placeholder="Search entities..." oninput="filterGraph(this.value)">
120
+ <div class="legend">
121
+ ${Object.entries(TYPE_COLORS).map(
122
+ ([type, color]) => `<span class="legend-item"><span class="legend-dot" style="background:${color}"></span>${type}</span>`
123
+ ).join("")}
124
+ </div>
125
+ <span class="stat">${nodes.length} nodes</span>
126
+ <span class="stat">${edges.length} edges</span>
127
+ </div>
128
+ <div id="graph"></div>
129
+ <script>
130
+ var nodes = new vis.DataSet(${JSON.stringify(visNodes)});
131
+ var edges = new vis.DataSet(${JSON.stringify(visEdges)});
132
+ var container = document.getElementById('graph');
133
+ var network = new vis.Network(container, {nodes: nodes, edges: edges}, {
134
+ physics: { solver: 'forceAtlas2Based', forceAtlas2Based: { gravitationalConstant: -50 } },
135
+ edges: { arrows: 'to', font: { size: 9, color: '#6B4C9A' } },
136
+ nodes: { font: { color: '#F0EDE8' }, shape: 'dot' },
137
+ interaction: { hover: true, tooltipDelay: 100 }
138
+ });
139
+ function filterGraph(query) {
140
+ if (!query) { nodes.forEach(function(n) { nodes.update({id: n.id, hidden: false}); }); return; }
141
+ var q = query.toLowerCase();
142
+ nodes.forEach(function(n) { nodes.update({id: n.id, hidden: !n.label.toLowerCase().includes(q)}); });
143
+ }
144
+ </script>
145
+ </body>
146
+ </html>`;
147
+ }
148
+ async function generateGraphReport(client, projectName) {
149
+ const { nodes, edges } = await loadGraphData(client);
150
+ if (nodes.length === 0) return "# Graph Report\n\nNo graph data yet. Run graph extraction first.";
151
+ const communities = detectCommunities(nodes, edges);
152
+ for (const node of nodes) {
153
+ node.community = communities.get(node.id) ?? 0;
154
+ }
155
+ const godNodes = [...nodes].sort((a, b) => b.degree - a.degree).slice(0, 10);
156
+ const communityMap = /* @__PURE__ */ new Map();
157
+ for (const node of nodes) {
158
+ const c = node.community ?? 0;
159
+ if (!communityMap.has(c)) communityMap.set(c, []);
160
+ communityMap.get(c).push(node);
161
+ }
162
+ const topCommunities = [...communityMap.entries()].sort((a, b) => b[1].length - a[1].length).slice(0, 10);
163
+ const ambiguous = edges.filter((e) => e.confidenceLabel === "ambiguous");
164
+ const crossCommunity = edges.filter((e) => {
165
+ const fromC = communities.get(e.from);
166
+ const toC = communities.get(e.to);
167
+ return fromC !== void 0 && toC !== void 0 && fromC !== toC;
168
+ }).slice(0, 10);
169
+ let hyperedgeCount = 0;
170
+ try {
171
+ const result = await client.execute("SELECT COUNT(*) as cnt FROM hyperedges");
172
+ hyperedgeCount = Number(result.rows[0]?.cnt ?? 0);
173
+ } catch {
174
+ }
175
+ const nodeLabels = new Map(nodes.map((n) => [n.id, n.label]));
176
+ const lines = [
177
+ `# Knowledge Graph Report${projectName ? ` \u2014 ${projectName}` : ""}`,
178
+ "",
179
+ `Generated: ${(/* @__PURE__ */ new Date()).toISOString().split("T")[0]}`,
180
+ "",
181
+ "## Stats",
182
+ `- **Nodes:** ${nodes.length}`,
183
+ `- **Edges:** ${edges.length}`,
184
+ `- **Hyperedges:** ${hyperedgeCount}`,
185
+ `- **Communities:** ${communityMap.size}`,
186
+ "",
187
+ "## God Nodes (highest connectivity)",
188
+ ...godNodes.map((n) => `- **${n.label}** (${n.type}) \u2014 ${n.degree} connections`),
189
+ "",
190
+ "## Communities",
191
+ ...topCommunities.map(
192
+ ([id, members]) => `- **Community ${id}** (${members.length} nodes): ${members.slice(0, 8).map((m) => m.label).join(", ")}${members.length > 8 ? "\u2026" : ""}`
193
+ ),
194
+ "",
195
+ "## Cross-Community Connections",
196
+ crossCommunity.length > 0 ? crossCommunity.map((e) => `- ${nodeLabels.get(e.from) ?? e.from} \u2192[${e.label}]\u2192 ${nodeLabels.get(e.to) ?? e.to}`).join("\n") : "None detected",
197
+ "",
198
+ "## Open Questions (ambiguous edges)",
199
+ ambiguous.length > 0 ? ambiguous.map((e) => `- [${e.confidence.toFixed(1)}] ${nodeLabels.get(e.from) ?? e.from} \u2192[${e.label}]\u2192 ${nodeLabels.get(e.to) ?? e.to}`).join("\n") : "No ambiguous edges"
200
+ ];
201
+ return lines.join("\n");
202
+ }
203
+
204
+ export {
205
+ exportGraphHTML,
206
+ generateGraphReport
207
+ };
@@ -0,0 +1,132 @@
1
+ // src/lib/typed-messages.ts
2
+ function parseMessage(content) {
3
+ try {
4
+ const parsed = JSON.parse(content);
5
+ if (parsed && typeof parsed === "object" && parsed.v === 1 && typeof parsed.type === "string") {
6
+ return parsed;
7
+ }
8
+ } catch {
9
+ }
10
+ return { type: "legacy", text: content };
11
+ }
12
+ function isTypedMessage(msg) {
13
+ return msg.type !== "legacy" && "v" in msg;
14
+ }
15
+ function buildTaskResult(opts) {
16
+ return {
17
+ v: 1,
18
+ type: "task_result",
19
+ ts: (/* @__PURE__ */ new Date()).toISOString(),
20
+ from: opts.from,
21
+ payload: {
22
+ task_id: opts.task_id,
23
+ summary: opts.summary,
24
+ files_changed: opts.files_changed ?? [],
25
+ decisions: opts.decisions ?? [],
26
+ open_questions: opts.open_questions ?? [],
27
+ pr_number: opts.pr_number,
28
+ commits: opts.commits ?? [],
29
+ tests: opts.tests ?? "none",
30
+ build: opts.build ?? "skip"
31
+ }
32
+ };
33
+ }
34
+ function buildTypedMessage(opts) {
35
+ return {
36
+ v: 1,
37
+ type: opts.type,
38
+ ts: (/* @__PURE__ */ new Date()).toISOString(),
39
+ from: opts.from,
40
+ payload: opts.payload
41
+ };
42
+ }
43
+ function serializeMessage(msg) {
44
+ return JSON.stringify(msg);
45
+ }
46
+ var TYPE_BADGES = {
47
+ task_result: "\u{1F4CB} TASK RESULT",
48
+ status_update: "\u{1F4CA} STATUS UPDATE",
49
+ question: "\u2753 QUESTION",
50
+ blocker: "\u{1F6AB} BLOCKER",
51
+ handoff: "\u{1F91D} HANDOFF",
52
+ review_request: "\u{1F4DD} REVIEW REQUEST"
53
+ };
54
+ function formatTypedMessage(msg) {
55
+ const badge = TYPE_BADGES[msg.type] ?? msg.type.toUpperCase();
56
+ const lines = [`[${badge}] from ${msg.from} at ${msg.ts}`];
57
+ switch (msg.type) {
58
+ case "task_result": {
59
+ const p = msg.payload;
60
+ lines.push(`Summary: ${p.summary}`);
61
+ if (p.files_changed.length > 0)
62
+ lines.push(`Files: ${p.files_changed.join(", ")}`);
63
+ if (p.decisions.length > 0)
64
+ lines.push(`Decisions: ${p.decisions.join("; ")}`);
65
+ if (p.commits.length > 0)
66
+ lines.push(`Commits: ${p.commits.join(", ")}`);
67
+ lines.push(`Tests: ${p.tests} | Build: ${p.build}`);
68
+ if (p.pr_number) lines.push(`PR: #${p.pr_number}`);
69
+ if (p.open_questions.length > 0)
70
+ lines.push(`Open questions: ${p.open_questions.join("; ")}`);
71
+ break;
72
+ }
73
+ case "status_update": {
74
+ const p = msg.payload;
75
+ lines.push(`Task: ${p.task_id} | Progress: ${p.progress_pct}%`);
76
+ lines.push(`Current step: ${p.current_step}`);
77
+ if (p.blockers.length > 0)
78
+ lines.push(`Blockers: ${p.blockers.join("; ")}`);
79
+ if (p.eta_minutes) lines.push(`ETA: ${p.eta_minutes}min`);
80
+ break;
81
+ }
82
+ case "question": {
83
+ const p = msg.payload;
84
+ lines.push(`Question: ${p.question}`);
85
+ lines.push(`Context: ${p.context}`);
86
+ if (p.options?.length) lines.push(`Options: ${p.options.join(" | ")}`);
87
+ break;
88
+ }
89
+ case "blocker": {
90
+ const p = msg.payload;
91
+ lines.push(`Task: ${p.task_id} | Severity: ${p.severity}`);
92
+ lines.push(`Blocker: ${p.blocker}`);
93
+ lines.push(`Needs action from: ${p.needs_action_from}`);
94
+ if (p.attempted.length > 0)
95
+ lines.push(`Attempted: ${p.attempted.join("; ")}`);
96
+ break;
97
+ }
98
+ case "handoff": {
99
+ const p = msg.payload;
100
+ lines.push(`From task: ${p.from_task_id}`);
101
+ if (p.to_task_id) lines.push(`To task: ${p.to_task_id}`);
102
+ lines.push(`Done: ${p.context.what_was_done}`);
103
+ lines.push(`Needs: ${p.context.what_needs_doing}`);
104
+ if (p.context.key_files.length > 0)
105
+ lines.push(`Key files: ${p.context.key_files.join(", ")}`);
106
+ if (p.context.pitfalls.length > 0)
107
+ lines.push(`Pitfalls: ${p.context.pitfalls.join("; ")}`);
108
+ break;
109
+ }
110
+ case "review_request": {
111
+ const p = msg.payload;
112
+ lines.push(`Summary: ${p.summary}`);
113
+ if (p.files_changed.length > 0)
114
+ lines.push(`Files: ${p.files_changed.join(", ")}`);
115
+ lines.push(`Tests: ${p.tests_status} | Build: ${p.build_status}`);
116
+ if (p.pr_number) lines.push(`PR: #${p.pr_number}`);
117
+ if (p.review_focus.length > 0)
118
+ lines.push(`Focus: ${p.review_focus.join("; ")}`);
119
+ break;
120
+ }
121
+ }
122
+ return lines.join("\n");
123
+ }
124
+
125
+ export {
126
+ parseMessage,
127
+ isTypedMessage,
128
+ buildTaskResult,
129
+ buildTypedMessage,
130
+ serializeMessage,
131
+ formatTypedMessage
132
+ };
File without changes