@ken-jo/agent-connector 0.4.7 → 0.4.26

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 (271) hide show
  1. package/README.md +36 -24
  2. package/dist/{action-YCU53FNE.js → action-AZRZ3V7E.js} +14 -14
  3. package/dist/amazon-q-BWSOHTW5.js +571 -0
  4. package/dist/amazon-q-BWSOHTW5.js.map +1 -0
  5. package/dist/{amp-TULUPXXL.js → amp-BQZOL5GR.js} +2 -2
  6. package/dist/{amp-JPBQJJVM.js → amp-TF5X6OGH.js} +18 -50
  7. package/dist/amp-TF5X6OGH.js.map +1 -0
  8. package/dist/antigravity-3XHBPXZK.js +19 -0
  9. package/dist/{antigravity-STHZWMP3.js → antigravity-EA4L225L.js} +2 -2
  10. package/dist/{antigravity-cli-P6HADOAO.js → antigravity-cli-B2HXZFYQ.js} +2 -2
  11. package/dist/{antigravity-cli-D4PCCUG2.js → antigravity-cli-TJGOBUPK.js} +8 -7
  12. package/dist/{antigravity-cli-D4PCCUG2.js.map → antigravity-cli-TJGOBUPK.js.map} +1 -1
  13. package/dist/{chunk-CYOAH23F.js → chunk-25BNMXPP.js} +18 -18
  14. package/dist/{chunk-NLFPH4S2.js → chunk-2RPHDVHW.js} +2 -2
  15. package/dist/{chunk-PFDUGDOA.js → chunk-3I7UG52L.js} +25 -6
  16. package/dist/chunk-3I7UG52L.js.map +1 -0
  17. package/dist/{chunk-F5RX62T7.js → chunk-7QRUZAUG.js} +2 -2
  18. package/dist/{chunk-BCHWFTV4.js → chunk-F4DSMVZ7.js} +2 -2
  19. package/dist/chunk-FBJQGRET.js +38 -0
  20. package/dist/chunk-FBJQGRET.js.map +1 -0
  21. package/dist/{chunk-WZA4CSGJ.js → chunk-H53QZQJI.js} +15 -2
  22. package/dist/chunk-H53QZQJI.js.map +1 -0
  23. package/dist/{chunk-2F5QH3D4.js → chunk-HU6DZZBG.js} +36 -36
  24. package/dist/{chunk-7ECYDK5T.js → chunk-HZDU3J4U.js} +10 -5
  25. package/dist/chunk-HZDU3J4U.js.map +1 -0
  26. package/dist/{chunk-7L6ITC4T.js → chunk-IEGR4TP3.js} +22 -6
  27. package/dist/chunk-IEGR4TP3.js.map +1 -0
  28. package/dist/{chunk-SCVBYSF7.js → chunk-IRUYJD23.js} +28 -28
  29. package/dist/{chunk-6RYPUR6O.js → chunk-IW46JIQM.js} +34 -44
  30. package/dist/chunk-IW46JIQM.js.map +1 -0
  31. package/dist/{chunk-WFXWJITA.js → chunk-JLMD3IGK.js} +2 -2
  32. package/dist/{chunk-TZQBASI7.js → chunk-KD4BE5MW.js} +13 -49
  33. package/dist/chunk-KD4BE5MW.js.map +1 -0
  34. package/dist/{chunk-FAHIMJRU.js → chunk-L7ESV37V.js} +2 -2
  35. package/dist/{chunk-JNM3TPLX.js → chunk-LETB5HCK.js} +2 -2
  36. package/dist/{chunk-G5CQHVQG.js → chunk-M3H7PQWT.js} +13 -16
  37. package/dist/chunk-M3H7PQWT.js.map +1 -0
  38. package/dist/{chunk-JWNT5KW7.js → chunk-O7SDRBVB.js} +3 -1
  39. package/dist/chunk-O7SDRBVB.js.map +1 -0
  40. package/dist/{chunk-YQLQJZ7S.js → chunk-OLI5SD6I.js} +8 -4
  41. package/dist/chunk-OLI5SD6I.js.map +1 -0
  42. package/dist/{chunk-SDPIT4HW.js → chunk-Q5HR4ADS.js} +2 -2
  43. package/dist/{chunk-TRQKHP7D.js → chunk-QY42WGBX.js} +23 -2
  44. package/dist/chunk-QY42WGBX.js.map +1 -0
  45. package/dist/{chunk-I5MLE6S7.js → chunk-TO57WYBB.js} +15 -1
  46. package/dist/chunk-TO57WYBB.js.map +1 -0
  47. package/dist/chunk-UM5S7DKK.js +33 -0
  48. package/dist/chunk-UM5S7DKK.js.map +1 -0
  49. package/dist/{chunk-MDNX7HTN.js → chunk-YEJCNOET.js} +4 -4
  50. package/dist/{chunk-HAIMYUEY.js → chunk-YKVNI44Y.js} +51 -28
  51. package/dist/chunk-YKVNI44Y.js.map +1 -0
  52. package/dist/{chunk-DT6Y7XBI.js → chunk-YRBFSZ2G.js} +17 -39
  53. package/dist/chunk-YRBFSZ2G.js.map +1 -0
  54. package/dist/{chunk-SPWFUHHK.js → chunk-ZVTPSV5Z.js} +11 -10
  55. package/dist/{chunk-SPWFUHHK.js.map → chunk-ZVTPSV5Z.js.map} +1 -1
  56. package/dist/{chunk-N6HH7K6P.js → chunk-ZY25RG4Y.js} +2 -2
  57. package/dist/{claude-code-ROSIILTM.js → claude-code-JLPFUZ4V.js} +18 -41
  58. package/dist/claude-code-JLPFUZ4V.js.map +1 -0
  59. package/dist/{claude-code-W74MNTAC.js → claude-code-NMRKTAP7.js} +2 -2
  60. package/dist/cli/sdk.js +7 -7
  61. package/dist/cli.js +1 -1
  62. package/dist/{cline-JUTO4V27.js → cline-GBP3EVSX.js} +17 -49
  63. package/dist/cline-GBP3EVSX.js.map +1 -0
  64. package/dist/{codebuff-3PMZJJHP.js → codebuff-ETYT5UBL.js} +2 -2
  65. package/dist/{codebuff-2QUHL6HO.js → codebuff-WMKFUVER.js} +11 -42
  66. package/dist/codebuff-WMKFUVER.js.map +1 -0
  67. package/dist/{codex-YBBTIDD4.js → codex-5CZR5XKX.js} +28 -64
  68. package/dist/codex-5CZR5XKX.js.map +1 -0
  69. package/dist/{codex-Q3ATRRX3.js → codex-YAORPCOD.js} +2 -2
  70. package/dist/{continue-W4TU4JSB.js → continue-3AGXWM5W.js} +12 -35
  71. package/dist/continue-3AGXWM5W.js.map +1 -0
  72. package/dist/{copilot-cli-Y74SOP5G.js → copilot-cli-IH4P3GRZ.js} +17 -66
  73. package/dist/copilot-cli-IH4P3GRZ.js.map +1 -0
  74. package/dist/{copilot-cli-SJGIXVSD.js → copilot-cli-MZTAWMPW.js} +2 -2
  75. package/dist/{crush-GMEWLXK5.js → crush-FDBL3JEK.js} +17 -44
  76. package/dist/crush-FDBL3JEK.js.map +1 -0
  77. package/dist/{crush-LN5QFFR2.js → crush-QBXLNN7T.js} +2 -2
  78. package/dist/{cursor-QZ6MTO74.js → cursor-DIW43TRZ.js} +2 -2
  79. package/dist/{cursor-JBS4B3Q4.js → cursor-R5QB4YR4.js} +15 -53
  80. package/dist/cursor-R5QB4YR4.js.map +1 -0
  81. package/dist/{detect-2NIXILMZ.js → detect-L5OZPVFO.js} +4 -4
  82. package/dist/{doctor-QWJBWALA.js → doctor-WDIQ2YFE.js} +16 -15
  83. package/dist/{doctor-QWJBWALA.js.map → doctor-WDIQ2YFE.js.map} +1 -1
  84. package/dist/{droid-W5WF5XEX.js → droid-U3ZBLQFO.js} +2 -2
  85. package/dist/{droid-TJMTNCQE.js → droid-X2QHQL7D.js} +19 -42
  86. package/dist/droid-X2QHQL7D.js.map +1 -0
  87. package/dist/{gemini-cli-RAONGZRG.js → gemini-cli-HCN7XKSX.js} +17 -65
  88. package/dist/gemini-cli-HCN7XKSX.js.map +1 -0
  89. package/dist/{gemini-cli-CIRW37TU.js → gemini-cli-NMVVBO3K.js} +2 -2
  90. package/dist/{goose-A3M5GODH.js → goose-64V46Y2W.js} +2 -2
  91. package/dist/{goose-G4KKM6YU.js → goose-ILMM76JP.js} +21 -57
  92. package/dist/goose-ILMM76JP.js.map +1 -0
  93. package/dist/{hermes-ZYLMOFLZ.js → hermes-F3EGTK6N.js} +2 -2
  94. package/dist/{hermes-PJDTJE6F.js → hermes-YX2ODUZL.js} +17 -55
  95. package/dist/hermes-YX2ODUZL.js.map +1 -0
  96. package/dist/{hook-FDGIQPRC.js → hook-JRDQ56BN.js} +14 -14
  97. package/dist/index.d.ts +2 -2
  98. package/dist/index.js +5 -5
  99. package/dist/{install-TLG3QVP3.js → install-HRCVPRAQ.js} +16 -15
  100. package/dist/{install-TLG3QVP3.js.map → install-HRCVPRAQ.js.map} +1 -1
  101. package/dist/{introspect-Cn3MSA4_.d.ts → introspect-B164-hj3.d.ts} +1 -1
  102. package/dist/{jetbrains-copilot-DNXSLQE5.js → jetbrains-copilot-QESFUN6W.js} +12 -39
  103. package/dist/jetbrains-copilot-QESFUN6W.js.map +1 -0
  104. package/dist/{kilo-FERJ3X46.js → kilo-POTCYIRG.js} +28 -92
  105. package/dist/kilo-POTCYIRG.js.map +1 -0
  106. package/dist/{kilo-NSWAVP6P.js → kilo-SW7BH6EG.js} +2 -2
  107. package/dist/{kilo-cli-TDCONH5G.js → kilo-cli-MO6FSMH2.js} +19 -50
  108. package/dist/kilo-cli-MO6FSMH2.js.map +1 -0
  109. package/dist/{kilo-cli-EVBKUODA.js → kilo-cli-ZF272ZHN.js} +2 -2
  110. package/dist/{kimi-EI3UM3ZV.js → kimi-5FHEXGZD.js} +72 -13
  111. package/dist/kimi-5FHEXGZD.js.map +1 -0
  112. package/dist/{kimi-RIRD4J5J.js → kimi-RXS36OJP.js} +36 -50
  113. package/dist/kimi-RXS36OJP.js.map +1 -0
  114. package/dist/{kiro-X7JVLAN7.js → kiro-VTLX7CMF.js} +12 -33
  115. package/dist/kiro-VTLX7CMF.js.map +1 -0
  116. package/dist/{kiro-UCLSLBW2.js → kiro-WGOI5CGT.js} +2 -2
  117. package/dist/{leaderboard-MXGENYXN.js → leaderboard-ASGR3E2U.js} +6 -6
  118. package/dist/{mimo-code-RFLQ727H.js → mimo-code-F4BWMESO.js} +57 -91
  119. package/dist/mimo-code-F4BWMESO.js.map +1 -0
  120. package/dist/{mux-D77HBSBU.js → mux-2YFCYFM7.js} +11 -41
  121. package/dist/mux-2YFCYFM7.js.map +1 -0
  122. package/dist/{mux-ZMLVAXOO.js → mux-XM6AP35L.js} +2 -2
  123. package/dist/{nemoclaw-LXUTMR56.js → nemoclaw-QDB6O22A.js} +7 -7
  124. package/dist/{omp-CO7IXURG.js → omp-P2JNAEPN.js} +18 -50
  125. package/dist/omp-P2JNAEPN.js.map +1 -0
  126. package/dist/openclaw-3UMBSSZM.js +18 -0
  127. package/dist/{openclaw-IYA7ASL6.js → openclaw-5EQFGOWL.js} +2 -2
  128. package/dist/{opencode-QKZ5EIYU.js → opencode-Q6H4YT66.js} +24 -90
  129. package/dist/opencode-Q6H4YT66.js.map +1 -0
  130. package/dist/{opencode-HWT3RSMN.js → opencode-QGP4ALQY.js} +2 -2
  131. package/dist/{package-IA56LSC3.js → package-IXBSG7HD.js} +11 -11
  132. package/dist/{pi-UFX2OYFV.js → pi-GGDQREVG.js} +2 -2
  133. package/dist/{pi-YGBXYWY5.js → pi-GW25LPC3.js} +6 -6
  134. package/dist/{qwen-code-W7NUCDEN.js → qwen-code-GQILBJ5B.js} +2 -2
  135. package/dist/{qwen-code-E2MSEZK6.js → qwen-code-R6XXEEHJ.js} +13 -34
  136. package/dist/qwen-code-R6XXEEHJ.js.map +1 -0
  137. package/dist/{roo-code-AGGJ473T.js → roo-code-EZPNFC5V.js} +17 -54
  138. package/dist/roo-code-EZPNFC5V.js.map +1 -0
  139. package/dist/{roo-code-ZLKH4A7N.js → roo-code-SUWI4BBN.js} +2 -2
  140. package/dist/runtime/index.d.ts +1 -1
  141. package/dist/runtime/index.js +12 -12
  142. package/dist/sdk/index.d.ts +3 -3
  143. package/dist/sdk/index.js +6 -6
  144. package/dist/sdk/test.d.ts +2 -2
  145. package/dist/sdk/test.js +9 -9
  146. package/dist/{serve-RNUCK5F7.js → serve-CFBQYKRB.js} +14 -14
  147. package/dist/{status-JOX6RLJU.js → status-ASBFEFQQ.js} +11 -10
  148. package/dist/{status-JOX6RLJU.js.map → status-ASBFEFQQ.js.map} +1 -1
  149. package/dist/{statusline-ZVFI5DRT.js → statusline-WKLWSM7I.js} +13 -13
  150. package/dist/{synthetic-UKR6SMGS.js → synthetic-6FRA7P5Q.js} +2 -2
  151. package/dist/{telemetry-3FN6HDVU.js → telemetry-64GCGNIW.js} +10 -10
  152. package/dist/{trae-6L226ZDU.js → trae-6VQW2UVP.js} +12 -41
  153. package/dist/trae-6VQW2UVP.js.map +1 -0
  154. package/dist/{trae-PA26DPBW.js → trae-CPPYASR2.js} +2 -2
  155. package/dist/{types-_6arHbX9.d.ts → types-COSBYpKs.d.ts} +7 -5
  156. package/dist/{uninstall-SCKZYB4J.js → uninstall-KDJYE5ET.js} +16 -15
  157. package/dist/{uninstall-SCKZYB4J.js.map → uninstall-KDJYE5ET.js.map} +1 -1
  158. package/dist/{upgrade-WU3KZWR4.js → upgrade-YQRVYR5U.js} +16 -15
  159. package/dist/{upgrade-WU3KZWR4.js.map → upgrade-YQRVYR5U.js.map} +1 -1
  160. package/dist/{usage-G72SF7JG.js → usage-OV2BDZKF.js} +3 -3
  161. package/dist/{usage-event-DHSEBO5T.js → usage-event-KPI3NEX3.js} +13 -13
  162. package/dist/{vscode-copilot-6EOZDLXC.js → vscode-copilot-UOEEV4P3.js} +17 -67
  163. package/dist/vscode-copilot-UOEEV4P3.js.map +1 -0
  164. package/dist/{warp-N5YYN5BF.js → warp-LUK2BPCU.js} +9 -21
  165. package/dist/warp-LUK2BPCU.js.map +1 -0
  166. package/dist/{warp-JNQA7PBU.js → warp-NRBBJQR2.js} +2 -2
  167. package/dist/{windsurf-4TGSJIVV.js → windsurf-NZ3G42NQ.js} +8 -20
  168. package/dist/windsurf-NZ3G42NQ.js.map +1 -0
  169. package/dist/{zed-6P2UFWXU.js → zed-LGWGZ4EO.js} +13 -23
  170. package/dist/zed-LGWGZ4EO.js.map +1 -0
  171. package/dist/{zed-NNNX5MNT.js → zed-XJFOOKCO.js} +2 -2
  172. package/package.json +7 -2
  173. package/dist/amazon-q-W574ZX35.js +0 -276
  174. package/dist/amazon-q-W574ZX35.js.map +0 -1
  175. package/dist/amp-JPBQJJVM.js.map +0 -1
  176. package/dist/antigravity-VK2Y3FGV.js +0 -18
  177. package/dist/chunk-6RYPUR6O.js.map +0 -1
  178. package/dist/chunk-7ECYDK5T.js.map +0 -1
  179. package/dist/chunk-7L6ITC4T.js.map +0 -1
  180. package/dist/chunk-DT6Y7XBI.js.map +0 -1
  181. package/dist/chunk-G5CQHVQG.js.map +0 -1
  182. package/dist/chunk-HAIMYUEY.js.map +0 -1
  183. package/dist/chunk-I5MLE6S7.js.map +0 -1
  184. package/dist/chunk-JWNT5KW7.js.map +0 -1
  185. package/dist/chunk-PFDUGDOA.js.map +0 -1
  186. package/dist/chunk-TRQKHP7D.js.map +0 -1
  187. package/dist/chunk-TZQBASI7.js.map +0 -1
  188. package/dist/chunk-WZA4CSGJ.js.map +0 -1
  189. package/dist/chunk-YQLQJZ7S.js.map +0 -1
  190. package/dist/claude-code-ROSIILTM.js.map +0 -1
  191. package/dist/cline-JUTO4V27.js.map +0 -1
  192. package/dist/codebuff-2QUHL6HO.js.map +0 -1
  193. package/dist/codex-YBBTIDD4.js.map +0 -1
  194. package/dist/continue-W4TU4JSB.js.map +0 -1
  195. package/dist/copilot-cli-Y74SOP5G.js.map +0 -1
  196. package/dist/crush-GMEWLXK5.js.map +0 -1
  197. package/dist/cursor-JBS4B3Q4.js.map +0 -1
  198. package/dist/droid-TJMTNCQE.js.map +0 -1
  199. package/dist/gemini-cli-RAONGZRG.js.map +0 -1
  200. package/dist/goose-G4KKM6YU.js.map +0 -1
  201. package/dist/hermes-PJDTJE6F.js.map +0 -1
  202. package/dist/jetbrains-copilot-DNXSLQE5.js.map +0 -1
  203. package/dist/kilo-FERJ3X46.js.map +0 -1
  204. package/dist/kilo-cli-TDCONH5G.js.map +0 -1
  205. package/dist/kimi-EI3UM3ZV.js.map +0 -1
  206. package/dist/kimi-RIRD4J5J.js.map +0 -1
  207. package/dist/kiro-X7JVLAN7.js.map +0 -1
  208. package/dist/mimo-code-RFLQ727H.js.map +0 -1
  209. package/dist/mux-D77HBSBU.js.map +0 -1
  210. package/dist/omp-CO7IXURG.js.map +0 -1
  211. package/dist/openclaw-XWJLEW35.js +0 -18
  212. package/dist/opencode-QKZ5EIYU.js.map +0 -1
  213. package/dist/qwen-code-E2MSEZK6.js.map +0 -1
  214. package/dist/roo-code-AGGJ473T.js.map +0 -1
  215. package/dist/trae-6L226ZDU.js.map +0 -1
  216. package/dist/vscode-copilot-6EOZDLXC.js.map +0 -1
  217. package/dist/warp-N5YYN5BF.js.map +0 -1
  218. package/dist/windsurf-4TGSJIVV.js.map +0 -1
  219. package/dist/zed-6P2UFWXU.js.map +0 -1
  220. /package/dist/{action-YCU53FNE.js.map → action-AZRZ3V7E.js.map} +0 -0
  221. /package/dist/{amp-TULUPXXL.js.map → amp-BQZOL5GR.js.map} +0 -0
  222. /package/dist/{antigravity-VK2Y3FGV.js.map → antigravity-3XHBPXZK.js.map} +0 -0
  223. /package/dist/{antigravity-STHZWMP3.js.map → antigravity-EA4L225L.js.map} +0 -0
  224. /package/dist/{antigravity-cli-P6HADOAO.js.map → antigravity-cli-B2HXZFYQ.js.map} +0 -0
  225. /package/dist/{chunk-CYOAH23F.js.map → chunk-25BNMXPP.js.map} +0 -0
  226. /package/dist/{chunk-NLFPH4S2.js.map → chunk-2RPHDVHW.js.map} +0 -0
  227. /package/dist/{chunk-F5RX62T7.js.map → chunk-7QRUZAUG.js.map} +0 -0
  228. /package/dist/{chunk-BCHWFTV4.js.map → chunk-F4DSMVZ7.js.map} +0 -0
  229. /package/dist/{chunk-2F5QH3D4.js.map → chunk-HU6DZZBG.js.map} +0 -0
  230. /package/dist/{chunk-SCVBYSF7.js.map → chunk-IRUYJD23.js.map} +0 -0
  231. /package/dist/{chunk-WFXWJITA.js.map → chunk-JLMD3IGK.js.map} +0 -0
  232. /package/dist/{chunk-FAHIMJRU.js.map → chunk-L7ESV37V.js.map} +0 -0
  233. /package/dist/{chunk-JNM3TPLX.js.map → chunk-LETB5HCK.js.map} +0 -0
  234. /package/dist/{chunk-SDPIT4HW.js.map → chunk-Q5HR4ADS.js.map} +0 -0
  235. /package/dist/{chunk-MDNX7HTN.js.map → chunk-YEJCNOET.js.map} +0 -0
  236. /package/dist/{chunk-N6HH7K6P.js.map → chunk-ZY25RG4Y.js.map} +0 -0
  237. /package/dist/{claude-code-W74MNTAC.js.map → claude-code-NMRKTAP7.js.map} +0 -0
  238. /package/dist/{codebuff-3PMZJJHP.js.map → codebuff-ETYT5UBL.js.map} +0 -0
  239. /package/dist/{codex-Q3ATRRX3.js.map → codex-YAORPCOD.js.map} +0 -0
  240. /package/dist/{copilot-cli-SJGIXVSD.js.map → copilot-cli-MZTAWMPW.js.map} +0 -0
  241. /package/dist/{crush-LN5QFFR2.js.map → crush-QBXLNN7T.js.map} +0 -0
  242. /package/dist/{cursor-QZ6MTO74.js.map → cursor-DIW43TRZ.js.map} +0 -0
  243. /package/dist/{detect-2NIXILMZ.js.map → detect-L5OZPVFO.js.map} +0 -0
  244. /package/dist/{droid-W5WF5XEX.js.map → droid-U3ZBLQFO.js.map} +0 -0
  245. /package/dist/{gemini-cli-CIRW37TU.js.map → gemini-cli-NMVVBO3K.js.map} +0 -0
  246. /package/dist/{goose-A3M5GODH.js.map → goose-64V46Y2W.js.map} +0 -0
  247. /package/dist/{hermes-ZYLMOFLZ.js.map → hermes-F3EGTK6N.js.map} +0 -0
  248. /package/dist/{hook-FDGIQPRC.js.map → hook-JRDQ56BN.js.map} +0 -0
  249. /package/dist/{kilo-NSWAVP6P.js.map → kilo-SW7BH6EG.js.map} +0 -0
  250. /package/dist/{kilo-cli-EVBKUODA.js.map → kilo-cli-ZF272ZHN.js.map} +0 -0
  251. /package/dist/{kiro-UCLSLBW2.js.map → kiro-WGOI5CGT.js.map} +0 -0
  252. /package/dist/{leaderboard-MXGENYXN.js.map → leaderboard-ASGR3E2U.js.map} +0 -0
  253. /package/dist/{mux-ZMLVAXOO.js.map → mux-XM6AP35L.js.map} +0 -0
  254. /package/dist/{nemoclaw-LXUTMR56.js.map → nemoclaw-QDB6O22A.js.map} +0 -0
  255. /package/dist/{openclaw-XWJLEW35.js.map → openclaw-3UMBSSZM.js.map} +0 -0
  256. /package/dist/{openclaw-IYA7ASL6.js.map → openclaw-5EQFGOWL.js.map} +0 -0
  257. /package/dist/{opencode-HWT3RSMN.js.map → opencode-QGP4ALQY.js.map} +0 -0
  258. /package/dist/{package-IA56LSC3.js.map → package-IXBSG7HD.js.map} +0 -0
  259. /package/dist/{pi-UFX2OYFV.js.map → pi-GGDQREVG.js.map} +0 -0
  260. /package/dist/{pi-YGBXYWY5.js.map → pi-GW25LPC3.js.map} +0 -0
  261. /package/dist/{qwen-code-W7NUCDEN.js.map → qwen-code-GQILBJ5B.js.map} +0 -0
  262. /package/dist/{roo-code-ZLKH4A7N.js.map → roo-code-SUWI4BBN.js.map} +0 -0
  263. /package/dist/{serve-RNUCK5F7.js.map → serve-CFBQYKRB.js.map} +0 -0
  264. /package/dist/{statusline-ZVFI5DRT.js.map → statusline-WKLWSM7I.js.map} +0 -0
  265. /package/dist/{synthetic-UKR6SMGS.js.map → synthetic-6FRA7P5Q.js.map} +0 -0
  266. /package/dist/{telemetry-3FN6HDVU.js.map → telemetry-64GCGNIW.js.map} +0 -0
  267. /package/dist/{trae-PA26DPBW.js.map → trae-CPPYASR2.js.map} +0 -0
  268. /package/dist/{usage-G72SF7JG.js.map → usage-OV2BDZKF.js.map} +0 -0
  269. /package/dist/{usage-event-DHSEBO5T.js.map → usage-event-KPI3NEX3.js.map} +0 -0
  270. /package/dist/{warp-JNQA7PBU.js.map → warp-NRBBJQR2.js.map} +0 -0
  271. /package/dist/{zed-NNNX5MNT.js.map → zed-XJFOOKCO.js.map} +0 -0
