@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,399 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ connectEmbedDaemon,
4
+ embedViaClient
5
+ } from "../chunk-L24HYX62.js";
6
+ import "../chunk-YADYM2DE.js";
7
+ import {
8
+ flushBatch,
9
+ initStore,
10
+ writeMemory
11
+ } from "../chunk-HTCBLSIB.js";
12
+ import "../chunk-CHCA3ZM2.js";
13
+ import "../chunk-IW53DAYO.js";
14
+ import "../chunk-F7LU65PQ.js";
15
+ import "../chunk-MP2AFCGL.js";
16
+ import "../chunk-PWMMIGVQ.js";
17
+ import {
18
+ getClient,
19
+ isCoordinatorName
20
+ } from "../chunk-UJOSFVWG.js";
21
+ import "../chunk-QHIGMP2M.js";
22
+ import "../chunk-FXU7JOXK.js";
23
+ import "../chunk-7NNXBDOO.js";
24
+ import "../chunk-TNTFEWU5.js";
25
+ import "../chunk-LYH5HE24.js";
26
+ import {
27
+ isMainModule
28
+ } from "../chunk-6Y4B3QF6.js";
29
+ import "../chunk-R5U7XKVJ.js";
30
+
31
+ // src/bin/backfill-conversations.ts
32
+ import crypto from "crypto";
33
+ import { createReadStream } from "fs";
34
+ import { readdir, stat } from "fs/promises";
35
+ import path from "path";
36
+ import { createInterface } from "readline";
37
+ import { homedir } from "os";
38
+ import { parseArgs } from "util";
39
+ var TOOL_NAME = "backfill-conversation";
40
+ var MIN_MESSAGES = 3;
41
+ var MAX_SUMMARY_LENGTH = 4e3;
42
+ var MAX_WALK_DEPTH = 10;
43
+ async function findJsonlFiles(sinceDate, projectFilter) {
44
+ const projectsDir = path.join(homedir(), ".claude", "projects");
45
+ const files = [];
46
+ async function walk(dir, depth = 0) {
47
+ if (depth > MAX_WALK_DEPTH) return;
48
+ let entries;
49
+ try {
50
+ entries = await readdir(dir, { withFileTypes: true });
51
+ } catch {
52
+ return;
53
+ }
54
+ for (const entry of entries) {
55
+ const full = path.join(dir, entry.name);
56
+ if (entry.isDirectory()) {
57
+ if (entry.name === "subagents" || entry.name === "tool-results") continue;
58
+ await walk(full, depth + 1);
59
+ } else if (entry.name.endsWith(".jsonl")) {
60
+ try {
61
+ const s = await stat(full);
62
+ if (sinceDate && s.mtimeMs < sinceDate.getTime()) continue;
63
+ files.push(full);
64
+ } catch {
65
+ }
66
+ }
67
+ }
68
+ }
69
+ if (projectFilter) {
70
+ let projectDirs;
71
+ try {
72
+ projectDirs = await readdir(projectsDir, { withFileTypes: true });
73
+ } catch {
74
+ return files;
75
+ }
76
+ for (const entry of projectDirs) {
77
+ if (!entry.isDirectory()) continue;
78
+ const decoded = decodeProjectDir(entry.name);
79
+ if (decoded.toLowerCase().includes(projectFilter.toLowerCase())) {
80
+ await walk(path.join(projectsDir, entry.name));
81
+ }
82
+ }
83
+ } else {
84
+ await walk(projectsDir);
85
+ }
86
+ return files;
87
+ }
88
+ function decodeProjectDir(dirName) {
89
+ const homeEncoded = homedir().replaceAll("/", "-");
90
+ if (dirName.startsWith(homeEncoded + "-")) {
91
+ return dirName.slice(homeEncoded.length + 1);
92
+ }
93
+ if (dirName === homeEncoded) return "home";
94
+ return dirName;
95
+ }
96
+ function projectNameFromPath(filePath) {
97
+ const projectsDir = path.join(homedir(), ".claude", "projects");
98
+ const relative = path.relative(projectsDir, filePath);
99
+ const projectDir = relative.split(path.sep)[0] ?? "unknown";
100
+ return decodeProjectDir(projectDir);
101
+ }
102
+ async function parseConversation(filePath) {
103
+ const conv = {
104
+ sessionId: path.basename(filePath, ".jsonl"),
105
+ projectName: projectNameFromPath(filePath),
106
+ cwd: void 0,
107
+ startTime: void 0,
108
+ endTime: void 0,
109
+ userMessages: [],
110
+ toolCounts: {},
111
+ filesTouched: /* @__PURE__ */ new Set(),
112
+ errorCount: 0,
113
+ totalMessages: 0,
114
+ agentId: "default"
115
+ };
116
+ const rl = createInterface({
117
+ input: createReadStream(filePath, { encoding: "utf8" }),
118
+ crlfDelay: Infinity
119
+ });
120
+ for await (const line of rl) {
121
+ if (!line.trim()) continue;
122
+ let entry;
123
+ try {
124
+ entry = JSON.parse(line);
125
+ } catch {
126
+ continue;
127
+ }
128
+ if (entry.cwd && typeof entry.cwd === "string") {
129
+ conv.cwd = entry.cwd;
130
+ }
131
+ const ts = entry.timestamp;
132
+ if (ts) {
133
+ if (!conv.startTime || ts < conv.startTime) conv.startTime = ts;
134
+ if (!conv.endTime || ts > conv.endTime) conv.endTime = ts;
135
+ }
136
+ const entryType = entry.type;
137
+ if (entryType === "user") {
138
+ conv.totalMessages++;
139
+ const message = entry.message;
140
+ if (message?.content) {
141
+ const text = extractUserText(message.content);
142
+ if (text && text.length > 10) {
143
+ conv.userMessages.push(text);
144
+ }
145
+ }
146
+ } else if (entryType === "assistant") {
147
+ conv.totalMessages++;
148
+ const message = entry.message;
149
+ if (message?.content && Array.isArray(message.content)) {
150
+ for (const block of message.content) {
151
+ if (typeof block !== "object" || block === null) continue;
152
+ const b = block;
153
+ if (b.type === "tool_use") {
154
+ const toolName = b.name;
155
+ conv.toolCounts[toolName] = (conv.toolCounts[toolName] || 0) + 1;
156
+ const input = b.input;
157
+ if (input?.file_path && typeof input.file_path === "string") {
158
+ if (toolName === "Write" || toolName === "Edit") {
159
+ conv.filesTouched.add(input.file_path);
160
+ }
161
+ }
162
+ }
163
+ }
164
+ }
165
+ }
166
+ }
167
+ if (conv.cwd) {
168
+ conv.projectName = path.basename(conv.cwd);
169
+ const worktreeMatch = conv.cwd.match(/\.worktrees\/([^/]+)/);
170
+ if (worktreeMatch?.[1]) {
171
+ conv.agentId = worktreeMatch[1];
172
+ }
173
+ }
174
+ return conv;
175
+ }
176
+ function extractUserText(content) {
177
+ if (typeof content === "string") return content;
178
+ if (Array.isArray(content)) {
179
+ const parts = [];
180
+ for (const block of content) {
181
+ if (typeof block === "string") {
182
+ parts.push(block);
183
+ } else if (typeof block === "object" && block !== null) {
184
+ const b = block;
185
+ if (b.type === "text" && typeof b.text === "string") {
186
+ parts.push(b.text);
187
+ }
188
+ }
189
+ }
190
+ return parts.join("\n");
191
+ }
192
+ return "";
193
+ }
194
+ function buildSummary(conv) {
195
+ const parts = [];
196
+ parts.push(`Session: ${conv.sessionId}`);
197
+ parts.push(`Project: ${conv.projectName}`);
198
+ if (conv.startTime) {
199
+ parts.push(`Time: ${conv.startTime}${conv.endTime ? ` \u2192 ${conv.endTime}` : ""}`);
200
+ }
201
+ parts.push(`Messages: ${conv.totalMessages}`);
202
+ if (conv.agentId !== "default") {
203
+ parts.push(`Agent: ${conv.agentId}`);
204
+ }
205
+ parts.push("");
206
+ if (conv.userMessages.length > 0) {
207
+ parts.push("## What was asked");
208
+ const prompts = conv.userMessages.slice(0, 5);
209
+ for (const prompt of prompts) {
210
+ const truncated = prompt.length > 300 ? prompt.slice(0, 300) + "..." : prompt;
211
+ const cleaned = truncated.replace(/<system-reminder>[\s\S]*?<\/system-reminder>/g, "").trim();
212
+ if (cleaned) parts.push(`- ${cleaned}`);
213
+ }
214
+ if (conv.userMessages.length > 5) {
215
+ parts.push(`- ... and ${conv.userMessages.length - 5} more prompts`);
216
+ }
217
+ parts.push("");
218
+ }
219
+ const toolEntries = Object.entries(conv.toolCounts).sort((a, b) => b[1] - a[1]);
220
+ if (toolEntries.length > 0) {
221
+ parts.push("## Tools used");
222
+ for (const [tool, count] of toolEntries) {
223
+ parts.push(`- ${tool}: ${count}`);
224
+ }
225
+ parts.push("");
226
+ }
227
+ if (conv.filesTouched.size > 0) {
228
+ parts.push("## Files modified");
229
+ const fileList = [...conv.filesTouched].sort();
230
+ const shown = fileList.slice(0, 20);
231
+ for (const f of shown) {
232
+ parts.push(`- ${f}`);
233
+ }
234
+ if (fileList.length > 20) {
235
+ parts.push(`- ... and ${fileList.length - 20} more files`);
236
+ }
237
+ parts.push("");
238
+ }
239
+ if (conv.errorCount > 0) {
240
+ parts.push(`Errors: ${conv.errorCount}`);
241
+ }
242
+ let summary = parts.join("\n");
243
+ if (summary.length > MAX_SUMMARY_LENGTH) {
244
+ summary = summary.slice(0, MAX_SUMMARY_LENGTH);
245
+ }
246
+ return summary;
247
+ }
248
+ async function loadExistingSourcePaths() {
249
+ const client = getClient();
250
+ const paths = /* @__PURE__ */ new Set();
251
+ let offset = 0;
252
+ const batchSize = 500;
253
+ while (true) {
254
+ const result = await client.execute({
255
+ sql: `SELECT source_path FROM memories
256
+ WHERE tool_name = ? AND source_path IS NOT NULL
257
+ ORDER BY id LIMIT ? OFFSET ?`,
258
+ args: [TOOL_NAME, batchSize, offset]
259
+ });
260
+ if (result.rows.length === 0) break;
261
+ for (const row of result.rows) {
262
+ paths.add(row.source_path);
263
+ }
264
+ offset += batchSize;
265
+ }
266
+ return paths;
267
+ }
268
+ async function backfillConversations(options) {
269
+ const stats = {
270
+ filesScanned: 0,
271
+ conversationsStored: 0,
272
+ skippedDedup: 0,
273
+ skippedTooShort: 0,
274
+ embedFailed: 0
275
+ };
276
+ const sinceDate = options.since ? new Date(options.since) : void 0;
277
+ if (sinceDate && isNaN(sinceDate.getTime())) {
278
+ throw new Error(`Invalid --since date: ${options.since}`);
279
+ }
280
+ process.stderr.write("[backfill-conversations] Initializing store...\n");
281
+ await initStore();
282
+ let daemonConnected = false;
283
+ if (!options.dryRun) {
284
+ daemonConnected = await connectEmbedDaemon();
285
+ if (!daemonConnected) {
286
+ process.stderr.write(
287
+ "[backfill-conversations] WARNING: Daemon unavailable \u2014 vectors will be NULL (backfill-vectors can fix later)\n"
288
+ );
289
+ }
290
+ }
291
+ process.stderr.write("[backfill-conversations] Loading already-ingested conversations...\n");
292
+ const existingPaths = options.dryRun ? /* @__PURE__ */ new Set() : await loadExistingSourcePaths();
293
+ process.stderr.write(`[backfill-conversations] ${existingPaths.size} conversations already ingested
294
+ `);
295
+ const files = await findJsonlFiles(sinceDate, options.project);
296
+ process.stderr.write(`[backfill-conversations] Found ${files.length} JSONL files to process
297
+ `);
298
+ process.env.EXE_EMBED_PRIORITY = "low";
299
+ const BATCH_SIZE = 50;
300
+ const MAX_DEDUP_SIZE = 5e4;
301
+ for (let batchStart = 0; batchStart < files.length; batchStart += BATCH_SIZE) {
302
+ const batch = files.slice(batchStart, batchStart + BATCH_SIZE);
303
+ for (const file of batch) {
304
+ stats.filesScanned++;
305
+ if (existingPaths.size < MAX_DEDUP_SIZE && existingPaths.has(file)) {
306
+ stats.skippedDedup++;
307
+ continue;
308
+ }
309
+ const conv = await parseConversation(file);
310
+ if (conv.totalMessages < MIN_MESSAGES) {
311
+ stats.skippedTooShort++;
312
+ continue;
313
+ }
314
+ const summary = buildSummary(conv);
315
+ if (options.dryRun) {
316
+ process.stdout.write(`
317
+ \u2500\u2500\u2500 ${file} \u2500\u2500\u2500
318
+ `);
319
+ process.stdout.write(`Project: ${conv.projectName} | Messages: ${conv.totalMessages}`);
320
+ process.stdout.write(` | Tools: ${Object.keys(conv.toolCounts).length}`);
321
+ process.stdout.write(` | Files: ${conv.filesTouched.size}
322
+ `);
323
+ const firstPrompt = conv.userMessages[0];
324
+ if (firstPrompt) {
325
+ process.stdout.write(`First prompt: ${firstPrompt.slice(0, 120)}
326
+ `);
327
+ }
328
+ stats.conversationsStored++;
329
+ continue;
330
+ }
331
+ let vector = null;
332
+ if (daemonConnected) {
333
+ try {
334
+ vector = await embedViaClient(summary, "low");
335
+ if (!vector) stats.embedFailed++;
336
+ } catch {
337
+ stats.embedFailed++;
338
+ }
339
+ }
340
+ await writeMemory({
341
+ id: crypto.randomUUID(),
342
+ agent_id: conv.agentId,
343
+ agent_role: isCoordinatorName(conv.agentId) ? "COO" : "specialist",
344
+ session_id: conv.sessionId,
345
+ timestamp: conv.startTime ?? (/* @__PURE__ */ new Date()).toISOString(),
346
+ tool_name: TOOL_NAME,
347
+ project_name: conv.projectName,
348
+ has_error: conv.errorCount > 0,
349
+ raw_text: summary,
350
+ vector,
351
+ source_path: file,
352
+ source_type: "conversation"
353
+ });
354
+ if (existingPaths.size < MAX_DEDUP_SIZE) {
355
+ existingPaths.add(file);
356
+ }
357
+ stats.conversationsStored++;
358
+ if (stats.filesScanned % 50 === 0) {
359
+ process.stderr.write(
360
+ `[backfill-conversations] Progress: ${stats.filesScanned}/${files.length} files, ${stats.conversationsStored} stored
361
+ `
362
+ );
363
+ await flushBatch();
364
+ }
365
+ }
366
+ }
367
+ if (!options.dryRun) {
368
+ await flushBatch();
369
+ }
370
+ process.stderr.write(
371
+ `[backfill-conversations] Done. Scanned: ${stats.filesScanned}, Stored: ${stats.conversationsStored}, Dedup: ${stats.skippedDedup}, TooShort: ${stats.skippedTooShort}, EmbedFail: ${stats.embedFailed}
372
+ `
373
+ );
374
+ return stats;
375
+ }
376
+ if (isMainModule(import.meta.url)) {
377
+ const { values } = parseArgs({
378
+ options: {
379
+ since: { type: "string" },
380
+ project: { type: "string" },
381
+ "dry-run": { type: "boolean", default: false }
382
+ },
383
+ strict: true
384
+ });
385
+ backfillConversations({
386
+ since: values.since,
387
+ project: values.project,
388
+ dryRun: values["dry-run"]
389
+ }).then((result) => {
390
+ console.log(JSON.stringify(result, null, 2));
391
+ process.exit(0);
392
+ }).catch((err) => {
393
+ console.error("Backfill failed:", err instanceof Error ? err.message : String(err));
394
+ process.exit(1);
395
+ });
396
+ }
397
+ export {
398
+ backfillConversations
399
+ };
@@ -0,0 +1,227 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ connectEmbedDaemon,
4
+ embedViaClient
5
+ } from "../chunk-L24HYX62.js";
6
+ import "../chunk-YADYM2DE.js";
7
+ import {
8
+ flushBatch,
9
+ initStore,
10
+ writeMemory
11
+ } from "../chunk-HTCBLSIB.js";
12
+ import "../chunk-CHCA3ZM2.js";
13
+ import "../chunk-IW53DAYO.js";
14
+ import "../chunk-F7LU65PQ.js";
15
+ import "../chunk-MP2AFCGL.js";
16
+ import "../chunk-PWMMIGVQ.js";
17
+ import {
18
+ getClient,
19
+ isCoordinatorName
20
+ } from "../chunk-UJOSFVWG.js";
21
+ import "../chunk-QHIGMP2M.js";
22
+ import "../chunk-FXU7JOXK.js";
23
+ import "../chunk-7NNXBDOO.js";
24
+ import "../chunk-TNTFEWU5.js";
25
+ import "../chunk-LYH5HE24.js";
26
+ import {
27
+ isMainModule
28
+ } from "../chunk-6Y4B3QF6.js";
29
+ import "../chunk-R5U7XKVJ.js";
30
+
31
+ // src/bin/backfill-responses.ts
32
+ import crypto from "crypto";
33
+ import { createReadStream } from "fs";
34
+ import { readdir, stat } from "fs/promises";
35
+ import path from "path";
36
+ import { createInterface } from "readline";
37
+ import { homedir } from "os";
38
+ var MIN_LENGTH = 100;
39
+ var MAX_LENGTH = 5e3;
40
+ var SEVEN_DAYS_MS = 7 * 24 * 60 * 60 * 1e3;
41
+ process.env.EXE_EMBED_PRIORITY = "low";
42
+ var MAX_WALK_DEPTH = 10;
43
+ async function findRecentJsonlFiles() {
44
+ const projectsDir = path.join(homedir(), ".claude", "projects");
45
+ const cutoff = Date.now() - SEVEN_DAYS_MS;
46
+ const files = [];
47
+ async function walk(dir, depth = 0) {
48
+ if (depth > MAX_WALK_DEPTH) return;
49
+ let entries;
50
+ try {
51
+ entries = await readdir(dir, { withFileTypes: true });
52
+ } catch {
53
+ return;
54
+ }
55
+ for (const entry of entries) {
56
+ const full = path.join(dir, entry.name);
57
+ if (entry.isDirectory()) {
58
+ await walk(full, depth + 1);
59
+ } else if (entry.name.endsWith(".jsonl")) {
60
+ try {
61
+ const s = await stat(full);
62
+ if (s.mtimeMs >= cutoff) files.push(full);
63
+ } catch {
64
+ }
65
+ }
66
+ }
67
+ }
68
+ await walk(projectsDir);
69
+ return files;
70
+ }
71
+ function projectNameFromPath(filePath) {
72
+ const projectsDir = path.join(homedir(), ".claude", "projects");
73
+ const relative = path.relative(projectsDir, filePath);
74
+ const projectDir = relative.split(path.sep)[0] ?? "";
75
+ const homeEncoded = homedir().replaceAll("/", "-");
76
+ if (projectDir.startsWith(homeEncoded + "-")) {
77
+ return projectDir.slice(homeEncoded.length + 1);
78
+ }
79
+ if (projectDir === homeEncoded) return "home";
80
+ return projectDir;
81
+ }
82
+ function agentIdFromPath(filePath) {
83
+ return filePath.includes("/subagents/") ? "subagent" : "exe";
84
+ }
85
+ function extractText(content) {
86
+ const texts = [];
87
+ for (const block of content) {
88
+ if (typeof block === "object" && block !== null && block.type === "text" && "text" in block) {
89
+ texts.push(block.text);
90
+ }
91
+ }
92
+ return texts.join("\n");
93
+ }
94
+ function hashText(text) {
95
+ return crypto.createHash("sha256").update(text).digest("hex");
96
+ }
97
+ async function loadExistingHashes() {
98
+ const client = getClient();
99
+ const cutoff = new Date(Date.now() - SEVEN_DAYS_MS).toISOString();
100
+ const hashes = /* @__PURE__ */ new Set();
101
+ let offset = 0;
102
+ const batchSize = 500;
103
+ while (true) {
104
+ const result = await client.execute({
105
+ sql: `SELECT raw_text FROM memories
106
+ WHERE tool_name = 'AssistantResponse' AND timestamp > ?
107
+ ORDER BY id LIMIT ? OFFSET ?`,
108
+ args: [cutoff, batchSize, offset]
109
+ });
110
+ if (result.rows.length === 0) break;
111
+ for (const row of result.rows) {
112
+ hashes.add(hashText(row.raw_text));
113
+ }
114
+ offset += batchSize;
115
+ }
116
+ return hashes;
117
+ }
118
+ async function processFile(filePath, seenHashes, daemonConnected, stats) {
119
+ const fallbackProject = projectNameFromPath(filePath);
120
+ const agentId = agentIdFromPath(filePath);
121
+ let fileCwd;
122
+ const rl = createInterface({
123
+ input: createReadStream(filePath, { encoding: "utf8" }),
124
+ crlfDelay: Infinity
125
+ });
126
+ for await (const line of rl) {
127
+ if (!line.trim()) continue;
128
+ let entry;
129
+ try {
130
+ entry = JSON.parse(line);
131
+ } catch {
132
+ continue;
133
+ }
134
+ if (entry.cwd && typeof entry.cwd === "string") fileCwd = entry.cwd;
135
+ if (entry.type !== "assistant") continue;
136
+ const message = entry.message;
137
+ if (!message?.content || !Array.isArray(message.content)) continue;
138
+ const text = extractText(message.content);
139
+ if (text.length < MIN_LENGTH) {
140
+ stats.skippedShort++;
141
+ continue;
142
+ }
143
+ const truncated = text.length > MAX_LENGTH ? text.slice(0, MAX_LENGTH) : text;
144
+ const hash = hashText(truncated);
145
+ if (seenHashes.has(hash)) {
146
+ stats.skippedDedup++;
147
+ continue;
148
+ }
149
+ seenHashes.add(hash);
150
+ const resolvedProject = fileCwd ? path.basename(fileCwd) : fallbackProject;
151
+ let vector = null;
152
+ if (daemonConnected) {
153
+ try {
154
+ vector = await embedViaClient(truncated, "low");
155
+ if (!vector) stats.embedFailed++;
156
+ } catch {
157
+ stats.embedFailed++;
158
+ }
159
+ }
160
+ await writeMemory({
161
+ id: crypto.randomUUID(),
162
+ agent_id: agentId,
163
+ agent_role: isCoordinatorName(agentId) ? "COO" : "specialist",
164
+ session_id: entry.sessionId ?? "backfill",
165
+ timestamp: entry.timestamp ?? (/* @__PURE__ */ new Date()).toISOString(),
166
+ tool_name: "AssistantResponse",
167
+ project_name: resolvedProject,
168
+ has_error: false,
169
+ raw_text: truncated,
170
+ vector
171
+ });
172
+ stats.responsesStored++;
173
+ }
174
+ }
175
+ async function backfillResponses() {
176
+ const stats = {
177
+ filesProcessed: 0,
178
+ responsesStored: 0,
179
+ skippedDedup: 0,
180
+ skippedShort: 0,
181
+ embedFailed: 0
182
+ };
183
+ process.stderr.write("[backfill-responses] Initializing store...\n");
184
+ await initStore();
185
+ const daemonConnected = await connectEmbedDaemon();
186
+ if (!daemonConnected) {
187
+ process.stderr.write(
188
+ "[backfill-responses] WARNING: Daemon unavailable \u2014 vectors will be NULL (backfill-vectors can fix later)\n"
189
+ );
190
+ }
191
+ process.stderr.write("[backfill-responses] Loading existing response hashes for dedup...\n");
192
+ const seenHashes = await loadExistingHashes();
193
+ process.stderr.write(`[backfill-responses] ${seenHashes.size} existing responses loaded
194
+ `);
195
+ const files = await findRecentJsonlFiles();
196
+ process.stderr.write(`[backfill-responses] Found ${files.length} JSONL files from last 7 days
197
+ `);
198
+ for (const file of files) {
199
+ await processFile(file, seenHashes, daemonConnected, stats);
200
+ stats.filesProcessed++;
201
+ if (stats.filesProcessed % 20 === 0) {
202
+ process.stderr.write(
203
+ `[backfill-responses] Progress: ${stats.filesProcessed}/${files.length} files, ${stats.responsesStored} stored
204
+ `
205
+ );
206
+ await flushBatch();
207
+ }
208
+ }
209
+ await flushBatch();
210
+ process.stderr.write(
211
+ `[backfill-responses] Done. Files: ${stats.filesProcessed}, Stored: ${stats.responsesStored}, Dedup: ${stats.skippedDedup}, Short: ${stats.skippedShort}, EmbedFail: ${stats.embedFailed}
212
+ `
213
+ );
214
+ return stats;
215
+ }
216
+ if (isMainModule(import.meta.url)) {
217
+ backfillResponses().then((result) => {
218
+ console.log(JSON.stringify(result, null, 2));
219
+ process.exit(0);
220
+ }).catch((err) => {
221
+ console.error("Backfill failed:", err instanceof Error ? err.message : String(err));
222
+ process.exit(1);
223
+ });
224
+ }
225
+ export {
226
+ backfillResponses
227
+ };