@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
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/app.ts","../src/cli/banner.ts"],"sourcesContent":["/**\n * cli/app — shared CLI helpers + command dispatch (NO side effects).\n *\n * Command modules import the shared helpers (print, fail, parse-flags,\n * renderInstallResult) from here, and main() dispatches the first positional to a\n * command module.\n * This module never auto-runs — `cli/index.ts` is the thin bin entry that calls\n * `main()`. Keeping the auto-run out of here is what prevents a dispatch recursion\n * (a command module importing a helper must not re-trigger the program) and makes\n * it robust to bundler entry-splitting (the old import.meta.url entry-guard broke\n * once tsup hoisted this code into a shared chunk).\n */\n\nimport { createRequire } from \"node:module\";\nimport { homedir } from \"node:os\";\n\nimport { PALETTES, renderBrandBanner, resolveColorMode, shouldShowBanner } from \"./banner.js\";\nimport type {\n ChangeRecord,\n ConnectorSummary,\n InstallResult,\n InstallScope,\n PlatformId,\n ResolvedConnector,\n} from \"../core/types.js\";\n\n// ─────────────────────────────────────────────────────────────────────────\n// Shared helpers (imported by the command modules)\n// ─────────────────────────────────────────────────────────────────────────\n\n/** Print a line to stdout (machine-readable payloads must stay on stdout). */\nexport function print(line: string): void {\n process.stdout.write(`${line}\\n`);\n}\n\n/**\n * The brand active for THIS invocation. main() sets it from\n * {@link MainOptions.programName} before dispatch, so error messages printed by\n * command modules via {@link fail} read as the embedding tool (e.g. `acme-db:`)\n * instead of always `agent-connector:`.\n */\nlet activeProgramName = \"agent-connector\";\n\n/** Print an error to stderr (branded) and return a non-zero exit code (default 2). */\nexport function fail(message: string, code = 2): number {\n process.stderr.write(`${activeProgramName}: ${message}\\n`);\n return code;\n}\n\n/**\n * The brand active for THIS invocation (what the banner renders in ASCII art).\n * main() sets it from {@link MainOptions.programName} before dispatch; reading it\n * here keeps the banner branded for an embedding SDK CLI without each command\n * module needing the program name threaded through.\n */\nexport function getActiveProgramName(): string {\n return activeProgramName;\n}\n\n/**\n * Print the branded ASCII banner once, atop install / uninstall / upgrade /\n * doctor — but ONLY for an interactive TTY (suppressed when piped/redirected,\n * under --json, or under --quiet) so scripts and pipelines see byte-identical\n * command output. The pure render lives in cli/banner; this thin wrapper reads\n * the real stdout/env and feeds it in.\n */\nexport function maybePrintBanner(flags: { json?: boolean; quiet?: boolean }): void {\n const isTTY = process.stdout.isTTY === true;\n const noColor = process.env.NO_COLOR != null && process.env.NO_COLOR !== \"\";\n if (!shouldShowBanner({ isTTY, noColor, json: flags.json === true, quiet: flags.quiet === true })) {\n return;\n }\n const color = resolveColorMode({\n noColor,\n colorterm: process.env.COLORTERM,\n term: process.env.TERM,\n });\n // Coerce an unknown/zero width to a conservative 80 so an unknown-width TTY\n // shows the safe one-line title rather than the 129-col block art.\n const c = process.stdout.columns;\n const columns = typeof c === \"number\" && c > 0 ? c : 80;\n // Rotate the gradient per run so each real invocation reads differently. The\n // random pick lives HERE (the impure wrapper) so the pure renderer stays\n // deterministic for tests/direct callers.\n const palette = PALETTES[Math.floor(Math.random() * PALETTES.length)]!;\n print(renderBrandBanner(activeProgramName, { color, columns, palette }));\n print(\"\");\n}\n\n/**\n * Resolve agent-connector's own package version at runtime. Works from both the\n * bundled dist layout (dist/*.js → ../package.json) and the src layout under\n * tsx/vitest (src/cli/ → ../../package.json); the name check guards against\n * accidentally reading some other package.json on the walk.\n */\nexport function resolveOwnVersion(): string {\n const req = createRequire(import.meta.url);\n for (const rel of [\"../package.json\", \"../../package.json\", \"../../../package.json\"]) {\n try {\n const pkg = req(rel) as { name?: string; version?: string };\n if (pkg.name === \"@ken-jo/agent-connector\" && typeof pkg.version === \"string\") {\n return pkg.version;\n }\n } catch {\n /* keep walking */\n }\n }\n return \"0.0.0\";\n}\n\n/** Parse a --scope value the CLI accepts (user|project) into an InstallScope. */\nexport function parseScope(value: string | undefined): InstallScope | null {\n if (value === \"user\" || value === \"project\") return value;\n return null;\n}\n\n/**\n * Parse a comma-separated --targets value into PlatformId[]. Returns undefined\n * when the flag is absent/empty so callers can fall back to connector/detection.\n */\nexport function parseTargets(value: string | undefined): PlatformId[] | undefined {\n if (value == null || value.trim() === \"\") return undefined;\n const ids = value\n .split(\",\")\n .map((s) => s.trim())\n .filter((s) => s !== \"\") as PlatformId[];\n return ids.length > 0 ? ids : undefined;\n}\n\n/**\n * Build the render-only {@link ConnectorSummary} from a resolved connector. The\n * command modules call this on the {@link ResolvedConnector} they already loaded\n * and attach the result to {@link InstallResult.connector}, so the friendly\n * renderer can print a header describing WHAT was deployed without importing the\n * heavyweight connector type or its live handlers.\n */\nexport function buildConnectorSummary(connector: ResolvedConnector): ConnectorSummary {\n let server: ConnectorSummary[\"server\"];\n if (connector.server) {\n const s = connector.server;\n // stdio → \"node server.mjs\"; remote → the URL (best-effort one-liner).\n // HOME-relativize each part so a bundled absolute server path reads short.\n const cmd =\n s.transport === \"stdio\"\n ? [s.command, ...(s.args ?? [])]\n .filter((p): p is string => p != null && p !== \"\")\n .map((p) => tildify(p))\n .join(\" \")\n : (s.url ?? \"\");\n server = { transport: s.transport, command: cmd };\n }\n return {\n id: connector.id,\n version: connector.version,\n displayName: connector.displayName,\n server,\n hookEvents: [...connector.hookEvents],\n telemetryEnabled: connector.telemetry.enabled,\n commands: connector.commands.length,\n skills: connector.skills.length,\n subagents: connector.subagents.length,\n memory: connector.memory.length,\n hasStatusline: connector.statusline != null,\n actions: connector.actions.length,\n };\n}\n\n/**\n * Rewrite an absolute path under the user's home dir to a leading `~/…` so the\n * per-host paths read short. Leaves non-home and relative paths untouched.\n */\nfunction tildify(path: string): string {\n // Normalize both to forward slashes so the home-prefix check is separator-\n // robust (Windows mixes `\\` and `/`) and the displayed path reads `~/…`\n // consistently on every platform (Windows terminals accept `/` fine).\n const home = homedir().replace(/\\\\/g, \"/\");\n const np = path.replace(/\\\\/g, \"/\");\n if (home && (np === home || np.startsWith(home + \"/\"))) {\n return \"~\" + np.slice(home.length);\n }\n return np;\n}\n\n/** Truncate a long single-line command for the header (keeps it scannable). */\nfunction truncateCommand(cmd: string, max = 64): string {\n if (cmd.length <= max) return cmd;\n return cmd.slice(0, max - 1) + \"…\";\n}\n\n/**\n * The surface a ChangeRecord touched, derived from its detail (primary signal)\n * then its path (fallback for content files whose detail is a bare basename).\n */\ntype Surface = \"mcp\" | \"hooks\" | \"commands\" | \"skills\" | \"subagents\" | \"memory\" | \"statusline\" | \"actions\" | \"backup\" | \"other\";\n\nfunction classifySurface(c: ChangeRecord): Surface {\n const detail = c.detail.toLowerCase();\n // A safety backup the installer wrote before a destructive change.\n if (detail.startsWith(\"backed up\") || detail.includes(\"backup\")) return \"backup\";\n // MCP server entry: mcpServers.<id> / mcp_servers.<id> / mcp.servers.<id>.\n if (/^mcp[._]?servers?\\./.test(detail) || detail.startsWith(\"mcp.\")) return \"mcp\";\n // Normalized + native hook entries: hooks.<Event> (case varies per host).\n if (detail.startsWith(\"hooks.\") || detail.startsWith(\"hook \")) return \"hooks\";\n if (detail.includes(\"nativehooks\")) return \"hooks\";\n if (detail.startsWith(\"memory\")) return \"memory\";\n if (detail.startsWith(\"statusline\")) return \"statusline\";\n if (detail.startsWith(\"actions\") || detail.startsWith(\"action \")) return \"actions\";\n if (detail.includes(\"configpatch\")) return \"other\";\n // Path-based fallback for content-file surfaces (detail is a bare basename).\n const p = (c.path ?? \"\").replace(/\\\\/g, \"/\").toLowerCase();\n if (/\\/commands?\\//.test(p)) return \"commands\";\n if (/\\/skills?\\//.test(p)) return \"skills\";\n if (/\\/(subagents?|agents?)\\//.test(p)) return \"subagents\";\n // Detail mentions a surface noun (skip/warn lines like \"no skills\").\n if (/\\bcommands?\\b/.test(detail)) return \"commands\";\n if (/\\bskills?\\b/.test(detail)) return \"skills\";\n if (/\\bsubagents?\\b/.test(detail)) return \"subagents\";\n return \"other\";\n}\n\nconst SURFACE_LABEL_SINGULAR: Record<Surface, string> = {\n mcp: \"MCP server\",\n hooks: \"hook\",\n commands: \"command\",\n skills: \"skill\",\n subagents: \"subagent\",\n memory: \"memory block\",\n statusline: \"status line\",\n actions: \"action\",\n backup: \"backup\",\n other: \"change\",\n};\n\n/** Pluralize a surface count, e.g. (2,\"hooks\") → \"2 hooks\". */\nfunction countLabel(n: number, surface: Surface): string {\n const base = SURFACE_LABEL_SINGULAR[surface];\n if (surface === \"mcp\") return \"MCP server\"; // singular by construction\n return n === 1 ? `1 ${base}` : `${n} ${base}s`;\n}\n\n/** Verb-appropriate glyph for a host's NET status. */\nfunction hostGlyph(status: \"ok\" | \"skip\" | \"warn\"): string {\n return status === \"warn\" ? \"!\" : status === \"skip\" ? \"=\" : \"✓\";\n}\n\n/**\n * One host's collapsed view: its net status, a surface summary line, the\n * deduped HOME-relativized paths it touched, and any inline warnings.\n */\ninterface HostGroup {\n platform: PlatformId;\n status: \"ok\" | \"skip\" | \"warn\";\n summary: string;\n paths: string[];\n warnings: string[];\n}\n\n/**\n * Collapse the per-(host,surface) ChangeRecords into ONE entry per host:\n * - status: warn if any record warned; ok if any created/updated/removed;\n * else skip (everything was a no-op).\n * - summary: the active (non-skip) surfaces, joined (\"MCP server + 2 hooks\").\n * When every record skipped, the reason is surfaced instead.\n */\nfunction groupByHost(changes: ChangeRecord[], verb: Verb): HostGroup[] {\n const order: PlatformId[] = [];\n const byHost = new Map<PlatformId, ChangeRecord[]>();\n for (const c of changes) {\n if (!byHost.has(c.platform)) {\n byHost.set(c.platform, []);\n order.push(c.platform);\n }\n byHost.get(c.platform)!.push(c);\n }\n\n const groups: HostGroup[] = [];\n for (const platform of order) {\n const recs = byHost.get(platform)!;\n // A safety backup the installer wrote is INCIDENTAL, not an installed\n // surface: it must not flip an otherwise-no-op host to \"changed\" (an\n // idempotent re-install that only re-backs-up should still read \"already\n // current\"). It is shown only ALONGSIDE a real surface change.\n const written = recs.filter((c) => c.action !== \"skip\" && c.action !== \"warn\");\n const realChanges = written.filter((c) => classifySurface(c) !== \"backup\");\n const warned = recs.filter((c) => c.action === \"warn\");\n const status: HostGroup[\"status\"] =\n warned.length > 0 ? \"warn\" : realChanges.length > 0 ? \"ok\" : \"skip\";\n\n // Surface summary from the written records (created/updated/removed),\n // preserving a stable surface order and collapsing per-surface counts. The\n // incidental `backup` surface is included ONLY when a real surface changed.\n const SURFACE_ORDER: Surface[] = [\n \"mcp\",\n \"hooks\",\n \"commands\",\n \"skills\",\n \"subagents\",\n \"memory\",\n \"statusline\",\n \"actions\",\n \"backup\",\n \"other\",\n ];\n const counts = new Map<Surface, number>();\n const summarySource = realChanges.length > 0 ? written : realChanges;\n for (const c of summarySource) {\n const s = classifySurface(c);\n counts.set(s, (counts.get(s) ?? 0) + 1);\n }\n const parts = SURFACE_ORDER.filter((s) => counts.has(s)).map((s) =>\n countLabel(counts.get(s)!, s),\n );\n\n let summary: string;\n if (parts.length > 0) {\n summary = parts.join(\" + \");\n } else if (status === \"warn\") {\n // No real surface change but a warning — the warning line carries detail.\n summary = \"\";\n } else {\n // Nothing real changed: surface a skip reason (or note the incidental\n // backup) for context.\n const reason =\n recs.find((c) => c.action === \"skip\")?.detail ??\n (written.length > 0 ? \"already current (re-backed-up only)\" : \"no changes\");\n summary = verb === \"uninstall\" ? `nothing to remove (${reason})` : `unchanged (${reason})`;\n }\n\n const paths = [\n ...new Set(\n recs\n .filter((c) => c.path != null && c.path !== \"\")\n .map((c) => tildify(c.path!)),\n ),\n ];\n const warnings = warned.map((c) => c.detail);\n\n groups.push({ platform, status, summary, paths, warnings });\n }\n return groups;\n}\n\ntype Verb = \"install\" | \"upgrade\" | \"uninstall\";\n\n/**\n * Render an InstallResult as a friendly, grouped report (the DEFAULT output):\n * 1. a connector header (id/version/displayName + server/hooks/telemetry +\n * one line per shipped content surface), when the summary is threaded in;\n * 2. one line per host (net glyph + surface summary + deduped ~/… paths),\n * with any host warnings inline beneath it;\n * 3. a friendly closing line + restart hint + doctor/uninstall next steps.\n *\n * Used by install / upgrade / uninstall. The exit-non-zero-on-warn convention\n * is enforced by the callers (this function only renders).\n */\nexport function renderInstallResult(result: InstallResult, verb: Verb): string {\n const lines: string[] = [];\n const summary = result.connector;\n\n // ── 1. Connector header ───────────────────────────────────────────────────\n if (summary) {\n const head = [`${summary.id} v${summary.version}`];\n if (summary.displayName && summary.displayName !== summary.id) {\n head.push(summary.displayName);\n }\n lines.push(head.join(\" · \"));\n\n if (summary.server) {\n lines.push(\n ` server ${summary.server.transport} · ${truncateCommand(summary.server.command)}`,\n );\n } else {\n lines.push(\" server (hooks-only)\");\n }\n if (summary.hookEvents.length > 0) {\n lines.push(` hooks ${summary.hookEvents.join(\", \")}`);\n }\n lines.push(` telemetry ${summary.telemetryEnabled ? \"on\" : \"off\"}`);\n if (summary.commands > 0)\n lines.push(` commands ${summary.commands}`);\n if (summary.skills > 0) lines.push(` skills ${summary.skills}`);\n if (summary.subagents > 0)\n lines.push(` subagents ${summary.subagents}`);\n if (summary.memory > 0) lines.push(` memory ${summary.memory}`);\n if (summary.hasStatusline) lines.push(` statusline 1`);\n if (summary.actions > 0) lines.push(` actions ${summary.actions}`);\n lines.push(\"\");\n } else {\n // No summary threaded (back-compat): keep a minimal verb header.\n const mode = result.dryRun ? \" (dry-run — nothing written)\" : \"\";\n lines.push(`${verb} \"${result.connectorId}\"${mode}`);\n }\n\n // ── 2. Per-host grouping ──────────────────────────────────────────────────\n const groups = groupByHost(result.changes, verb);\n if (groups.length === 0) {\n lines.push(\"(no changes)\");\n } else {\n const verbed = verb === \"uninstall\" ? \"removed from\" : verb === \"upgrade\" ? \"synced to\" : \"detected\";\n lines.push(`→ ${groups.length} agent ${groups.length === 1 ? \"CLI\" : \"CLIs\"} ${verbed}:`);\n // Width-align the platform column for a scannable table; the summary column\n // gets a fixed min width but always keeps a 2-space gap before the paths\n // even when an unusually long summary overflows it.\n const pad = Math.max(...groups.map((g) => g.platform.length));\n for (const g of groups) {\n const glyph = hostGlyph(g.status);\n const name = g.platform.padEnd(pad);\n const pathsCol = g.paths.join(\", \");\n const gap = pathsCol === \"\" ? \"\" : \" \";\n const summaryCol = pathsCol === \"\" ? g.summary : g.summary.padEnd(26) + gap;\n lines.push(` ${glyph} ${name} ${summaryCol}${pathsCol}`.trimEnd());\n for (const w of g.warnings) lines.push(` ! ${w}`);\n }\n }\n\n // ── 3. Closing summary + next steps ───────────────────────────────────────\n // The headline file tally counts only REAL surface writes — an incidental\n // safety backup must not masquerade as an installed file, so a re-install\n // whose only write was a backup honestly reports 0 files / \"already current\".\n const tally = result.changes.reduce(\n (acc, c) => {\n const isWrite = c.action === \"create\" || c.action === \"update\" || c.action === \"remove\";\n if (isWrite && classifySurface(c) !== \"backup\") acc.files += 1;\n if (c.action === \"warn\") acc.warns += 1;\n return acc;\n },\n { files: 0, warns: 0 },\n );\n const cliCount = groups.length;\n const cliWord = cliCount === 1 ? \"CLI\" : \"CLIs\";\n const fileWord = tally.files === 1 ? \"file\" : \"files\";\n\n lines.push(\"\");\n if (verb === \"uninstall\") {\n if (result.dryRun) {\n lines.push(`✓ Would remove ${summary?.id ?? result.connectorId} from ${cliCount} ${cliWord} · ${tally.files} ${fileWord} (dry-run — nothing written).`);\n } else if (tally.files === 0 && tally.warns === 0) {\n lines.push(`✓ Nothing to remove — ${summary?.id ?? result.connectorId} was not installed (zero residue).`);\n } else {\n lines.push(`✓ Removed ${summary?.id ?? result.connectorId} from ${cliCount} ${cliWord} · ${tally.files} ${fileWord} cleaned${tally.warns === 0 ? \" (zero residue)\" : \"\"}.`);\n }\n } else {\n const what = verb === \"upgrade\" ? \"Synced\" : \"Installed\";\n const wouldWhat = verb === \"upgrade\" ? \"sync\" : \"install\";\n if (result.dryRun) {\n lines.push(`✓ Would ${wouldWhat} ${summary?.id ?? result.connectorId} to ${cliCount} ${cliWord} · ${tally.files} ${fileWord} (dry-run — nothing written).`);\n } else if (tally.files === 0) {\n lines.push(`✓ ${summary?.id ?? result.connectorId}: already current on ${cliCount} ${cliWord} — nothing to write.`);\n } else {\n lines.push(`✓ ${what} ${summary?.id ?? result.connectorId} to ${cliCount} ${cliWord} · ${tally.files} ${fileWord}. Restart each CLI to load it.`);\n }\n }\n\n // Warnings block (kept explicit — callers exit non-zero on any warn). A\n // remote-transport connector pushes the SAME string to both a warn\n // ChangeRecord (already shown inline on its host line) and result.warnings, so\n // skip any bottom-block entry already surfaced inline to show each warning ONCE.\n const inlineWarnings = new Set(groups.flatMap((g) => g.warnings));\n const blockWarnings = result.warnings.filter((w) => !inlineWarnings.has(w));\n if (blockWarnings.length > 0) {\n lines.push(\"\");\n lines.push(\"warnings:\");\n for (const w of blockWarnings) lines.push(` ! ${w}`);\n }\n\n // Next-step hints (the verbs read as the active brand).\n if (verb === \"uninstall\") {\n lines.push(` Verify it's gone: ${activeProgramName} doctor`);\n } else {\n lines.push(\n ` Verify: ${activeProgramName} doctor · Remove: ${activeProgramName} uninstall`,\n );\n }\n\n return lines.join(\"\\n\");\n}\n\n// ─────────────────────────────────────────────────────────────────────────\n// Command dispatch\n// ─────────────────────────────────────────────────────────────────────────\n\n/** A command module: takes the post-command argv slice, returns an exit code. */\ntype CommandModule = { run: (argv: string[]) => Promise<number> | number };\n\n/** Lazy command loaders — keyed by the first positional. Imported on demand. */\nconst COMMANDS: Record<string, () => Promise<CommandModule>> = {\n detect: () => import(\"./commands/detect.js\"),\n install: () => import(\"./commands/install.js\"),\n uninstall: () => import(\"./commands/uninstall.js\"),\n // `upgrade` is the single \"bring everything current\" verb (re-render host\n // config + refresh the home pointer + managed channel guidance). `sync` and\n // `update` are kept as back-compat aliases that route to the same module so\n // existing scripts/docs keep working without a second concept to learn.\n upgrade: () => import(\"./commands/upgrade.js\"),\n sync: () => import(\"./commands/upgrade.js\"),\n update: () => import(\"./commands/upgrade.js\"),\n package: () => import(\"./commands/package.js\"),\n doctor: () => import(\"./commands/doctor.js\"),\n status: () => import(\"./commands/status.js\"),\n telemetry: () => import(\"./commands/telemetry.js\"),\n usage: () => import(\"./commands/usage.js\"),\n leaderboard: () => import(\"./commands/leaderboard.js\"),\n hook: () => import(\"./commands/hook.js\"),\n // Internal (omitted from USAGE): the statusline (HUD) entrypoint a host's\n // status line config points at. Fail-safe: always exits 0 with at most a\n // rendered line. See cli/commands/statusline.ts.\n statusline: () => import(\"./commands/statusline.js\"),\n // Internal (omitted from USAGE): the user-invokable action entrypoint a future\n // host affordance points at. USER-TRIGGERED: surfaces errors (exit 1 + stderr),\n // unlike the fail-open hook / fail-safe statusline. See cli/commands/action.ts.\n action: () => import(\"./commands/action.js\"),\n serve: () => import(\"./commands/serve.js\"),\n // Hidden (omitted from USAGE): the opt-in host-native turn-usage entrypoint an\n // AfterModel / PostInvocation hook points at. Always exits 0; records a\n // distinct `model_turn` row. See cli/commands/usage-event.ts.\n \"usage-event\": () => import(\"./commands/usage-event.js\"),\n};\n\n/** Default program name; an embedding SDK CLI overrides it via {@link MainOptions}. */\nexport const DEFAULT_PROGRAM_NAME = \"agent-connector\";\n\n/**\n * One-line usage signature per command — the single central copy behind\n * `<command> --help` and the friendly bad-flag error. Command modules use\n * node:util parseArgs (strict), which THROWS on an unknown flag; without the\n * dispatcher-level handling in {@link main}, `agent-connector install --help`\n * would die with a raw ERR_PARSE_ARGS stack trace — the very invocation the\n * root help tells users to run.\n */\nconst COMMAND_USAGE: Record<string, string> = {\n detect: \"detect [--json] [--project <dir>]\",\n install:\n \"install [<source>] [--method direct|marketplace] [--connector <source>] [--scope user|project] [--targets a,b] [--project <dir>] [--dry-run] [--force] [--quiet]\\n\" +\n \" <source> a local path OR a remote GitHub connector: owner/repo[/subpath][#ref], a github.com URL (incl. /tree/<ref>/<sub>), git@github.com:owner/repo, or github:owner/repo. Remote sources are fetched to ~/.agent-connector/sources/ and must be an agent-connector package (have an agent-connector.config.{mjs,js,json}).\",\n uninstall:\n \"uninstall [--method auto|direct|marketplace] [--connector <path>] [--connector-id <id>] [--scope user|project] [--targets a,b] [--project <dir>] [--dry-run] [--purge] [--quiet]\",\n upgrade:\n \"upgrade [--method direct|marketplace] [--channel stable|latest] [--connector <path>] [--scope user|project] [--targets a,b] [--project <dir>] [--dry-run] [--quiet]\",\n sync: \"sync — alias of upgrade (see `upgrade --help`)\",\n update: \"update — alias of upgrade (see `upgrade --help`)\",\n package:\n \"package [--connector <path>] [--format <fmt>|all] [--out <dir>] [--project <dir>] [--dry-run]\",\n doctor:\n \"doctor [--targets a,b] [--connector <path>] [--scope user|project] [--project <dir>] [--probe] [--explain] [--json] [--heal] [--dry-run] [--quiet]\\n\" +\n \" --explain per-(host,event) hook honor matrix (honored/degraded/dropped). Exit non-zero ONLY when an explicitly-targeted host DEGRADES a declared event (fires it but silently won't honor the reply); dropped/mcp-only hosts and fleet-wide (targets:auto) gaps are informational (exit 0).\",\n status: \"status [--connector <path>] [--scope user|project] [--project <dir>] [--json]\",\n telemetry:\n \"telemetry report|export|leaderboard [--by <dim>] [--since <dur>] [--connector <id>] [--scope <slice>] [--format csv|json] [--out <file>] [--json]\",\n usage:\n \"usage report|export|leaderboard [--by <dim>] [--since <dur>] [--platform <id>] [--format csv|json] [--out <file>] [--json]\",\n leaderboard: \"leaderboard [--since <dur>] [--connector <id>] [--scope <slice>] [--json]\",\n hook: \"hook <platform> <event> --connector <id> (internal — host hook configs point here)\",\n statusline:\n \"statusline <platform> --connector <id> (internal — host status line configs point here)\",\n action:\n \"action <platform> <actionId> --connector <id> (internal — host action affordances point here)\",\n serve:\n \"serve --connector <id> [--scope user|project] [--host <platformId>] -- <command> [args...] (internal — host MCP entries point here)\",\n};\n\n/**\n * Build the top-level usage string for a given program name. The brand replaces\n * \"agent-connector\" in the title, the `usage:` line, and the per-command help\n * footer so an embedded CLI (e.g. `acme-db`) reads as its own tool.\n */\nfunction buildUsage(programName: string): string {\n return `${programName} — write your MCP server + hooks once, install everywhere.\n\nusage: ${programName} <command> [flags]\n\ncommands:\n detect List the AI-agent platforms installed on this machine.\n install Deploy a connector across its target platforms (--method direct writes host config; --method marketplace drives the host's plugin install).\n uninstall Remove a connector's registrations (--method auto reverses whichever method is actually installed).\n upgrade Bring everything current: re-render host config + heal the home pointer + managed update guidance (alias: update, sync).\n package Emit a marketplace/extension bundle (10 host formats, or the standard artifacts mcp-server-json | mcpb).\n doctor Health-check every detected platform; non-zero exit on any failure.\n status Light install-state summary: which connectors are present on which hosts (always exits 0).\n telemetry Inspect local per-tool token telemetry (report | export | leaderboard).\n usage Inspect host-native token usage from agent CLI logs (report | export | leaderboard).\n leaderboard Three leaderboards: 🔌 MCP/plugin (mcp-self) + 🖥️ host/user (host-scan-logs) + 🛰️ host-native turns (host-native-live) — never summed.\n hook Universal json-stdio hook entrypoint (hosts call this).\n serve Telemetry-wrapping MCP stdio proxy (wraps a real server command).\n\nRun \\`${programName} <command> --help\\` for command-specific flags.`;\n}\n\n/** Options accepted by {@link main}. */\nexport interface MainOptions {\n /**\n * The brand shown in usage/help text. Defaults to {@link DEFAULT_PROGRAM_NAME}.\n * An embedding SDK CLI (see cli/sdk.ts) passes its own bin name so every\n * subcommand's help reads as the developer's tool.\n */\n programName?: string;\n}\n\nexport async function main(argv: string[], opts: MainOptions = {}): Promise<number> {\n const programName = opts.programName ?? DEFAULT_PROGRAM_NAME;\n activeProgramName = programName; // brand every fail() in this invocation\n const usage = buildUsage(programName);\n const command = argv[0];\n\n if (command == null || command === \"--help\" || command === \"-h\" || command === \"help\") {\n print(usage);\n return command == null ? 1 : 0;\n }\n if (command === \"--version\" || command === \"-v\") {\n print(`${programName} ${resolveOwnVersion()}`);\n return 0;\n }\n\n const loader = COMMANDS[command];\n if (!loader) {\n process.stderr.write(`${programName}: unknown command \"${command}\"\\n\\n`);\n process.stderr.write(`${usage}\\n`);\n return 2;\n }\n\n // Per-command help: no command module defines a --help flag (strict parseArgs\n // would throw on it), so answer it centrally from COMMAND_USAGE.\n const rest = argv.slice(1);\n if (rest.includes(\"--help\") || rest.includes(\"-h\")) {\n const sig = COMMAND_USAGE[command];\n if (sig) {\n print(`usage: ${programName} ${sig}`);\n return 0;\n }\n }\n\n const mod = await loader();\n try {\n return await mod.run(rest);\n } catch (err) {\n // Friendly bad-flag errors: strict parseArgs throws ERR_PARSE_ARGS_* for an\n // unknown/malformed option — print the message + the usage line instead of\n // letting a raw stack trace reach the user. Everything else still rethrows\n // (the bin entry reports those as fatal).\n const code = (err as { code?: string }).code;\n if (typeof code === \"string\" && code.startsWith(\"ERR_PARSE_ARGS\")) {\n const message = err instanceof Error ? err.message : String(err);\n const sig = COMMAND_USAGE[command];\n if (sig) process.stderr.write(`usage: ${programName} ${sig}\\n`);\n return fail(message);\n }\n throw err;\n }\n}\n","/**\n * cli/banner — the branded ASCII-art header shown once atop install / uninstall\n * / upgrade / doctor.\n *\n * Two PURE functions drive everything (no process.* reads here — the command\n * wiring injects the real env so tests can call these directly without a TTY):\n *\n * renderBrandBanner(name, { color, columns, palette }) → the banner string\n * shouldShowBanner({ isTTY, noColor, json, quiet }) → whether to show it\n *\n * RESPONSIVE (one line, NEVER stacked), two forms:\n * • WIDE — a 6-row \"ANSI Shadow\" block font (solid `█` + `╗╔╝╚║═` shadow,\n * ~8 cols/char, hand-transcribed + fixed-width so it tiles cleanly) when its\n * render fits the terminal width.\n * • NARROW — a single-line gradient TITLE `◆ AGENT-CONNECTOR` (the brand\n * uppercased, each char colored along the palette + bold). ~18 cols, so it\n * fits any real terminal; it is the universal narrow form.\n * The WIDE font covers the connector-id charset [A-Za-z0-9 ._-].\n *\n * COLOR: a palette gradient (three RGB stops, a {@link Palette}) — swept per\n * column across the block art, or per character across the title. The render is\n * PURE and palette-parameterized — the caller picks the palette (the impure\n * app.ts wrapper rotates {@link PALETTES} per run). truecolor→256→16→none tiers\n * all honor the palette; NO_COLOR = zero ANSI.\n */\n\n/** Color capability the host terminal advertises, highest → lowest. */\nexport type ColorMode = \"truecolor\" | \"ansi256\" | \"ansi16\" | \"none\";\n\n/** A 24-bit RGB triple. */\nexport type RGB = readonly [number, number, number];\n\n/** A 3-stop gradient: the sweep lerps stop0 → stop1 → stop2 across the columns. */\nexport type Palette = readonly [RGB, RGB, RGB];\n\n/**\n * The 10 rotation palettes. The impure {@link maybePrintBanner} wrapper picks one\n * at random per run so each real invocation shows a different color; the pure\n * renderer defaults to PALETTES[0] so direct callers + tests stay deterministic.\n */\nexport const PALETTES: readonly Palette[] = [\n [[255, 210, 0], [255, 110, 10], [220, 30, 25]], // Sunset\n [[255, 225, 90], [255, 120, 0], [200, 20, 20]], // Lava\n [[230, 30, 30], [255, 120, 0], [255, 220, 0]], // Fire\n [[255, 225, 120], [255, 170, 40], [225, 110, 20]], // Amber gold\n [[255, 205, 150], [255, 150, 130], [255, 120, 175]], // Peach pastel\n [[255, 80, 170], [200, 40, 200], [100, 60, 210]], // Berry\n [[0, 220, 180], [0, 160, 230], [60, 90, 230]], // Ocean\n [[80, 230, 140], [0, 200, 210], [150, 90, 235]], // Aurora\n [[170, 230, 90], [60, 200, 120], [20, 150, 140]], // Forest\n [[0, 200, 200], [40, 80, 230], [200, 40, 200]], // Synthwave\n] as const;\n\n/** Inputs to {@link renderBrandBanner} — all injected, never read from process. */\nexport interface BannerOptions {\n /** Color capability to render at. \"none\" emits zero ANSI codes. */\n color: ColorMode;\n /** Terminal width in columns; selects the form (wide block art → one-line title). */\n columns: number;\n /** The 3-stop gradient. Defaults to {@link PALETTES}[0] (Sunset) when omitted. */\n palette?: Palette;\n}\n\n/** Inputs to {@link shouldShowBanner} — the real env, injected by the caller. */\nexport interface BannerGate {\n /** process.stdout.isTTY (banner is suppressed entirely when not a TTY). */\n isTTY: boolean;\n /** NO_COLOR is set (the banner still shows, but with zero color codes). */\n noColor: boolean;\n /** A machine-readable --json was requested (suppress entirely). */\n json: boolean;\n /** An explicit --quiet was passed (suppress entirely). */\n quiet: boolean;\n}\n\n/**\n * Whether to print the banner at all. The banner is decorative, so it shows ONLY\n * for an interactive TTY and never when output is being consumed by a script or\n * pipeline: not when piped/redirected (`!isTTY`), not under `--json`, and not\n * under `--quiet`. `NO_COLOR` does NOT suppress it — the banner renders without\n * color in that case (handled by {@link resolveColorMode}).\n */\nexport function shouldShowBanner(gate: BannerGate): boolean {\n return gate.isTTY && !gate.json && !gate.quiet;\n}\n\n/**\n * Resolve the color tier from the (injected) terminal env. 24-bit when the\n * terminal advertises it (COLORTERM=truecolor|24bit), 256-color when TERM names\n * a 256 palette, else 16-color — and PLAIN (no color) under NO_COLOR or a dumb /\n * absent TERM.\n */\nexport function resolveColorMode(env: {\n noColor: boolean;\n colorterm?: string | undefined;\n term?: string | undefined;\n}): ColorMode {\n if (env.noColor) return \"none\";\n const term = (env.term ?? \"\").toLowerCase();\n if (term === \"\" || term === \"dumb\") return \"none\";\n const colorterm = (env.colorterm ?? \"\").toLowerCase();\n if (colorterm === \"truecolor\" || colorterm === \"24bit\") return \"truecolor\";\n if (term.includes(\"256\")) return \"ansi256\";\n return \"ansi16\";\n}\n\n// ─────────────────────────────────────────────────────────────────────────\n// WIDE font — \"ANSI Shadow\" (6 rows). Hand-transcribed bold figlet glyphs —\n// solid `█` with a `╗╔╝╚║═` 3D shadow — fixed-width per glyph so they TILE\n// cleanly when concatenated (~8 cols/char → \"agent-connector\" ≈ 126 cols on\n// one line). Used only when the terminal is wide enough.\n// ─────────────────────────────────────────────────────────────────────────\n\nconst WIDE_FONT: Record<string, readonly string[]> = {\n A: [\" █████╗ \", \"██╔══██╗\", \"███████║\", \"██╔══██║\", \"██║ ██║\", \"╚═╝ ╚═╝\"],\n B: [\"██████╗ \", \"██╔══██╗\", \"██████╔╝\", \"██╔══██╗\", \"██████╔╝\", \"╚═════╝ \"],\n C: [\" ██████╗\", \"██╔════╝\", \"██║ \", \"██║ \", \"╚██████╗\", \" ╚═════╝\"],\n D: [\"██████╗ \", \"██╔══██╗\", \"██║ ██║\", \"██║ ██║\", \"██████╔╝\", \"╚═════╝ \"],\n E: [\"███████╗\", \"██╔════╝\", \"█████╗ \", \"██╔══╝ \", \"███████╗\", \"╚══════╝\"],\n F: [\"███████╗\", \"██╔════╝\", \"█████╗ \", \"██╔══╝ \", \"██║ \", \"╚═╝ \"],\n G: [\" ██████╗ \", \"██╔════╝ \", \"██║ ███╗\", \"██║ ██║\", \"╚██████╔╝\", \" ╚═════╝ \"],\n H: [\"██╗ ██╗\", \"██║ ██║\", \"███████║\", \"██╔══██║\", \"██║ ██║\", \"╚═╝ ╚═╝\"],\n I: [\"██╗\", \"██║\", \"██║\", \"██║\", \"██║\", \"╚═╝\"],\n J: [\" ██╗\", \" ██║\", \" ██║\", \"██ ██║\", \"╚█████╔╝\", \" ╚════╝ \"],\n K: [\"██╗ ██╗\", \"██║ ██╔╝\", \"█████╔╝ \", \"██╔═██╗ \", \"██║ ██╗\", \"╚═╝ ╚═╝\"],\n L: [\"██╗ \", \"██║ \", \"██║ \", \"██║ \", \"███████╗\", \"╚══════╝\"],\n M: [\"███╗ ███╗\", \"████╗ ████║\", \"██╔████╔██║\", \"██║╚██╔╝██║\", \"██║ ╚═╝ ██║\", \"╚═╝ ╚═╝\"],\n N: [\"███╗ ██╗\", \"████╗ ██║\", \"██╔██╗ ██║\", \"██║╚██╗██║\", \"██║ ╚████║\", \"╚═╝ ╚═══╝\"],\n O: [\" ██████╗ \", \"██╔═══██╗\", \"██║ ██║\", \"██║ ██║\", \"╚██████╔╝\", \" ╚═════╝ \"],\n P: [\"██████╗ \", \"██╔══██╗\", \"██████╔╝\", \"██╔═══╝ \", \"██║ \", \"╚═╝ \"],\n Q: [\" ██████╗ \", \"██╔═══██╗\", \"██║ ██║\", \"██║▄▄ ██║\", \"╚██████╔╝\", \" ╚══▀▀═╝ \"],\n R: [\"██████╗ \", \"██╔══██╗\", \"██████╔╝\", \"██╔══██╗\", \"██║ ██║\", \"╚═╝ ╚═╝\"],\n S: [\"███████╗\", \"██╔════╝\", \"███████╗\", \"╚════██║\", \"███████║\", \"╚══════╝\"],\n T: [\"████████╗\", \"╚══██╔══╝\", \" ██║ \", \" ██║ \", \" ██║ \", \" ╚═╝ \"],\n U: [\"██╗ ██╗\", \"██║ ██║\", \"██║ ██║\", \"██║ ██║\", \"╚██████╔╝\", \" ╚═════╝ \"],\n V: [\"██╗ ██╗\", \"██║ ██║\", \"██║ ██║\", \"╚██╗ ██╔╝\", \" ╚████╔╝ \", \" ╚═══╝ \"],\n W: [\"██╗ ██╗\", \"██║ ██║\", \"██║ █╗ ██║\", \"██║███╗██║\", \"╚███╔███╔╝\", \" ╚══╝╚══╝ \"],\n X: [\"██╗ ██╗\", \"╚██╗██╔╝\", \" ╚███╔╝ \", \" ██╔██╗ \", \"██╔╝ ██╗\", \"╚═╝ ╚═╝\"],\n Y: [\"██╗ ██╗\", \"╚██╗ ██╔╝\", \" ╚████╔╝ \", \" ╚██╔╝ \", \" ██║ \", \" ╚═╝ \"],\n Z: [\"███████╗\", \"╚══███╔╝\", \" ███╔╝ \", \" ███╔╝ \", \"███████╗\", \"╚══════╝\"],\n \"0\": [\" ██████╗ \", \"██╔═████╗\", \"██║██╔██║\", \"████╔╝██║\", \"╚██████╔╝\", \" ╚═════╝ \"],\n \"1\": [\" ██╗\", \"███║\", \"╚██║\", \" ██║\", \" ██║\", \" ╚═╝\"],\n \"2\": [\"██████╗ \", \"╚════██╗\", \" █████╔╝\", \"██╔═══╝ \", \"███████╗\", \"╚══════╝\"],\n \"3\": [\"██████╗ \", \"╚════██╗\", \" █████╔╝\", \" ╚═══██╗\", \"██████╔╝\", \"╚═════╝ \"],\n \"4\": [\"██╗ ██╗\", \"██║ ██║\", \"███████║\", \"╚════██║\", \" ██║\", \" ╚═╝\"],\n \"5\": [\"███████╗\", \"██╔════╝\", \"███████╗\", \"╚════██║\", \"███████║\", \"╚══════╝\"],\n \"6\": [\" ██████╗ \", \"██╔════╝ \", \"███████╗ \", \"██╔═══██╗\", \"╚██████╔╝\", \" ╚═════╝ \"],\n \"7\": [\"███████╗\", \"╚════██║\", \" ██╔╝\", \" ██╔╝ \", \" ██║ \", \" ╚═╝ \"],\n \"8\": [\" █████╗ \", \"██╔══██╗\", \"╚█████╔╝\", \"██╔══██╗\", \"╚█████╔╝\", \" ╚════╝ \"],\n \"9\": [\" █████╗ \", \"██╔══██╗\", \"╚██████║\", \" ╚═══██║\", \" █████╔╝\", \" ╚════╝ \"],\n \"-\": [\" \", \" \", \"█████╗\", \"╚════╝\", \" \", \" \"],\n \"_\": [\" \", \" \", \" \", \" \", \"███████╗\", \"╚══════╝\"],\n \".\": [\" \", \" \", \" \", \" \", \"██╗\", \"╚═╝\"],\n \" \": [\" \", \" \", \" \", \" \", \" \", \" \"],\n};\n\nconst GLYPH_ROWS = 6;\n\n/** Visible column count of a string (full-block + box-drawing are 1 cell each). */\nfunction vlen(s: string): number {\n return [...s].length;\n}\n\n/**\n * Render `name` into the fixed-width `font` as GLYPH_ROWS lines. The ANSI-Shadow\n * glyphs already carry their own trailing shadow column and tile cleanly with NO\n * inter-glyph gap. Returns null when the name has no renderable characters; the\n * glyphs are width-consistent per glyph, so the rows stay aligned.\n */\nfunction renderWithFont(name: string, font: Record<string, readonly string[]>): string[] | null {\n const chars = [...name];\n if (chars.length === 0) return null;\n const blank = font[\" \"]!;\n const rows: string[] = Array.from({ length: GLYPH_ROWS }, () => \"\");\n for (const ch of chars) {\n const glyph = font[ch.toUpperCase()] ?? blank;\n for (let r = 0; r < GLYPH_ROWS; r++) {\n rows[r] += glyph[r] ?? \"\";\n }\n }\n // Drop any fully-blank bottom rows so a name built from narrower glyphs (e.g.\n // \".\" / \"_\") never pads the banner with trailing empty lines.\n while (rows.length > 1 && rows[rows.length - 1]!.trim() === \"\") rows.pop();\n return rows;\n}\n\n/** Max visible width across an art block's rows. */\nfunction blockWidth(rows: string[]): number {\n return rows.length === 0 ? 0 : Math.max(...rows.map(vlen));\n}\n\n/**\n * The WIDE ANSI-Shadow block art for `name` when it fits `columns` (ONE line,\n * never stacked); else null so the caller renders the narrow one-line title.\n * `columns <= 0` means \"no constraint\" → always the WIDE art.\n */\nfunction selectWideArt(name: string, columns: number): string[] | null {\n const limit = columns > 0 ? columns : Infinity;\n const wide = renderWithFont(name, WIDE_FONT);\n return wide != null && blockWidth(wide) <= limit ? wide : null;\n}\n\n// ─────────────────────────────────────────────────────────────────────────\n// Palette-parameterized gradient. The sweep lerps the three palette stops\n// across each row's columns (t∈[0,1]). truecolor uses the exact RGB; 256 and 16\n// derive the nearest representable code FROM the same RGB, so every palette\n// works in every tier. \"none\" emits the bare char.\n// ─────────────────────────────────────────────────────────────────────────\n\n/** The interpolated RGB of `palette` at gradient position t∈[0,1]. */\nfunction gradientRGB(t: number, palette: Palette): RGB {\n const clamp = Math.max(0, Math.min(1, t));\n const seg = clamp >= 0.5 ? 1 : 0;\n const local = (clamp - seg * 0.5) / 0.5;\n const a = palette[seg]!;\n const b = palette[seg + 1]!;\n return [\n Math.round(a[0] + (b[0] - a[0]) * local),\n Math.round(a[1] + (b[1] - a[1]) * local),\n Math.round(a[2] + (b[2] - a[2]) * local),\n ];\n}\n\n/** Nearest xterm-256 cube index (16..231) for an RGB triple. */\nfunction rgbTo256(r: number, g: number, b: number): number {\n const q = (v: number): number => (v < 48 ? 0 : v < 115 ? 1 : Math.round((v - 35) / 40));\n return 16 + 36 * q(r) + 6 * q(g) + q(b);\n}\n\n/** Nearest of the 8 bright 16-color fg codes (90..97) for an RGB triple. */\nfunction rgbTo16(r: number, g: number, b: number): number {\n // Threshold each channel; map the on/off triple to its bright SGR code.\n const hi = (v: number): number => (v >= 128 ? 1 : 0);\n const key = (hi(r) << 2) | (hi(g) << 1) | hi(b);\n // index: RGB bits → code. 0:black(90) 1:blue(94) 2:green(92) 3:cyan(96)\n // 4:red(91) 5:magenta(95) 6:yellow(93) 7:white(97)\n return [90, 94, 92, 96, 91, 95, 93, 97][key]!;\n}\n\nconst RESET = \"\\x1b[0m\";\n\n/**\n * Wrap a single grapheme `ch` at gradient position `t` in the SGR escape for the\n * given color tier + palette. Whitespace is never colored (no point paying for\n * an escape around a space) and \"none\" returns the bare char.\n */\nfunction colorChar(ch: string, t: number, color: ColorMode, palette: Palette): string {\n if (color === \"none\" || ch.trim() === \"\") return ch;\n const [r, g, b] = gradientRGB(t, palette);\n if (color === \"truecolor\") return `\\x1b[38;2;${r};${g};${b}m${ch}${RESET}`;\n if (color === \"ansi256\") return `\\x1b[38;5;${rgbTo256(r, g, b)}m${ch}${RESET}`;\n return `\\x1b[${rgbTo16(r, g, b)}m${ch}${RESET}`;\n}\n\n/** Apply the left-to-right gradient across one art row (by visible column). */\nfunction colorizeRow(row: string, color: ColorMode, palette: Palette): string {\n if (color === \"none\") return row;\n const chars = [...row];\n const width = Math.max(1, chars.length - 1);\n let out = \"\";\n for (let i = 0; i < chars.length; i++) {\n out += colorChar(chars[i]!, i / width, color, palette);\n }\n return out;\n}\n\n/** A single BOLD grapheme at gradient position `t` (used by the narrow title). */\nfunction boldColorChar(ch: string, t: number, color: ColorMode, palette: Palette): string {\n if (color === \"none\") return ch;\n const [r, g, b] = gradientRGB(t, palette);\n const fg =\n color === \"truecolor\"\n ? `38;2;${r};${g};${b}`\n : color === \"ansi256\"\n ? `38;5;${rgbTo256(r, g, b)}`\n : `${rgbTo16(r, g, b)}`;\n return `\\x1b[1;${fg}m${ch}${RESET}`;\n}\n\n/**\n * The NARROW one-line title `◆ AGENT-CONNECTOR`: a colored leading diamond (the\n * palette mid stop), two spaces, then the UPPERCASED brand with each character\n * colored along the palette gradient (i → t = i/(len-1)) and bold. Under \"none\"\n * it is the plain text with ZERO ANSI. ~18 cols for \"agent-connector\", so it\n * fits any real terminal.\n */\nfunction renderTitle(name: string, color: ColorMode, palette: Palette): string {\n const upper = name.toUpperCase();\n if (color === \"none\") return `◆ ${upper}`;\n const diamond = boldColorChar(\"◆\", 0.5, color, palette);\n const chars = [...upper];\n const span = Math.max(1, chars.length - 1);\n let title = \"\";\n for (let i = 0; i < chars.length; i++) {\n title += boldColorChar(chars[i]!, i / span, color, palette);\n }\n return `${diamond} ${title}`;\n}\n\n// ─────────────────────────────────────────────────────────────────────────\n// Footer (engine attribution). Shown on BOTH the global and branded CLIs — the\n// \"powered by\" wording is intentional.\n// ─────────────────────────────────────────────────────────────────────────\n\nconst FOOTER_LINES = [\n \"powered by @ken-jo/agent-connector\",\n \"more → https://github.com/ken-jo/agent-connector\",\n] as const;\n\n/** Dim (de-emphasized) footer line; plain under \"none\". */\nfunction dim(text: string, color: ColorMode): string {\n return color === \"none\" ? text : `\\x1b[2m${text}${RESET}`;\n}\n\n/**\n * Render the full banner: a responsive brand title with a palette-driven\n * gradient, then a two-line dim footer directly below.\n *\n * • WIDE — the ANSI-Shadow block art when it fits `columns` (ONE line, never\n * stacked; `columns <= 0` = no constraint).\n * • NARROW — the one-line `◆ AGENT-CONNECTOR` gradient title (the universal\n * narrow form, ~18 cols) when the block art would overflow.\n * • `palette` defaults to PALETTES[0] so direct callers + tests are\n * deterministic; the impure app.ts wrapper rotates the palettes per run.\n * • Under `color: \"none\"` (NO_COLOR / dumb term) the output carries zero ANSI\n * escape codes — only the raw art/title + footer text.\n *\n * The result has NO trailing newline; the caller prints it with one.\n */\nexport function renderBrandBanner(name: string, opts: BannerOptions): string {\n const { color, columns } = opts;\n const palette = opts.palette ?? PALETTES[0]!;\n const footer = FOOTER_LINES.map((l) => dim(l, color)).join(\"\\n\");\n\n const art = selectWideArt(name, columns);\n const body =\n art != null\n ? art.map((row) => colorizeRow(row, color, palette)).join(\"\\n\")\n : renderTitle(name, color, palette);\n return `${body}\\n${footer}`;\n}\n"],"mappings":"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","names":[]}
@@ -2,15 +2,15 @@
2
2
  import {
3
3
  compileMatcher,
4
4
  eventMatcherSubject
5
- } from "./chunk-LAIITCMW.js";
5
+ } from "./chunk-I5TO42QC.js";
6
6
  import {
7
7
  SURFACE_PREDICATES,
8
8
  hostCanFireEvent
9
- } from "./chunk-R6LML2YS.js";
9
+ } from "./chunk-2RIFORQS.js";
10
10
  import {
11
11
  allAdapters,
12
12
  loadAdapter
13
- } from "./chunk-25CPWJA7.js";
13
+ } from "./chunk-SILKSP2Y.js";
14
14
 