@@ -4,15 +4,16 @@ import {
4
4
  } from "./chunk-DBQMX75U.js";
5
5
  import {
6
6
  BaseAdapter
7
- } from "./chunk-PFDUGDOA.js";
8
- import "./chunk-7L6ITC4T.js";
7
+ } from "./chunk-3I7UG52L.js";
9
8
  import {
10
- buildServeWrapperCommand,
11
- isHomeBinHookCommand,
12
- shouldWrapForTelemetry
13
- } from "./chunk-I5MLE6S7.js";
14
- import "./chunk-N6HH7K6P.js";
15
- import "./chunk-TRQKHP7D.js";
9
+ renderSkillMd
10
+ } from "./chunk-IEGR4TP3.js";
11
+ import {
12
+ buildWrappedStdio,
13
+ isHomeBinHookCommand
14
+ } from "./chunk-TO57WYBB.js";
15
+ import "./chunk-ZY25RG4Y.js";
16
+ import "./chunk-QY42WGBX.js";
16
17
 
17
18
  // src/adapters/trae/index.ts
18
19
  import { existsSync } from "fs";
@@ -119,18 +120,7 @@ var TraeAdapter = class extends BaseAdapter {
119
120
  if (transport === "stdio") {
120
121
  let command = server.command ?? "";
121
122
  let args = [...server.args ?? []];
122
- if (shouldWrapForTelemetry(server, ctx.connector.telemetry)) {
123
- const wrapped = buildServeWrapperCommand(
124
- ctx.homeBinPath,
125
- ctx.connector.id,
126
- command,
127
- args,
128
- ctx.scope,
129
- this.id
130
- );
131
- command = wrapped.command;
132
- args = wrapped.args;
133
- }
123
+ ({ command, args } = buildWrappedStdio(ctx, server, this.id, command, args));
134
124
  const entry2 = { command: resolveEnvRefsDeep(command) };
135
125
  if (args.length > 0) entry2.args = resolveEnvRefsDeep(args);
136
126
  const env = this.renderEnv(server.env);
@@ -204,7 +194,7 @@ var TraeAdapter = class extends BaseAdapter {
204
194
  for (const skill of connector.skills) {
205
195
  const dir = this.skillDir(ctx, skill.name);
206
196
  changes.push(
207
- this.writeContentFile(join(dir, "SKILL.md"), this.renderSkill(skill), ctx.dryRun)
197
+ this.writeContentFile(join(dir, "SKILL.md"), renderSkillMd(skill), ctx.dryRun)
208
198
  );
209
199
  for (const [rel, contents] of Object.entries(skill.resources ?? {})) {
210
200
  const target = this.resolveWithin(dir, rel);
@@ -239,25 +229,6 @@ var TraeAdapter = class extends BaseAdapter {
239
229
  }
240
230
  return changes;
241
231
  }
242
- /**
243
- * Render a skill's SKILL.md: frontmatter (name, description + optional model,
244
- * allowed-tools, disable-model-invocation) + body. UNIFORM with every other
245
- * skill-supporting platform — only the parent dir differs.
246
- */
247
- renderSkill(skill) {
248
- const frontmatter = {
249
- name: skill.name,
250
- description: skill.description
251
- };
252
- if (skill.model !== void 0) frontmatter.model = skill.model;
253
- const allow = skill.tools?.allow;
254
- if (allow && allow.length > 0) frontmatter["allowed-tools"] = allow.join(", ");
255
- if (skill.disableModelInvocation !== void 0) {
256
- frontmatter["disable-model-invocation"] = skill.disableModelInvocation;
257
- }
258
- if (skill.extra) Object.assign(frontmatter, skill.extra);
259
- return this.renderFrontmatterMd(frontmatter, skill.body);
260
- }
261
232
  // ── Diagnostics ──────────────────────────────────────────────────────────
262
233
  getHealthChecks(ctx) {
263
234
  const mcpPath = this.getServerConfigPath(ctx);
@@ -302,4 +273,4 @@ export {
302
273
  adapter,
303
274
  trae_default as default
304
275
  };
305
- //# sourceMappingURL=trae-6L226ZDU.js.map
276
+ //# sourceMappingURL=trae-6VQW2UVP.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/adapters/trae/index.ts"],"sourcesContent":["/**\n * adapters/trae — Trae (ByteDance) platform adapter for agent-connector.\n *\n * Trae is an **mcp-only** host for our purposes: it exposes MCP servers as its\n * extensibility mechanism but has no lifecycle hook system we can register\n * against. This adapter therefore installs only the MCP server and reports hooks\n * as unavailable, mirroring the Warp reference path that validates the\n * `mcp-only` paradigm end-to-end.\n *\n * MCP config (medium-confidence path — still implemented; doctor reports presence):\n * - user scope → ~/.trae/mcp.json\n * - project scope → <projectDir>/.trae/mcp.json\n * Both are JSON, root key \"mcpServers\", and are the SAME file used for the\n * (non-existent) hook registration — there is no separate hook file here.\n *\n * A stdio server entry uses the standard Claude/Cursor shape:\n * { command, args, env } (object-keyed by connector id).\n *\n * Trae documents no native `${env:VAR}` interpolation token, so env/header/url\n * refs are resolved to literals at install time (the no-native-token path).\n */\n\nimport { existsSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\n\nimport { BaseAdapter } from \"../base.js\";\nimport type { Adapter, InstallContext } from \"../spi.js\";\nimport type {\n ChangeRecord,\n DetectedPlatform,\n HealthCheck,\n HookParadigm,\n PlatformCapabilities,\n PlatformId,\n ServerDef,\n Transport,\n} from \"../../core/types.js\";\nimport { resolveEnvRefsDeep } from \"../../core/interpolate.js\";\nimport {\n buildWrappedStdio,\n isHomeBinHookCommand,\n} from \"../../core/spawn.js\";\nimport { renderSkillMd } from \"../claude-code/render.js\";\n\nconst HOST: PlatformId = \"trae\";\nconst MCP_ROOT_KEY = \"mcpServers\";\n\n/** Native MCP server entry shapes Trae accepts under `mcpServers`. */\ninterface TraeStdioServer {\n command: string;\n args?: string[];\n env?: Record<string, string>;\n}\ninterface TraeHttpServer {\n url: string;\n headers?: Record<string, string>;\n}\n\nexport class TraeAdapter extends BaseAdapter implements Adapter {\n readonly id: PlatformId = HOST;\n readonly name = \"Trae\";\n readonly paradigm: HookParadigm = \"mcp-only\";\n\n readonly capabilities: PlatformCapabilities = {\n // Memory surface: AGENTS.md-first managed block via the BaseAdapter default\n // (memoryTargets: project <projectDir>/AGENTS.md; user scope where documented).\n supportsMemory: true,\n // Trae has no lifecycle hook system we can target — every hook capability\n // is false.\n preToolUse: false,\n postToolUse: false,\n preCompact: false,\n sessionStart: false,\n sessionEnd: false,\n userPromptSubmit: false,\n stop: false,\n notification: false,\n canModifyArgs: false,\n canModifyOutput: false,\n canInjectSessionContext: false,\n // Trae registers stdio, SSE, and Streamable HTTP MCP servers.\n transports: [\"stdio\", \"sse\", \"http\"],\n // Content surfaces: Trae reads Agent Skills (SKILL.md) from\n // user scope → ~/.trae/skills/<name>/SKILL.md\n // project scope → <projectDir>/.trae/skills/<name>/SKILL.md\n // BOTH scopes are documented-writable. Commands/subagents have no native\n // file surface here, so only skills is enabled.\n supportsSkills: true,\n };\n\n // ── Detection ────────────────────────────────────────────────────────────\n\n detectInstalled(projectDir: string): DetectedPlatform {\n const userDir = join(homedir(), \".trae\");\n const userMcp = join(userDir, \"mcp.json\");\n const projDir = join(projectDir, \".trae\");\n const projMcp = join(projDir, \"mcp.json\");\n\n const userInstalled = existsSync(userDir) || existsSync(userMcp);\n const projInstalled = existsSync(projDir) || existsSync(projMcp);\n const installed = userInstalled || projInstalled;\n const scope = projInstalled && !userInstalled ? \"project\" : \"user\";\n const configPath = scope === \"project\" ? projMcp : userMcp;\n\n return {\n id: this.id,\n name: this.name,\n installed,\n paradigm: this.paradigm,\n capabilities: this.capabilities,\n configPath,\n scope,\n reason: installed\n ? `found Trae config (${scope})`\n : `no Trae config at ${userDir} or ${projDir}`,\n confidence: installed ? \"high\" : \"low\",\n };\n }\n\n // ── Native paths ─────────────────────────────────────────────────────────\n\n getConfigDir(ctx: InstallContext): string {\n return ctx.scope === \"project\"\n ? join(ctx.projectDir, \".trae\")\n : join(homedir(), \".trae\");\n }\n\n getServerConfigPath(ctx: InstallContext): string {\n return join(this.getConfigDir(ctx), \"mcp.json\");\n }\n\n /**\n * Trae has no hook file — hooks are not a thing here. The hook \"config path\"\n * is the same mcp.json so the generic doctor/backup behave sensibly.\n */\n getHookConfigPath(ctx: InstallContext): string {\n return this.getServerConfigPath(ctx);\n }\n\n // ── MCP server install / uninstall ───────────────────────────────────────\n\n installServer(ctx: InstallContext): ChangeRecord[] {\n const { connector } = ctx;\n const override = connector.platforms[HOST]?.server;\n if (!connector.server || override === false) {\n return [\n {\n platform: this.id,\n action: \"skip\",\n detail: connector.server\n ? \"server registration disabled for trae\"\n : \"connector declares no MCP server\",\n },\n ];\n }\n\n // Shallow-merge any per-platform server override into the base ServerDef.\n const server: ServerDef =\n override && typeof override === \"object\"\n ? { ...connector.server, ...override }\n : connector.server;\n\n const serverPath = this.getServerConfigPath(ctx);\n const entry = this.renderServerEntry(ctx, server);\n\n return [\n this.upsertServerInJson(serverPath, MCP_ROOT_KEY, connector.id, entry, ctx.dryRun),\n ];\n }\n\n uninstallServer(ctx: InstallContext): ChangeRecord[] {\n const serverPath = this.getServerConfigPath(ctx);\n return [\n this.removeServerFromJson(serverPath, MCP_ROOT_KEY, ctx.connector.id, ctx.dryRun),\n ];\n }\n\n /** Render a normalized ServerDef into Trae's native mcpServers entry. */\n private renderServerEntry(\n ctx: InstallContext,\n server: ServerDef,\n ): TraeStdioServer | TraeHttpServer {\n const transport: Transport = server.transport;\n\n if (transport === \"stdio\") {\n let command = server.command ?? \"\";\n let args = [...(server.args ?? [])];\n\n // Transparent telemetry wrapping: route the real command through\n // `<homeBin> serve --connector <id> -- <command> <args...>`.\n ({ command, args } = buildWrappedStdio(ctx, server, this.id, command, args));\n\n // Trae has no documented native interpolation token, so resolve every\n // ${env:VAR} to a literal at install time.\n const entry: TraeStdioServer = { command: resolveEnvRefsDeep(command) };\n if (args.length > 0) entry.args = resolveEnvRefsDeep(args);\n const env = this.renderEnv(server.env);\n if (env) entry.env = env;\n return entry;\n }\n\n // sse / http (and any other remote transport) — Trae registers a URL.\n const entry: TraeHttpServer = { url: resolveEnvRefsDeep(server.url ?? \"\") };\n const headers = this.renderEnv(server.headers);\n if (headers) entry.headers = headers;\n return entry;\n }\n\n /**\n * Render env/header values. Trae documents no native interpolation token, so\n * resolve `${env:VAR}` references to literals at install time.\n */\n private renderEnv(\n env: Record<string, string> | undefined,\n ): Record<string, string> | undefined {\n if (!env || Object.keys(env).length === 0) return undefined;\n return resolveEnvRefsDeep({ ...env });\n }\n\n // ── Hooks (unavailable — Trae is mcp-only) ───────────────────────────────\n\n installHooks(_ctx: InstallContext): ChangeRecord[] {\n return [\n {\n platform: this.id,\n action: \"skip\",\n detail: \"hooks unavailable (Trae is mcp-only)\",\n },\n ];\n }\n\n uninstallHooks(_ctx: InstallContext): ChangeRecord[] {\n return [\n {\n platform: this.id,\n action: \"skip\",\n detail: \"hooks unavailable (Trae is mcp-only)\",\n },\n ];\n }\n\n /**\n * True when a hook command references our home binary AND this connector id\n * (anchored so a shared-prefix id can't collide — see isHomeBinHookCommand).\n * Trae installs no hooks, but this guard keeps any future shared-file edit\n * from removing another connector's entries.\n */\n private isOurCommand(command: string | undefined, ctx: InstallContext): boolean {\n return isHomeBinHookCommand(command, ctx.homeBinPath, ctx.connector.id);\n }\n\n // ── Content surfaces: skills ─────────────────────────────────────────────\n // CONTENT-ONLY: pure native-file writers. No runtime dispatch, no home-bin\n // pointer, no telemetry wrap. Idempotent (byte-identical → skip) via\n // writeContentFile and reversible via removeContentFile. Honors\n // platforms[\"trae\"].skills === false to skip. BOTH user and project scopes\n // are documented-writable, so there is no scope guard.\n //\n // Native location:\n // skill → <configDir>/skills/<name>/SKILL.md (+ bundled resources)\n // user → ~/.trae/skills/<name>/SKILL.md\n // project → <projectDir>/.trae/skills/<name>/SKILL.md\n\n private skillDir(ctx: InstallContext, name: string): string {\n return join(this.getConfigDir(ctx), \"skills\", name);\n }\n\n override installSkills(ctx: InstallContext): ChangeRecord[] {\n const { connector } = ctx;\n if (connector.platforms[HOST]?.skills === false) {\n return [{ platform: this.id, action: \"skip\", detail: \"skills disabled for trae\" }];\n }\n if (connector.skills.length === 0) {\n return [{ platform: this.id, action: \"skip\", detail: \"connector declares no skills\" }];\n }\n const changes: ChangeRecord[] = [];\n for (const skill of connector.skills) {\n const dir = this.skillDir(ctx, skill.name);\n changes.push(\n this.writeContentFile(join(dir, \"SKILL.md\"), renderSkillMd(skill), ctx.dryRun),\n );\n // Bundle any resource files beside SKILL.md (relative path → contents).\n // Defense-in-depth: skip+warn on any key that escapes the skill dir\n // (config-time validation already rejects these, but never trust input).\n for (const [rel, contents] of Object.entries(skill.resources ?? {})) {\n const target = this.resolveWithin(dir, rel);\n if (target === null) {\n changes.push({\n platform: this.id,\n action: \"warn\",\n detail: `skill resource \"${rel}\" escapes the skill dir; skipped`,\n });\n continue;\n }\n changes.push(this.writeContentFile(target, contents, ctx.dryRun));\n }\n }\n return changes;\n }\n\n override uninstallSkills(ctx: InstallContext): ChangeRecord[] {\n const { connector } = ctx;\n if (connector.skills.length === 0) {\n return [{ platform: this.id, action: \"skip\", detail: \"connector declares no skills\" }];\n }\n const changes: ChangeRecord[] = [];\n for (const skill of connector.skills) {\n const dir = this.skillDir(ctx, skill.name);\n // Remove only the files we wrote (SKILL.md + declared resources), then the\n // skill dir itself when we own its full contents.\n changes.push(this.removeContentFile(join(dir, \"SKILL.md\"), ctx.dryRun));\n for (const rel of Object.keys(skill.resources ?? {})) {\n const target = this.resolveWithin(dir, rel);\n if (target === null) continue; // never delete outside the skill dir\n changes.push(this.removeContentFile(target, ctx.dryRun));\n }\n // Only remove the skill dir when WE own its full contents — never rm -rf a\n // dir that still holds user-added / sibling-tool / shared files.\n changes.push(this.removeDirIfEmpty(dir, ctx.dryRun));\n }\n return changes;\n }\n\n // ── Diagnostics ──────────────────────────────────────────────────────────\n\n override getHealthChecks(ctx: InstallContext): readonly HealthCheck[] {\n const mcpPath = this.getServerConfigPath(ctx);\n const connectorId = ctx.connector.id;\n const checks: HealthCheck[] = [\n {\n name: `${this.name}: mcp.json present`,\n check: () =>\n existsSync(mcpPath)\n ? { status: \"OK\", detail: mcpPath }\n : { status: \"FAIL\", detail: `not found: ${mcpPath}` },\n },\n {\n name: `${this.name}: server entry registered`,\n check: () => {\n // Only assert what the connector declares: a server-less connector —\n // e.g. a catalog-only bundle of agents/skills/commands — never writes\n // an mcpServers entry, so its absence is healthy.\n if (!ctx.connector.server) {\n return { status: \"OK\", detail: \"no MCP server declared\" };\n }\n const cfg = this.readJson<{ [k: string]: Record<string, unknown> }>(mcpPath);\n const bucket = cfg?.[MCP_ROOT_KEY];\n if (!cfg || !bucket) {\n return { status: \"FAIL\", detail: `no ${MCP_ROOT_KEY} in ${mcpPath}` };\n }\n return connectorId in bucket\n ? { status: \"OK\", detail: `${MCP_ROOT_KEY}.${connectorId} present` }\n : {\n status: \"FAIL\",\n detail: `no ${MCP_ROOT_KEY}.${connectorId} in ${mcpPath}`,\n };\n },\n },\n ];\n\n // Content-surface checks: assert presence only for skills this connector\n // declares (the SKILL.md lands under <configDir>/skills/<name>/).\n for (const skill of ctx.connector.skills) {\n const p = join(this.skillDir(ctx, skill.name), \"SKILL.md\");\n checks.push({\n name: `${this.name}: skill ${skill.name} present`,\n check: () =>\n existsSync(p) ? { status: \"OK\", detail: p } : { status: \"FAIL\", detail: `not found: ${p}` },\n });\n }\n return checks;\n }\n}\n\nexport const adapter = new TraeAdapter();\nexport default adapter;\n"],"mappings":"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","names":["entry"]}
@@ -5,7 +5,7 @@ import {
5
5
  import {
6
6
  firstExistingRoot,
7
7
  walkFiles
8
- } from "./chunk-JWNT5KW7.js";
8
+ } from "./chunk-O7SDRBVB.js";
9
9
  import {
10
10
  emptyTokens
11
11
  } from "./chunk-XD7MY6HB.js";
@@ -154,4 +154,4 @@ var trae_default = traeReader;
154
154
  export {
155
155
  trae_default as default
156
156
  };
157
- //# sourceMappingURL=trae-PA26DPBW.js.map
157
+ //# sourceMappingURL=trae-CPPYASR2.js.map
@@ -682,12 +682,14 @@ interface StatuslineContext extends HostCtx {
682
682
  };
683
683
  /**
684
684
  * THIS connector's OWN recorded MCP telemetry usage (token sums + call count),
685
- * pre-computed by the runtime so render() can read it synchronously. ALL-TIME
685
+ * exposed as a synchronous property. The runtime installs it lazily, so the
686
+ * all-time NDJSON scan happens only if render() reads `ctx.usage`. ALL-TIME
686
687
  * for the connector (every stored row) — NOT the host context-window (see
687
- * `context`) and NOT session-scoped. When pre-computed it is always a real
688
- * summary (zeros when there's no telemetry or it's switched off, never
689
- * undefined); it is undefined only for a context that does not pre-compute it.
690
- * render() can still `await ctx.telemetry?.()` to fetch a live or custom slice.
688
+ * `context`) and NOT session-scoped. When runtime-provided, first read returns
689
+ * a real summary (zeros when there's no telemetry or it's switched off, never
690
+ * undefined); it is undefined only for a context that does not provide it.
691
+ * render() can still `await ctx.telemetry?.()` to fetch the same summary via
692
+ * the async accessor.
691
693
  */
692
694
  usage?: TelemetryUsageSummary;
693
695
  /** Path to the session transcript, when the host reports one. */
@@ -5,34 +5,35 @@ import {
5
5
  resolveUninstallTargets,
6
6
  uninstallConnector,
7
7
  uninstallViaMarketplace
8
- } from "./chunk-6RYPUR6O.js";
9
- import "./chunk-7ECYDK5T.js";
8
+ } from "./chunk-IW46JIQM.js";
9
+ import "./chunk-HZDU3J4U.js";
10
10
  import {
11
11
  marketplaceEvidence,
12
12
  readMarketplaceInstalls
13
- } from "./chunk-G5CQHVQG.js";
13
+ } from "./chunk-M3H7PQWT.js";
14
14
  import {
15
15
  fail,
16
16
  parseScope,
17
17
  parseTargets,
18
18
  print,
19
19
  renderInstallResult
20
- } from "./chunk-CYOAH23F.js";
21
- import "./chunk-F5RX62T7.js";
22
- import "./chunk-SDPIT4HW.js";
20
+ } from "./chunk-25BNMXPP.js";
21
+ import "./chunk-7QRUZAUG.js";
22
+ import "./chunk-Q5HR4ADS.js";
23
23
  import "./chunk-KHO5WNTP.js";
24
24
  import {
25
25
  findConnectorConfig,
26
26
  loadConnectorFromPath
27
- } from "./chunk-YQLQJZ7S.js";
28
- import "./chunk-MDNX7HTN.js";
29
- import "./chunk-2F5QH3D4.js";
30
- import "./chunk-FAHIMJRU.js";
27
+ } from "./chunk-OLI5SD6I.js";
28
+ import "./chunk-YEJCNOET.js";
29
+ import "./chunk-HU6DZZBG.js";
30
+ import "./chunk-L7ESV37V.js";
31
+ import "./chunk-UM5S7DKK.js";
31
32
  import "./chunk-OPXAP3AC.js";
32
- import "./chunk-7L6ITC4T.js";
33
- import "./chunk-I5MLE6S7.js";
34
- import "./chunk-N6HH7K6P.js";
35
- import "./chunk-TRQKHP7D.js";
33
+ import "./chunk-IEGR4TP3.js";
34
+ import "./chunk-TO57WYBB.js";
35
+ import "./chunk-ZY25RG4Y.js";
36
+ import "./chunk-QY42WGBX.js";
36
37
 
37
38
  // src/cli/commands/uninstall.ts
38
39
  import { parseArgs } from "util";
@@ -162,4 +163,4 @@ async function run(argv) {
162
163
  export {
163
164
  run
164
165
  };
165
- //# sourceMappingURL=uninstall-SCKZYB4J.js.map
166
+ //# sourceMappingURL=uninstall-KDJYE5ET.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cli/commands/uninstall.ts"],"sourcesContent":["/**\n * cli/commands/uninstall — strip a connector's registrations, method-aware.\n *\n * The connector id is taken from --connector-id, or inferred from the local\n * connector config (--connector <path> / findConnectorConfig).\n *\n * --method auto (default) reverses WHATEVER is actually there, per target:\n * targets with marketplace evidence (the state record, or the host's own plugin\n * state) get the HOST plugin uninstall; everything else gets the existing\n * direct adapter strip. Install chooses a method (a user decision); uninstall\n * reverses what exists (a state decision) — and since the double-install guard\n * enforces exactly one method per (connector, host, scope), auto is\n * unambiguous. Explicit --method direct|marketplace forces one path for every\n * target. Config removal vs plugin uninstall is therefore method-resolved:\n * never both, never neither.\n *\n * --purge additionally removes the framework-state this connector left behind:\n * its DATA-dir connector record (connectorDir(id)), the empty marketplace\n * staging root, and, when no connectors remain, the shared home-bin launcher.\n * Without --purge those linger so the connector can be re-synced without\n * re-registering.\n */\n\nimport { parseArgs } from \"node:util\";\n\nimport {\n purgeFrameworkState,\n resolveUninstallTargets,\n uninstallConnector,\n} from \"../../core/installer.js\";\nimport {\n marketplaceEvidence,\n parseUninstallMethod,\n uninstallViaMarketplace,\n} from \"../../core/marketplace.js\";\nimport { readMarketplaceInstalls } from \"../../core/marketplace-state.js\";\nimport { findConnectorConfig, loadConnectorFromPath } from \"../../core/load-connector.js\";\nimport type { InstallResult, PlatformId } from \"../../core/types.js\";\nimport { fail, parseScope, parseTargets, print, renderInstallResult } from \"../app.js\";\n\n/** Resolve the connector id from flags, then from a local config file. */\nasync function resolveConnectorId(\n explicitId: string | undefined,\n connectorPath: string | undefined,\n projectDir: string,\n): Promise<string | null> {\n if (explicitId && explicitId.trim() !== \"\") return explicitId;\n const configPath = connectorPath ?? findConnectorConfig(projectDir);\n if (!configPath) return null;\n const { connector } = await loadConnectorFromPath(configPath);\n return connector.id;\n}\n\nexport async function run(argv: string[]): Promise<number> {\n const { values } = parseArgs({\n args: argv,\n options: {\n method: { type: \"string\", default: \"auto\" },\n scope: { type: \"string\", default: \"user\" },\n targets: { type: \"string\" },\n connector: { type: \"string\" },\n \"connector-id\": { type: \"string\" },\n project: { type: \"string\" },\n \"dry-run\": { type: \"boolean\", default: false },\n purge: { type: \"boolean\", default: false },\n },\n allowPositionals: false,\n });\n\n const method = parseUninstallMethod(values.method);\n if (method == null) {\n return fail(`invalid --method \"${values.method}\" (use auto|direct|marketplace)`);\n }\n\n const projectDir = values.project ?? process.cwd();\n\n const scope = parseScope(values.scope);\n if (scope == null) return fail(`invalid --scope \"${values.scope}\" (use user|project)`);\n\n const connectorId = await resolveConnectorId(\n values[\"connector-id\"],\n values.connector,\n projectDir,\n );\n if (!connectorId) {\n return fail(\n \"could not determine connector id. Pass --connector-id <id>, \" +\n \"--connector <path>, or run inside a project with an agent-connector config.\",\n );\n }\n\n const targets = parseTargets(values.targets);\n const dryRun = values[\"dry-run\"];\n\n // ── Explicit --method marketplace: every target goes to the marketplace path\n // (targets default to the recorded installs); framework purge runs here since\n // no direct pass follows.\n if (method === \"marketplace\") {\n const result = await uninstallViaMarketplace({\n connectorId,\n projectDir,\n dryRun,\n purge: values.purge,\n ...(targets ? { targets } : {}),\n });\n if (values.purge) purgeFrameworkState(connectorId, dryRun, result);\n print(renderInstallResult(result, \"uninstall\"));\n return result.changes.some((c) => c.action === \"warn\") ? 1 : 0;\n }\n\n // ── --method auto: partition the resolved targets by marketplace evidence.\n // (--method direct keeps every target on the adapter strip — today's path.)\n let marketplaceTargets: PlatformId[] = [];\n let directTargets: PlatformId[] = [];\n if (method === \"auto\") {\n const resolved = await resolveUninstallTargets(connectorId, targets, projectDir);\n // With no explicit --targets, recorded marketplace platforms are unioned\n // in: the state record IS the authority for what we installed, and host\n // detection can miss a host whose probe-able config dir was relocated.\n // An explicit --targets list is always respected as-is.\n const recorded = targets\n ? []\n : (Object.keys(readMarketplaceInstalls(connectorId)) as PlatformId[]);\n const candidates = [...new Set([...resolved, ...recorded])];\n marketplaceTargets = candidates.filter(\n (id) => marketplaceEvidence(connectorId, id) != null,\n );\n directTargets = resolved.filter((id) => !marketplaceTargets.includes(id));\n }\n\n // No marketplace evidence anywhere (or --method direct): exactly today's\n // single-orchestration path, byte-for-byte — zero behavior change for users\n // who never touched the marketplace method.\n if (marketplaceTargets.length === 0) {\n const result = await uninstallConnector({\n connectorId,\n scope,\n projectDir,\n dryRun,\n purge: values.purge,\n ...(targets ? { targets } : {}),\n });\n print(renderInstallResult(result, \"uninstall\"));\n return result.changes.some((c) => c.action === \"warn\") ? 1 : 0;\n }\n\n const results: InstallResult[] = [\n await uninstallViaMarketplace({\n connectorId,\n projectDir,\n targets: marketplaceTargets,\n dryRun,\n purge: values.purge,\n }),\n ];\n\n // The direct strip runs only for its partition (never both methods on one\n // target). When every target was marketplace-routed, --purge still runs the\n // framework purge (the marketplace records were just cleared, so it can\n // proceed to the connector record + home-bin).\n if (directTargets.length > 0) {\n results.push(\n await uninstallConnector({\n connectorId,\n scope,\n projectDir,\n dryRun,\n purge: values.purge,\n targets: directTargets,\n }),\n );\n } else if (values.purge) {\n const purgeResult: InstallResult = {\n connectorId,\n dryRun,\n changes: [],\n warnings: [],\n };\n if (dryRun) {\n // On a real run the marketplace records are removed BEFORE this purge;\n // calling purgeFrameworkState now would false-refuse on records that the\n // marketplace pass only PLANNED to remove. Report the plan instead.\n purgeResult.changes.push({\n platform: connectorId as PlatformId,\n action: \"remove\",\n detail:\n \"would purge framework state (connector record; home-bin when no connectors remain)\",\n });\n } else {\n purgeFrameworkState(connectorId, dryRun, purgeResult);\n }\n results.push(purgeResult);\n }\n\n const merged: InstallResult = {\n connectorId,\n dryRun,\n changes: results.flatMap((r) => r.changes),\n warnings: results.flatMap((r) => r.warnings),\n };\n print(renderInstallResult(merged, \"uninstall\"));\n return merged.changes.some((c) => c.action === \"warn\") ? 1 : 0;\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/cli/commands/uninstall.ts"],"sourcesContent":["/**\n * cli/commands/uninstall — strip a connector's registrations, method-aware.\n *\n * The connector id is taken from --connector-id, or inferred from the local\n * connector config (--connector <path> / findConnectorConfig).\n *\n * --method auto (default) reverses WHATEVER is actually there, per target:\n * targets with marketplace evidence (the state record, or the host's own plugin\n * state) get the HOST plugin uninstall; everything else gets the existing\n * direct adapter strip. Install chooses a method (a user decision); uninstall\n * reverses what exists (a state decision) — and since the double-install guard\n * enforces exactly one method per (connector, host, scope), auto is\n * unambiguous. Explicit --method direct|marketplace forces one path for every\n * target. Config removal vs plugin uninstall is therefore method-resolved:\n * never both, never neither.\n *\n * --purge additionally removes the framework-state this connector left behind:\n * its DATA-dir connector record (connectorDir(id)), the empty marketplace\n * staging root, and, when no connectors remain, the shared home-bin launcher.\n * Without --purge those linger so the connector can be re-synced without\n * re-registering.\n */\n\nimport { parseArgs } from \"node:util\";\n\nimport {\n purgeFrameworkState,\n resolveUninstallTargets,\n uninstallConnector,\n} from \"../../core/installer.js\";\nimport {\n marketplaceEvidence,\n parseUninstallMethod,\n uninstallViaMarketplace,\n} from \"../../core/marketplace.js\";\nimport { readMarketplaceInstalls } from \"../../core/marketplace-state.js\";\nimport { findConnectorConfig, loadConnectorFromPath } from \"../../core/load-connector.js\";\nimport type { InstallResult, PlatformId } from \"../../core/types.js\";\nimport { fail, parseScope, parseTargets, print, renderInstallResult } from \"../app.js\";\n\n/** Resolve the connector id from flags, then from a local config file. */\nasync function resolveConnectorId(\n explicitId: string | undefined,\n connectorPath: string | undefined,\n projectDir: string,\n): Promise<string | null> {\n if (explicitId && explicitId.trim() !== \"\") return explicitId;\n const configPath = connectorPath ?? findConnectorConfig(projectDir);\n if (!configPath) return null;\n const { connector } = await loadConnectorFromPath(configPath);\n return connector.id;\n}\n\nexport async function run(argv: string[]): Promise<number> {\n const { values } = parseArgs({\n args: argv,\n options: {\n method: { type: \"string\", default: \"auto\" },\n scope: { type: \"string\", default: \"user\" },\n targets: { type: \"string\" },\n connector: { type: \"string\" },\n \"connector-id\": { type: \"string\" },\n project: { type: \"string\" },\n \"dry-run\": { type: \"boolean\", default: false },\n purge: { type: \"boolean\", default: false },\n },\n allowPositionals: false,\n });\n\n const method = parseUninstallMethod(values.method);\n if (method == null) {\n return fail(`invalid --method \"${values.method}\" (use auto|direct|marketplace)`);\n }\n\n const projectDir = values.project ?? process.cwd();\n\n const scope = parseScope(values.scope);\n if (scope == null) return fail(`invalid --scope \"${values.scope}\" (use user|project)`);\n\n const connectorId = await resolveConnectorId(\n values[\"connector-id\"],\n values.connector,\n projectDir,\n );\n if (!connectorId) {\n return fail(\n \"could not determine connector id. Pass --connector-id <id>, \" +\n \"--connector <path>, or run inside a project with an agent-connector config.\",\n );\n }\n\n const targets = parseTargets(values.targets);\n const dryRun = values[\"dry-run\"];\n\n // ── Explicit --method marketplace: every target goes to the marketplace path\n // (targets default to the recorded installs); framework purge runs here since\n // no direct pass follows.\n if (method === \"marketplace\") {\n const result = await uninstallViaMarketplace({\n connectorId,\n projectDir,\n dryRun,\n purge: values.purge,\n ...(targets ? { targets } : {}),\n });\n if (values.purge) purgeFrameworkState(connectorId, dryRun, result);\n print(renderInstallResult(result, \"uninstall\"));\n return result.changes.some((c) => c.action === \"warn\") ? 1 : 0;\n }\n\n // ── --method auto: partition the resolved targets by marketplace evidence.\n // (--method direct keeps every target on the adapter strip — today's path.)\n let marketplaceTargets: PlatformId[] = [];\n let directTargets: PlatformId[] = [];\n if (method === \"auto\") {\n const resolved = await resolveUninstallTargets(connectorId, targets, projectDir);\n // With no explicit --targets, recorded marketplace platforms are unioned\n // in: the state record IS the authority for what we installed, and host\n // detection can miss a host whose probe-able config dir was relocated.\n // An explicit --targets list is always respected as-is.\n const recorded = targets\n ? []\n : (Object.keys(readMarketplaceInstalls(connectorId)) as PlatformId[]);\n const candidates = [...new Set([...resolved, ...recorded])];\n marketplaceTargets = candidates.filter(\n (id) => marketplaceEvidence(connectorId, id) != null,\n );\n directTargets = resolved.filter((id) => !marketplaceTargets.includes(id));\n }\n\n // No marketplace evidence anywhere (or --method direct): exactly today's\n // single-orchestration path, byte-for-byte — zero behavior change for users\n // who never touched the marketplace method.\n if (marketplaceTargets.length === 0) {\n const result = await uninstallConnector({\n connectorId,\n scope,\n projectDir,\n dryRun,\n purge: values.purge,\n ...(targets ? { targets } : {}),\n });\n print(renderInstallResult(result, \"uninstall\"));\n return result.changes.some((c) => c.action === \"warn\") ? 1 : 0;\n }\n\n const results: InstallResult[] = [\n await uninstallViaMarketplace({\n connectorId,\n projectDir,\n targets: marketplaceTargets,\n dryRun,\n purge: values.purge,\n }),\n ];\n\n // The direct strip runs only for its partition (never both methods on one\n // target). When every target was marketplace-routed, --purge still runs the\n // framework purge (the marketplace records were just cleared, so it can\n // proceed to the connector record + home-bin).\n if (directTargets.length > 0) {\n results.push(\n await uninstallConnector({\n connectorId,\n scope,\n projectDir,\n dryRun,\n purge: values.purge,\n targets: directTargets,\n }),\n );\n } else if (values.purge) {\n const purgeResult: InstallResult = {\n connectorId,\n dryRun,\n changes: [],\n warnings: [],\n };\n if (dryRun) {\n // On a real run the marketplace records are removed BEFORE this purge;\n // calling purgeFrameworkState now would false-refuse on records that the\n // marketplace pass only PLANNED to remove. Report the plan instead.\n purgeResult.changes.push({\n platform: connectorId as PlatformId,\n action: \"remove\",\n detail:\n \"would purge framework state (connector record; home-bin when no connectors remain)\",\n });\n } else {\n purgeFrameworkState(connectorId, dryRun, purgeResult);\n }\n results.push(purgeResult);\n }\n\n const merged: InstallResult = {\n connectorId,\n dryRun,\n changes: results.flatMap((r) => r.changes),\n warnings: results.flatMap((r) => r.warnings),\n };\n print(renderInstallResult(merged, \"uninstall\"));\n return merged.changes.some((c) => c.action === \"warn\") ? 1 : 0;\n}\n"],"mappings":"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","names":[]}
@@ -4,34 +4,35 @@ import {
4
4
  resolveCliEntry,
5
5
  syncConnector,
6
6
  upgradeViaMarketplace
7
- } from "./chunk-6RYPUR6O.js";
8
- import "./chunk-7ECYDK5T.js";
9
- import "./chunk-G5CQHVQG.js";
7
+ } from "./chunk-IW46JIQM.js";
8
+ import "./chunk-HZDU3J4U.js";
9
+ import "./chunk-M3H7PQWT.js";
10
10
  import {
11
11
  fail,
12
12
  parseScope,
13
13
  parseTargets,
14
14
  print,
15
15
  renderInstallResult
16
- } from "./chunk-CYOAH23F.js";
17
- import "./chunk-F5RX62T7.js";
18
- import "./chunk-SDPIT4HW.js";
16
+ } from "./chunk-25BNMXPP.js";
17
+ import "./chunk-7QRUZAUG.js";
18
+ import "./chunk-Q5HR4ADS.js";
19
19
  import "./chunk-KHO5WNTP.js";
