@ken-jo/agent-connector 0.5.0 → 0.6.1

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 (236) hide show
  1. package/README.md +9 -6
  2. package/dist/{action-LEYTHNIU.js → action-BCD2GOJA.js} +8 -8
  3. package/dist/{amazon-q-7DPVJXJN.js → amazon-q-KCNHU3BI.js} +2 -2
  4. package/dist/{amp-VYXZWHXW.js → amp-HI6CGN36.js} +2 -2
  5. package/dist/{amp-BQZOL5GR.js → amp-NDP2J4K3.js} +2 -2
  6. package/dist/{antigravity-EA4L225L.js → antigravity-FY5553OR.js} +2 -2
  7. package/dist/{antigravity-VXHL6ZPM.js → antigravity-I2L4WSJN.js} +3 -3
  8. package/dist/{antigravity-cli-B2HXZFYQ.js → antigravity-cli-IUAE3SEX.js} +2 -2
  9. package/dist/{antigravity-cli-JHQ7JGNX.js → antigravity-cli-T24Y54NG.js} +3 -3
  10. package/dist/{audit-HPKCUCES.js → audit-F47H2PLT.js} +5 -5
  11. package/dist/{chunk-O7SDRBVB.js → chunk-6ZZQXEL7.js} +2 -1
  12. package/dist/{chunk-O7SDRBVB.js.map → chunk-6ZZQXEL7.js.map} +1 -1
  13. package/dist/{chunk-IRUYJD23.js → chunk-AN7QCLT7.js} +27 -33
  14. package/dist/chunk-AN7QCLT7.js.map +1 -0
  15. package/dist/{chunk-BXPSDNIB.js → chunk-BD72ZF6D.js} +2 -2
  16. package/dist/{chunk-M6OS4OLU.js → chunk-BGPVMJOG.js} +2 -2
  17. package/dist/{chunk-2Y2MZRLP.js → chunk-CWUPIT72.js} +2 -2
  18. package/dist/{chunk-FKW5A6HE.js → chunk-HUL5CRF2.js} +4 -4
  19. package/dist/{chunk-SFY6YLVK.js → chunk-K67UJSJI.js} +5 -6
  20. package/dist/{chunk-SFY6YLVK.js.map → chunk-K67UJSJI.js.map} +1 -1
  21. package/dist/{chunk-UM5S7DKK.js → chunk-KOFCNA5T.js} +11 -2
  22. package/dist/{chunk-UM5S7DKK.js.map → chunk-KOFCNA5T.js.map} +1 -1
  23. package/dist/{chunk-WZMSSIDN.js → chunk-LO6NIZSL.js} +14 -6
  24. package/dist/chunk-LO6NIZSL.js.map +1 -0
  25. package/dist/{chunk-6WN37NVN.js → chunk-O7CFTOM5.js} +2 -2
  26. package/dist/{chunk-4KIXXJ7B.js → chunk-OXANBA4I.js} +2 -2
  27. package/dist/{chunk-JTN3AKZO.js → chunk-PMOFA5BT.js} +12 -5
  28. package/dist/chunk-PMOFA5BT.js.map +1 -0
  29. package/dist/{chunk-G5HAIYRM.js → chunk-QG26JEJF.js} +66 -58
  30. package/dist/chunk-QG26JEJF.js.map +1 -0
  31. package/dist/{chunk-U2XJWG7N.js → chunk-STR3CRH3.js} +4 -4
  32. package/dist/{chunk-6XMV2OOA.js → chunk-W4GVN3TJ.js} +3 -3
  33. package/dist/{chunk-PWCBWAM4.js → chunk-W67GINTF.js} +2 -2
  34. package/dist/{chunk-XY3N2U6L.js → chunk-WAALPWR4.js} +2 -2
  35. package/dist/{chunk-4QXCNZMD.js → chunk-X2XEE4DO.js} +2 -2
  36. package/dist/{chunk-T5AI3AW3.js → chunk-ZHG7Q424.js} +19 -19
  37. package/dist/{claude-code-LJ6DVXWQ.js → claude-code-EIC4Q7OT.js} +5 -5
  38. package/dist/{claude-code-NMRKTAP7.js → claude-code-L4VXCHKA.js} +2 -2
  39. package/dist/cli/sdk.js +4 -4
  40. package/dist/cli.js +1 -1
  41. package/dist/{cline-JAPJNOZQ.js → cline-AJZ67XEE.js} +3 -3
  42. package/dist/cline-AJZ67XEE.js.map +1 -0
  43. package/dist/{codebuddy-GC7VAE2Y.js → codebuddy-EZZFEP35.js} +2 -2
  44. package/dist/{codebuff-ETYT5UBL.js → codebuff-GUNT2KBT.js} +2 -2
  45. package/dist/{codebuff-3VODFPD4.js → codebuff-HFI3MHNO.js} +12 -12
  46. package/dist/codebuff-HFI3MHNO.js.map +1 -0
  47. package/dist/{codex-RXIS5BHM.js → codex-C7ERS3TW.js} +3 -3
  48. package/dist/{codex-YAORPCOD.js → codex-H4MY6747.js} +2 -2
  49. package/dist/{continue-MECVDV4Z.js → continue-K2CWUNX5.js} +2 -2
  50. package/dist/{copilot-cli-MZTAWMPW.js → copilot-cli-FIQNEHFC.js} +2 -2
  51. package/dist/{copilot-cli-WVWAWNSM.js → copilot-cli-GCRZCLTV.js} +2 -2
  52. package/dist/{crush-QBXLNN7T.js → crush-HLM2DFW2.js} +2 -2
  53. package/dist/{crush-YB3SK6NK.js → crush-KFWUUVZ3.js} +3 -3
  54. package/dist/{cursor-RSLHA2CY.js → cursor-CKSMXWKG.js} +3 -3
  55. package/dist/{cursor-DIW43TRZ.js → cursor-Y3X7YK3S.js} +2 -2
  56. package/dist/{define-connector-odRHEC4H.d.ts → define-connector-iosc34CA.d.ts} +1 -1
  57. package/dist/{detect-USP5JMWM.js → detect-IX6U2FBV.js} +4 -4
  58. package/dist/{devin-WPDN3MXE.js → devin-VD6VCB4Y.js} +2 -2
  59. package/dist/{doctor-VSW5KHBM.js → doctor-DEZPJXGY.js} +15 -15
  60. package/dist/{droid-HS6MX3IL.js → droid-BNWFLMZU.js} +2 -2
  61. package/dist/{droid-U3ZBLQFO.js → droid-SNF6TQK2.js} +2 -2
  62. package/dist/{gemini-cli-NMVVBO3K.js → gemini-cli-2B6TS7KU.js} +2 -2
  63. package/dist/{gemini-cli-VJ6X5DNF.js → gemini-cli-RH63NCVC.js} +2 -2
  64. package/dist/{goose-3X7ID7YW.js → goose-G4JBHXLJ.js} +3 -3
  65. package/dist/{goose-64V46Y2W.js → goose-KDHNJE7Z.js} +2 -2
  66. package/dist/grok-build-FSN4TNLQ.js +682 -0
  67. package/dist/grok-build-FSN4TNLQ.js.map +1 -0
  68. package/dist/{grok-cli-4VFVF2CQ.js → grok-cli-TAIK7VEP.js} +5 -4
  69. package/dist/grok-cli-TAIK7VEP.js.map +1 -0
  70. package/dist/{hermes-AIVUE7LX.js → hermes-BOTDXP3F.js} +2 -2
  71. package/dist/{hermes-F3EGTK6N.js → hermes-MVCJAPSI.js} +2 -2
  72. package/dist/{hook-QRW3ON6C.js → hook-Q3MDXE56.js} +8 -8
  73. package/dist/index.d.ts +3 -3
  74. package/dist/index.js +2 -2
  75. package/dist/{install-ASTAUZKB.js → install-FD7XL3YC.js} +12 -12
  76. package/dist/{introspect-gTx6GzpW.d.ts → introspect-z3eKVWHN.d.ts} +1 -1
  77. package/dist/{jetbrains-copilot-XBO2JZRO.js → jetbrains-copilot-TMU324FM.js} +2 -2
  78. package/dist/{junie-UCOS6Q37.js → junie-RU564IK7.js} +2 -2
  79. package/dist/{kilo-SW7BH6EG.js → kilo-CHH3XI7H.js} +2 -2
  80. package/dist/kilo-CHH3XI7H.js.map +1 -0
  81. package/dist/{kilo-T4OXNUYY.js → kilo-P32GL6JM.js} +3 -3
  82. package/dist/{kilo-cli-ZF272ZHN.js → kilo-cli-L57AGENB.js} +2 -2
  83. package/dist/{kilo-cli-I2S3W245.js → kilo-cli-WBVPQNVP.js} +3 -3
  84. package/dist/{kimi-5FHEXGZD.js → kimi-BDW32HPV.js} +2 -2
  85. package/dist/{kimi-VLSUFLYV.js → kimi-GY2XXIJB.js} +2 -2
  86. package/dist/{kiro-AQFXGOJX.js → kiro-D73LXTUV.js} +2 -2
  87. package/dist/{kiro-WGOI5CGT.js → kiro-HZF4BADZ.js} +2 -2
  88. package/dist/{leaderboard-3XSVSGAJ.js → leaderboard-44GN3NBH.js} +3 -3
  89. package/dist/{mimo-code-KETL7W7D.js → mimo-code-F3BZAQZK.js} +2 -2
  90. package/dist/{mistral-vibe-3AU7N2CA.js → mistral-vibe-ETTSQPK5.js} +2 -2
  91. package/dist/{mux-XM6AP35L.js → mux-H4PNZRKG.js} +2 -2
  92. package/dist/mux-H4PNZRKG.js.map +1 -0
  93. package/dist/{mux-BO2L5CTW.js → mux-WKBVW6DA.js} +28 -22
  94. package/dist/mux-WKBVW6DA.js.map +1 -0
  95. package/dist/{nemoclaw-WA7RSKF2.js → nemoclaw-SGRSTG6V.js} +3 -3
  96. package/dist/{omp-UDYJ2PYY.js → omp-DBW2I6HC.js} +2 -2
  97. package/dist/{open-interpreter-WMBNM4MQ.js → open-interpreter-CXUCCZI3.js} +2 -2
  98. package/dist/{openclaw-3DHVHX5P.js → openclaw-CVCZR63Q.js} +3 -3
  99. package/dist/{openclaw-5EQFGOWL.js → openclaw-QC6ROV5Z.js} +2 -2
  100. package/dist/{opencode-IKMI3RI7.js → opencode-MSAR4Y42.js} +2 -2
  101. package/dist/{opencode-QGP4ALQY.js → opencode-USR7ONCJ.js} +2 -2
  102. package/dist/{openhands-QGXMQR6I.js → openhands-IWT4DWJC.js} +2 -2
  103. package/dist/{package-VWBPHCLA.js → package-3J7LLRIP.js} +8 -8
  104. package/dist/{pi-GGDQREVG.js → pi-34CVX5WX.js} +2 -2
  105. package/dist/{pi-A2HCGRJG.js → pi-5EPSCZ2G.js} +2 -2
  106. package/dist/{qwen-code-GQILBJ5B.js → qwen-code-42TRBZ47.js} +2 -2
  107. package/dist/{qwen-code-DNQTGJOF.js → qwen-code-JW5F5B5M.js} +2 -2
  108. package/dist/runtime/index.d.ts +1 -1
  109. package/dist/runtime/index.js +6 -6
  110. package/dist/sdk/index.d.ts +4 -4
  111. package/dist/sdk/index.js +3 -3
  112. package/dist/sdk/test.d.ts +2 -2
  113. package/dist/sdk/test.js +6 -6
  114. package/dist/{serve-IQGHE4SJ.js → serve-WCKL53H7.js} +8 -8
  115. package/dist/{status-BVLY6XDL.js → status-PMVGLWXM.js} +8 -8
  116. package/dist/{statusline-PRODZV2J.js → statusline-OKW44KFR.js} +7 -7
  117. package/dist/{synthetic-6FRA7P5Q.js → synthetic-YZ4FO7YR.js} +2 -2
  118. package/dist/{telemetry-UU4SHJ23.js → telemetry-7H2DLNON.js} +5 -5
  119. package/dist/{trae-CPPYASR2.js → trae-7PXIXNQO.js} +2 -2
  120. package/dist/{trae-VOJXUYRN.js → trae-IAAKEBFD.js} +2 -2
  121. package/dist/{types-DWXnnx-N.d.ts → types-CAKApZpX.d.ts} +4 -4
  122. package/dist/{uninstall-WI5YLDCT.js → uninstall-KSMFBGOR.js} +12 -12
  123. package/dist/{upgrade-L45BTG6X.js → upgrade-AGC3ABMS.js} +12 -12
  124. package/dist/{usage-K3NQTAJP.js → usage-NTSSJ2O5.js} +3 -3
  125. package/dist/{usage-event-J5CQ6LNT.js → usage-event-FH3X232T.js} +7 -7
  126. package/dist/{vscode-copilot-ZBXRPKGG.js → vscode-copilot-WF2DX4AN.js} +2 -2
  127. package/dist/{warp-NRBBJQR2.js → warp-57BIWGD3.js} +2 -2
  128. package/dist/{warp-S444B2S3.js → warp-NCQPWGRZ.js} +2 -2
  129. package/dist/{windsurf-R6D2JUTN.js → windsurf-YQOBRY2Y.js} +2 -2
  130. package/dist/windsurf-YQOBRY2Y.js.map +1 -0
  131. package/dist/{zed-XJFOOKCO.js → zed-23T4G4CT.js} +2 -2
  132. package/dist/{zed-DQV3ZUCU.js → zed-U2T6VU6N.js} +3 -3
  133. package/package.json +1 -1
  134. package/dist/chunk-G5HAIYRM.js.map +0 -1
  135. package/dist/chunk-IRUYJD23.js.map +0 -1
  136. package/dist/chunk-JTN3AKZO.js.map +0 -1
  137. package/dist/chunk-WZMSSIDN.js.map +0 -1
  138. package/dist/cline-JAPJNOZQ.js.map +0 -1
  139. package/dist/codebuff-3VODFPD4.js.map +0 -1
  140. package/dist/grok-cli-4VFVF2CQ.js.map +0 -1
  141. package/dist/kilo-SW7BH6EG.js.map +0 -1
  142. package/dist/mux-BO2L5CTW.js.map +0 -1
  143. package/dist/mux-XM6AP35L.js.map +0 -1
  144. package/dist/roo-code-SUWI4BBN.js +0 -229
  145. package/dist/roo-code-SUWI4BBN.js.map +0 -1
  146. package/dist/roo-code-VI2ZKTZC.js +0 -361
  147. package/dist/roo-code-VI2ZKTZC.js.map +0 -1
  148. package/dist/windsurf-R6D2JUTN.js.map +0 -1
  149. /package/dist/{action-LEYTHNIU.js.map → action-BCD2GOJA.js.map} +0 -0
  150. /package/dist/{amazon-q-7DPVJXJN.js.map → amazon-q-KCNHU3BI.js.map} +0 -0
  151. /package/dist/{amp-VYXZWHXW.js.map → amp-HI6CGN36.js.map} +0 -0
  152. /package/dist/{amp-BQZOL5GR.js.map → amp-NDP2J4K3.js.map} +0 -0
  153. /package/dist/{antigravity-EA4L225L.js.map → antigravity-FY5553OR.js.map} +0 -0
  154. /package/dist/{antigravity-VXHL6ZPM.js.map → antigravity-I2L4WSJN.js.map} +0 -0
  155. /package/dist/{antigravity-cli-B2HXZFYQ.js.map → antigravity-cli-IUAE3SEX.js.map} +0 -0
  156. /package/dist/{antigravity-cli-JHQ7JGNX.js.map → antigravity-cli-T24Y54NG.js.map} +0 -0
  157. /package/dist/{audit-HPKCUCES.js.map → audit-F47H2PLT.js.map} +0 -0
  158. /package/dist/{chunk-BXPSDNIB.js.map → chunk-BD72ZF6D.js.map} +0 -0
  159. /package/dist/{chunk-M6OS4OLU.js.map → chunk-BGPVMJOG.js.map} +0 -0
  160. /package/dist/{chunk-2Y2MZRLP.js.map → chunk-CWUPIT72.js.map} +0 -0
  161. /package/dist/{chunk-FKW5A6HE.js.map → chunk-HUL5CRF2.js.map} +0 -0
  162. /package/dist/{chunk-6WN37NVN.js.map → chunk-O7CFTOM5.js.map} +0 -0
  163. /package/dist/{chunk-4KIXXJ7B.js.map → chunk-OXANBA4I.js.map} +0 -0
  164. /package/dist/{chunk-U2XJWG7N.js.map → chunk-STR3CRH3.js.map} +0 -0
  165. /package/dist/{chunk-6XMV2OOA.js.map → chunk-W4GVN3TJ.js.map} +0 -0
  166. /package/dist/{chunk-PWCBWAM4.js.map → chunk-W67GINTF.js.map} +0 -0
  167. /package/dist/{chunk-XY3N2U6L.js.map → chunk-WAALPWR4.js.map} +0 -0
  168. /package/dist/{chunk-4QXCNZMD.js.map → chunk-X2XEE4DO.js.map} +0 -0
  169. /package/dist/{chunk-T5AI3AW3.js.map → chunk-ZHG7Q424.js.map} +0 -0
  170. /package/dist/{claude-code-LJ6DVXWQ.js.map → claude-code-EIC4Q7OT.js.map} +0 -0
  171. /package/dist/{claude-code-NMRKTAP7.js.map → claude-code-L4VXCHKA.js.map} +0 -0
  172. /package/dist/{codebuddy-GC7VAE2Y.js.map → codebuddy-EZZFEP35.js.map} +0 -0
  173. /package/dist/{codebuff-ETYT5UBL.js.map → codebuff-GUNT2KBT.js.map} +0 -0
  174. /package/dist/{codex-RXIS5BHM.js.map → codex-C7ERS3TW.js.map} +0 -0
  175. /package/dist/{codex-YAORPCOD.js.map → codex-H4MY6747.js.map} +0 -0
  176. /package/dist/{continue-MECVDV4Z.js.map → continue-K2CWUNX5.js.map} +0 -0
  177. /package/dist/{copilot-cli-MZTAWMPW.js.map → copilot-cli-FIQNEHFC.js.map} +0 -0
  178. /package/dist/{copilot-cli-WVWAWNSM.js.map → copilot-cli-GCRZCLTV.js.map} +0 -0
  179. /package/dist/{crush-QBXLNN7T.js.map → crush-HLM2DFW2.js.map} +0 -0
  180. /package/dist/{crush-YB3SK6NK.js.map → crush-KFWUUVZ3.js.map} +0 -0
  181. /package/dist/{cursor-RSLHA2CY.js.map → cursor-CKSMXWKG.js.map} +0 -0
  182. /package/dist/{cursor-DIW43TRZ.js.map → cursor-Y3X7YK3S.js.map} +0 -0
  183. /package/dist/{detect-USP5JMWM.js.map → detect-IX6U2FBV.js.map} +0 -0
  184. /package/dist/{devin-WPDN3MXE.js.map → devin-VD6VCB4Y.js.map} +0 -0
  185. /package/dist/{doctor-VSW5KHBM.js.map → doctor-DEZPJXGY.js.map} +0 -0
  186. /package/dist/{droid-HS6MX3IL.js.map → droid-BNWFLMZU.js.map} +0 -0
  187. /package/dist/{droid-U3ZBLQFO.js.map → droid-SNF6TQK2.js.map} +0 -0
  188. /package/dist/{gemini-cli-NMVVBO3K.js.map → gemini-cli-2B6TS7KU.js.map} +0 -0
  189. /package/dist/{gemini-cli-VJ6X5DNF.js.map → gemini-cli-RH63NCVC.js.map} +0 -0
  190. /package/dist/{goose-3X7ID7YW.js.map → goose-G4JBHXLJ.js.map} +0 -0
  191. /package/dist/{goose-64V46Y2W.js.map → goose-KDHNJE7Z.js.map} +0 -0
  192. /package/dist/{hermes-AIVUE7LX.js.map → hermes-BOTDXP3F.js.map} +0 -0
  193. /package/dist/{hermes-F3EGTK6N.js.map → hermes-MVCJAPSI.js.map} +0 -0
  194. /package/dist/{hook-QRW3ON6C.js.map → hook-Q3MDXE56.js.map} +0 -0
  195. /package/dist/{install-ASTAUZKB.js.map → install-FD7XL3YC.js.map} +0 -0
  196. /package/dist/{jetbrains-copilot-XBO2JZRO.js.map → jetbrains-copilot-TMU324FM.js.map} +0 -0
  197. /package/dist/{junie-UCOS6Q37.js.map → junie-RU564IK7.js.map} +0 -0
  198. /package/dist/{kilo-T4OXNUYY.js.map → kilo-P32GL6JM.js.map} +0 -0
  199. /package/dist/{kilo-cli-ZF272ZHN.js.map → kilo-cli-L57AGENB.js.map} +0 -0
  200. /package/dist/{kilo-cli-I2S3W245.js.map → kilo-cli-WBVPQNVP.js.map} +0 -0
  201. /package/dist/{kimi-5FHEXGZD.js.map → kimi-BDW32HPV.js.map} +0 -0
  202. /package/dist/{kimi-VLSUFLYV.js.map → kimi-GY2XXIJB.js.map} +0 -0
  203. /package/dist/{kiro-AQFXGOJX.js.map → kiro-D73LXTUV.js.map} +0 -0
  204. /package/dist/{kiro-WGOI5CGT.js.map → kiro-HZF4BADZ.js.map} +0 -0
  205. /package/dist/{leaderboard-3XSVSGAJ.js.map → leaderboard-44GN3NBH.js.map} +0 -0
  206. /package/dist/{mimo-code-KETL7W7D.js.map → mimo-code-F3BZAQZK.js.map} +0 -0
  207. /package/dist/{mistral-vibe-3AU7N2CA.js.map → mistral-vibe-ETTSQPK5.js.map} +0 -0
  208. /package/dist/{nemoclaw-WA7RSKF2.js.map → nemoclaw-SGRSTG6V.js.map} +0 -0
  209. /package/dist/{omp-UDYJ2PYY.js.map → omp-DBW2I6HC.js.map} +0 -0
  210. /package/dist/{open-interpreter-WMBNM4MQ.js.map → open-interpreter-CXUCCZI3.js.map} +0 -0
  211. /package/dist/{openclaw-3DHVHX5P.js.map → openclaw-CVCZR63Q.js.map} +0 -0
  212. /package/dist/{openclaw-5EQFGOWL.js.map → openclaw-QC6ROV5Z.js.map} +0 -0
  213. /package/dist/{opencode-IKMI3RI7.js.map → opencode-MSAR4Y42.js.map} +0 -0
  214. /package/dist/{opencode-QGP4ALQY.js.map → opencode-USR7ONCJ.js.map} +0 -0
  215. /package/dist/{openhands-QGXMQR6I.js.map → openhands-IWT4DWJC.js.map} +0 -0
  216. /package/dist/{package-VWBPHCLA.js.map → package-3J7LLRIP.js.map} +0 -0
  217. /package/dist/{pi-GGDQREVG.js.map → pi-34CVX5WX.js.map} +0 -0
  218. /package/dist/{pi-A2HCGRJG.js.map → pi-5EPSCZ2G.js.map} +0 -0
  219. /package/dist/{qwen-code-GQILBJ5B.js.map → qwen-code-42TRBZ47.js.map} +0 -0
  220. /package/dist/{qwen-code-DNQTGJOF.js.map → qwen-code-JW5F5B5M.js.map} +0 -0
  221. /package/dist/{serve-IQGHE4SJ.js.map → serve-WCKL53H7.js.map} +0 -0
  222. /package/dist/{status-BVLY6XDL.js.map → status-PMVGLWXM.js.map} +0 -0
  223. /package/dist/{statusline-PRODZV2J.js.map → statusline-OKW44KFR.js.map} +0 -0
  224. /package/dist/{synthetic-6FRA7P5Q.js.map → synthetic-YZ4FO7YR.js.map} +0 -0
  225. /package/dist/{telemetry-UU4SHJ23.js.map → telemetry-7H2DLNON.js.map} +0 -0
  226. /package/dist/{trae-CPPYASR2.js.map → trae-7PXIXNQO.js.map} +0 -0
  227. /package/dist/{trae-VOJXUYRN.js.map → trae-IAAKEBFD.js.map} +0 -0
  228. /package/dist/{uninstall-WI5YLDCT.js.map → uninstall-KSMFBGOR.js.map} +0 -0
  229. /package/dist/{upgrade-L45BTG6X.js.map → upgrade-AGC3ABMS.js.map} +0 -0
  230. /package/dist/{usage-K3NQTAJP.js.map → usage-NTSSJ2O5.js.map} +0 -0
  231. /package/dist/{usage-event-J5CQ6LNT.js.map → usage-event-FH3X232T.js.map} +0 -0
  232. /package/dist/{vscode-copilot-ZBXRPKGG.js.map → vscode-copilot-WF2DX4AN.js.map} +0 -0
  233. /package/dist/{warp-NRBBJQR2.js.map → warp-57BIWGD3.js.map} +0 -0
  234. /package/dist/{warp-S444B2S3.js.map → warp-NCQPWGRZ.js.map} +0 -0
  235. /package/dist/{zed-XJFOOKCO.js.map → zed-23T4G4CT.js.map} +0 -0
  236. /package/dist/{zed-DQV3ZUCU.js.map → zed-U2T6VU6N.js.map} +0 -0
