@ken-jo/agent-connector 0.4.91 → 0.4.93

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 (196) hide show
  1. package/README.md +326 -563
  2. package/dist/{action-L44DXFHT.js → action-DOWHWEDZ.js} +14 -14
  3. package/dist/{amazon-q-B52EY2SV.js → amazon-q-ETMAGY3D.js} +5 -5
  4. package/dist/{amp-UXABVUKC.js → amp-67BZONGF.js} +5 -5
  5. package/dist/{antigravity-RZHN53VB.js → antigravity-VXLDLTO7.js} +6 -6
  6. package/dist/{antigravity-cli-JO6GUTV7.js → antigravity-cli-OM6SC3PE.js} +47 -16
  7. package/dist/antigravity-cli-OM6SC3PE.js.map +1 -0
  8. package/dist/{chunk-R6LML2YS.js → chunk-2RIFORQS.js} +2 -2
  9. package/dist/{chunk-QKLJU4JX.js → chunk-2Y2MZRLP.js} +56 -2
  10. package/dist/chunk-2Y2MZRLP.js.map +1 -0
  11. package/dist/{chunk-HORHRHNG.js → chunk-4NHXLXSD.js} +2 -2
  12. package/dist/{chunk-AY3RGRTT.js → chunk-6TF7MHG5.js} +2 -2
  13. package/dist/{chunk-NBUEL74R.js → chunk-6WZODR3Z.js} +3 -3
  14. package/dist/{chunk-LF76VPGQ.js → chunk-B5W3RHTI.js} +72 -22
  15. package/dist/chunk-B5W3RHTI.js.map +1 -0
  16. package/dist/{chunk-BLTVZACS.js → chunk-EHP7WISI.js} +9 -9
  17. package/dist/{chunk-4NSU3KWX.js → chunk-FJCUKXGX.js} +2 -2
  18. package/dist/{chunk-IXOQDZWC.js → chunk-GZGLCCEE.js} +5 -1
  19. package/dist/chunk-GZGLCCEE.js.map +1 -0
  20. package/dist/{chunk-LAIITCMW.js → chunk-I5TO42QC.js} +5 -5
  21. package/dist/{chunk-4FWETID5.js → chunk-IVAWP6HH.js} +2 -2
  22. package/dist/{chunk-UBB7T54N.js → chunk-JKKU2WKG.js} +3 -3
  23. package/dist/{chunk-G4CEELKO.js → chunk-KJLFGQQM.js} +180 -10
  24. package/dist/chunk-KJLFGQQM.js.map +1 -0
  25. package/dist/{chunk-NWLRJNXM.js → chunk-KSPMSRVU.js} +27 -15
  26. package/dist/chunk-KSPMSRVU.js.map +1 -0
  27. package/dist/{chunk-VVFDU4IX.js → chunk-MGTDQLJJ.js} +12 -5
  28. package/dist/{chunk-VVFDU4IX.js.map → chunk-MGTDQLJJ.js.map} +1 -1
  29. package/dist/{chunk-56R2ER7K.js → chunk-NBYKLUF6.js} +2 -2
  30. package/dist/chunk-OEADFFKO.js +590 -0
  31. package/dist/chunk-OEADFFKO.js.map +1 -0
  32. package/dist/{chunk-QARPXSIV.js → chunk-P23RVIUY.js} +4 -4
  33. package/dist/{chunk-25CPWJA7.js → chunk-SILKSP2Y.js} +43 -43
  34. package/dist/{chunk-KIRCPLM4.js → chunk-TTKSYJRY.js} +538 -226
  35. package/dist/chunk-TTKSYJRY.js.map +1 -0
  36. package/dist/{chunk-YYNXIUR2.js → chunk-UMQ6NBQR.js} +3 -3
  37. package/dist/chunk-UMQ6NBQR.js.map +1 -0
  38. package/dist/{chunk-4HVQ7IUM.js → chunk-XC5SJ35F.js} +17 -4
  39. package/dist/chunk-XC5SJ35F.js.map +1 -0
  40. package/dist/{chunk-LN76OGNR.js → chunk-Z2MRSS2I.js} +2 -2
  41. package/dist/{chunk-ZMLVR4J7.js → chunk-ZMAJ2XFD.js} +2 -2
  42. package/dist/{claude-code-WS4NAGZT.js → claude-code-DUZNOAS2.js} +9 -9
  43. package/dist/cli/sdk.js +7 -7
  44. package/dist/cli.js +1 -1
  45. package/dist/{cline-NNMVCECA.js → cline-25KW25IN.js} +5 -5
  46. package/dist/{codebuddy-RBEZGXBG.js → codebuddy-ZNYQACMF.js} +5 -5
  47. package/dist/{codebuff-RJIDSEU3.js → codebuff-VR6JUDIY.js} +5 -5
  48. package/dist/{codex-ZZ434GYR.js → codex-CPNKTXG3.js} +11 -5
  49. package/dist/{codex-ZZ434GYR.js.map → codex-CPNKTXG3.js.map} +1 -1
  50. package/dist/{continue-MNM7YVJY.js → continue-WU2IB5KS.js} +6 -6
  51. package/dist/{copilot-cli-SMTX5F65.js → copilot-cli-PAP377OM.js} +5 -5
  52. package/dist/{crush-NYDBHIJE.js → crush-3AVQA4YU.js} +5 -5
  53. package/dist/{cursor-AOELDNZU.js → cursor-GSLUET3V.js} +6 -6
  54. package/dist/define-connector-LQFJL_at.d.ts +89 -0
  55. package/dist/{detect-3S46RUMK.js → detect-DYQNUMXL.js} +4 -4
  56. package/dist/{devin-PRJY2TTD.js → devin-QMEM3OFA.js} +5 -5
  57. package/dist/{doctor-3CUBPQKU.js → doctor-H6XXAR63.js} +25 -21
  58. package/dist/doctor-H6XXAR63.js.map +1 -0
  59. package/dist/{droid-PTCH2K7Y.js → droid-MOKV53J4.js} +5 -5
  60. package/dist/{gemini-cli-QGLN2UMS.js → gemini-cli-47ZHCOZR.js} +5 -5
  61. package/dist/{goose-DQ6GSZ5O.js → goose-4EI5MYTI.js} +6 -6
  62. package/dist/{grok-cli-5QD235UB.js → grok-cli-QYQPDSVB.js} +5 -5
  63. package/dist/{hermes-E47IG63A.js → hermes-F75OSK3Y.js} +6 -6
  64. package/dist/{hook-P6EKDINW.js → hook-GIQTUDMN.js} +14 -14
  65. package/dist/index.d.ts +15 -88
  66. package/dist/index.js +15 -7
  67. package/dist/install-T27662FW.js +382 -0
  68. package/dist/install-T27662FW.js.map +1 -0
  69. package/dist/{introspect-DYOIX8Ov.d.ts → introspect-D4fEGuhN.d.ts} +1 -1
  70. package/dist/{jetbrains-copilot-T2EPKROP.js → jetbrains-copilot-ZGIWI6YV.js} +23 -7
  71. package/dist/jetbrains-copilot-ZGIWI6YV.js.map +1 -0
  72. package/dist/{junie-SQ4SDLGK.js → junie-DIFN2P22.js} +5 -5
  73. package/dist/{kilo-OU2ZLZKB.js → kilo-EMZJBEBB.js} +5 -5
  74. package/dist/{kilo-cli-NMWGYF4F.js → kilo-cli-S3GXBPAE.js} +5 -5
  75. package/dist/{kimi-Z7L2LEEI.js → kimi-IQJOIY6B.js} +5 -5
  76. package/dist/{kiro-4IN5IH46.js → kiro-BYX4HEAJ.js} +5 -5
  77. package/dist/{leaderboard-LF5SP6X2.js → leaderboard-CIMQBOUS.js} +5 -5
  78. package/dist/{mimo-code-G2CBZ4M6.js → mimo-code-7R53QDHB.js} +5 -5
  79. package/dist/{mistral-vibe-TRQDHAWV.js → mistral-vibe-LHJ55FSB.js} +5 -5
  80. package/dist/{mux-JNM3F2NW.js → mux-NYCNGL43.js} +5 -5
  81. package/dist/{nemoclaw-SHA4IUML.js → nemoclaw-WSIPSE7U.js} +6 -6
  82. package/dist/{omp-OOVUNXME.js → omp-562NK5BJ.js} +5 -5
  83. package/dist/{open-interpreter-4PKL56AA.js → open-interpreter-I2CNOEXY.js} +5 -5
  84. package/dist/openclaw-7EYBQS4R.js +17 -0
  85. package/dist/{opencode-W2RK4M7G.js → opencode-YS4WX2E2.js} +5 -5
  86. package/dist/{openhands-5LNH3BKB.js → openhands-QMYIKNOS.js} +5 -5
  87. package/dist/{package-2EAIYSJ4.js → package-LIPZKHAQ.js} +12 -12
  88. package/dist/{pi-BUADR5MJ.js → pi-644FIN3A.js} +5 -5
  89. package/dist/{qwen-code-TUJNHKNI.js → qwen-code-STDMX7EM.js} +6 -6
  90. package/dist/{roo-code-L5F7S6QH.js → roo-code-DLPIHHQ6.js} +5 -5
  91. package/dist/runtime/index.d.ts +1 -1
  92. package/dist/runtime/index.js +12 -12
  93. package/dist/sdk/index.d.ts +4 -4
  94. package/dist/sdk/index.js +6 -6
  95. package/dist/sdk/test.d.ts +2 -2
  96. package/dist/sdk/test.js +10 -10
  97. package/dist/{serve-K62FW3V7.js → serve-ABTO2NA2.js} +14 -14
  98. package/dist/{status-E5MCFZM6.js → status-J7SOUH7O.js} +10 -10
  99. package/dist/{statusline-LIPF2KVP.js → statusline-QF4G724E.js} +13 -13
  100. package/dist/{telemetry-4OC56NTM.js → telemetry-EICCFEIF.js} +10 -10
  101. package/dist/{trae-Z7CQ2A2Q.js → trae-UOYD6JZZ.js} +5 -5
  102. package/dist/{types-C4qMgbJn.d.ts → types-BhcUEIJJ.d.ts} +82 -3
  103. package/dist/{uninstall-2YYKN5DX.js → uninstall-NJNNZZZY.js} +35 -25
  104. package/dist/uninstall-NJNNZZZY.js.map +1 -0
  105. package/dist/{upgrade-55AFPJEF.js → upgrade-TIBUOQNM.js} +23 -17
  106. package/dist/upgrade-TIBUOQNM.js.map +1 -0
  107. package/dist/{usage-3PB3WZSL.js → usage-VEVBWPLS.js} +2 -2
  108. package/dist/{usage-event-KD5FW6W4.js → usage-event-GRQE7XWT.js} +13 -13
  109. package/dist/{vscode-copilot-LU5NC4ZS.js → vscode-copilot-NIMH2DGU.js} +20 -5
  110. package/dist/vscode-copilot-NIMH2DGU.js.map +1 -0
  111. package/dist/{warp-4PPG5LOM.js → warp-QYJGKURM.js} +5 -5
  112. package/dist/{windsurf-3T3RVXKM.js → windsurf-75LLZ37C.js} +5 -5
  113. package/dist/{zed-ZF2OQ75O.js → zed-HKAZXEJW.js} +5 -5
  114. package/package.json +1 -1
  115. package/dist/antigravity-cli-JO6GUTV7.js.map +0 -1
  116. package/dist/chunk-4HVQ7IUM.js.map +0 -1
  117. package/dist/chunk-7HUUINPB.js +0 -201
  118. package/dist/chunk-7HUUINPB.js.map +0 -1
  119. package/dist/chunk-G4CEELKO.js.map +0 -1
  120. package/dist/chunk-IXOQDZWC.js.map +0 -1
  121. package/dist/chunk-KIRCPLM4.js.map +0 -1
  122. package/dist/chunk-LF76VPGQ.js.map +0 -1
  123. package/dist/chunk-NWLRJNXM.js.map +0 -1
  124. package/dist/chunk-QKLJU4JX.js.map +0 -1
  125. package/dist/chunk-YYNXIUR2.js.map +0 -1
  126. package/dist/doctor-3CUBPQKU.js.map +0 -1
  127. package/dist/install-7DMK53SB.js +0 -96
  128. package/dist/install-7DMK53SB.js.map +0 -1
  129. package/dist/jetbrains-copilot-T2EPKROP.js.map +0 -1
  130. package/dist/openclaw-BD56E5MV.js +0 -17
  131. package/dist/uninstall-2YYKN5DX.js.map +0 -1
  132. package/dist/upgrade-55AFPJEF.js.map +0 -1
  133. package/dist/vscode-copilot-LU5NC4ZS.js.map +0 -1
  134. /package/dist/{action-L44DXFHT.js.map → action-DOWHWEDZ.js.map} +0 -0
  135. /package/dist/{amazon-q-B52EY2SV.js.map → amazon-q-ETMAGY3D.js.map} +0 -0
  136. /package/dist/{amp-UXABVUKC.js.map → amp-67BZONGF.js.map} +0 -0
  137. /package/dist/{antigravity-RZHN53VB.js.map → antigravity-VXLDLTO7.js.map} +0 -0
  138. /package/dist/{chunk-R6LML2YS.js.map → chunk-2RIFORQS.js.map} +0 -0
  139. /package/dist/{chunk-HORHRHNG.js.map → chunk-4NHXLXSD.js.map} +0 -0
  140. /package/dist/{chunk-AY3RGRTT.js.map → chunk-6TF7MHG5.js.map} +0 -0
  141. /package/dist/{chunk-NBUEL74R.js.map → chunk-6WZODR3Z.js.map} +0 -0
  142. /package/dist/{chunk-BLTVZACS.js.map → chunk-EHP7WISI.js.map} +0 -0
  143. /package/dist/{chunk-4NSU3KWX.js.map → chunk-FJCUKXGX.js.map} +0 -0
  144. /package/dist/{chunk-LAIITCMW.js.map → chunk-I5TO42QC.js.map} +0 -0
  145. /package/dist/{chunk-4FWETID5.js.map → chunk-IVAWP6HH.js.map} +0 -0
  146. /package/dist/{chunk-UBB7T54N.js.map → chunk-JKKU2WKG.js.map} +0 -0
  147. /package/dist/{chunk-56R2ER7K.js.map → chunk-NBYKLUF6.js.map} +0 -0
  148. /package/dist/{chunk-QARPXSIV.js.map → chunk-P23RVIUY.js.map} +0 -0
  149. /package/dist/{chunk-25CPWJA7.js.map → chunk-SILKSP2Y.js.map} +0 -0
  150. /package/dist/{chunk-LN76OGNR.js.map → chunk-Z2MRSS2I.js.map} +0 -0
  151. /package/dist/{chunk-ZMLVR4J7.js.map → chunk-ZMAJ2XFD.js.map} +0 -0
  152. /package/dist/{claude-code-WS4NAGZT.js.map → claude-code-DUZNOAS2.js.map} +0 -0
  153. /package/dist/{cline-NNMVCECA.js.map → cline-25KW25IN.js.map} +0 -0
  154. /package/dist/{codebuddy-RBEZGXBG.js.map → codebuddy-ZNYQACMF.js.map} +0 -0
  155. /package/dist/{codebuff-RJIDSEU3.js.map → codebuff-VR6JUDIY.js.map} +0 -0
  156. /package/dist/{continue-MNM7YVJY.js.map → continue-WU2IB5KS.js.map} +0 -0
  157. /package/dist/{copilot-cli-SMTX5F65.js.map → copilot-cli-PAP377OM.js.map} +0 -0
  158. /package/dist/{crush-NYDBHIJE.js.map → crush-3AVQA4YU.js.map} +0 -0
  159. /package/dist/{cursor-AOELDNZU.js.map → cursor-GSLUET3V.js.map} +0 -0
  160. /package/dist/{detect-3S46RUMK.js.map → detect-DYQNUMXL.js.map} +0 -0
  161. /package/dist/{devin-PRJY2TTD.js.map → devin-QMEM3OFA.js.map} +0 -0
  162. /package/dist/{droid-PTCH2K7Y.js.map → droid-MOKV53J4.js.map} +0 -0
  163. /package/dist/{gemini-cli-QGLN2UMS.js.map → gemini-cli-47ZHCOZR.js.map} +0 -0
  164. /package/dist/{goose-DQ6GSZ5O.js.map → goose-4EI5MYTI.js.map} +0 -0
  165. /package/dist/{grok-cli-5QD235UB.js.map → grok-cli-QYQPDSVB.js.map} +0 -0
  166. /package/dist/{hermes-E47IG63A.js.map → hermes-F75OSK3Y.js.map} +0 -0
  167. /package/dist/{hook-P6EKDINW.js.map → hook-GIQTUDMN.js.map} +0 -0
  168. /package/dist/{junie-SQ4SDLGK.js.map → junie-DIFN2P22.js.map} +0 -0
  169. /package/dist/{kilo-OU2ZLZKB.js.map → kilo-EMZJBEBB.js.map} +0 -0
  170. /package/dist/{kilo-cli-NMWGYF4F.js.map → kilo-cli-S3GXBPAE.js.map} +0 -0
  171. /package/dist/{kimi-Z7L2LEEI.js.map → kimi-IQJOIY6B.js.map} +0 -0
  172. /package/dist/{kiro-4IN5IH46.js.map → kiro-BYX4HEAJ.js.map} +0 -0
  173. /package/dist/{leaderboard-LF5SP6X2.js.map → leaderboard-CIMQBOUS.js.map} +0 -0
  174. /package/dist/{mimo-code-G2CBZ4M6.js.map → mimo-code-7R53QDHB.js.map} +0 -0
  175. /package/dist/{mistral-vibe-TRQDHAWV.js.map → mistral-vibe-LHJ55FSB.js.map} +0 -0
  176. /package/dist/{mux-JNM3F2NW.js.map → mux-NYCNGL43.js.map} +0 -0
  177. /package/dist/{nemoclaw-SHA4IUML.js.map → nemoclaw-WSIPSE7U.js.map} +0 -0
  178. /package/dist/{omp-OOVUNXME.js.map → omp-562NK5BJ.js.map} +0 -0
  179. /package/dist/{open-interpreter-4PKL56AA.js.map → open-interpreter-I2CNOEXY.js.map} +0 -0
  180. /package/dist/{openclaw-BD56E5MV.js.map → openclaw-7EYBQS4R.js.map} +0 -0
  181. /package/dist/{opencode-W2RK4M7G.js.map → opencode-YS4WX2E2.js.map} +0 -0
  182. /package/dist/{openhands-5LNH3BKB.js.map → openhands-QMYIKNOS.js.map} +0 -0
  183. /package/dist/{package-2EAIYSJ4.js.map → package-LIPZKHAQ.js.map} +0 -0
  184. /package/dist/{pi-BUADR5MJ.js.map → pi-644FIN3A.js.map} +0 -0
  185. /package/dist/{qwen-code-TUJNHKNI.js.map → qwen-code-STDMX7EM.js.map} +0 -0
  186. /package/dist/{roo-code-L5F7S6QH.js.map → roo-code-DLPIHHQ6.js.map} +0 -0
  187. /package/dist/{serve-K62FW3V7.js.map → serve-ABTO2NA2.js.map} +0 -0
  188. /package/dist/{status-E5MCFZM6.js.map → status-J7SOUH7O.js.map} +0 -0
  189. /package/dist/{statusline-LIPF2KVP.js.map → statusline-QF4G724E.js.map} +0 -0
  190. /package/dist/{telemetry-4OC56NTM.js.map → telemetry-EICCFEIF.js.map} +0 -0
  191. /package/dist/{trae-Z7CQ2A2Q.js.map → trae-UOYD6JZZ.js.map} +0 -0
  192. /package/dist/{usage-3PB3WZSL.js.map → usage-VEVBWPLS.js.map} +0 -0
  193. /package/dist/{usage-event-KD5FW6W4.js.map → usage-event-GRQE7XWT.js.map} +0 -0
  194. /package/dist/{warp-4PPG5LOM.js.map → warp-QYJGKURM.js.map} +0 -0
  195. /package/dist/{windsurf-3T3RVXKM.js.map → windsurf-75LLZ37C.js.map} +0 -0
  196. /package/dist/{zed-ZF2OQ75O.js.map → zed-HKAZXEJW.js.map} +0 -0
