@agentteams/cli 0.1.82 → 0.1.84
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/.eslintcache +1 -1
- package/README.md +4 -3
- package/dist/auth/activeCredential.d.ts +22 -0
- package/dist/auth/activeCredential.d.ts.map +1 -0
- package/dist/auth/activeCredential.js +25 -0
- package/dist/auth/activeCredential.js.map +1 -0
- package/dist/auth/credentialStore.d.ts +89 -0
- package/dist/auth/credentialStore.d.ts.map +1 -0
- package/dist/auth/credentialStore.js +254 -0
- package/dist/auth/credentialStore.js.map +1 -0
- package/dist/auth/personalTokenClient.d.ts +155 -0
- package/dist/auth/personalTokenClient.d.ts.map +1 -0
- package/dist/auth/personalTokenClient.js +312 -0
- package/dist/auth/personalTokenClient.js.map +1 -0
- package/dist/auth/personalTokenStore.d.ts +16 -0
- package/dist/auth/personalTokenStore.d.ts.map +1 -0
- package/dist/auth/personalTokenStore.js +27 -0
- package/dist/auth/personalTokenStore.js.map +1 -0
- package/dist/commands/agentConfig.d.ts.map +1 -1
- package/dist/commands/agentConfig.js +8 -6
- package/dist/commands/agentConfig.js.map +1 -1
- package/dist/commands/auth.d.ts +97 -0
- package/dist/commands/auth.d.ts.map +1 -0
- package/dist/commands/auth.js +245 -0
- package/dist/commands/auth.js.map +1 -0
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +16 -2
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/convention.d.ts +11 -0
- package/dist/commands/convention.d.ts.map +1 -1
- package/dist/commands/convention.js +35 -11
- package/dist/commands/convention.js.map +1 -1
- package/dist/commands/dependency.d.ts.map +1 -1
- package/dist/commands/dependency.js +8 -6
- package/dist/commands/dependency.js.map +1 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +75 -2
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +19 -14
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/init.d.ts +18 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +114 -20
- package/dist/commands/init.js.map +1 -1
- package/dist/index.js +101 -15
- package/dist/index.js.map +1 -1
- package/dist/mcp/context.d.ts +15 -1
- package/dist/mcp/context.d.ts.map +1 -1
- package/dist/mcp/context.js +24 -5
- package/dist/mcp/context.js.map +1 -1
- package/dist/mcp/server.d.ts +1 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +5 -2
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +25 -22
- package/dist/mcp/tools.js.map +1 -1
- package/dist/mcp-registration/atomicWrite.d.ts +9 -3
- package/dist/mcp-registration/atomicWrite.d.ts.map +1 -1
- package/dist/mcp-registration/atomicWrite.js +58 -15
- package/dist/mcp-registration/atomicWrite.js.map +1 -1
- package/dist/mcp-registration/clients.d.ts.map +1 -1
- package/dist/mcp-registration/clients.js +1 -9
- package/dist/mcp-registration/clients.js.map +1 -1
- package/dist/mcp-registration/doctor.d.ts +38 -0
- package/dist/mcp-registration/doctor.d.ts.map +1 -0
- package/dist/mcp-registration/doctor.js +379 -0
- package/dist/mcp-registration/doctor.js.map +1 -0
- package/dist/mcp-registration/index.d.ts +7 -5
- package/dist/mcp-registration/index.d.ts.map +1 -1
- package/dist/mcp-registration/index.js +46 -21
- package/dist/mcp-registration/index.js.map +1 -1
- package/dist/mcp-registration/install.d.ts.map +1 -1
- package/dist/mcp-registration/install.js +12 -15
- package/dist/mcp-registration/install.js.map +1 -1
- package/dist/mcp-registration/render.d.ts +8 -6
- package/dist/mcp-registration/render.d.ts.map +1 -1
- package/dist/mcp-registration/render.js +15 -36
- package/dist/mcp-registration/render.js.map +1 -1
- package/dist/mcp-registration/serverSpec.d.ts +31 -18
- package/dist/mcp-registration/serverSpec.d.ts.map +1 -1
- package/dist/mcp-registration/serverSpec.js +36 -20
- package/dist/mcp-registration/serverSpec.js.map +1 -1
- package/dist/mcp-registration/types.d.ts +0 -3
- package/dist/mcp-registration/types.d.ts.map +1 -1
- package/dist/types/index.d.ts +10 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/utils/apiKeyInput.d.ts +16 -0
- package/dist/utils/apiKeyInput.d.ts.map +1 -0
- package/dist/utils/apiKeyInput.js +47 -0
- package/dist/utils/apiKeyInput.js.map +1 -0
- package/dist/utils/authServer.d.ts +39 -4
- package/dist/utils/authServer.d.ts.map +1 -1
- package/dist/utils/authServer.js +146 -62
- package/dist/utils/authServer.js.map +1 -1
- package/dist/utils/config.d.ts +121 -10
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +204 -5
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/errors.d.ts.map +1 -1
- package/dist/utils/errors.js +16 -0
- package/dist/utils/errors.js.map +1 -1
- package/dist/utils/httpClient.d.ts.map +1 -1
- package/dist/utils/httpClient.js +25 -0
- package/dist/utils/httpClient.js.map +1 -1
- package/dist/utils/initOutput.d.ts.map +1 -1
- package/dist/utils/initOutput.js +30 -0
- package/dist/utils/initOutput.js.map +1 -1
- package/package.json +1 -1
- package/web-compatibility.json +4 -0
|
@@ -43,7 +43,6 @@ export const MCP_CLIENTS = [
|
|
|
43
43
|
runnerType: 'CLAUDE_CODE',
|
|
44
44
|
label: 'Claude Code',
|
|
45
45
|
executables: ['claude'],
|
|
46
|
-
secretReference: 'dollarBraces',
|
|
47
46
|
configSignals: (context) => [join(context.homeDir, '.claude.json'), join(context.homeDir, '.claude')],
|
|
48
47
|
docsUrl: 'https://code.claude.com/docs/en/mcp',
|
|
49
48
|
verifiedAt: '2026-07-25',
|
|
@@ -84,7 +83,6 @@ export const MCP_CLIENTS = [
|
|
|
84
83
|
runnerType: 'CODEX',
|
|
85
84
|
label: 'Codex',
|
|
86
85
|
executables: ['codex'],
|
|
87
|
-
secretReference: 'codexEnvVars',
|
|
88
86
|
configSignals: (context) => [join(codexHome(context), 'config.toml'), codexHome(context)],
|
|
89
87
|
docsUrl: 'https://developers.openai.com/codex/mcp',
|
|
90
88
|
verifiedAt: '2026-07-25',
|
|
@@ -93,7 +91,7 @@ export const MCP_CLIENTS = [
|
|
|
93
91
|
configPath: (context) => join(codexHome(context), 'config.toml'),
|
|
94
92
|
format: 'toml',
|
|
95
93
|
strategy: 'configOnly',
|
|
96
|
-
configOnlyReason: 'Codex
|
|
94
|
+
configOnlyReason: 'Codex user config is TOML. The CLI prints a complete snippet instead of rewriting that user-owned file and dropping comments or key order.',
|
|
97
95
|
},
|
|
98
96
|
project: {
|
|
99
97
|
configPath: (context) => join(context.cwd, '.codex', 'config.toml'),
|
|
@@ -108,7 +106,6 @@ export const MCP_CLIENTS = [
|
|
|
108
106
|
runnerType: 'COPILOT_CLI',
|
|
109
107
|
label: 'GitHub Copilot CLI',
|
|
110
108
|
executables: ['copilot'],
|
|
111
|
-
secretReference: 'dollarBraces',
|
|
112
109
|
configSignals: (context) => [join(copilotHome(context), 'mcp-config.json'), copilotHome(context)],
|
|
113
110
|
docsUrl: 'https://docs.github.com/en/copilot/how-tos/copilot-cli/customize-copilot/add-mcp-servers',
|
|
114
111
|
verifiedAt: '2026-07-25',
|
|
@@ -134,7 +131,6 @@ export const MCP_CLIENTS = [
|
|
|
134
131
|
runnerType: 'OPENCODE',
|
|
135
132
|
label: 'OpenCode',
|
|
136
133
|
executables: ['opencode'],
|
|
137
|
-
secretReference: 'opencodeEnv',
|
|
138
134
|
configSignals: (context) => [
|
|
139
135
|
join(xdgConfigHome(context), 'opencode', 'opencode.jsonc'),
|
|
140
136
|
join(xdgConfigHome(context), 'opencode', 'opencode.json'),
|
|
@@ -164,7 +160,6 @@ export const MCP_CLIENTS = [
|
|
|
164
160
|
runnerType: 'AMP',
|
|
165
161
|
label: 'Amp',
|
|
166
162
|
executables: ['amp'],
|
|
167
|
-
secretReference: 'dollarBraces',
|
|
168
163
|
configSignals: (context) => [
|
|
169
164
|
join(xdgConfigHome(context), 'amp', 'settings.json'),
|
|
170
165
|
join(xdgConfigHome(context), 'amp'),
|
|
@@ -207,7 +202,6 @@ export const MCP_CLIENTS = [
|
|
|
207
202
|
runnerType: 'CURSOR_CLI',
|
|
208
203
|
label: 'Cursor CLI',
|
|
209
204
|
executables: ['cursor-agent'],
|
|
210
|
-
secretReference: 'dollarBraces',
|
|
211
205
|
configSignals: (context) => [join(context.homeDir, '.cursor', 'mcp.json'), join(context.homeDir, '.cursor')],
|
|
212
206
|
docsUrl: 'https://docs.cursor.com/context/model-context-protocol',
|
|
213
207
|
verifiedAt: '2026-07-25',
|
|
@@ -235,7 +229,6 @@ export const MCP_CLIENTS = [
|
|
|
235
229
|
runnerType: 'KIMI_CLI',
|
|
236
230
|
label: 'Kimi CLI',
|
|
237
231
|
executables: ['kimi'],
|
|
238
|
-
secretReference: 'dollarBraces',
|
|
239
232
|
extraBinDirs: (context) => [join(kimiHome(context), 'bin')],
|
|
240
233
|
configSignals: (context) => [join(kimiHome(context), 'mcp.json'), kimiHome(context)],
|
|
241
234
|
docsUrl: 'https://www.kimi.com/code/docs/en/kimi-code-cli/customization/mcp.html',
|
|
@@ -264,7 +257,6 @@ export const MCP_CLIENTS = [
|
|
|
264
257
|
runnerType: 'ANTIGRAVITY',
|
|
265
258
|
label: 'Antigravity',
|
|
266
259
|
executables: ['agy', 'antigravity'],
|
|
267
|
-
secretReference: 'dollarBraces',
|
|
268
260
|
configSignals: (context) => [
|
|
269
261
|
join(context.homeDir, '.gemini', 'config', 'mcp_config.json'),
|
|
270
262
|
join(context.homeDir, '.gemini', 'antigravity'),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clients.js","sourceRoot":"","sources":["../../src/mcp-registration/clients.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC;;;;;;;;;;;;;;;;;GAiBG;AAEH,SAAS,aAAa,CAAC,OAAuB;IAC5C,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;IAC7C,OAAO,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;AACvF,CAAC;AAED,SAAS,QAAQ,CAAC,OAAuB;IACvC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IAC5C,OAAO,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;AAC1F,CAAC;AAED,SAAS,SAAS,CAAC,OAAuB;IACxC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;IACxC,OAAO,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AACtF,CAAC;AAED,SAAS,WAAW,CAAC,OAAuB;IAC1C,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;IAC1C,OAAO,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;AACxF,CAAC;AAED,SAAS,QAAQ,CAAC,IAAmB,EAAE,IAAY;IACjD,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC;AACvF,CAAC;AAED,MAAM,kBAAkB,GAAG,CAAC,iBAAiB,CAAC,CAAC;AAE/C,MAAM,CAAC,MAAM,WAAW,GAA0B;IAChD;QACE,EAAE,EAAE,aAAa;QACjB,UAAU,EAAE,aAAa;QACzB,KAAK,EAAE,aAAa;QACpB,WAAW,EAAE,CAAC,QAAQ,CAAC;QACvB,
|
|
1
|
+
{"version":3,"file":"clients.js","sourceRoot":"","sources":["../../src/mcp-registration/clients.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC;;;;;;;;;;;;;;;;;GAiBG;AAEH,SAAS,aAAa,CAAC,OAAuB;IAC5C,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;IAC7C,OAAO,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;AACvF,CAAC;AAED,SAAS,QAAQ,CAAC,OAAuB;IACvC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IAC5C,OAAO,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;AAC1F,CAAC;AAED,SAAS,SAAS,CAAC,OAAuB;IACxC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;IACxC,OAAO,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AACtF,CAAC;AAED,SAAS,WAAW,CAAC,OAAuB;IAC1C,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;IAC1C,OAAO,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;AACxF,CAAC;AAED,SAAS,QAAQ,CAAC,IAAmB,EAAE,IAAY;IACjD,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC;AACvF,CAAC;AAED,MAAM,kBAAkB,GAAG,CAAC,iBAAiB,CAAC,CAAC;AAE/C,MAAM,CAAC,MAAM,WAAW,GAA0B;IAChD;QACE,EAAE,EAAE,aAAa;QACjB,UAAU,EAAE,aAAa;QACzB,KAAK,EAAE,aAAa;QACpB,WAAW,EAAE,CAAC,QAAQ,CAAC;QACvB,aAAa,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,cAAc,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QACrG,OAAO,EAAE,qCAAqC;QAC9C,UAAU,EAAE,YAAY;QACxB,MAAM,EAAE;YACN,IAAI,EAAE;gBACJ,UAAU,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,cAAc,CAAC;gBAC9D,MAAM,EAAE,MAAM;gBACd,YAAY,EAAE,YAAY;gBAC1B,UAAU,EAAE,OAAO;gBACnB,QAAQ,EAAE,WAAW;aACtB;YACD,OAAO,EAAE;gBACP,UAAU,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,WAAW,CAAC;gBACvD,MAAM,EAAE,MAAM;gBACd,YAAY,EAAE,YAAY;gBAC1B,UAAU,EAAE,OAAO;gBACnB,QAAQ,EAAE,eAAe;gBACzB,MAAM,EAAE;oBACN,SAAS,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;wBACzB,KAAK;wBACL,KAAK;wBACL,IAAI;wBACJ,SAAS;wBACT,SAAS;wBACT,GAAG,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;wBACvB,IAAI;wBACJ,IAAI,CAAC,OAAO;wBACZ,GAAG,IAAI,CAAC,IAAI;qBACb;oBACD,aAAa,EAAE,QAAQ;oBACvB,yBAAyB,EAAE,kBAAkB;iBAC9C;aACF;SACF;KACF;IACD;QACE,EAAE,EAAE,OAAO;QACX,UAAU,EAAE,OAAO;QACnB,KAAK,EAAE,OAAO;QACd,WAAW,EAAE,CAAC,OAAO,CAAC;QACtB,aAAa,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,aAAa,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;QACzF,OAAO,EAAE,yCAAyC;QAClD,UAAU,EAAE,YAAY;QACxB,MAAM,EAAE;YACN,IAAI,EAAE;gBACJ,UAAU,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,aAAa,CAAC;gBAChE,MAAM,EAAE,MAAM;gBACd,QAAQ,EAAE,YAAY;gBACtB,gBAAgB,EACd,4IAA4I;aAC/I;YACD,OAAO,EAAE;gBACP,UAAU,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,EAAE,aAAa,CAAC;gBACnE,MAAM,EAAE,MAAM;gBACd,QAAQ,EAAE,YAAY;gBACtB,gBAAgB,EACd,6LAA6L;aAChM;SACF;KACF;IACD;QACE,EAAE,EAAE,aAAa;QACjB,UAAU,EAAE,aAAa;QACzB,KAAK,EAAE,oBAAoB;QAC3B,WAAW,EAAE,CAAC,SAAS,CAAC;QACxB,aAAa,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,iBAAiB,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;QACjG,OAAO,EAAE,0FAA0F;QACnG,UAAU,EAAE,YAAY;QACxB,MAAM,EAAE;YACN,IAAI,EAAE;gBACJ,UAAU,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,iBAAiB,CAAC;gBACtE,MAAM,EAAE,MAAM;gBACd,YAAY,EAAE,YAAY;gBAC1B,UAAU,EAAE,OAAO;gBACnB,QAAQ,EAAE,WAAW;aACtB;YACD,OAAO,EAAE;gBACP,UAAU,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,WAAW,CAAC;gBACvD,MAAM,EAAE,MAAM;gBACd,YAAY,EAAE,YAAY;gBAC1B,UAAU,EAAE,OAAO;gBACnB,QAAQ,EAAE,WAAW;aACtB;SACF;KACF;IACD;QACE,EAAE,EAAE,UAAU;QACd,UAAU,EAAE,UAAU;QACtB,KAAK,EAAE,UAAU;QACjB,WAAW,EAAE,CAAC,UAAU,CAAC;QACzB,aAAa,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC;YAC1B,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,UAAU,EAAE,gBAAgB,CAAC;YAC1D,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,UAAU,EAAE,eAAe,CAAC;YACzD,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC;SACzC;QACD,OAAO,EAAE,sCAAsC;QAC/C,UAAU,EAAE,YAAY;QACxB,MAAM,EAAE;YACN,IAAI,EAAE;gBACJ,UAAU,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,UAAU,EAAE,gBAAgB,CAAC;gBACnF,MAAM,EAAE,OAAO;gBACf,YAAY,EAAE,KAAK;gBACnB,UAAU,EAAE,UAAU;gBACtB,QAAQ,EAAE,WAAW;aACtB;YACD,OAAO,EAAE;gBACP,UAAU,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,eAAe,CAAC;gBAC3D,MAAM,EAAE,MAAM;gBACd,YAAY,EAAE,KAAK;gBACnB,UAAU,EAAE,UAAU;gBACtB,QAAQ,EAAE,WAAW;aACtB;SACF;KACF;IACD;QACE,EAAE,EAAE,KAAK;QACT,UAAU,EAAE,KAAK;QACjB,KAAK,EAAE,KAAK;QACZ,WAAW,EAAE,CAAC,KAAK,CAAC;QACpB,aAAa,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC;YAC1B,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,eAAe,CAAC;YACpD,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC;SACpC;QACD,OAAO,EAAE,4BAA4B;QACrC,UAAU,EAAE,YAAY;QACxB,MAAM,EAAE;YACN,IAAI,EAAE;gBACJ,UAAU,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,eAAe,CAAC;gBAC7E,MAAM,EAAE,MAAM;gBACd,YAAY,EAAE,gBAAgB;gBAC9B,UAAU,EAAE,OAAO;gBACnB,QAAQ,EAAE,WAAW;aACtB;YACD,OAAO,EAAE;gBACP,UAAU,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,eAAe,CAAC;gBACnE,MAAM,EAAE,MAAM;gBACd,YAAY,EAAE,gBAAgB;gBAC9B,UAAU,EAAE,OAAO;gBACnB,QAAQ,EAAE,eAAe;gBACzB,MAAM,EAAE;oBACN,SAAS,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;wBACzB,KAAK;wBACL,KAAK;wBACL,IAAI;wBACJ,aAAa;wBACb,GAAG,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;wBAC1B,IAAI;wBACJ,IAAI,CAAC,OAAO;wBACZ,GAAG,IAAI,CAAC,IAAI;qBACb;oBACD,aAAa,EAAE,QAAQ;oBACvB,yBAAyB,EAAE,kBAAkB;iBAC9C;aACF;SACF;KACF;IACD;QACE,EAAE,EAAE,YAAY;QAChB,UAAU,EAAE,YAAY;QACxB,KAAK,EAAE,YAAY;QACnB,WAAW,EAAE,CAAC,cAAc,CAAC;QAC7B,aAAa,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,EAAE,UAAU,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAC5G,OAAO,EAAE,wDAAwD;QACjE,UAAU,EAAE,YAAY;QACxB,MAAM,EAAE;YACN,0EAA0E;YAC1E,wEAAwE;YACxE,IAAI,EAAE;gBACJ,UAAU,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,EAAE,UAAU,CAAC;gBACrE,MAAM,EAAE,MAAM;gBACd,YAAY,EAAE,YAAY;gBAC1B,UAAU,EAAE,OAAO;gBACnB,QAAQ,EAAE,WAAW;aACtB;YACD,OAAO,EAAE;gBACP,UAAU,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,EAAE,UAAU,CAAC;gBACjE,MAAM,EAAE,MAAM;gBACd,YAAY,EAAE,YAAY;gBAC1B,UAAU,EAAE,OAAO;gBACnB,QAAQ,EAAE,WAAW;aACtB;SACF;KACF;IACD;QACE,EAAE,EAAE,UAAU;QACd,UAAU,EAAE,UAAU;QACtB,KAAK,EAAE,UAAU;QACjB,WAAW,EAAE,CAAC,MAAM,CAAC;QACrB,YAAY,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC;QAC3D,aAAa,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;QACpF,OAAO,EAAE,wEAAwE;QACjF,UAAU,EAAE,YAAY;QACxB,MAAM,EAAE;YACN,0EAA0E;YAC1E,wEAAwE;YACxE,IAAI,EAAE;gBACJ,UAAU,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC;gBAC5D,MAAM,EAAE,MAAM;gBACd,YAAY,EAAE,YAAY;gBAC1B,UAAU,EAAE,OAAO;gBACnB,QAAQ,EAAE,WAAW;aACtB;YACD,OAAO,EAAE;gBACP,UAAU,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,YAAY,EAAE,UAAU,CAAC;gBACpE,MAAM,EAAE,MAAM;gBACd,YAAY,EAAE,YAAY;gBAC1B,UAAU,EAAE,OAAO;gBACnB,QAAQ,EAAE,WAAW;aACtB;SACF;KACF;IACD;QACE,EAAE,EAAE,aAAa;QACjB,UAAU,EAAE,aAAa;QACzB,KAAK,EAAE,aAAa;QACpB,WAAW,EAAE,CAAC,KAAK,EAAE,aAAa,CAAC;QACnC,aAAa,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC;YAC1B,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,iBAAiB,CAAC;YAC7D,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,EAAE,aAAa,CAAC;SAChD;QACD,OAAO,EAAE,qCAAqC;QAC9C,UAAU,EAAE,YAAY;QACxB,MAAM,EAAE;YACN,2EAA2E;YAC3E,uDAAuD;YACvD,IAAI,EAAE;gBACJ,UAAU,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,iBAAiB,CAAC;gBACtF,MAAM,EAAE,MAAM;gBACd,YAAY,EAAE,YAAY;gBAC1B,UAAU,EAAE,OAAO;gBACnB,QAAQ,EAAE,WAAW;aACtB;YACD,OAAO,EAAE;gBACP,UAAU,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,EAAE,iBAAiB,CAAC;gBACxE,MAAM,EAAE,MAAM;gBACd,YAAY,EAAE,YAAY;gBAC1B,UAAU,EAAE,OAAO;gBACnB,QAAQ,EAAE,WAAW;aACtB;SACF;KACF;CACF,CAAC;AAEF,MAAM,UAAU,UAAU,CAAC,QAAgB;IACzC,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAChD,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { McpClientId, McpPathContext, McpScope } from './types.js';
|
|
2
|
+
type FindingKind = 'project-config' | 'mcp-config' | 'backup';
|
|
3
|
+
type CleanupOutcome = 'CLEANED' | 'SKIPPED' | 'FAILED';
|
|
4
|
+
export interface McpDoctorFinding {
|
|
5
|
+
path: string;
|
|
6
|
+
kind: FindingKind;
|
|
7
|
+
occurrences: number;
|
|
8
|
+
clientIds: McpClientId[];
|
|
9
|
+
scopes: McpScope[];
|
|
10
|
+
}
|
|
11
|
+
export interface McpDoctorCleanup {
|
|
12
|
+
path: string;
|
|
13
|
+
outcome: CleanupOutcome;
|
|
14
|
+
detail: string;
|
|
15
|
+
}
|
|
16
|
+
export interface McpDoctorReport {
|
|
17
|
+
confirmed: boolean;
|
|
18
|
+
scannedFiles: number;
|
|
19
|
+
findings: McpDoctorFinding[];
|
|
20
|
+
cleanup: McpDoctorCleanup[];
|
|
21
|
+
remainingFindings: McpDoctorFinding[];
|
|
22
|
+
}
|
|
23
|
+
export interface McpDoctorCommandOptions {
|
|
24
|
+
/** Explicit confirmation. Without it doctor is a read-only audit. */
|
|
25
|
+
yes?: boolean;
|
|
26
|
+
}
|
|
27
|
+
export interface McpDoctorDependencies {
|
|
28
|
+
context?: Partial<McpPathContext>;
|
|
29
|
+
hasValidPersonalCredential?: (apiUrl: string) => Promise<boolean>;
|
|
30
|
+
}
|
|
31
|
+
export interface McpDoctorCommandOutput {
|
|
32
|
+
text: string;
|
|
33
|
+
json: McpDoctorReport;
|
|
34
|
+
exitCode: number;
|
|
35
|
+
}
|
|
36
|
+
export declare function runMcpDoctorCommand(options: McpDoctorCommandOptions, dependencies?: McpDoctorDependencies): Promise<McpDoctorCommandOutput>;
|
|
37
|
+
export {};
|
|
38
|
+
//# sourceMappingURL=doctor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/mcp-registration/doctor.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,WAAW,EAAiB,cAAc,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAYvF,KAAK,WAAW,GAAG,gBAAgB,GAAG,YAAY,GAAG,QAAQ,CAAC;AAC9D,KAAK,cAAc,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;AAiBvD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,WAAW,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,WAAW,EAAE,CAAC;IACzB,MAAM,EAAE,QAAQ,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,cAAc,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,iBAAiB,EAAE,gBAAgB,EAAE,CAAC;CACvC;AAED,MAAM,WAAW,uBAAuB;IACtC,qEAAqE;IACrE,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;IAClC,0BAA0B,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CACnE;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,eAAe,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAkWD,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,uBAAuB,EAChC,YAAY,GAAE,qBAA0B,GACvC,OAAO,CAAC,sBAAsB,CAAC,CA6CjC"}
|
|
@@ -0,0 +1,379 @@
|
|
|
1
|
+
import { existsSync, readFileSync, unlinkSync } from 'node:fs';
|
|
2
|
+
import { homedir } from 'node:os';
|
|
3
|
+
import { DEFAULT_API_URL, findProjectConfig, saveConfig } from '../utils/config.js';
|
|
4
|
+
import { getPersonalTokenClient } from '../auth/personalTokenClient.js';
|
|
5
|
+
import { BACKUP_SUFFIX, PROJECT_SCOPE_FILE_MODE, USER_SCOPE_FILE_MODE, writeConfigFileAtomically, } from './atomicWrite.js';
|
|
6
|
+
import { MCP_CLIENTS } from './clients.js';
|
|
7
|
+
import { McpConfigParseError, readContainerEntry, upsertContainerEntry } from './jsonc.js';
|
|
8
|
+
import { buildEntryValue } from './render.js';
|
|
9
|
+
import { buildServerSpec, MCP_SERVER_NAME } from './serverSpec.js';
|
|
10
|
+
/**
|
|
11
|
+
* A `key_` that starts a value, not one embedded in a longer identifier.
|
|
12
|
+
*
|
|
13
|
+
* The lookbehind is what keeps `license_key_path` or `api_key_source` out of the
|
|
14
|
+
* scan, and the length floor keeps a bare `key_x` out of it: an agent key is
|
|
15
|
+
* always `key_{uuid}_{uuid}`. Matching those would make doctor report — and,
|
|
16
|
+
* before the entry check below, rewrite — files that never held a credential.
|
|
17
|
+
*/
|
|
18
|
+
const KEY_PATTERN = /(?<![A-Za-z0-9_-])key_[A-Za-z0-9][A-Za-z0-9_-]{7,}/g;
|
|
19
|
+
function resolvePathContext(overrides) {
|
|
20
|
+
return {
|
|
21
|
+
homeDir: overrides?.homeDir ?? homedir(),
|
|
22
|
+
cwd: overrides?.cwd ?? process.cwd(),
|
|
23
|
+
env: overrides?.env ?? process.env,
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
function countKeyMaterial(source) {
|
|
27
|
+
return source.match(KEY_PATTERN)?.length ?? 0;
|
|
28
|
+
}
|
|
29
|
+
function redactKeyMaterial(value) {
|
|
30
|
+
return value.replace(KEY_PATTERN, '***');
|
|
31
|
+
}
|
|
32
|
+
function readSource(path) {
|
|
33
|
+
try {
|
|
34
|
+
return readFileSync(path, 'utf-8');
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
function buildCandidates(context) {
|
|
41
|
+
const candidates = new Map();
|
|
42
|
+
const projectConfigPath = findProjectConfig(context.cwd);
|
|
43
|
+
if (projectConfigPath) {
|
|
44
|
+
candidates.set(projectConfigPath, {
|
|
45
|
+
path: projectConfigPath,
|
|
46
|
+
kind: 'project-config',
|
|
47
|
+
definitions: [],
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
for (const client of MCP_CLIENTS) {
|
|
51
|
+
for (const scope of ['user', 'project']) {
|
|
52
|
+
const definition = client.scopes[scope];
|
|
53
|
+
const path = definition.configPath(context);
|
|
54
|
+
const candidate = candidates.get(path) ?? { path, kind: 'mcp-config', definitions: [] };
|
|
55
|
+
candidate.definitions.push({
|
|
56
|
+
clientId: client.id,
|
|
57
|
+
scope,
|
|
58
|
+
format: definition.format,
|
|
59
|
+
containerKey: definition.containerKey,
|
|
60
|
+
entryShape: definition.entryShape,
|
|
61
|
+
});
|
|
62
|
+
candidates.set(path, candidate);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
for (const primary of [...candidates.values()]) {
|
|
66
|
+
const backupPath = `${primary.path}${BACKUP_SUFFIX}`;
|
|
67
|
+
candidates.set(backupPath, {
|
|
68
|
+
path: backupPath,
|
|
69
|
+
kind: 'backup',
|
|
70
|
+
primaryPath: primary.path,
|
|
71
|
+
definitions: [...primary.definitions],
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
return [...candidates.values()];
|
|
75
|
+
}
|
|
76
|
+
function scanCandidates(candidates) {
|
|
77
|
+
let scannedFiles = 0;
|
|
78
|
+
const findings = [];
|
|
79
|
+
for (const candidate of candidates) {
|
|
80
|
+
if (!existsSync(candidate.path))
|
|
81
|
+
continue;
|
|
82
|
+
scannedFiles += 1;
|
|
83
|
+
const source = readSource(candidate.path);
|
|
84
|
+
if (source === null)
|
|
85
|
+
continue;
|
|
86
|
+
const occurrences = countKeyMaterial(source);
|
|
87
|
+
if (occurrences === 0)
|
|
88
|
+
continue;
|
|
89
|
+
findings.push({
|
|
90
|
+
path: redactKeyMaterial(candidate.path),
|
|
91
|
+
kind: candidate.kind,
|
|
92
|
+
occurrences,
|
|
93
|
+
clientIds: [...new Set(candidate.definitions.map((definition) => definition.clientId))],
|
|
94
|
+
scopes: [...new Set(candidate.definitions.map((definition) => definition.scope))],
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
return { scannedFiles, findings };
|
|
98
|
+
}
|
|
99
|
+
async function hasValidPersonalCredential(apiUrl) {
|
|
100
|
+
const client = getPersonalTokenClient(apiUrl);
|
|
101
|
+
if (!client.hasCredential())
|
|
102
|
+
return false;
|
|
103
|
+
try {
|
|
104
|
+
return Boolean(await client.getAccessToken());
|
|
105
|
+
}
|
|
106
|
+
catch {
|
|
107
|
+
return false;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
async function cleanProjectConfig(candidate, dependencies) {
|
|
111
|
+
const displayPath = redactKeyMaterial(candidate.path);
|
|
112
|
+
const source = readSource(candidate.path);
|
|
113
|
+
if (source === null) {
|
|
114
|
+
return {
|
|
115
|
+
path: displayPath,
|
|
116
|
+
outcome: 'FAILED',
|
|
117
|
+
detail: 'Could not read the project config; it was left unchanged.',
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
let config;
|
|
121
|
+
try {
|
|
122
|
+
const parsed = JSON.parse(source);
|
|
123
|
+
if (parsed === null || typeof parsed !== 'object' || Array.isArray(parsed))
|
|
124
|
+
throw new Error('not an object');
|
|
125
|
+
config = parsed;
|
|
126
|
+
}
|
|
127
|
+
catch {
|
|
128
|
+
return {
|
|
129
|
+
path: displayPath,
|
|
130
|
+
outcome: 'SKIPPED',
|
|
131
|
+
detail: 'The project config format was not recognized and was left unchanged.',
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
if (typeof config.teamId !== 'string' ||
|
|
135
|
+
config.teamId.length === 0 ||
|
|
136
|
+
typeof config.projectId !== 'string' ||
|
|
137
|
+
config.projectId.length === 0 ||
|
|
138
|
+
typeof config.apiKey !== 'string' ||
|
|
139
|
+
countKeyMaterial(config.apiKey) === 0) {
|
|
140
|
+
return {
|
|
141
|
+
path: displayPath,
|
|
142
|
+
outcome: 'SKIPPED',
|
|
143
|
+
detail: 'The project config did not contain a removable legacy apiKey field and was left unchanged.',
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
if (config.authMode !== 'personal-token') {
|
|
147
|
+
return {
|
|
148
|
+
path: displayPath,
|
|
149
|
+
outcome: 'SKIPPED',
|
|
150
|
+
detail: "The project has not completed personal-token migration. Run 'agentteams auth login' before removing its only credential.",
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
const apiUrl = typeof config.apiUrl === 'string' && config.apiUrl.length > 0 ? config.apiUrl : DEFAULT_API_URL;
|
|
154
|
+
const credentialCheck = dependencies.hasValidPersonalCredential ?? hasValidPersonalCredential;
|
|
155
|
+
if (!(await credentialCheck(apiUrl))) {
|
|
156
|
+
return {
|
|
157
|
+
path: displayPath,
|
|
158
|
+
outcome: 'SKIPPED',
|
|
159
|
+
detail: "No valid personal credential is available. Run 'agentteams auth login' and retry; the legacy apiKey was preserved.",
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
const next = { ...config };
|
|
163
|
+
delete next.apiKey;
|
|
164
|
+
try {
|
|
165
|
+
saveConfig(candidate.path, next);
|
|
166
|
+
return {
|
|
167
|
+
path: displayPath,
|
|
168
|
+
outcome: 'CLEANED',
|
|
169
|
+
detail: 'Removed only apiKey after validating the personal credential; all other project fields were preserved.',
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
catch {
|
|
173
|
+
return {
|
|
174
|
+
path: displayPath,
|
|
175
|
+
outcome: 'FAILED',
|
|
176
|
+
detail: 'Could not atomically update the project config; it was left unchanged.',
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
function cleanMcpConfig(candidate, context) {
|
|
181
|
+
const displayPath = redactKeyMaterial(candidate.path);
|
|
182
|
+
const editable = candidate.definitions.find((definition) => definition.format !== 'toml' && typeof definition.containerKey === 'string');
|
|
183
|
+
if (!editable?.containerKey) {
|
|
184
|
+
return {
|
|
185
|
+
path: displayPath,
|
|
186
|
+
outcome: 'SKIPPED',
|
|
187
|
+
detail: 'This config format has no safe comment-preserving editor; it was left unchanged.',
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
const source = readSource(candidate.path);
|
|
191
|
+
if (source === null) {
|
|
192
|
+
return { path: displayPath, outcome: 'FAILED', detail: 'Could not read the MCP config; it was left unchanged.' };
|
|
193
|
+
}
|
|
194
|
+
// Doctor cleans an entry it already owns; it never creates one. `upsertContainerEntry`
|
|
195
|
+
// below is an upsert, so reaching it with no existing entry would register an MCP
|
|
196
|
+
// server the user never asked for — in a file (`~/.claude.json` at user scope) that
|
|
197
|
+
// also holds unrelated history whose `key_` traces are what pulled it into the scan.
|
|
198
|
+
let existingEntry;
|
|
199
|
+
try {
|
|
200
|
+
existingEntry = readContainerEntry(source, editable.containerKey, MCP_SERVER_NAME);
|
|
201
|
+
}
|
|
202
|
+
catch (error) {
|
|
203
|
+
return {
|
|
204
|
+
path: displayPath,
|
|
205
|
+
outcome: 'SKIPPED',
|
|
206
|
+
detail: error instanceof McpConfigParseError
|
|
207
|
+
? 'The MCP config could not be parsed and was left unchanged.'
|
|
208
|
+
: 'The MCP config format was not recognized and was left unchanged.',
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
if (existingEntry === undefined) {
|
|
212
|
+
return {
|
|
213
|
+
path: displayPath,
|
|
214
|
+
outcome: 'SKIPPED',
|
|
215
|
+
detail: 'AgentTeams is not registered in this config, so nothing was inserted; the key material it holds belongs to another tool and needs manual removal.',
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
if (countKeyMaterial(JSON.stringify(existingEntry) ?? '') === 0) {
|
|
219
|
+
return {
|
|
220
|
+
path: displayPath,
|
|
221
|
+
outcome: 'SKIPPED',
|
|
222
|
+
detail: 'The AgentTeams entry was already secret-free; key material elsewhere in the file was left unchanged.',
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
let edited;
|
|
226
|
+
try {
|
|
227
|
+
edited = upsertContainerEntry(source, {
|
|
228
|
+
containerKey: editable.containerKey,
|
|
229
|
+
entryKey: MCP_SERVER_NAME,
|
|
230
|
+
entryValue: buildEntryValue(editable.entryShape ?? 'plain', buildServerSpec({ context })),
|
|
231
|
+
});
|
|
232
|
+
}
|
|
233
|
+
catch (error) {
|
|
234
|
+
return {
|
|
235
|
+
path: displayPath,
|
|
236
|
+
outcome: 'SKIPPED',
|
|
237
|
+
detail: error instanceof McpConfigParseError
|
|
238
|
+
? 'The MCP config could not be parsed and was left unchanged.'
|
|
239
|
+
: 'The MCP config format was not recognized and was left unchanged.',
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
if (edited.unchanged) {
|
|
243
|
+
return {
|
|
244
|
+
path: displayPath,
|
|
245
|
+
outcome: 'SKIPPED',
|
|
246
|
+
detail: 'The AgentTeams entry was already secret-free; key material elsewhere in the file was left unchanged.',
|
|
247
|
+
};
|
|
248
|
+
}
|
|
249
|
+
const isUserScope = candidate.definitions.some((definition) => definition.scope === 'user');
|
|
250
|
+
const mode = isUserScope ? USER_SCOPE_FILE_MODE : PROJECT_SCOPE_FILE_MODE;
|
|
251
|
+
let written;
|
|
252
|
+
try {
|
|
253
|
+
written = writeConfigFileAtomically(candidate.path, edited.text, mode, isUserScope ? mode : undefined);
|
|
254
|
+
}
|
|
255
|
+
catch {
|
|
256
|
+
return {
|
|
257
|
+
path: displayPath,
|
|
258
|
+
outcome: 'FAILED',
|
|
259
|
+
detail: 'Could not atomically update the MCP config; the remaining location is reported below.',
|
|
260
|
+
};
|
|
261
|
+
}
|
|
262
|
+
// The config is already rewritten at this point. A backup that refuses to unlink is a
|
|
263
|
+
// leftover copy to report, not a reason to tell the user the cleanup failed and have
|
|
264
|
+
// them repeat it.
|
|
265
|
+
let backupNote = '';
|
|
266
|
+
if (written.backupPath) {
|
|
267
|
+
try {
|
|
268
|
+
unlinkSync(written.backupPath);
|
|
269
|
+
}
|
|
270
|
+
catch {
|
|
271
|
+
backupNote = ` The pre-edit backup still holds the old key material and could not be removed; delete it manually: ${written.backupPath}`;
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
const remaining = countKeyMaterial(readSource(candidate.path) ?? '');
|
|
275
|
+
return {
|
|
276
|
+
path: displayPath,
|
|
277
|
+
outcome: remaining === 0 ? 'CLEANED' : 'SKIPPED',
|
|
278
|
+
detail: (remaining === 0
|
|
279
|
+
? 'Rewrote only the AgentTeams MCP entry with the secret-free runtime spec.'
|
|
280
|
+
: 'The AgentTeams entry was cleaned, but unrelated key material remains and was not modified.') + backupNote,
|
|
281
|
+
};
|
|
282
|
+
}
|
|
283
|
+
function cleanBackup(candidate) {
|
|
284
|
+
const displayPath = redactKeyMaterial(candidate.path);
|
|
285
|
+
if (!existsSync(candidate.path)) {
|
|
286
|
+
return { path: displayPath, outcome: 'CLEANED', detail: 'The stale AgentTeams backup was already removed.' };
|
|
287
|
+
}
|
|
288
|
+
const primarySource = candidate.primaryPath ? readSource(candidate.primaryPath) : null;
|
|
289
|
+
if (primarySource === null || countKeyMaterial(primarySource) > 0) {
|
|
290
|
+
return {
|
|
291
|
+
path: displayPath,
|
|
292
|
+
outcome: 'SKIPPED',
|
|
293
|
+
detail: 'The primary config is missing or still contains key material, so its recovery backup was preserved.',
|
|
294
|
+
};
|
|
295
|
+
}
|
|
296
|
+
try {
|
|
297
|
+
unlinkSync(candidate.path);
|
|
298
|
+
return {
|
|
299
|
+
path: displayPath,
|
|
300
|
+
outcome: 'CLEANED',
|
|
301
|
+
detail: 'Removed the stale AgentTeams backup after its primary was clean.',
|
|
302
|
+
};
|
|
303
|
+
}
|
|
304
|
+
catch {
|
|
305
|
+
return { path: displayPath, outcome: 'FAILED', detail: 'Could not remove the stale AgentTeams backup.' };
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
function renderFinding(finding) {
|
|
309
|
+
const clients = finding.clientIds.length > 0 ? ` (${finding.clientIds.join(', ')})` : '';
|
|
310
|
+
return `- ${finding.kind}: ${finding.path}${clients} — ${finding.occurrences} redacted key location(s)`;
|
|
311
|
+
}
|
|
312
|
+
function renderReport(report) {
|
|
313
|
+
const lines = [
|
|
314
|
+
`AgentTeams MCP doctor — scanned ${report.scannedFiles} existing config/backup file(s)`,
|
|
315
|
+
`Found ${report.findings.length} file(s) containing legacy key material.`,
|
|
316
|
+
...report.findings.map(renderFinding),
|
|
317
|
+
];
|
|
318
|
+
if (!report.confirmed) {
|
|
319
|
+
lines.push('');
|
|
320
|
+
lines.push('Audit only: no files were changed.');
|
|
321
|
+
if (report.findings.length > 0) {
|
|
322
|
+
lines.push('Re-run `agentteams mcp doctor --yes` to confirm the safe cleanup actions.');
|
|
323
|
+
}
|
|
324
|
+
return redactKeyMaterial(lines.join('\n'));
|
|
325
|
+
}
|
|
326
|
+
lines.push('');
|
|
327
|
+
lines.push('Confirmed cleanup results:');
|
|
328
|
+
lines.push(...report.cleanup.map((result) => `- [${result.outcome}] ${result.path} — ${result.detail}`));
|
|
329
|
+
lines.push('');
|
|
330
|
+
lines.push(`Remaining: ${report.remainingFindings.length} file(s) containing legacy key material.`);
|
|
331
|
+
lines.push(...report.remainingFindings.map(renderFinding));
|
|
332
|
+
return redactKeyMaterial(lines.join('\n'));
|
|
333
|
+
}
|
|
334
|
+
export async function runMcpDoctorCommand(options, dependencies = {}) {
|
|
335
|
+
const context = resolvePathContext(dependencies.context);
|
|
336
|
+
const candidates = buildCandidates(context);
|
|
337
|
+
const initial = scanCandidates(candidates);
|
|
338
|
+
if (!options.yes) {
|
|
339
|
+
const report = {
|
|
340
|
+
confirmed: false,
|
|
341
|
+
scannedFiles: initial.scannedFiles,
|
|
342
|
+
findings: initial.findings,
|
|
343
|
+
cleanup: [],
|
|
344
|
+
remainingFindings: initial.findings,
|
|
345
|
+
};
|
|
346
|
+
return { text: renderReport(report), json: report, exitCode: 0 };
|
|
347
|
+
}
|
|
348
|
+
const candidateByPath = new Map(candidates.map((candidate) => [redactKeyMaterial(candidate.path), candidate]));
|
|
349
|
+
const cleanup = [];
|
|
350
|
+
for (const finding of initial.findings.filter((item) => item.kind === 'project-config')) {
|
|
351
|
+
const candidate = candidateByPath.get(finding.path);
|
|
352
|
+
if (candidate)
|
|
353
|
+
cleanup.push(await cleanProjectConfig(candidate, dependencies));
|
|
354
|
+
}
|
|
355
|
+
for (const finding of initial.findings.filter((item) => item.kind === 'mcp-config')) {
|
|
356
|
+
const candidate = candidateByPath.get(finding.path);
|
|
357
|
+
if (candidate)
|
|
358
|
+
cleanup.push(cleanMcpConfig(candidate, context));
|
|
359
|
+
}
|
|
360
|
+
for (const finding of initial.findings.filter((item) => item.kind === 'backup')) {
|
|
361
|
+
const candidate = candidateByPath.get(finding.path);
|
|
362
|
+
if (candidate)
|
|
363
|
+
cleanup.push(cleanBackup(candidate));
|
|
364
|
+
}
|
|
365
|
+
const after = scanCandidates(candidates);
|
|
366
|
+
const report = {
|
|
367
|
+
confirmed: true,
|
|
368
|
+
scannedFiles: initial.scannedFiles,
|
|
369
|
+
findings: initial.findings,
|
|
370
|
+
cleanup,
|
|
371
|
+
remainingFindings: after.findings,
|
|
372
|
+
};
|
|
373
|
+
return {
|
|
374
|
+
text: renderReport(report),
|
|
375
|
+
json: report,
|
|
376
|
+
exitCode: after.findings.length === 0 ? 0 : 1,
|
|
377
|
+
};
|
|
378
|
+
}
|
|
379
|
+
//# sourceMappingURL=doctor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/mcp-registration/doctor.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,9 +4,11 @@ import type { McpPathContext } from './types.js';
|
|
|
4
4
|
import type { VendorRunner } from './vendorCommand.js';
|
|
5
5
|
export { MCP_CLIENTS, findClient, listClientIds } from './clients.js';
|
|
6
6
|
export { detectClients } from './detect.js';
|
|
7
|
+
export { runMcpDoctorCommand } from './doctor.js';
|
|
8
|
+
export type { McpDoctorCleanup, McpDoctorCommandOptions, McpDoctorCommandOutput, McpDoctorDependencies, McpDoctorFinding, McpDoctorReport, } from './doctor.js';
|
|
7
9
|
export { buildBatchPlan, installClient, resolveInstallExitCode, runBatchInstall } from './install.js';
|
|
8
|
-
export { renderConfigSnippet, renderVendorCommandLine,
|
|
9
|
-
export { buildServerSpec, MCP_SERVER_NAME
|
|
10
|
+
export { renderConfigSnippet, renderVendorCommandLine, redactKeyMaterial } from './render.js';
|
|
11
|
+
export { buildServerSpec, MCP_SERVER_NAME } from './serverSpec.js';
|
|
10
12
|
export type { McpCredentials } from './serverSpec.js';
|
|
11
13
|
export * from './types.js';
|
|
12
14
|
declare const MCP_CLIENT_ID_LIST: ("claude-code" | "codex" | "copilot-cli" | "opencode" | "amp" | "cursor-cli" | "kimi-cli" | "antigravity")[];
|
|
@@ -35,9 +37,9 @@ export interface CommandOutput {
|
|
|
35
37
|
}
|
|
36
38
|
/**
|
|
37
39
|
* `config` is the escape hatch: it renders the exact fragment each client
|
|
38
|
-
* expects and never touches a file, a vendor CLI or the network. The
|
|
39
|
-
*
|
|
40
|
-
*
|
|
40
|
+
* expects and never touches a file, a vendor CLI or the network. The spawned
|
|
41
|
+
* server resolves local project identity and credentials for itself, so the
|
|
42
|
+
* fragment is safe to paste without any environment values.
|
|
41
43
|
*/
|
|
42
44
|
export declare function runMcpConfigCommand(options: McpRegistrationCommandOptions, dependencies?: McpRegistrationDependencies): CommandOutput;
|
|
43
45
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mcp-registration/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAGzD,OAAO,EAAoC,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACxF,OAAO,KAAK,EAA8B,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mcp-registration/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAGzD,OAAO,EAAoC,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACxF,OAAO,KAAK,EAA8B,cAAc,EAA2B,MAAM,YAAY,CAAC;AACtG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,YAAY,EACV,gBAAgB,EAChB,uBAAuB,EACvB,sBAAsB,EACtB,qBAAqB,EACrB,gBAAgB,EAChB,eAAe,GAChB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACtG,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAC9F,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACnE,YAAY,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,cAAc,YAAY,CAAC;AAE3B,QAAA,MAAM,kBAAkB,8GAAkB,CAAC;AAE3C,OAAO,EAAE,kBAAkB,EAAE,CAAC;AAE9B,MAAM,WAAW,6BAA6B;IAC5C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,iFAAiF;AACjF,MAAM,WAAW,2BAA2B;IAC1C,OAAO,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;IAClC,WAAW,CAAC,EAAE,cAAc,CAAC;IAC7B,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,qBAAqB,CAAC,EAAE,IAAI,CAAC,qBAAqB,EAAE,SAAS,CAAC,CAAC;CAChE;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB;AAgED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,6BAA6B,EACtC,YAAY,CAAC,EAAE,2BAA2B,GACzC,aAAa,CA4Cf;AAsBD;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,6BAA6B,EACtC,YAAY,CAAC,EAAE,2BAA2B,GACzC,aAAa,CAmGf"}
|