@ken-jo/agent-connector 0.4.79 → 0.4.92

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 (200) hide show
  1. package/README.md +302 -561
  2. package/dist/{action-OHGFVKMC.js → action-CVIEPX4U.js} +14 -14
  3. package/dist/{amazon-q-B52EY2SV.js → amazon-q-TIT7FIW3.js} +5 -5
  4. package/dist/{amp-UXABVUKC.js → amp-NF3OAAUG.js} +5 -5
  5. package/dist/{antigravity-RZHN53VB.js → antigravity-7LPK7QOY.js} +6 -6
  6. package/dist/antigravity-cli-MDEMPPAH.js +467 -0
  7. package/dist/antigravity-cli-MDEMPPAH.js.map +1 -0
  8. package/dist/{chunk-QKLJU4JX.js → chunk-2Y2MZRLP.js} +56 -2
  9. package/dist/chunk-2Y2MZRLP.js.map +1 -0
  10. package/dist/{chunk-UBB7T54N.js → chunk-3C5AASHM.js} +3 -3
  11. package/dist/{chunk-LKAVD4HP.js → chunk-447JWFZO.js} +12 -12
  12. package/dist/{chunk-HORHRHNG.js → chunk-4NHXLXSD.js} +2 -2
  13. package/dist/chunk-5Z36KVU2.js +590 -0
  14. package/dist/chunk-5Z36KVU2.js.map +1 -0
  15. package/dist/{chunk-AY3RGRTT.js → chunk-6TF7MHG5.js} +2 -2
  16. package/dist/{chunk-AMK2K6XZ.js → chunk-7UT6OB52.js} +2 -2
  17. package/dist/{chunk-PZHB5TVA.js → chunk-AY3VFNOH.js} +5 -5
  18. package/dist/{chunk-4HVQ7IUM.js → chunk-DI5S6TXJ.js} +17 -4
  19. package/dist/chunk-DI5S6TXJ.js.map +1 -0
  20. package/dist/{chunk-ZXX5DVSE.js → chunk-FBCBHEGB.js} +8 -8
  21. package/dist/{chunk-4NSU3KWX.js → chunk-FJCUKXGX.js} +2 -2
  22. package/dist/{chunk-S4E6QQEM.js → chunk-FO5CEXXN.js} +7 -2
  23. package/dist/chunk-FO5CEXXN.js.map +1 -0
  24. package/dist/{chunk-IXOQDZWC.js → chunk-GZGLCCEE.js} +5 -1
  25. package/dist/chunk-GZGLCCEE.js.map +1 -0
  26. package/dist/{chunk-UYZ53KWS.js → chunk-IBLYVAWH.js} +31 -9
  27. package/dist/chunk-IBLYVAWH.js.map +1 -0
  28. package/dist/{chunk-4FWETID5.js → chunk-IVAWP6HH.js} +2 -2
  29. package/dist/{chunk-NBUEL74R.js → chunk-JFXL4HYA.js} +3 -3
  30. package/dist/{chunk-VD4EG6SG.js → chunk-JO2IM2JL.js} +538 -226
  31. package/dist/chunk-JO2IM2JL.js.map +1 -0
  32. package/dist/{chunk-7NXEHZAK.js → chunk-JVO6NBTT.js} +3 -3
  33. package/dist/{chunk-X457NOFE.js → chunk-KA55FISM.js} +116 -36
  34. package/dist/chunk-KA55FISM.js.map +1 -0
  35. package/dist/{chunk-YJP3KGLM.js → chunk-L26PSQTY.js} +4 -4
  36. package/dist/{chunk-YYNXIUR2.js → chunk-M2H7JURF.js} +2 -2
  37. package/dist/{chunk-56R2ER7K.js → chunk-NBYKLUF6.js} +2 -2
  38. package/dist/{chunk-IRUYJD23.js → chunk-NLE2J5P4.js} +1 -1
  39. package/dist/{chunk-VVFDU4IX.js → chunk-WFEHWTLM.js} +12 -5
  40. package/dist/{chunk-VVFDU4IX.js.map → chunk-WFEHWTLM.js.map} +1 -1
  41. package/dist/{chunk-LN76OGNR.js → chunk-Z2MRSS2I.js} +2 -2
  42. package/dist/{claude-code-T6ZRCMA7.js → claude-code-7RS4YVGZ.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-BZQAUYPC.js} +5 -5
  46. package/dist/codebuddy-G42IKGKB.js +643 -0
  47. package/dist/codebuddy-G42IKGKB.js.map +1 -0
  48. package/dist/{codebuff-RJIDSEU3.js → codebuff-5RLTLZAU.js} +5 -5
  49. package/dist/{codex-RHKQKNNG.js → codex-XHAMJILX.js} +14 -8
  50. package/dist/{codex-RHKQKNNG.js.map → codex-XHAMJILX.js.map} +1 -1
  51. package/dist/{continue-MNM7YVJY.js → continue-JLIB7R7X.js} +6 -6
  52. package/dist/{copilot-cli-SMTX5F65.js → copilot-cli-XZSUYNQZ.js} +5 -5
  53. package/dist/{crush-NYDBHIJE.js → crush-ESERLVLT.js} +5 -5
  54. package/dist/{cursor-AOELDNZU.js → cursor-FUDOV5VK.js} +6 -6
  55. package/dist/{detect-ALAKE54S.js → detect-Z5BDTY6B.js} +4 -4
  56. package/dist/devin-Y7PWKVHY.js +510 -0
  57. package/dist/devin-Y7PWKVHY.js.map +1 -0
  58. package/dist/{doctor-UNF7FCF4.js → doctor-GAP27PP2.js} +27 -23
  59. package/dist/doctor-GAP27PP2.js.map +1 -0
  60. package/dist/{droid-PTCH2K7Y.js → droid-DTO5POTK.js} +5 -5
  61. package/dist/{gemini-cli-QGLN2UMS.js → gemini-cli-RBIG6U2F.js} +5 -5
  62. package/dist/{goose-DQ6GSZ5O.js → goose-VGNOP5J2.js} +6 -6
  63. package/dist/grok-cli-2RFBK6J3.js +482 -0
  64. package/dist/grok-cli-2RFBK6J3.js.map +1 -0
  65. package/dist/{hermes-E47IG63A.js → hermes-NUKFWZI5.js} +6 -6
  66. package/dist/{hook-GM2IDA3C.js → hook-XPR3AHDI.js} +14 -14
  67. package/dist/index.d.ts +2 -2
  68. package/dist/index.js +5 -5
  69. package/dist/install-O32TDIZP.js +382 -0
  70. package/dist/install-O32TDIZP.js.map +1 -0
  71. package/dist/{introspect-5o5ick0_.d.ts → introspect-BkId4LGP.d.ts} +1 -1
  72. package/dist/{jetbrains-copilot-4IOT3I2Y.js → jetbrains-copilot-FXZ5AOTS.js} +31 -9
  73. package/dist/jetbrains-copilot-FXZ5AOTS.js.map +1 -0
  74. package/dist/junie-TSXIZSCE.js +227 -0
  75. package/dist/junie-TSXIZSCE.js.map +1 -0
  76. package/dist/{kilo-TAHOPT2Q.js → kilo-JLH3KVZJ.js} +8 -8
  77. package/dist/{kilo-cli-X4NPJWGX.js → kilo-cli-5W36VJQZ.js} +8 -8
  78. package/dist/{kimi-Z7L2LEEI.js → kimi-R62W7HKZ.js} +5 -5
  79. package/dist/{kiro-YZ4TTZGD.js → kiro-AUJMGIBL.js} +81 -6
  80. package/dist/kiro-AUJMGIBL.js.map +1 -0
  81. package/dist/{leaderboard-DVW4WYJ6.js → leaderboard-YWMOSJBC.js} +7 -7
  82. package/dist/{mimo-code-G2CBZ4M6.js → mimo-code-PGLFFVER.js} +5 -5
  83. package/dist/mistral-vibe-36CZVQNQ.js +300 -0
  84. package/dist/mistral-vibe-36CZVQNQ.js.map +1 -0
  85. package/dist/{mux-JNM3F2NW.js → mux-HWL4N5KH.js} +5 -5
  86. package/dist/{nemoclaw-SHA4IUML.js → nemoclaw-QPHETUXM.js} +6 -6
  87. package/dist/{omp-OOVUNXME.js → omp-3TFMTJ5U.js} +5 -5
  88. package/dist/open-interpreter-UTBKE2EH.js +264 -0
  89. package/dist/open-interpreter-UTBKE2EH.js.map +1 -0
  90. package/dist/openclaw-RYFO5TLY.js +17 -0
  91. package/dist/{opencode-W2RK4M7G.js → opencode-JX7GBE5Q.js} +5 -5
  92. package/dist/openhands-AZW4PXJ3.js +384 -0
  93. package/dist/openhands-AZW4PXJ3.js.map +1 -0
  94. package/dist/{package-H5V3AZHR.js → package-2KKUGZFS.js} +13 -13
  95. package/dist/{pi-I7BLL4EI.js → pi-MRI3EBWU.js} +143 -6
  96. package/dist/pi-MRI3EBWU.js.map +1 -0
  97. package/dist/{qwen-code-JG7AF442.js → qwen-code-ISR6BEET.js} +9 -9
  98. package/dist/{roo-code-L5F7S6QH.js → roo-code-6TSCME4R.js} +5 -5
  99. package/dist/runtime/index.d.ts +1 -1
  100. package/dist/runtime/index.js +12 -12
  101. package/dist/sdk/index.d.ts +3 -3
  102. package/dist/sdk/index.js +6 -6
  103. package/dist/sdk/test.d.ts +2 -2
  104. package/dist/sdk/test.js +10 -10
  105. package/dist/{serve-WMO2TUW3.js → serve-EPRN7F2X.js} +14 -14
  106. package/dist/{status-WRLBTBRE.js → status-B2PG6YKR.js} +11 -11
  107. package/dist/{statusline-EUD4DMIP.js → statusline-5ERFMYSM.js} +13 -13
  108. package/dist/{telemetry-U3LGMR3D.js → telemetry-ZMCAWBWB.js} +10 -10
  109. package/dist/{trae-Z7CQ2A2Q.js → trae-7KDCYIMN.js} +5 -5
  110. package/dist/{types-D6RWGXm1.d.ts → types-D0RqWxT8.d.ts} +53 -9
  111. package/dist/{uninstall-TWPUEJEC.js → uninstall-M76BHLTH.js} +37 -27
  112. package/dist/uninstall-M76BHLTH.js.map +1 -0
  113. package/dist/{upgrade-EM6Y7QLH.js → upgrade-JLSCNAQA.js} +25 -19
  114. package/dist/upgrade-JLSCNAQA.js.map +1 -0
  115. package/dist/{usage-3HQDTXGY.js → usage-5I72HWCR.js} +3 -3
  116. package/dist/{usage-event-DWIGKO7V.js → usage-event-HIX4ZI45.js} +13 -13
  117. package/dist/{vscode-copilot-LU5NC4ZS.js → vscode-copilot-LILHAPJI.js} +20 -5
  118. package/dist/vscode-copilot-LILHAPJI.js.map +1 -0
  119. package/dist/{warp-4PPG5LOM.js → warp-KJUCWEA3.js} +5 -5
  120. package/dist/{windsurf-3T3RVXKM.js → windsurf-5TGGQR5I.js} +5 -5
  121. package/dist/{zed-LLOAUXSA.js → zed-EL3JCZ25.js} +123 -7
  122. package/dist/zed-EL3JCZ25.js.map +1 -0
  123. package/package.json +1 -1
  124. package/dist/antigravity-cli-KODEKUTM.js +0 -87
  125. package/dist/antigravity-cli-KODEKUTM.js.map +0 -1
  126. package/dist/chunk-4HVQ7IUM.js.map +0 -1
  127. package/dist/chunk-IXOQDZWC.js.map +0 -1
  128. package/dist/chunk-QKLJU4JX.js.map +0 -1
  129. package/dist/chunk-S4E6QQEM.js.map +0 -1
  130. package/dist/chunk-UYZ53KWS.js.map +0 -1
  131. package/dist/chunk-VD4EG6SG.js.map +0 -1
  132. package/dist/chunk-VKRGQLY4.js +0 -201
  133. package/dist/chunk-VKRGQLY4.js.map +0 -1
  134. package/dist/chunk-X457NOFE.js.map +0 -1
  135. package/dist/doctor-UNF7FCF4.js.map +0 -1
  136. package/dist/install-7O4XWH7T.js +0 -96
  137. package/dist/install-7O4XWH7T.js.map +0 -1
  138. package/dist/jetbrains-copilot-4IOT3I2Y.js.map +0 -1
  139. package/dist/kiro-YZ4TTZGD.js.map +0 -1
  140. package/dist/openclaw-BD56E5MV.js +0 -17
  141. package/dist/pi-I7BLL4EI.js.map +0 -1
  142. package/dist/uninstall-TWPUEJEC.js.map +0 -1
  143. package/dist/upgrade-EM6Y7QLH.js.map +0 -1
  144. package/dist/vscode-copilot-LU5NC4ZS.js.map +0 -1
  145. package/dist/zed-LLOAUXSA.js.map +0 -1
  146. /package/dist/{action-OHGFVKMC.js.map → action-CVIEPX4U.js.map} +0 -0
  147. /package/dist/{amazon-q-B52EY2SV.js.map → amazon-q-TIT7FIW3.js.map} +0 -0
  148. /package/dist/{amp-UXABVUKC.js.map → amp-NF3OAAUG.js.map} +0 -0
  149. /package/dist/{antigravity-RZHN53VB.js.map → antigravity-7LPK7QOY.js.map} +0 -0
  150. /package/dist/{chunk-UBB7T54N.js.map → chunk-3C5AASHM.js.map} +0 -0
  151. /package/dist/{chunk-LKAVD4HP.js.map → chunk-447JWFZO.js.map} +0 -0
  152. /package/dist/{chunk-HORHRHNG.js.map → chunk-4NHXLXSD.js.map} +0 -0
  153. /package/dist/{chunk-AY3RGRTT.js.map → chunk-6TF7MHG5.js.map} +0 -0
  154. /package/dist/{chunk-AMK2K6XZ.js.map → chunk-7UT6OB52.js.map} +0 -0
  155. /package/dist/{chunk-PZHB5TVA.js.map → chunk-AY3VFNOH.js.map} +0 -0
  156. /package/dist/{chunk-ZXX5DVSE.js.map → chunk-FBCBHEGB.js.map} +0 -0
  157. /package/dist/{chunk-4NSU3KWX.js.map → chunk-FJCUKXGX.js.map} +0 -0
  158. /package/dist/{chunk-4FWETID5.js.map → chunk-IVAWP6HH.js.map} +0 -0
  159. /package/dist/{chunk-NBUEL74R.js.map → chunk-JFXL4HYA.js.map} +0 -0
  160. /package/dist/{chunk-7NXEHZAK.js.map → chunk-JVO6NBTT.js.map} +0 -0
  161. /package/dist/{chunk-YJP3KGLM.js.map → chunk-L26PSQTY.js.map} +0 -0
  162. /package/dist/{chunk-YYNXIUR2.js.map → chunk-M2H7JURF.js.map} +0 -0
  163. /package/dist/{chunk-56R2ER7K.js.map → chunk-NBYKLUF6.js.map} +0 -0
  164. /package/dist/{chunk-IRUYJD23.js.map → chunk-NLE2J5P4.js.map} +0 -0
  165. /package/dist/{chunk-LN76OGNR.js.map → chunk-Z2MRSS2I.js.map} +0 -0
  166. /package/dist/{claude-code-T6ZRCMA7.js.map → claude-code-7RS4YVGZ.js.map} +0 -0
  167. /package/dist/{cline-NNMVCECA.js.map → cline-BZQAUYPC.js.map} +0 -0
  168. /package/dist/{codebuff-RJIDSEU3.js.map → codebuff-5RLTLZAU.js.map} +0 -0
  169. /package/dist/{continue-MNM7YVJY.js.map → continue-JLIB7R7X.js.map} +0 -0
  170. /package/dist/{copilot-cli-SMTX5F65.js.map → copilot-cli-XZSUYNQZ.js.map} +0 -0
  171. /package/dist/{crush-NYDBHIJE.js.map → crush-ESERLVLT.js.map} +0 -0
  172. /package/dist/{cursor-AOELDNZU.js.map → cursor-FUDOV5VK.js.map} +0 -0
  173. /package/dist/{detect-ALAKE54S.js.map → detect-Z5BDTY6B.js.map} +0 -0
  174. /package/dist/{droid-PTCH2K7Y.js.map → droid-DTO5POTK.js.map} +0 -0
  175. /package/dist/{gemini-cli-QGLN2UMS.js.map → gemini-cli-RBIG6U2F.js.map} +0 -0
  176. /package/dist/{goose-DQ6GSZ5O.js.map → goose-VGNOP5J2.js.map} +0 -0
  177. /package/dist/{hermes-E47IG63A.js.map → hermes-NUKFWZI5.js.map} +0 -0
  178. /package/dist/{hook-GM2IDA3C.js.map → hook-XPR3AHDI.js.map} +0 -0
  179. /package/dist/{kilo-TAHOPT2Q.js.map → kilo-JLH3KVZJ.js.map} +0 -0
  180. /package/dist/{kilo-cli-X4NPJWGX.js.map → kilo-cli-5W36VJQZ.js.map} +0 -0
  181. /package/dist/{kimi-Z7L2LEEI.js.map → kimi-R62W7HKZ.js.map} +0 -0
  182. /package/dist/{leaderboard-DVW4WYJ6.js.map → leaderboard-YWMOSJBC.js.map} +0 -0
  183. /package/dist/{mimo-code-G2CBZ4M6.js.map → mimo-code-PGLFFVER.js.map} +0 -0
  184. /package/dist/{mux-JNM3F2NW.js.map → mux-HWL4N5KH.js.map} +0 -0
  185. /package/dist/{nemoclaw-SHA4IUML.js.map → nemoclaw-QPHETUXM.js.map} +0 -0
  186. /package/dist/{omp-OOVUNXME.js.map → omp-3TFMTJ5U.js.map} +0 -0
  187. /package/dist/{openclaw-BD56E5MV.js.map → openclaw-RYFO5TLY.js.map} +0 -0
  188. /package/dist/{opencode-W2RK4M7G.js.map → opencode-JX7GBE5Q.js.map} +0 -0
  189. /package/dist/{package-H5V3AZHR.js.map → package-2KKUGZFS.js.map} +0 -0
  190. /package/dist/{qwen-code-JG7AF442.js.map → qwen-code-ISR6BEET.js.map} +0 -0
  191. /package/dist/{roo-code-L5F7S6QH.js.map → roo-code-6TSCME4R.js.map} +0 -0
  192. /package/dist/{serve-WMO2TUW3.js.map → serve-EPRN7F2X.js.map} +0 -0
  193. /package/dist/{status-WRLBTBRE.js.map → status-B2PG6YKR.js.map} +0 -0
  194. /package/dist/{statusline-EUD4DMIP.js.map → statusline-5ERFMYSM.js.map} +0 -0
  195. /package/dist/{telemetry-U3LGMR3D.js.map → telemetry-ZMCAWBWB.js.map} +0 -0
  196. /package/dist/{trae-Z7CQ2A2Q.js.map → trae-7KDCYIMN.js.map} +0 -0
  197. /package/dist/{usage-3HQDTXGY.js.map → usage-5I72HWCR.js.map} +0 -0
  198. /package/dist/{usage-event-DWIGKO7V.js.map → usage-event-HIX4ZI45.js.map} +0 -0
  199. /package/dist/{warp-4PPG5LOM.js.map → warp-KJUCWEA3.js.map} +0 -0
  200. /package/dist/{windsurf-3T3RVXKM.js.map → windsurf-5TGGQR5I.js.map} +0 -0