@@ -2,20 +2,21 @@
2
2
  import {
3
3
  marketplaceDoctorChecks,
4
4
  syncConnector
5
- } from "./chunk-KIRCPLM4.js";
6
- import "./chunk-LF76VPGQ.js";
5
+ } from "./chunk-TTKSYJRY.js";
6
+ import "./chunk-B5W3RHTI.js";
7
7
  import {
8
8
  readMarketplaceInstalls
9
- } from "./chunk-QKLJU4JX.js";
9
+ } from "./chunk-2Y2MZRLP.js";
10
10
  import "./chunk-UM5S7DKK.js";
11
- import "./chunk-NBUEL74R.js";
11
+ import "./chunk-6WZODR3Z.js";
12
12
  import "./chunk-OPXAP3AC.js";
13
13
  import {
14
14
  fail,
15
+ maybePrintBanner,
15
16
  parseScope,
16
17
  parseTargets,
17
18
  print
18
- } from "./chunk-7HUUINPB.js";
19
+ } from "./chunk-OEADFFKO.js";
19
20
  import {
20
21
  LineBuffer,
21
22
  idKey,
@@ -23,40 +24,40 @@ import {
23
24
  } from "./chunk-OP4KBXUO.js";
24
25
  import {
25
26
  spawnChild
26
- } from "./chunk-LN76OGNR.js";
27
+ } from "./chunk-Z2MRSS2I.js";
27
28
  import {
28
29
  detectInstalledPlatforms
29
- } from "./chunk-ZMLVR4J7.js";
30
+ } from "./chunk-ZMAJ2XFD.js";
30
31
  import {
31
32
  explainHooks
32
- } from "./chunk-QARPXSIV.js";
33
- import "./chunk-LAIITCMW.js";
33
+ } from "./chunk-P23RVIUY.js";
34
+ import "./chunk-I5TO42QC.js";
34
35
  import "./chunk-KHO5WNTP.js";