20
20
  import {
21
21
  findConnectorConfig,
22
22
  loadConnectorFromPath
23
- } from "./chunk-YQLQJZ7S.js";
24
- import "./chunk-MDNX7HTN.js";
25
- import "./chunk-2F5QH3D4.js";
26
- import "./chunk-FAHIMJRU.js";
23
+ } from "./chunk-OLI5SD6I.js";
24
+ import "./chunk-YEJCNOET.js";
25
+ import "./chunk-HU6DZZBG.js";
26
+ import "./chunk-L7ESV37V.js";
27
+ import "./chunk-UM5S7DKK.js";
27
28
  import "./chunk-OPXAP3AC.js";
28
- import "./chunk-7L6ITC4T.js";
29
- import "./chunk-I5MLE6S7.js";
30
- import "./chunk-N6HH7K6P.js";
29
+ import "./chunk-IEGR4TP3.js";
30
+ import "./chunk-TO57WYBB.js";
31
+ import "./chunk-ZY25RG4Y.js";
31
32
  import {
32
33
  ensureHomeBin,
33
34
  homeBinPath
34
- } from "./chunk-TRQKHP7D.js";
35
+ } from "./chunk-QY42WGBX.js";
35
36
 
36
37
  // src/cli/commands/upgrade.ts
37
38
  import { parseArgs } from "util";