package/README.md CHANGED
@@ -4,11 +4,14 @@
4
4
 
5
5
  # agent-connector
6
6
 
7
- ### Deploy one MCP to every agent CLI.
7
+ ### Deploy one MCP to every agent host.
8
+
9
+ **Focus on the implementation, not the distribution.**
8
10
 
9
11
  Write your server + hooks once with `defineConnector()`, then `install` it into
10
- the native config — or `package` it as a real plugin — across every detected agent CLI
11
- (Claude Code, Codex, Cursor, Copilot, Gemini, OpenCode, Warp, Zed…).
12
+ the native config — or `package` it as a real plugin — across every detected agent
13
+ host: terminal CLIs, IDE extensions and desktop apps alike (Claude Code, Codex,
14
+ Cursor, Copilot, Gemini, OpenCode, Warp, Zed…).
12
15
 
13
16
  [![npm](https://img.shields.io/npm/v/@ken-jo/agent-connector?color=cb3837&logo=npm)](https://www.npmjs.com/package/@ken-jo/agent-connector)
14
17
  [![license](https://img.shields.io/npm/l/@ken-jo/agent-connector?color=22c55e)](LICENSE)
@@ -76,7 +79,7 @@ npm install @ken-jo/agent-connector
76
79
  "name": "@acme/acme-db-mcp",
77
80
  "mcpName": "io.github.acme/acme-db",
78
81
  "bin": { "acme-db": "./bin.mjs" },
79
- "dependencies": { "@ken-jo/agent-connector": "^0.5.0" }
82
+ "dependencies": { "@ken-jo/agent-connector": "^0.6.1" }
80
83
  }
81
84
  ```
82
85
 
@@ -498,8 +501,8 @@ set (see [`/coverage`](https://agent-connector.ai/coverage) and
498
501
 
499
502
  | Paradigm | Platforms |
500
503
  |---|---|
501
- | `json-stdio` (full hook dispatch) | CodeBuddy · Claude Code · Codex CLI · Cursor · VS Code Copilot · JetBrains Copilot · GitHub Copilot CLI · Gemini CLI · Qwen CLI · Kiro · Kimi CLI · Crush · Goose · Hermes · Droid (Factory) · OpenHands · Antigravity · Antigravity CLI · Continue · Amazon Q · Grok CLI · Devin CLI |
502
- | `mcp-only` (MCP registration only) | Warp · Roo Code · Cline · Trae · Zed · Codebuff · Mux · Pi · Windsurf · Open Interpreter · Junie · Mistral Vibe |
504
+ | `json-stdio` (full hook dispatch) | CodeBuddy · Claude Code · Codex CLI · Cursor · VS Code Copilot · JetBrains Copilot · GitHub Copilot CLI · Gemini CLI · Qwen CLI · Kiro · Kimi CLI · Crush · Goose · Hermes · Droid (Factory) · OpenHands · Antigravity · Antigravity CLI · Continue · Amazon Q · Grok Build · Grok CLI · Devin CLI |
505
+ | `mcp-only` (MCP registration only) | Warp · Cline · Trae · Zed · Freebuff · Xum · Pi · Windsurf · Open Interpreter · Junie · Mistral Vibe |
503
506
  | `ts-plugin` (generated bridge module) | OpenCode · MiMoCode · Kilo CLI · Kilo · OMP · NemoClaw · OpenClaw · Amp |
504
507
 
505
508
  Adding a platform = **one registry entry + one adapter**.
@@ -1,20 +1,20 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  fail
4
- } from "./chunk-T5AI3AW3.js";
4
+ } from "./chunk-ZHG7Q424.js";
5
5
  import {
6
6
  runAction
7
- } from "./chunk-SFY6YLVK.js";
7
+ } from "./chunk-K67UJSJI.js";
8
8
  import "./chunk-OP4KBXUO.js";
9
9
  import "./chunk-GDIAHWNY.js";
10
- import "./chunk-4KIXXJ7B.js";
11
- import "./chunk-6XMV2OOA.js";
10
+ import "./chunk-OXANBA4I.js";
11
+ import "./chunk-W4GVN3TJ.js";
12
12
  import "./chunk-IVAWP6HH.js";
13
13
  import "./chunk-KHO5WNTP.js";
14
14
  import "./chunk-4NFDNY3C.js";
15
- import "./chunk-M6OS4OLU.js";
16
- import "./chunk-6WN37NVN.js";
17
- import "./chunk-G5HAIYRM.js";
15
+ import "./chunk-BGPVMJOG.js";
16
+ import "./chunk-O7CFTOM5.js";
17
+ import "./chunk-QG26JEJF.js";
18
18
  import "./chunk-NBYKLUF6.js";
19
19
  import "./chunk-QSY74NAP.js";
20
20
  import "./chunk-UMQ6NBQR.js";
@@ -53,4 +53,4 @@ async function run(argv) {
53
53
  export {
54
54
  run
55
55
  };
56
- //# sourceMappingURL=action-LEYTHNIU.js.map
56
+ //# sourceMappingURL=action-BCD2GOJA.js.map
@@ -4,7 +4,7 @@ import {
4
4
  } from "./chunk-BEFVJ2OE.js";
5
5
  import {
6
6
  BaseAdapter
7
- } from "./chunk-JTN3AKZO.js";
7
+ } from "./chunk-PMOFA5BT.js";
8
8
  import {
9
9
  buildWrappedStdio,
10
10
  isHomeBinHookCommand
@@ -563,4 +563,4 @@ export {
563
563
  adapter,
564
564
  amazon_q_default as default
565
565
  };
566
- //# sourceMappingURL=amazon-q-7DPVJXJN.js.map
566
+ //# sourceMappingURL=amazon-q-KCNHU3BI.js.map
@@ -8,7 +8,7 @@ import {
8
8
  import {
9
9
  BaseAdapter,
10
10
  renderSkillMd
11
- } from "./chunk-JTN3AKZO.js";
11
+ } from "./chunk-PMOFA5BT.js";
12
12
  import {
13
13
  buildWrappedStdio
14
14
  } from "./chunk-QSY74NAP.js";
@@ -608,4 +608,4 @@ export {
608
608
  adapter,
609
609
  amp_default as default
610
610
  };
611
- //# sourceMappingURL=amp-VYXZWHXW.js.map
611
+ //# sourceMappingURL=amp-HI6CGN36.js.map
@@ -6,7 +6,7 @@ import {
6
6
  import {
7
7
  firstExistingRoot,
8
8
  walkFiles
9
- } from "./chunk-O7SDRBVB.js";
9
+ } from "./chunk-6ZZQXEL7.js";
10
10
  import {
11
11
  emptyTokens,
12
12
  inferProvider
@@ -234,4 +234,4 @@ var amp_default = ampReader;
234
234
  export {
235
235
  amp_default as default
236
236
  };
237
- //# sourceMappingURL=amp-BQZOL5GR.js.map
237
+ //# sourceMappingURL=amp-NDP2J4K3.js.map
@@ -13,7 +13,7 @@ import {
13
13
  isDir,
14
14
  listSubdirs,
15
15
  walkFiles
16
- } from "./chunk-O7SDRBVB.js";
16
+ } from "./chunk-6ZZQXEL7.js";
17
17
  import {
18
18
  emptyTokens,
19
19
  inferProvider
@@ -168,4 +168,4 @@ var antigravity_default = antigravityReader;
168
168
  export {
169
169
  antigravity_default as default
170
170
  };
171
- //# sourceMappingURL=antigravity-EA4L225L.js.map
171
+ //# sourceMappingURL=antigravity-FY5553OR.js.map
@@ -3,10 +3,10 @@ import {
3
3
  AntigravityAdapter,
4
4
  adapter,
5
5
  antigravity_default
6
- } from "./chunk-4QXCNZMD.js";
6
+ } from "./chunk-X2XEE4DO.js";
7
7
  import "./chunk-H53QZQJI.js";
8
8
  import "./chunk-BEFVJ2OE.js";
9
- import "./chunk-JTN3AKZO.js";
9
+ import "./chunk-PMOFA5BT.js";
10
10
  import "./chunk-QSY74NAP.js";
11
11
  import "./chunk-UMQ6NBQR.js";
12
12
  import "./chunk-GZGLCCEE.js";
@@ -15,4 +15,4 @@ export {
15
15
  adapter,
16
16
  antigravity_default as default
17
17
  };
18
- //# sourceMappingURL=antigravity-VXHL6ZPM.js.map
18
+ //# sourceMappingURL=antigravity-I2L4WSJN.js.map
@@ -11,7 +11,7 @@ import {
11
11
  firstExistingRoot,
12
12
  isDir,
13
13
  walkFiles
14
- } from "./chunk-O7SDRBVB.js";
14
+ } from "./chunk-6ZZQXEL7.js";
15
15
  import {
16
16
  emptyTokens,
17
17
  inferProvider
@@ -118,4 +118,4 @@ var antigravity_cli_default = antigravityCliReader;
118
118
  export {
119
119
  antigravity_cli_default as default
120
120
  };
121
- //# sourceMappingURL=antigravity-cli-B2HXZFYQ.js.map
121
+ //# sourceMappingURL=antigravity-cli-IUAE3SEX.js.map
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  AntigravityAdapter,
4
4
  adapter
5
- } from "./chunk-4QXCNZMD.js";
5
+ } from "./chunk-X2XEE4DO.js";
6
6
  import {
7
7
  addLedgerOwner,
8
8
  createLedgerEntry,
@@ -18,7 +18,7 @@ import {
18
18
  } from "./chunk-NBYKLUF6.js";
19
19
  import "./chunk-H53QZQJI.js";
20
20
  import "./chunk-BEFVJ2OE.js";
21
- import "./chunk-JTN3AKZO.js";
21
+ import "./chunk-PMOFA5BT.js";
22
22
  import {
23
23
  buildHomeBinStatuslineCommand,
24
24
  isHomeBinStatuslineCommand
@@ -465,4 +465,4 @@ export {
465
465
  adapter2 as adapter,
466
466
  antigravity_cli_default as default
467
467
  };
468
- //# sourceMappingURL=antigravity-cli-JHQ7JGNX.js.map
468
+ //# sourceMappingURL=antigravity-cli-T24Y54NG.js.map
@@ -2,18 +2,18 @@
2
2
  import {
3
3
  fail,
4
4
  print
5
- } from "./chunk-T5AI3AW3.js";
5
+ } from "./chunk-ZHG7Q424.js";
6
6
  import {
7
7
  findConnectorConfig,
8
8
  loadConnectorFromPath
9
- } from "./chunk-M6OS4OLU.js";
9
+ } from "./chunk-BGPVMJOG.js";
10
10
  import {
11
11
  deriveHostAliasFromMcpName,
12
12
  deriveHostAliasFromPackageName,
13
13
  findNearestPackageJson,
14
14
  readConnectorPackageMetadataFromPackageJson
15
- } from "./chunk-6WN37NVN.js";
16
- import "./chunk-G5HAIYRM.js";
15
+ } from "./chunk-O7CFTOM5.js";
16
+ import "./chunk-QG26JEJF.js";
17
17
  import "./chunk-NBYKLUF6.js";
18
18
  import "./chunk-UMQ6NBQR.js";
19
19
  import "./chunk-GZGLCCEE.js";
@@ -308,4 +308,4 @@ async function run(argv) {
308
308
  export {
309
309
  run
310
310
  };
311
- //# sourceMappingURL=audit-HPKCUCES.js.map
311
+ //# sourceMappingURL=audit-F47H2PLT.js.map
@@ -87,6 +87,7 @@ function hostRoots(platformId) {
87
87
  out.push(join(homedir(), ".factory", "sessions"));
88
88
  break;
89
89
  case "mux":
90
+ out.push(join(homedir(), ".xum", "sessions"));
90
91
  out.push(join(homedir(), ".mux", "sessions"));
91
92
  break;
92
93
  case "kiro":
@@ -196,4 +197,4 @@ export {
196
197
  walkFiles,
197
198
  listSubdirs
198
199
  };
199
- //# sourceMappingURL=chunk-O7SDRBVB.js.map
200
+ //# sourceMappingURL=chunk-6ZZQXEL7.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/usage/paths.ts"],"sourcesContent":["/**\n * usage/paths — per-platform HOST storage-root resolution + small fs walkers.\n *\n * This is the read-only complement to core/paths.ts: where that module resolves\n * the FRAMEWORK data-root (~/.agent-connector), this one resolves each agent\n * CLI's OWN native storage roots (~/.qwen, ~/.claude, …) so the usage readers\n * can parse them. It NEVER writes; it only enumerates files.\n *\n * Ported from tokscale paths.rs (the tokscale cache dir) and from each reader's\n * storage-path spec (docs/research/usage-readers.json). Resolution order is\n * uniform across platforms:\n * 1. an explicit AGENT_CONNECTOR_<PLATFORM>_DIR env override (verbatim, when\n * non-empty — an empty string is treated as unset so we never resolve to \"\");\n * 2. the platform-specific default for the current OS.\n *\n * The \"tokscale cache dir\" (~/.config/tokscale, or AGENT_CONNECTOR_TOKSCALE_DIR)\n * is where synced readers (cursor/antigravity/antigravity-cli/trae/warp) look for\n * a local cache that a separate tokscale run may have produced — we read it if\n * present, but we never create or sync it. (Antigravity's own native store is\n * protobuf .pb with no public schema, so it too is synced-cache-or-skip.)\n */\n\nimport {\n existsSync,\n readdirSync,\n statSync,\n} from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { isAbsolute, join, resolve } from \"node:path\";\n\n// ─────────────────────────────────────────────────────────────────────────\n// Home / env helpers\n// ─────────────────────────────────────────────────────────────────────────\n\n/** Expand a leading \"~\" (and \"~/\") to the user's home directory. */\nexport function expandHome(p: string): string {\n if (p === \"~\") return homedir();\n if (p.startsWith(\"~/\") || p.startsWith(\"~\\\\\")) {\n return join(homedir(), p.slice(2));\n }\n return p;\n}\n\n/**\n * Read an env override, treating empty/blank as unset (mirrors tokscale's\n * is_config_dir_overridden contract: an empty override must NOT resolve to \"\").\n * Relative paths are resolved against the process CWD; \"~\" is expanded.\n */\nfunction envOverride(name: string): string | undefined {\n const raw = process.env[name];\n if (raw == null || raw.trim() === \"\") return undefined;\n const expanded = expandHome(raw.trim());\n return isAbsolute(expanded) ? expanded : resolve(expanded);\n}\n\n/** $XDG_DATA_HOME (when set & non-empty) else ~/.local/share. */\nfunction xdgDataHome(): string {\n const xdg = process.env.XDG_DATA_HOME;\n if (xdg && xdg.trim() !== \"\") return resolve(expandHome(xdg.trim()));\n return join(homedir(), \".local\", \"share\");\n}\n\n/** $XDG_CONFIG_HOME (when set & non-empty) else ~/.config. */\nfunction xdgConfigHome(): string {\n const xdg = process.env.XDG_CONFIG_HOME;\n if (xdg && xdg.trim() !== \"\") return resolve(expandHome(xdg.trim()));\n return join(homedir(), \".config\");\n}\n\n/** Windows %LOCALAPPDATA% else ~/AppData/Local. */\nfunction localAppData(): string {\n const v = process.env.LOCALAPPDATA;\n if (v && v.trim() !== \"\") return resolve(v.trim());\n return join(homedir(), \"AppData\", \"Local\");\n}\n\nconst isMac = process.platform === \"darwin\";\nconst isWin = process.platform === \"win32\";\n\n// ─────────────────────────────────────────────────────────────────────────\n// tokscale cache dir (for synced readers)\n// ─────────────────────────────────────────────────────────────────────────\n\n/**\n * Resolve the tokscale config dir (where synced caches live). Ported from\n * tokscale paths.rs get_config_dir():\n * 1. AGENT_CONNECTOR_TOKSCALE_DIR override (verbatim, non-empty);\n * 2. macOS: $HOME/.config/tokscale (NOT ~/Library/Application Support);\n * 3. Linux: $XDG_CONFIG_HOME/tokscale or ~/.config/tokscale;\n * 4. Windows: %APPDATA%/tokscale (config_dir equivalent) else ~/.config/tokscale.\n *\n * We use AGENT_CONNECTOR_TOKSCALE_DIR (not TOKSCALE_CONFIG_DIR) so the framework\n * never accidentally couples to a tokscale install's hermetic test env.\n */\nexport function tokscaleConfigDir(): string {\n const override = envOverride(\"AGENT_CONNECTOR_TOKSCALE_DIR\");\n if (override) return override;\n if (isMac) return join(homedir(), \".config\", \"tokscale\");\n if (isWin) {\n const appData = process.env.APPDATA;\n if (appData && appData.trim() !== \"\") return join(resolve(appData.trim()), \"tokscale\");\n return join(homedir(), \".config\", \"tokscale\");\n }\n return join(xdgConfigHome(), \"tokscale\");\n}\n\n/** The directory a synced platform's local cache lives under, e.g. `<tokscale>/cursor-cache`. */\nexport function tokscaleCacheDir(name: string): string {\n return join(tokscaleConfigDir(), name);\n}\n\n// ─────────────────────────────────────────────────────────────────────────\n// Antigravity native store roots (DETECTION ONLY — not parsed for usage)\n//\n// CONFIRMED-BY-INSTALL (2026-06-03, docs/research/antigravity-paths-confirmed.md):\n// the native Antigravity store is `~/.gemini/antigravity/conversations/<uuid>.pb`\n// — PROTOBUF with no public schema — and `brain/<uuid>/` holds only media +\n// `*.metadata.json`. There are NO `transcript*.jsonl` files. The `agy` CLI shares\n// this SAME `~/.gemini/antigravity/` dir (no separate config/storage dir). So the\n// native dir is used only for platform DETECTION (in the adapters); the usage\n// readers do NOT parse it (protobuf, unreadable) — they are SYNCED readers that\n// read the tokscale synced-cache instead (see hostRoots → antigravity-cache).\n//\n// These helpers are retained for any detection caller and honor the standard\n// AGENT_CONNECTOR_<PLATFORM>_DIR override (prepended, preferred when set).\n// ─────────────────────────────────────────────────────────────────────────\n\n/**\n * The native Antigravity store root for DETECTION: `~/.gemini/antigravity/`\n * (CONFIRMED). Its `conversations/<uuid>.pb` payloads are protobuf with no public\n * schema, so this dir is NOT parsed for usage — only its presence is a signal.\n *\n * Honors AGENT_CONNECTOR_ANTIGRAVITY_DIR (verbatim, when set) as the override.\n */\nexport function antigravityNativeRoots(): string[] {\n const out: string[] = [];\n const override = envOverride(\"AGENT_CONNECTOR_ANTIGRAVITY_DIR\");\n if (override) out.push(override);\n out.push(join(homedir(), \".gemini\", \"antigravity\"));\n return out;\n}\n\n/**\n * The native store root for the Antigravity CLI (`agy`) for DETECTION. CONFIRMED:\n * `agy` has NO separate dir — it SHARES the IDE's `~/.gemini/antigravity/` (also\n * protobuf, not parsed for usage).\n *\n * Honors AGENT_CONNECTOR_ANTIGRAVITY_CLI_DIR (verbatim, when set) as the override.\n */\nexport function antigravityCliNativeRoots(): string[] {\n const out: string[] = [];\n const override = envOverride(\"AGENT_CONNECTOR_ANTIGRAVITY_CLI_DIR\");\n if (override) out.push(override);\n out.push(join(homedir(), \".gemini\", \"antigravity\"));\n return out;\n}\n\n// ─────────────────────────────────────────────────────────────────────────\n// Per-platform host roots\n// ─────────────────────────────────────────────────────────────────────────\n\n/**\n * Candidate host storage roots for a platform, most-preferred first. Readers\n * iterate the returned list and use the first that exists (each variant is the\n * OS-correct default; the env override, when present, is prepended).\n *\n * Only the platforms this subsystem currently ships a reader for are listed in\n * detail; the table is structured so a new platform is one new case. Returning\n * `[]` (no candidate root) makes a reader fail-open to zero records.\n */\nexport function hostRoots(platformId: string): string[] {\n const out: string[] = [];\n const override = envOverride(`AGENT_CONNECTOR_${platformId.toUpperCase().replace(/-/g, \"_\")}_DIR`);\n if (override) out.push(override);\n\n switch (platformId) {\n case \"qwen-code\":\n // ~/.qwen/projects/*/chats/*.jsonl\n out.push(join(homedir(), \".qwen\", \"projects\"));\n break;\n case \"claude-code\":\n out.push(join(homedir(), \".claude\", \"projects\"));\n break;\n case \"codex\":\n out.push(join(homedir(), \".codex\", \"sessions\"));\n break;\n case \"gemini-cli\":\n out.push(join(homedir(), \".gemini\", \"tmp\"));\n break;\n case \"pi\":\n out.push(join(homedir(), \".pi\", \"agent\", \"sessions\"));\n break;\n case \"kimi\":\n // TWO Moonshot products share the \"kimi\" id with DIFFERENT session trees:\n // - Kimi Code (newer, @moonshot-ai/kimi-code): ~/.kimi-code/sessions/...\n // (deeper tree, see readers/kimi.ts) — the product our adapter targets.\n // - Kimi CLI (older): ~/.kimi/sessions/<GROUP>/<UUID>/wire.jsonl\n // Both are scanned (Kimi Code preferred first). $KIMI_CODE_HOME relocates\n // the Kimi Code home and is honored ahead of these in readers/kimi.ts.\n out.push(join(homedir(), \".kimi-code\", \"sessions\"));\n out.push(join(homedir(), \".kimi\", \"sessions\"));\n break;\n case \"copilot-cli\":\n out.push(join(xdgDataHome(), \"Copilot\", \"telemetry\"));\n out.push(join(xdgConfigHome(), \"copilot\", \"telemetry\"));\n break;\n case \"amp\":\n out.push(join(xdgDataHome(), \"amp\", \"threads\"));\n break;\n case \"droid\":\n out.push(join(homedir(), \".factory\", \"sessions\"));\n break;\n case \"mux\":\n out.push(join(homedir(), \".mux\", \"sessions\"));\n break;\n case \"kiro\":\n out.push(join(homedir(), \".kiro\", \"sessions\", \"cli\"));\n break;\n case \"opencode\":\n out.push(join(xdgDataHome(), \"opencode\", \"opencode.db\"));\n break;\n case \"goose\":\n if (isMac) out.push(join(homedir(), \"Library\", \"Application Support\", \"goose\", \"sessions\", \"sessions.db\"));\n out.push(join(xdgDataHome(), \"goose\", \"sessions\", \"sessions.db\"));\n out.push(join(xdgDataHome(), \"Block\", \"goose\", \"sessions\", \"sessions.db\"));\n break;\n case \"hermes\":\n out.push(join(homedir(), \".hermes\", \"state.db\"));\n break;\n case \"kilo-cli\":\n out.push(join(xdgDataHome(), \"kilo\", \"kilo.db\"));\n break;\n case \"crush\":\n out.push(join(homedir(), \".cache\", \"crush\", \"crush.db\"));\n break;\n case \"zed\":\n if (isMac) out.push(join(homedir(), \"Library\", \"Application Support\", \"Zed\", \"threads\", \"threads.db\"));\n else if (isWin) out.push(join(localAppData(), \"Zed\", \"threads\", \"threads.db\"));\n else out.push(join(xdgDataHome(), \"zed\", \"threads\", \"threads.db\"));\n break;\n // Synced platforms: local cache under the tokscale config dir.\n case \"cursor\":\n out.push(tokscaleCacheDir(\"cursor-cache\"));\n break;\n case \"antigravity\":\n // SYNCED: the native store is protobuf (.pb, no public schema) and NOT\n // parseable, so the reader reads only the tokscale synced-cache mirror if a\n // separate tokscale run produced one (else [] → \"requires sync\"). The\n // native `~/.gemini/antigravity/` dir is used only for detection.\n out.push(tokscaleCacheDir(\"antigravity-cache\"));\n break;\n case \"antigravity-cli\":\n // SYNCED: `agy` shares the IDE's protobuf (.pb) store (no schema), so the\n // reader reads only the tokscale synced-cache mirror if present (else [] →\n // \"requires sync\"). Shares the IDE's antigravity-cache name (same data).\n out.push(tokscaleCacheDir(\"antigravity-cache\"));\n break;\n case \"trae\":\n out.push(tokscaleCacheDir(\"trae-cache\"));\n break;\n case \"warp\":\n out.push(tokscaleCacheDir(\"warp-cache\"));\n break;\n default:\n break;\n }\n return out;\n}\n\n/** First existing host root for a platform, or undefined when none is present. */\nexport function firstExistingRoot(platformId: string): string | undefined {\n for (const root of hostRoots(platformId)) {\n if (existsSync(root)) return root;\n }\n return undefined;\n}\n\n// ─────────────────────────────────────────────────────────────────────────\n// Directory / glob walkers (tolerant — never throw)\n// ─────────────────────────────────────────────────────────────────────────\n\n/** Is the path an existing directory? Tolerant (false on any stat error). */\nexport function isDir(p: string): boolean {\n try {\n return statSync(p).isDirectory();\n } catch {\n return false;\n }\n}\n\n/** Is the path an existing regular file? Tolerant (false on any stat error). */\nexport function isFile(p: string): boolean {\n try {\n return statSync(p).isFile();\n } catch {\n return false;\n }\n}\n\n/**\n * Recursively list every file under `root` whose name matches `predicate`.\n * Tolerant: an unreadable directory is skipped, never thrown. Returns absolute\n * paths in directory-walk order. A non-existent root yields [].\n */\nexport function walkFiles(\n root: string,\n predicate: (name: string, absPath: string) => boolean,\n maxDepth = 12,\n): string[] {\n const out: string[] = [];\n if (!isDir(root)) return out;\n\n const stack: Array<{ dir: string; depth: number }> = [{ dir: root, depth: 0 }];\n while (stack.length > 0) {\n const { dir, depth } = stack.pop() as { dir: string; depth: number };\n let entries: import(\"node:fs\").Dirent[];\n try {\n entries = readdirSync(dir, { withFileTypes: true });\n } catch {\n continue; // unreadable dir → skip\n }\n for (const entry of entries) {\n const abs = join(dir, entry.name);\n if (entry.isDirectory()) {\n if (depth < maxDepth) stack.push({ dir: abs, depth: depth + 1 });\n } else if (entry.isFile() && predicate(entry.name, abs)) {\n out.push(abs);\n }\n }\n }\n return out;\n}\n\n/**\n * List immediate subdirectory names of `dir` (not recursive). Tolerant: returns\n * [] for a missing/unreadable directory.\n */\nexport function listSubdirs(dir: string): string[] {\n if (!isDir(dir)) return [];\n try {\n return readdirSync(dir, { withFileTypes: true })\n .filter((e) => e.isDirectory())\n .map((e) => join(dir, e.name));\n } catch {\n return [];\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/usage/paths.ts"],"sourcesContent":["/**\n * usage/paths — per-platform HOST storage-root resolution + small fs walkers.\n *\n * This is the read-only complement to core/paths.ts: where that module resolves\n * the FRAMEWORK data-root (~/.agent-connector), this one resolves each agent\n * CLI's OWN native storage roots (~/.qwen, ~/.claude, …) so the usage readers\n * can parse them. It NEVER writes; it only enumerates files.\n *\n * Ported from tokscale paths.rs (the tokscale cache dir) and from each reader's\n * storage-path spec (docs/research/usage-readers.json). Resolution order is\n * uniform across platforms:\n * 1. an explicit AGENT_CONNECTOR_<PLATFORM>_DIR env override (verbatim, when\n * non-empty — an empty string is treated as unset so we never resolve to \"\");\n * 2. the platform-specific default for the current OS.\n *\n * The \"tokscale cache dir\" (~/.config/tokscale, or AGENT_CONNECTOR_TOKSCALE_DIR)\n * is where synced readers (cursor/antigravity/antigravity-cli/trae/warp) look for\n * a local cache that a separate tokscale run may have produced — we read it if\n * present, but we never create or sync it. (Antigravity's own native store is\n * protobuf .pb with no public schema, so it too is synced-cache-or-skip.)\n */\n\nimport {\n existsSync,\n readdirSync,\n statSync,\n} from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { isAbsolute, join, resolve } from \"node:path\";\n\n// ─────────────────────────────────────────────────────────────────────────\n// Home / env helpers\n// ─────────────────────────────────────────────────────────────────────────\n\n/** Expand a leading \"~\" (and \"~/\") to the user's home directory. */\nexport function expandHome(p: string): string {\n if (p === \"~\") return homedir();\n if (p.startsWith(\"~/\") || p.startsWith(\"~\\\\\")) {\n return join(homedir(), p.slice(2));\n }\n return p;\n}\n\n/**\n * Read an env override, treating empty/blank as unset (mirrors tokscale's\n * is_config_dir_overridden contract: an empty override must NOT resolve to \"\").\n * Relative paths are resolved against the process CWD; \"~\" is expanded.\n */\nfunction envOverride(name: string): string | undefined {\n const raw = process.env[name];\n if (raw == null || raw.trim() === \"\") return undefined;\n const expanded = expandHome(raw.trim());\n return isAbsolute(expanded) ? expanded : resolve(expanded);\n}\n\n/** $XDG_DATA_HOME (when set & non-empty) else ~/.local/share. */\nfunction xdgDataHome(): string {\n const xdg = process.env.XDG_DATA_HOME;\n if (xdg && xdg.trim() !== \"\") return resolve(expandHome(xdg.trim()));\n return join(homedir(), \".local\", \"share\");\n}\n\n/** $XDG_CONFIG_HOME (when set & non-empty) else ~/.config. */\nfunction xdgConfigHome(): string {\n const xdg = process.env.XDG_CONFIG_HOME;\n if (xdg && xdg.trim() !== \"\") return resolve(expandHome(xdg.trim()));\n return join(homedir(), \".config\");\n}\n\n/** Windows %LOCALAPPDATA% else ~/AppData/Local. */\nfunction localAppData(): string {\n const v = process.env.LOCALAPPDATA;\n if (v && v.trim() !== \"\") return resolve(v.trim());\n return join(homedir(), \"AppData\", \"Local\");\n}\n\nconst isMac = process.platform === \"darwin\";\nconst isWin = process.platform === \"win32\";\n\n// ─────────────────────────────────────────────────────────────────────────\n// tokscale cache dir (for synced readers)\n// ─────────────────────────────────────────────────────────────────────────\n\n/**\n * Resolve the tokscale config dir (where synced caches live). Ported from\n * tokscale paths.rs get_config_dir():\n * 1. AGENT_CONNECTOR_TOKSCALE_DIR override (verbatim, non-empty);\n * 2. macOS: $HOME/.config/tokscale (NOT ~/Library/Application Support);\n * 3. Linux: $XDG_CONFIG_HOME/tokscale or ~/.config/tokscale;\n * 4. Windows: %APPDATA%/tokscale (config_dir equivalent) else ~/.config/tokscale.\n *\n * We use AGENT_CONNECTOR_TOKSCALE_DIR (not TOKSCALE_CONFIG_DIR) so the framework\n * never accidentally couples to a tokscale install's hermetic test env.\n */\nexport function tokscaleConfigDir(): string {\n const override = envOverride(\"AGENT_CONNECTOR_TOKSCALE_DIR\");\n if (override) return override;\n if (isMac) return join(homedir(), \".config\", \"tokscale\");\n if (isWin) {\n const appData = process.env.APPDATA;\n if (appData && appData.trim() !== \"\") return join(resolve(appData.trim()), \"tokscale\");\n return join(homedir(), \".config\", \"tokscale\");\n }\n return join(xdgConfigHome(), \"tokscale\");\n}\n\n/** The directory a synced platform's local cache lives under, e.g. `<tokscale>/cursor-cache`. */\nexport function tokscaleCacheDir(name: string): string {\n return join(tokscaleConfigDir(), name);\n}\n\n// ─────────────────────────────────────────────────────────────────────────\n// Antigravity native store roots (DETECTION ONLY — not parsed for usage)\n//\n// CONFIRMED-BY-INSTALL (2026-06-03, docs/research/antigravity-paths-confirmed.md):\n// the native Antigravity store is `~/.gemini/antigravity/conversations/<uuid>.pb`\n// — PROTOBUF with no public schema — and `brain/<uuid>/` holds only media +\n// `*.metadata.json`. There are NO `transcript*.jsonl` files. The `agy` CLI shares\n// this SAME `~/.gemini/antigravity/` dir (no separate config/storage dir). So the\n// native dir is used only for platform DETECTION (in the adapters); the usage\n// readers do NOT parse it (protobuf, unreadable) — they are SYNCED readers that\n// read the tokscale synced-cache instead (see hostRoots → antigravity-cache).\n//\n// These helpers are retained for any detection caller and honor the standard\n// AGENT_CONNECTOR_<PLATFORM>_DIR override (prepended, preferred when set).\n// ─────────────────────────────────────────────────────────────────────────\n\n/**\n * The native Antigravity store root for DETECTION: `~/.gemini/antigravity/`\n * (CONFIRMED). Its `conversations/<uuid>.pb` payloads are protobuf with no public\n * schema, so this dir is NOT parsed for usage — only its presence is a signal.\n *\n * Honors AGENT_CONNECTOR_ANTIGRAVITY_DIR (verbatim, when set) as the override.\n */\nexport function antigravityNativeRoots(): string[] {\n const out: string[] = [];\n const override = envOverride(\"AGENT_CONNECTOR_ANTIGRAVITY_DIR\");\n if (override) out.push(override);\n out.push(join(homedir(), \".gemini\", \"antigravity\"));\n return out;\n}\n\n/**\n * The native store root for the Antigravity CLI (`agy`) for DETECTION. CONFIRMED:\n * `agy` has NO separate dir — it SHARES the IDE's `~/.gemini/antigravity/` (also\n * protobuf, not parsed for usage).\n *\n * Honors AGENT_CONNECTOR_ANTIGRAVITY_CLI_DIR (verbatim, when set) as the override.\n */\nexport function antigravityCliNativeRoots(): string[] {\n const out: string[] = [];\n const override = envOverride(\"AGENT_CONNECTOR_ANTIGRAVITY_CLI_DIR\");\n if (override) out.push(override);\n out.push(join(homedir(), \".gemini\", \"antigravity\"));\n return out;\n}\n\n// ─────────────────────────────────────────────────────────────────────────\n// Per-platform host roots\n// ─────────────────────────────────────────────────────────────────────────\n\n/**\n * Candidate host storage roots for a platform, most-preferred first. Readers\n * iterate the returned list and use the first that exists (each variant is the\n * OS-correct default; the env override, when present, is prepended).\n *\n * Only the platforms this subsystem currently ships a reader for are listed in\n * detail; the table is structured so a new platform is one new case. Returning\n * `[]` (no candidate root) makes a reader fail-open to zero records.\n */\nexport function hostRoots(platformId: string): string[] {\n const out: string[] = [];\n const override = envOverride(`AGENT_CONNECTOR_${platformId.toUpperCase().replace(/-/g, \"_\")}_DIR`);\n if (override) out.push(override);\n\n switch (platformId) {\n case \"qwen-code\":\n // ~/.qwen/projects/*/chats/*.jsonl\n out.push(join(homedir(), \".qwen\", \"projects\"));\n break;\n case \"claude-code\":\n out.push(join(homedir(), \".claude\", \"projects\"));\n break;\n case \"codex\":\n out.push(join(homedir(), \".codex\", \"sessions\"));\n break;\n case \"gemini-cli\":\n out.push(join(homedir(), \".gemini\", \"tmp\"));\n break;\n case \"pi\":\n out.push(join(homedir(), \".pi\", \"agent\", \"sessions\"));\n break;\n case \"kimi\":\n // TWO Moonshot products share the \"kimi\" id with DIFFERENT session trees:\n // - Kimi Code (newer, @moonshot-ai/kimi-code): ~/.kimi-code/sessions/...\n // (deeper tree, see readers/kimi.ts) — the product our adapter targets.\n // - Kimi CLI (older): ~/.kimi/sessions/<GROUP>/<UUID>/wire.jsonl\n // Both are scanned (Kimi Code preferred first). $KIMI_CODE_HOME relocates\n // the Kimi Code home and is honored ahead of these in readers/kimi.ts.\n out.push(join(homedir(), \".kimi-code\", \"sessions\"));\n out.push(join(homedir(), \".kimi\", \"sessions\"));\n break;\n case \"copilot-cli\":\n out.push(join(xdgDataHome(), \"Copilot\", \"telemetry\"));\n out.push(join(xdgConfigHome(), \"copilot\", \"telemetry\"));\n break;\n case \"amp\":\n out.push(join(xdgDataHome(), \"amp\", \"threads\"));\n break;\n case \"droid\":\n out.push(join(homedir(), \".factory\", \"sessions\"));\n break;\n case \"mux\":\n // Xum renamed its home `.mux` → `.xum` and still reads the legacy one, so\n // a machine can hold either (or both, mid-migration). Both roots are\n // pushed — the reader is fail-open and merges whatever it finds.\n out.push(join(homedir(), \".xum\", \"sessions\"));\n out.push(join(homedir(), \".mux\", \"sessions\"));\n break;\n case \"kiro\":\n out.push(join(homedir(), \".kiro\", \"sessions\", \"cli\"));\n break;\n case \"opencode\":\n out.push(join(xdgDataHome(), \"opencode\", \"opencode.db\"));\n break;\n case \"goose\":\n if (isMac) out.push(join(homedir(), \"Library\", \"Application Support\", \"goose\", \"sessions\", \"sessions.db\"));\n out.push(join(xdgDataHome(), \"goose\", \"sessions\", \"sessions.db\"));\n out.push(join(xdgDataHome(), \"Block\", \"goose\", \"sessions\", \"sessions.db\"));\n break;\n case \"hermes\":\n out.push(join(homedir(), \".hermes\", \"state.db\"));\n break;\n case \"kilo-cli\":\n out.push(join(xdgDataHome(), \"kilo\", \"kilo.db\"));\n break;\n case \"crush\":\n out.push(join(homedir(), \".cache\", \"crush\", \"crush.db\"));\n break;\n case \"zed\":\n if (isMac) out.push(join(homedir(), \"Library\", \"Application Support\", \"Zed\", \"threads\", \"threads.db\"));\n else if (isWin) out.push(join(localAppData(), \"Zed\", \"threads\", \"threads.db\"));\n else out.push(join(xdgDataHome(), \"zed\", \"threads\", \"threads.db\"));\n break;\n // Synced platforms: local cache under the tokscale config dir.\n case \"cursor\":\n out.push(tokscaleCacheDir(\"cursor-cache\"));\n break;\n case \"antigravity\":\n // SYNCED: the native store is protobuf (.pb, no public schema) and NOT\n // parseable, so the reader reads only the tokscale synced-cache mirror if a\n // separate tokscale run produced one (else [] → \"requires sync\"). The\n // native `~/.gemini/antigravity/` dir is used only for detection.\n out.push(tokscaleCacheDir(\"antigravity-cache\"));\n break;\n case \"antigravity-cli\":\n // SYNCED: `agy` shares the IDE's protobuf (.pb) store (no schema), so the\n // reader reads only the tokscale synced-cache mirror if present (else [] →\n // \"requires sync\"). Shares the IDE's antigravity-cache name (same data).\n out.push(tokscaleCacheDir(\"antigravity-cache\"));\n break;\n case \"trae\":\n out.push(tokscaleCacheDir(\"trae-cache\"));\n break;\n case \"warp\":\n out.push(tokscaleCacheDir(\"warp-cache\"));\n break;\n default:\n break;\n }\n return out;\n}\n\n/** First existing host root for a platform, or undefined when none is present. */\nexport function firstExistingRoot(platformId: string): string | undefined {\n for (const root of hostRoots(platformId)) {\n if (existsSync(root)) return root;\n }\n return undefined;\n}\n\n// ─────────────────────────────────────────────────────────────────────────\n// Directory / glob walkers (tolerant — never throw)\n// ─────────────────────────────────────────────────────────────────────────\n\n/** Is the path an existing directory? Tolerant (false on any stat error). */\nexport function isDir(p: string): boolean {\n try {\n return statSync(p).isDirectory();\n } catch {\n return false;\n }\n}\n\n/** Is the path an existing regular file? Tolerant (false on any stat error). */\nexport function isFile(p: string): boolean {\n try {\n return statSync(p).isFile();\n } catch {\n return false;\n }\n}\n\n/**\n * Recursively list every file under `root` whose name matches `predicate`.\n * Tolerant: an unreadable directory is skipped, never thrown. Returns absolute\n * paths in directory-walk order. A non-existent root yields [].\n */\nexport function walkFiles(\n root: string,\n predicate: (name: string, absPath: string) => boolean,\n maxDepth = 12,\n): string[] {\n const out: string[] = [];\n if (!isDir(root)) return out;\n\n const stack: Array<{ dir: string; depth: number }> = [{ dir: root, depth: 0 }];\n while (stack.length > 0) {\n const { dir, depth } = stack.pop() as { dir: string; depth: number };\n let entries: import(\"node:fs\").Dirent[];\n try {\n entries = readdirSync(dir, { withFileTypes: true });\n } catch {\n continue; // unreadable dir → skip\n }\n for (const entry of entries) {\n const abs = join(dir, entry.name);\n if (entry.isDirectory()) {\n if (depth < maxDepth) stack.push({ dir: abs, depth: depth + 1 });\n } else if (entry.isFile() && predicate(entry.name, abs)) {\n out.push(abs);\n }\n }\n }\n return out;\n}\n\n/**\n * List immediate subdirectory names of `dir` (not recursive). Tolerant: returns\n * [] for a missing/unreadable directory.\n */\nexport function listSubdirs(dir: string): string[] {\n if (!isDir(dir)) return [];\n try {\n return readdirSync(dir, { withFileTypes: true })\n .filter((e) => e.isDirectory())\n .map((e) => join(dir, e.name));\n } catch {\n return [];\n }\n}\n"],"mappings":"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","names":[]}
@@ -11,142 +11,136 @@ var USAGE_READER_REGISTRY = [
11
11
  platformId: "claude-code",
12
12
  format: "jsonl",
13
13
  kind: "local",
14
- load: () => import("./claude-code-NMRKTAP7.js").then((m) => m.default)
14
+ load: () => import("./claude-code-L4VXCHKA.js").then((m) => m.default)
15
15
  },
16
16
  {
17
17
  platformId: "codex",
18
18
  format: "jsonl",
19
19
  kind: "local",
20
- load: () => import("./codex-YAORPCOD.js").then((m) => m.default)
20
+ load: () => import("./codex-H4MY6747.js").then((m) => m.default)
21
21
  },
22
22
  {
23
23
  platformId: "gemini-cli",
24
24
  format: "jsonl",
25
25
  kind: "local",
26
- load: () => import("./gemini-cli-NMVVBO3K.js").then((m) => m.default)
26
+ load: () => import("./gemini-cli-2B6TS7KU.js").then((m) => m.default)
27
27
  },
28
28
  {
29
29
  platformId: "qwen-code",
30
30
  format: "jsonl",
31
31
  kind: "local",
32
- load: () => import("./qwen-code-GQILBJ5B.js").then((m) => m.default)
32
+ load: () => import("./qwen-code-42TRBZ47.js").then((m) => m.default)
33
33
  },
34
34
  {
35
35
  platformId: "copilot-cli",
36
36
  format: "jsonl",
37
37
  kind: "local",
38
- load: () => import("./copilot-cli-MZTAWMPW.js").then((m) => m.default)
38
+ load: () => import("./copilot-cli-FIQNEHFC.js").then((m) => m.default)
39
39
  },
40
40
  {
41
41
  platformId: "pi",
42
42
  format: "jsonl",
43
43
  kind: "local",
44
- load: () => import("./pi-GGDQREVG.js").then((m) => m.default)
44
+ load: () => import("./pi-34CVX5WX.js").then((m) => m.default)
45
45
  },
46
46
  {
47
47
  platformId: "kimi",
48
48
  format: "jsonl",
49
49
  kind: "local",
50
- load: () => import("./kimi-5FHEXGZD.js").then((m) => m.default)
50
+ load: () => import("./kimi-BDW32HPV.js").then((m) => m.default)
51
51
  },
52
52
  {
53
53
  platformId: "openclaw",
54
54
  format: "jsonl",
55
55
  kind: "local",
56
- load: () => import("./openclaw-5EQFGOWL.js").then((m) => m.default)
56
+ load: () => import("./openclaw-QC6ROV5Z.js").then((m) => m.default)
57
57
  },
58
58
  // U2 — JSON readers
59
59
  {
60
60
  platformId: "amp",
61
61
  format: "json",
62
62
  kind: "local",
63
- load: () => import("./amp-BQZOL5GR.js").then((m) => m.default)
63
+ load: () => import("./amp-NDP2J4K3.js").then((m) => m.default)
64
64
  },
65
65
  {
66
66
  platformId: "droid",
67
67
  format: "json",
68
68
  kind: "local",
69
- load: () => import("./droid-U3ZBLQFO.js").then((m) => m.default)
69
+ load: () => import("./droid-SNF6TQK2.js").then((m) => m.default)
70
70
  },
71
71
  {
72
72
  platformId: "codebuff",
73
73
  format: "json",
74
74
  kind: "local",
75
- load: () => import("./codebuff-ETYT5UBL.js").then((m) => m.default)
75
+ load: () => import("./codebuff-GUNT2KBT.js").then((m) => m.default)
76
76
  },
77
77
  {
78
78
  platformId: "mux",
79
79
  format: "json",
80
80
  kind: "local",
81
- load: () => import("./mux-XM6AP35L.js").then((m) => m.default)
82
- },
83
- {
84
- platformId: "roo-code",
85
- format: "json",
86
- kind: "local",
87
- load: () => import("./roo-code-SUWI4BBN.js").then((m) => m.default)
81
+ load: () => import("./mux-H4PNZRKG.js").then((m) => m.default)
88
82
  },
89
83
  {
90
84
  platformId: "kilo",
91
85
  format: "json",
92
86
  kind: "local",
93
- load: () => import("./kilo-SW7BH6EG.js").then((m) => m.default)
87
+ load: () => import("./kilo-CHH3XI7H.js").then((m) => m.default)
94
88
  },
95
89
  {
96
90
  platformId: "kiro",
97
91
  format: "json",
98
92
  kind: "local",
99
- load: () => import("./kiro-WGOI5CGT.js").then((m) => m.default)
93
+ load: () => import("./kiro-HZF4BADZ.js").then((m) => m.default)
100
94
  },
101
95
  // U3 — SQLite readers (via sql.js wasm)
102
96
  {
103
97
  platformId: "opencode",
104
98
  format: "sqlite",
105
99
  kind: "local",
106
- load: () => import("./opencode-QGP4ALQY.js").then((m) => m.default)
100
+ load: () => import("./opencode-USR7ONCJ.js").then((m) => m.default)
107
101
  },
108
102
  {
109
103
  platformId: "goose",
110
104
  format: "sqlite",
111
105
  kind: "local",
112
- load: () => import("./goose-64V46Y2W.js").then((m) => m.default)
106
+ load: () => import("./goose-KDHNJE7Z.js").then((m) => m.default)
113
107
  },
114
108
  {
115
109
  platformId: "hermes",
116
110
  format: "sqlite",
117
111
  kind: "local",
118
- load: () => import("./hermes-F3EGTK6N.js").then((m) => m.default)
112
+ load: () => import("./hermes-MVCJAPSI.js").then((m) => m.default)
119
113
  },
120
114
  {
121
115
  platformId: "kilo-cli",
122
116
  format: "sqlite",
123
117
  kind: "local",
124
- load: () => import("./kilo-cli-ZF272ZHN.js").then((m) => m.default)
118
+ load: () => import("./kilo-cli-L57AGENB.js").then((m) => m.default)
125
119
  },
126
120
  {
127
121
  platformId: "synthetic",
128
122
  format: "sqlite",
129
123
  kind: "local",
130
- load: () => import("./synthetic-6FRA7P5Q.js").then((m) => m.default)
124
+ load: () => import("./synthetic-YZ4FO7YR.js").then((m) => m.default)
131
125
  },
132
126
  {
133
127
  platformId: "crush",
134
128
  format: "sqlite",
135
129
  kind: "local",
136
- load: () => import("./crush-QBXLNN7T.js").then((m) => m.default)
130
+ load: () => import("./crush-HLM2DFW2.js").then((m) => m.default)
137
131
  },
138
132
  {
139
133
  platformId: "zed",
140
134
  format: "sqlite",
141
135
  kind: "local",
142
- load: () => import("./zed-XJFOOKCO.js").then((m) => m.default)
136
+ load: () => import("./zed-23T4G4CT.js").then((m) => m.default)
143
137
  },
144
138
  // U4 — synced/cloud readers (read tokscale local cache if present, else skip)
145
139
  {
146
140
  platformId: "cursor",
147
141
  format: "synced-cache",
148
142
  kind: "synced",
149
- load: () => import("./cursor-DIW43TRZ.js").then((m) => m.default)
143
+ load: () => import("./cursor-Y3X7YK3S.js").then((m) => m.default)
150
144
  },
151
145
  {
152
146
  // Antigravity IDE: the native `~/.gemini/antigravity/conversations/<uuid>.pb`
@@ -156,7 +150,7 @@ var USAGE_READER_REGISTRY = [
156
150
  platformId: "antigravity",
157
151
  format: "synced-cache",
158
152
  kind: "synced",
159
- load: () => import("./antigravity-EA4L225L.js").then((m) => m.default)
153
+ load: () => import("./antigravity-FY5553OR.js").then((m) => m.default)
160
154
  },
161
155
  {
162
156
  // Antigravity CLI (`agy`): SHARES the IDE's protobuf (.pb) store (no separate
@@ -165,19 +159,19 @@ var USAGE_READER_REGISTRY = [
165
159
  platformId: "antigravity-cli",
166
160
  format: "synced-cache",
167
161
  kind: "synced",
168
- load: () => import("./antigravity-cli-B2HXZFYQ.js").then((m) => m.default)
162
+ load: () => import("./antigravity-cli-IUAE3SEX.js").then((m) => m.default)
169
163
  },
170
164
  {
171
165
  platformId: "trae",
172
166
  format: "synced-cache",
173
167
  kind: "synced",
174
- load: () => import("./trae-CPPYASR2.js").then((m) => m.default)
168
+ load: () => import("./trae-7PXIXNQO.js").then((m) => m.default)
175
169
  },
176
170
  {
177
171
  platformId: "warp",
178
172
  format: "synced-cache",
179
173
  kind: "synced",
180
- load: () => import("./warp-NRBBJQR2.js").then((m) => m.default)
174
+ load: () => import("./warp-57BIWGD3.js").then((m) => m.default)
181
175
  }
182
176
  ];
183
177
  var REGISTRY_BY_ID = new Map(
@@ -354,4 +348,4 @@ export {
354
348
  hostLeaderboard,
355
349
  formatHostLeaderboard
356
350
  };
357
- //# sourceMappingURL=chunk-IRUYJD23.js.map
351
+ //# sourceMappingURL=chunk-AN7QCLT7.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/usage/registry.ts","../src/usage/scan.ts","../src/usage/leaderboard.ts"],"sourcesContent":["/**\n * usage/registry — the single source of truth for HOST usage readers.\n *\n * Mirrors adapters/registry.ts: each platform is ONE entry with a lazy `load()`\n * thunk resolving the reader module's default export. Adding a platform is a\n * single new entry here plus one `readers/<id>.ts` file — `getUsageReader` /\n * `allUsageReaders` and the scan orchestrator all derive from this list.\n *\n * `format` and `kind` are declared on the factory so the scan layer can describe\n * a reader (e.g. note a \"synced\" reader as skipped) without importing it.\n */\n\nimport type { PlatformId } from \"../core/types.js\";\nimport type { UsageReader, UsageReaderFactory } from \"./types.js\";\n\n/**\n * Authoritative list of usage readers. To add a platform: drop\n * `src/usage/readers/<id>.ts` (default-exporting a {@link UsageReader}) and add\n * one entry below.\n */\nexport const USAGE_READER_REGISTRY: readonly UsageReaderFactory[] = [\n // U1 — JSONL readers\n {\n platformId: \"claude-code\",\n format: \"jsonl\",\n kind: \"local\",\n load: () => import(\"./readers/claude-code.js\").then((m) => m.default),\n },\n {\n platformId: \"codex\",\n format: \"jsonl\",\n kind: \"local\",\n load: () => import(\"./readers/codex.js\").then((m) => m.default),\n },\n {\n platformId: \"gemini-cli\",\n format: \"jsonl\",\n kind: \"local\",\n load: () => import(\"./readers/gemini-cli.js\").then((m) => m.default),\n },\n {\n platformId: \"qwen-code\",\n format: \"jsonl\",\n kind: \"local\",\n load: () => import(\"./readers/qwen-code.js\").then((m) => m.default),\n },\n {\n platformId: \"copilot-cli\",\n format: \"jsonl\",\n kind: \"local\",\n load: () => import(\"./readers/copilot-cli.js\").then((m) => m.default),\n },\n {\n platformId: \"pi\",\n format: \"jsonl\",\n kind: \"local\",\n load: () => import(\"./readers/pi.js\").then((m) => m.default),\n },\n {\n platformId: \"kimi\",\n format: \"jsonl\",\n kind: \"local\",\n load: () => import(\"./readers/kimi.js\").then((m) => m.default),\n },\n {\n platformId: \"openclaw\",\n format: \"jsonl\",\n kind: \"local\",\n load: () => import(\"./readers/openclaw.js\").then((m) => m.default),\n },\n // U2 — JSON readers\n {\n platformId: \"amp\",\n format: \"json\",\n kind: \"local\",\n load: () => import(\"./readers/amp.js\").then((m) => m.default),\n },\n {\n platformId: \"droid\",\n format: \"json\",\n kind: \"local\",\n load: () => import(\"./readers/droid.js\").then((m) => m.default),\n },\n {\n platformId: \"codebuff\",\n format: \"json\",\n kind: \"local\",\n load: () => import(\"./readers/codebuff.js\").then((m) => m.default),\n },\n {\n platformId: \"mux\",\n format: \"json\",\n kind: \"local\",\n load: () => import(\"./readers/mux.js\").then((m) => m.default),\n },\n {\n platformId: \"kilo\",\n format: \"json\",\n kind: \"local\",\n load: () => import(\"./readers/kilo.js\").then((m) => m.default),\n },\n {\n platformId: \"kiro\",\n format: \"json\",\n kind: \"local\",\n load: () => import(\"./readers/kiro.js\").then((m) => m.default),\n },\n // U3 — SQLite readers (via sql.js wasm)\n {\n platformId: \"opencode\",\n format: \"sqlite\",\n kind: \"local\",\n load: () => import(\"./readers/opencode.js\").then((m) => m.default),\n },\n {\n platformId: \"goose\",\n format: \"sqlite\",\n kind: \"local\",\n load: () => import(\"./readers/goose.js\").then((m) => m.default),\n },\n {\n platformId: \"hermes\",\n format: \"sqlite\",\n kind: \"local\",\n load: () => import(\"./readers/hermes.js\").then((m) => m.default),\n },\n {\n platformId: \"kilo-cli\",\n format: \"sqlite\",\n kind: \"local\",\n load: () => import(\"./readers/kilo-cli.js\").then((m) => m.default),\n },\n {\n platformId: \"synthetic\",\n format: \"sqlite\",\n kind: \"local\",\n load: () => import(\"./readers/synthetic.js\").then((m) => m.default),\n },\n {\n platformId: \"crush\",\n format: \"sqlite\",\n kind: \"local\",\n load: () => import(\"./readers/crush.js\").then((m) => m.default),\n },\n {\n platformId: \"zed\",\n format: \"sqlite\",\n kind: \"local\",\n load: () => import(\"./readers/zed.js\").then((m) => m.default),\n },\n // U4 — synced/cloud readers (read tokscale local cache if present, else skip)\n {\n platformId: \"cursor\",\n format: \"synced-cache\",\n kind: \"synced\",\n load: () => import(\"./readers/cursor.js\").then((m) => m.default),\n },\n {\n // Antigravity IDE: the native `~/.gemini/antigravity/conversations/<uuid>.pb`\n // store is PROTOBUF with no public schema (CONFIRMED by install) → not\n // parseable. So this is a SYNCED reader: it reads the tokscale synced-cache\n // if present, else [] (\"requires sync\"). The native dir is detection-only.\n platformId: \"antigravity\",\n format: \"synced-cache\",\n kind: \"synced\",\n load: () => import(\"./readers/antigravity.js\").then((m) => m.default),\n },\n {\n // Antigravity CLI (`agy`): SHARES the IDE's protobuf (.pb) store (no separate\n // dir, no public schema) → not parseable. SYNCED reader: tokscale cache if\n // present, else [] (\"requires sync\").\n platformId: \"antigravity-cli\",\n format: \"synced-cache\",\n kind: \"synced\",\n load: () => import(\"./readers/antigravity-cli.js\").then((m) => m.default),\n },\n {\n platformId: \"trae\",\n format: \"synced-cache\",\n kind: \"synced\",\n load: () => import(\"./readers/trae.js\").then((m) => m.default),\n },\n {\n platformId: \"warp\",\n format: \"synced-cache\",\n kind: \"synced\",\n load: () => import(\"./readers/warp.js\").then((m) => m.default),\n },\n];\n\n/** O(1) lookup index, built once at module-load time. */\nconst REGISTRY_BY_ID: ReadonlyMap<PlatformId, UsageReaderFactory> = new Map(\n USAGE_READER_REGISTRY.map((factory) => [factory.platformId, factory] as const),\n);\n\n/** Look up the lazy factory for a platform id, or undefined when unregistered. */\nexport function getUsageReaderFactory(id: PlatformId | string): UsageReaderFactory | undefined {\n return REGISTRY_BY_ID.get(id as PlatformId);\n}\n\n/** Resolve a platform id to its reader singleton, or undefined when unregistered. */\nexport async function getUsageReader(id: PlatformId | string): Promise<UsageReader | undefined> {\n const factory = getUsageReaderFactory(id);\n return factory ? factory.load() : undefined;\n}\n\n/** Load every registered reader (imports run in parallel; preserves order). */\nexport async function allUsageReaders(): Promise<UsageReader[]> {\n return Promise.all(USAGE_READER_REGISTRY.map((factory) => factory.load()));\n}\n","/**\n * usage/scan — orchestrate every registered reader into one deduped record set.\n *\n * Iterates USAGE_READER_REGISTRY (optionally filtered by platform), loads and\n * runs each reader, and folds the results together. Per-reader robustness:\n * • a reader that throws (it shouldn't — readers are fail-open) is CAUGHT and\n * recorded as skipped, never aborting the whole scan;\n * • a \"synced\" reader that returns no rows is noted as skipped(\"requires sync\")\n * so the report can honestly explain why a cloud platform shows nothing;\n * • a reader that simply has no local data returns [] silently (no root).\n *\n * After collection: global cross-source dedupe, then a final sinceMs filter\n * (readers also honor sinceMs, but the scan re-filters as a backstop).\n */\n\nimport type { PlatformId } from \"../core/types.js\";\nimport type { UsageReader, UsageReaderFactory, UsageRecord } from \"./types.js\";\nimport { dedupe } from \"./aggregate.js\";\nimport { USAGE_READER_REGISTRY } from \"./registry.js\";\n\n/** A platform the scan could not (fully) read, with a human reason. */\nexport interface SkippedPlatform {\n platformId: PlatformId;\n reason: string;\n}\n\n/** Options controlling a scan. */\nexport interface ScanOptions {\n /** Lower-bound epoch ms; records older than this are dropped. */\n sinceMs?: number;\n /** Restrict to these platforms; omit/empty to scan every registered reader. */\n platforms?: PlatformId[];\n}\n\n/** The result of a scan: deduped records + notes on anything skipped. */\nexport interface ScanResult {\n records: UsageRecord[];\n skipped: SkippedPlatform[];\n}\n\n/**\n * Scan host usage across the selected readers. Returns deduped, since-filtered\n * records plus a `skipped` list (load/read failures and synced-but-uncached\n * platforms). Never throws — a single bad reader is isolated.\n */\nexport async function scanUsage(opts: ScanOptions = {}): Promise<ScanResult> {\n const { sinceMs, platforms } = opts;\n const wanted = platforms && platforms.length > 0 ? new Set(platforms) : undefined;\n\n const factories = USAGE_READER_REGISTRY.filter(\n (f) => wanted === undefined || wanted.has(f.platformId),\n );\n\n const collected: UsageRecord[] = [];\n const skipped: SkippedPlatform[] = [];\n\n // Run readers concurrently; each result is independent.\n const results = await Promise.all(\n factories.map(async (factory) => readOne(factory, sinceMs)),\n );\n\n for (const r of results) {\n if (r.skipped) skipped.push(r.skipped);\n // Loop-push, never push(...spread): a reader over a large host history can\n // return hundreds of thousands of records, and spreading them as call\n // arguments overflows the stack (RangeError) — hit on a real machine the\n // first time the claude-code reader saw a multi-week log directory.\n for (const rec of r.records) collected.push(rec);\n }\n\n const deduped = dedupe(collected);\n const filtered =\n sinceMs === undefined ? deduped : deduped.filter((rec) => rec.ts >= sinceMs);\n\n return { records: filtered, skipped };\n}\n\n/** Load + run a single reader, isolating any failure into a skip note. */\nasync function readOne(\n factory: UsageReaderFactory,\n sinceMs: number | undefined,\n): Promise<{ records: UsageRecord[]; skipped?: SkippedPlatform }> {\n let reader: UsageReader;\n try {\n reader = await factory.load();\n } catch (err) {\n return {\n records: [],\n skipped: { platformId: factory.platformId, reason: `failed to load reader: ${errMsg(err)}` },\n };\n }\n\n let records: UsageRecord[];\n try {\n records = await reader.read(sinceMs === undefined ? {} : { sinceMs });\n } catch (err) {\n return {\n records: [],\n skipped: { platformId: factory.platformId, reason: `read error: ${errMsg(err)}` },\n };\n }\n\n if (records.length === 0 && factory.kind === \"synced\") {\n return {\n records: [],\n skipped: {\n platformId: factory.platformId,\n reason: \"requires sync (no local cache found)\",\n },\n };\n }\n\n return { records };\n}\n\nfunction errMsg(err: unknown): string {\n return err instanceof Error ? err.message : String(err);\n}\n","/**\n * usage/leaderboard — the USER / HOST leaderboard, derived from the host usage\n * readers (src/usage/*).\n *\n * Where {@link import(\"../telemetry/leaderboard.js\")} answers \"which MCP server\n * costs the most\" from the bytes WE wrap, this answers \"which CLI / host spent\n * the most\" from each agent's OWN native session logs. Origin is always\n * `host-native`; it is NEVER summed with the serve-proxy MCP leaderboard (they\n * measure different things: server bytes vs whole-conversation usage).\n *\n * Thin wrapper over {@link scanUsage} + {@link aggregateBy}: the ranking is just\n * the platform (or model) group-by, which `aggregateBy` already sorts by total\n * tokens desc. A dedicated formatter notes synced / host-estimated platforms.\n */\n\nimport type { SkippedPlatform } from \"./scan.js\";\nimport type { PlatformId } from \"../core/types.js\";\nimport type { UsageRecord, UsageSummary } from \"./types.js\";\nimport { aggregateBy } from \"./aggregate.js\";\nimport { scanUsage } from \"./scan.js\";\n\n/** Options for the host leaderboard queries. */\nexport interface HostLeaderboardOptions {\n /** Lower-bound epoch ms (inclusive); forwarded to {@link scanUsage}. */\n sinceMs?: number;\n /** Restrict to these platforms; omit/empty to scan every registered reader. */\n platforms?: PlatformId[];\n /** Rank dimension. \"platform\" (default) is the headline host leaderboard. */\n by?: \"platform\" | \"model\";\n}\n\n/** The host leaderboard result: ranked rows plus any honest skip notes. */\nexport interface HostLeaderboardResult {\n /** The ranking dimension actually used. */\n by: \"platform\" | \"model\";\n /** Ranked summary rows (sorted by total tokens desc by aggregateBy). */\n rows: UsageSummary[];\n /** Platforms the scan could not (fully) read (synced-but-uncached, errors). */\n skipped: SkippedPlatform[];\n}\n\n/**\n * The USER / HOST leaderboard: scan every host reader, then rank by platform\n * (the default — \"which CLI/host spent the most\") or by model. Returns the\n * ranked rows and the scan's skip notes so the formatter can stay honest about\n * cloud platforms that require a sync we do not perform.\n */\nexport async function hostLeaderboard(\n opts: HostLeaderboardOptions = {},\n): Promise<HostLeaderboardResult> {\n const by = opts.by ?? \"platform\";\n const scanOpts: { sinceMs?: number; platforms?: PlatformId[] } = {};\n if (opts.sinceMs !== undefined) scanOpts.sinceMs = opts.sinceMs;\n if (opts.platforms !== undefined && opts.platforms.length > 0) {\n scanOpts.platforms = opts.platforms;\n }\n const { records, skipped } = await scanUsage(scanOpts);\n const rows = aggregateBy(records, by);\n return { by, rows, skipped };\n}\n\n// ─────────────────────────────────────────────────────────────────────────\n// Formatting (mirrors usage/report.ts style: aligned table + honesty legend)\n// ─────────────────────────────────────────────────────────────────────────\n\n/** Compact integer formatting with thousands separators. */\nfunction fmtInt(n: number): string {\n return n.toLocaleString(\"en-US\");\n}\n\n/** Right-pad (left-aligned columns). */\nfunction padRight(s: string, width: number): string {\n return s.length >= width ? s : s + \" \".repeat(width - s.length);\n}\n\n/** Left-pad (right-aligned numeric columns). */\nfunction padLeft(s: string, width: number): string {\n return s.length >= width ? s : \" \".repeat(width - s.length) + s;\n}\n\n/**\n * Format the host leaderboard as an aligned, ranked table:\n * RANK | PLATFORM|MODEL | IN | OUT | CACHE_R | CACHE_W | REASON | TOTAL | SESS | CONF\n * with a TOTAL footer (worst confidence across rows), an estimate legend, and\n * skip notes for synced-but-uncached platforms.\n */\nexport function formatHostLeaderboard(\n result: HostLeaderboardResult,\n): string {\n const keyHeader = result.by === \"model\" ? \"MODEL\" : \"PLATFORM\";\n const headers = [\n \"RANK\",\n keyHeader,\n \"IN\",\n \"OUT\",\n \"CACHE_R\",\n \"CACHE_W\",\n \"REASON\",\n \"TOTAL\",\n \"SESS\",\n \"CONF\",\n ];\n\n // aggregateBy already sorts by total desc; re-sort defensively for stability.\n const sorted = [...result.rows].sort(\n (a, b) => b.total - a.total || b.lastTs - a.lastTs,\n );\n\n const dataRows = sorted.map((r, i) => [\n `${i + 1}`,\n r.key,\n fmtInt(r.tokens.input),\n fmtInt(r.tokens.output),\n fmtInt(r.tokens.cacheRead),\n fmtInt(r.tokens.cacheWrite),\n fmtInt(r.tokens.reasoning),\n fmtInt(r.total),\n fmtInt(r.sessions),\n r.confidence,\n ]);\n\n const totals = sorted.reduce(\n (acc, r) => {\n acc.input += r.tokens.input;\n acc.output += r.tokens.output;\n acc.cacheRead += r.tokens.cacheRead;\n acc.cacheWrite += r.tokens.cacheWrite;\n acc.reasoning += r.tokens.reasoning;\n acc.total += r.total;\n acc.sessions += r.sessions;\n return acc;\n },\n { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, reasoning: 0, total: 0, sessions: 0 },\n );\n const totalRow = [\n \"\",\n \"TOTAL\",\n fmtInt(totals.input),\n fmtInt(totals.output),\n fmtInt(totals.cacheRead),\n fmtInt(totals.cacheWrite),\n fmtInt(totals.reasoning),\n fmtInt(totals.total),\n fmtInt(totals.sessions),\n \"\",\n ];\n\n const widths = headers.map((h, col) => {\n let w = h.length;\n for (const row of dataRows) w = Math.max(w, (row[col] ?? \"\").length);\n w = Math.max(w, (totalRow[col] ?? \"\").length);\n return w;\n });\n\n // Left-align RANK (0), the KEY column (1), and CONF (9); numbers right.\n const leftCols = new Set<number>([0, 1, 9]);\n const renderRow = (cells: string[]): string =>\n cells\n .map((c, col) =>\n leftCols.has(col) ? padRight(c, widths[col] ?? 0) : padLeft(c, widths[col] ?? 0),\n )\n .join(\" \")\n .trimEnd();\n\n const ruleWidth = widths.reduce((a, b) => a + b, 0) + 2 * (widths.length - 1);\n const rule = \"-\".repeat(ruleWidth);\n\n const lines: string[] = [];\n lines.push(renderRow(headers));\n lines.push(rule);\n if (dataRows.length === 0) {\n lines.push(\"(no host usage found)\");\n } else {\n for (const row of dataRows) lines.push(renderRow(row));\n }\n lines.push(rule);\n lines.push(renderRow(totalRow));\n\n // Honesty legend — estimated rows and skipped synced platforms.\n if (sorted.some((r) => r.confidence === \"host-estimated\")) {\n lines.push(\"\");\n lines.push(\n \"note: host-estimated rows are derived (e.g. char/4 or cost-only), \" +\n \"not exact host-reported token counts.\",\n );\n }\n if (result.skipped.length > 0) {\n lines.push(\"\");\n lines.push(\"skipped (synced/host-estimated platforms):\");\n for (const s of result.skipped) lines.push(` - ${s.platformId}: ${s.reason}`);\n }\n\n return lines.join(\"\\n\");\n}\n"],"mappings":"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","names":[]}
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  allAdapters,
4
4
  loadAdapter
5
- } from "./chunk-G5HAIYRM.js";
5
+ } from "./chunk-QG26JEJF.js";
6
6
 
7
7
  // src/sdk/introspect.ts
8
8
  function hostCanFireEvent(c, event) {
@@ -87,4 +87,4 @@ export {
87
87
  hostsSupporting,
88
88
  surfaceSupport
89
89
  };
90
- //# sourceMappingURL=chunk-BXPSDNIB.js.map
90
+ //# sourceMappingURL=chunk-BD72ZF6D.js.map