35
- import "./chunk-4FWETID5.js";
36
- import "./chunk-R6LML2YS.js";
36
+ import "./chunk-IVAWP6HH.js";
37
+ import "./chunk-2RIFORQS.js";
37
38
  import {
38
39
  findConnectorConfig,
39
40
  listRegisteredConnectors,
40
41
  loadConnectorFromPath,
41
42
  readRegisteredMeta
42
- } from "./chunk-NWLRJNXM.js";
43
+ } from "./chunk-KSPMSRVU.js";
43
44
  import {
44
45
  MCP_PROTOCOL_VERSION
45
- } from "./chunk-G4CEELKO.js";
46
+ } from "./chunk-KJLFGQQM.js";
46
47
  import {
47
48
  REGISTERED_PLATFORM_IDS,
48
49
  loadAdapter
49
- } from "./chunk-25CPWJA7.js";
50
- import "./chunk-56R2ER7K.js";
50
+ } from "./chunk-SILKSP2Y.js";
51
+ import "./chunk-NBYKLUF6.js";
51
52
  import "./chunk-H53QZQJI.js";
52
53
  import "./chunk-BEFVJ2OE.js";
53
- import "./chunk-VVFDU4IX.js";
54
- import "./chunk-HORHRHNG.js";
55
- import "./chunk-YYNXIUR2.js";
54
+ import "./chunk-MGTDQLJJ.js";
55
+ import "./chunk-4NHXLXSD.js";
56
+ import "./chunk-UMQ6NBQR.js";
56
57
  import {
57
58
  dataRoot,
58
59
  homeBinPath
59
- } from "./chunk-IXOQDZWC.js";
60
+ } from "./chunk-GZGLCCEE.js";
60
61
 
61
62
  // src/cli/commands/doctor.ts
62
63
  import { parseArgs } from "util";
@@ -426,10 +427,13 @@ async function run(argv) {
426
427
  probe: { type: "boolean", default: false },
427
428
  heal: { type: "boolean", default: false },
428
429
  explain: { type: "boolean", default: false },
429
- "dry-run": { type: "boolean", default: false }
430
+ "dry-run": { type: "boolean", default: false },
431
+ // Decorative-banner suppressor (no effect on command output bytes).
432
+ quiet: { type: "boolean", default: false }
430
433
  },
431
434
  allowPositionals: false
432
435
  });
436
+ maybePrintBanner({ json: values.json, quiet: values.quiet });
433
437
  const projectDir = values.project ?? process.cwd();
434
438
  const scope = parseScope(values.scope);
435
439
  if (scope == null) return fail(`invalid --scope "${values.scope}" (use user|project)`);