@@ -123,4 +124,4 @@ Refreshed home binary pointer: ${binPath}`);
123
124
  export {
124
125
  run
125
126
  };
126
- //# sourceMappingURL=upgrade-WU3KZWR4.js.map
127
+ //# sourceMappingURL=upgrade-YQRVYR5U.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cli/commands/upgrade.ts"],"sourcesContent":["/**\n * cli/commands/upgrade — bring an agent-connector install current.\n *\n * `upgrade` (aliases: `update`, `sync`) consolidates the two former verbs into\n * ONE the way npm/brew pair `install` + `upgrade`, so there is a single verb to\n * learn for \"make everything current\". It:\n *\n * 1. re-renders the connector's config into every target host idempotently\n * (identical entries report \"skip\"), exactly like the old `sync` — this is\n * also the self-heal path: run `upgrade` to repair a drifted install; then\n * 2. refreshes the stable home-bin pointer and prints managed (never-silent)\n * update guidance for the chosen channel, exactly like the old `update`.\n *\n * When no connector config is resolvable it still does step 2, so `upgrade`\n * works as a pure tool-refresh from anywhere. By design agent-connector NEVER\n * silently auto-updates (docs/ARCHITECTURE.md §3 R1).\n */\n\nimport { parseArgs } from \"node:util\";\n\nimport { resolveCliEntry, syncConnector } from \"../../core/installer.js\";\nimport { parseInstallMethod, upgradeViaMarketplace } from \"../../core/marketplace.js\";\nimport { findConnectorConfig, loadConnectorFromPath } from \"../../core/load-connector.js\";\nimport { ensureHomeBin, homeBinPath } from \"../../core/paths.js\";\nimport { fail, parseScope, parseTargets, print, renderInstallResult } from \"../app.js\";\n\ntype Channel = \"stable\" | \"latest\";\n\n/** Heuristic: does the running CLI live under an npm-style node_modules tree? */\nfunction looksNpmManaged(): boolean {\n const entry = resolveCliEntry().replace(/\\\\/g, \"/\");\n return entry.includes(\"/node_modules/\");\n}\n\nexport async function run(argv: string[]): Promise<number> {\n const { values } = parseArgs({\n args: argv,\n options: {\n channel: { type: \"string\", default: \"stable\" },\n method: { type: \"string\", default: \"direct\" },\n scope: { type: \"string\", default: \"user\" },\n targets: { type: \"string\" },\n connector: { type: \"string\" },\n project: { type: \"string\" },\n \"dry-run\": { type: \"boolean\", default: false },\n },\n allowPositionals: false,\n });\n\n const channel = values.channel;\n if (channel !== \"stable\" && channel !== \"latest\") {\n return fail(`invalid --channel \"${channel}\" (use stable|latest)`);\n }\n const ch: Channel = channel;\n\n const method = parseInstallMethod(values.method);\n if (method == null) {\n return fail(`invalid --method \"${values.method}\" (use direct|marketplace)`);\n }\n\n const scope = parseScope(values.scope);\n if (scope == null) return fail(`invalid --scope \"${values.scope}\" (use user|project)`);\n if (method === \"marketplace\" && scope !== \"user\") {\n return fail(\n \"--method marketplace supports --scope user only (project-scope plugin installs are deferred)\",\n );\n }\n\n let hadWarn = false;\n\n // ── Step 1: bring the connector's deploys current (former `sync`):\n // direct — idempotent re-render into every target host.\n // marketplace — re-stage the bundle + catalog in place, then drive the\n // host's update verb (claude `plugin update`, with a recorded\n // uninstall+install fallback); warns when connector.version is\n // unchanged since the recorded install (Claude caches a\n // versioned copy, so a same-version update silently no-ops).\n const projectDir = values.project ?? process.cwd();\n const configPath = values.connector ?? findConnectorConfig(projectDir);\n if (configPath) {\n const { connector, modulePath } = await loadConnectorFromPath(configPath);\n const targets = parseTargets(values.targets);\n const opts = {\n connector,\n modulePath,\n scope,\n projectDir,\n dryRun: values[\"dry-run\"],\n ...(targets ? { targets } : {}),\n };\n const result =\n method === \"marketplace\"\n ? await upgradeViaMarketplace(opts)\n : await syncConnector(opts);\n print(renderInstallResult(result, \"upgrade\"));\n if (result.changes.some((c) => c.action === \"warn\")) hadWarn = true;\n print(\"\");\n } else {\n print(\"upgrade: no connector config found — refreshing the tool only.\");\n print(\n \"(pass --connector <path> or run inside a project to also re-render host config.)\\n\",\n );\n }\n\n // ── Step 2: managed update guidance + home-bin pointer refresh (former `update`). ──\n print(\"agent-connector uses managed (explicit) updates — never silent\");\n print(\"auto-update — so one bad release can't break every project at once.\\n\");\n\n const dist = ch === \"stable\" ? \"latest\" : \"next\";\n if (looksNpmManaged()) {\n print(`To update the ${ch} channel, run:`);\n print(` npm i -g @ken-jo/agent-connector@${dist}`);\n } else {\n print(\n `This install does not look npm-managed. Update it the way you installed it,`,\n );\n print(`then re-run \\`agent-connector upgrade\\` to refresh the home pointer.`);\n print(`(npm installs would use: npm i -g @ken-jo/agent-connector@${dist})`);\n }\n\n // Refresh the stable home-bin pointer so hosts keep execing a working CLI.\n if (!values[\"dry-run\"]) {\n try {\n const binPath = ensureHomeBin(resolveCliEntry());\n print(`\\nRefreshed home binary pointer: ${binPath}`);\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n print(`\\n[warn] could not refresh home binary at ${homeBinPath()}: ${message}`);\n return 1;\n }\n }\n\n return hadWarn ? 1 : 0;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkBA,SAAS,iBAAiB;AAW1B,SAAS,kBAA2B;AAClC,QAAM,QAAQ,gBAAgB,EAAE,QAAQ,OAAO,GAAG;AAClD,SAAO,MAAM,SAAS,gBAAgB;AACxC;AAEA,eAAsB,IAAI,MAAiC;AACzD,QAAM,EAAE,OAAO,IAAI,UAAU;AAAA,IAC3B,MAAM;AAAA,IACN,SAAS;AAAA,MACP,SAAS,EAAE,MAAM,UAAU,SAAS,SAAS;AAAA,MAC7C,QAAQ,EAAE,MAAM,UAAU,SAAS,SAAS;AAAA,MAC5C,OAAO,EAAE,MAAM,UAAU,SAAS,OAAO;AAAA,MACzC,SAAS,EAAE,MAAM,SAAS;AAAA,MAC1B,WAAW,EAAE,MAAM,SAAS;AAAA,MAC5B,SAAS,EAAE,MAAM,SAAS;AAAA,MAC1B,WAAW,EAAE,MAAM,WAAW,SAAS,MAAM;AAAA,IAC/C;AAAA,IACA,kBAAkB;AAAA,EACpB,CAAC;AAED,QAAM,UAAU,OAAO;AACvB,MAAI,YAAY,YAAY,YAAY,UAAU;AAChD,WAAO,KAAK,sBAAsB,OAAO,uBAAuB;AAAA,EAClE;AACA,QAAM,KAAc;AAEpB,QAAM,SAAS,mBAAmB,OAAO,MAAM;AAC/C,MAAI,UAAU,MAAM;AAClB,WAAO,KAAK,qBAAqB,OAAO,MAAM,4BAA4B;AAAA,EAC5E;AAEA,QAAM,QAAQ,WAAW,OAAO,KAAK;AACrC,MAAI,SAAS,KAAM,QAAO,KAAK,oBAAoB,OAAO,KAAK,sBAAsB;AACrF,MAAI,WAAW,iBAAiB,UAAU,QAAQ;AAChD,WAAO;AAAA,MACL;AAAA,IACF;AAAA,EACF;AAEA,MAAI,UAAU;AASd,QAAM,aAAa,OAAO,WAAW,QAAQ,IAAI;AACjD,QAAM,aAAa,OAAO,aAAa,oBAAoB,UAAU;AACrE,MAAI,YAAY;AACd,UAAM,EAAE,WAAW,WAAW,IAAI,MAAM,sBAAsB,UAAU;AACxE,UAAM,UAAU,aAAa,OAAO,OAAO;AAC3C,UAAM,OAAO;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,QAAQ,OAAO,SAAS;AAAA,MACxB,GAAI,UAAU,EAAE,QAAQ,IAAI,CAAC;AAAA,IAC/B;AACA,UAAM,SACJ,WAAW,gBACP,MAAM,sBAAsB,IAAI,IAChC,MAAM,cAAc,IAAI;AAC9B,UAAM,oBAAoB,QAAQ,SAAS,CAAC;AAC5C,QAAI,OAAO,QAAQ,KAAK,CAAC,MAAM,EAAE,WAAW,MAAM,EAAG,WAAU;AAC/D,UAAM,EAAE;AAAA,EACV,OAAO;AACL,UAAM,qEAAgE;AACtE;AAAA,MACE;AAAA,IACF;AAAA,EACF;AAGA,QAAM,qEAAgE;AACtE,QAAM,4EAAuE;AAE7E,QAAM,OAAO,OAAO,WAAW,WAAW;AAC1C,MAAI,gBAAgB,GAAG;AACrB,UAAM,iBAAiB,EAAE,gBAAgB;AACzC,UAAM,sCAAsC,IAAI,EAAE;AAAA,EACpD,OAAO;AACL;AAAA,MACE;AAAA,IACF;AACA,UAAM,sEAAsE;AAC5E,UAAM,6DAA6D,IAAI,GAAG;AAAA,EAC5E;AAGA,MAAI,CAAC,OAAO,SAAS,GAAG;AACtB,QAAI;AACF,YAAM,UAAU,cAAc,gBAAgB,CAAC;AAC/C,YAAM;AAAA,iCAAoC,OAAO,EAAE;AAAA,IACrD,SAAS,KAAK;AACZ,YAAM,UAAU,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAC/D,YAAM;AAAA,0CAA6C,YAAY,CAAC,KAAK,OAAO,EAAE;AAC9E,aAAO;AAAA,IACT;AAAA,EACF;AAEA,SAAO,UAAU,IAAI;AACvB;","names":[]}
1
+ {"version":3,"sources":["../src/cli/commands/upgrade.ts"],"sourcesContent":["/**\n * cli/commands/upgrade — bring an agent-connector install current.\n *\n * `upgrade` (aliases: `update`, `sync`) consolidates the two former verbs into\n * ONE the way npm/brew pair `install` + `upgrade`, so there is a single verb to\n * learn for \"make everything current\". It:\n *\n * 1. re-renders the connector's config into every target host idempotently\n * (identical entries report \"skip\"), exactly like the old `sync` — this is\n * also the self-heal path: run `upgrade` to repair a drifted install; then\n * 2. refreshes the stable home-bin pointer and prints managed (never-silent)\n * update guidance for the chosen channel, exactly like the old `update`.\n *\n * When no connector config is resolvable it still does step 2, so `upgrade`\n * works as a pure tool-refresh from anywhere. By design agent-connector NEVER\n * silently auto-updates (docs/ARCHITECTURE.md §3 R1).\n */\n\nimport { parseArgs } from \"node:util\";\n\nimport { resolveCliEntry, syncConnector } from \"../../core/installer.js\";\nimport { parseInstallMethod, upgradeViaMarketplace } from \"../../core/marketplace.js\";\nimport { findConnectorConfig, loadConnectorFromPath } from \"../../core/load-connector.js\";\nimport { ensureHomeBin, homeBinPath } from \"../../core/paths.js\";\nimport { fail, parseScope, parseTargets, print, renderInstallResult } from \"../app.js\";\n\ntype Channel = \"stable\" | \"latest\";\n\n/** Heuristic: does the running CLI live under an npm-style node_modules tree? */\nfunction looksNpmManaged(): boolean {\n const entry = resolveCliEntry().replace(/\\\\/g, \"/\");\n return entry.includes(\"/node_modules/\");\n}\n\nexport async function run(argv: string[]): Promise<number> {\n const { values } = parseArgs({\n args: argv,\n options: {\n channel: { type: \"string\", default: \"stable\" },\n method: { type: \"string\", default: \"direct\" },\n scope: { type: \"string\", default: \"user\" },\n targets: { type: \"string\" },\n connector: { type: \"string\" },\n project: { type: \"string\" },\n \"dry-run\": { type: \"boolean\", default: false },\n },\n allowPositionals: false,\n });\n\n const channel = values.channel;\n if (channel !== \"stable\" && channel !== \"latest\") {\n return fail(`invalid --channel \"${channel}\" (use stable|latest)`);\n }\n const ch: Channel = channel;\n\n const method = parseInstallMethod(values.method);\n if (method == null) {\n return fail(`invalid --method \"${values.method}\" (use direct|marketplace)`);\n }\n\n const scope = parseScope(values.scope);\n if (scope == null) return fail(`invalid --scope \"${values.scope}\" (use user|project)`);\n if (method === \"marketplace\" && scope !== \"user\") {\n return fail(\n \"--method marketplace supports --scope user only (project-scope plugin installs are deferred)\",\n );\n }\n\n let hadWarn = false;\n\n // ── Step 1: bring the connector's deploys current (former `sync`):\n // direct — idempotent re-render into every target host.\n // marketplace — re-stage the bundle + catalog in place, then drive the\n // host's update verb (claude `plugin update`, with a recorded\n // uninstall+install fallback); warns when connector.version is\n // unchanged since the recorded install (Claude caches a\n // versioned copy, so a same-version update silently no-ops).\n const projectDir = values.project ?? process.cwd();\n const configPath = values.connector ?? findConnectorConfig(projectDir);\n if (configPath) {\n const { connector, modulePath } = await loadConnectorFromPath(configPath);\n const targets = parseTargets(values.targets);\n const opts = {\n connector,\n modulePath,\n scope,\n projectDir,\n dryRun: values[\"dry-run\"],\n ...(targets ? { targets } : {}),\n };\n const result =\n method === \"marketplace\"\n ? await upgradeViaMarketplace(opts)\n : await syncConnector(opts);\n print(renderInstallResult(result, \"upgrade\"));\n if (result.changes.some((c) => c.action === \"warn\")) hadWarn = true;\n print(\"\");\n } else {\n print(\"upgrade: no connector config found — refreshing the tool only.\");\n print(\n \"(pass --connector <path> or run inside a project to also re-render host config.)\\n\",\n );\n }\n\n // ── Step 2: managed update guidance + home-bin pointer refresh (former `update`). ──\n print(\"agent-connector uses managed (explicit) updates — never silent\");\n print(\"auto-update — so one bad release can't break every project at once.\\n\");\n\n const dist = ch === \"stable\" ? \"latest\" : \"next\";\n if (looksNpmManaged()) {\n print(`To update the ${ch} channel, run:`);\n print(` npm i -g @ken-jo/agent-connector@${dist}`);\n } else {\n print(\n `This install does not look npm-managed. Update it the way you installed it,`,\n );\n print(`then re-run \\`agent-connector upgrade\\` to refresh the home pointer.`);\n print(`(npm installs would use: npm i -g @ken-jo/agent-connector@${dist})`);\n }\n\n // Refresh the stable home-bin pointer so hosts keep execing a working CLI.\n if (!values[\"dry-run\"]) {\n try {\n const binPath = ensureHomeBin(resolveCliEntry());\n print(`\\nRefreshed home binary pointer: ${binPath}`);\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n print(`\\n[warn] could not refresh home binary at ${homeBinPath()}: ${message}`);\n return 1;\n }\n }\n\n return hadWarn ? 1 : 0;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkBA,SAAS,iBAAiB;AAW1B,SAAS,kBAA2B;AAClC,QAAM,QAAQ,gBAAgB,EAAE,QAAQ,OAAO,GAAG;AAClD,SAAO,MAAM,SAAS,gBAAgB;AACxC;AAEA,eAAsB,IAAI,MAAiC;AACzD,QAAM,EAAE,OAAO,IAAI,UAAU;AAAA,IAC3B,MAAM;AAAA,IACN,SAAS;AAAA,MACP,SAAS,EAAE,MAAM,UAAU,SAAS,SAAS;AAAA,MAC7C,QAAQ,EAAE,MAAM,UAAU,SAAS,SAAS;AAAA,MAC5C,OAAO,EAAE,MAAM,UAAU,SAAS,OAAO;AAAA,MACzC,SAAS,EAAE,MAAM,SAAS;AAAA,MAC1B,WAAW,EAAE,MAAM,SAAS;AAAA,MAC5B,SAAS,EAAE,MAAM,SAAS;AAAA,MAC1B,WAAW,EAAE,MAAM,WAAW,SAAS,MAAM;AAAA,IAC/C;AAAA,IACA,kBAAkB;AAAA,EACpB,CAAC;AAED,QAAM,UAAU,OAAO;AACvB,MAAI,YAAY,YAAY,YAAY,UAAU;AAChD,WAAO,KAAK,sBAAsB,OAAO,uBAAuB;AAAA,EAClE;AACA,QAAM,KAAc;AAEpB,QAAM,SAAS,mBAAmB,OAAO,MAAM;AAC/C,MAAI,UAAU,MAAM;AAClB,WAAO,KAAK,qBAAqB,OAAO,MAAM,4BAA4B;AAAA,EAC5E;AAEA,QAAM,QAAQ,WAAW,OAAO,KAAK;AACrC,MAAI,SAAS,KAAM,QAAO,KAAK,oBAAoB,OAAO,KAAK,sBAAsB;AACrF,MAAI,WAAW,iBAAiB,UAAU,QAAQ;AAChD,WAAO;AAAA,MACL;AAAA,IACF;AAAA,EACF;AAEA,MAAI,UAAU;AASd,QAAM,aAAa,OAAO,WAAW,QAAQ,IAAI;AACjD,QAAM,aAAa,OAAO,aAAa,oBAAoB,UAAU;AACrE,MAAI,YAAY;AACd,UAAM,EAAE,WAAW,WAAW,IAAI,MAAM,sBAAsB,UAAU;AACxE,UAAM,UAAU,aAAa,OAAO,OAAO;AAC3C,UAAM,OAAO;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,QAAQ,OAAO,SAAS;AAAA,MACxB,GAAI,UAAU,EAAE,QAAQ,IAAI,CAAC;AAAA,IAC/B;AACA,UAAM,SACJ,WAAW,gBACP,MAAM,sBAAsB,IAAI,IAChC,MAAM,cAAc,IAAI;AAC9B,UAAM,oBAAoB,QAAQ,SAAS,CAAC;AAC5C,QAAI,OAAO,QAAQ,KAAK,CAAC,MAAM,EAAE,WAAW,MAAM,EAAG,WAAU;AAC/D,UAAM,EAAE;AAAA,EACV,OAAO;AACL,UAAM,qEAAgE;AACtE;AAAA,MACE;AAAA,IACF;AAAA,EACF;AAGA,QAAM,qEAAgE;AACtE,QAAM,4EAAuE;AAE7E,QAAM,OAAO,OAAO,WAAW,WAAW;AAC1C,MAAI,gBAAgB,GAAG;AACrB,UAAM,iBAAiB,EAAE,gBAAgB;AACzC,UAAM,sCAAsC,IAAI,EAAE;AAAA,EACpD,OAAO;AACL;AAAA,MACE;AAAA,IACF;AACA,UAAM,sEAAsE;AAC5E,UAAM,6DAA6D,IAAI,GAAG;AAAA,EAC5E;AAGA,MAAI,CAAC,OAAO,SAAS,GAAG;AACtB,QAAI;AACF,YAAM,UAAU,cAAc,gBAAgB,CAAC;AAC/C,YAAM;AAAA,iCAAoC,OAAO,EAAE;AAAA,IACrD,SAAS,KAAK;AACZ,YAAM,UAAU,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAC/D,YAAM;AAAA,0CAA6C,YAAY,CAAC,KAAK,OAAO,EAAE;AAC9E,aAAO;AAAA,IACT;AAAA,EACF;AAEA,SAAO,UAAU,IAAI;AACvB;","names":[]}
@@ -3,7 +3,7 @@ import {
3
3
  formatHostLeaderboard,
4
4
  hostLeaderboard,
5
5
  scanUsage
6
- } from "./chunk-SCVBYSF7.js";
6
+ } from "./chunk-IRUYJD23.js";
7
7
  import {
8
8
  aggregateBy,
9
9
  sumTokens
@@ -11,7 +11,7 @@ import {
11
11
  import {
12
12
  fail,
13
13
  print
14
- } from "./chunk-CYOAH23F.js";
14
+ } from "./chunk-25BNMXPP.js";
15
15
 
16
16
  // src/cli/commands/usage.ts
17
17
  import { writeFileSync } from "fs";
@@ -321,4 +321,4 @@ export {
321
321
  parseSince,
322
322
  run
323
323
  };
324
- //# sourceMappingURL=usage-G72SF7JG.js.map
324
+ //# sourceMappingURL=usage-OV2BDZKF.js.map
@@ -1,20 +1,20 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  runUsageEvent
4
- } from "./chunk-SPWFUHHK.js";
4
+ } from "./chunk-ZVTPSV5Z.js";
5
5
  import "./chunk-OP4KBXUO.js";
