@ken-jo/agent-connector 0.4.93 → 0.4.95
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 +162 -51
- package/dist/{action-DOWHWEDZ.js → action-Q7GGO4PA.js} +8 -8
- package/dist/{chunk-2RIFORQS.js → chunk-3NH2ARIS.js} +2 -2
- package/dist/{chunk-KJLFGQQM.js → chunk-5IOTP7LQ.js} +3 -3
- package/dist/{chunk-KJLFGQQM.js.map → chunk-5IOTP7LQ.js.map} +1 -1
- package/dist/{chunk-P23RVIUY.js → chunk-7F5KHLEP.js} +4 -4
- package/dist/{chunk-B5W3RHTI.js → chunk-APZDTY76.js} +2 -2
- package/dist/{chunk-SILKSP2Y.js → chunk-D4ELPBB5.js} +2 -2
- package/dist/{chunk-OEADFFKO.js → chunk-H33M77DD.js} +19 -19
- package/dist/chunk-H33M77DD.js.map +1 -0
- package/dist/{chunk-I5TO42QC.js → chunk-I5UXHIDT.js} +3 -3
- package/dist/{chunk-ZMAJ2XFD.js → chunk-ISEJWBFF.js} +2 -2
- package/dist/{chunk-TTKSYJRY.js → chunk-PAPMUAR5.js} +5 -5
- package/dist/{chunk-KSPMSRVU.js → chunk-PW42ZXCB.js} +2 -2
- package/dist/{chunk-EHP7WISI.js → chunk-YPAXJ7EW.js} +11 -6
- package/dist/chunk-YPAXJ7EW.js.map +1 -0
- package/dist/{claude-code-DUZNOAS2.js → claude-code-GRWO6XBZ.js} +4 -4
- package/dist/cli/sdk.d.ts +53 -12
- package/dist/cli/sdk.js +82 -14
- package/dist/cli/sdk.js.map +1 -1
- package/dist/cli.js +1 -1
- package/dist/{define-connector-LQFJL_at.d.ts → define-connector-DTWb46UB.d.ts} +1 -1
- package/dist/{detect-DYQNUMXL.js → detect-6V4LC3MA.js} +4 -4
- package/dist/{doctor-H6XXAR63.js → doctor-2YDUVSAU.js} +11 -11
- package/dist/{hook-GIQTUDMN.js → hook-OEVRDMXD.js} +8 -8
- package/dist/index.d.ts +3 -3
- package/dist/index.js +2 -2
- package/dist/{install-T27662FW.js → install-5NMCUDG5.js} +8 -8
- package/dist/{introspect-D4fEGuhN.d.ts → introspect-dNekqPDY.d.ts} +1 -1
- package/dist/{leaderboard-CIMQBOUS.js → leaderboard-XEKS7B3H.js} +2 -2
- package/dist/{package-LIPZKHAQ.js → package-G25GVTH2.js} +6 -6
- package/dist/runtime/index.d.ts +1 -1
- package/dist/runtime/index.js +6 -6
- package/dist/sdk/index.d.ts +4 -4
- package/dist/sdk/index.js +3 -3
- package/dist/sdk/test.d.ts +2 -2
- package/dist/sdk/test.js +6 -6
- package/dist/{serve-ABTO2NA2.js → serve-XTMIUHKK.js} +8 -8
- package/dist/{status-J7SOUH7O.js → status-VJAGO4Z7.js} +6 -6
- package/dist/{statusline-QF4G724E.js → statusline-EY2E2UGF.js} +7 -7
- package/dist/{telemetry-EICCFEIF.js → telemetry-OLZQBADT.js} +5 -5
- package/dist/{types-BhcUEIJJ.d.ts → types-JyhpJHJa.d.ts} +4 -2
- package/dist/{uninstall-NJNNZZZY.js → uninstall-AZEUPAND.js} +8 -8
- package/dist/{upgrade-TIBUOQNM.js → upgrade-CAUUHSSC.js} +8 -8
- package/dist/{usage-VEVBWPLS.js → usage-3KHZ4RYZ.js} +2 -2
- package/dist/{usage-event-GRQE7XWT.js → usage-event-TZWOZPRJ.js} +7 -7
- package/package.json +2 -2
- package/dist/chunk-EHP7WISI.js.map +0 -1
- package/dist/chunk-OEADFFKO.js.map +0 -1
- /package/dist/{action-DOWHWEDZ.js.map → action-Q7GGO4PA.js.map} +0 -0
- /package/dist/{chunk-2RIFORQS.js.map → chunk-3NH2ARIS.js.map} +0 -0
- /package/dist/{chunk-P23RVIUY.js.map → chunk-7F5KHLEP.js.map} +0 -0
- /package/dist/{chunk-B5W3RHTI.js.map → chunk-APZDTY76.js.map} +0 -0
- /package/dist/{chunk-SILKSP2Y.js.map → chunk-D4ELPBB5.js.map} +0 -0
- /package/dist/{chunk-I5TO42QC.js.map → chunk-I5UXHIDT.js.map} +0 -0
- /package/dist/{chunk-ZMAJ2XFD.js.map → chunk-ISEJWBFF.js.map} +0 -0
- /package/dist/{chunk-TTKSYJRY.js.map → chunk-PAPMUAR5.js.map} +0 -0
- /package/dist/{chunk-KSPMSRVU.js.map → chunk-PW42ZXCB.js.map} +0 -0
- /package/dist/{claude-code-DUZNOAS2.js.map → claude-code-GRWO6XBZ.js.map} +0 -0
- /package/dist/{detect-DYQNUMXL.js.map → detect-6V4LC3MA.js.map} +0 -0
- /package/dist/{doctor-H6XXAR63.js.map → doctor-2YDUVSAU.js.map} +0 -0
- /package/dist/{hook-GIQTUDMN.js.map → hook-OEVRDMXD.js.map} +0 -0
- /package/dist/{install-T27662FW.js.map → install-5NMCUDG5.js.map} +0 -0
- /package/dist/{leaderboard-CIMQBOUS.js.map → leaderboard-XEKS7B3H.js.map} +0 -0
- /package/dist/{package-LIPZKHAQ.js.map → package-G25GVTH2.js.map} +0 -0
- /package/dist/{serve-ABTO2NA2.js.map → serve-XTMIUHKK.js.map} +0 -0
- /package/dist/{status-J7SOUH7O.js.map → status-VJAGO4Z7.js.map} +0 -0
- /package/dist/{statusline-QF4G724E.js.map → statusline-EY2E2UGF.js.map} +0 -0
- /package/dist/{telemetry-EICCFEIF.js.map → telemetry-OLZQBADT.js.map} +0 -0
- /package/dist/{uninstall-NJNNZZZY.js.map → uninstall-AZEUPAND.js.map} +0 -0
- /package/dist/{upgrade-TIBUOQNM.js.map → upgrade-CAUUHSSC.js.map} +0 -0
- /package/dist/{usage-VEVBWPLS.js.map → usage-3KHZ4RYZ.js.map} +0 -0
- /package/dist/{usage-event-GRQE7XWT.js.map → usage-event-TZWOZPRJ.js.map} +0 -0
package/README.md
CHANGED
|
@@ -7,16 +7,16 @@
|
|
|
7
7
|
### Deploy one MCP to every agent CLI.
|
|
8
8
|
|
|
9
9
|
Write your server + hooks once with `defineConnector()`, then `install` it into
|
|
10
|
-
the native config — or `package` it as a real plugin — across
|
|
10
|
+
the native config — or `package` it as a real plugin — across every detected agent CLI
|
|
11
11
|
(Claude Code, Codex, Cursor, Copilot, Gemini, OpenCode, Warp, Zed…).
|
|
12
12
|
|
|
13
13
|
[](https://www.npmjs.com/package/@ken-jo/agent-connector)
|
|
14
14
|
[](LICENSE)
|
|
15
|
-
](https://agent-connector.ai/coverage)
|
|
16
16
|

|
|
17
17
|

|
|
18
|
-
](https://agent-connector.ai/coverage)
|
|
19
|
+
[](https://agent-connector.ai/coverage)
|
|
20
20
|

|
|
21
21
|

|
|
22
22
|
|
|
@@ -31,7 +31,7 @@ if you already run an agent CLI and just want token totals, jump straight to
|
|
|
31
31
|
- [CLI](#cli) — every command at a glance
|
|
32
32
|
- [Token telemetry & usage](#token-telemetry--usage) — per-tool telemetry vs. connector-free `usage`
|
|
33
33
|
- [Publish to the MCP ecosystem](#publish-to-the-mcp-ecosystem) — emit the official MCP standard artifacts
|
|
34
|
-
- [Verification](#verification) — how the
|
|
34
|
+
- [Verification](#verification) — how the platform coverage contract is proven
|
|
35
35
|
|
|
36
36
|
<p align="center">
|
|
37
37
|
<a href="examples/showcase-demo/">
|
|
@@ -51,8 +51,10 @@ agent-connector is an **SDK connector developers depend on**. Add it to the
|
|
|
51
51
|
package that holds your connector, declare the connector once, then ship a
|
|
52
52
|
branded MCP package/bin such as `npx @acme/acme-db-mcp install` — it deploys to
|
|
53
53
|
every detected agent CLI in that host's own native config. Installing
|
|
54
|
-
`@ken-jo/agent-connector` globally is
|
|
55
|
-
token usage reports.
|
|
54
|
+
`@ken-jo/agent-connector` globally is not the branded MCP lifecycle path; reserve
|
|
55
|
+
the global CLI guidance for connector-free token usage reports. Framework
|
|
56
|
+
artifact tooling stays developer-facing and normally runs through
|
|
57
|
+
`npx @ken-jo/agent-connector ... --connector`. The linear path is:
|
|
56
58
|
**get a server → declare it → install through your branded package**.
|
|
57
59
|
|
|
58
60
|
**0. You need an MCP server file first.** The config below points at
|
|
@@ -73,21 +75,22 @@ npm install @ken-jo/agent-connector
|
|
|
73
75
|
"name": "@acme/acme-db-mcp",
|
|
74
76
|
"mcpName": "io.github.acme/acme-db",
|
|
75
77
|
"bin": { "acme-db": "./bin.mjs" },
|
|
76
|
-
"dependencies": { "@ken-jo/agent-connector": "^0.4.
|
|
78
|
+
"dependencies": { "@ken-jo/agent-connector": "^0.4.94" }
|
|
77
79
|
}
|
|
78
80
|
```
|
|
79
81
|
|
|
80
82
|
```js
|
|
81
83
|
// 3. agent-connector.config.mjs — declare your server + hooks once
|
|
82
84
|
import { fileURLToPath } from "node:url";
|
|
83
|
-
import { defineConnector } from "@ken-jo/agent-connector";
|
|
85
|
+
import { defineConnector } from "@ken-jo/agent-connector/sdk";
|
|
84
86
|
|
|
85
87
|
const serverPath = fileURLToPath(new URL("./my-mcp-server.mjs", import.meta.url));
|
|
86
88
|
|
|
87
89
|
export default defineConnector({
|
|
88
90
|
// package.json / npm metadata is the source of truth. The host alias/runtime
|
|
89
91
|
// id and connector version are derived from name/mcpName/bin/version unless
|
|
90
|
-
// you need a multi-instance alias.
|
|
92
|
+
// you need a legacy or multi-instance alias. Host-native ids are generated
|
|
93
|
+
// during install, so do not copy them back into defineConnector({ id }).
|
|
91
94
|
server: {
|
|
92
95
|
transport: "stdio",
|
|
93
96
|
command: "node",
|
|
@@ -97,10 +100,106 @@ export default defineConnector({
|
|
|
97
100
|
});
|
|
98
101
|
```
|
|
99
102
|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
103
|
+
The wiring contract is:
|
|
104
|
+
|
|
105
|
+
1. `package.json` defines the public product identity (`name`, `mcpName`, `bin`,
|
|
106
|
+
`version`).
|
|
107
|
+
2. `bin.mjs` calls `createConnectorCli({ packageJson, connector })` so every
|
|
108
|
+
install/doctor/upgrade/uninstall command runs under the developer's brand.
|
|
109
|
+
3. `agent-connector.config.*` uses `defineConnector({ server, ...surfaces })` to
|
|
110
|
+
describe the real MCP launch shape or remote endpoint.
|
|
111
|
+
4. `install` renders that single declaration into each detected host's native
|
|
112
|
+
MCP config. For stdio processes, the host points at the stable
|
|
113
|
+
agent-connector home binary, which launches the real command and can measure
|
|
114
|
+
per-tool traffic. For remote HTTP servers, the host receives the URL where
|
|
115
|
+
supported; there is no stdio process to wrap.
|
|
116
|
+
|
|
117
|
+
### Command boundary
|
|
118
|
+
|
|
119
|
+
Keep the two command layers separate:
|
|
120
|
+
|
|
121
|
+
| Layer | Who runs it | Examples | Purpose |
|
|
122
|
+
| --- | --- | --- | --- |
|
|
123
|
+
| Branded MCP lifecycle | Users of your MCP package | `npx @acme/acme-db-mcp install`, `acme-db doctor --probe`, `acme-db upgrade`, `acme-db uninstall`, `acme-db telemetry report --by tool` | Install, verify, update, remove, and inspect telemetry for **your MCP**. |
|
|
124
|
+
| Framework tooling | MCP package developers | `npx @ken-jo/agent-connector package --connector ./agent-connector.config.mjs` | Emit host plugin bundles and MCP distribution artifacts from a connector config. |
|
|
125
|
+
| Connector-free user telemetry | Agent-CLI users with no MCP package | `npx @ken-jo/agent-connector usage report --by platform` | Read host CLI logs read-only for whole-conversation token totals. |
|
|
126
|
+
|
|
127
|
+
If a command operates the MCP after it is authored, prefer the branded package/bin.
|
|
128
|
+
If a command builds framework distribution artifacts, use the framework CLI.
|
|
129
|
+
|
|
130
|
+
### MCP server launch examples
|
|
131
|
+
|
|
132
|
+
Pick the `server` shape that matches the MCP you are building. The wrapper
|
|
133
|
+
package identity still comes from `package.json`; these examples only describe
|
|
134
|
+
how to start or connect to the actual MCP server.
|
|
135
|
+
|
|
136
|
+
| Shape | Use when | Minimal launch |
|
|
137
|
+
| --- | --- | --- |
|
|
138
|
+
| Package-runner MCP | The MCP is published as a package. | `npx -y @acme/acme-db-mcp` |
|
|
139
|
+
| Local server-process MCP | The MCP server ships inside your package. | `node ./my-mcp-server.mjs` |
|
|
140
|
+
| Python MCP | The MCP server is Python and should resolve runtime deps at launch. | `uv run --with mcp ./my_mcp_server.py` |
|
|
141
|
+
| CLI-based MCP | An existing executable exposes an MCP serving mode. | `local-tools mcp serve` |
|
|
142
|
+
| Remote server MCP | The MCP is hosted behind an HTTP endpoint. | `https://mcp.example.com/mcp` |
|
|
143
|
+
|
|
144
|
+
Each snippet below is the `server` field for `defineConnector({ ... })`; only
|
|
145
|
+
the local server-process example needs the `serverPath` helper shown inline.
|
|
146
|
+
|
|
147
|
+
**Package-runner MCP** — a published package that should be launched with `npx`:
|
|
148
|
+
|
|
149
|
+
```js
|
|
150
|
+
server: {
|
|
151
|
+
transport: "stdio",
|
|
152
|
+
command: "npx",
|
|
153
|
+
args: ["-y", "@acme/acme-db-mcp"],
|
|
154
|
+
}
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
**Local server-process MCP** — a bundled server file or binary:
|
|
158
|
+
|
|
159
|
+
```js
|
|
160
|
+
import { fileURLToPath } from "node:url";
|
|
161
|
+
|
|
162
|
+
const serverPath = fileURLToPath(new URL("./my-mcp-server.mjs", import.meta.url));
|
|
163
|
+
|
|
164
|
+
server: {
|
|
165
|
+
transport: "stdio",
|
|
166
|
+
command: "node",
|
|
167
|
+
args: [serverPath],
|
|
168
|
+
}
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
**Python MCP** — usually run through `uv` so dependencies are resolved with the
|
|
172
|
+
server:
|
|
173
|
+
|
|
174
|
+
```js
|
|
175
|
+
server: {
|
|
176
|
+
transport: "stdio",
|
|
177
|
+
command: "uv",
|
|
178
|
+
args: ["run", "--with", "mcp", "./my_mcp_server.py"],
|
|
179
|
+
}
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
Use direct `python ./my_mcp_server.py` only when the runtime environment is
|
|
183
|
+
already managed by your package or deployment wrapper.
|
|
184
|
+
|
|
185
|
+
**CLI-based MCP** — an existing executable exposes an MCP mode:
|
|
186
|
+
|
|
187
|
+
```js
|
|
188
|
+
server: {
|
|
189
|
+
transport: "stdio",
|
|
190
|
+
command: "local-tools",
|
|
191
|
+
args: ["mcp", "serve"],
|
|
192
|
+
}
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
**Remote server MCP** — a hosted MCP endpoint:
|
|
196
|
+
|
|
197
|
+
```js
|
|
198
|
+
server: {
|
|
199
|
+
transport: "http",
|
|
200
|
+
url: "https://mcp.example.com/mcp",
|
|
201
|
+
}
|
|
202
|
+
```
|
|
104
203
|
|
|
105
204
|
```bash
|
|
106
205
|
# 4. deploy under your branded MCP package/bin
|
|
@@ -111,10 +210,11 @@ npx @acme/acme-db-mcp install # write native config in each host
|
|
|
111
210
|
|
|
112
211
|
> `install` targets only the hosts actually **detected** on this machine (or an
|
|
113
212
|
> explicit `--targets` / `connector.targets` list), intersected with the
|
|
114
|
-
>
|
|
213
|
+
> current adapter registry shown on [`/coverage`](https://agent-connector.ai/coverage)
|
|
214
|
+
> — there is no "install to every host unconditionally" path.
|
|
115
215
|
> `@ken-jo/agent-connector` is the framework dependency underneath; use it
|
|
116
|
-
> directly for
|
|
117
|
-
> the foreground install brand for your users.
|
|
216
|
+
> directly for framework packaging/debugging or connector-free token telemetry,
|
|
217
|
+
> not as the foreground install brand for your users.
|
|
118
218
|
|
|
119
219
|
## Ship it: direct install or a marketplace plugin
|
|
120
220
|
|
|
@@ -125,11 +225,14 @@ Same one definition, your choice of distribution.
|
|
|
125
225
|
content-surface config in place, with no per-platform marketplace submission or
|
|
126
226
|
review. This is the Quick start path above.
|
|
127
227
|
|
|
128
|
-
**Marketplace plugin** — `
|
|
129
|
-
real plugin/extension bundle (manifest + bundled commands, agents,
|
|
130
|
-
hooks, MCP) from one definition.
|
|
131
|
-
|
|
132
|
-
|
|
228
|
+
**Marketplace plugin** — the framework `package` command turns the connector
|
|
229
|
+
into a real plugin/extension bundle (manifest + bundled commands, agents,
|
|
230
|
+
skills, hooks, MCP) from one definition. This is framework tooling, so run it
|
|
231
|
+
with `npx @ken-jo/agent-connector package --connector ...`. If you already keep
|
|
232
|
+
the framework CLI installed globally, `agent-connector package --connector ...`
|
|
233
|
+
is only the shorter equivalent. Hooks + MCP keep the
|
|
234
|
+
telemetry serve-wrapper, so a marketplace-installed connector still reports
|
|
235
|
+
per-tool tokens for its stdio server. `--format all` emits **10 host formats**:
|
|
133
236
|
|
|
134
237
|
| Format | Hosts |
|
|
135
238
|
|---|---|
|
|
@@ -151,8 +254,11 @@ so they're excluded from `--format all`) — `mcp-server-json` (an MCP Registry
|
|
|
151
254
|
|
|
152
255
|
```bash
|
|
153
256
|
# emit every host format (mcp-server-json + mcpb are opt-in by name)
|
|
154
|
-
agent-connector package --format all --out ./dist-plugin
|
|
155
|
-
agent-connector package --format gemini-extension --out ./ext # or just one
|
|
257
|
+
npx @ken-jo/agent-connector package --connector ./agent-connector.config.mjs --format all --out ./dist-plugin
|
|
258
|
+
npx @ken-jo/agent-connector package --connector ./agent-connector.config.mjs --format gemini-extension --out ./ext # or just one
|
|
259
|
+
|
|
260
|
+
# if you already keep the framework CLI globally installed, the same command is:
|
|
261
|
+
agent-connector package --connector ./agent-connector.config.mjs --format all --out ./dist-plugin
|
|
156
262
|
|
|
157
263
|
# e.g. Claude Code: /plugin marketplace add ./dist-plugin/claude-plugin
|
|
158
264
|
# /plugin install <connector-id>@agent-connector
|
|
@@ -189,25 +295,25 @@ npx @ken-jo/agent-connector install --method marketplace --connector ./agent-con
|
|
|
189
295
|
### Ship a branded CLI
|
|
190
296
|
|
|
191
297
|
A connector developer can ship their **own** bin instead of having users type
|
|
192
|
-
`agent-connector`. `createConnectorCli({
|
|
193
|
-
`@ken-jo/agent-connector/cli` export)
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
install/doctor/uninstall. See
|
|
298
|
+
`agent-connector`. `createConnectorCli({ packageJson, connector })` (from the
|
|
299
|
+
`@ken-jo/agent-connector/cli` export) derives the bin name/version from
|
|
300
|
+
`package.json` and exposes **every** subcommand under your brand, fully
|
|
301
|
+
delegated and **auto-scoped** to your connector — so your users do not need a
|
|
302
|
+
framework global install or `--connector` for branded MCP install/doctor/uninstall. See
|
|
197
303
|
[`examples/branded-cli`](examples/branded-cli) for the full, runnable package.
|
|
198
304
|
|
|
199
305
|
```js
|
|
200
306
|
#!/usr/bin/env node
|
|
201
307
|
// bin.mjs — every agent-connector subcommand, branded as `acme-db`
|
|
202
|
-
import { fileURLToPath } from "node:url";
|
|
203
308
|
import { createConnectorCli } from "@ken-jo/agent-connector/cli";
|
|
204
309
|
|
|
205
310
|
// run() resolves to the exit code and never calls process.exit
|
|
206
311
|
process.exitCode = await createConnectorCli({
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
312
|
+
// packageJson supplies public identity: name, mcpName, bin, version.
|
|
313
|
+
packageJson: new URL("./package.json", import.meta.url),
|
|
314
|
+
// connector supplies behavior: server, hooks, skills, telemetry.
|
|
315
|
+
// These are two layers, not duplicate id/display-name inputs.
|
|
316
|
+
connector: new URL("./agent-connector.config.mjs", import.meta.url),
|
|
211
317
|
}).run();
|
|
212
318
|
```
|
|
213
319
|
|
|
@@ -229,7 +335,7 @@ format, or *skip-warns* (never silently drops) where a host can't support it.
|
|
|
229
335
|
|
|
230
336
|
```ts
|
|
231
337
|
import { fileURLToPath } from "node:url";
|
|
232
|
-
import { defineConnector } from "@ken-jo/agent-connector";
|
|
338
|
+
import { defineConnector } from "@ken-jo/agent-connector/sdk";
|
|
233
339
|
|
|
234
340
|
// Resolve your server to an absolute path — host CLIs spawn it from their own CWD.
|
|
235
341
|
const serverPath = fileURLToPath(new URL("./my-mcp-server.mjs", import.meta.url));
|
|
@@ -308,11 +414,12 @@ everywhere.
|
|
|
308
414
|
### Memory, statusline, actions, and the SDK
|
|
309
415
|
|
|
310
416
|
- **`memory`** (aligned with the [AGENTS.md](https://agents.md) standard) — ship
|
|
311
|
-
standing guidance
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
417
|
+
standing guidance into the memory/rules file each host actually reads.
|
|
418
|
+
AGENTS.md adopters get the standard file; host-specific exceptions such as
|
|
419
|
+
Claude Code → `CLAUDE.md` and Gemini CLI → `GEMINI.md` are wired per their own
|
|
420
|
+
official docs. Writes are surgical marker-fenced, hash-stamped managed blocks
|
|
421
|
+
— multiple connectors coexist, bytes outside your markers are never touched,
|
|
422
|
+
and uninstall excises exactly your blocks.
|
|
316
423
|
- **`statusline`** (`defineStatusline`) — a live HUD render function the host
|
|
317
424
|
calls on every status refresh. v1 registers Claude Code's `settings.json.statusLine`
|
|
318
425
|
or Qwen Code's `settings.json.ui.statusLine` (set-if-absent, refcounted,
|
|
@@ -331,7 +438,9 @@ everywhere.
|
|
|
331
438
|
`capabilitiesOf`, `surfaceSupport`), and an **offline harness**
|
|
332
439
|
(`simulate`, `explain`, `explainHooks`) that runs the real adapter
|
|
333
440
|
parse→handler→format chain to answer *"does my handler actually work on host
|
|
334
|
-
X?"* before you touch a real host.
|
|
441
|
+
X?"* before you touch a real host. Agent-facing guidance is intentionally
|
|
442
|
+
split into a small router skill plus focused references under
|
|
443
|
+
[`skills/agent-connector/references`](skills/agent-connector/references). See
|
|
335
444
|
[`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md).
|
|
336
445
|
|
|
337
446
|
## How it works
|
|
@@ -348,8 +457,9 @@ everywhere.
|
|
|
348
457
|
only framework-owned state lives under the data-root.
|
|
349
458
|
- **Windows-first correctness.** No symlinks, no POSIX-only assumptions.
|
|
350
459
|
|
|
351
|
-
**Three hook paradigms**, all install-verified across the
|
|
352
|
-
(see [`
|
|
460
|
+
**Three hook paradigms**, all install-verified across the registered platform
|
|
461
|
+
set (see [`/coverage`](https://agent-connector.ai/coverage) and
|
|
462
|
+
[`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md)):
|
|
353
463
|
|
|
354
464
|
| Paradigm | Platforms |
|
|
355
465
|
|---|---|
|
|
@@ -458,14 +568,15 @@ defineConnector({
|
|
|
458
568
|
|
|
459
569
|
## Verification
|
|
460
570
|
|
|
461
|
-
The full single-API contract is **install-verified across
|
|
462
|
-
a committed registry-driven install-roundtrip harness that, for
|
|
463
|
-
drives the real install → uninstall into an isolated HOME and
|
|
464
|
-
placement + zero residue. A separate committed
|
|
465
|
-
installs
|
|
466
|
-
clean-uninstall
|
|
467
|
-
|
|
468
|
-
headless CLI
|
|
571
|
+
The full single-API contract is **install-verified across the current platform
|
|
572
|
+
registry** by a committed registry-driven install-roundtrip harness that, for
|
|
573
|
+
every adapter, drives the real install → uninstall into an isolated HOME and
|
|
574
|
+
asserts on-disk placement + zero residue. A separate committed
|
|
575
|
+
`scripts/verify-host.mjs` driver installs real host CLIs from the verification
|
|
576
|
+
matrix and checks install → placement → clean-uninstall; live hook dispatch +
|
|
577
|
+
telemetry are proven end-to-end where the host can run headlessly. IDE
|
|
578
|
+
extensions / GUI editors with no headless CLI stay covered by the
|
|
579
|
+
install-roundtrip harness.
|
|
469
580
|
|
|
470
581
|
**Dogfood result:** porting the real multi-host context-mode plugin to
|
|
471
582
|
`defineConnector` collapsed **~20,322 lines of hand-maintained per-host code down
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
fail
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-H33M77DD.js";
|
|
5
5
|
import {
|
|
6
6
|
runAction
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-YPAXJ7EW.js";
|
|
8
8
|
import "./chunk-OP4KBXUO.js";
|
|
9
9
|
import "./chunk-Z2MRSS2I.js";
|
|
10
|
-
import "./chunk-
|
|
11
|
-
import "./chunk-
|
|
10
|
+
import "./chunk-ISEJWBFF.js";
|
|
11
|
+
import "./chunk-I5UXHIDT.js";
|
|
12
12
|
import "./chunk-KHO5WNTP.js";
|
|
13
13
|
import "./chunk-IVAWP6HH.js";
|
|
14
|
-
import "./chunk-
|
|
15
|
-
import "./chunk-
|
|
16
|
-
import "./chunk-
|
|
14
|
+
import "./chunk-PW42ZXCB.js";
|
|
15
|
+
import "./chunk-5IOTP7LQ.js";
|
|
16
|
+
import "./chunk-D4ELPBB5.js";
|
|
17
17
|
import "./chunk-NBYKLUF6.js";
|
|
18
18
|
import "./chunk-4NHXLXSD.js";
|
|
19
19
|
import "./chunk-UMQ6NBQR.js";
|
|
@@ -52,4 +52,4 @@ async function run(argv) {
|
|
|
52
52
|
export {
|
|
53
53
|
run
|
|
54
54
|
};
|
|
55
|
-
//# sourceMappingURL=action-
|
|
55
|
+
//# sourceMappingURL=action-Q7GGO4PA.js.map
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import {
|
|
3
3
|
allAdapters,
|
|
4
4
|
loadAdapter
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-D4ELPBB5.js";
|
|
6
6
|
|
|
7
7
|
// src/sdk/introspect.ts
|
|
8
8
|
function hostCanFireEvent(c, event) {
|
|
@@ -87,4 +87,4 @@ export {
|
|
|
87
87
|
hostsSupporting,
|
|
88
88
|
surfaceSupport
|
|
89
89
|
};
|
|
90
|
-
//# sourceMappingURL=chunk-
|
|
90
|
+
//# sourceMappingURL=chunk-3NH2ARIS.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-D4ELPBB5.js";
|
|
5
5
|
import {
|
|
6
6
|
CONFIG_PATCH_SEGMENT_RE,
|
|
7
7
|
configPatchNamespaceViolation,
|
|
@@ -159,7 +159,7 @@ function inferNpmPackageFromServer(server) {
|
|
|
159
159
|
}
|
|
160
160
|
function resolveMcpPackageIdentity(input) {
|
|
161
161
|
const packageName = input.mcp?.packageName ?? inferNpmPackageFromServer(input.server);
|
|
162
|
-
const hostAlias = input.mcp?.hostAlias ?? (
|
|
162
|
+
const hostAlias = input.mcp?.hostAlias ?? (input.mcp?.mcpName ? deriveHostAliasFromMcpName(input.mcp.mcpName) : void 0) ?? (packageName ? deriveHostAliasFromPackageName(packageName) : void 0) ?? (input.mcp?.bin ? cleanMcpBasename(input.mcp.bin) : void 0);
|
|
163
163
|
return {
|
|
164
164
|
...packageName ? { packageName } : {},
|
|
165
165
|
...input.mcp?.mcpName ? { mcpName: input.mcp.mcpName } : {},
|
|
@@ -668,4 +668,4 @@ export {
|
|
|
668
668
|
defineConfigPatch,
|
|
669
669
|
defineNativeHook
|
|
670
670
|
};
|
|
671
|
-
//# sourceMappingURL=chunk-
|
|
671
|
+
//# sourceMappingURL=chunk-5IOTP7LQ.js.map
|