@@ -623,4 +627,4 @@ async function run(argv) {
623
627
  export {
624
628
  run
625
629
  };
626
- //# sourceMappingURL=doctor-3CUBPQKU.js.map
630
+ //# sourceMappingURL=doctor-H6XXAR63.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/commands/doctor.ts","../src/runtime/probe.ts"],"sourcesContent":["/**\n * cli/commands/doctor — health-check every detected platform.\n *\n * For each detected host (or the explicit --targets list) we load its adapter,\n * build a uniform InstallContext, and run adapter.doctor(ctx). Results are\n * printed as pass/warn/fail with any suggested fix. Exit code is non-zero when\n * any check fails (warns alone do not fail the command).\n *\n * The connector context comes from the local config when present; otherwise a\n * minimal id-only connector is used so path-only checks still run.\n */\n\nimport { parseArgs } from \"node:util\";\n\nimport type {\n DiagnosticResult,\n InstallScope,\n PlatformId,\n ResolvedConnector,\n} from \"../../core/types.js\";\nimport type { InstallContext } from \"../../adapters/spi.js\";\nimport { detectInstalledPlatforms } from \"../../adapters/detect.js\";\nimport { loadAdapter, REGISTERED_PLATFORM_IDS } from \"../../adapters/registry.js\";\nimport {\n findConnectorConfig,\n listRegisteredConnectors,\n loadConnectorFromPath,\n readRegisteredMeta,\n} from \"../../core/load-connector.js\";\nimport { syncConnector } from \"../../core/installer.js\";\nimport { marketplaceDoctorChecks } from \"../../core/marketplace.js\";\nimport { readMarketplaceInstalls } from \"../../core/marketplace-state.js\";\nimport { dataRoot, homeBinPath } from \"../../core/paths.js\";\nimport { probeStdioServer } from \"../../runtime/probe.js\";\nimport { explainHooks } from \"../../sdk/test-harness.js\";\nimport type { HookEventVerdict } from \"../../sdk/test-harness.js\";\nimport { fail, maybePrintBanner, parseScope, parseTargets, print } from \"../app.js\";\n\nconst STATUS_GLYPH: Record<DiagnosticResult[\"status\"], string> = {\n pass: \"[pass]\",\n warn: \"[warn]\",\n fail: \"[FAIL]\",\n};\n\n/** A resolved connector together with the path to its source module. */\ninterface ConnectorEntry {\n connector: ResolvedConnector;\n /** Absolute path to the connector source (JSON or JS/TS). Used by syncConnector. */\n modulePath: string;\n}\n\n/**\n * Resolve which connector(s) doctor should health-check, in precedence order:\n * 1. An explicit --connector path, or a local agent-connector.config.* file.\n * 2. Every connector registered under the data-root (what is actually\n * installed). This is the common case — `doctor` from anywhere reports on\n * the real installs, not a guess from the working directory.\n * 3. A minimal id-only placeholder so path-only checks still run.\n */\nasync function resolveDoctorConnectors(\n connectorPath: string | undefined,\n projectDir: string,\n): Promise<ConnectorEntry[] | { error: string }> {\n // When the user explicitly passed --connector <path>, any load failure is an\n // error they need to see — silently falling through to registered connectors\n // would report on a completely different set of installs with no indication\n // that the requested connector was never loaded.\n if (connectorPath !== undefined) {\n const { connector, modulePath } = await loadConnectorFromPath(connectorPath);\n return [{ connector, modulePath }];\n }\n\n const configPath = findConnectorConfig(projectDir);\n if (configPath) {\n try {\n const { connector, modulePath } = await loadConnectorFromPath(configPath);\n return [{ connector, modulePath }];\n } catch {\n /* fall through — implicit discovery failure is a convenience, not an error */\n }\n }\n\n const registered = listRegisteredConnectors();\n if (registered.length > 0) {\n return registered.map((connector) => {\n const meta = readRegisteredMeta(connector.id);\n return { connector, modulePath: meta?.modulePath ?? \"\" };\n });\n }\n\n const fallback: ResolvedConnector = {\n id: \"agent-connector\",\n displayName: \"agent-connector\",\n version: \"0.0.0\",\n hooks: {},\n hookEvents: [],\n telemetry: {\n enabled: true,\n modelFamilyHint: \"auto\",\n measureToolDefs: true,\n hostNativeUsage: false,\n store: \"ndjson\",\n calibration: { anthropicCountTokens: false },\n },\n commands: [],\n skills: [],\n subagents: [],\n memory: [],\n actions: [],\n platforms: {},\n targets: \"auto\",\n };\n return [{ connector: fallback, modulePath: \"\" }];\n}\n\nfunction buildContext(\n connector: ResolvedConnector,\n id: PlatformId,\n scope: InstallScope,\n projectDir: string,\n): InstallContext {\n return {\n connector,\n scope: connector.platforms[id]?.scope ?? scope,\n projectDir,\n homeBinPath: homeBinPath(),\n dataRoot: dataRoot(),\n dryRun: true,\n };\n}\n\n/** Collected diagnostics tagged with the connector entry they came from. */\ninterface TaggedResult {\n result: DiagnosticResult;\n /** Index into the entries array — used to group by connector for heal. */\n entryIndex: number;\n}\n\n/**\n * Run all diagnostic checks for the given entries/ids and return tagged results\n * plus the flat byPlatform buckets for display.\n */\nasync function collectDiagnostics(\n entries: ConnectorEntry[],\n ids: PlatformId[],\n scope: InstallScope,\n projectDir: string,\n): Promise<{\n byPlatform: { platform: PlatformId; results: DiagnosticResult[] }[];\n tagged: TaggedResult[];\n anyFail: boolean;\n}> {\n const multi = entries.length > 1;\n const byPlatform: { platform: PlatformId; results: DiagnosticResult[] }[] = [];\n const tagged: TaggedResult[] = [];\n let anyFail = false;\n\n for (const id of ids) {\n const adapter = await loadAdapter(id);\n if (!adapter) {\n const r: DiagnosticResult = {\n check: `${id}: adapter`,\n status: \"fail\",\n message: `no adapter registered for ${id}`,\n };\n byPlatform.push({ platform: id, results: [r] });\n anyFail = true;\n continue;\n }\n const results: DiagnosticResult[] = [];\n for (let i = 0; i < entries.length; i++) {\n const { connector } = entries[i]!;\n // A connector with an explicit target list is only checked on those hosts.\n if (connector.targets !== \"auto\" && !connector.targets.includes(id)) continue;\n\n // MARKETPLACE-installed on this host: its surfaces are delivered via the\n // host's plugin (in the plugin cache), NOT the direct-config locations the\n // adapter's doctor() inspects — so the direct checks would falsely FAIL\n // (mcp_servers/command/skill \"not found\"). Skip them; the marketplace-method\n // checks below cover this install's real health.\n if (readMarketplaceInstalls(connector.id)[id]) {\n const note: DiagnosticResult = {\n check: `${connector.id}: ${id} delivery`,\n status: \"pass\",\n message: \"surfaces delivered via the marketplace plugin — see marketplace checks\",\n };\n const tagged_note = multi ? { ...note, check: `(${connector.id}) ${note.check}` } : note;\n results.push(tagged_note);\n tagged.push({ result: tagged_note, entryIndex: i });\n continue;\n }\n\n const ctx = buildContext(connector, id, scope, projectDir);\n let r: DiagnosticResult[];\n try {\n r = adapter.doctor(ctx);\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n r = [{ check: `${adapter.name}: doctor`, status: \"fail\", message }];\n }\n // When checking multiple connectors, tag each check with the connector id.\n const tagged_r = multi ? r.map((d) => ({ ...d, check: `(${connector.id}) ${d.check}` })) : r;\n results.push(...tagged_r);\n for (const tr of tagged_r) tagged.push({ result: tr, entryIndex: i });\n }\n if (results.some((d) => d.status === \"fail\")) anyFail = true;\n byPlatform.push({ platform: id, results });\n }\n\n // ── Marketplace-method checks ─────────────────────────────────────────────\n for (let i = 0; i < entries.length; i++) {\n const { connector } = entries[i]!;\n const groups = await marketplaceDoctorChecks(connector, scope, projectDir);\n for (const group of groups) {\n const tagged_g = multi\n ? group.results.map((d) => ({ ...d, check: `(${connector.id}) ${d.check}` }))\n : group.results;\n if (tagged_g.some((d) => d.status === \"fail\")) anyFail = true;\n for (const tg of tagged_g) tagged.push({ result: tg, entryIndex: i });\n const bucket = byPlatform.find((b) => b.platform === group.platform);\n if (bucket) bucket.results.push(...tagged_g);\n else byPlatform.push({ platform: group.platform, results: tagged_g });\n }\n }\n\n return { byPlatform, tagged, anyFail };\n}\n\nconst VERDICT_GLYPH: Record<HookEventVerdict[\"verdict\"], string> = {\n honored: \"[honored]\",\n degraded: \"[degraded]\",\n dropped: \"[dropped]\",\n};\n\n/**\n * Resolve which hosts `--explain` reports a connector against: an explicit\n * --targets list (intersected with the registry), else the connector's declared\n * targets, else (targets:\"auto\") every registered host. Detection-independent —\n * the per-event honor verdict is a static/offline property a dev wants BEFORE\n * installing, not gated on what happens to be installed.\n */\nfunction explainHostsFor(\n connector: ResolvedConnector,\n explicit: PlatformId[] | undefined,\n): PlatformId[] {\n if (explicit && explicit.length > 0) {\n return explicit.filter((id) => REGISTERED_PLATFORM_IDS.has(id));\n }\n if (connector.targets !== \"auto\") {\n return (connector.targets as PlatformId[]).filter((id) =>\n REGISTERED_PLATFORM_IDS.has(id),\n );\n }\n return [...REGISTERED_PLATFORM_IDS].sort();\n}\n\n/**\n * The exit rule for a single connector's per-event matrix. The principle: a\n * non-zero exit means \"something is wrong with YOUR connector\", NOT \"some host\n * cannot do hooks as designed\". So:\n * • `dropped` (mcp-only host / no native equivalent) is EXPECTED and NEVER\n * fails — it mirrors install's `skip` (= exit 0) for the very same\n * no-equivalent case the never-silent-skip work ships;\n * • `degraded` (the host FIRES the event but silently won't honor the reply,\n * e.g. a deny that fails open) is genuine silent misbehavior — but only a\n * finding worth FAILING on when the dev EXPLICITLY targeted that host\n * (`--targets`, or the connector's own `targets:[...]`). Under `targets:\"auto\"`\n * the matrix spans the whole fleet, where such gaps are expected, so it stays\n * informational (exit 0) — matching plain-doctor's scope-aware non-failure.\n */\nfunction explainConnectorFails(\n rows: HookEventVerdict[],\n scoped: boolean,\n): boolean {\n if (!scoped) return false;\n return rows.some((row) => row.verdict === \"degraded\");\n}\n\n/**\n * The `doctor --explain` body: for each resolved connector, the per-(host,\n * event) honor matrix from {@link explainHooks} (honored / degraded / dropped\n * with the simulate()-grade reason). ALL rows are always printed (visibility is\n * never gated on the exit rule). The exit code follows {@link explainConnectorFails}:\n * only a `degraded` cell on an EXPLICITLY-targeted host fails the command — a\n * `dropped` cell (a host that architecturally cannot fire hooks) never does.\n */\nasync function runExplain(\n entries: ConnectorEntry[],\n explicit: PlatformId[] | undefined,\n json: boolean,\n): Promise<number> {\n const report: {\n connector: string;\n rows: HookEventVerdict[];\n scoped: boolean;\n }[] = [];\n for (const { connector } of entries) {\n // \"scoped\" = the dev narrowed the host set deliberately (an explicit\n // --targets list, or the connector's own targets:[...]). Under targets:\"auto\"\n // the matrix is fleet-wide and degraded cells stay informational.\n const scoped =\n (explicit != null && explicit.length > 0) || connector.targets !== \"auto\";\n if (connector.hookEvents.length === 0) {\n report.push({ connector: connector.id, rows: [], scoped });\n continue;\n }\n const hosts = explainHostsFor(connector, explicit);\n const rows = await explainHooks(connector, hosts);\n report.push({ connector: connector.id, rows, scoped });\n }\n\n const anyFail = report.some((r) => explainConnectorFails(r.rows, r.scoped));\n\n if (json) {\n print(JSON.stringify(report.map(({ connector, rows }) => ({ connector, rows })), null, 2));\n return anyFail ? 1 : 0;\n }\n\n for (const { connector, rows } of report) {\n print(`${connector} — per-event hook honor:`);\n if (rows.length === 0) {\n print(\" (connector declares no hooks)\");\n print(\"\");\n continue;\n }\n for (const row of rows) {\n print(` ${VERDICT_GLYPH[row.verdict]} ${row.host} / ${row.event} — ${row.reason}`);\n }\n print(\"\");\n }\n // Footer states the verdict AND the exit rule, so a `dropped`-only run that\n // exits 0 (the common default-targets case) is not surprising.\n if (anyFail) {\n print(\n \"doctor --explain: a declared hook event is DEGRADED on an explicitly-targeted host (the host fires it but silently won't honor the reply).\",\n );\n } else if (report.some((r) => r.rows.some((row) => row.verdict !== \"honored\"))) {\n print(\n \"doctor --explain: some hosts drop or degrade declared events (expected for mcp-only / fleet-wide gaps) — informational, exit 0.\",\n );\n } else {\n print(\"doctor --explain: every declared hook event is honored on its target hosts.\");\n }\n return anyFail ? 1 : 0;\n}\n\nexport async function run(argv: string[]): Promise<number> {\n const { values } = parseArgs({\n args: argv,\n options: {\n scope: { type: \"string\", default: \"user\" },\n targets: { type: \"string\" },\n connector: { type: \"string\" },\n project: { type: \"string\" },\n json: { type: \"boolean\", default: false },\n probe: { type: \"boolean\", default: false },\n heal: { type: \"boolean\", default: false },\n explain: { type: \"boolean\", default: false },\n \"dry-run\": { type: \"boolean\", default: false },\n // Decorative-banner suppressor (no effect on command output bytes).\n quiet: { type: \"boolean\", default: false },\n },\n allowPositionals: false,\n });\n\n // Decorative header — suppressed under --json (machine output) and --quiet,\n // and whenever stdout is not a TTY (so piped/redirected doctor stays clean).\n maybePrintBanner({ json: values.json, quiet: values.quiet });\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 resolved = await resolveDoctorConnectors(values.connector, projectDir).catch(\n (err: unknown) => ({\n error: `cannot load connector \"${values.connector}\": ${err instanceof Error ? err.message : String(err)}`,\n }),\n );\n if (\"error\" in resolved) return fail(resolved.error);\n const entries = resolved;\n const connectors = entries.map((e) => e.connector);\n\n // ── Per-event explain path (--explain) ───────────────────────────────────\n // Additive, OFFLINE detail layer: the trustworthy per-(host, event) honor\n // matrix (honored / degraded / dropped) the coarse \"any hook present = OK\"\n // doctor cannot give. Resolves hosts from the connector's OWN targets (or\n // --targets), NOT from detection — a dev wants this BEFORE installing.\n if (values.explain) {\n return runExplain(entries, parseTargets(values.targets), values.json ?? false);\n }\n\n // Target set: explicit --targets (intersected with the registry), else the\n // same chain install uses — connector-declared targets ∩ detected platforms\n // (\"auto\" = everything detected). Without this, doctor red-flags every\n // detected host the connector never targeted (found dogfooding context-mode:\n // targets:[5 ids] installed clean, doctor FAILed the other 9 detected hosts).\n const explicit = parseTargets(values.targets);\n let ids: PlatformId[];\n if (explicit && explicit.length > 0) {\n ids = explicit.filter((id) => REGISTERED_PLATFORM_IDS.has(id));\n } else {\n const detected = await detectInstalledPlatforms(projectDir);\n ids = detected.map((p) => p.id);\n const anyAuto = connectors.some((c) => c.targets === \"auto\");\n if (!anyAuto) {\n const targeted = new Set(connectors.flatMap((c) => c.targets as PlatformId[]));\n ids = ids.filter((id) => targeted.has(id));\n }\n }\n\n if (ids.length === 0 && !values.probe) {\n print(\"doctor: no target platforms (none detected; pass --targets to force).\");\n return 0;\n }\n\n // ── Heal path ─────────────────────────────────────────────────────────────\n if (values.heal) {\n const { tagged, anyFail: preFail } = await collectDiagnostics(\n entries,\n ids,\n scope,\n projectDir,\n );\n\n // Partition: fixable vs deferred (non-pass, not fixable)\n const fixableByEntry = new Map<number, DiagnosticResult[]>();\n const deferredByEntry = new Map<number, DiagnosticResult[]>();\n for (const { result, entryIndex } of tagged) {\n if (result.status === \"pass\") continue;\n // A finding is only HEALABLE if it is fixable AND its connector has a\n // module path we can re-sync from. A placeholder/unregistered connector\n // (empty modulePath) must NEVER be synced — doing so would fabricate a\n // bogus registry record via registerConnector(connector, \"\"). Route its\n // fixable findings to deferred instead.\n const canSync = !!entries[entryIndex]!.modulePath;\n if (result.fixable && canSync) {\n if (!fixableByEntry.has(entryIndex)) fixableByEntry.set(entryIndex, []);\n fixableByEntry.get(entryIndex)!.push(result);\n } else {\n if (!deferredByEntry.has(entryIndex)) deferredByEntry.set(entryIndex, []);\n deferredByEntry.get(entryIndex)!.push(result);\n }\n }\n\n if (values[\"dry-run\"]) {\n // Dry-run: print what would happen, write nothing.\n for (const [idx, fixable] of fixableByEntry) {\n const { connector } = entries[idx]!;\n print(\n `would heal via sync (${connector.id}): ${fixable.map((r) => r.check).join(\", \")}`,\n );\n }\n for (const [idx, deferred] of deferredByEntry) {\n const { connector } = entries[idx]!;\n for (const r of deferred) {\n print(\n `would defer (${connector.id}): ${r.check} — ${r.fix ?? \"no auto-fix available\"}`,\n );\n }\n }\n if (fixableByEntry.size === 0 && deferredByEntry.size === 0) {\n print(\"doctor --heal --dry-run: nothing to heal.\");\n }\n return 0;\n }\n\n // Real heal: sync each connector that has fixable findings.\n for (const [idx] of fixableByEntry) {\n const { connector, modulePath } = entries[idx]!;\n await syncConnector({\n connector,\n modulePath,\n scope,\n projectDir,\n targets: ids,\n dryRun: false,\n });\n }\n\n // Re-run diagnostics to compute what changed.\n const { tagged: postTagged, anyFail: postFail } = await collectDiagnostics(\n entries,\n ids,\n scope,\n projectDir,\n );\n\n // Classify post-heal results.\n const preNonPass = new Set(\n tagged\n .filter((t) => t.result.status !== \"pass\")\n .map((t) => t.result.check),\n );\n const postNonPass = new Set(\n postTagged\n .filter((t) => t.result.status !== \"pass\")\n .map((t) => t.result.check),\n );\n\n const healed: string[] = [];\n const stillFailing: DiagnosticResult[] = [];\n const deferred: DiagnosticResult[] = [];\n\n // Healed = was non-pass before, now pass\n for (const check of preNonPass) {\n if (!postNonPass.has(check)) healed.push(check);\n }\n // Post-heal non-pass findings. Classify consistently with the pre-heal\n // partition: a fixable finding we could not sync (no modulePath) is deferred,\n // not \"still failing after sync\" — we never attempted a sync for it.\n for (const { result, entryIndex } of postTagged) {\n if (result.status === \"pass\") continue;\n const canSync = !!entries[entryIndex]!.modulePath;\n if (result.fixable && canSync) {\n stillFailing.push(result);\n } else {\n deferred.push(result);\n }\n }\n\n if (values.json) {\n print(JSON.stringify({ healed, deferred, stillFailing }, null, 2));\n return postFail ? 1 : 0;\n }\n\n if (healed.length > 0) {\n print(`healed (${healed.length}):`);\n for (const c of healed) print(` [pass] ${c}`);\n print(\"\");\n }\n if (stillFailing.length > 0) {\n print(`still failing after sync (${stillFailing.length}):`);\n for (const r of stillFailing) {\n print(` ${STATUS_GLYPH[r.status]} ${r.check} — ${r.message}`);\n if (r.fix) print(` fix: ${r.fix}`);\n }\n print(\"\");\n }\n if (deferred.length > 0) {\n print(`deferred — requires manual action (${deferred.length}):`);\n for (const r of deferred) {\n print(` ${STATUS_GLYPH[r.status]} ${r.check} — ${r.message}`);\n if (r.fix) print(` fix: ${r.fix}`);\n }\n print(\"\");\n }\n if (healed.length === 0 && stillFailing.length === 0 && deferred.length === 0 && !preFail) {\n print(\"doctor --heal: nothing to heal, all checks passed.\");\n } else if (stillFailing.length === 0 && deferred.length === 0) {\n print(\"doctor --heal: all fixable findings resolved.\");\n }\n return postFail ? 1 : 0;\n }\n\n // ── Normal diagnose path (no --heal) ─────────────────────────────────────\n const { byPlatform, anyFail } = await collectDiagnostics(entries, ids, scope, projectDir);\n\n // ── Live MCP probe (--probe): connector-scoped, not platform-scoped ──────\n // Spawns each connector's REAL stdio server and runs initialize → ping →\n // tools/list. Probe FAILs fold into the doctor exit code.\n const probes: { connector: string; results: DiagnosticResult[] }[] = [];\n if (values.probe) {\n for (const { connector } of entries) {\n const s = connector.server;\n if (!s || s.transport !== \"stdio\" || !s.command) {\n probes.push({\n connector: connector.id,\n results: [\n {\n check: `${connector.id}: MCP probe`,\n status: \"warn\",\n message: s\n ? `transport \"${s.transport}\" is not stdio — live probe skipped`\n : \"no server to probe\",\n },\n ],\n });\n continue;\n }\n const results = await probeStdioServer(s.command, s.args ?? [], {\n label: connector.id,\n ...(s.env ? { env: s.env } : {}),\n });\n probes.push({ connector: connector.id, results });\n }\n }\n\n const probesFail = probes.some((p) => p.results.some((r) => r.status === \"fail\"));\n\n if (values.json) {\n print(JSON.stringify(values.probe ? { platforms: byPlatform, probes } : byPlatform, null, 2));\n return anyFail || probesFail ? 1 : 0;\n }\n\n for (const { platform, results } of byPlatform) {\n print(`${platform}:`);\n for (const r of results) {\n print(` ${STATUS_GLYPH[r.status]} ${r.check} — ${r.message}`);\n if (r.fix) print(` fix: ${r.fix}`);\n }\n print(\"\");\n }\n for (const { connector, results } of probes) {\n print(`probe ${connector}:`);\n for (const r of results) {\n print(` ${STATUS_GLYPH[r.status]} ${r.check} — ${r.message}`);\n if (r.fix) print(` fix: ${r.fix}`);\n }\n print(\"\");\n }\n print(anyFail || probesFail ? \"doctor: one or more checks FAILED.\" : \"doctor: all checks passed.\");\n return anyFail || probesFail ? 1 : 0;\n}\n","/**\n * runtime/probe — a live MCP connection-lifecycle probe for `doctor --probe`.\n *\n * Where `doctor` checks files on disk, this spawns the connector's REAL stdio\n * server and speaks the MCP wire protocol to it: initialize → (read negotiated\n * protocolVersion + capabilities + serverInfo) → notifications/initialized →\n * ping (liveness) → tools/list (gated on the tools capability). It reuses the\n * SAME newline-delimited JSON-RPC framing + id-correlation as the telemetry\n * proxy (telemetry/jsonrpc), so the probe and the serve path read the wire\n * identically. Each step becomes a DiagnosticResult so doctor renders/aggregates\n * it uniformly; a dead/unlaunchable server FAILs (non-zero doctor exit).\n *\n * Negotiation rule: we OFFER {@link MCP_PROTOCOL_VERSION} but ACCEPT whatever\n * version the server returns (we only report it), per the spec — never a\n * hardcoded equality. There is no MCP shutdown message; we close stdin then\n * SIGTERM/SIGKILL.\n */\n\nimport type { DiagnosticResult } from \"../core/types.js\";\nimport { MCP_PROTOCOL_VERSION } from \"../core/mcp-standard.js\";\nimport { spawnChild } from \"../core/spawn-child.js\";\nimport { type JsonRpcMessage, LineBuffer, idKey, isObject } from \"../telemetry/jsonrpc.js\";\n\nconst DEFAULT_TIMEOUT_MS = 5000;\n\nexport interface ProbeOptions {\n /** Per-step timeout in ms (default 5000). */\n timeoutMs?: number;\n /** Prefix for each DiagnosticResult.check (e.g. the connector id). */\n label?: string;\n /** Env merged over process.env for the spawned server (${env:VAR} resolved). */\n env?: Record<string, string>;\n /** Protocol version offered in initialize. Default {@link MCP_PROTOCOL_VERSION}. */\n protocolVersion?: string;\n}\n\nfunction diag(\n status: DiagnosticResult[\"status\"],\n check: string,\n message: string,\n fix?: string,\n): DiagnosticResult {\n return { check, status, message, ...(fix ? { fix } : {}) };\n}\n\nfunction errMsg(e: unknown): string {\n return e instanceof Error ? e.message : String(e);\n}\n\n/** Resolve `${env:VAR}` references in env values against the current process env. */\nfunction resolveEnv(env: Record<string, string> | undefined): Record<string, string> {\n const out: Record<string, string> = {};\n for (const [k, v] of Object.entries(env ?? {})) {\n out[k] = v.replace(/\\$\\{env:([A-Za-z_][A-Za-z0-9_]*)\\}/g, (_m, name) => process.env[name] ?? \"\");\n }\n return out;\n}\n\n/**\n * Spawn the stdio MCP server `command args` and run a real lifecycle probe.\n * Always resolves (never rejects) with one DiagnosticResult per step.\n */\nexport async function probeStdioServer(\n command: string,\n args: string[],\n opts: ProbeOptions = {},\n): Promise<DiagnosticResult[]> {\n const label = opts.label ? `${opts.label}: ` : \"\";\n const timeoutMs = opts.timeoutMs ?? DEFAULT_TIMEOUT_MS;\n const protocolVersion = opts.protocolVersion ?? MCP_PROTOCOL_VERSION;\n const results: DiagnosticResult[] = [];\n\n // spawnChild resolves a bare Windows package runner (npx/uvx → .cmd/.exe) so\n // the probe agrees with the live serve path; no-op on macOS/Linux.\n const child = spawnChild(command, args, {\n stdio: [\"pipe\", \"pipe\", \"inherit\"],\n env: { ...process.env, ...resolveEnv(opts.env) },\n });\n\n interface Pending {\n resolve: (m: JsonRpcMessage) => void;\n reject: (e: Error) => void;\n }\n const pending = new Map<string, Pending>();\n let spawnErr: Error | null = null;\n let exitCode: number | null = null;\n\n const rejectAll = (e: Error): void => {\n for (const p of pending.values()) p.reject(e);\n pending.clear();\n };\n child.on(\"error\", (e) => {\n spawnErr = e;\n rejectAll(e);\n });\n child.on(\"exit\", (code) => {\n exitCode = code ?? 0;\n rejectAll(new Error(`server exited (code ${exitCode}) before responding`));\n });\n\n const lines = new LineBuffer((line) => {\n let parsed: unknown;\n try {\n parsed = JSON.parse(line);\n } catch {\n return; // non-JSON stdout noise — ignore\n }\n if (!isObject(parsed)) return;\n const k = idKey((parsed as JsonRpcMessage).id);\n if (k && pending.has(k)) {\n const p = pending.get(k)!;\n pending.delete(k);\n p.resolve(parsed as JsonRpcMessage);\n }\n });\n child.stdout?.on(\"data\", (c: Buffer) => lines.push(c));\n\n const send = (m: JsonRpcMessage): void => {\n if (child.stdin && child.stdin.writable) child.stdin.write(`${JSON.stringify(m)}\\n`);\n };\n const request = (id: number | string, method: string, params?: unknown): Promise<JsonRpcMessage> => {\n const key = idKey(id)!;\n return new Promise<JsonRpcMessage>((resolve, reject) => {\n const timer = setTimeout(() => {\n pending.delete(key);\n reject(new Error(`no response within ${timeoutMs}ms`));\n }, timeoutMs);\n if (typeof timer.unref === \"function\") timer.unref();\n pending.set(key, {\n resolve: (m) => {\n clearTimeout(timer);\n resolve(m);\n },\n reject: (e) => {\n clearTimeout(timer);\n reject(e);\n },\n });\n send({ jsonrpc: \"2.0\", id, method, ...(params !== undefined ? { params } : {}) });\n });\n };\n\n const cleanup = (): DiagnosticResult[] => {\n try {\n if (child.stdin && child.stdin.writable) child.stdin.end();\n } catch {\n /* ignore */\n }\n try {\n child.kill(\"SIGTERM\");\n } catch {\n /* ignore */\n }\n const killTimer = setTimeout(() => {\n try {\n child.kill(\"SIGKILL\");\n } catch {\n /* ignore */\n }\n }, 500);\n if (typeof killTimer.unref === \"function\") killTimer.unref();\n return results;\n };\n\n // 1. initialize\n let initResult: Record<string, unknown>;\n try {\n const res = await request(1, \"initialize\", {\n protocolVersion,\n capabilities: {},\n clientInfo: { name: \"agent-connector-probe\", version: \"1\" },\n });\n if (isObject(res.error)) {\n results.push(\n diag(\"fail\", `${label}MCP initialize`, `server returned error: ${JSON.stringify(res.error)}`),\n );\n return cleanup();\n }\n initResult = isObject(res.result) ? res.result : {};\n } catch (e) {\n if (spawnErr) {\n results.push(\n diag(\n \"fail\",\n `${label}MCP initialize`,\n `server not launchable: ${errMsg(spawnErr)}`,\n `check that \"${command}\" is installed and on PATH`,\n ),\n );\n } else if (exitCode !== null) {\n // On Windows an unresolvable command surfaces as an early non-zero exit\n // (cmd.exe \"command not found\") rather than a spawn 'error' event, so fold\n // the not-launchable hint in here too — useful whether the command is\n // missing or the server genuinely crashed before initialize.\n results.push(\n diag(\n \"fail\",\n `${label}MCP initialize`,\n `server not launchable, or it exited (code ${exitCode}) before initialize`,\n `check that \"${command}\" is installed and on PATH`,\n ),\n );\n } else {\n results.push(diag(\"fail\", `${label}MCP initialize`, errMsg(e)));\n }\n return cleanup();\n }\n\n const serverInfo = isObject(initResult.serverInfo) ? initResult.serverInfo : {};\n const sName = typeof serverInfo.name === \"string\" ? serverInfo.name : \"unknown\";\n const sVer = typeof serverInfo.version === \"string\" ? serverInfo.version : \"?\";\n const negotiated =\n typeof initResult.protocolVersion === \"string\" ? initResult.protocolVersion : \"(none)\";\n results.push(diag(\"pass\", `${label}MCP initialize`, `serverInfo ${sName}@${sVer}, protocol ${negotiated}`));\n\n // capabilities (presence = feature offered)\n const caps = isObject(initResult.capabilities) ? initResult.capabilities : {};\n const capNames = [\"tools\", \"resources\", \"prompts\", \"logging\", \"completions\"].filter((c) => c in caps);\n results.push(\n diag(\"pass\", `${label}capabilities`, capNames.length > 0 ? capNames.join(\", \") : \"(none advertised)\"),\n );\n\n // 2. initialized notification (required before normal requests)\n send({ jsonrpc: \"2.0\", method: \"notifications/initialized\" });\n\n // 3. ping — liveness confirm (warn, not fail, on timeout)\n try {\n await request(\"probe-ping\", \"ping\");\n results.push(diag(\"pass\", `${label}ping`, \"alive\"));\n } catch (e) {\n results.push(diag(\"warn\", `${label}ping`, `no ping response (${errMsg(e)})`));\n }\n\n // 4. tools/list — only if the server advertised a tools capability\n if (\"tools\" in caps) {\n try {\n const res = await request(2, \"tools/list\", {});\n const r = isObject(res.result) ? res.result : {};\n const tools = Array.isArray(r.tools) ? r.tools : [];\n results.push(diag(\"pass\", `${label}tools/list`, `${tools.length} tool(s)`));\n } catch (e) {\n results.push(diag(\"fail\", `${label}tools/list`, `no tools/list response (${errMsg(e)})`));\n }\n } else {\n results.push(\n diag(\"warn\", `${label}tools/list`, \"skipped — server advertised no tools capability\"),\n );\n }\n\n return cleanup();\n}\n"],"mappings":"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","names":["deferred"]}
@@ -8,13 +8,13 @@ import {
8
8
  import {
9
9
  BaseAdapter,
10
10
  renderCommandMd
11
- } from "./chunk-VVFDU4IX.js";
11
+ } from "./chunk-MGTDQLJJ.js";
12
12
  import {
13
13
  buildWrappedStdio,
14
14
  isHomeBinHookCommand
15
- } from "./chunk-HORHRHNG.js";
16
- import "./chunk-YYNXIUR2.js";
17
- import "./chunk-IXOQDZWC.js";
15
+ } from "./chunk-4NHXLXSD.js";
16
+ import "./chunk-UMQ6NBQR.js";
17
+ import "./chunk-GZGLCCEE.js";
18
18
 