6
- import "./chunk-F5RX62T7.js";
7
- import "./chunk-SDPIT4HW.js";
8
- import "./chunk-HAIMYUEY.js";
9
- import "./chunk-BCHWFTV4.js";
6
+ import "./chunk-7QRUZAUG.js";
7
+ import "./chunk-Q5HR4ADS.js";
8
+ import "./chunk-YKVNI44Y.js";
9
+ import "./chunk-F4DSMVZ7.js";
10
10
  import "./chunk-KHO5WNTP.js";
11
- import "./chunk-YQLQJZ7S.js";
12
- import "./chunk-MDNX7HTN.js";
13
- import "./chunk-2F5QH3D4.js";
14
- import "./chunk-FAHIMJRU.js";
15
- import "./chunk-I5MLE6S7.js";
16
- import "./chunk-N6HH7K6P.js";
17
- import "./chunk-TRQKHP7D.js";
11
+ import "./chunk-OLI5SD6I.js";
12
+ import "./chunk-YEJCNOET.js";
13
+ import "./chunk-HU6DZZBG.js";
14
+ import "./chunk-L7ESV37V.js";
15
+ import "./chunk-TO57WYBB.js";
16
+ import "./chunk-ZY25RG4Y.js";
17
+ import "./chunk-QY42WGBX.js";
18
18
 