15
15
  // src/sdk/test-harness.ts
16
16
  function declaredGlobalSurfaces(connector) {
@@ -383,4 +383,4 @@ export {
383
383
  simulate,
384
384
  explainHooks
385
385
  };
386
- //# sourceMappingURL=chunk-QARPXSIV.js.map
386
+ //# sourceMappingURL=chunk-P23RVIUY.js.map
@@ -8,43 +8,43 @@ var ADAPTER_REGISTRY = [
8
8
  // runtime markers are checked first during host detection (fork-before-parent).
9
9
  {
10
10
  id: "codebuddy",
11
- load: () => import("./codebuddy-RBEZGXBG.js").then((m) => m.default)
11
+ load: () => import("./codebuddy-ZNYQACMF.js").then((m) => m.default)
12
12
  },
13
13
  {
14
14
  id: "claude-code",
15
- load: () => import("./claude-code-WS4NAGZT.js").then((m) => m.default)
15
+ load: () => import("./claude-code-DUZNOAS2.js").then((m) => m.default)
16
16
  },
17
17
  {
18
18
  id: "codex",
19
- load: () => import("./codex-ZZ434GYR.js").then((m) => m.default)
19
+ load: () => import("./codex-CPNKTXG3.js").then((m) => m.default)
20
20
  },
21
21
  {
22
22
  id: "cursor",
23
- load: () => import("./cursor-AOELDNZU.js").then((m) => m.default)
23
+ load: () => import("./cursor-GSLUET3V.js").then((m) => m.default)
24
24
  },
25
25
  // vscode-copilot after cursor: cursor is a VS Code fork, so the fork's runtime
26
26
  // markers must be checked first during host detection.
27
27
  {
28
28
  id: "vscode-copilot",
29
- load: () => import("./vscode-copilot-LU5NC4ZS.js").then((m) => m.default)
29
+ load: () => import("./vscode-copilot-NIMH2DGU.js").then((m) => m.default)
30
30
  },
31
31
  {
32
32
  id: "copilot-cli",
33
- load: () => import("./copilot-cli-SMTX5F65.js").then((m) => m.default)
33
+ load: () => import("./copilot-cli-PAP377OM.js").then((m) => m.default)
34
34
  },
35
35
  {
36
36
  id: "gemini-cli",
37
- load: () => import("./gemini-cli-QGLN2UMS.js").then((m) => m.default)
37
+ load: () => import("./gemini-cli-47ZHCOZR.js").then((m) => m.default)
38
38
  },
39
39
  {
40
40
  id: "warp",
41
- load: () => import("./warp-4PPG5LOM.js").then((m) => m.default)
41
+ load: () => import("./warp-QYJGKURM.js").then((m) => m.default)
42
42
  },
43
43
  // ts-plugin paradigm: OpenCode loads a generated plugin module that bridges
44
44
  // its in-process events to the universal hook entrypoint.
45
45
  {
46
46
  id: "opencode",
47
- load: () => import("./opencode-W2RK4M7G.js").then((m) => m.default)
47
+ load: () => import("./opencode-YS4WX2E2.js").then((m) => m.default)
48
48
  },
49
49
  // mimo-code is Xiaomi's MiMoCode (@mimo-ai/cli, bin `mimo`) — an OpenCode FORK
50
50
  // (ts-plugin, MCP root key "mcp", ~/.config/mimocode/mimocode.json). Grouped
@@ -53,7 +53,7 @@ var ADAPTER_REGISTRY = [
53
53
  // constraint vs opencode (no shared config file to disambiguate).
54
54
  {
55
55
  id: "mimo-code",
56
- load: () => import("./mimo-code-G2CBZ4M6.js").then((m) => m.default)
56
+ load: () => import("./mimo-code-7R53QDHB.js").then((m) => m.default)
57
57
  },
58
58
  // kilo-cli is the SQLite-backed OpenCode FORK command-line product (ts-plugin,
59
59
  // loads @kilocode/plugin modules registered in kilo.jsonc's "plugin" array;
@@ -62,12 +62,12 @@ var ADAPTER_REGISTRY = [
62
62
  // the "kilo" extension so there is no fork-ordering constraint between them.
63
63
  {
64
64
  id: "kilo-cli",
65
- load: () => import("./kilo-cli-NMWGYF4F.js").then((m) => m.default)
65
+ load: () => import("./kilo-cli-S3GXBPAE.js").then((m) => m.default)
66
66
  },
67
67
  // Wave 1 — mcp-only adapters (no lifecycle hooks; MCP registration only).
68
68
  {
69
69
  id: "droid",
70
- load: () => import("./droid-PTCH2K7Y.js").then((m) => m.default)
70
+ load: () => import("./droid-MOKV53J4.js").then((m) => m.default)
71
71
  },
72
72
  // openhands is the All-Hands-AI OpenHands CLI (`openhands`, ex-OpenDevin) —
73
73
  // a standalone json-stdio host: MCP at ~/.openhands/mcp.json ("mcpServers",
@@ -76,18 +76,18 @@ var ADAPTER_REGISTRY = [
76
76
  // dir (~/.openhands) is distinct, so there is no fork-ordering constraint.
77
77
  {
78
78
  id: "openhands",
79
- load: () => import("./openhands-5LNH3BKB.js").then((m) => m.default)
79
+ load: () => import("./openhands-QMYIKNOS.js").then((m) => m.default)
80
80
  },
81
81
  {
82
82
  id: "roo-code",
83
- load: () => import("./roo-code-L5F7S6QH.js").then((m) => m.default)
83
+ load: () => import("./roo-code-DLPIHHQ6.js").then((m) => m.default)
84
84
  },
85
85
  // kilo is the Kilo Code VS Code extension (kilocode.kilo-code) — a Roo/Cline
86
86
  // fork, so it sits beside roo-code (mcp-only, root key "mcpServers", VS Code
87
87
  // globalStorage / .kilocode project scope). Distinct host from "kilo-cli".
88
88
  {
89
89
  id: "kilo",
90
- load: () => import("./kilo-OU2ZLZKB.js").then((m) => m.default)
90
+ load: () => import("./kilo-EMZJBEBB.js").then((m) => m.default)
91
91
  },
92
92
  // cline is the Cline VS Code extension (saoudrizwan.claude-dev) — the most-
93
93
  // installed AI coding extension and the PARENT that roo-code and kilo forked.
@@ -98,11 +98,11 @@ var ADAPTER_REGISTRY = [
98
98
  // is NO fork-before-parent ordering constraint here; it simply sits beside them.
99
99
  {
100
100
  id: "cline",
101
- load: () => import("./cline-NNMVCECA.js").then((m) => m.default)
101
+ load: () => import("./cline-25KW25IN.js").then((m) => m.default)
102
102
  },
103
103
  {
104
104
  id: "trae",
105
- load: () => import("./trae-Z7CQ2A2Q.js").then((m) => m.default)
105
+ load: () => import("./trae-UOYD6JZZ.js").then((m) => m.default)
106
106
  },
107
107
  // antigravity-cli BEFORE antigravity: the `agy` CLI is a fork of the IDE
108
108
  // adapter with its own runtime markers (the universal hook command tags the
@@ -110,69 +110,69 @@ var ADAPTER_REGISTRY = [
110
110
  // before the IDE/parent during host detection.
111
111
  {
112
112
  id: "antigravity-cli",
113
- load: () => import("./antigravity-cli-JO6GUTV7.js").then((m) => m.default)
113
+ load: () => import("./antigravity-cli-OM6SC3PE.js").then((m) => m.default)
114
114
  },
115
115
  {
116
116
  id: "antigravity",
117
- load: () => import("./antigravity-RZHN53VB.js").then((m) => m.default)
117
+ load: () => import("./antigravity-VXLDLTO7.js").then((m) => m.default)
118
118
  },
119
119
  {
120
120
  id: "zed",
121
- load: () => import("./zed-ZF2OQ75O.js").then((m) => m.default)
121
+ load: () => import("./zed-HKAZXEJW.js").then((m) => m.default)
122
122
  },
123
123
  {
124
124
  id: "amp",
125
- load: () => import("./amp-UXABVUKC.js").then((m) => m.default)
125
+ load: () => import("./amp-67BZONGF.js").then((m) => m.default)
126
126
  },
127
127
  {
128
128
  id: "codebuff",
129
- load: () => import("./codebuff-RJIDSEU3.js").then((m) => m.default)
129
+ load: () => import("./codebuff-VR6JUDIY.js").then((m) => m.default)
130
130
  },
131
131
  {
132
132
  id: "mux",
133
- load: () => import("./mux-JNM3F2NW.js").then((m) => m.default)
133
+ load: () => import("./mux-NYCNGL43.js").then((m) => m.default)
134
134
  },
135
135
  // Pi — mcp-only host with no writable MCP config; drives the Agent Skills
136
136
  // surface only (writes <piDir>/skills/<name>/SKILL.md).
137
137
  {
138
138
  id: "pi",
139
- load: () => import("./pi-BUADR5MJ.js").then((m) => m.default)
139
+ load: () => import("./pi-644FIN3A.js").then((m) => m.default)
140
140
  },
141
141
  // Wave 2 — json-stdio adapters (full hook dispatch via the universal entrypoint).
142
142
  // jetbrains-copilot before vscode-copilot is unnecessary (distinct hosts); grouped here.
143
143
  {
144
144
  id: "jetbrains-copilot",
145
- load: () => import("./jetbrains-copilot-T2EPKROP.js").then((m) => m.default)
145
+ load: () => import("./jetbrains-copilot-ZGIWI6YV.js").then((m) => m.default)
146
146
  },
147
147
  {
148
148
  id: "qwen-code",
149
- load: () => import("./qwen-code-TUJNHKNI.js").then((m) => m.default)
149
+ load: () => import("./qwen-code-STDMX7EM.js").then((m) => m.default)
150
150
  },
151
151
  {
152
152
  id: "kiro",
153
- load: () => import("./kiro-4IN5IH46.js").then((m) => m.default)
153
+ load: () => import("./kiro-BYX4HEAJ.js").then((m) => m.default)
154
154
  },
155
155
  {
156
156
  id: "kimi",
157
- load: () => import("./kimi-Z7L2LEEI.js").then((m) => m.default)
157
+ load: () => import("./kimi-IQJOIY6B.js").then((m) => m.default)
158
158
  },
159
159
  {
160
160
  id: "crush",
161
- load: () => import("./crush-NYDBHIJE.js").then((m) => m.default)
161
+ load: () => import("./crush-3AVQA4YU.js").then((m) => m.default)
162
162
  },
163
163
  // Wave 3 — json-stdio adapters with YAML config (MCP in YAML; hooks per host).
164
164
  {
165
165
  id: "goose",
166
- load: () => import("./goose-DQ6GSZ5O.js").then((m) => m.default)
166
+ load: () => import("./goose-4EI5MYTI.js").then((m) => m.default)
167
167
  },
168
168
  {
169
169
  id: "hermes",
170
- load: () => import("./hermes-E47IG63A.js").then((m) => m.default)
170
+ load: () => import("./hermes-F75OSK3Y.js").then((m) => m.default)
171
171
  },
172
172
  // Wave 4 — ts-plugin adapters (generate a bridge module to the universal entrypoint).
173
173
  {
174
174
  id: "omp",
175
- load: () => import("./omp-OOVUNXME.js").then((m) => m.default)
175
+ load: () => import("./omp-562NK5BJ.js").then((m) => m.default)
176
176
  },
177
177
  // nemoclaw BEFORE openclaw (fork-before-parent convention). NVIDIA NemoClaw
178
178
  // wraps OpenClaw and DRIVES the SAME ~/.openclaw/openclaw.json, so a NemoClaw
@@ -185,11 +185,11 @@ var ADAPTER_REGISTRY = [
185
185
  // lands in the wrapped openclaw.json.
186
186
  {
187
187
  id: "nemoclaw",
188
- load: () => import("./nemoclaw-SHA4IUML.js").then((m) => m.default)
188
+ load: () => import("./nemoclaw-WSIPSE7U.js").then((m) => m.default)
189
189
  },
190
190
  {
191
191
  id: "openclaw",
192
- load: () => import("./openclaw-BD56E5MV.js").then((m) => m.default)
192
+ load: () => import("./openclaw-7EYBQS4R.js").then((m) => m.default)
193
193
  },
194
194
  // Wave 5 — mcp-only: Amazon Q Developer CLI. JSON MCP config under ~/.aws/amazonq/
195
195
  // (user) and .amazonq/ (project); root key "mcpServers"; bare stdio entry
@@ -199,7 +199,7 @@ var ADAPTER_REGISTRY = [
199
199
  // adapter installs MCP entries + the .amazonq/rules memory surface.
200
200
  {
201
201
  id: "amazon-q",
202
- load: () => import("./amazon-q-B52EY2SV.js").then((m) => m.default)
202
+ load: () => import("./amazon-q-ETMAGY3D.js").then((m) => m.default)
203
203
  },
204
204
  // Continue (the `cn` terminal agent / Continue.dev, npm @continuedev/cli) —
205
205
  // json-stdio (Claude-compatible hooks). MCP config is YAML at ~/.continue/config.yaml (user) and
@@ -211,7 +211,7 @@ var ADAPTER_REGISTRY = [
211
211
  // fork-ordering constraint vs any sibling.
212
212
  {
213
213
  id: "continue",
214
- load: () => import("./continue-MNM7YVJY.js").then((m) => m.default)
214
+ load: () => import("./continue-WU2IB5KS.js").then((m) => m.default)
215
215
  },
216
216
  // Windsurf (Codeium / Cognition's Cascade agent) — mcp-only. USER/GLOBAL scope
217
217
  // ONLY: MCP config is JSON at ~/.codeium/windsurf/mcp_config.json (the docs
@@ -225,7 +225,7 @@ var ADAPTER_REGISTRY = [
225
225
  // memory surface. Distinct ~/.codeium marker — no fork-ordering constraint.
226
226
  {
227
227
  id: "windsurf",
228
- load: () => import("./windsurf-3T3RVXKM.js").then((m) => m.default)
228
+ load: () => import("./windsurf-75LLZ37C.js").then((m) => m.default)
229
229
  },
230
230
  // Grok CLI (the community superagent-ai/grok-cli, npm `grok-dev`, bin `grok`,
231
231
  // MIT) — json-stdio. Id is `grok-cli` (NOT `grok`) to stay distinct from xAI's
@@ -237,7 +237,7 @@ var ADAPTER_REGISTRY = [
237
237
  // sibling.
238
238
  {
239
239
  id: "grok-cli",
240
- load: () => import("./grok-cli-5QD235UB.js").then((m) => m.default)
240
+ load: () => import("./grok-cli-QYQPDSVB.js").then((m) => m.default)
241
241
  },
242
242
  // Devin CLI (Cognition) — json-stdio. A Rust binary (`devin`, installed via
243
243
  // `curl cli.devin.ai/install.sh` → ~/.local/bin/devin). MCP + hooks live in
@@ -250,7 +250,7 @@ var ADAPTER_REGISTRY = [
250
250
  // ~/.config/devin / .devin marker — no fork-ordering constraint.
251
251
  {
252
252
  id: "devin",
253
- load: () => import("./devin-PRJY2TTD.js").then((m) => m.default)
253
+ load: () => import("./devin-QMEM3OFA.js").then((m) => m.default)
254
254
  },
255
255
  // Open Interpreter (the new Rust `interpreter` / `i` CLI) — mcp-only. It is a
256
256
  // FORK of OpenAI's Codex (README: "Open Interpreter is a fork of OpenAI's
@@ -266,7 +266,7 @@ var ADAPTER_REGISTRY = [
266
266
  // wire contract is not first-party-verified, so hooks are not claimed).
267
267
  {
268
268
  id: "open-interpreter",
269
- load: () => import("./open-interpreter-4PKL56AA.js").then((m) => m.default)
269
+ load: () => import("./open-interpreter-I2CNOEXY.js").then((m) => m.default)
270
270
  },
271
271
  // Junie (JetBrains' OWN LLM-agnostic coding agent — DISTINCT from
272
272
  // jetbrains-copilot, which is GitHub Copilot in JetBrains IDEs) — mcp-only.
@@ -278,7 +278,7 @@ var ADAPTER_REGISTRY = [
278
278
  // fork-ordering constraint vs any sibling.
279
279
  {
280
280
  id: "junie",
281
- load: () => import("./junie-SQ4SDLGK.js").then((m) => m.default)
281
+ load: () => import("./junie-DIFN2P22.js").then((m) => m.default)
282
282
  },
283
283
  // mistral-vibe is Mistral's coding-agent CLI — an mcp-only host. MCP config is
284
284
  // TOML at <projectDir>/.vibe/config.toml (project, precedence) → ~/.vibe/
@@ -288,7 +288,7 @@ var ADAPTER_REGISTRY = [
288
288
  // no fork-ordering constraint.
289
289
  {
290
290
  id: "mistral-vibe",
291
- load: () => import("./mistral-vibe-TRQDHAWV.js").then((m) => m.default)
291
+ load: () => import("./mistral-vibe-LHJ55FSB.js").then((m) => m.default)
292
292
  }
293
293
  ];
294
294
  var REGISTRY_BY_ID = new Map(
@@ -314,4 +314,4 @@ export {
314
314
  loadAdapter,
315
315
  allAdapters
316
316
  };
317
- //# sourceMappingURL=chunk-25CPWJA7.js.map
317
+ //# sourceMappingURL=chunk-SILKSP2Y.js.map