19
19
  // src/adapters/droid/index.ts
20
20
  import { existsSync } from "fs";
@@ -649,4 +649,4 @@ export {
649
649
  adapter,
650
650
  droid_default as default
651
651
  };
652
- //# sourceMappingURL=droid-PTCH2K7Y.js.map
652
+ //# sourceMappingURL=droid-MOKV53J4.js.map
@@ -12,7 +12,7 @@ import {
12
12
  BaseAdapter,
13
13
  renderSkillMd,
14
14
  renderSubagentMd
15
- } from "./chunk-VVFDU4IX.js";
15
+ } from "./chunk-MGTDQLJJ.js";
16
16
  import {
17
17
  buildHomeBinHookCommand,
18
18
  buildUsageEventCommand,
@@ -20,9 +20,9 @@ import {
20
20
  isHomeBinHookCommand,
21
21
  isHostNativeUsageEnabled,
22
22
  isUsageEventCommand
23
- } from "./chunk-HORHRHNG.js";
24
- import "./chunk-YYNXIUR2.js";
25
- import "./chunk-IXOQDZWC.js";
23
+ } from "./chunk-4NHXLXSD.js";
24
+ import "./chunk-UMQ6NBQR.js";
25
+ import "./chunk-GZGLCCEE.js";
26
26
 