@@ -0,0 +1,482 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ normalizeSessionSource
4
+ } from "./chunk-H53QZQJI.js";
5
+ import {
6
+ resolveEnvRefsDeep
7
+ } from "./chunk-BEFVJ2OE.js";
8
+ import {
9
+ BaseAdapter
10
+ } from "./chunk-WFEHWTLM.js";
11
+ import {
12
+ buildWrappedStdio,
13
+ isHomeBinHookCommand
14
+ } from "./chunk-4NHXLXSD.js";
15
+ import "./chunk-M2H7JURF.js";
16
+ import "./chunk-GZGLCCEE.js";
17
+
18
+ // src/adapters/grok-cli/index.ts
19
+ import { existsSync } from "fs";
20
+ import { homedir } from "os";
21
+ import { join } from "path";
22
+ var HOST = "grok-cli";
23
+ var SUPPORTED_EVENTS = /* @__PURE__ */ new Set([
24
+ "PreToolUse",
25
+ "PostToolUse",
26
+ "PostToolUseFailure",
27
+ "UserPromptSubmit",
28
+ "SessionStart",
29
+ "SessionEnd",
30
+ "Stop",
31
+ "SubagentStart",
32
+ "SubagentStop",
33
+ "PreCompact",
34
+ "PostCompact",
35
+ "Notification"
36
+ ]);
37
+ var GrokCliAdapter = class extends BaseAdapter {
38
+ id = HOST;
39
+ name = "Grok CLI";
40
+ paradigm = "json-stdio";
41
+ capabilities = {
42
+ // Memory surface: Grok reads AGENTS.md ("merged from git root down to your
43
+ // cwd; AGENTS.override.md wins per directory" — README). The BaseAdapter
44
+ // AGENTS.md-first default handles it.
45
+ supportsMemory: true,
46
+ preToolUse: true,
47
+ postToolUse: true,
48
+ postToolUseFailure: true,
49
+ userPromptSubmit: true,
50
+ sessionStart: true,
51
+ sessionEnd: true,
52
+ stop: true,
53
+ notification: true,
54
+ preCompact: true,
55
+ // Grok fires PostCompact (its HOOK_EVENTS lists it beside PreCompact).
56
+ postCompact: true,
57
+ // Grok fires SubagentStart AND SubagentStop (both in HOOK_EVENTS).
58
+ subagentStart: true,
59
+ subagentStop: true,
60
+ // No PermissionRequest event in Grok's HOOK_EVENTS → warn/skip at install.
61
+ // Grok's reply protocol is block/approve/context only — it cannot rewrite
62
+ // tool args or already-emitted output.
63
+ canModifyArgs: false,
64
+ canModifyOutput: false,
65
+ // Grok injects `additionalContext` from a hook's stdout JSON.
66
+ canInjectSessionContext: true,
67
+ // Grok's settings.json hook keys are free-form event names (its HOOK_EVENTS
68
+ // superset includes StopFailure/TaskCreated/TaskCompleted/InstructionsLoaded/
69
+ // CwdChanged with no canonical analog), so any host event declared under
70
+ // platforms["grok-cli"].nativeHooks installs verbatim.
71
+ supportsNativeHooks: true,
72
+ // MCP entry supports stdio + remote (http / sse) per McpServerConfig.transport.
73
+ transports: ["stdio", "http", "sse"]
74
+ };
75
+ // ── Detection ────────────────────────────────────────────────────────────
76
+ detectInstalled(_projectDir) {
77
+ const userDir = join(homedir(), ".grok");
78
+ const userSettings = join(userDir, "user-settings.json");
79
+ const installed = existsSync(userDir) || existsSync(userSettings);
80
+ return {
81
+ id: this.id,
82
+ name: this.name,
83
+ installed,
84
+ paradigm: this.paradigm,
85
+ capabilities: this.capabilities,
86
+ // MCP + hooks both live in user-settings.json (user scope only).
87
+ configPath: userSettings,
88
+ scope: "user",
89
+ reason: installed ? `found Grok CLI config at ${userSettings}` : `no Grok CLI config at ${userDir}`,
90
+ confidence: installed ? "high" : "low"
91
+ };
92
+ }
93
+ // ── Native paths ───────────────────────────────────────────────────────────
94
+ // BOTH MCP servers (mcp.servers array) and hooks (top-level hooks map) live in
95
+ // the SAME user-settings.json. Project .grok/settings.json holds neither, so
96
+ // every scope resolves to the user file.
97
+ getConfigDir(_ctx) {
98
+ return join(homedir(), ".grok");
99
+ }
100
+ getServerConfigPath(ctx) {
101
+ return join(this.getConfigDir(ctx), "user-settings.json");
102
+ }
103
+ getHookConfigPath(ctx) {
104
+ return join(this.getConfigDir(ctx), "user-settings.json");
105
+ }
106
+ // ── MCP server install / uninstall (JSON — nested mcp.servers ARRAY) ───────
107
+ installServer(ctx) {
108
+ const { connector, dryRun } = ctx;
109
+ const path = this.getServerConfigPath(ctx);
110
+ const override = connector.platforms[HOST]?.server;
111
+ if (!connector.server || override === false) {
112
+ return [
113
+ {
114
+ platform: this.id,
115
+ action: "skip",
116
+ path,
117
+ detail: connector.server ? "server registration disabled for grok-cli" : "connector declares no MCP server"
118
+ }
119
+ ];
120
+ }
121
+ const symlink = this.symlinkPathWarning(path);
122
+ if (symlink) return [symlink];
123
+ const server = override && typeof override === "object" ? { ...connector.server, ...override } : connector.server;
124
+ const entry = this.renderServerEntry(ctx, server);
125
+ if (this.isPresentButUnparseable(path)) {
126
+ return [
127
+ {
128
+ platform: this.id,
129
+ action: "warn",
130
+ path,
131
+ detail: `existing ${path} is not parseable; left untouched (back it up / fix it, then re-run)`
132
+ }
133
+ ];
134
+ }
135
+ const cfg = this.readJson(path) ?? {};
136
+ const existingMcp = cfg.mcp;
137
+ if (existingMcp !== void 0 && (typeof existingMcp !== "object" || Array.isArray(existingMcp))) {
138
+ return [{ platform: this.id, action: "warn", path, detail: "mcp is not an object \u2014 left untouched (manual fix needed)" }];
139
+ }
140
+ const existingServers = existingMcp?.servers;
141
+ if (existingServers !== void 0 && !Array.isArray(existingServers)) {
142
+ return [{ platform: this.id, action: "warn", path, detail: "mcp.servers is not an array \u2014 left untouched (manual fix needed)" }];
143
+ }
144
+ const list = Array.isArray(existingServers) ? [...existingServers] : [];
145
+ const idx = list.findIndex((e) => e?.id === connector.id);
146
+ let action;
147
+ if (idx < 0) {
148
+ list.push(entry);
149
+ action = "create";
150
+ } else if (JSON.stringify(list[idx]) === JSON.stringify(entry)) {
151
+ action = "skip";
152
+ } else {
153
+ list[idx] = entry;
154
+ action = "update";
155
+ }
156
+ if (action !== "skip") {
157
+ cfg.mcp = { ...existingMcp ?? {}, servers: list };
158
+ this.writeJson(path, cfg, dryRun);
159
+ }
160
+ return [{ platform: this.id, action, path, detail: `mcp.servers[id=${connector.id}]` }];
161
+ }
162
+ uninstallServer(ctx) {
163
+ const { connector, dryRun } = ctx;
164
+ const path = this.getServerConfigPath(ctx);
165
+ const symlink = this.symlinkPathWarning(path);
166
+ if (symlink) return [symlink];
167
+ const cfg = this.readJson(path);
168
+ const rawList = cfg?.mcp?.servers;
169
+ if (!cfg || !Array.isArray(rawList)) {
170
+ return [{ platform: this.id, action: "skip", path, detail: `mcp.servers[id=${connector.id}] absent` }];
171
+ }
172
+ const list = rawList;
173
+ const kept = list.filter((e) => e?.id !== connector.id);
174
+ if (kept.length === list.length) {
175
+ return [{ platform: this.id, action: "skip", path, detail: `mcp.servers[id=${connector.id}] absent` }];
176
+ }
177
+ cfg.mcp = { ...cfg.mcp, servers: kept };
178
+ this.writeJson(path, cfg, dryRun);
179
+ return [{ platform: this.id, action: "remove", path, detail: `mcp.servers[id=${connector.id}]` }];
180
+ }
181
+ /** Render a normalized ServerDef into Grok's native McpServerConfig entry. */
182
+ renderServerEntry(ctx, server) {
183
+ const transport = server.transport;
184
+ const enabled = server.enabled !== false;
185
+ const id = ctx.connector.id;
186
+ const label = ctx.connector.displayName?.trim() || id;
187
+ if (transport === "stdio") {
188
+ let command = server.command ?? "";
189
+ let args = [...server.args ?? []];
190
+ ({ command, args } = buildWrappedStdio(ctx, server, this.id, command, args));
191
+ const entry2 = {
192
+ id,
193
+ label,
194
+ enabled,
195
+ transport: "stdio",
196
+ command: resolveEnvRefsDeep(command)
197
+ };
198
+ if (args.length > 0) entry2.args = resolveEnvRefsDeep(args);
199
+ const env = this.renderEnv(server.env);
200
+ if (env) entry2.env = env;
201
+ if (typeof server.cwd === "string" && server.cwd.length > 0) {
202
+ entry2.cwd = resolveEnvRefsDeep(server.cwd);
203
+ }
204
+ return entry2;
205
+ }
206
+ const entry = {
207
+ id,
208
+ label,
209
+ enabled,
210
+ transport: transport === "sse" ? "sse" : "http",
211
+ url: resolveEnvRefsDeep(server.url ?? "")
212
+ };
213
+ const headers = this.renderEnv(server.headers);
214
+ if (headers) entry.headers = headers;
215
+ return entry;
216
+ }
217
+ /**
218
+ * Render env/header values. Grok documents no native ${VAR} server
219
+ * interpolation, so resolve `${env:VAR}` references to literals at install
220
+ * time (the safe path; matches continue/droid).
221
+ */
222
+ renderEnv(env) {
223
+ if (!env || Object.keys(env).length === 0) return void 0;
224
+ return resolveEnvRefsDeep({ ...env });
225
+ }
226
+ // ── Hook install / uninstall (top-level hooks, Claude nested-rule shape) ───
227
+ installHooks(ctx) {
228
+ const { connector } = ctx;
229
+ const override = connector.platforms[HOST];
230
+ const normalizedEvents = override?.hooks === false ? [] : connector.hookEvents;
231
+ const nativeHooks = override?.nativeHooks ?? {};
232
+ const nativeEvents = Object.keys(nativeHooks);
233
+ if (normalizedEvents.length === 0 && nativeEvents.length === 0) {
234
+ return [
235
+ {
236
+ platform: this.id,
237
+ action: "skip",
238
+ detail: override?.hooks === false ? "hooks disabled for grok-cli" : "connector declares no hooks"
239
+ }
240
+ ];
241
+ }
242
+ const pending = normalizedEvents.map((event) => ({
243
+ event,
244
+ matcher: connector.hooks[event]?.matcher ?? ""
245
+ }));
246
+ const native = nativeEvents.map((event) => ({
247
+ event,
248
+ matcher: nativeHooks[event]?.matcher ?? ""
249
+ }));
250
+ return this.upsertHookEntries(
251
+ ctx,
252
+ this.getHookConfigPath(ctx),
253
+ pending,
254
+ this.hookDescriptor(ctx),
255
+ native
256
+ );
257
+ }
258
+ uninstallHooks(ctx) {
259
+ return this.removeHookEntries(ctx, this.getHookConfigPath(ctx), this.hookDescriptor(ctx));
260
+ }
261
+ /**
262
+ * Grok's hook-merge descriptor (NESTED shape `{ matcher?, hooks: [...] }`).
263
+ * Connector-generic ownership (any of our home-bin commands in the inner
264
+ * `hooks`), matching droid:
265
+ * - mapEvent drops events outside SUPPORTED_EVENTS (Grok has no
266
+ * PermissionRequest); supported events map 1:1 (PascalCase identical);
267
+ * - the native pass installs free-form host-only event keys verbatim;
268
+ * - uninstall = inner-strip ONLY (ownsEntryForRemove never-true).
269
+ */
270
+ hookDescriptor(ctx) {
271
+ const stripInner = (c) => (entry) => {
272
+ const innerBefore = entry.hooks?.length ?? 0;
273
+ const inner = (entry.hooks ?? []).filter((h) => !this.isOurCommand(h.command, c));
274
+ return {
275
+ next: inner.length > 0 ? { matcher: entry.matcher ?? "", hooks: inner } : null,
276
+ removed: innerBefore - inner.length
277
+ };
278
+ };
279
+ return {
280
+ mapEvent: (e) => SUPPORTED_EVENTS.has(e) ? e : void 0,
281
+ unmappedWarnDetail: (e) => `${e} has no Grok CLI hook equivalent \u2014 skipped`,
282
+ renderEntry: (_event, matcher, command) => ({
283
+ matcher,
284
+ hooks: [{ type: "command", command }]
285
+ }),
286
+ entryOwnsCommand: (entry, _command) => (entry.hooks ?? []).some((h) => this.isOurCommand(h.command, ctx)),
287
+ nativeOwnsCommand: (entry, command) => (entry.hooks ?? []).some((h) => h.command === command),
288
+ ownsEntryForRemove: () => () => false,
289
+ stripInner,
290
+ skipDetail: (event) => `hooks.${event} already registered`,
291
+ removeDetail: (event, removed) => `hooks.${event} (${removed})`,
292
+ nativeSkipDetail: (event) => `hooks.${event} already registered (native)`,
293
+ nativeMutateDetail: (event) => `hooks.${event} (native)`,
294
+ absentDetail: "no hooks section present",
295
+ noMatchDetail: "no matching hook entries"
296
+ };
297
+ }
298
+ /** True when a hook command references our home binary AND this connector id. */
299
+ isOurCommand(command, ctx) {
300
+ return isHomeBinHookCommand(command, ctx.homeBinPath, ctx.connector.id);
301
+ }
302
+ // ── Diagnostics ──────────────────────────────────────────────────────────
303
+ getHealthChecks(ctx) {
304
+ const path = this.getServerConfigPath(ctx);
305
+ const connectorId = ctx.connector.id;
306
+ const homeBin = ctx.homeBinPath;
307
+ const hookEvents = ctx.connector.hookEvents;
308
+ return [
309
+ {
310
+ name: `${this.name}: user-settings.json present`,
311
+ check: () => existsSync(path) ? { status: "OK", detail: path } : { status: "FAIL", detail: `not found: ${path}` }
312
+ },
313
+ {
314
+ name: `${this.name}: server entry registered`,
315
+ check: () => {
316
+ if (!ctx.connector.server) {
317
+ return { status: "OK", detail: "no MCP server declared" };
318
+ }
319
+ const cfg = this.readJson(path);
320
+ const list = cfg?.mcp?.servers;
321
+ if (!cfg || !Array.isArray(list)) {
322
+ return { status: "FAIL", detail: `no mcp.servers array in ${path}` };
323
+ }
324
+ return list.some((e) => e?.id === connectorId) ? { status: "OK", detail: `mcp.servers[id=${connectorId}] present` } : { status: "FAIL", detail: `no mcp.servers[id=${connectorId}] in ${path}` };
325
+ }
326
+ },
327
+ {
328
+ name: `${this.name}: hook command registered`,
329
+ check: () => {
330
+ if (hookEvents.length === 0) {
331
+ return { status: "OK", detail: "no hooks declared" };
332
+ }
333
+ const cfg = this.readJson(path);
334
+ const hooks = cfg?.hooks ?? {};
335
+ const registered = Object.values(hooks).some(
336
+ (entries) => (entries ?? []).some(
337
+ (e) => (e.hooks ?? []).some((h) => isHomeBinHookCommand(h.command, homeBin, connectorId))
338
+ )
339
+ );
340
+ return registered ? { status: "OK", detail: "hook command present" } : { status: "FAIL", detail: `no hook for ${connectorId} in ${path}` };
341
+ }
342
+ }
343
+ ];
344
+ }
345
+ // ── Runtime: parse Grok stdin JSON → normalized event ──────────────────────
346
+ parseEvent(event, raw) {
347
+ const input = raw ?? {};
348
+ const connectorId = typeof input.connector === "string" ? input.connector : "";
349
+ const sessionId = typeof input.session_id === "string" ? input.session_id : "";
350
+ const projectDir = typeof input.cwd === "string" ? input.cwd : void 0;
351
+ const base = {
352
+ hostPlatform: HOST,
353
+ connectorId,
354
+ sessionId,
355
+ raw,
356
+ ...projectDir !== void 0 ? { projectDir } : {}
357
+ };
358
+ switch (event) {
359
+ case "PreToolUse": {
360
+ const ev = {
361
+ ...base,
362
+ toolName: typeof input.tool_name === "string" ? input.tool_name : "",
363
+ toolInput: input.tool_input ?? {}
364
+ };
365
+ return ev;
366
+ }
367
+ case "PostToolUse": {
368
+ const ev = {
369
+ ...base,
370
+ toolName: typeof input.tool_name === "string" ? input.tool_name : "",
371
+ toolInput: input.tool_input ?? {},
372
+ ...toolOutputToString(input.tool_output) !== void 0 ? { toolOutput: toolOutputToString(input.tool_output) } : {}
373
+ };
374
+ return ev;
375
+ }
376
+ case "PostToolUseFailure": {
377
+ const ev = {
378
+ ...base,
379
+ toolName: typeof input.tool_name === "string" ? input.tool_name : "",
380
+ toolInput: input.tool_input ?? {},
381
+ error: typeof input.error === "string" ? input.error : ""
382
+ };
383
+ return ev;
384
+ }
385
+ case "UserPromptSubmit": {
386
+ const ev = {
387
+ ...base,
388
+ prompt: typeof input.user_prompt === "string" ? input.user_prompt : ""
389
+ };
390
+ return ev;
391
+ }
392
+ case "SessionStart": {
393
+ const ev = {
394
+ ...base,
395
+ source: normalizeSessionSource(input.source)
396
+ };
397
+ return ev;
398
+ }
399
+ case "SessionEnd": {
400
+ const ev = { ...base };
401
+ return ev;
402
+ }
403
+ case "Stop": {
404
+ const ev = { ...base };
405
+ return ev;
406
+ }
407
+ case "Notification": {
408
+ const ev = {
409
+ ...base,
410
+ message: typeof input.message === "string" ? input.message : ""
411
+ };
412
+ return ev;
413
+ }
414
+ case "PreCompact": {
415
+ const ev = {
416
+ ...base,
417
+ ...input.trigger === "auto" || input.trigger === "manual" ? { trigger: input.trigger } : {}
418
+ };
419
+ return ev;
420
+ }
421
+ case "PostCompact": {
422
+ const ev = {
423
+ ...base,
424
+ ...input.trigger === "auto" || input.trigger === "manual" ? { trigger: input.trigger } : {}
425
+ };
426
+ return ev;
427
+ }
428
+ case "SubagentStart": {
429
+ const ev = {
430
+ ...base,
431
+ ...typeof input.agent_type === "string" ? { agentType: input.agent_type } : {}
432
+ };
433
+ return ev;
434
+ }
435
+ case "SubagentStop": {
436
+ const ev = {
437
+ ...base,
438
+ ...typeof input.agent_type === "string" ? { agentType: input.agent_type } : {}
439
+ };
440
+ return ev;
441
+ }
442
+ default: {
443
+ throw new Error(`unsupported grok-cli hook event: ${String(event)}`);
444
+ }
445
+ }
446
+ }
447
+ // ── Runtime: normalized response → Grok native hook reply ──────────────────
448
+ // Grok parses stdout as JSON when it starts with `{` and aggregates:
449
+ // decision:"block" (or exit 2) → block; decision:"approve" → approve;
450
+ // additionalContext → injected context; continue:false + stopReason → halt.
451
+ // We emit exit 0 + a structured stdout object so the JSON is always parsed.
452
+ formatReply(_event, response) {
453
+ const decision = response.decision ?? "allow";
454
+ if (decision === "deny") {
455
+ return this.stdout({ decision: "block", reason: response.reason ?? "Blocked by hook" });
456
+ }
457
+ if (decision === "context" && response.additionalContext) {
458
+ return this.stdout({ additionalContext: response.additionalContext });
459
+ }
460
+ return { exitCode: 0 };
461
+ }
462
+ stdout(payload) {
463
+ return { exitCode: 0, stdout: JSON.stringify(payload) };
464
+ }
465
+ };
466
+ function toolOutputToString(value) {
467
+ if (value == null) return void 0;
468
+ if (typeof value === "string") return value;
469
+ try {
470
+ return JSON.stringify(value);
471
+ } catch {
472
+ return String(value);
473
+ }
474
+ }
475
+ var adapter = new GrokCliAdapter();
476
+ var grok_cli_default = adapter;
477
+ export {
478
+ GrokCliAdapter,
479
+ adapter,
480
+ grok_cli_default as default
481
+ };
482
+ //# sourceMappingURL=grok-cli-2RFBK6J3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/adapters/grok-cli/index.ts"],"sourcesContent":["/**\n * adapters/grok-cli — Grok CLI (the community superagent-ai/grok-cli, npm\n * `grok-dev`, bin `grok`, MIT) platform adapter for agent-connector.\n *\n * Disambiguation: id is `grok-cli` (NOT `grok`) to keep it distinct from xAI's\n * separate \"Grok Build\" product. This adapter targets the OPEN-SOURCE community\n * CLI only — byte-confirmed against its source on 2026-06-21:\n * - package.json → name \"grok-dev\", bin { \"grok\": \"dist/index.js\" }, MIT.\n * - src/utils/settings.ts → USER settings at ~/.grok/user-settings.json\n * (USER_SETTINGS_PATH = join(homedir(), \".grok\", \"user-settings.json\")).\n *\n * Grok CLI is a **json-stdio** host. Its native surfaces are USER-SCOPE ONLY and\n * BOTH live in the SAME file (~/.grok/user-settings.json):\n *\n * 1. MCP servers — under the NESTED key `mcp.servers`, which is a JSON **ARRAY**\n * of McpServerConfig objects (NOT a top-level `mcpServers` keyed object map —\n * the README's casual \"(mcpServers)\" wording is misleading; the source reads\n * `loadUserSettings().mcp?.servers`). Each entry:\n * { id, label, enabled, transport: \"stdio\"|\"http\"|\"sse\",\n * url?, headers?, command?, args?, env?, cwd? }\n * (src/utils/settings.ts `McpServerConfig`). We key entries on `id` =\n * connector id (mirrors continue's array-by-name merge, but JSON not YAML).\n * Project `.grok/settings.json` holds ONLY { model, sandboxMode, sandbox,\n * lsp } — NO mcp, NO hooks — so this adapter is user-scope.\n *\n * 2. Hooks — under the top-level `hooks` key (Claude NESTED-rule shape:\n * { hooks: { <Event>: [ { matcher?, hooks:[{ type:\"command\", command,\n * timeout? }] } ] } }), loaded from user-settings.json ONLY (project-level\n * hooks are DELIBERATELY excluded by Grok for security — a committed repo\n * file must not execute unsandboxed host commands). So `hooks` is wired\n * through the SAME shared object-map hook-merge engine droid/claude use.\n *\n * Supported hook events (byte-confirmed src/hooks/types.ts HOOK_EVENTS): the\n * Grok set is a SUPERSET of our canonical names plus host-specific ones. We wire\n * the canonical events Grok fires (PascalCase, 1:1): PreToolUse, PostToolUse,\n * PostToolUseFailure, UserPromptSubmit, SessionStart, SessionEnd, Stop,\n * SubagentStart, SubagentStop, PreCompact, PostCompact, Notification. Grok also\n * fires StopFailure, TaskCreated, TaskCompleted, InstructionsLoaded, CwdChanged\n * (no canonical analog — they ride the nativeHooks passthrough) and has no\n * PermissionRequest event (warn/skip at install).\n *\n * Stdin wire field names DIFFER from Claude's in two false-friend spots\n * (byte-confirmed src/hooks/types.ts): UserPromptSubmit carries `user_prompt`\n * (NOT `prompt`), and PostToolUse carries `tool_output` (NOT `tool_response`).\n * PostToolUseFailure/StopFailure carry `error` (string); SubagentStart/Stop carry\n * `agent_type` + `description`; SessionStart carries `source`; PreCompact/\n * PostCompact carry `trigger`; Notification carries `message`. `session_id` is\n * optional; `cwd` is always present.\n *\n * Reply protocol (byte-confirmed src/hooks/executor.ts aggregateHookResults):\n * stdout is parsed as JSON when it starts with `{`. A hook BLOCKS via either\n * exit code 2 OR a stdout `{ \"decision\": \"block\" }`; `{ \"decision\": \"approve\" }`\n * explicitly approves; `additionalContext` is injected as context; `continue:\n * false` + `stopReason` prevents continuation. We emit exit 0 + a structured\n * stdout object (so the JSON is always parsed): deny → {decision:\"block\",reason};\n * context → {additionalContext}. Grok has no \"ask\"/\"modify\" reply path — those\n * degrade to a plain exit-0 passthrough (canModifyArgs/Output stay false).\n *\n * Env handling: Grok documents no native ${VAR} server interpolation, so env/\n * header/url refs resolve to literals at install time via resolveEnvRefsDeep\n * (the safe default matching continue/droid).\n */\n\nimport { existsSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\n\nimport { BaseAdapter, type HookMergeDescriptor } from \"../base.js\";\nimport type { Adapter, HookReply, InstallContext, NormalizedEvent } from \"../spi.js\";\nimport type {\n ChangeRecord,\n DetectedPlatform,\n HealthCheck,\n HookEventName,\n HookParadigm,\n HookResponse,\n NotificationEvent,\n PlatformCapabilities,\n PlatformId,\n PostCompactEvent,\n PostToolUseEvent,\n PostToolUseFailureEvent,\n PreCompactEvent,\n PreToolUseEvent,\n ServerDef,\n SessionEndEvent,\n SessionStartEvent,\n StopEvent,\n SubagentStartEvent,\n SubagentStopEvent,\n Transport,\n UserPromptSubmitEvent,\n} from \"../../core/types.js\";\nimport { resolveEnvRefsDeep } from \"../../core/interpolate.js\";\nimport { buildWrappedStdio, isHomeBinHookCommand } from \"../../core/spawn.js\";\nimport { normalizeSessionSource } from \"../claude-code/wire.js\";\n\nconst HOST: PlatformId = \"grok-cli\";\n\n/**\n * Canonical events Grok fires (PascalCase, 1:1 with our names). PermissionRequest\n * is absent from Grok's HOOK_EVENTS, so it warn/skips at install. The host-only\n * events (StopFailure, TaskCreated, TaskCompleted, InstructionsLoaded, CwdChanged)\n * have no canonical analog and ride the nativeHooks passthrough.\n */\nconst SUPPORTED_EVENTS: ReadonlySet<HookEventName> = new Set<HookEventName>([\n \"PreToolUse\",\n \"PostToolUse\",\n \"PostToolUseFailure\",\n \"UserPromptSubmit\",\n \"SessionStart\",\n \"SessionEnd\",\n \"Stop\",\n \"SubagentStart\",\n \"SubagentStop\",\n \"PreCompact\",\n \"PostCompact\",\n \"Notification\",\n]);\n\n/**\n * Native MCP server entry shape (src/utils/settings.ts `McpServerConfig`). The\n * array lives at `mcp.servers`. `id`/`label`/`enabled`/`transport` are required;\n * stdio carries command/args/env/cwd, remote carries url/headers.\n */\ninterface GrokMcpServer {\n id: string;\n label: string;\n enabled: boolean;\n transport: Transport;\n url?: string;\n headers?: Record<string, string>;\n command?: string;\n args?: string[];\n env?: Record<string, string>;\n cwd?: string;\n}\n\n/** The shape of user-settings.json (only the parts this adapter touches). */\ninterface GrokUserSettings {\n mcp?: { servers?: GrokMcpServer[] };\n hooks?: Record<string, GrokHookEntry[]>;\n [key: string]: unknown;\n}\n\n/** A single Grok native hook registration entry (Claude-shaped, nested). */\ninterface GrokHookEntry {\n matcher?: string;\n hooks: Array<{ type: \"command\"; command: string; timeout?: number }>;\n}\n\n/** Raw Grok CLI hook stdin payload (snake_case; field names per src/hooks/types.ts). */\ninterface GrokWireInput {\n hook_event_name?: string;\n session_id?: string;\n cwd?: string;\n tool_name?: string;\n tool_input?: Record<string, unknown>;\n /** PostToolUse — NOTE Grok sends `tool_output` (NOT Claude's `tool_response`). */\n tool_output?: unknown;\n /** PostToolUseFailure / StopFailure — the captured error message (string). */\n error?: unknown;\n /** UserPromptSubmit — NOTE Grok sends `user_prompt` (NOT Claude's `prompt`). */\n user_prompt?: unknown;\n /** SessionStart — startup | resume | clear. */\n source?: string;\n /** PreCompact / PostCompact — auto | manual. */\n trigger?: \"auto\" | \"manual\";\n /** Notification — the user-facing message. */\n message?: unknown;\n /** SubagentStart / SubagentStop / TaskCreated / TaskCompleted. */\n agent_type?: unknown;\n description?: unknown;\n /** Injected by the entrypoint so the runtime knows which connector to dispatch. */\n connector?: unknown;\n}\n\nexport class GrokCliAdapter extends BaseAdapter implements Adapter {\n readonly id: PlatformId = HOST;\n readonly name = \"Grok CLI\";\n readonly paradigm: HookParadigm = \"json-stdio\";\n\n readonly capabilities: PlatformCapabilities = {\n // Memory surface: Grok reads AGENTS.md (\"merged from git root down to your\n // cwd; AGENTS.override.md wins per directory\" — README). The BaseAdapter\n // AGENTS.md-first default handles it.\n supportsMemory: true,\n preToolUse: true,\n postToolUse: true,\n postToolUseFailure: true,\n userPromptSubmit: true,\n sessionStart: true,\n sessionEnd: true,\n stop: true,\n notification: true,\n preCompact: true,\n // Grok fires PostCompact (its HOOK_EVENTS lists it beside PreCompact).\n postCompact: true,\n // Grok fires SubagentStart AND SubagentStop (both in HOOK_EVENTS).\n subagentStart: true,\n subagentStop: true,\n // No PermissionRequest event in Grok's HOOK_EVENTS → warn/skip at install.\n // Grok's reply protocol is block/approve/context only — it cannot rewrite\n // tool args or already-emitted output.\n canModifyArgs: false,\n canModifyOutput: false,\n // Grok injects `additionalContext` from a hook's stdout JSON.\n canInjectSessionContext: true,\n // Grok's settings.json hook keys are free-form event names (its HOOK_EVENTS\n // superset includes StopFailure/TaskCreated/TaskCompleted/InstructionsLoaded/\n // CwdChanged with no canonical analog), so any host event declared under\n // platforms[\"grok-cli\"].nativeHooks installs verbatim.\n supportsNativeHooks: true,\n // MCP entry supports stdio + remote (http / sse) per McpServerConfig.transport.\n transports: [\"stdio\", \"http\", \"sse\"],\n };\n\n // ── Detection ────────────────────────────────────────────────────────────\n\n detectInstalled(_projectDir: string): DetectedPlatform {\n const userDir = join(homedir(), \".grok\");\n const userSettings = join(userDir, \"user-settings.json\");\n const installed = existsSync(userDir) || existsSync(userSettings);\n return {\n id: this.id,\n name: this.name,\n installed,\n paradigm: this.paradigm,\n capabilities: this.capabilities,\n // MCP + hooks both live in user-settings.json (user scope only).\n configPath: userSettings,\n scope: \"user\",\n reason: installed\n ? `found Grok CLI config at ${userSettings}`\n : `no Grok CLI config at ${userDir}`,\n confidence: installed ? \"high\" : \"low\",\n };\n }\n\n // ── Native paths ───────────────────────────────────────────────────────────\n // BOTH MCP servers (mcp.servers array) and hooks (top-level hooks map) live in\n // the SAME user-settings.json. Project .grok/settings.json holds neither, so\n // every scope resolves to the user file.\n\n getConfigDir(_ctx: InstallContext): string {\n return join(homedir(), \".grok\");\n }\n\n getServerConfigPath(ctx: InstallContext): string {\n return join(this.getConfigDir(ctx), \"user-settings.json\");\n }\n\n getHookConfigPath(ctx: InstallContext): string {\n return join(this.getConfigDir(ctx), \"user-settings.json\");\n }\n\n // ── MCP server install / uninstall (JSON — nested mcp.servers ARRAY) ───────\n\n installServer(ctx: InstallContext): ChangeRecord[] {\n const { connector, dryRun } = ctx;\n const path = this.getServerConfigPath(ctx);\n const override = connector.platforms[HOST]?.server;\n if (!connector.server || override === false) {\n return [\n {\n platform: this.id,\n action: \"skip\",\n path,\n detail: connector.server\n ? \"server registration disabled for grok-cli\"\n : \"connector declares no MCP server\",\n },\n ];\n }\n\n const symlink = this.symlinkPathWarning(path);\n if (symlink) return [symlink];\n\n // Shallow-merge any per-platform server override into the base ServerDef.\n const server: ServerDef =\n override && typeof override === \"object\"\n ? { ...connector.server, ...override }\n : connector.server;\n const entry = this.renderServerEntry(ctx, server);\n\n // OVERWRITE GUARD: never round-trip a present-but-unparseable file into `{}`.\n if (this.isPresentButUnparseable(path)) {\n return [\n {\n platform: this.id,\n action: \"warn\",\n path,\n detail: `existing ${path} is not parseable; left untouched (back it up / fix it, then re-run)`,\n },\n ];\n }\n const cfg = this.readJson<GrokUserSettings>(path) ?? {};\n\n // NEVER clobber a malformed mcp.servers: if `mcp` exists but is not an object,\n // or `mcp.servers` exists but is not an array, WARN + write nothing (leave the\n // user's hand-edited value) rather than silently replacing it.\n const existingMcp = cfg.mcp;\n if (existingMcp !== undefined && (typeof existingMcp !== \"object\" || Array.isArray(existingMcp))) {\n return [{ platform: this.id, action: \"warn\", path, detail: \"mcp is not an object — left untouched (manual fix needed)\" }];\n }\n const existingServers = existingMcp?.servers;\n if (existingServers !== undefined && !Array.isArray(existingServers)) {\n return [{ platform: this.id, action: \"warn\", path, detail: \"mcp.servers is not an array — left untouched (manual fix needed)\" }];\n }\n\n const list: GrokMcpServer[] = Array.isArray(existingServers) ? [...existingServers] : [];\n const idx = list.findIndex((e) => e?.id === connector.id);\n\n let action: ChangeRecord[\"action\"];\n if (idx < 0) {\n list.push(entry);\n action = \"create\";\n } else if (JSON.stringify(list[idx]) === JSON.stringify(entry)) {\n action = \"skip\";\n } else {\n list[idx] = entry;\n action = \"update\";\n }\n\n if (action !== \"skip\") {\n cfg.mcp = { ...(existingMcp ?? {}), servers: list };\n this.writeJson(path, cfg, dryRun);\n }\n return [{ platform: this.id, action, path, detail: `mcp.servers[id=${connector.id}]` }];\n }\n\n uninstallServer(ctx: InstallContext): ChangeRecord[] {\n const { connector, dryRun } = ctx;\n const path = this.getServerConfigPath(ctx);\n const symlink = this.symlinkPathWarning(path);\n if (symlink) return [symlink];\n\n const cfg = this.readJson<GrokUserSettings>(path);\n const rawList = cfg?.mcp?.servers;\n if (!cfg || !Array.isArray(rawList)) {\n return [{ platform: this.id, action: \"skip\", path, detail: `mcp.servers[id=${connector.id}] absent` }];\n }\n\n const list = rawList as GrokMcpServer[];\n const kept = list.filter((e) => e?.id !== connector.id);\n if (kept.length === list.length) {\n return [{ platform: this.id, action: \"skip\", path, detail: `mcp.servers[id=${connector.id}] absent` }];\n }\n\n cfg.mcp = { ...cfg.mcp, servers: kept };\n this.writeJson(path, cfg, dryRun);\n return [{ platform: this.id, action: \"remove\", path, detail: `mcp.servers[id=${connector.id}]` }];\n }\n\n /** Render a normalized ServerDef into Grok's native McpServerConfig entry. */\n private renderServerEntry(ctx: InstallContext, server: ServerDef): GrokMcpServer {\n const transport: Transport = server.transport;\n const enabled = server.enabled !== false;\n const id = ctx.connector.id;\n // `label` is a required display field; reuse the connector displayName.\n const label = ctx.connector.displayName?.trim() || id;\n\n if (transport === \"stdio\") {\n let command = server.command ?? \"\";\n let args = [...(server.args ?? [])];\n\n // Transparent telemetry wrapping: route the real command through\n // `<homeBin> serve --connector <id> -- <command> <args...>`.\n ({ command, args } = buildWrappedStdio(ctx, server, this.id, command, args));\n\n const entry: GrokMcpServer = {\n id,\n label,\n enabled,\n transport: \"stdio\",\n command: resolveEnvRefsDeep(command),\n };\n if (args.length > 0) entry.args = resolveEnvRefsDeep(args);\n const env = this.renderEnv(server.env);\n if (env) entry.env = env;\n if (typeof server.cwd === \"string\" && server.cwd.length > 0) {\n entry.cwd = resolveEnvRefsDeep(server.cwd);\n }\n return entry;\n }\n\n // Remote (http / sse) — Grok registers a URL (+ optional headers). `ws` has no\n // Grok analog; fall back to http (the closest remote shape Grok validates).\n const entry: GrokMcpServer = {\n id,\n label,\n enabled,\n transport: transport === \"sse\" ? \"sse\" : \"http\",\n url: resolveEnvRefsDeep(server.url ?? \"\"),\n };\n const headers = this.renderEnv(server.headers);\n if (headers) entry.headers = headers;\n return entry;\n }\n\n /**\n * Render env/header values. Grok documents no native ${VAR} server\n * interpolation, so resolve `${env:VAR}` references to literals at install\n * time (the safe path; matches continue/droid).\n */\n private renderEnv(\n env: Record<string, string> | undefined,\n ): Record<string, string> | undefined {\n if (!env || Object.keys(env).length === 0) return undefined;\n return resolveEnvRefsDeep({ ...env });\n }\n\n // ── Hook install / uninstall (top-level hooks, Claude nested-rule shape) ───\n\n installHooks(ctx: InstallContext): ChangeRecord[] {\n const { connector } = ctx;\n const override = connector.platforms[HOST];\n\n // `hooks: false` disables only the NORMALIZED hooks; nativeHooks is a\n // sibling grok-cli-scoped declaration that installs regardless.\n const normalizedEvents = override?.hooks === false ? [] : connector.hookEvents;\n const nativeHooks = override?.nativeHooks ?? {};\n const nativeEvents = Object.keys(nativeHooks);\n\n if (normalizedEvents.length === 0 && nativeEvents.length === 0) {\n return [\n {\n platform: this.id,\n action: \"skip\",\n detail:\n override?.hooks === false\n ? \"hooks disabled for grok-cli\"\n : \"connector declares no hooks\",\n },\n ];\n }\n\n const pending = normalizedEvents.map((event) => ({\n event: event as string,\n matcher: connector.hooks[event]?.matcher ?? \"\",\n }));\n const native = nativeEvents.map((event) => ({\n event,\n matcher: nativeHooks[event]?.matcher ?? \"\",\n }));\n\n return this.upsertHookEntries(\n ctx,\n this.getHookConfigPath(ctx),\n pending,\n this.hookDescriptor(ctx),\n native,\n );\n }\n\n uninstallHooks(ctx: InstallContext): ChangeRecord[] {\n return this.removeHookEntries(ctx, this.getHookConfigPath(ctx), this.hookDescriptor(ctx));\n }\n\n /**\n * Grok's hook-merge descriptor (NESTED shape `{ matcher?, hooks: [...] }`).\n * Connector-generic ownership (any of our home-bin commands in the inner\n * `hooks`), matching droid:\n * - mapEvent drops events outside SUPPORTED_EVENTS (Grok has no\n * PermissionRequest); supported events map 1:1 (PascalCase identical);\n * - the native pass installs free-form host-only event keys verbatim;\n * - uninstall = inner-strip ONLY (ownsEntryForRemove never-true).\n */\n private hookDescriptor(ctx: InstallContext): HookMergeDescriptor<GrokHookEntry> {\n const stripInner = (c: InstallContext) => (entry: GrokHookEntry) => {\n const innerBefore = entry.hooks?.length ?? 0;\n const inner = (entry.hooks ?? []).filter((h) => !this.isOurCommand(h.command, c));\n return {\n next: inner.length > 0 ? { matcher: entry.matcher ?? \"\", hooks: inner } : null,\n removed: innerBefore - inner.length,\n };\n };\n return {\n mapEvent: (e) => (SUPPORTED_EVENTS.has(e as HookEventName) ? e : undefined),\n unmappedWarnDetail: (e) => `${e} has no Grok CLI hook equivalent — skipped`,\n renderEntry: (_event, matcher, command) => ({\n matcher,\n hooks: [{ type: \"command\", command }],\n }),\n entryOwnsCommand: (entry, _command) =>\n (entry.hooks ?? []).some((h) => this.isOurCommand(h.command, ctx)),\n nativeOwnsCommand: (entry, command) =>\n (entry.hooks ?? []).some((h) => h.command === command),\n ownsEntryForRemove: () => () => false,\n stripInner,\n skipDetail: (event) => `hooks.${event} already registered`,\n removeDetail: (event, removed) => `hooks.${event} (${removed})`,\n nativeSkipDetail: (event) => `hooks.${event} already registered (native)`,\n nativeMutateDetail: (event) => `hooks.${event} (native)`,\n absentDetail: \"no hooks section present\",\n noMatchDetail: \"no matching hook entries\",\n };\n }\n\n /** True when a hook command references our home binary AND this connector id. */\n private isOurCommand(command: string | undefined, ctx: InstallContext): boolean {\n return isHomeBinHookCommand(command, ctx.homeBinPath, ctx.connector.id);\n }\n\n // ── Diagnostics ──────────────────────────────────────────────────────────\n\n override getHealthChecks(ctx: InstallContext): readonly HealthCheck[] {\n const path = this.getServerConfigPath(ctx);\n const connectorId = ctx.connector.id;\n const homeBin = ctx.homeBinPath;\n const hookEvents = ctx.connector.hookEvents;\n return [\n {\n name: `${this.name}: user-settings.json present`,\n check: () =>\n existsSync(path)\n ? { status: \"OK\", detail: path }\n : { status: \"FAIL\", detail: `not found: ${path}` },\n },\n {\n name: `${this.name}: server entry registered`,\n check: () => {\n if (!ctx.connector.server) {\n return { status: \"OK\", detail: \"no MCP server declared\" };\n }\n const cfg = this.readJson<GrokUserSettings>(path);\n const list = cfg?.mcp?.servers;\n if (!cfg || !Array.isArray(list)) {\n return { status: \"FAIL\", detail: `no mcp.servers array in ${path}` };\n }\n return list.some((e) => e?.id === connectorId)\n ? { status: \"OK\", detail: `mcp.servers[id=${connectorId}] present` }\n : { status: \"FAIL\", detail: `no mcp.servers[id=${connectorId}] in ${path}` };\n },\n },\n {\n name: `${this.name}: hook command registered`,\n check: () => {\n if (hookEvents.length === 0) {\n return { status: \"OK\", detail: \"no hooks declared\" };\n }\n const cfg = this.readJson<GrokUserSettings>(path);\n const hooks = cfg?.hooks ?? {};\n const registered = Object.values(hooks).some((entries) =>\n (entries ?? []).some((e) =>\n (e.hooks ?? []).some((h) => isHomeBinHookCommand(h.command, homeBin, connectorId)),\n ),\n );\n return registered\n ? { status: \"OK\", detail: \"hook command present\" }\n : { status: \"FAIL\", detail: `no hook for ${connectorId} in ${path}` };\n },\n },\n ];\n }\n\n // ── Runtime: parse Grok stdin JSON → normalized event ──────────────────────\n\n parseEvent(event: HookEventName, raw: unknown): NormalizedEvent {\n const input = (raw ?? {}) as GrokWireInput;\n const connectorId = typeof input.connector === \"string\" ? input.connector : \"\";\n const sessionId = typeof input.session_id === \"string\" ? input.session_id : \"\";\n const projectDir = typeof input.cwd === \"string\" ? input.cwd : undefined;\n\n const base = {\n hostPlatform: HOST,\n connectorId,\n sessionId,\n raw,\n ...(projectDir !== undefined ? { projectDir } : {}),\n } as const;\n\n switch (event) {\n case \"PreToolUse\": {\n const ev: PreToolUseEvent = {\n ...base,\n toolName: typeof input.tool_name === \"string\" ? input.tool_name : \"\",\n toolInput: input.tool_input ?? {},\n };\n return ev;\n }\n case \"PostToolUse\": {\n // Grok sends `tool_output` (NOT Claude's `tool_response`).\n const ev: PostToolUseEvent = {\n ...base,\n toolName: typeof input.tool_name === \"string\" ? input.tool_name : \"\",\n toolInput: input.tool_input ?? {},\n ...(toolOutputToString(input.tool_output) !== undefined\n ? { toolOutput: toolOutputToString(input.tool_output) }\n : {}),\n };\n return ev;\n }\n case \"PostToolUseFailure\": {\n const ev: PostToolUseFailureEvent = {\n ...base,\n toolName: typeof input.tool_name === \"string\" ? input.tool_name : \"\",\n toolInput: input.tool_input ?? {},\n error: typeof input.error === \"string\" ? input.error : \"\",\n };\n return ev;\n }\n case \"UserPromptSubmit\": {\n // Grok sends `user_prompt` (NOT Claude's `prompt`).\n const ev: UserPromptSubmitEvent = {\n ...base,\n prompt: typeof input.user_prompt === \"string\" ? input.user_prompt : \"\",\n };\n return ev;\n }\n case \"SessionStart\": {\n const ev: SessionStartEvent = {\n ...base,\n source: normalizeSessionSource(input.source),\n };\n return ev;\n }\n case \"SessionEnd\": {\n const ev: SessionEndEvent = { ...base };\n return ev;\n }\n case \"Stop\": {\n const ev: StopEvent = { ...base };\n return ev;\n }\n case \"Notification\": {\n const ev: NotificationEvent = {\n ...base,\n message: typeof input.message === \"string\" ? input.message : \"\",\n };\n return ev;\n }\n case \"PreCompact\": {\n const ev: PreCompactEvent = {\n ...base,\n ...(input.trigger === \"auto\" || input.trigger === \"manual\"\n ? { trigger: input.trigger }\n : {}),\n };\n return ev;\n }\n case \"PostCompact\": {\n const ev: PostCompactEvent = {\n ...base,\n ...(input.trigger === \"auto\" || input.trigger === \"manual\"\n ? { trigger: input.trigger }\n : {}),\n };\n return ev;\n }\n case \"SubagentStart\": {\n const ev: SubagentStartEvent = {\n ...base,\n ...(typeof input.agent_type === \"string\" ? { agentType: input.agent_type } : {}),\n };\n return ev;\n }\n case \"SubagentStop\": {\n const ev: SubagentStopEvent = {\n ...base,\n ...(typeof input.agent_type === \"string\" ? { agentType: input.agent_type } : {}),\n };\n return ev;\n }\n default: {\n // Grok never delivers PermissionRequest (no native equivalent — see\n // SUPPORTED_EVENTS). Surface a dispatch of one loudly rather than\n // silently mis-parse.\n throw new Error(`unsupported grok-cli hook event: ${String(event)}`);\n }\n }\n }\n\n // ── Runtime: normalized response → Grok native hook reply ──────────────────\n // Grok parses stdout as JSON when it starts with `{` and aggregates:\n // decision:\"block\" (or exit 2) → block; decision:\"approve\" → approve;\n // additionalContext → injected context; continue:false + stopReason → halt.\n // We emit exit 0 + a structured stdout object so the JSON is always parsed.\n\n formatReply(_event: HookEventName, response: HookResponse): HookReply {\n const decision = response.decision ?? \"allow\";\n\n // deny → block the action with a reason (decision:\"block\").\n if (decision === \"deny\") {\n return this.stdout({ decision: \"block\", reason: response.reason ?? \"Blocked by hook\" });\n }\n\n // context → inject soft guidance (Grok honors additionalContext).\n if (decision === \"context\" && response.additionalContext) {\n return this.stdout({ additionalContext: response.additionalContext });\n }\n\n // allow / modify (unsupported) / ask (no Grok analog) / void → passthrough.\n return { exitCode: 0 };\n }\n\n private stdout(payload: unknown): HookReply {\n return { exitCode: 0, stdout: JSON.stringify(payload) };\n }\n}\n\n/** Coerce a Grok PostToolUse `tool_output` into a string for the normalized event. */\nfunction toolOutputToString(value: unknown): string | undefined {\n if (value == null) return undefined;\n if (typeof value === \"string\") return value;\n try {\n return JSON.stringify(value);\n } catch {\n return String(value);\n }\n}\n\nexport const adapter = new GrokCliAdapter();\nexport default adapter;\n"],"mappings":"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","names":["entry"]}
@@ -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-WFEHWTLM.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-M2H7JURF.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-NUKFWZI5.js.map
@@ -1,25 +1,25 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  fail
4
- } from "./chunk-VKRGQLY4.js";
5
- import "./chunk-LKAVD4HP.js";
4
+ } from "./chunk-5Z36KVU2.js";
5
+ import "./chunk-447JWFZO.js";
6
6
  import "./chunk-OP4KBXUO.js";
