@ken-jo/agent-connector 0.4.67 → 0.4.79
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.
- package/README.md +43 -6
- package/dist/{action-RUM6GP23.js → action-OHGFVKMC.js} +14 -14
- package/dist/{amazon-q-KXVJFT7Q.js → amazon-q-B52EY2SV.js} +6 -6
- package/dist/{amp-WAPHJYTK.js → amp-UXABVUKC.js} +10 -6
- package/dist/amp-UXABVUKC.js.map +1 -0
- package/dist/antigravity-RZHN53VB.js +18 -0
- package/dist/{antigravity-cli-OH27IFH5.js → antigravity-cli-KODEKUTM.js} +7 -7
- package/dist/{chunk-D6ZJS4ND.js → chunk-4FWETID5.js} +2 -2
- package/dist/{chunk-3Y23ZYYF.js → chunk-4HVQ7IUM.js} +4 -4
- package/dist/{chunk-IU42THN7.js → chunk-4NSU3KWX.js} +2 -2
- package/dist/{chunk-7CZKXXBD.js → chunk-56R2ER7K.js} +2 -2
- package/dist/{chunk-RQCBBLTA.js → chunk-7NXEHZAK.js} +3 -3
- package/dist/{chunk-P5KA5NVR.js → chunk-AMK2K6XZ.js} +49 -3
- package/dist/chunk-AMK2K6XZ.js.map +1 -0
- package/dist/{chunk-TZ5KGCE2.js → chunk-AY3RGRTT.js} +2 -2
- package/dist/{chunk-DBQMX75U.js → chunk-BEFVJ2OE.js} +28 -2
- package/dist/chunk-BEFVJ2OE.js.map +1 -0
- package/dist/{chunk-TO57WYBB.js → chunk-HORHRHNG.js} +9 -3
- package/dist/chunk-HORHRHNG.js.map +1 -0
- package/dist/{chunk-2HCJV6UO.js → chunk-IXOQDZWC.js} +9 -2
- package/dist/chunk-IXOQDZWC.js.map +1 -0
- package/dist/{chunk-CSRBMJLU.js → chunk-LKAVD4HP.js} +20 -10
- package/dist/chunk-LKAVD4HP.js.map +1 -0
- package/dist/{chunk-7QRUZAUG.js → chunk-LN76OGNR.js} +2 -2
- package/dist/{chunk-ZSMGHEB5.js → chunk-NBUEL74R.js} +8 -4
- package/dist/chunk-NBUEL74R.js.map +1 -0
- package/dist/{chunk-UVBAH263.js → chunk-PZHB5TVA.js} +5 -5
- package/dist/{chunk-AXAHW2KU.js → chunk-QKLJU4JX.js} +2 -2
- package/dist/{chunk-GCRRX4MO.js → chunk-S4E6QQEM.js} +2 -2
- package/dist/{chunk-F5COBB5F.js → chunk-UBB7T54N.js} +4 -4
- package/dist/{chunk-ZEFUDBTY.js → chunk-UYZ53KWS.js} +6 -6
- package/dist/{chunk-IZ4XQ23W.js → chunk-VD4EG6SG.js} +57 -11
- package/dist/chunk-VD4EG6SG.js.map +1 -0
- package/dist/{chunk-NXR4HM5N.js → chunk-VKRGQLY4.js} +19 -19
- package/dist/{chunk-NXR4HM5N.js.map → chunk-VKRGQLY4.js.map} +1 -1
- package/dist/{chunk-RHML2NOB.js → chunk-VVFDU4IX.js} +5 -5
- package/dist/chunk-VVFDU4IX.js.map +1 -0
- package/dist/{chunk-LS65GL2P.js → chunk-X457NOFE.js} +36 -36
- package/dist/chunk-YJP3KGLM.js +386 -0
- package/dist/chunk-YJP3KGLM.js.map +1 -0
- package/dist/{chunk-ALVXORZM.js → chunk-YYNXIUR2.js} +2 -2
- package/dist/{chunk-E45SUUD7.js → chunk-ZXX5DVSE.js} +5 -5
- package/dist/{claude-code-WLN43K7I.js → claude-code-T6ZRCMA7.js} +14 -10
- package/dist/claude-code-T6ZRCMA7.js.map +1 -0
- package/dist/cli/sdk.js +7 -7
- package/dist/cli.js +1 -1
- package/dist/{cline-PEGTGVQD.js → cline-NNMVCECA.js} +6 -6
- package/dist/{codebuff-UG6LVSOM.js → codebuff-RJIDSEU3.js} +10 -6
- package/dist/codebuff-RJIDSEU3.js.map +1 -0
- package/dist/{codex-4LVDQXCD.js → codex-RHKQKNNG.js} +19 -26
- package/dist/codex-RHKQKNNG.js.map +1 -0
- package/dist/{continue-DYV5V55Y.js → continue-MNM7YVJY.js} +7 -7
- package/dist/{copilot-cli-NVFXFLUF.js → copilot-cli-SMTX5F65.js} +68 -25
- package/dist/copilot-cli-SMTX5F65.js.map +1 -0
- package/dist/{crush-PP4HYZLT.js → crush-NYDBHIJE.js} +23 -13
- package/dist/crush-NYDBHIJE.js.map +1 -0
- package/dist/{cursor-XMXOZKAP.js → cursor-AOELDNZU.js} +7 -7
- package/dist/{detect-IZOWP5AA.js → detect-ALAKE54S.js} +4 -4
- package/dist/{doctor-5IVUQ2YH.js → doctor-UNF7FCF4.js} +101 -19
- package/dist/doctor-UNF7FCF4.js.map +1 -0
- package/dist/{droid-ETNOUIPJ.js → droid-PTCH2K7Y.js} +6 -6
- package/dist/{gemini-cli-P7XJXWVH.js → gemini-cli-QGLN2UMS.js} +6 -6
- package/dist/{goose-UZVA6MQC.js → goose-DQ6GSZ5O.js} +7 -7
- package/dist/{hermes-IC6R4CII.js → hermes-E47IG63A.js} +7 -7
- package/dist/{hook-7IUPIHCZ.js → hook-GM2IDA3C.js} +14 -14
- package/dist/index.d.ts +2 -2
- package/dist/index.js +5 -5
- package/dist/{install-EP6GPQ65.js → install-7O4XWH7T.js} +17 -17
- package/dist/{introspect-BFcXpfUp.d.ts → introspect-5o5ick0_.d.ts} +9 -4
- package/dist/{jetbrains-copilot-MZO2RQGJ.js → jetbrains-copilot-4IOT3I2Y.js} +5 -5
- package/dist/{kilo-CCB34CQQ.js → kilo-TAHOPT2Q.js} +6 -6
- package/dist/{kilo-cli-EOMN3WC7.js → kilo-cli-X4NPJWGX.js} +6 -6
- package/dist/{kimi-GUSJME55.js → kimi-Z7L2LEEI.js} +6 -6
- package/dist/{kiro-6OHZ5RGV.js → kiro-YZ4TTZGD.js} +6 -6
- package/dist/{leaderboard-6I2E5XZK.js → leaderboard-DVW4WYJ6.js} +5 -5
- package/dist/{mimo-code-ZPJJ6IIW.js → mimo-code-G2CBZ4M6.js} +6 -6
- package/dist/{mux-AFTVMGGM.js → mux-JNM3F2NW.js} +6 -6
- package/dist/{nemoclaw-D5EN4G2Q.js → nemoclaw-SHA4IUML.js} +7 -7
- package/dist/{omp-GKI2PZ7G.js → omp-OOVUNXME.js} +6 -6
- package/dist/openclaw-BD56E5MV.js +17 -0
- package/dist/{opencode-M34E6PI7.js → opencode-W2RK4M7G.js} +6 -6
- package/dist/{package-BWLV24OO.js → package-H5V3AZHR.js} +13 -13
- package/dist/{pi-HVG6ZWFE.js → pi-I7BLL4EI.js} +5 -5
- package/dist/{qwen-code-OWLM3I5P.js → qwen-code-JG7AF442.js} +7 -7
- package/dist/{roo-code-RFKKTNNI.js → roo-code-L5F7S6QH.js} +6 -6
- package/dist/runtime/index.d.ts +12 -1
- package/dist/runtime/index.js +12 -12
- package/dist/sdk/index.d.ts +3 -3
- package/dist/sdk/index.js +6 -6
- package/dist/sdk/test.d.ts +33 -3
- package/dist/sdk/test.js +14 -284
- package/dist/sdk/test.js.map +1 -1
- package/dist/{serve-CM4HZPMP.js → serve-WMO2TUW3.js} +24 -17
- package/dist/serve-WMO2TUW3.js.map +1 -0
- package/dist/{status-BPB4VLQX.js → status-WRLBTBRE.js} +10 -10
- package/dist/{statusline-HIKR2I4Q.js → statusline-EUD4DMIP.js} +13 -13
- package/dist/{telemetry-SBVUJYNE.js → telemetry-U3LGMR3D.js} +10 -10
- package/dist/{trae-FVHQALK3.js → trae-Z7CQ2A2Q.js} +6 -6
- package/dist/{types-ChUrvw0j.d.ts → types-D6RWGXm1.d.ts} +13 -0
- package/dist/{uninstall-MO3RGGVE.js → uninstall-TWPUEJEC.js} +17 -17
- package/dist/{upgrade-6XIGSPGY.js → upgrade-EM6Y7QLH.js} +17 -17
- package/dist/{usage-IBN36ZVW.js → usage-3HQDTXGY.js} +2 -2
- package/dist/{usage-event-4RJP37K6.js → usage-event-DWIGKO7V.js} +13 -13
- package/dist/{vscode-copilot-6FLDRTKV.js → vscode-copilot-LU5NC4ZS.js} +10 -6
- package/dist/vscode-copilot-LU5NC4ZS.js.map +1 -0
- package/dist/{warp-7CC52UJV.js → warp-4PPG5LOM.js} +6 -6
- package/dist/{windsurf-6ZLQMBQW.js → windsurf-3T3RVXKM.js} +6 -6
- package/dist/{zed-FULJMNBV.js → zed-LLOAUXSA.js} +6 -6
- package/package.json +1 -1
- package/dist/amp-WAPHJYTK.js.map +0 -1
- package/dist/antigravity-GF3RU42A.js +0 -18
- package/dist/chunk-2HCJV6UO.js.map +0 -1
- package/dist/chunk-CSRBMJLU.js.map +0 -1
- package/dist/chunk-DBQMX75U.js.map +0 -1
- package/dist/chunk-IZ4XQ23W.js.map +0 -1
- package/dist/chunk-P5KA5NVR.js.map +0 -1
- package/dist/chunk-RHML2NOB.js.map +0 -1
- package/dist/chunk-TO57WYBB.js.map +0 -1
- package/dist/chunk-ZSMGHEB5.js.map +0 -1
- package/dist/claude-code-WLN43K7I.js.map +0 -1
- package/dist/codebuff-UG6LVSOM.js.map +0 -1
- package/dist/codex-4LVDQXCD.js.map +0 -1
- package/dist/copilot-cli-NVFXFLUF.js.map +0 -1
- package/dist/crush-PP4HYZLT.js.map +0 -1
- package/dist/doctor-5IVUQ2YH.js.map +0 -1
- package/dist/openclaw-A76PCNBV.js +0 -17
- package/dist/serve-CM4HZPMP.js.map +0 -1
- package/dist/vscode-copilot-6FLDRTKV.js.map +0 -1
- /package/dist/{action-RUM6GP23.js.map → action-OHGFVKMC.js.map} +0 -0
- /package/dist/{amazon-q-KXVJFT7Q.js.map → amazon-q-B52EY2SV.js.map} +0 -0
- /package/dist/{antigravity-GF3RU42A.js.map → antigravity-RZHN53VB.js.map} +0 -0
- /package/dist/{antigravity-cli-OH27IFH5.js.map → antigravity-cli-KODEKUTM.js.map} +0 -0
- /package/dist/{chunk-D6ZJS4ND.js.map → chunk-4FWETID5.js.map} +0 -0
- /package/dist/{chunk-3Y23ZYYF.js.map → chunk-4HVQ7IUM.js.map} +0 -0
- /package/dist/{chunk-IU42THN7.js.map → chunk-4NSU3KWX.js.map} +0 -0
- /package/dist/{chunk-7CZKXXBD.js.map → chunk-56R2ER7K.js.map} +0 -0
- /package/dist/{chunk-RQCBBLTA.js.map → chunk-7NXEHZAK.js.map} +0 -0
- /package/dist/{chunk-TZ5KGCE2.js.map → chunk-AY3RGRTT.js.map} +0 -0
- /package/dist/{chunk-7QRUZAUG.js.map → chunk-LN76OGNR.js.map} +0 -0
- /package/dist/{chunk-UVBAH263.js.map → chunk-PZHB5TVA.js.map} +0 -0
- /package/dist/{chunk-AXAHW2KU.js.map → chunk-QKLJU4JX.js.map} +0 -0
- /package/dist/{chunk-GCRRX4MO.js.map → chunk-S4E6QQEM.js.map} +0 -0
- /package/dist/{chunk-F5COBB5F.js.map → chunk-UBB7T54N.js.map} +0 -0
- /package/dist/{chunk-ZEFUDBTY.js.map → chunk-UYZ53KWS.js.map} +0 -0
- /package/dist/{chunk-LS65GL2P.js.map → chunk-X457NOFE.js.map} +0 -0
- /package/dist/{chunk-ALVXORZM.js.map → chunk-YYNXIUR2.js.map} +0 -0
- /package/dist/{chunk-E45SUUD7.js.map → chunk-ZXX5DVSE.js.map} +0 -0
- /package/dist/{cline-PEGTGVQD.js.map → cline-NNMVCECA.js.map} +0 -0
- /package/dist/{continue-DYV5V55Y.js.map → continue-MNM7YVJY.js.map} +0 -0
- /package/dist/{cursor-XMXOZKAP.js.map → cursor-AOELDNZU.js.map} +0 -0
- /package/dist/{detect-IZOWP5AA.js.map → detect-ALAKE54S.js.map} +0 -0
- /package/dist/{droid-ETNOUIPJ.js.map → droid-PTCH2K7Y.js.map} +0 -0
- /package/dist/{gemini-cli-P7XJXWVH.js.map → gemini-cli-QGLN2UMS.js.map} +0 -0
- /package/dist/{goose-UZVA6MQC.js.map → goose-DQ6GSZ5O.js.map} +0 -0
- /package/dist/{hermes-IC6R4CII.js.map → hermes-E47IG63A.js.map} +0 -0
- /package/dist/{hook-7IUPIHCZ.js.map → hook-GM2IDA3C.js.map} +0 -0
- /package/dist/{install-EP6GPQ65.js.map → install-7O4XWH7T.js.map} +0 -0
- /package/dist/{jetbrains-copilot-MZO2RQGJ.js.map → jetbrains-copilot-4IOT3I2Y.js.map} +0 -0
- /package/dist/{kilo-CCB34CQQ.js.map → kilo-TAHOPT2Q.js.map} +0 -0
- /package/dist/{kilo-cli-EOMN3WC7.js.map → kilo-cli-X4NPJWGX.js.map} +0 -0
- /package/dist/{kimi-GUSJME55.js.map → kimi-Z7L2LEEI.js.map} +0 -0
- /package/dist/{kiro-6OHZ5RGV.js.map → kiro-YZ4TTZGD.js.map} +0 -0
- /package/dist/{leaderboard-6I2E5XZK.js.map → leaderboard-DVW4WYJ6.js.map} +0 -0
- /package/dist/{mimo-code-ZPJJ6IIW.js.map → mimo-code-G2CBZ4M6.js.map} +0 -0
- /package/dist/{mux-AFTVMGGM.js.map → mux-JNM3F2NW.js.map} +0 -0
- /package/dist/{nemoclaw-D5EN4G2Q.js.map → nemoclaw-SHA4IUML.js.map} +0 -0
- /package/dist/{omp-GKI2PZ7G.js.map → omp-OOVUNXME.js.map} +0 -0
- /package/dist/{openclaw-A76PCNBV.js.map → openclaw-BD56E5MV.js.map} +0 -0
- /package/dist/{opencode-M34E6PI7.js.map → opencode-W2RK4M7G.js.map} +0 -0
- /package/dist/{package-BWLV24OO.js.map → package-H5V3AZHR.js.map} +0 -0
- /package/dist/{pi-HVG6ZWFE.js.map → pi-I7BLL4EI.js.map} +0 -0
- /package/dist/{qwen-code-OWLM3I5P.js.map → qwen-code-JG7AF442.js.map} +0 -0
- /package/dist/{roo-code-RFKKTNNI.js.map → roo-code-L5F7S6QH.js.map} +0 -0
- /package/dist/{status-BPB4VLQX.js.map → status-WRLBTBRE.js.map} +0 -0
- /package/dist/{statusline-HIKR2I4Q.js.map → statusline-EUD4DMIP.js.map} +0 -0
- /package/dist/{telemetry-SBVUJYNE.js.map → telemetry-U3LGMR3D.js.map} +0 -0
- /package/dist/{trae-FVHQALK3.js.map → trae-Z7CQ2A2Q.js.map} +0 -0
- /package/dist/{uninstall-MO3RGGVE.js.map → uninstall-TWPUEJEC.js.map} +0 -0
- /package/dist/{upgrade-6XIGSPGY.js.map → upgrade-EM6Y7QLH.js.map} +0 -0
- /package/dist/{usage-IBN36ZVW.js.map → usage-3HQDTXGY.js.map} +0 -0
- /package/dist/{usage-event-4RJP37K6.js.map → usage-event-DWIGKO7V.js.map} +0 -0
- /package/dist/{warp-7CC52UJV.js.map → warp-4PPG5LOM.js.map} +0 -0
- /package/dist/{windsurf-6ZLQMBQW.js.map → windsurf-3T3RVXKM.js.map} +0 -0
- /package/dist/{zed-FULJMNBV.js.map → zed-LLOAUXSA.js.map} +0 -0
|
@@ -4,39 +4,39 @@
|
|
|
4
4
|
var ADAPTER_REGISTRY = [
|
|
5
5
|
{
|
|
6
6
|
id: "claude-code",
|
|
7
|
-
load: () => import("./claude-code-
|
|
7
|
+
load: () => import("./claude-code-T6ZRCMA7.js").then((m) => m.default)
|
|
8
8
|
},
|
|
9
9
|
{
|
|
10
10
|
id: "codex",
|
|
11
|
-
load: () => import("./codex-
|
|
11
|
+
load: () => import("./codex-RHKQKNNG.js").then((m) => m.default)
|
|
12
12
|
},
|
|
13
13
|
{
|
|
14
14
|
id: "cursor",
|
|
15
|
-
load: () => import("./cursor-
|
|
15
|
+
load: () => import("./cursor-AOELDNZU.js").then((m) => m.default)
|
|
16
16
|
},
|
|
17
17
|
// vscode-copilot after cursor: cursor is a VS Code fork, so the fork's runtime
|
|
18
18
|
// markers must be checked first during host detection.
|
|
19
19
|
{
|
|
20
20
|
id: "vscode-copilot",
|
|
21
|
-
load: () => import("./vscode-copilot-
|
|
21
|
+
load: () => import("./vscode-copilot-LU5NC4ZS.js").then((m) => m.default)
|
|
22
22
|
},
|
|
23
23
|
{
|
|
24
24
|
id: "copilot-cli",
|
|
25
|
-
load: () => import("./copilot-cli-
|
|
25
|
+
load: () => import("./copilot-cli-SMTX5F65.js").then((m) => m.default)
|
|
26
26
|
},
|
|
27
27
|
{
|
|
28
28
|
id: "gemini-cli",
|
|
29
|
-
load: () => import("./gemini-cli-
|
|
29
|
+
load: () => import("./gemini-cli-QGLN2UMS.js").then((m) => m.default)
|
|
30
30
|
},
|
|
31
31
|
{
|
|
32
32
|
id: "warp",
|
|
33
|
-
load: () => import("./warp-
|
|
33
|
+
load: () => import("./warp-4PPG5LOM.js").then((m) => m.default)
|
|
34
34
|
},
|
|
35
35
|
// ts-plugin paradigm: OpenCode loads a generated plugin module that bridges
|
|
36
36
|
// its in-process events to the universal hook entrypoint.
|
|
37
37
|
{
|
|
38
38
|
id: "opencode",
|
|
39
|
-
load: () => import("./opencode-
|
|
39
|
+
load: () => import("./opencode-W2RK4M7G.js").then((m) => m.default)
|
|
40
40
|
},
|
|
41
41
|
// mimo-code is Xiaomi's MiMoCode (@mimo-ai/cli, bin `mimo`) — an OpenCode FORK
|
|
42
42
|
// (ts-plugin, MCP root key "mcp", ~/.config/mimocode/mimocode.json). Grouped
|
|
@@ -45,7 +45,7 @@ var ADAPTER_REGISTRY = [
|
|
|
45
45
|
// constraint vs opencode (no shared config file to disambiguate).
|
|
46
46
|
{
|
|
47
47
|
id: "mimo-code",
|
|
48
|
-
load: () => import("./mimo-code-
|
|
48
|
+
load: () => import("./mimo-code-G2CBZ4M6.js").then((m) => m.default)
|
|
49
49
|
},
|
|
50
50
|
// kilo-cli is the SQLite-backed OpenCode FORK command-line product (ts-plugin,
|
|
51
51
|
// loads @kilocode/plugin modules registered in kilo.jsonc's "plugin" array;
|
|
@@ -54,23 +54,23 @@ var ADAPTER_REGISTRY = [
|
|
|
54
54
|
// the "kilo" extension so there is no fork-ordering constraint between them.
|
|
55
55
|
{
|
|
56
56
|
id: "kilo-cli",
|
|
57
|
-
load: () => import("./kilo-cli-
|
|
57
|
+
load: () => import("./kilo-cli-X4NPJWGX.js").then((m) => m.default)
|
|
58
58
|
},
|
|
59
59
|
// Wave 1 — mcp-only adapters (no lifecycle hooks; MCP registration only).
|
|
60
60
|
{
|
|
61
61
|
id: "droid",
|
|
62
|
-
load: () => import("./droid-
|
|
62
|
+
load: () => import("./droid-PTCH2K7Y.js").then((m) => m.default)
|
|
63
63
|
},
|
|
64
64
|
{
|
|
65
65
|
id: "roo-code",
|
|
66
|
-
load: () => import("./roo-code-
|
|
66
|
+
load: () => import("./roo-code-L5F7S6QH.js").then((m) => m.default)
|
|
67
67
|
},
|
|
68
68
|
// kilo is the Kilo Code VS Code extension (kilocode.kilo-code) — a Roo/Cline
|
|
69
69
|
// fork, so it sits beside roo-code (mcp-only, root key "mcpServers", VS Code
|
|
70
70
|
// globalStorage / .kilocode project scope). Distinct host from "kilo-cli".
|
|
71
71
|
{
|
|
72
72
|
id: "kilo",
|
|
73
|
-
load: () => import("./kilo-
|
|
73
|
+
load: () => import("./kilo-TAHOPT2Q.js").then((m) => m.default)
|
|
74
74
|
},
|
|
75
75
|
// cline is the Cline VS Code extension (saoudrizwan.claude-dev) — the most-
|
|
76
76
|
// installed AI coding extension and the PARENT that roo-code and kilo forked.
|
|
@@ -81,11 +81,11 @@ var ADAPTER_REGISTRY = [
|
|
|
81
81
|
// is NO fork-before-parent ordering constraint here; it simply sits beside them.
|
|
82
82
|
{
|
|
83
83
|
id: "cline",
|
|
84
|
-
load: () => import("./cline-
|
|
84
|
+
load: () => import("./cline-NNMVCECA.js").then((m) => m.default)
|
|
85
85
|
},
|
|
86
86
|
{
|
|
87
87
|
id: "trae",
|
|
88
|
-
load: () => import("./trae-
|
|
88
|
+
load: () => import("./trae-Z7CQ2A2Q.js").then((m) => m.default)
|
|
89
89
|
},
|
|
90
90
|
// antigravity-cli BEFORE antigravity: the `agy` CLI is a fork of the IDE
|
|
91
91
|
// adapter with its own runtime markers (the universal hook command tags the
|
|
@@ -93,69 +93,69 @@ var ADAPTER_REGISTRY = [
|
|
|
93
93
|
// before the IDE/parent during host detection.
|
|
94
94
|
{
|
|
95
95
|
id: "antigravity-cli",
|
|
96
|
-
load: () => import("./antigravity-cli-
|
|
96
|
+
load: () => import("./antigravity-cli-KODEKUTM.js").then((m) => m.default)
|
|
97
97
|
},
|
|
98
98
|
{
|
|
99
99
|
id: "antigravity",
|
|
100
|
-
load: () => import("./antigravity-
|
|
100
|
+
load: () => import("./antigravity-RZHN53VB.js").then((m) => m.default)
|
|
101
101
|
},
|
|
102
102
|
{
|
|
103
103
|
id: "zed",
|
|
104
|
-
load: () => import("./zed-
|
|
104
|
+
load: () => import("./zed-LLOAUXSA.js").then((m) => m.default)
|
|
105
105
|
},
|
|
106
106
|
{
|
|
107
107
|
id: "amp",
|
|
108
|
-
load: () => import("./amp-
|
|
108
|
+
load: () => import("./amp-UXABVUKC.js").then((m) => m.default)
|
|
109
109
|
},
|
|
110
110
|
{
|
|
111
111
|
id: "codebuff",
|
|
112
|
-
load: () => import("./codebuff-
|
|
112
|
+
load: () => import("./codebuff-RJIDSEU3.js").then((m) => m.default)
|
|
113
113
|
},
|
|
114
114
|
{
|
|
115
115
|
id: "mux",
|
|
116
|
-
load: () => import("./mux-
|
|
116
|
+
load: () => import("./mux-JNM3F2NW.js").then((m) => m.default)
|
|
117
117
|
},
|
|
118
118
|
// Pi — mcp-only host with no writable MCP config; drives the Agent Skills
|
|
119
119
|
// surface only (writes <piDir>/skills/<name>/SKILL.md).
|
|
120
120
|
{
|
|
121
121
|
id: "pi",
|
|
122
|
-
load: () => import("./pi-
|
|
122
|
+
load: () => import("./pi-I7BLL4EI.js").then((m) => m.default)
|
|
123
123
|
},
|
|
124
124
|
// Wave 2 — json-stdio adapters (full hook dispatch via the universal entrypoint).
|
|
125
125
|
// jetbrains-copilot before vscode-copilot is unnecessary (distinct hosts); grouped here.
|
|
126
126
|
{
|
|
127
127
|
id: "jetbrains-copilot",
|
|
128
|
-
load: () => import("./jetbrains-copilot-
|
|
128
|
+
load: () => import("./jetbrains-copilot-4IOT3I2Y.js").then((m) => m.default)
|
|
129
129
|
},
|
|
130
130
|
{
|
|
131
131
|
id: "qwen-code",
|
|
132
|
-
load: () => import("./qwen-code-
|
|
132
|
+
load: () => import("./qwen-code-JG7AF442.js").then((m) => m.default)
|
|
133
133
|
},
|
|
134
134
|
{
|
|
135
135
|
id: "kiro",
|
|
136
|
-
load: () => import("./kiro-
|
|
136
|
+
load: () => import("./kiro-YZ4TTZGD.js").then((m) => m.default)
|
|
137
137
|
},
|
|
138
138
|
{
|
|
139
139
|
id: "kimi",
|
|
140
|
-
load: () => import("./kimi-
|
|
140
|
+
load: () => import("./kimi-Z7L2LEEI.js").then((m) => m.default)
|
|
141
141
|
},
|
|
142
142
|
{
|
|
143
143
|
id: "crush",
|
|
144
|
-
load: () => import("./crush-
|
|
144
|
+
load: () => import("./crush-NYDBHIJE.js").then((m) => m.default)
|
|
145
145
|
},
|
|
146
146
|
// Wave 3 — json-stdio adapters with YAML config (MCP in YAML; hooks per host).
|
|
147
147
|
{
|
|
148
148
|
id: "goose",
|
|
149
|
-
load: () => import("./goose-
|
|
149
|
+
load: () => import("./goose-DQ6GSZ5O.js").then((m) => m.default)
|
|
150
150
|
},
|
|
151
151
|
{
|
|
152
152
|
id: "hermes",
|
|
153
|
-
load: () => import("./hermes-
|
|
153
|
+
load: () => import("./hermes-E47IG63A.js").then((m) => m.default)
|
|
154
154
|
},
|
|
155
155
|
// Wave 4 — ts-plugin adapters (generate a bridge module to the universal entrypoint).
|
|
156
156
|
{
|
|
157
157
|
id: "omp",
|
|
158
|
-
load: () => import("./omp-
|
|
158
|
+
load: () => import("./omp-OOVUNXME.js").then((m) => m.default)
|
|
159
159
|
},
|
|
160
160
|
// nemoclaw BEFORE openclaw (fork-before-parent convention). NVIDIA NemoClaw
|
|
161
161
|
// wraps OpenClaw and DRIVES the SAME ~/.openclaw/openclaw.json, so a NemoClaw
|
|
@@ -168,11 +168,11 @@ var ADAPTER_REGISTRY = [
|
|
|
168
168
|
// lands in the wrapped openclaw.json.
|
|
169
169
|
{
|
|
170
170
|
id: "nemoclaw",
|
|
171
|
-
load: () => import("./nemoclaw-
|
|
171
|
+
load: () => import("./nemoclaw-SHA4IUML.js").then((m) => m.default)
|
|
172
172
|
},
|
|
173
173
|
{
|
|
174
174
|
id: "openclaw",
|
|
175
|
-
load: () => import("./openclaw-
|
|
175
|
+
load: () => import("./openclaw-BD56E5MV.js").then((m) => m.default)
|
|
176
176
|
},
|
|
177
177
|
// Wave 5 — mcp-only: Amazon Q Developer CLI. JSON MCP config under ~/.aws/amazonq/
|
|
178
178
|
// (user) and .amazonq/ (project); root key "mcpServers"; bare stdio entry
|
|
@@ -182,7 +182,7 @@ var ADAPTER_REGISTRY = [
|
|
|
182
182
|
// adapter installs MCP entries + the .amazonq/rules memory surface.
|
|
183
183
|
{
|
|
184
184
|
id: "amazon-q",
|
|
185
|
-
load: () => import("./amazon-q-
|
|
185
|
+
load: () => import("./amazon-q-B52EY2SV.js").then((m) => m.default)
|
|
186
186
|
},
|
|
187
187
|
// Continue (the `cn` terminal agent / Continue.dev, npm @continuedev/cli) —
|
|
188
188
|
// json-stdio (Claude-compatible hooks). MCP config is YAML at ~/.continue/config.yaml (user) and
|
|
@@ -194,7 +194,7 @@ var ADAPTER_REGISTRY = [
|
|
|
194
194
|
// fork-ordering constraint vs any sibling.
|
|
195
195
|
{
|
|
196
196
|
id: "continue",
|
|
197
|
-
load: () => import("./continue-
|
|
197
|
+
load: () => import("./continue-MNM7YVJY.js").then((m) => m.default)
|
|
198
198
|
},
|
|
199
199
|
// Windsurf (Codeium / Cognition's Cascade agent) — mcp-only. USER/GLOBAL scope
|
|
200
200
|
// ONLY: MCP config is JSON at ~/.codeium/windsurf/mcp_config.json (the docs
|
|
@@ -208,7 +208,7 @@ var ADAPTER_REGISTRY = [
|
|
|
208
208
|
// memory surface. Distinct ~/.codeium marker — no fork-ordering constraint.
|
|
209
209
|
{
|
|
210
210
|
id: "windsurf",
|
|
211
|
-
load: () => import("./windsurf-
|
|
211
|
+
load: () => import("./windsurf-3T3RVXKM.js").then((m) => m.default)
|
|
212
212
|
}
|
|
213
213
|
];
|
|
214
214
|
var REGISTRY_BY_ID = new Map(
|
|
@@ -234,4 +234,4 @@ export {
|
|
|
234
234
|
loadAdapter,
|
|
235
235
|
allAdapters
|
|
236
236
|
};
|
|
237
|
-
//# sourceMappingURL=chunk-
|
|
237
|
+
//# sourceMappingURL=chunk-X457NOFE.js.map
|
|
@@ -0,0 +1,386 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
compileMatcher,
|
|
4
|
+
eventMatcherSubject
|
|
5
|
+
} from "./chunk-ZXX5DVSE.js";
|
|
6
|
+
import {
|
|
7
|
+
SURFACE_PREDICATES,
|
|
8
|
+
hostCanFireEvent
|
|
9
|
+
} from "./chunk-AMK2K6XZ.js";
|
|
10
|
+
import {
|
|
11
|
+
allAdapters,
|
|
12
|
+
loadAdapter
|
|
13
|
+
} from "./chunk-X457NOFE.js";
|
|
14
|
+
|
|
15
|
+
// src/sdk/test-harness.ts
|
|
16
|
+
function declaredGlobalSurfaces(connector) {
|
|
17
|
+
const out = [];
|
|
18
|
+
if (connector.server) out.push("server");
|
|
19
|
+
if (Object.keys(connector.hooks).length > 0) out.push("hooks");
|
|
20
|
+
if (connector.commands.length > 0) out.push("commands");
|
|
21
|
+
if (connector.skills.length > 0) out.push("skills");
|
|
22
|
+
if (connector.subagents.length > 0) out.push("subagents");
|
|
23
|
+
if (connector.memory.length > 0) out.push("memory");
|
|
24
|
+
if (connector.statusline) out.push("statusline");
|
|
25
|
+
if (connector.actions.length > 0) out.push("actions");
|
|
26
|
+
return out;
|
|
27
|
+
}
|
|
28
|
+
function platformScopedSurfacesFor(override) {
|
|
29
|
+
const out = [];
|
|
30
|
+
if (!override) return out;
|
|
31
|
+
if ((override.configPatch?.length ?? 0) > 0) out.push("configPatch");
|
|
32
|
+
if (override.nativeHooks != null && Object.keys(override.nativeHooks).length > 0) {
|
|
33
|
+
out.push("nativeHooks");
|
|
34
|
+
}
|
|
35
|
+
return out;
|
|
36
|
+
}
|
|
37
|
+
function isDisabledForHost(connector, host, surface) {
|
|
38
|
+
const override = connector.platforms[host];
|
|
39
|
+
if (!override) return false;
|
|
40
|
+
switch (surface) {
|
|
41
|
+
case "server":
|
|
42
|
+
return override.server === false;
|
|
43
|
+
case "hooks":
|
|
44
|
+
return override.hooks === false;
|
|
45
|
+
case "commands":
|
|
46
|
+
return override.commands === false;
|
|
47
|
+
case "skills":
|
|
48
|
+
return override.skills === false;
|
|
49
|
+
case "subagents":
|
|
50
|
+
return override.subagents === false;
|
|
51
|
+
case "memory":
|
|
52
|
+
return override.memory === false;
|
|
53
|
+
case "statusline":
|
|
54
|
+
return override.statusline === false;
|
|
55
|
+
case "actions":
|
|
56
|
+
case "configPatch":
|
|
57
|
+
case "nativeHooks":
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
async function explain(connector) {
|
|
62
|
+
const globalSurfaces = declaredGlobalSurfaces(connector);
|
|
63
|
+
const adapters = await allAdapters();
|
|
64
|
+
const rows = [];
|
|
65
|
+
for (const adapter of adapters) {
|
|
66
|
+
const override = connector.platforms[adapter.id];
|
|
67
|
+
const surfaces = [
|
|
68
|
+
...globalSurfaces,
|
|
69
|
+
...platformScopedSurfacesFor(override)
|
|
70
|
+
];
|
|
71
|
+
for (const surface of surfaces) {
|
|
72
|
+
if (isDisabledForHost(connector, adapter.id, surface)) {
|
|
73
|
+
rows.push({
|
|
74
|
+
host: adapter.id,
|
|
75
|
+
surface,
|
|
76
|
+
support: "disabled",
|
|
77
|
+
reason: `connector opted out for ${adapter.id} (platforms.${adapter.id}.${surface} = false)`
|
|
78
|
+
});
|
|
79
|
+
continue;
|
|
80
|
+
}
|
|
81
|
+
if (surface === "hooks") {
|
|
82
|
+
rows.push(hooksRow(connector, adapter.id, adapter.capabilities));
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
const native = SURFACE_PREDICATES[surface](adapter.capabilities);
|
|
86
|
+
rows.push({
|
|
87
|
+
host: adapter.id,
|
|
88
|
+
surface,
|
|
89
|
+
support: native ? "native" : "skip-warn",
|
|
90
|
+
reason: explainReason(adapter.id, surface, native)
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
rows.sort(
|
|
95
|
+
(a, b) => a.host === b.host ? a.surface.localeCompare(b.surface) : a.host.localeCompare(b.host)
|
|
96
|
+
);
|
|
97
|
+
return rows;
|
|
98
|
+
}
|
|
99
|
+
function hooksRow(connector, host, capabilities) {
|
|
100
|
+
const declared = connector.hookEvents;
|
|
101
|
+
const dead = declared.filter((e) => !hostCanFireEvent(capabilities, e));
|
|
102
|
+
if (dead.length === 0) {
|
|
103
|
+
return {
|
|
104
|
+
host,
|
|
105
|
+
surface: "hooks",
|
|
106
|
+
support: "native",
|
|
107
|
+
reason: `${host} can fire every declared hook event (${declared.join(", ")})`
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
const fireable = declared.filter((e) => hostCanFireEvent(capabilities, e));
|
|
111
|
+
const reason = fireable.length === 0 ? `${host} cannot fire any declared hook event (${dead.join(", ")}); install skip-warns each` : `${host} cannot fire ${dead.join(", ")} (install skip-warns these); honors ${fireable.join(", ")}`;
|
|
112
|
+
return { host, surface: "hooks", support: "skip-warn", reason };
|
|
113
|
+
}
|
|
114
|
+
function explainReason(host, surface, native) {
|
|
115
|
+
if (surface === "server") {
|
|
116
|
+
return native ? `${host} advertises an MCP transport (capability-based; registration may be host-managed)` : `${host} advertises no MCP transport; install skip-warns`;
|
|
117
|
+
}
|
|
118
|
+
return native ? `${host} natively supports ${surface}` : `${host} cannot honor ${surface}; install skip-warns`;
|
|
119
|
+
}
|
|
120
|
+
function coerceInput(input) {
|
|
121
|
+
if (input == null) return {};
|
|
122
|
+
if (typeof input === "string") {
|
|
123
|
+
const trimmed = input.trim();
|
|
124
|
+
if (trimmed === "") return {};
|
|
125
|
+
try {
|
|
126
|
+
return JSON.parse(trimmed);
|
|
127
|
+
} catch {
|
|
128
|
+
return {};
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
return input;
|
|
132
|
+
}
|
|
133
|
+
function normalizeResponse(value) {
|
|
134
|
+
if (value == null || typeof value !== "object") return {};
|
|
135
|
+
return value;
|
|
136
|
+
}
|
|
137
|
+
function parseReplyStdout(stdout) {
|
|
138
|
+
if (stdout == null || stdout.trim() === "") return void 0;
|
|
139
|
+
try {
|
|
140
|
+
const value = JSON.parse(stdout);
|
|
141
|
+
return value != null && typeof value === "object" ? value : void 0;
|
|
142
|
+
} catch {
|
|
143
|
+
return void 0;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
function deepEqual(a, b) {
|
|
147
|
+
if (a === b) return true;
|
|
148
|
+
if (typeof a !== typeof b || a == null || b == null) return false;
|
|
149
|
+
if (typeof a !== "object") return false;
|
|
150
|
+
const aArr = Array.isArray(a);
|
|
151
|
+
if (aArr !== Array.isArray(b)) return false;
|
|
152
|
+
if (aArr) {
|
|
153
|
+
const x2 = a;
|
|
154
|
+
const y2 = b;
|
|
155
|
+
return x2.length === y2.length && x2.every((v, i) => deepEqual(v, y2[i]));
|
|
156
|
+
}
|
|
157
|
+
const x = a;
|
|
158
|
+
const y = b;
|
|
159
|
+
const xk = Object.keys(x);
|
|
160
|
+
const yk = Object.keys(y);
|
|
161
|
+
return xk.length === yk.length && xk.every((k) => deepEqual(x[k], y[k]));
|
|
162
|
+
}
|
|
163
|
+
function judgeHookHonor(host, event, response, stdout) {
|
|
164
|
+
const decision = response.decision;
|
|
165
|
+
if (decision === void 0 || decision === "allow") {
|
|
166
|
+
return { honored: true, reason: "pass-through allow" };
|
|
167
|
+
}
|
|
168
|
+
const reply = parseReplyStdout(stdout);
|
|
169
|
+
const hso = reply?.hookSpecificOutput;
|
|
170
|
+
if (decision === "context") {
|
|
171
|
+
const want = response.additionalContext;
|
|
172
|
+
const got = hso?.additionalContext ?? reply?.systemMessage;
|
|
173
|
+
if (reply && got === want) {
|
|
174
|
+
return { honored: true, reason: `${host} injects context on ${event}` };
|
|
175
|
+
}
|
|
176
|
+
return {
|
|
177
|
+
honored: false,
|
|
178
|
+
reason: `${host} drops context on ${event} (no stdout path)`
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
if (decision === "deny") {
|
|
182
|
+
if (!reply) {
|
|
183
|
+
return {
|
|
184
|
+
honored: false,
|
|
185
|
+
reason: `${host} drops deny on ${event} (deny not honored; fails open to allow)`
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
if (hso?.permissionDecision === "deny" || hso?.decision?.behavior === "deny") {
|
|
189
|
+
return { honored: true, reason: `${host} blocks ${event}` };
|
|
190
|
+
}
|
|
191
|
+
if (reply.decision === "block") {
|
|
192
|
+
return {
|
|
193
|
+
honored: true,
|
|
194
|
+
reason: `${host} continues the session/subagent on ${event} (persistence) \u2014 NOT a block`
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
if (hso?.additionalContext != null) {
|
|
198
|
+
return {
|
|
199
|
+
honored: false,
|
|
200
|
+
reason: `${host} degrades deny to a context note on ${event}; spawn/failure not blocked`
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
return {
|
|
204
|
+
honored: false,
|
|
205
|
+
reason: `${host} drops deny on ${event} (deny not honored; fails open to allow)`
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
if (decision === "ask") {
|
|
209
|
+
if (hso?.permissionDecision === "ask") {
|
|
210
|
+
return { honored: true, reason: `${host} asks on ${event}` };
|
|
211
|
+
}
|
|
212
|
+
if (event === "PermissionRequest" && !reply) {
|
|
213
|
+
return {
|
|
214
|
+
honored: true,
|
|
215
|
+
reason: `${host} shows the native confirmation dialog on ${event} (the ask)`
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
return {
|
|
219
|
+
honored: false,
|
|
220
|
+
reason: `${host} drops ask on ${event} (no ask path)`
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
const wrote = hso?.updatedInput ?? hso?.decision?.updatedInput;
|
|
224
|
+
if (reply && wrote !== void 0 && deepEqual(wrote, response.updatedInput)) {
|
|
225
|
+
return { honored: true, reason: `${host} rewrites tool input on ${event}` };
|
|
226
|
+
}
|
|
227
|
+
return {
|
|
228
|
+
honored: false,
|
|
229
|
+
reason: `${host} drops modify on ${event} (modify not honored)`
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
async function simulate(connector, opts) {
|
|
233
|
+
try {
|
|
234
|
+
const adapter = await loadAdapter(opts.host);
|
|
235
|
+
if (!adapter) {
|
|
236
|
+
return { honored: false, reason: `unknown host "${opts.host}"` };
|
|
237
|
+
}
|
|
238
|
+
if (opts.surface === "statusline") {
|
|
239
|
+
if (!(adapter.capabilities.supportsStatusline ?? false) || !adapter.parseStatusInput || !adapter.formatStatusOutput) {
|
|
240
|
+
return { honored: false, reason: `${opts.host} has no statusline surface` };
|
|
241
|
+
}
|
|
242
|
+
if (!connector.statusline || typeof connector.statusline.render !== "function") {
|
|
243
|
+
return { honored: false, reason: "connector declares no statusline" };
|
|
244
|
+
}
|
|
245
|
+
const ctx = adapter.parseStatusInput(coerceInput(opts.input));
|
|
246
|
+
ctx.connectorId = connector.id;
|
|
247
|
+
if (ctx.capabilities == null) ctx.capabilities = adapter.capabilities;
|
|
248
|
+
const perHost2 = connector.statusline.hosts?.[opts.host]?.render;
|
|
249
|
+
const render = typeof perHost2 === "function" ? perHost2 : connector.statusline.render;
|
|
250
|
+
const rendered = await render(ctx);
|
|
251
|
+
const line = rendered == null ? "" : String(rendered);
|
|
252
|
+
const reply2 = adapter.formatStatusOutput(line);
|
|
253
|
+
return {
|
|
254
|
+
honored: true,
|
|
255
|
+
...reply2.stdout !== void 0 ? { hostReply: reply2.stdout } : {},
|
|
256
|
+
reason: "rendered"
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
const event = opts.event;
|
|
260
|
+
if (!event) {
|
|
261
|
+
return { honored: false, reason: 'event is required when surface === "hooks"' };
|
|
262
|
+
}
|
|
263
|
+
if (!adapter.parseEvent || !adapter.formatReply) {
|
|
264
|
+
return { honored: false, reason: `${opts.host} has no hook runtime (mcp-only)` };
|
|
265
|
+
}
|
|
266
|
+
const evt = adapter.parseEvent(event, coerceInput(opts.input));
|
|
267
|
+
evt.connectorId = connector.id;
|
|
268
|
+
evt.capabilities = adapter.capabilities;
|
|
269
|
+
const definition = connector.hooks[event];
|
|
270
|
+
if (!definition || typeof definition.handler !== "function") {
|
|
271
|
+
return { honored: false, reason: `connector declares no ${event} handler` };
|
|
272
|
+
}
|
|
273
|
+
const subject = eventMatcherSubject(evt);
|
|
274
|
+
if (subject !== void 0) {
|
|
275
|
+
const re = compileMatcher(definition.matcher);
|
|
276
|
+
if (re && !re.test(subject)) {
|
|
277
|
+
return {
|
|
278
|
+
honored: true,
|
|
279
|
+
reason: `matcher excludes ${subject} (handler not run)`
|
|
280
|
+
};
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
const perHost = definition.hosts?.[opts.host]?.handler;
|
|
284
|
+
const handler = typeof perHost === "function" ? perHost : definition.handler;
|
|
285
|
+
const response = normalizeResponse(
|
|
286
|
+
await handler(evt)
|
|
287
|
+
);
|
|
288
|
+
const reply = adapter.formatReply(event, response);
|
|
289
|
+
const verdict = judgeHookHonor(String(opts.host), event, response, reply.stdout);
|
|
290
|
+
return {
|
|
291
|
+
honored: verdict.honored,
|
|
292
|
+
...reply.stdout !== void 0 ? { hostReply: reply.stdout } : {},
|
|
293
|
+
reason: verdict.reason
|
|
294
|
+
};
|
|
295
|
+
} catch (err) {
|
|
296
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
297
|
+
const verb = opts.surface === "statusline" ? "render" : "handler";
|
|
298
|
+
return { honored: false, reason: `${verb} threw: ${message}` };
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
function matchingSubject(matcher, fallback) {
|
|
302
|
+
if (!matcher || matcher === "") return fallback;
|
|
303
|
+
return /^[\w.-]+$/.test(matcher) ? matcher : fallback;
|
|
304
|
+
}
|
|
305
|
+
function syntheticPayloadFor(event, matcher) {
|
|
306
|
+
switch (event) {
|
|
307
|
+
case "PreToolUse":
|
|
308
|
+
case "PostToolUse":
|
|
309
|
+
case "PostToolUseFailure":
|
|
310
|
+
case "PermissionRequest": {
|
|
311
|
+
const tool = matchingSubject(matcher, "Bash");
|
|
312
|
+
return { tool_name: tool, tool_input: { command: "echo hi" } };
|
|
313
|
+
}
|
|
314
|
+
case "SubagentStart":
|
|
315
|
+
case "SubagentStop": {
|
|
316
|
+
const agent = matchingSubject(matcher, "general");
|
|
317
|
+
return { agent_type: agent, subagent_type: agent };
|
|
318
|
+
}
|
|
319
|
+
case "UserPromptSubmit":
|
|
320
|
+
return { prompt: "hello" };
|
|
321
|
+
default:
|
|
322
|
+
return {};
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
async function explainHooks(connector, hosts) {
|
|
326
|
+
const events = connector.hookEvents;
|
|
327
|
+
const rows = [];
|
|
328
|
+
for (const host of hosts) {
|
|
329
|
+
const adapter = await loadAdapter(host);
|
|
330
|
+
if (!adapter) {
|
|
331
|
+
for (const event of events) {
|
|
332
|
+
rows.push({
|
|
333
|
+
host,
|
|
334
|
+
event,
|
|
335
|
+
verdict: "dropped",
|
|
336
|
+
reason: `unknown host "${host}"`
|
|
337
|
+
});
|
|
338
|
+
}
|
|
339
|
+
continue;
|
|
340
|
+
}
|
|
341
|
+
const hasHookRuntime = !!adapter.parseEvent && !!adapter.formatReply;
|
|
342
|
+
for (const event of events) {
|
|
343
|
+
if (!hasHookRuntime) {
|
|
344
|
+
rows.push({
|
|
345
|
+
host: adapter.id,
|
|
346
|
+
event,
|
|
347
|
+
verdict: "dropped",
|
|
348
|
+
reason: `${adapter.id} has no hook runtime (mcp-only) \u2014 ${event} never fires`
|
|
349
|
+
});
|
|
350
|
+
continue;
|
|
351
|
+
}
|
|
352
|
+
if (!hostCanFireEvent(adapter.capabilities, event)) {
|
|
353
|
+
rows.push({
|
|
354
|
+
host: adapter.id,
|
|
355
|
+
event,
|
|
356
|
+
verdict: "dropped",
|
|
357
|
+
reason: `${adapter.id} has no ${event} equivalent \u2014 install skip-warns it; never fires`
|
|
358
|
+
});
|
|
359
|
+
continue;
|
|
360
|
+
}
|
|
361
|
+
const sim = await simulate(connector, {
|
|
362
|
+
surface: "hooks",
|
|
363
|
+
host: adapter.id,
|
|
364
|
+
event,
|
|
365
|
+
input: syntheticPayloadFor(event, connector.hooks[event]?.matcher)
|
|
366
|
+
});
|
|
367
|
+
rows.push({
|
|
368
|
+
host: adapter.id,
|
|
369
|
+
event,
|
|
370
|
+
verdict: sim.honored ? "honored" : "degraded",
|
|
371
|
+
reason: sim.reason
|
|
372
|
+
});
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
rows.sort(
|
|
376
|
+
(a, b) => a.host === b.host ? a.event.localeCompare(b.event) : a.host.localeCompare(b.host)
|
|
377
|
+
);
|
|
378
|
+
return rows;
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
export {
|
|
382
|
+
explain,
|
|
383
|
+
simulate,
|
|
384
|
+
explainHooks
|
|
385
|
+
};
|
|
386
|
+
//# sourceMappingURL=chunk-YJP3KGLM.js.map
|