27
27
  // src/adapters/gemini-cli/index.ts
28
28
  import { existsSync } from "fs";
@@ -770,4 +770,4 @@ export {
770
770
  adapter,
771
771
  gemini_cli_default as default
772
772
  };
773
- //# sourceMappingURL=gemini-cli-QGLN2UMS.js.map
773
+ //# sourceMappingURL=gemini-cli-47ZHCOZR.js.map
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  readYaml,
4
4
  yamlObjectMapCodec
5
- } from "./chunk-4NSU3KWX.js";
5
+ } from "./chunk-FJCUKXGX.js";
6
6
  import {
7
7
  roamingAppData
8
8
  } from "./chunk-UM5S7DKK.js";
@@ -17,13 +17,13 @@ import {
17
17
  removeFromObjectMap,
18
18
  renderSkillMd,
19
19
  upsertInObjectMap
20
- } from "./chunk-VVFDU4IX.js";
20
+ } from "./chunk-MGTDQLJJ.js";
21
21
  import {
22
22
  buildWrappedStdio,
23
23
  isHomeBinHookCommand
24
- } from "./chunk-HORHRHNG.js";
25
- import "./chunk-YYNXIUR2.js";
26
- import "./chunk-IXOQDZWC.js";
24
+ } from "./chunk-4NHXLXSD.js";
25
+ import "./chunk-UMQ6NBQR.js";
26
+ import "./chunk-GZGLCCEE.js";
27
27
 
