@ken-jo/agent-connector 0.4.26 → 0.4.44
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/dist/{action-AZRZ3V7E.js → action-72J2TCKQ.js} +8 -8
- package/dist/{amazon-q-BWSOHTW5.js → amazon-q-UFLBUSHG.js} +15 -16
- package/dist/amazon-q-UFLBUSHG.js.map +1 -0
- package/dist/{amp-TF5X6OGH.js → amp-5DJK7VAL.js} +3 -5
- package/dist/{amp-TF5X6OGH.js.map → amp-5DJK7VAL.js.map} +1 -1
- package/dist/{antigravity-3XHBPXZK.js → antigravity-NWP2TUG6.js} +3 -4
- package/dist/{antigravity-cli-TJGOBUPK.js → antigravity-cli-KPNLE7X4.js} +3 -4
- package/dist/{antigravity-cli-TJGOBUPK.js.map → antigravity-cli-KPNLE7X4.js.map} +1 -1
- package/dist/{chunk-YRBFSZ2G.js → chunk-3Q6YEDCG.js} +3 -5
- package/dist/{chunk-YRBFSZ2G.js.map → chunk-3Q6YEDCG.js.map} +1 -1
- package/dist/{chunk-Q5HR4ADS.js → chunk-5M2SMDA4.js} +2 -2
- package/dist/{chunk-3I7UG52L.js → chunk-A767JFHW.js} +65 -4
- package/dist/chunk-A767JFHW.js.map +1 -0
- package/dist/{chunk-JLMD3IGK.js → chunk-ASHAMORS.js} +2 -2
- package/dist/{chunk-YKVNI44Y.js → chunk-B47MDOV3.js} +3 -3
- package/dist/{chunk-ZVTPSV5Z.js → chunk-CFM3JKIR.js} +5 -5
- package/dist/{chunk-HZDU3J4U.js → chunk-E3GWKJU5.js} +20 -4
- package/dist/chunk-E3GWKJU5.js.map +1 -0
- package/dist/{chunk-KD4BE5MW.js → chunk-ERV4TKRV.js} +3 -5
- package/dist/{chunk-KD4BE5MW.js.map → chunk-ERV4TKRV.js.map} +1 -1
- package/dist/{chunk-25BNMXPP.js → chunk-IKEXNI2W.js} +18 -18
- package/dist/{chunk-HU6DZZBG.js → chunk-SBV2QJ5C.js} +36 -36
- package/dist/{chunk-OLI5SD6I.js → chunk-UXG64P6R.js} +2 -2
- package/dist/{chunk-IW46JIQM.js → chunk-VPSHGDDQ.js} +5 -5
- package/dist/{chunk-YEJCNOET.js → chunk-WZWK4ICE.js} +2 -2
- package/dist/{cursor-R5QB4YR4.js → chunk-XW46WVR2.js} +11 -12
- package/dist/chunk-XW46WVR2.js.map +1 -0
- package/dist/{claude-code-JLPFUZ4V.js → claude-code-HXIVRZCY.js} +6 -8
- package/dist/{claude-code-JLPFUZ4V.js.map → claude-code-HXIVRZCY.js.map} +1 -1
- package/dist/cli/sdk.js +4 -4
- package/dist/cli.js +1 -1
- package/dist/{cline-GBP3EVSX.js → cline-AGFJF4AC.js} +3 -5
- package/dist/{cline-GBP3EVSX.js.map → cline-AGFJF4AC.js.map} +1 -1
- package/dist/{codebuff-WMKFUVER.js → codebuff-YUQ4PN7G.js} +3 -5
- package/dist/{codebuff-WMKFUVER.js.map → codebuff-YUQ4PN7G.js.map} +1 -1
- package/dist/{codex-5CZR5XKX.js → codex-FLU37DV3.js} +26 -11
- package/dist/codex-FLU37DV3.js.map +1 -0
- package/dist/{continue-3AGXWM5W.js → continue-ZMI4YN75.js} +2 -3
- package/dist/{continue-3AGXWM5W.js.map → continue-ZMI4YN75.js.map} +1 -1
- package/dist/{copilot-cli-IH4P3GRZ.js → copilot-cli-XPRJ5MQB.js} +29 -5
- package/dist/copilot-cli-XPRJ5MQB.js.map +1 -0
- package/dist/{crush-FDBL3JEK.js → crush-3OB5ZTCC.js} +11 -10
- package/dist/crush-3OB5ZTCC.js.map +1 -0
- package/dist/cursor-F4HYO2FP.js +22 -0
- package/dist/{detect-L5OZPVFO.js → detect-L3NJTBO5.js} +4 -4
- package/dist/{doctor-WDIQ2YFE.js → doctor-PUE4HO3N.js} +13 -10
- package/dist/{doctor-WDIQ2YFE.js.map → doctor-PUE4HO3N.js.map} +1 -1
- package/dist/{droid-X2QHQL7D.js → droid-NZCKYKOV.js} +3 -5
- package/dist/{droid-X2QHQL7D.js.map → droid-NZCKYKOV.js.map} +1 -1
- package/dist/{gemini-cli-HCN7XKSX.js → gemini-cli-3ZGCXUDD.js} +3 -5
- package/dist/{gemini-cli-HCN7XKSX.js.map → gemini-cli-3ZGCXUDD.js.map} +1 -1
- package/dist/{goose-ILMM76JP.js → goose-MGGNVXJP.js} +56 -9
- package/dist/goose-MGGNVXJP.js.map +1 -0
- package/dist/{hermes-YX2ODUZL.js → hermes-L3CBJ37L.js} +8 -6
- package/dist/hermes-L3CBJ37L.js.map +1 -0
- package/dist/{hook-JRDQ56BN.js → hook-S3DNNGZX.js} +8 -8
- package/dist/index.js +2 -2
- package/dist/{install-HRCVPRAQ.js → install-7SUJFRYO.js} +13 -10
- package/dist/{install-HRCVPRAQ.js.map → install-7SUJFRYO.js.map} +1 -1
- package/dist/{jetbrains-copilot-QESFUN6W.js → jetbrains-copilot-M2LHJBAW.js} +3 -5
- package/dist/{jetbrains-copilot-QESFUN6W.js.map → jetbrains-copilot-M2LHJBAW.js.map} +1 -1
- package/dist/{kilo-POTCYIRG.js → kilo-RMRP2EL7.js} +3 -5
- package/dist/{kilo-POTCYIRG.js.map → kilo-RMRP2EL7.js.map} +1 -1
- package/dist/{kilo-cli-MO6FSMH2.js → kilo-cli-6ITBNHTH.js} +14 -10
- package/dist/kilo-cli-6ITBNHTH.js.map +1 -0
- package/dist/{kimi-RXS36OJP.js → kimi-QYHWAY54.js} +65 -25
- package/dist/kimi-QYHWAY54.js.map +1 -0
- package/dist/{kiro-VTLX7CMF.js → kiro-2K5UJVGC.js} +11 -16
- package/dist/kiro-2K5UJVGC.js.map +1 -0
- package/dist/{leaderboard-ASGR3E2U.js → leaderboard-2VAAOK3D.js} +2 -2
- package/dist/{mimo-code-F4BWMESO.js → mimo-code-K7AMX2QW.js} +3 -5
- package/dist/{mimo-code-F4BWMESO.js.map → mimo-code-K7AMX2QW.js.map} +1 -1
- package/dist/{mux-2YFCYFM7.js → mux-GT7FWVLH.js} +3 -5
- package/dist/{mux-2YFCYFM7.js.map → mux-GT7FWVLH.js.map} +1 -1
- package/dist/{nemoclaw-QDB6O22A.js → nemoclaw-GQMS6CUM.js} +3 -4
- package/dist/{nemoclaw-QDB6O22A.js.map → nemoclaw-GQMS6CUM.js.map} +1 -1
- package/dist/{omp-P2JNAEPN.js → omp-2RPYIZUF.js} +2 -3
- package/dist/{omp-P2JNAEPN.js.map → omp-2RPYIZUF.js.map} +1 -1
- package/dist/{openclaw-3UMBSSZM.js → openclaw-P5GMEEGC.js} +3 -4
- package/dist/openclaw-P5GMEEGC.js.map +1 -0
- package/dist/{opencode-Q6H4YT66.js → opencode-5D2SK3EX.js} +3 -5
- package/dist/{opencode-Q6H4YT66.js.map → opencode-5D2SK3EX.js.map} +1 -1
- package/dist/{package-IXBSG7HD.js → package-VUX663ET.js} +10 -7
- package/dist/{package-IXBSG7HD.js.map → package-VUX663ET.js.map} +1 -1
- package/dist/{pi-GW25LPC3.js → pi-ZMM4KJTO.js} +2 -3
- package/dist/{pi-GW25LPC3.js.map → pi-ZMM4KJTO.js.map} +1 -1
- package/dist/{qwen-code-R6XXEEHJ.js → qwen-code-4ZLVGN2C.js} +9 -11
- package/dist/qwen-code-4ZLVGN2C.js.map +1 -0
- package/dist/{roo-code-EZPNFC5V.js → roo-code-67QGLQRM.js} +4 -5
- package/dist/roo-code-67QGLQRM.js.map +1 -0
- package/dist/runtime/index.js +6 -6
- package/dist/sdk/index.js +3 -3
- package/dist/sdk/test.js +5 -5
- package/dist/{serve-CFBQYKRB.js → serve-MOIIYFER.js} +8 -8
- package/dist/{status-ASBFEFQQ.js → status-SCBCWS7H.js} +6 -6
- package/dist/{statusline-WKLWSM7I.js → statusline-NRPDOPGA.js} +7 -7
- package/dist/{telemetry-64GCGNIW.js → telemetry-Q55B5NSZ.js} +5 -5
- package/dist/{trae-6VQW2UVP.js → trae-TMJPHWZ5.js} +3 -5
- package/dist/{trae-6VQW2UVP.js.map → trae-TMJPHWZ5.js.map} +1 -1
- package/dist/{uninstall-KDJYE5ET.js → uninstall-SNI7GPQD.js} +13 -10
- package/dist/{uninstall-KDJYE5ET.js.map → uninstall-SNI7GPQD.js.map} +1 -1
- package/dist/{upgrade-YQRVYR5U.js → upgrade-ZUNBJWJ7.js} +13 -10
- package/dist/{upgrade-YQRVYR5U.js.map → upgrade-ZUNBJWJ7.js.map} +1 -1
- package/dist/{usage-OV2BDZKF.js → usage-UQDBIU42.js} +2 -2
- package/dist/{usage-event-KPI3NEX3.js → usage-event-HPG2BIAY.js} +7 -7
- package/dist/{vscode-copilot-UOEEV4P3.js → vscode-copilot-H7JKUKLZ.js} +19 -8
- package/dist/vscode-copilot-H7JKUKLZ.js.map +1 -0
- package/dist/{warp-LUK2BPCU.js → warp-SVDVKQQI.js} +3 -5
- package/dist/{warp-LUK2BPCU.js.map → warp-SVDVKQQI.js.map} +1 -1
- package/dist/{windsurf-NZ3G42NQ.js → windsurf-H36YKOMR.js} +3 -5
- package/dist/{windsurf-NZ3G42NQ.js.map → windsurf-H36YKOMR.js.map} +1 -1
- package/dist/{zed-LGWGZ4EO.js → zed-LHWJALLZ.js} +3 -5
- package/dist/{zed-LGWGZ4EO.js.map → zed-LHWJALLZ.js.map} +1 -1
- package/package.json +1 -1
- package/dist/amazon-q-BWSOHTW5.js.map +0 -1
- package/dist/chunk-3I7UG52L.js.map +0 -1
- package/dist/chunk-HZDU3J4U.js.map +0 -1
- package/dist/chunk-IEGR4TP3.js +0 -70
- package/dist/chunk-IEGR4TP3.js.map +0 -1
- package/dist/codex-5CZR5XKX.js.map +0 -1
- package/dist/copilot-cli-IH4P3GRZ.js.map +0 -1
- package/dist/crush-FDBL3JEK.js.map +0 -1
- package/dist/cursor-R5QB4YR4.js.map +0 -1
- package/dist/goose-ILMM76JP.js.map +0 -1
- package/dist/hermes-YX2ODUZL.js.map +0 -1
- package/dist/kilo-cli-MO6FSMH2.js.map +0 -1
- package/dist/kimi-RXS36OJP.js.map +0 -1
- package/dist/kiro-VTLX7CMF.js.map +0 -1
- package/dist/qwen-code-R6XXEEHJ.js.map +0 -1
- package/dist/roo-code-EZPNFC5V.js.map +0 -1
- package/dist/vscode-copilot-UOEEV4P3.js.map +0 -1
- /package/dist/{action-AZRZ3V7E.js.map → action-72J2TCKQ.js.map} +0 -0
- /package/dist/{antigravity-3XHBPXZK.js.map → antigravity-NWP2TUG6.js.map} +0 -0
- /package/dist/{chunk-Q5HR4ADS.js.map → chunk-5M2SMDA4.js.map} +0 -0
- /package/dist/{chunk-JLMD3IGK.js.map → chunk-ASHAMORS.js.map} +0 -0
- /package/dist/{chunk-YKVNI44Y.js.map → chunk-B47MDOV3.js.map} +0 -0
- /package/dist/{chunk-ZVTPSV5Z.js.map → chunk-CFM3JKIR.js.map} +0 -0
- /package/dist/{chunk-25BNMXPP.js.map → chunk-IKEXNI2W.js.map} +0 -0
- /package/dist/{chunk-HU6DZZBG.js.map → chunk-SBV2QJ5C.js.map} +0 -0
- /package/dist/{chunk-OLI5SD6I.js.map → chunk-UXG64P6R.js.map} +0 -0
- /package/dist/{chunk-IW46JIQM.js.map → chunk-VPSHGDDQ.js.map} +0 -0
- /package/dist/{chunk-YEJCNOET.js.map → chunk-WZWK4ICE.js.map} +0 -0
- /package/dist/{openclaw-3UMBSSZM.js.map → cursor-F4HYO2FP.js.map} +0 -0
- /package/dist/{detect-L5OZPVFO.js.map → detect-L3NJTBO5.js.map} +0 -0
- /package/dist/{hook-JRDQ56BN.js.map → hook-S3DNNGZX.js.map} +0 -0
- /package/dist/{leaderboard-ASGR3E2U.js.map → leaderboard-2VAAOK3D.js.map} +0 -0
- /package/dist/{serve-CFBQYKRB.js.map → serve-MOIIYFER.js.map} +0 -0
- /package/dist/{status-ASBFEFQQ.js.map → status-SCBCWS7H.js.map} +0 -0
- /package/dist/{statusline-WKLWSM7I.js.map → statusline-NRPDOPGA.js.map} +0 -0
- /package/dist/{telemetry-64GCGNIW.js.map → telemetry-Q55B5NSZ.js.map} +0 -0
- /package/dist/{usage-OV2BDZKF.js.map → usage-UQDBIU42.js.map} +0 -0
- /package/dist/{usage-event-KPI3NEX3.js.map → usage-event-HPG2BIAY.js.map} +0 -0
|
@@ -73,36 +73,36 @@ function renderInstallResult(result, verb) {
|
|
|
73
73
|
return lines.join("\n");
|
|
74
74
|
}
|
|
75
75
|
var COMMANDS = {
|
|
76
|
-
detect: () => import("./detect-
|
|
77
|
-
install: () => import("./install-
|
|
78
|
-
uninstall: () => import("./uninstall-
|
|
76
|
+
detect: () => import("./detect-L3NJTBO5.js"),
|
|
77
|
+
install: () => import("./install-7SUJFRYO.js"),
|
|
78
|
+
uninstall: () => import("./uninstall-SNI7GPQD.js"),
|
|
79
79
|
// `upgrade` is the single "bring everything current" verb (re-render host
|
|
80
80
|
// config + refresh the home pointer + managed channel guidance). `sync` and
|
|
81
81
|
// `update` are kept as back-compat aliases that route to the same module so
|
|
82
82
|
// existing scripts/docs keep working without a second concept to learn.
|
|
83
|
-
upgrade: () => import("./upgrade-
|
|
84
|
-
sync: () => import("./upgrade-
|
|
85
|
-
update: () => import("./upgrade-
|
|
86
|
-
package: () => import("./package-
|
|
87
|
-
doctor: () => import("./doctor-
|
|
88
|
-
status: () => import("./status-
|
|
89
|
-
telemetry: () => import("./telemetry-
|
|
90
|
-
usage: () => import("./usage-
|
|
91
|
-
leaderboard: () => import("./leaderboard-
|
|
92
|
-
hook: () => import("./hook-
|
|
83
|
+
upgrade: () => import("./upgrade-ZUNBJWJ7.js"),
|
|
84
|
+
sync: () => import("./upgrade-ZUNBJWJ7.js"),
|
|
85
|
+
update: () => import("./upgrade-ZUNBJWJ7.js"),
|
|
86
|
+
package: () => import("./package-VUX663ET.js"),
|
|
87
|
+
doctor: () => import("./doctor-PUE4HO3N.js"),
|
|
88
|
+
status: () => import("./status-SCBCWS7H.js"),
|
|
89
|
+
telemetry: () => import("./telemetry-Q55B5NSZ.js"),
|
|
90
|
+
usage: () => import("./usage-UQDBIU42.js"),
|
|
91
|
+
leaderboard: () => import("./leaderboard-2VAAOK3D.js"),
|
|
92
|
+
hook: () => import("./hook-S3DNNGZX.js"),
|
|
93
93
|
// Internal (omitted from USAGE): the statusline (HUD) entrypoint a host's
|
|
94
94
|
// status line config points at. Fail-safe: always exits 0 with at most a
|
|
95
95
|
// rendered line. See cli/commands/statusline.ts.
|
|
96
|
-
statusline: () => import("./statusline-
|
|
96
|
+
statusline: () => import("./statusline-NRPDOPGA.js"),
|
|
97
97
|
// Internal (omitted from USAGE): the user-invokable action entrypoint a future
|
|
98
98
|
// host affordance points at. USER-TRIGGERED: surfaces errors (exit 1 + stderr),
|
|
99
99
|
// unlike the fail-open hook / fail-safe statusline. See cli/commands/action.ts.
|
|
100
|
-
action: () => import("./action-
|
|
101
|
-
serve: () => import("./serve-
|
|
100
|
+
action: () => import("./action-72J2TCKQ.js"),
|
|
101
|
+
serve: () => import("./serve-MOIIYFER.js"),
|
|
102
102
|
// Hidden (omitted from USAGE): the opt-in host-native turn-usage entrypoint an
|
|
103
103
|
// AfterModel / PostInvocation hook points at. Always exits 0; records a
|
|
104
104
|
// distinct `model_turn` row. See cli/commands/usage-event.ts.
|
|
105
|
-
"usage-event": () => import("./usage-event-
|
|
105
|
+
"usage-event": () => import("./usage-event-HPG2BIAY.js")
|
|
106
106
|
};
|
|
107
107
|
var DEFAULT_PROGRAM_NAME = "agent-connector";
|
|
108
108
|
var COMMAND_USAGE = {
|
|
@@ -198,4 +198,4 @@ export {
|
|
|
198
198
|
renderInstallResult,
|
|
199
199
|
main
|
|
200
200
|
};
|
|
201
|
-
//# sourceMappingURL=chunk-
|
|
201
|
+
//# sourceMappingURL=chunk-IKEXNI2W.js.map
|
|
@@ -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-HXIVRZCY.js").then((m) => m.default)
|
|
8
8
|
},
|
|
9
9
|
{
|
|
10
10
|
id: "codex",
|
|
11
|
-
load: () => import("./codex-
|
|
11
|
+
load: () => import("./codex-FLU37DV3.js").then((m) => m.default)
|
|
12
12
|
},
|
|
13
13
|
{
|
|
14
14
|
id: "cursor",
|
|
15
|
-
load: () => import("./cursor-
|
|
15
|
+
load: () => import("./cursor-F4HYO2FP.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-H7JKUKLZ.js").then((m) => m.default)
|
|
22
22
|
},
|
|
23
23
|
{
|
|
24
24
|
id: "copilot-cli",
|
|
25
|
-
load: () => import("./copilot-cli-
|
|
25
|
+
load: () => import("./copilot-cli-XPRJ5MQB.js").then((m) => m.default)
|
|
26
26
|
},
|
|
27
27
|
{
|
|
28
28
|
id: "gemini-cli",
|
|
29
|
-
load: () => import("./gemini-cli-
|
|
29
|
+
load: () => import("./gemini-cli-3ZGCXUDD.js").then((m) => m.default)
|
|
30
30
|
},
|
|
31
31
|
{
|
|
32
32
|
id: "warp",
|
|
33
|
-
load: () => import("./warp-
|
|
33
|
+
load: () => import("./warp-SVDVKQQI.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-5D2SK3EX.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-K7AMX2QW.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-6ITBNHTH.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-NZCKYKOV.js").then((m) => m.default)
|
|
63
63
|
},
|
|
64
64
|
{
|
|
65
65
|
id: "roo-code",
|
|
66
|
-
load: () => import("./roo-code-
|
|
66
|
+
load: () => import("./roo-code-67QGLQRM.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-RMRP2EL7.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-AGFJF4AC.js").then((m) => m.default)
|
|
85
85
|
},
|
|
86
86
|
{
|
|
87
87
|
id: "trae",
|
|
88
|
-
load: () => import("./trae-
|
|
88
|
+
load: () => import("./trae-TMJPHWZ5.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-KPNLE7X4.js").then((m) => m.default)
|
|
97
97
|
},
|
|
98
98
|
{
|
|
99
99
|
id: "antigravity",
|
|
100
|
-
load: () => import("./antigravity-
|
|
100
|
+
load: () => import("./antigravity-NWP2TUG6.js").then((m) => m.default)
|
|
101
101
|
},
|
|
102
102
|
{
|
|
103
103
|
id: "zed",
|
|
104
|
-
load: () => import("./zed-
|
|
104
|
+
load: () => import("./zed-LHWJALLZ.js").then((m) => m.default)
|
|
105
105
|
},
|
|
106
106
|
{
|
|
107
107
|
id: "amp",
|
|
108
|
-
load: () => import("./amp-
|
|
108
|
+
load: () => import("./amp-5DJK7VAL.js").then((m) => m.default)
|
|
109
109
|
},
|
|
110
110
|
{
|
|
111
111
|
id: "codebuff",
|
|
112
|
-
load: () => import("./codebuff-
|
|
112
|
+
load: () => import("./codebuff-YUQ4PN7G.js").then((m) => m.default)
|
|
113
113
|
},
|
|
114
114
|
{
|
|
115
115
|
id: "mux",
|
|
116
|
-
load: () => import("./mux-
|
|
116
|
+
load: () => import("./mux-GT7FWVLH.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-ZMM4KJTO.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-M2LHJBAW.js").then((m) => m.default)
|
|
129
129
|
},
|
|
130
130
|
{
|
|
131
131
|
id: "qwen-code",
|
|
132
|
-
load: () => import("./qwen-code-
|
|
132
|
+
load: () => import("./qwen-code-4ZLVGN2C.js").then((m) => m.default)
|
|
133
133
|
},
|
|
134
134
|
{
|
|
135
135
|
id: "kiro",
|
|
136
|
-
load: () => import("./kiro-
|
|
136
|
+
load: () => import("./kiro-2K5UJVGC.js").then((m) => m.default)
|
|
137
137
|
},
|
|
138
138
|
{
|
|
139
139
|
id: "kimi",
|
|
140
|
-
load: () => import("./kimi-
|
|
140
|
+
load: () => import("./kimi-QYHWAY54.js").then((m) => m.default)
|
|
141
141
|
},
|
|
142
142
|
{
|
|
143
143
|
id: "crush",
|
|
144
|
-
load: () => import("./crush-
|
|
144
|
+
load: () => import("./crush-3OB5ZTCC.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-MGGNVXJP.js").then((m) => m.default)
|
|
150
150
|
},
|
|
151
151
|
{
|
|
152
152
|
id: "hermes",
|
|
153
|
-
load: () => import("./hermes-
|
|
153
|
+
load: () => import("./hermes-L3CBJ37L.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-2RPYIZUF.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-GQMS6CUM.js").then((m) => m.default)
|
|
172
172
|
},
|
|
173
173
|
{
|
|
174
174
|
id: "openclaw",
|
|
175
|
-
load: () => import("./openclaw-
|
|
175
|
+
load: () => import("./openclaw-P5GMEEGC.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-UFLBUSHG.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-ZMI4YN75.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-H36YKOMR.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-SBV2QJ5C.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
defineConnector
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-WZWK4ICE.js";
|
|
5
5
|
import {
|
|
6
6
|
connectorDir,
|
|
7
7
|
connectorsDir,
|
|
@@ -178,4 +178,4 @@ export {
|
|
|
178
178
|
connectorFromMeta,
|
|
179
179
|
listRegisteredConnectors
|
|
180
180
|
};
|
|
181
|
-
//# sourceMappingURL=chunk-
|
|
181
|
+
//# sourceMappingURL=chunk-UXG64P6R.js.map
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import {
|
|
3
3
|
installInstructions,
|
|
4
4
|
packageConnector
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-E3GWKJU5.js";
|
|
6
6
|
import {
|
|
7
7
|
MARKETPLACE_NAME,
|
|
8
8
|
agyPluginInstalled,
|
|
@@ -44,7 +44,7 @@ import {
|
|
|
44
44
|
} from "./chunk-7QRUZAUG.js";
|
|
45
45
|
import {
|
|
46
46
|
detectInstalledPlatforms
|
|
47
|
-
} from "./chunk-
|
|
47
|
+
} from "./chunk-5M2SMDA4.js";
|
|
48
48
|
import {
|
|
49
49
|
log
|
|
50
50
|
} from "./chunk-KHO5WNTP.js";
|
|
@@ -52,11 +52,11 @@ import {
|
|
|
52
52
|
deregisterConnector,
|
|
53
53
|
loadRegisteredConnector,
|
|
54
54
|
registerConnector
|
|
55
|
-
} from "./chunk-
|
|
55
|
+
} from "./chunk-UXG64P6R.js";
|
|
56
56
|
import {
|
|
57
57
|
REGISTERED_PLATFORM_IDS,
|
|
58
58
|
loadAdapter
|
|
59
|
-
} from "./chunk-
|
|
59
|
+
} from "./chunk-SBV2QJ5C.js";
|
|
60
60
|
import {
|
|
61
61
|
configPatchManualEdit
|
|
62
62
|
} from "./chunk-L7ESV37V.js";
|
|
@@ -3022,4 +3022,4 @@ export {
|
|
|
3022
3022
|
upgradeViaMarketplace,
|
|
3023
3023
|
marketplaceDoctorChecks
|
|
3024
3024
|
};
|
|
3025
|
-
//# sourceMappingURL=chunk-
|
|
3025
|
+
//# sourceMappingURL=chunk-VPSHGDDQ.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
REGISTERED_PLATFORM_IDS
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-SBV2QJ5C.js";
|
|
5
5
|
import {
|
|
6
6
|
CONFIG_PATCH_SEGMENT_RE,
|
|
7
7
|
configPatchNamespaceViolation,
|
|
@@ -495,4 +495,4 @@ export {
|
|
|
495
495
|
defineConfigPatch,
|
|
496
496
|
defineNativeHook
|
|
497
497
|
};
|
|
498
|
-
//# sourceMappingURL=chunk-
|
|
498
|
+
//# sourceMappingURL=chunk-WZWK4ICE.js.map
|
|
@@ -6,17 +6,13 @@ import {
|
|
|
6
6
|
rewriteEnvRefs
|
|
7
7
|
} from "./chunk-DBQMX75U.js";
|
|
8
8
|
import {
|
|
9
|
-
BaseAdapter
|
|
10
|
-
} from "./chunk-3I7UG52L.js";
|
|
11
|
-
import {
|
|
9
|
+
BaseAdapter,
|
|
12
10
|
renderSkillMd
|
|
13
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-A767JFHW.js";
|
|
14
12
|
import {
|
|
15
13
|
buildWrappedStdio,
|
|
16
14
|
isHomeBinHookCommand
|
|
17
15
|
} from "./chunk-TO57WYBB.js";
|
|
18
|
-
import "./chunk-ZY25RG4Y.js";
|
|
19
|
-
import "./chunk-QY42WGBX.js";
|
|
20
16
|
|
|
21
17
|
// src/adapters/cursor/index.ts
|
|
22
18
|
import { existsSync } from "fs";
|
|
@@ -41,7 +37,7 @@ var CURSOR_EVENT = {
|
|
|
41
37
|
PreCompact: "preCompact",
|
|
42
38
|
UserPromptSubmit: "beforeSubmitPrompt"
|
|
43
39
|
};
|
|
44
|
-
var
|
|
40
|
+
var CURSOR_EVENT_MAP = {
|
|
45
41
|
PreToolUse: CURSOR_EVENT.PreToolUse,
|
|
46
42
|
PostToolUse: CURSOR_EVENT.PostToolUse,
|
|
47
43
|
SessionStart: CURSOR_EVENT.SessionStart,
|
|
@@ -232,8 +228,8 @@ var CursorAdapter = class extends BaseAdapter {
|
|
|
232
228
|
}
|
|
233
229
|
/**
|
|
234
230
|
* Cursor's hook-merge descriptor (FLAT shape `{ command, matcher? }`):
|
|
235
|
-
* - mapEvent renames canonical → Cursor's lower-camel native key
|
|
236
|
-
* an unmapped event warn-skips (no Cursor equivalent).
|
|
231
|
+
* - mapEvent renames canonical → Cursor's lower-camel native key
|
|
232
|
+
* (CURSOR_EVENT_MAP); an unmapped event warn-skips (no Cursor equivalent).
|
|
237
233
|
* - renderEntry omits the `matcher` key when the matcher is falsy — this
|
|
238
234
|
* `{command}` vs `{command,matcher}` distinction is load-bearing on-disk
|
|
239
235
|
* bytes (Cursor's flat entry shape), reproduced exactly here.
|
|
@@ -246,7 +242,7 @@ var CursorAdapter = class extends BaseAdapter {
|
|
|
246
242
|
*/
|
|
247
243
|
hookDescriptor(ctx) {
|
|
248
244
|
return {
|
|
249
|
-
mapEvent: (e) =>
|
|
245
|
+
mapEvent: (e) => CURSOR_EVENT_MAP[e],
|
|
250
246
|
unmappedWarnDetail: (e) => `${e} has no Cursor hook equivalent \u2014 skipped`,
|
|
251
247
|
renderEntry: (_event, matcher, command) => matcher ? { command, matcher } : { command },
|
|
252
248
|
entryOwnsCommand: (entry, _command) => this.isOurCommand(entry.command, ctx),
|
|
@@ -637,9 +633,12 @@ function extractSessionId(input) {
|
|
|
637
633
|
}
|
|
638
634
|
var adapter = new CursorAdapter();
|
|
639
635
|
var cursor_default = adapter;
|
|
636
|
+
|
|
640
637
|
export {
|
|
638
|
+
CURSOR_HOOKS_VERSION,
|
|
639
|
+
CURSOR_EVENT_MAP,
|
|
641
640
|
CursorAdapter,
|
|
642
641
|
adapter,
|
|
643
|
-
cursor_default
|
|
642
|
+
cursor_default
|
|
644
643
|
};
|
|
645
|
-
//# sourceMappingURL=
|
|
644
|
+
//# sourceMappingURL=chunk-XW46WVR2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/adapters/cursor/index.ts"],"sourcesContent":["/**\n * adapters/cursor — Cursor platform adapter for agent-connector.\n *\n * Generalized from context-mode's proven Cursor adapter: the served identity is\n * now `ctx.connector` (not a hardcoded \"context-mode\"), and every hook command\n * points at the single stable home binary (the shared hook-merge engine builds\n * the command) so one framework update propagates everywhere.\n *\n * Cursor is a json-stdio host:\n * - MCP servers: user scope → ~/.cursor/mcp.json (\"mcpServers\"); project scope\n * → <projectDir>/.cursor/mcp.json (\"mcpServers\").\n * - Hooks: <configDir>/hooks.json with shape `{ version, hooks: { <cursorEvent>:\n * [ { command, matcher? } ] } }`. Unlike Claude, each entry is a FLAT command\n * object (no `{ matcher, hooks:[...] }` wrapper).\n * - Reply: a JSON object on stdout (exit 0). deny/ask carry `permission` +\n * `user_message`; modify carries `updated_input`; context injects via\n * `agent_message` (PreToolUse) or `additional_context` (Post/SessionStart).\n *\n * Cursor supports its own `${env:VAR}` native interpolation, so env/header/url\n * values are rewritten to that native token rather than baked into the file.\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 CommandDef,\n DetectedPlatform,\n HealthCheck,\n HookEventName,\n HookParadigm,\n HookResponse,\n PlatformCapabilities,\n PlatformId,\n PostToolUseEvent,\n PostToolUseFailureEvent,\n PreCompactEvent,\n PreToolUseEvent,\n ServerDef,\n SessionEndEvent,\n SessionStartEvent,\n StopEvent,\n SubagentDef,\n SubagentStartEvent,\n SubagentStopEvent,\n Transport,\n UserPromptSubmitEvent,\n} from \"../../core/types.js\";\nimport { rewriteEnvRefs } from \"../../core/interpolate.js\";\nimport {\n buildWrappedStdio,\n isHomeBinHookCommand,\n} from \"../../core/spawn.js\";\nimport { renderSkillMd } from \"../claude-code/render.js\";\nimport { normalizeSessionSource } from \"../claude-code/wire.js\";\n\nconst HOST: PlatformId = \"cursor\";\nconst MCP_ROOT_KEY = \"mcpServers\";\n\n/**\n * Native hooks.json version Cursor expects. Exported as the SINGLE source of\n * truth for Cursor's hooks-file version, shared with the `cursor-plugin`\n * package emitter so the live install + the packaged bundle can never stamp\n * different versions (see core/package-formats/cursor.ts).\n */\nexport const CURSOR_HOOKS_VERSION = 1;\n\n/**\n * Cursor-native hook event names, in the lower-camel form Cursor reads from\n * hooks.json. The first four are the events the proven context-mode adapter\n * registers; postToolUseFailure / subagentStart / subagentStop are Cursor's\n * documented \"Subagent (Task tool) lifecycle\" + tool-failure hooks.\n */\nconst CURSOR_EVENT = {\n PreToolUse: \"preToolUse\",\n PostToolUse: \"postToolUse\",\n SessionStart: \"sessionStart\",\n Stop: \"stop\",\n PostToolUseFailure: \"postToolUseFailure\",\n SubagentStart: \"subagentStart\",\n SubagentStop: \"subagentStop\",\n // Lifecycle/prompt events Cursor 1.7+ documents (cursor.com/docs/hooks):\n // sessionEnd is fire-and-forget; preCompact is observational (cannot block);\n // beforeSubmitPrompt fires before a prompt is sent and CAN prevent submission\n // (Cursor itself matches beforeSubmitPrompt against the value \"UserPromptSubmit\").\n SessionEnd: \"sessionEnd\",\n PreCompact: \"preCompact\",\n UserPromptSubmit: \"beforeSubmitPrompt\",\n} as const;\n\n/**\n * Map our normalized event names to Cursor's native hook event names. Only the\n * events Cursor actually supports are present; everything else has no Cursor\n * equivalent and is reported as a skip/warn at install time.\n *\n * PermissionRequest is deliberately ABSENT: Cursor has no permission-dialog\n * event — its permission gate is the OUTPUT field `permission: \"allow\"|\"deny\"|\n * \"ask\"` of the before* hooks (beforeShellExecution / beforeMCPExecution /\n * beforeReadFile / preToolUse), not an observable event. Install reports the\n * standard skip-warn for it.\n *\n * Exported as the SINGLE source of truth for canonical→Cursor-native event\n * mapping, shared with the `cursor-plugin` package emitter (see\n * core/package-formats/cursor.ts) so the packaged bundle's hooks.json keys can\n * never silently diverge from the live install adapter's.\n */\nexport const CURSOR_EVENT_MAP: Partial<Record<HookEventName, string>> = {\n PreToolUse: CURSOR_EVENT.PreToolUse,\n PostToolUse: CURSOR_EVENT.PostToolUse,\n SessionStart: CURSOR_EVENT.SessionStart,\n Stop: CURSOR_EVENT.Stop,\n PostToolUseFailure: CURSOR_EVENT.PostToolUseFailure,\n SubagentStart: CURSOR_EVENT.SubagentStart,\n SubagentStop: CURSOR_EVENT.SubagentStop,\n SessionEnd: CURSOR_EVENT.SessionEnd,\n PreCompact: CURSOR_EVENT.PreCompact,\n UserPromptSubmit: CURSOR_EVENT.UserPromptSubmit,\n};\n\n/** A single Cursor native hook entry — a flat command object. */\ninterface CursorHookEntry {\n command: string;\n matcher?: string;\n}\n\n/** Native MCP server entry shapes Cursor accepts under `mcpServers`. */\ninterface CursorStdioServer {\n command: string;\n args?: string[];\n env?: Record<string, string>;\n cwd?: string;\n}\ninterface CursorHttpServer {\n url: string;\n headers?: Record<string, string>;\n}\n\n/** Raw Cursor hook stdin payload (snake_case wire fields). */\ninterface CursorWireInput {\n connector?: unknown;\n tool_name?: string;\n tool_input?: Record<string, unknown>;\n tool_output?: string;\n error_message?: string;\n cwd?: string;\n workspace_roots?: string[];\n conversation_id?: string;\n session_id?: string;\n generation_id?: string;\n source?: string;\n trigger?: string;\n status?: string;\n loop_count?: number;\n stop_hook_active?: boolean;\n\n // beforeSubmitPrompt (UserPromptSubmit) — the submitted prompt text.\n // sessionEnd — the documented end reason. Both field names are taken\n // verbatim from cursor.com/docs/hooks (snake_case wire).\n prompt?: string;\n reason?: string;\n\n // postToolUseFailure — Cursor's existing error vocabulary is error_message;\n // the Claude-compatible names are accepted defensively (unverified wire).\n error?: string;\n tool_use_id?: string;\n is_interrupt?: boolean;\n duration_ms?: number;\n\n // subagentStart / subagentStop (Task-tool lifecycle). Both name families are\n // parsed defensively: agent_* (Claude-compatible) and subagent_* (Cursor-ish).\n agent_id?: string;\n agent_type?: string;\n subagent_id?: string;\n subagent_type?: string;\n last_assistant_message?: string;\n}\n\nexport class CursorAdapter extends BaseAdapter implements Adapter {\n readonly id: PlatformId = HOST;\n readonly name = \"Cursor\";\n readonly paradigm: HookParadigm = \"json-stdio\";\n\n readonly capabilities: PlatformCapabilities = {\n // Memory surface: AGENTS.md-first managed block via the BaseAdapter default\n // (memoryTargets: project <projectDir>/AGENTS.md; user scope where documented).\n supportsMemory: true,\n // Cursor natively supports pre/post tool-use, session start/end, prompt\n // submission, context compaction, and stop (cursor.com/docs/hooks, v1.7+).\n preToolUse: true,\n postToolUse: true,\n preCompact: true,\n sessionStart: true,\n sessionEnd: true,\n userPromptSubmit: true,\n stop: true,\n notification: false,\n // Newer events: Cursor has dedicated postToolUseFailure + subagentStart/\n // subagentStop hooks. permissionRequest stays unset — Cursor's permission\n // gate is an OUTPUT field of its before* hooks, not an observable event\n // (see the EVENT_MAP note).\n postToolUseFailure: true,\n subagentStart: true,\n subagentStop: true,\n // Cursor's preToolUse can rewrite tool input (updated_input) but cannot\n // rewrite already-emitted tool output.\n canModifyArgs: true,\n canModifyOutput: false,\n canInjectSessionContext: true,\n transports: [\"stdio\", \"http\"],\n // Content surfaces: Cursor supports all three (commands, skills, subagents).\n supportsCommands: true,\n supportsSkills: true,\n supportsSubagents: true,\n // Native passthrough hooks: Cursor documents many granular hooks with NO\n // canonical analog — beforeShellExecution / afterShellExecution /\n // beforeMCPExecution / afterMCPExecution / beforeReadFile / afterFileEdit /\n // beforeTabFileRead / afterTabFileEdit / workspaceOpen / afterAgentResponse /\n // afterAgentThought (cursor.com/docs/hooks). They are\n // host-specific (below the >=3-host core bar; see\n // docs/research/host-specific-hook-events-design.md). A connector reaches them\n // by declaring platforms[\"cursor\"].nativeHooks; installHooks writes those\n // event-name keys verbatim into hooks.json, and the generic uninstall reverses\n // them.\n supportsNativeHooks: true,\n // Cursor has a command-driven status line (`/statusline` → `statusLine` in\n // ~/.cursor/cli-config.json, GLOBAL scope only) per the Cursor changelog, but\n // the config-key shape + the Claude-parity stdin payload are sourced from a\n // community tool (agent-status-pills), not first-party Cursor docs — payload\n // field names unverified. Deferred pending a live cursor-agent capture; not a\n // permanent gap; user-scope only when wired.\n };\n\n // ── Detection ────────────────────────────────────────────────────────────\n\n detectInstalled(projectDir: string): DetectedPlatform {\n const userDir = join(homedir(), \".cursor\");\n const userMcp = join(userDir, \"mcp.json\");\n const userHooks = join(userDir, \"hooks.json\");\n const projectDirCursor = join(projectDir, \".cursor\");\n const installed =\n existsSync(userDir) ||\n existsSync(userMcp) ||\n existsSync(userHooks) ||\n existsSync(projectDirCursor);\n return {\n id: this.id,\n name: this.name,\n installed,\n paradigm: this.paradigm,\n capabilities: this.capabilities,\n configPath: userMcp,\n scope: \"user\",\n reason: installed\n ? `found Cursor config under ${userDir}`\n : `no Cursor config at ${userDir}`,\n confidence: installed ? \"high\" : \"low\",\n };\n }\n\n // ── Native paths ─────────────────────────────────────────────────────────\n\n getConfigDir(ctx: InstallContext): string {\n return ctx.scope === \"project\"\n ? join(ctx.projectDir, \".cursor\")\n : join(homedir(), \".cursor\");\n }\n\n getServerConfigPath(ctx: InstallContext): string {\n return join(this.getConfigDir(ctx), \"mcp.json\");\n }\n\n getHookConfigPath(ctx: InstallContext): string {\n return join(this.getConfigDir(ctx), \"hooks.json\");\n }\n\n // ── MCP server install / uninstall ───────────────────────────────────────\n\n installServer(ctx: InstallContext): ChangeRecord[] {\n const { connector } = ctx;\n const override = connector.platforms[HOST]?.server;\n if (!connector.server || override === false) {\n return [\n {\n platform: this.id,\n action: \"skip\",\n detail: connector.server\n ? \"server registration disabled for cursor\"\n : \"connector declares no MCP server\",\n },\n ];\n }\n\n // Shallow-merge any per-platform server override into the base ServerDef.\n const server: ServerDef =\n override && typeof override === \"object\"\n ? { ...connector.server, ...override }\n : connector.server;\n\n const serverPath = this.getServerConfigPath(ctx);\n const entry = this.renderServerEntry(ctx, server);\n\n return [\n this.upsertServerInJson(serverPath, MCP_ROOT_KEY, connector.id, entry, ctx.dryRun),\n ];\n }\n\n uninstallServer(ctx: InstallContext): ChangeRecord[] {\n const serverPath = this.getServerConfigPath(ctx);\n return [\n this.removeServerFromJson(serverPath, MCP_ROOT_KEY, ctx.connector.id, ctx.dryRun),\n ];\n }\n\n /** Render a normalized ServerDef into Cursor's native mcpServers entry. */\n private renderServerEntry(\n ctx: InstallContext,\n server: ServerDef,\n ): CursorStdioServer | CursorHttpServer {\n const transport: Transport = server.transport;\n\n if (transport === \"stdio\") {\n let command = server.command ?? \"\";\n let args = [...(server.args ?? [])];\n\n // Transparent telemetry wrapping: route the real command through\n // `<homeBin> serve --connector <id> -- <command> <args...>`.\n ({ command, args } = buildWrappedStdio(ctx, server, this.id, command, args));\n\n const entry: CursorStdioServer = { command: this.rewrite(command) };\n if (args.length > 0) entry.args = args.map((a) => this.rewrite(a));\n const env = this.renderEnv(server.env);\n if (env) entry.env = env;\n if (server.cwd) entry.cwd = this.rewrite(server.cwd);\n return entry;\n }\n\n // http (and any other remote transport we surface) — Cursor registers a URL.\n const entry: CursorHttpServer = { url: this.rewrite(server.url ?? \"\") };\n const headers = this.renderEnv(server.headers);\n if (headers) entry.headers = headers;\n return entry;\n }\n\n /**\n * Render env/header values. Cursor supports its own `${env:VAR}` native\n * interpolation, so translate `${env:VAR}` refs to that native token rather\n * than baking secrets into the file. Literals pass through unchanged.\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 const out: Record<string, string> = {};\n for (const [k, v] of Object.entries(env)) out[k] = this.rewrite(v);\n return out;\n }\n\n /** Translate `${env:VAR(:-default)}` to Cursor's native `${env:VAR}` token. */\n private rewrite(value: string): string {\n return rewriteEnvRefs(value, cursorEnvToken);\n }\n\n // ── Hook install / uninstall ─────────────────────────────────────────────\n\n installHooks(ctx: InstallContext): ChangeRecord[] {\n const { connector } = ctx;\n const override = connector.platforms[HOST];\n\n // `hooks: false` disables only the NORMALIZED events. nativeHooks is a\n // sibling, cursor-scoped declaration on the same override and installs\n // 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: override?.hooks === false ? \"hooks disabled for cursor\" : \"connector declares no hooks\",\n },\n ];\n }\n\n // Normalized events go through the engine's mapEvent/warn path; native\n // event-name keys ride the separate `native` pass (verbatim keys, EXACT\n // command, the `(native)` detail) — see the descriptor + base.upsertHookEntries.\n const pending = normalizedEvents.map((event) => ({\n event,\n matcher: connector.hooks[event]?.matcher ?? \"\",\n }));\n const native = nativeEvents.map((event) => ({\n event,\n matcher: nativeHooks[event]?.matcher ?? \"\",\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 * Cursor's hook-merge descriptor (FLAT shape `{ command, matcher? }`):\n * - mapEvent renames canonical → Cursor's lower-camel native key\n * (CURSOR_EVENT_MAP); an unmapped event warn-skips (no Cursor equivalent).\n * - renderEntry omits the `matcher` key when the matcher is falsy — this\n * `{command}` vs `{command,matcher}` distinction is load-bearing on-disk\n * bytes (Cursor's flat entry shape), reproduced exactly here.\n * - install find is connector-generic (ANY of our commands at the flat\n * `entry.command`); uninstall drops whole owned entries (flat — NO\n * stripInner). The version stamp is install-only via onMutate.\n * - the native pass uses EXACT-command ownership so a native key coinciding\n * with a normalized event's mapped key adds a SECOND distinct command\n * rather than clobbering the normalized entry.\n */\n private hookDescriptor(ctx: InstallContext): HookMergeDescriptor<CursorHookEntry> {\n return {\n mapEvent: (e) => CURSOR_EVENT_MAP[e as HookEventName],\n unmappedWarnDetail: (e) => `${e} has no Cursor hook equivalent — skipped`,\n renderEntry: (_event, matcher, command) =>\n matcher ? { command, matcher } : { command },\n entryOwnsCommand: (entry, _command) => this.isOurCommand(entry.command, ctx),\n ownsEntryForRemove: (c) => (entry) => this.isOurCommand(entry.command, c),\n skipDetail: (e) => `hooks.${e} already registered`,\n removeDetail: (e, n) => `hooks.${e} (${n})`,\n absentDetail: \"no hooks section present\",\n noMatchDetail: \"no matching hook entries\",\n onMutate: (file) => {\n (file as { version?: number }).version = CURSOR_HOOKS_VERSION;\n },\n nativeOwnsCommand: (entry, command) => entry.command === command,\n nativeSkipDetail: (e) => `hooks.${e} (native) already registered`,\n nativeMutateDetail: (e) => `hooks.${e} (native)`,\n };\n }\n\n /** True when a hook command references our home binary AND this connector id\n * (anchored so a shared-prefix id can't collide — see isHomeBinHookCommand). */\n private isOurCommand(command: string | undefined, ctx: InstallContext): boolean {\n return isHomeBinHookCommand(command, ctx.homeBinPath, ctx.connector.id);\n }\n\n // ── Content surfaces: commands / skills / subagents ──────────────────────\n // CONTENT-ONLY: pure native-file writers under <configDir>/{commands,skills,\n // agents}. No runtime dispatch, no home-bin pointer, no telemetry wrap. Each\n // method is idempotent (byte-identical → skip) via BaseAdapter.writeContentFile\n // and reversible via removeContentFile. Honors platforms[\"cursor\"] per-surface\n // false to skip. Cursor commands are BODY-ONLY markdown (no frontmatter);\n // skills are the uniform <name>/SKILL.md + resources; subagents are md+fm.\n\n private commandsDir(ctx: InstallContext): string {\n return join(this.getConfigDir(ctx), \"commands\");\n }\n private skillsDir(ctx: InstallContext): string {\n return join(this.getConfigDir(ctx), \"skills\");\n }\n private agentsDir(ctx: InstallContext): string {\n return join(this.getConfigDir(ctx), \"agents\");\n }\n\n /** Native command file path: <configDir>/commands/<name>.md. */\n private commandPath(ctx: InstallContext, name: string): string {\n return join(this.commandsDir(ctx), `${name}.md`);\n }\n /** Native skill dir: <configDir>/skills/<name>. */\n private skillDir(ctx: InstallContext, name: string): string {\n return join(this.skillsDir(ctx), name);\n }\n /** Native subagent file path: <configDir>/agents/<name>.md. */\n private subagentPath(ctx: InstallContext, name: string): string {\n return join(this.agentsDir(ctx), `${name}.md`);\n }\n\n // ── Commands ──────────────────────────────────────────────────────────────\n\n override installCommands(ctx: InstallContext): ChangeRecord[] {\n const { connector } = ctx;\n if (connector.platforms[HOST]?.commands === false) {\n return [{ platform: this.id, action: \"skip\", detail: \"commands disabled for cursor\" }];\n }\n if (connector.commands.length === 0) {\n return [{ platform: this.id, action: \"skip\", detail: \"connector declares no commands\" }];\n }\n return connector.commands.map((cmd) =>\n this.writeContentFile(\n this.commandPath(ctx, cmd.name),\n this.renderCommand(cmd),\n ctx.dryRun,\n ),\n );\n }\n\n override uninstallCommands(ctx: InstallContext): ChangeRecord[] {\n const { connector } = ctx;\n if (connector.commands.length === 0) {\n return [{ platform: this.id, action: \"skip\", detail: \"connector declares no commands\" }];\n }\n return connector.commands.map((cmd) =>\n this.removeContentFile(this.commandPath(ctx, cmd.name), ctx.dryRun),\n );\n }\n\n /**\n * Render a Cursor command: BODY-ONLY markdown (no frontmatter). Cursor reads\n * the file as the command prompt verbatim. We prepend the one-line description\n * as an HTML comment header when present so authoring intent survives the\n * round-trip without leaking into the rendered prompt. A description containing\n * \"-->\" would prematurely CLOSE the HTML comment and leak the remainder into\n * the prompt, so we neutralize that sequence before embedding it.\n */\n private renderCommand(cmd: CommandDef): string {\n if (!cmd.description) return `${cmd.prompt}\\n`;\n // Break any literal comment-close so it cannot terminate our header early.\n const safe = cmd.description.replace(/--+>/g, (m) => m.replace(/>/g, \">\"));\n return `<!-- ${safe} -->\\n\\n${cmd.prompt}\\n`;\n }\n\n // ── Skills ────────────────────────────────────────────────────────────────\n\n override installSkills(ctx: InstallContext): ChangeRecord[] {\n const { connector } = ctx;\n if (connector.platforms[HOST]?.skills === false) {\n return [{ platform: this.id, action: \"skip\", detail: \"skills disabled for cursor\" }];\n }\n if (connector.skills.length === 0) {\n return [{ platform: this.id, action: \"skip\", detail: \"connector declares no skills\" }];\n }\n const changes: ChangeRecord[] = [];\n for (const skill of connector.skills) {\n const dir = this.skillDir(ctx, skill.name);\n changes.push(\n this.writeContentFile(join(dir, \"SKILL.md\"), renderSkillMd(skill), ctx.dryRun),\n );\n // Bundle any resource files beside SKILL.md (relative path → contents).\n // Defense-in-depth: skip+warn on any key that escapes the skill dir\n // (config-time validation already rejects these, but never trust input).\n for (const [rel, contents] of Object.entries(skill.resources ?? {})) {\n const target = this.resolveWithin(dir, rel);\n if (target === null) {\n changes.push({\n platform: this.id,\n action: \"warn\",\n detail: `skill resource \"${rel}\" escapes the skill dir; skipped`,\n });\n continue;\n }\n changes.push(this.writeContentFile(target, contents, ctx.dryRun));\n }\n }\n return changes;\n }\n\n override uninstallSkills(ctx: InstallContext): ChangeRecord[] {\n const { connector } = ctx;\n if (connector.skills.length === 0) {\n return [{ platform: this.id, action: \"skip\", detail: \"connector declares no skills\" }];\n }\n const changes: ChangeRecord[] = [];\n for (const skill of connector.skills) {\n const dir = this.skillDir(ctx, skill.name);\n // Remove only the files we wrote (SKILL.md + declared resources), then the\n // skill dir itself when we own its full contents.\n changes.push(this.removeContentFile(join(dir, \"SKILL.md\"), ctx.dryRun));\n for (const rel of Object.keys(skill.resources ?? {})) {\n const target = this.resolveWithin(dir, rel);\n if (target === null) continue; // never delete outside the skill dir\n changes.push(this.removeContentFile(target, ctx.dryRun));\n }\n // Only remove the skill dir when WE own its full contents — never rm -rf a\n // dir that still holds user-added / sibling-tool / shared files.\n changes.push(this.removeDirIfEmpty(dir, ctx.dryRun));\n }\n return changes;\n }\n\n // ── Subagents ───────────────────────────────────────────────────────────────\n\n override installSubagents(ctx: InstallContext): ChangeRecord[] {\n const { connector } = ctx;\n if (connector.platforms[HOST]?.subagents === false) {\n return [{ platform: this.id, action: \"skip\", detail: \"subagents disabled for cursor\" }];\n }\n if (connector.subagents.length === 0) {\n return [{ platform: this.id, action: \"skip\", detail: \"connector declares no subagents\" }];\n }\n return connector.subagents.map((agent) =>\n this.writeContentFile(\n this.subagentPath(ctx, agent.name),\n this.renderSubagent(agent),\n ctx.dryRun,\n ),\n );\n }\n\n override uninstallSubagents(ctx: InstallContext): ChangeRecord[] {\n const { connector } = ctx;\n if (connector.subagents.length === 0) {\n return [{ platform: this.id, action: \"skip\", detail: \"connector declares no subagents\" }];\n }\n return connector.subagents.map((agent) =>\n this.removeContentFile(this.subagentPath(ctx, agent.name), ctx.dryRun),\n );\n }\n\n /** Render a Cursor subagent to md+frontmatter (name, description, model, readonly) + prompt body. */\n private renderSubagent(agent: SubagentDef): string {\n const frontmatter: Record<string, unknown> = {\n name: agent.name,\n description: agent.description,\n };\n if (agent.model !== undefined) frontmatter.model = agent.model;\n if (agent.readonly !== undefined) frontmatter.readonly = agent.readonly;\n if (agent.extra) Object.assign(frontmatter, agent.extra);\n return this.renderFrontmatterMd(frontmatter, agent.prompt);\n }\n\n // ── Diagnostics ──────────────────────────────────────────────────────────\n\n override getHealthChecks(ctx: InstallContext): readonly HealthCheck[] {\n const mcpPath = this.getServerConfigPath(ctx);\n const hooksPath = this.getHookConfigPath(ctx);\n const checks: HealthCheck[] = [\n {\n name: `${this.name}: mcp.json present`,\n check: () =>\n existsSync(mcpPath)\n ? { status: \"OK\", detail: mcpPath }\n : { status: \"FAIL\", detail: `not found: ${mcpPath}` },\n },\n {\n name: `${this.name}: hooks.json present`,\n check: () => {\n // Same \"only assert what the connector declares\" rule as the\n // content-surface checks below: a hookless connector never writes\n // hooks.json, so its absence is healthy, not a failure.\n if (ctx.connector.hookEvents.length === 0) {\n return { status: \"OK\", detail: \"no hooks declared\" };\n }\n return existsSync(hooksPath)\n ? { status: \"OK\", detail: hooksPath }\n : { status: \"FAIL\", detail: `not found: ${hooksPath}` };\n },\n },\n ];\n\n // Content-surface checks: only assert presence of the files this connector\n // declares (skip silently for surfaces it never asked for).\n for (const cmd of ctx.connector.commands) {\n const p = this.commandPath(ctx, cmd.name);\n checks.push({\n name: `${this.name}: command ${cmd.name} present`,\n check: () =>\n existsSync(p) ? { status: \"OK\", detail: p } : { status: \"FAIL\", detail: `not found: ${p}` },\n });\n }\n for (const skill of ctx.connector.skills) {\n const p = join(this.skillDir(ctx, skill.name), \"SKILL.md\");\n checks.push({\n name: `${this.name}: skill ${skill.name} present`,\n check: () =>\n existsSync(p) ? { status: \"OK\", detail: p } : { status: \"FAIL\", detail: `not found: ${p}` },\n });\n }\n for (const agent of ctx.connector.subagents) {\n const p = this.subagentPath(ctx, agent.name);\n checks.push({\n name: `${this.name}: subagent ${agent.name} present`,\n check: () =>\n existsSync(p) ? { status: \"OK\", detail: p } : { status: \"FAIL\", detail: `not found: ${p}` },\n });\n }\n return checks;\n }\n\n // ── Runtime: parse Cursor stdin JSON → normalized event ──────────────────\n\n parseEvent(event: HookEventName, raw: unknown): NormalizedEvent {\n const input = (raw ?? {}) as CursorWireInput;\n const connectorId = typeof input.connector === \"string\" ? input.connector : \"\";\n const sessionId = extractSessionId(input);\n const projectDir = this.getProjectDir(input);\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: input.tool_name ?? \"\",\n toolInput: input.tool_input ?? {},\n };\n return ev;\n }\n case \"PostToolUse\": {\n const toolOutput = input.tool_output ?? input.error_message;\n const ev: PostToolUseEvent = {\n ...base,\n toolName: input.tool_name ?? \"\",\n toolInput: input.tool_input ?? {},\n ...(toolOutput !== undefined ? { toolOutput } : {}),\n ...(input.error_message ? { isError: true } : {}),\n };\n return ev;\n }\n case \"SessionStart\": {\n const ev: SessionStartEvent = {\n ...base,\n source: normalizeSessionSource(input.source ?? input.trigger),\n };\n return ev;\n }\n case \"Stop\": {\n const ev: StopEvent = {\n ...base,\n ...(typeof input.stop_hook_active === \"boolean\"\n ? { stopHookActive: input.stop_hook_active }\n : {}),\n };\n return ev;\n }\n case \"SessionEnd\": {\n // Cursor sessionEnd: { session_id, reason, duration_ms, ... }. session_id\n // is already folded into base.sessionId via extractSessionId; only the\n // documented `reason` enum maps onto the normalized SessionEnd shape.\n const ev: SessionEndEvent = {\n ...base,\n ...(typeof input.reason === \"string\" ? { reason: input.reason } : {}),\n };\n return ev;\n }\n case \"UserPromptSubmit\": {\n // Cursor beforeSubmitPrompt: { prompt, attachments }. attachments has no\n // normalized field and is preserved via base.raw; only `prompt` maps.\n const ev: UserPromptSubmitEvent = {\n ...base,\n prompt: typeof input.prompt === \"string\" ? input.prompt : \"\",\n };\n return ev;\n }\n case \"PreCompact\": {\n // Cursor preCompact: { trigger: \"auto\"|\"manual\", context_*… }. Only the\n // documented `trigger` enum maps onto the normalized PreCompact shape.\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 \"PostToolUseFailure\": {\n // Cursor's established error field is error_message; fall back to the\n // Claude-compatible `error` defensively.\n const error = input.error_message ?? input.error ?? \"\";\n const ev: PostToolUseFailureEvent = {\n ...base,\n toolName: input.tool_name ?? \"\",\n toolInput: input.tool_input ?? {},\n error,\n ...(typeof input.tool_use_id === \"string\"\n ? { toolUseId: input.tool_use_id }\n : {}),\n ...(typeof input.is_interrupt === \"boolean\"\n ? { isInterrupt: input.is_interrupt }\n : {}),\n ...(typeof input.duration_ms === \"number\"\n ? { durationMs: input.duration_ms }\n : {}),\n };\n return ev;\n }\n case \"SubagentStart\": {\n const agentId = input.agent_id ?? input.subagent_id;\n const agentType = input.agent_type ?? input.subagent_type;\n const ev: SubagentStartEvent = {\n ...base,\n ...(typeof agentId === \"string\" ? { agentId } : {}),\n ...(typeof agentType === \"string\" ? { agentType } : {}),\n };\n return ev;\n }\n case \"SubagentStop\": {\n const agentId = input.agent_id ?? input.subagent_id;\n const agentType = input.agent_type ?? input.subagent_type;\n const ev: SubagentStopEvent = {\n ...base,\n ...(typeof agentId === \"string\" ? { agentId } : {}),\n ...(typeof agentType === \"string\" ? { agentType } : {}),\n ...(typeof input.last_assistant_message === \"string\"\n ? { lastAssistantMessage: input.last_assistant_message }\n : {}),\n ...(typeof input.stop_hook_active === \"boolean\"\n ? { stopHookActive: input.stop_hook_active }\n : {}),\n };\n return ev;\n }\n default: {\n // Cursor never delivers Notification / PermissionRequest (no native\n // equivalent — permission is an OUTPUT field of its before* hooks, not\n // an event). If the runtime dispatches one anyway, fail loudly.\n throw new Error(`unsupported cursor hook event: ${String(event)}`);\n }\n }\n }\n\n private getProjectDir(input: CursorWireInput): string | undefined {\n return input.cwd ?? input.workspace_roots?.[0] ?? undefined;\n }\n\n // ── Runtime: normalized response → Cursor native hook reply ──────────────\n\n formatReply(event: HookEventName, response: HookResponse): HookReply {\n const decision = response.decision ?? \"allow\";\n\n // postToolUseFailure (feedback beside the error) and subagentStart (context\n // injected into the SUBAGENT's conversation) are observe/context-only on\n // Cursor: \"context\" emits additional_context, and a \"deny\" DEGRADES to the\n // same shape carrying the reason (the tool already failed / the spawn is\n // not blockable). Everything else is a minimal no-op payload (Cursor\n // rejects empty stdout as \"no valid response\").\n if (event === \"PostToolUseFailure\" || event === \"SubagentStart\") {\n const context =\n decision === \"context\"\n ? response.additionalContext\n : decision === \"deny\"\n ? response.reason ?? response.additionalContext\n : undefined;\n return this.stdout({ additional_context: context ?? \"\" });\n }\n\n // beforeSubmitPrompt (UserPromptSubmit) is a BLOCK gate, not a permission/\n // context surface: its only documented output is { continue, user_message }\n // (cursor.com/docs/hooks). A \"deny\" prevents submission (continue:false +\n // reason); it cannot inject context (no additional_context/agent_message\n // field), so every non-deny decision is a no-op continue:true.\n if (event === \"UserPromptSubmit\") {\n if (decision === \"deny\") {\n return this.stdout({\n continue: false,\n user_message: response.reason ?? \"Blocked by hook\",\n });\n }\n return this.stdout({ continue: true });\n }\n\n // sessionEnd is fire-and-forget (the response is logged but not used) and\n // preCompact is observational (cannot block or modify compaction) per\n // cursor.com/docs/hooks — neither carries a decision Cursor honors, so both\n // are an unconditional no-op passthrough (mirrors Stop).\n if (event === \"SessionEnd\" || event === \"PreCompact\") {\n return { exitCode: 0 };\n }\n\n // deny → block the action with a user-facing message. (On SubagentStop\n // this follows the adapter's Stop idiom — the deny carries Stop semantics.)\n if (decision === \"deny\") {\n return this.stdout({\n permission: \"deny\",\n user_message: response.reason ?? \"Blocked by hook\",\n });\n }\n\n // ask → prompt the user to confirm.\n if (decision === \"ask\") {\n return this.stdout({\n permission: \"ask\",\n user_message: response.reason ?? \"Confirmation required by hook\",\n });\n }\n\n // modify → rewrite PreToolUse input (only where Cursor supports it).\n if (decision === \"modify\") {\n if (event === \"PreToolUse\" && response.updatedInput) {\n return this.stdout({ updated_input: response.updatedInput });\n }\n // Output rewrite is unsupported on Cursor; fall through to allow.\n }\n\n // context → inject soft guidance. PreToolUse uses `agent_message`; Post and\n // SessionStart use `additional_context`.\n if (decision === \"context\" && response.additionalContext) {\n return event === \"PreToolUse\"\n ? this.stdout({ agent_message: response.additionalContext })\n : this.stdout({ additional_context: response.additionalContext });\n }\n\n // SessionStart always emits valid JSON even on a no-op (Cursor rejects empty\n // stdout as \"no valid response\").\n if (event === \"SessionStart\") {\n return this.stdout({ additional_context: response.additionalContext ?? \"\" });\n }\n\n // allow / void → minimal no-op payload (Cursor rejects empty stdout).\n if (event === \"PreToolUse\") return this.stdout({ agent_message: \"\" });\n if (event === \"PostToolUse\") return this.stdout({ additional_context: \"\" });\n return { exitCode: 0 };\n }\n\n private stdout(payload: unknown): HookReply {\n return { exitCode: 0, stdout: JSON.stringify(payload) };\n }\n}\n\n/** Cursor native interpolation token: `${env:VAR}` → `${env:VAR}` (passthrough). */\nfunction cursorEnvToken(name: string): string {\n return `\\${env:${name}}`;\n}\n\nfunction extractSessionId(input: CursorWireInput): string {\n if (typeof input.conversation_id === \"string\") return input.conversation_id;\n if (typeof input.session_id === \"string\") return input.session_id;\n return \"\";\n}\n\nexport const adapter = new CursorAdapter();\nexport default adapter;\n"],"mappings":"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","names":["entry"]}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
readRegisteredMeta
|
|
4
|
-
} from "./chunk-
|
|
5
|
-
import "./chunk-
|
|
6
|
-
import "./chunk-
|
|
4
|
+
} from "./chunk-UXG64P6R.js";
|
|
5
|
+
import "./chunk-WZWK4ICE.js";
|
|
6
|
+
import "./chunk-SBV2QJ5C.js";
|
|
7
7
|
import {
|
|
8
8
|
addLedgerOwner,
|
|
9
9
|
configPatchManualEdit,
|
|
@@ -30,13 +30,11 @@ import {
|
|
|
30
30
|
rewriteEnvRefs
|
|
31
31
|
} from "./chunk-DBQMX75U.js";
|
|
32
32
|
import {
|
|
33
|
-
BaseAdapter
|
|
34
|
-
} from "./chunk-3I7UG52L.js";
|
|
35
|
-
import {
|
|
33
|
+
BaseAdapter,
|
|
36
34
|
renderCommandMd,
|
|
37
35
|
renderSkillMd,
|
|
38
36
|
renderSubagentMd
|
|
39
|
-
} from "./chunk-
|
|
37
|
+
} from "./chunk-A767JFHW.js";
|
|
40
38
|
import {
|
|
41
39
|
buildHomeBinStatuslineCommand,
|
|
42
40
|
buildWrappedStdio,
|
|
@@ -1484,4 +1482,4 @@ export {
|
|
|
1484
1482
|
claudeSensitiveKeyViolation,
|
|
1485
1483
|
claude_code_default as default
|
|
1486
1484
|
};
|
|
1487
|
-
//# sourceMappingURL=claude-code-
|
|
1485
|
+
//# sourceMappingURL=claude-code-HXIVRZCY.js.map
|