19
19
  // src/cli/commands/usage-event.ts
20
20
  import { parseArgs } from "util";
@@ -50,4 +50,4 @@ async function run(argv) {
50
50
  export {
51
51
  run
52
52
  };
53
- //# sourceMappingURL=usage-event-DHSEBO5T.js.map
53
+ //# sourceMappingURL=usage-event-KPI3NEX3.js.map
@@ -1,19 +1,24 @@
1
1
  #!/usr/bin/env node
2
+ import {
3
+ normalizeSessionSource
4
+ } from "./chunk-H53QZQJI.js";
2
5
  import {
3
6
  rewriteEnvRefs
4
7
  } from "./chunk-DBQMX75U.js";
5
8
  import {
6
9
  BaseAdapter
7
- } from "./chunk-PFDUGDOA.js";
8
- import "./chunk-7L6ITC4T.js";
10
+ } from "./chunk-3I7UG52L.js";
11
+ import {
12
+ renderSkillMd,
13
+ renderSubagentMd
14
+ } from "./chunk-IEGR4TP3.js";
9
15
  import {
10
16
  buildHomeBinHookCommand,
11
- buildServeWrapperCommand,
12
- isHomeBinHookCommand,
13
- shouldWrapForTelemetry
14
- } from "./chunk-I5MLE6S7.js";
15
- import "./chunk-N6HH7K6P.js";
16
- import "./chunk-TRQKHP7D.js";
17
+ buildWrappedStdio,
18
+ isHomeBinHookCommand
19
+ } from "./chunk-TO57WYBB.js";
20
+ import "./chunk-ZY25RG4Y.js";
21
+ import "./chunk-QY42WGBX.js";
17
22
 