28
28
  // src/adapters/goose/index.ts
29
29
  import { existsSync } from "fs";
@@ -603,4 +603,4 @@ export {
603
603
  adapter,
604
604
  goose_default as default
605
605
  };
606
- //# sourceMappingURL=goose-DQ6GSZ5O.js.map
606
+ //# sourceMappingURL=goose-4EI5MYTI.js.map
@@ -7,13 +7,13 @@ import {
7
7
  } from "./chunk-BEFVJ2OE.js";
8
8
  import {
9
9
  BaseAdapter
10
- } from "./chunk-VVFDU4IX.js";
10
+ } from "./chunk-MGTDQLJJ.js";
11
11
  import {
12
12
  buildWrappedStdio,
13
13
  isHomeBinHookCommand
14
- } from "./chunk-HORHRHNG.js";
15
- import "./chunk-YYNXIUR2.js";
16
- import "./chunk-IXOQDZWC.js";
14
+ } from "./chunk-4NHXLXSD.js";
15
+ import "./chunk-UMQ6NBQR.js";
16
+ import "./chunk-GZGLCCEE.js";
17
17
 
18
18
  // src/adapters/grok-cli/index.ts
19
19
  import { existsSync } from "fs";
@@ -479,4 +479,4 @@ export {
479
479
  adapter,
480
480
  grok_cli_default as default
481
481
  };
482
- //# sourceMappingURL=grok-cli-5QD235UB.js.map
482
+ //# sourceMappingURL=grok-cli-QYQPDSVB.js.map
@@ -3,7 +3,7 @@ import {
3
3
  readYaml,
4
4
  writeYaml,
5
5
  yamlObjectMapCodec
6
- } from "./chunk-4NSU3KWX.js";
6
+ } from "./chunk-FJCUKXGX.js";
7
7
  import {
8
8
  resolveEnvRefsDeep
9
9
  } from "./chunk-BEFVJ2OE.js";
@@ -12,15 +12,15 @@ import {
12
12
  removeFromObjectMap,
13
13
  renderSkillMd,
14
14
  upsertInObjectMap
15
- } from "./chunk-VVFDU4IX.js";
15
+ } from "./chunk-MGTDQLJJ.js";
16
16
  import {
17
17
  buildHomeBinHookCommand,
18
18
  buildWrappedStdio,
19
19
  isHomeBinActionCommand,
20
20
  isHomeBinHookCommand
21
- } from "./chunk-HORHRHNG.js";
22
- import "./chunk-YYNXIUR2.js";
23
- import "./chunk-IXOQDZWC.js";
21
+ } from "./chunk-4NHXLXSD.js";
22
+ import "./chunk-UMQ6NBQR.js";
23
+ import "./chunk-GZGLCCEE.js";
24
24
 
25
25
  // src/adapters/hermes/index.ts
26
26
  import { existsSync, statSync } from "fs";
@@ -836,4 +836,4 @@ export {
836
836
  adapter,
837
837
  hermes_default as default
838
838
  };
839
- //# sourceMappingURL=hermes-E47IG63A.js.map
839
+ //# sourceMappingURL=hermes-F75OSK3Y.js.map
@@ -1,25 +1,25 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  fail
4
- } from "./chunk-7HUUINPB.js";
5
- import "./chunk-BLTVZACS.js";
4
+ } from "./chunk-OEADFFKO.js";
5
+ import "./chunk-EHP7WISI.js";
6
6
  import "./chunk-OP4KBXUO.js";
7
- import "./chunk-LN76OGNR.js";
8
- import "./chunk-ZMLVR4J7.js";
7
+ import "./chunk-Z2MRSS2I.js";
8
+ import "./chunk-ZMAJ2XFD.js";
9
9
  import {
10
10
  isNativeHookDeclared,
11
11
  runHook,
12
12
  runNativeHook
13
- } from "./chunk-LAIITCMW.js";
13
+ } from "./chunk-I5TO42QC.js";
14
14
  import "./chunk-KHO5WNTP.js";
15
- import "./chunk-4FWETID5.js";
16
- import "./chunk-NWLRJNXM.js";
17
- import "./chunk-G4CEELKO.js";
18
- import "./chunk-25CPWJA7.js";
19
- import "./chunk-56R2ER7K.js";
20
- import "./chunk-HORHRHNG.js";
21
- import "./chunk-YYNXIUR2.js";
22
- import "./chunk-IXOQDZWC.js";
15
+ import "./chunk-IVAWP6HH.js";
16
+ import "./chunk-KSPMSRVU.js";
17
+ import "./chunk-KJLFGQQM.js";
18
+ import "./chunk-SILKSP2Y.js";
19
+ import "./chunk-NBYKLUF6.js";
20
+ import "./chunk-4NHXLXSD.js";
21
+ import "./chunk-UMQ6NBQR.js";
22
+ import "./chunk-GZGLCCEE.js";
23
23
 
24
24
  // src/cli/commands/hook.ts
25
25
  import { parseArgs } from "util";
@@ -93,4 +93,4 @@ export {
93
93
  HOOK_EVENTS,
94
94
  run
95
95
  };