7
- import "./chunk-LN76OGNR.js";
8
- import "./chunk-S4E6QQEM.js";
7
+ import "./chunk-Z2MRSS2I.js";
8
+ import "./chunk-FO5CEXXN.js";
9
9
  import {
10
10
  isNativeHookDeclared,
11
11
  runHook,
12
12
  runNativeHook
13
- } from "./chunk-ZXX5DVSE.js";
14
- import "./chunk-4FWETID5.js";
13
+ } from "./chunk-FBCBHEGB.js";
15
14
  import "./chunk-KHO5WNTP.js";
16
- import "./chunk-7NXEHZAK.js";
17
- import "./chunk-PZHB5TVA.js";
18
- import "./chunk-X457NOFE.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-JVO6NBTT.js";
17
+ import "./chunk-AY3VFNOH.js";
18
+ import "./chunk-KA55FISM.js";
19
+ import "./chunk-NBYKLUF6.js";
20
+ import "./chunk-4NHXLXSD.js";
21
+ import "./chunk-M2H7JURF.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-GM2IDA3C.js.map
96
+ //# sourceMappingURL=hook-XPR3AHDI.js.map
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
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-D6RWGXm1.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-D6RWGXm1.js';
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-D0RqWxT8.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-D0RqWxT8.js';
3
3
 
4
4
  /**
5
5
  * core/define-connector — the public write-once entry point.