18
23
  // src/adapters/vscode-copilot/index.ts
19
24
  import { existsSync } from "fs";
@@ -153,18 +158,7 @@ var VSCodeCopilotAdapter = class extends BaseAdapter {
153
158
  if (transport === "stdio") {
154
159
  let command = server.command ?? "";
155
160
  let args = [...server.args ?? []];
156
- if (shouldWrapForTelemetry(server, ctx.connector.telemetry)) {
157
- const wrapped = buildServeWrapperCommand(
158
- ctx.homeBinPath,
159
- ctx.connector.id,
160
- command,
161
- args,
162
- ctx.scope,
163
- this.id
164
- );
165
- command = wrapped.command;
166
- args = wrapped.args;
167
- }
161
+ ({ command, args } = buildWrappedStdio(ctx, server, this.id, command, args));
168
162
  const entry2 = { type: "stdio", command: this.rewrite(command) };
169
163
  if (args.length > 0) entry2.args = args.map((a) => this.rewrite(a));
170
164
  const env = this.renderEnv(server.env);
@@ -414,7 +408,7 @@ var VSCodeCopilotAdapter = class extends BaseAdapter {
414
408
  for (const skill of connector.skills) {
415
409
  const dir = this.skillDir(ctx, skill.name);
416
410
  changes.push(
417
- this.writeContentFile(join(dir, "SKILL.md"), this.renderSkill(skill), ctx.dryRun)
411
+ this.writeContentFile(join(dir, "SKILL.md"), renderSkillMd(skill), ctx.dryRun)
418
412
  );
419
413
  for (const [rel, contents] of Object.entries(skill.resources ?? {})) {
420
414
  const target = this.resolveWithin(dir, rel);
@@ -449,26 +443,6 @@ var VSCodeCopilotAdapter = class extends BaseAdapter {
449
443
  }
450
444
  return changes;
451
445
  }
452
- /**
453
- * Render a skill's SKILL.md — the uniform Agent Skills format: frontmatter
454
- * (name, description + optional model, allowed-tools, disable-model-invocation)
455
- * + body. Byte-identical to the other .github-sharing connectors so a shared
456
- * skill folder never thrashes.
457
- */
458
- renderSkill(skill) {
459
- const frontmatter = {
460
- name: skill.name,
461
- description: skill.description
462
- };
463
- if (skill.model !== void 0) frontmatter.model = skill.model;
464
- const allow = skill.tools?.allow;
465
- if (allow && allow.length > 0) frontmatter["allowed-tools"] = allow.join(", ");
466
- if (skill.disableModelInvocation !== void 0) {
467
- frontmatter["disable-model-invocation"] = skill.disableModelInvocation;
468
- }
469
- if (skill.extra) Object.assign(frontmatter, skill.extra);
470
- return this.renderFrontmatterMd(frontmatter, skill.body);
471
- }
472
446
  // ── Subagents ───────────────────────────────────────────────────────────────
473
447
  installSubagents(ctx) {
474
448
  const { connector } = ctx;
@@ -481,7 +455,7 @@ var VSCodeCopilotAdapter = class extends BaseAdapter {
481
455
  return connector.subagents.map(
482
456
  (agent) => this.writeContentFile(
483
457
  this.subagentPath(ctx, agent.name),
484
- this.renderSubagent(agent),
458
+ renderSubagentMd(agent),
485
459
  ctx.dryRun
486
460
  )
487
461
  );
@@ -495,18 +469,6 @@ var VSCodeCopilotAdapter = class extends BaseAdapter {
495
469
  (agent) => this.removeContentFile(this.subagentPath(ctx, agent.name), ctx.dryRun)
496
470
  );
497
471
  }
498
- /** Render a subagent agent file: md+frontmatter(name, description, tools, model) + prompt body. */
499
- renderSubagent(agent) {
500
- const frontmatter = {
501
- name: agent.name,
502
- description: agent.description
503
- };
504
- const allow = agent.tools?.allow;
505
- if (allow && allow.length > 0) frontmatter.tools = allow.join(", ");
506
- if (agent.model !== void 0) frontmatter.model = agent.model;
507
- if (agent.extra) Object.assign(frontmatter, agent.extra);
508
- return this.renderFrontmatterMd(frontmatter, agent.prompt);
509
- }
510
472
  // ── Diagnostics ──────────────────────────────────────────────────────────
511
473
  getHealthChecks(ctx) {
512
474
  const mcpPath = this.getServerConfigPath(ctx);
@@ -757,18 +719,6 @@ function toolResponseToString(value) {
757
719
  return String(value);
758
720
  }
759
721
  }
760
- function normalizeSessionSource(source) {
761
- switch (source) {
762
- case "compact":
763
- return "compact";
764
- case "resume":
765
- return "resume";
766
- case "clear":
767
- return "clear";
768
- default:
769
- return "startup";
770
- }
771
- }
772
722
  var adapter = new VSCodeCopilotAdapter();
773
723
  var vscode_copilot_default = adapter;
774
724
  export {
@@ -776,4 +726,4 @@ export {
776
726
  adapter,
777
727
  vscode_copilot_default as default
778
728
  };
779
- //# sourceMappingURL=vscode-copilot-6EOZDLXC.js.map
729
+ //# sourceMappingURL=vscode-copilot-UOEEV4P3.js.map