96
- //# sourceMappingURL=hook-P6EKDINW.js.map
96
+ //# sourceMappingURL=hook-GIQTUDMN.js.map
package/dist/index.d.ts CHANGED
@@ -1,90 +1,17 @@
1
- import { A as ActionDef, C as CommandDef, c as ConfigPatchDef, d as ConnectorConfig, R as ResolvedConnector, e as HookEventName, H as HookDefinition, M as MemoryDef, N as NativeHookDef, w as SkillDef, y as StatuslineDef, B as SubagentDef } from './types-C4qMgbJn.js';
2
- export { a as ActionResult, b as AuthSpec, V as ChangeRecord, W as DetectedPlatform, X as DiagnosticResult, E as EventPayloadMap, f as HookParadigm, g as HookResponse, h as HooksConfig, i as HostCtx, Y as InstallResult, I as InstallScope, j as NativeHookEvent, k as NotificationEvent, l as PermissionRequestEvent, m as PlatformCapabilities, P as PlatformId, n as PlatformMemoryOverride, o as PlatformOverride, p as PostToolUseEvent, q as PostToolUseFailureEvent, r as PreCompactEvent, s as PreToolUseEvent, S as ServerDef, u as SessionEndEvent, v as SessionStartEvent, x as StatuslineContext, z as StopEvent, D as SubagentStartEvent, F as SubagentStopEvent, T as TelemetryAccessor, K as TelemetryConfig, L as TelemetryUsageSummary, O as ToolFilter, Q as Transport, U as UserPromptSubmitEvent } from './types-C4qMgbJn.js';
1
+ export { C as ConnectorConfigError, d as defineAction, a as defineCommand, b as defineConfigPatch, c as defineConnector, e as defineHook, f as defineMemory, g as defineNativeHook, h as defineSkill, i as defineStatusline, j as defineSubagent } from './define-connector-LQFJL_at.js';
2
+ import { S as ServerDef, M as McpPackageIdentity, R as ResolvedMcpPackageIdentity } from './types-BhcUEIJJ.js';
3
+ export { A as ActionDef, a as ActionResult, b as AuthSpec, C as ChangeRecord, c as ConnectorConfig, D as DetectedPlatform, d as DiagnosticResult, E as EventPayloadMap, H as HookDefinition, e as HookEventName, f as HookParadigm, g as HookResponse, h as HooksConfig, i as HostCtx, I as InstallResult, j as InstallScope, k as MemoryDef, N as NativeHookDef, l as NativeHookEvent, m as NotificationEvent, P as PermissionRequestEvent, n as PlatformCapabilities, o as PlatformId, p as PlatformMemoryOverride, q as PlatformOverride, r as PostToolUseEvent, s as PostToolUseFailureEvent, t as PreCompactEvent, u as PreToolUseEvent, v as ResolvedConnector, w as SessionEndEvent, x as SessionStartEvent, y as StatuslineContext, z as StatuslineDef, B as StopEvent, F as SubagentStartEvent, G as SubagentStopEvent, T as TelemetryAccessor, J as TelemetryConfig, K as TelemetryUsageSummary, L as ToolFilter, O as Transport, U as UserPromptSubmitEvent } from './types-BhcUEIJJ.js';
3
4
 
4
- /**
5
- * core/define-connector the public write-once entry point.
6
- *
7
- * Validates a ConnectorConfig and normalizes it into a ResolvedConnector with
8
- * every optional field resolved to a default. Validation is intentionally
9
- * dependency-free (no zod) to keep the single-binary install lean.
10
- */
5
+ /** Derive the host-facing MCP server key from a package name. */
6
+ declare function deriveHostAliasFromPackageName(packageName: string): string | undefined;
7
+ /** Derive the host-facing MCP server key from an MCP registry name. */
8
+ declare function deriveHostAliasFromMcpName(mcpName: string): string | undefined;
9
+ /** Infer an npm package from common npx-style stdio server definitions. */
10
+ declare function inferNpmPackageFromServer(server: ServerDef | undefined): string | undefined;
11
+ declare function resolveMcpPackageIdentity(input: {
12
+ id?: string;
13
+ mcp?: McpPackageIdentity;
14
+ server?: ServerDef;
15
+ }): ResolvedMcpPackageIdentity;
11
16
 
12
- /** Thrown on an invalid connector configuration. */
13
- declare class ConnectorConfigError extends Error {
14
- constructor(message: string);
15
- }
16
- /**
17
- * Validate + normalize a connector definition.
18
- * Returns a ResolvedConnector that adapters and the CLI consume directly.
19
- */
20
- declare function defineConnector(config: ConnectorConfig): ResolvedConnector;
21
- /**
22
- * Typed identity helper for authoring a status line in its own module:
23
- * export const myStatusline = defineStatusline({ render: (ctx) => "…" });
24
- * Mirrors the (informal) defineX helpers; gives the developer full type
25
- * inference on {@link StatuslineContext} without importing the type by hand.
26
- */
27
- declare const defineStatusline: (def: StatuslineDef) => StatuslineDef;
28
- /**
29
- * Typed identity helper for authoring ONE normalized lifecycle hook in its own
30
- * module, EVENT-PARAMETERIZED so the handler's payload narrows to that event:
31
- *
32
- * export const onPre = defineHook("PreToolUse", {
33
- * handler(evt) { evt.toolName // ← typed as a PreToolUseEvent, not the union
34
- * return { decision: "deny", reason: "no" };
35
- * },
36
- * });
37
- *
38
- * The leading `event` argument exists ONLY to infer `E`; the def is returned
39
- * unchanged (identity — validation still happens in defineConnector). Passing
40
- * `HookDefinition` without an event would widen the handler param to the full
41
- * {@link HookEventName} union and lose per-event narrowing, so the event tag is
42
- * required.
43
- */
44
- declare const defineHook: <E extends HookEventName>(event: E, def: HookDefinition<E>) => HookDefinition<E>;
45
- /**
46
- * Typed identity helper for authoring a slash {@link CommandDef} in its own
47
- * module. Returns the def unchanged (kebab-case name + prompt are validated by
48
- * defineConnector when the connector is assembled).
49
- */
50
- declare const defineCommand: (def: CommandDef) => CommandDef;
51
- /**
52
- * Typed identity helper for authoring an Agent {@link SkillDef} in its own
53
- * module. Returns the def unchanged (name/description/body + safe resource keys
54
- * are validated by defineConnector).
55
- */
56
- declare const defineSkill: (def: SkillDef) => SkillDef;
57
- /**
58
- * Typed identity helper for authoring a {@link SubagentDef} in its own module.
59
- * Returns the def unchanged (name/description/prompt validated by defineConnector).
60
- */
61
- declare const defineSubagent: (def: SubagentDef) => SubagentDef;
62
- /**
63
- * Typed identity helper for authoring a {@link MemoryDef} (standing-guidance
64
- * managed block) in its own module. Returns the def unchanged (name/content +
65
- * byte budget + marker-token guard validated by defineConnector).
66
- */
67
- declare const defineMemory: (def: MemoryDef) => MemoryDef;
68
- /**
69
- * Typed identity helper for authoring a user-invokable {@link ActionDef} in its
70
- * own module. Returns the def unchanged (kebab-case unique id + run-is-function
71
- * + the per-host hosts map validated by defineConnector when the connector is
72
- * assembled).
73
- */
74
- declare const defineAction: (def: ActionDef) => ActionDef;
75
- /**
76
- * Typed identity helper for authoring a declarative {@link ConfigPatchDef}
77
- * (set-if-absent host-config key patch) in its own module. Returns the def
78
- * unchanged (leaf-path grammar + namespace guard + required reason validated by
79
- * defineConnector when it appears under `platforms[<id>].configPatch`).
80
- */
81
- declare const defineConfigPatch: (def: ConfigPatchDef) => ConfigPatchDef;
82
- /**
83
- * Typed identity helper for authoring a {@link NativeHookDef} (host-native
84
- * passthrough hook) in its own module. Returns the def unchanged (event-name
85
- * collision + handler-is-function validated by defineConnector when it appears
86
- * under `platforms[<id>].nativeHooks`).
87
- */
88
- declare const defineNativeHook: (def: NativeHookDef) => NativeHookDef;
89
-
90
- export { ActionDef, ConnectorConfig, ConnectorConfigError, HookDefinition, HookEventName, MemoryDef, NativeHookDef, ResolvedConnector, StatuslineDef, defineAction, defineCommand, defineConfigPatch, defineConnector, defineHook, defineMemory, defineNativeHook, defineSkill, defineStatusline, defineSubagent };
17
+ export { McpPackageIdentity, ResolvedMcpPackageIdentity, ServerDef, deriveHostAliasFromMcpName, deriveHostAliasFromPackageName, inferNpmPackageFromServer, resolveMcpPackageIdentity };
package/dist/index.js CHANGED
@@ -10,12 +10,16 @@ import {
10
10
  defineNativeHook,
11
11
  defineSkill,
12
12
  defineStatusline,
13
- defineSubagent
14
- } from "./chunk-G4CEELKO.js";
15
- import "./chunk-25CPWJA7.js";
16
- import "./chunk-56R2ER7K.js";
17
- import "./chunk-YYNXIUR2.js";
18
- import "./chunk-IXOQDZWC.js";
13
+ defineSubagent,
14
+ deriveHostAliasFromMcpName,
15
+ deriveHostAliasFromPackageName,
16
+ inferNpmPackageFromServer,
17
+ resolveMcpPackageIdentity
18
+ } from "./chunk-KJLFGQQM.js";
19
+ import "./chunk-SILKSP2Y.js";
20
+ import "./chunk-NBYKLUF6.js";
21
+ import "./chunk-UMQ6NBQR.js";
22
+ import "./chunk-GZGLCCEE.js";
19
23
  export {
20
24
  ConnectorConfigError,
21
25
  defineAction,
@@ -27,6 +31,10 @@ export {
27
31
  defineNativeHook,
28
32
  defineSkill,
29
33
  defineStatusline,
30
- defineSubagent
34
+ defineSubagent,
35
+ deriveHostAliasFromMcpName,
36
+ deriveHostAliasFromPackageName,
37
+ inferNpmPackageFromServer,
38
+ resolveMcpPackageIdentity
31
39
  };
32
40
  //# sourceMappingURL=index.js.map