@agentteams/cli 0.1.76 → 0.1.77

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. package/.eslintcache +1 -1
  2. package/dist/api/convention.d.ts +11 -0
  3. package/dist/api/convention.d.ts.map +1 -0
  4. package/dist/api/convention.js +26 -0
  5. package/dist/api/convention.js.map +1 -0
  6. package/dist/commands/convention.d.ts.map +1 -1
  7. package/dist/commands/convention.js +6 -8
  8. package/dist/commands/convention.js.map +1 -1
  9. package/dist/commands/index.d.ts.map +1 -1
  10. package/dist/commands/index.js +1 -19
  11. package/dist/commands/index.js.map +1 -1
  12. package/dist/commands/mcp.d.ts +13 -0
  13. package/dist/commands/mcp.d.ts.map +1 -0
  14. package/dist/commands/mcp.js +13 -0
  15. package/dist/commands/mcp.js.map +1 -0
  16. package/dist/commands/search.d.ts.map +1 -1
  17. package/dist/commands/search.js +8 -35
  18. package/dist/commands/search.js.map +1 -1
  19. package/dist/index.js +71 -0
  20. package/dist/index.js.map +1 -1
  21. package/dist/mcp/context.d.ts +15 -0
  22. package/dist/mcp/context.d.ts.map +1 -0
  23. package/dist/mcp/context.js +47 -0
  24. package/dist/mcp/context.js.map +1 -0
  25. package/dist/mcp/resources.d.ts +17 -0
  26. package/dist/mcp/resources.d.ts.map +1 -0
  27. package/dist/mcp/resources.js +50 -0
  28. package/dist/mcp/resources.js.map +1 -0
  29. package/dist/mcp/server.d.ts +20 -0
  30. package/dist/mcp/server.d.ts.map +1 -0
  31. package/dist/mcp/server.js +106 -0
  32. package/dist/mcp/server.js.map +1 -0
  33. package/dist/mcp/tools.d.ts +20 -0
  34. package/dist/mcp/tools.d.ts.map +1 -0
  35. package/dist/mcp/tools.js +172 -0
  36. package/dist/mcp/tools.js.map +1 -0
  37. package/dist/mcp-registration/atomicWrite.d.ts +26 -0
  38. package/dist/mcp-registration/atomicWrite.d.ts.map +1 -0
  39. package/dist/mcp-registration/atomicWrite.js +58 -0
  40. package/dist/mcp-registration/atomicWrite.js.map +1 -0
  41. package/dist/mcp-registration/clients.d.ts +5 -0
  42. package/dist/mcp-registration/clients.d.ts.map +1 -0
  43. package/dist/mcp-registration/clients.js +300 -0
  44. package/dist/mcp-registration/clients.js.map +1 -0
  45. package/dist/mcp-registration/detect.d.ts +23 -0
  46. package/dist/mcp-registration/detect.d.ts.map +1 -0
  47. package/dist/mcp-registration/detect.js +48 -0
  48. package/dist/mcp-registration/detect.js.map +1 -0
  49. package/dist/mcp-registration/index.d.ts +50 -0
  50. package/dist/mcp-registration/index.d.ts.map +1 -0
  51. package/dist/mcp-registration/index.js +205 -0
  52. package/dist/mcp-registration/index.js.map +1 -0
  53. package/dist/mcp-registration/install.d.ts +66 -0
  54. package/dist/mcp-registration/install.d.ts.map +1 -0
  55. package/dist/mcp-registration/install.js +244 -0
  56. package/dist/mcp-registration/install.js.map +1 -0
  57. package/dist/mcp-registration/jsonc.d.ts +44 -0
  58. package/dist/mcp-registration/jsonc.d.ts.map +1 -0
  59. package/dist/mcp-registration/jsonc.js +266 -0
  60. package/dist/mcp-registration/jsonc.js.map +1 -0
  61. package/dist/mcp-registration/render.d.ts +18 -0
  62. package/dist/mcp-registration/render.d.ts.map +1 -0
  63. package/dist/mcp-registration/render.js +91 -0
  64. package/dist/mcp-registration/render.js.map +1 -0
  65. package/dist/mcp-registration/serverSpec.d.ts +31 -0
  66. package/dist/mcp-registration/serverSpec.d.ts.map +1 -0
  67. package/dist/mcp-registration/serverSpec.js +29 -0
  68. package/dist/mcp-registration/serverSpec.js.map +1 -0
  69. package/dist/mcp-registration/types.d.ts +98 -0
  70. package/dist/mcp-registration/types.d.ts.map +1 -0
  71. package/dist/mcp-registration/types.js +12 -0
  72. package/dist/mcp-registration/types.js.map +1 -0
  73. package/dist/mcp-registration/vendorCommand.d.ts +18 -0
  74. package/dist/mcp-registration/vendorCommand.d.ts.map +1 -0
  75. package/dist/mcp-registration/vendorCommand.js +27 -0
  76. package/dist/mcp-registration/vendorCommand.js.map +1 -0
  77. package/dist/utils/apiContext.d.ts +13 -0
  78. package/dist/utils/apiContext.d.ts.map +1 -0
  79. package/dist/utils/apiContext.js +26 -0
  80. package/dist/utils/apiContext.js.map +1 -0
  81. package/dist/utils/searchParams.d.ts +21 -0
  82. package/dist/utils/searchParams.d.ts.map +1 -0
  83. package/dist/utils/searchParams.js +47 -0
  84. package/dist/utils/searchParams.js.map +1 -0
  85. package/package.json +5 -3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/mcp-registration/install.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Minimal JSONC reader plus a surgical single-entry editor.
3
+ *
4
+ * MCP client config files are user-owned: OpenCode ships `opencode.jsonc`, and
5
+ * Cursor/Antigravity/Kimi users routinely keep comments and a hand-picked key
6
+ * order in their `mcp.json`. A `JSON.parse` → `JSON.stringify` round-trip would
7
+ * silently delete those comments and reorder everything, so writes are done as
8
+ * a text splice that touches only the AgentTeams entry and leaves every other
9
+ * byte of the document exactly where it was.
10
+ */
11
+ export declare class McpConfigParseError extends Error {
12
+ constructor(message: string);
13
+ }
14
+ /**
15
+ * Parse JSON with comments and trailing commas. Returns `undefined` for an
16
+ * empty document — an untouched client config file is frequently zero bytes,
17
+ * and that is a "create it" signal rather than a corruption signal.
18
+ */
19
+ export declare function parseJsonc(text: string): unknown;
20
+ export interface UpsertContainerEntryOptions {
21
+ /** Top-level key holding the server map, e.g. `mcpServers`, `mcp`, `amp.mcpServers`. */
22
+ containerKey: string;
23
+ entryKey: string;
24
+ entryValue: unknown;
25
+ }
26
+ export interface UpsertContainerEntryResult {
27
+ text: string;
28
+ /** The entry was already present before this edit. */
29
+ existed: boolean;
30
+ /** The entry was already present *and* byte-identical, so nothing was rewritten. */
31
+ unchanged: boolean;
32
+ }
33
+ /**
34
+ * Insert or replace `containerKey.entryKey` in a JSON/JSONC document without
35
+ * reformatting anything else.
36
+ *
37
+ * @throws {McpConfigParseError} when the document is not parseable, or when the
38
+ * root / container is not an object. Callers must treat this as "leave the
39
+ * user's file untouched" rather than as permission to overwrite it.
40
+ */
41
+ export declare function upsertContainerEntry(source: string, options: UpsertContainerEntryOptions): UpsertContainerEntryResult;
42
+ /** Read `containerKey.entryKey` from a parsed document, if present. */
43
+ export declare function readContainerEntry(source: string, containerKey: string, entryKey: string): unknown;
44
+ //# sourceMappingURL=jsonc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsonc.d.ts","sourceRoot":"","sources":["../../src/mcp-registration/jsonc.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,qBAAa,mBAAoB,SAAQ,KAAK;gBAChC,OAAO,EAAE,MAAM;CAI5B;AAqHD;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAmChD;AAuCD,MAAM,WAAW,2BAA2B;IAC1C,wFAAwF;IACxF,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,sDAAsD;IACtD,OAAO,EAAE,OAAO,CAAC;IACjB,oFAAoF;IACpF,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,2BAA2B,GAAG,0BAA0B,CAkErH;AAED,uEAAuE;AACvE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAMlG"}
@@ -0,0 +1,266 @@
1
+ /**
2
+ * Minimal JSONC reader plus a surgical single-entry editor.
3
+ *
4
+ * MCP client config files are user-owned: OpenCode ships `opencode.jsonc`, and
5
+ * Cursor/Antigravity/Kimi users routinely keep comments and a hand-picked key
6
+ * order in their `mcp.json`. A `JSON.parse` → `JSON.stringify` round-trip would
7
+ * silently delete those comments and reorder everything, so writes are done as
8
+ * a text splice that touches only the AgentTeams entry and leaves every other
9
+ * byte of the document exactly where it was.
10
+ */
11
+ export class McpConfigParseError extends Error {
12
+ constructor(message) {
13
+ super(message);
14
+ this.name = 'McpConfigParseError';
15
+ }
16
+ }
17
+ const WHITESPACE = new Set([' ', '\t', '\n', '\r']);
18
+ /** Skip whitespace and `//` / block comments starting at `index`. */
19
+ function skipTrivia(text, index) {
20
+ let i = index;
21
+ while (i < text.length) {
22
+ const char = text[i];
23
+ if (WHITESPACE.has(char)) {
24
+ i += 1;
25
+ continue;
26
+ }
27
+ if (char === '/' && text[i + 1] === '/') {
28
+ i += 2;
29
+ while (i < text.length && text[i] !== '\n')
30
+ i += 1;
31
+ continue;
32
+ }
33
+ if (char === '/' && text[i + 1] === '*') {
34
+ i += 2;
35
+ while (i < text.length && !(text[i] === '*' && text[i + 1] === '/'))
36
+ i += 1;
37
+ i = Math.min(i + 2, text.length);
38
+ continue;
39
+ }
40
+ break;
41
+ }
42
+ return i;
43
+ }
44
+ function scanString(text, index) {
45
+ let i = index + 1;
46
+ while (i < text.length) {
47
+ const char = text[i];
48
+ if (char === '\\') {
49
+ i += 2;
50
+ continue;
51
+ }
52
+ if (char === '"')
53
+ return i + 1;
54
+ i += 1;
55
+ }
56
+ throw new McpConfigParseError('Unterminated string literal');
57
+ }
58
+ /** Return the index just past the value that starts at (or after) `index`. */
59
+ function scanValue(text, index) {
60
+ const start = skipTrivia(text, index);
61
+ const char = text[start];
62
+ if (char === undefined)
63
+ throw new McpConfigParseError('Unexpected end of input');
64
+ if (char === '"')
65
+ return scanString(text, start);
66
+ if (char === '{' || char === '[') {
67
+ const close = char === '{' ? '}' : ']';
68
+ let depth = 0;
69
+ let i = start;
70
+ while (i < text.length) {
71
+ const current = text[i];
72
+ if (current === '"') {
73
+ i = scanString(text, i);
74
+ continue;
75
+ }
76
+ if (current === '/' && (text[i + 1] === '/' || text[i + 1] === '*')) {
77
+ i = skipTrivia(text, i);
78
+ continue;
79
+ }
80
+ if (current === char)
81
+ depth += 1;
82
+ else if (current === close) {
83
+ depth -= 1;
84
+ if (depth === 0)
85
+ return i + 1;
86
+ }
87
+ i += 1;
88
+ }
89
+ throw new McpConfigParseError('Unterminated object or array');
90
+ }
91
+ let i = start;
92
+ while (i < text.length && !WHITESPACE.has(text[i]) && text[i] !== ',' && text[i] !== '}' && text[i] !== ']') {
93
+ i += 1;
94
+ }
95
+ if (i === start)
96
+ throw new McpConfigParseError(`Unexpected token "${char}"`);
97
+ return i;
98
+ }
99
+ /** List the direct members of the object whose `{` sits at `objectStart`. */
100
+ function listMembers(text, objectStart) {
101
+ const members = [];
102
+ let i = skipTrivia(text, objectStart + 1);
103
+ while (i < text.length && text[i] !== '}') {
104
+ if (text[i] === ',') {
105
+ i = skipTrivia(text, i + 1);
106
+ continue;
107
+ }
108
+ if (text[i] !== '"')
109
+ throw new McpConfigParseError('Expected a quoted object key');
110
+ const keyStart = i;
111
+ const keyEnd = scanString(text, i);
112
+ const key = JSON.parse(text.slice(keyStart, keyEnd));
113
+ const colon = skipTrivia(text, keyEnd);
114
+ if (text[colon] !== ':')
115
+ throw new McpConfigParseError(`Expected ":" after object key "${key}"`);
116
+ const valueStart = skipTrivia(text, colon + 1);
117
+ const valueEnd = scanValue(text, valueStart);
118
+ members.push({ key, keyStart, valueStart, valueEnd });
119
+ i = skipTrivia(text, valueEnd);
120
+ }
121
+ return members;
122
+ }
123
+ /**
124
+ * Parse JSON with comments and trailing commas. Returns `undefined` for an
125
+ * empty document — an untouched client config file is frequently zero bytes,
126
+ * and that is a "create it" signal rather than a corruption signal.
127
+ */
128
+ export function parseJsonc(text) {
129
+ if (text.trim().length === 0)
130
+ return undefined;
131
+ let normalized = '';
132
+ let i = 0;
133
+ while (i < text.length) {
134
+ const char = text[i];
135
+ if (char === '"') {
136
+ const end = scanString(text, i);
137
+ normalized += text.slice(i, end);
138
+ i = end;
139
+ continue;
140
+ }
141
+ if (char === '/' && (text[i + 1] === '/' || text[i + 1] === '*')) {
142
+ normalized += ' ';
143
+ i = skipTrivia(text, i);
144
+ continue;
145
+ }
146
+ if (char === ',') {
147
+ const next = skipTrivia(text, i + 1);
148
+ if (text[next] === '}' || text[next] === ']') {
149
+ normalized += ' ';
150
+ i += 1;
151
+ continue;
152
+ }
153
+ }
154
+ normalized += char;
155
+ i += 1;
156
+ }
157
+ try {
158
+ return JSON.parse(normalized);
159
+ }
160
+ catch (error) {
161
+ throw new McpConfigParseError(error instanceof Error ? error.message : String(error));
162
+ }
163
+ }
164
+ function detectIndentUnit(text) {
165
+ const match = /\n([ \t]+)\S/.exec(text);
166
+ return match ? match[1] : ' ';
167
+ }
168
+ function lineIndentOf(text, index) {
169
+ const lineStart = text.lastIndexOf('\n', index) + 1;
170
+ const match = /^[ \t]*/.exec(text.slice(lineStart, index));
171
+ return match ? match[0] : '';
172
+ }
173
+ function serializeValue(value, indentUnit, baseIndent) {
174
+ const json = JSON.stringify(value, null, indentUnit);
175
+ return json
176
+ .split('\n')
177
+ .map((line, lineIndex) => (lineIndex === 0 ? line : `${baseIndent}${line}`))
178
+ .join('\n');
179
+ }
180
+ function appendMember(text, objectStart, memberText, memberIndent) {
181
+ const objectEnd = scanValue(text, objectStart) - 1;
182
+ const members = listMembers(text, objectStart);
183
+ if (members.length === 0) {
184
+ const closingIndent = lineIndentOf(text, objectStart);
185
+ return `${text.slice(0, objectStart + 1)}\n${memberIndent}${memberText}\n${closingIndent}${text.slice(objectEnd)}`;
186
+ }
187
+ const last = members[members.length - 1];
188
+ const afterLast = skipTrivia(text, last.valueEnd);
189
+ const hasTrailingComma = text[afterLast] === ',';
190
+ const insertAt = hasTrailingComma ? afterLast + 1 : last.valueEnd;
191
+ const separator = hasTrailingComma ? '' : ',';
192
+ return `${text.slice(0, insertAt)}${separator}\n${memberIndent}${memberText}${text.slice(insertAt)}`;
193
+ }
194
+ /**
195
+ * Insert or replace `containerKey.entryKey` in a JSON/JSONC document without
196
+ * reformatting anything else.
197
+ *
198
+ * @throws {McpConfigParseError} when the document is not parseable, or when the
199
+ * root / container is not an object. Callers must treat this as "leave the
200
+ * user's file untouched" rather than as permission to overwrite it.
201
+ */
202
+ export function upsertContainerEntry(source, options) {
203
+ const { containerKey, entryKey, entryValue } = options;
204
+ const indentUnit = detectIndentUnit(source);
205
+ if (source.trim().length === 0) {
206
+ const entry = serializeValue(entryValue, indentUnit, indentUnit.repeat(2));
207
+ const text = `{\n${indentUnit}${JSON.stringify(containerKey)}: {\n` +
208
+ `${indentUnit.repeat(2)}${JSON.stringify(entryKey)}: ${entry}\n` +
209
+ `${indentUnit}}\n}\n`;
210
+ return { text, existed: false, unchanged: false };
211
+ }
212
+ // Validate before splicing: a corrupt document must fail loudly here so the
213
+ // caller can preserve the original instead of writing a half-repaired file.
214
+ parseJsonc(source);
215
+ const rootStart = skipTrivia(source, 0);
216
+ if (source[rootStart] !== '{') {
217
+ throw new McpConfigParseError('The top-level value must be an object');
218
+ }
219
+ const container = listMembers(source, rootStart).find((member) => member.key === containerKey);
220
+ if (!container) {
221
+ const memberIndent = lineIndentOf(source, rootStart) + indentUnit;
222
+ const entry = serializeValue(entryValue, indentUnit, `${memberIndent}${indentUnit}`);
223
+ const memberText = `${JSON.stringify(containerKey)}: {\n` +
224
+ `${memberIndent}${indentUnit}${JSON.stringify(entryKey)}: ${entry}\n` +
225
+ `${memberIndent}}`;
226
+ return { text: appendMember(source, rootStart, memberText, memberIndent), existed: false, unchanged: false };
227
+ }
228
+ if (source[container.valueStart] !== '{') {
229
+ throw new McpConfigParseError(`"${containerKey}" exists but is not an object`);
230
+ }
231
+ const entries = listMembers(source, container.valueStart);
232
+ const existing = entries.find((member) => member.key === entryKey);
233
+ if (existing) {
234
+ const baseIndent = lineIndentOf(source, existing.keyStart);
235
+ const entry = serializeValue(entryValue, indentUnit, baseIndent);
236
+ if (source.slice(existing.valueStart, existing.valueEnd) === entry) {
237
+ return { text: source, existed: true, unchanged: true };
238
+ }
239
+ return {
240
+ text: `${source.slice(0, existing.valueStart)}${entry}${source.slice(existing.valueEnd)}`,
241
+ existed: true,
242
+ unchanged: false,
243
+ };
244
+ }
245
+ const memberIndent = entries.length > 0
246
+ ? lineIndentOf(source, entries[0].keyStart)
247
+ : lineIndentOf(source, container.keyStart) + indentUnit;
248
+ const entry = serializeValue(entryValue, indentUnit, memberIndent);
249
+ const memberText = `${JSON.stringify(entryKey)}: ${entry}`;
250
+ return {
251
+ text: appendMember(source, container.valueStart, memberText, memberIndent),
252
+ existed: false,
253
+ unchanged: false,
254
+ };
255
+ }
256
+ /** Read `containerKey.entryKey` from a parsed document, if present. */
257
+ export function readContainerEntry(source, containerKey, entryKey) {
258
+ const parsed = parseJsonc(source);
259
+ if (parsed === undefined || parsed === null || typeof parsed !== 'object')
260
+ return undefined;
261
+ const container = parsed[containerKey];
262
+ if (container === null || typeof container !== 'object')
263
+ return undefined;
264
+ return container[entryKey];
265
+ }
266
+ //# sourceMappingURL=jsonc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsonc.js","sourceRoot":"","sources":["../../src/mcp-registration/jsonc.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { McpClientDefinition, McpEntryShape, McpScope, McpSecretReference, McpServerSpec } from './types.js';
2
+ /** Serialize the AgentTeams server entry in the shape the target client expects. */
3
+ export declare function buildEntryValue(shape: McpEntryShape, spec: McpServerSpec, reference?: McpSecretReference): Record<string, unknown>;
4
+ /**
5
+ * The copy-pasteable config fragment for one client/scope. This is the escape
6
+ * hatch every failure path points at, so it must be complete on its own: the
7
+ * full container wrapper, not just the inner entry.
8
+ */
9
+ export declare function renderConfigSnippet(client: McpClientDefinition, scope: McpScope, spec: McpServerSpec, serverName: string): string;
10
+ /** The equivalent vendor command, for users who prefer to run it themselves. */
11
+ export declare function renderVendorCommandLine(client: McpClientDefinition, scope: McpScope, spec: McpServerSpec, serverName: string): string | null;
12
+ /**
13
+ * Strip credential values from anything that reaches a terminal, a log or a
14
+ * test snapshot. Vendor CLIs echo their own arguments on failure, so their
15
+ * captured output has to pass through here before it is shown.
16
+ */
17
+ export declare function redactSecrets(text: string, secrets: string[]): string;
18
+ //# sourceMappingURL=render.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/mcp-registration/render.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,aAAa,EAAE,QAAQ,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAYlH,oFAAoF;AACpF,wBAAgB,eAAe,CAC7B,KAAK,EAAE,aAAa,EACpB,IAAI,EAAE,aAAa,EACnB,SAAS,GAAE,kBAAmC,GAC7C,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAiBzB;AA+BD;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,mBAAmB,EAC3B,KAAK,EAAE,QAAQ,EACf,IAAI,EAAE,aAAa,EACnB,UAAU,EAAE,MAAM,GACjB,MAAM,CAWR;AAED,gFAAgF;AAChF,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,mBAAmB,EAC3B,KAAK,EAAE,QAAQ,EACf,IAAI,EAAE,aAAa,EACnB,UAAU,EAAE,MAAM,GACjB,MAAM,GAAG,IAAI,CAMf;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,CAOrE"}
@@ -0,0 +1,91 @@
1
+ import { CREDENTIAL_ENV_KEYS } from './serverSpec.js';
2
+ function referencedSpec(spec, reference) {
3
+ if (reference !== 'opencodeEnv')
4
+ return spec;
5
+ const apiKey = spec.env[CREDENTIAL_ENV_KEYS.apiKey];
6
+ if (apiKey !== `\${${CREDENTIAL_ENV_KEYS.apiKey}}`)
7
+ return spec;
8
+ return {
9
+ ...spec,
10
+ env: { ...spec.env, [CREDENTIAL_ENV_KEYS.apiKey]: `{env:${CREDENTIAL_ENV_KEYS.apiKey}}` },
11
+ };
12
+ }
13
+ /** Serialize the AgentTeams server entry in the shape the target client expects. */
14
+ export function buildEntryValue(shape, spec, reference = 'dollarBraces') {
15
+ const clientSpec = referencedSpec(spec, reference);
16
+ if (shape === 'opencode') {
17
+ return {
18
+ type: 'local',
19
+ command: [clientSpec.command, ...clientSpec.args],
20
+ environment: { ...clientSpec.env },
21
+ enabled: true,
22
+ };
23
+ }
24
+ const entry = {};
25
+ if (shape === 'stdio')
26
+ entry.type = 'stdio';
27
+ entry.command = clientSpec.command;
28
+ entry.args = [...clientSpec.args];
29
+ entry.env = { ...clientSpec.env };
30
+ return entry;
31
+ }
32
+ function tomlString(value) {
33
+ return JSON.stringify(value);
34
+ }
35
+ function renderCodexToml(serverName, spec) {
36
+ const lines = [
37
+ `[mcp_servers.${serverName}]`,
38
+ `command = ${tomlString(spec.command)}`,
39
+ `args = [${spec.args.map(tomlString).join(', ')}]`,
40
+ ];
41
+ const apiKey = spec.env[CREDENTIAL_ENV_KEYS.apiKey];
42
+ if (apiKey === `\${${CREDENTIAL_ENV_KEYS.apiKey}}`) {
43
+ lines.push(`env_vars = [${tomlString(CREDENTIAL_ENV_KEYS.apiKey)}]`);
44
+ }
45
+ const envEntries = Object.entries(spec.env).filter(([key, value]) => key !== CREDENTIAL_ENV_KEYS.apiKey || value !== `\${${CREDENTIAL_ENV_KEYS.apiKey}}`);
46
+ if (envEntries.length > 0) {
47
+ lines.push('', `[mcp_servers.${serverName}.env]`);
48
+ for (const [key, value] of envEntries) {
49
+ lines.push(`${key} = ${tomlString(value)}`);
50
+ }
51
+ }
52
+ return lines.join('\n');
53
+ }
54
+ /**
55
+ * The copy-pasteable config fragment for one client/scope. This is the escape
56
+ * hatch every failure path points at, so it must be complete on its own: the
57
+ * full container wrapper, not just the inner entry.
58
+ */
59
+ export function renderConfigSnippet(client, scope, spec, serverName) {
60
+ const definition = client.scopes[scope];
61
+ if (definition.format === 'toml') {
62
+ return renderCodexToml(serverName, spec);
63
+ }
64
+ const containerKey = definition.containerKey;
65
+ const entry = buildEntryValue(definition.entryShape ?? 'plain', spec, client.secretReference);
66
+ const document = containerKey ? { [containerKey]: { [serverName]: entry } } : { [serverName]: entry };
67
+ return JSON.stringify(document, null, 2);
68
+ }
69
+ /** The equivalent vendor command, for users who prefer to run it themselves. */
70
+ export function renderVendorCommandLine(client, scope, spec, serverName) {
71
+ const vendor = client.scopes[scope].vendor;
72
+ if (!vendor)
73
+ return null;
74
+ const args = vendor.buildArgs(spec, serverName).map((arg) => (/[\s"'$]/.test(arg) ? `'${arg}'` : arg));
75
+ return [client.executables[0], ...args].join(' ');
76
+ }
77
+ /**
78
+ * Strip credential values from anything that reaches a terminal, a log or a
79
+ * test snapshot. Vendor CLIs echo their own arguments on failure, so their
80
+ * captured output has to pass through here before it is shown.
81
+ */
82
+ export function redactSecrets(text, secrets) {
83
+ let redacted = text;
84
+ for (const secret of secrets) {
85
+ if (!secret || secret.length < 4)
86
+ continue;
87
+ redacted = redacted.split(secret).join('***');
88
+ }
89
+ return redacted;
90
+ }
91
+ //# sourceMappingURL=render.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/mcp-registration/render.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import type { McpServerSpec } from './types.js';
2
+ /** Server name registered in every client. Kept stable so re-runs update rather than duplicate. */
3
+ export declare const MCP_SERVER_NAME = "agentteams";
4
+ export declare const CREDENTIAL_ENV_KEYS: {
5
+ readonly apiKey: "AGENTTEAMS_API_KEY";
6
+ readonly projectId: "AGENTTEAMS_PROJECT_ID";
7
+ readonly teamId: "AGENTTEAMS_TEAM_ID";
8
+ readonly apiUrl: "AGENTTEAMS_API_URL";
9
+ };
10
+ export interface McpCredentials {
11
+ apiKey: string;
12
+ projectId: string;
13
+ teamId: string;
14
+ apiUrl: string;
15
+ }
16
+ /**
17
+ * `literal` writes the real API key into the client's own config file — only
18
+ * ever used for user-scope `install`, where the file lives outside the repo and
19
+ * is chmod 0600. Everything a human can read (`config` output, dry-run plans,
20
+ * project-scope files that get committed) uses `reference`. The renderer then
21
+ * converts that marker to each client's supported inheritance syntax.
22
+ */
23
+ export type SecretMode = 'literal' | 'reference';
24
+ export interface BuildServerSpecOptions {
25
+ credentials: McpCredentials;
26
+ secretMode: SecretMode;
27
+ /** Absolute path to a local `cli/dist/index.js`; omit to use the published package. */
28
+ serverEntry?: string;
29
+ }
30
+ export declare function buildServerSpec(options: BuildServerSpecOptions): McpServerSpec;
31
+ //# sourceMappingURL=serverSpec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serverSpec.d.ts","sourceRoot":"","sources":["../../src/mcp-registration/serverSpec.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,mGAAmG;AACnG,eAAO,MAAM,eAAe,eAAe,CAAC;AAE5C,eAAO,MAAM,mBAAmB;;;;;CAKtB,CAAC;AAEX,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;GAMG;AACH,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,WAAW,CAAC;AAEjD,MAAM,WAAW,sBAAsB;IACrC,WAAW,EAAE,cAAc,CAAC;IAC5B,UAAU,EAAE,UAAU,CAAC;IACvB,uFAAuF;IACvF,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,aAAa,CAqB9E"}
@@ -0,0 +1,29 @@
1
+ import { isAbsolute, resolve } from 'node:path';
2
+ import { DEFAULT_API_URL } from '../utils/config.js';
3
+ /** Server name registered in every client. Kept stable so re-runs update rather than duplicate. */
4
+ export const MCP_SERVER_NAME = 'agentteams';
5
+ export const CREDENTIAL_ENV_KEYS = {
6
+ apiKey: 'AGENTTEAMS_API_KEY',
7
+ projectId: 'AGENTTEAMS_PROJECT_ID',
8
+ teamId: 'AGENTTEAMS_TEAM_ID',
9
+ apiUrl: 'AGENTTEAMS_API_URL',
10
+ };
11
+ export function buildServerSpec(options) {
12
+ const { credentials, secretMode, serverEntry } = options;
13
+ const env = {
14
+ [CREDENTIAL_ENV_KEYS.apiKey]: secretMode === 'literal' ? credentials.apiKey : `\${${CREDENTIAL_ENV_KEYS.apiKey}}`,
15
+ [CREDENTIAL_ENV_KEYS.projectId]: credentials.projectId,
16
+ [CREDENTIAL_ENV_KEYS.teamId]: credentials.teamId,
17
+ };
18
+ // Only non-default API URLs are worth pinning; emitting the default would make
19
+ // every generated config break the day the hosted URL changes.
20
+ if (credentials.apiUrl && credentials.apiUrl !== DEFAULT_API_URL) {
21
+ env[CREDENTIAL_ENV_KEYS.apiUrl] = credentials.apiUrl;
22
+ }
23
+ if (serverEntry) {
24
+ const entryPath = isAbsolute(serverEntry) ? serverEntry : resolve(serverEntry);
25
+ return { command: 'node', args: [entryPath, 'mcp'], env };
26
+ }
27
+ return { command: 'npx', args: ['-y', '@agentteams/cli', 'mcp'], env };
28
+ }
29
+ //# sourceMappingURL=serverSpec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serverSpec.js","sourceRoot":"","sources":["../../src/mcp-registration/serverSpec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAGrD,mGAAmG;AACnG,MAAM,CAAC,MAAM,eAAe,GAAG,YAAY,CAAC;AAE5C,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,MAAM,EAAE,oBAAoB;IAC5B,SAAS,EAAE,uBAAuB;IAClC,MAAM,EAAE,oBAAoB;IAC5B,MAAM,EAAE,oBAAoB;CACpB,CAAC;AAyBX,MAAM,UAAU,eAAe,CAAC,OAA+B;IAC7D,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;IAEzD,MAAM,GAAG,GAA2B;QAClC,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,mBAAmB,CAAC,MAAM,GAAG;QACjH,CAAC,mBAAmB,CAAC,SAAS,CAAC,EAAE,WAAW,CAAC,SAAS;QACtD,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC,MAAM;KACjD,CAAC;IAEF,+EAA+E;IAC/E,+DAA+D;IAC/D,IAAI,WAAW,CAAC,MAAM,IAAI,WAAW,CAAC,MAAM,KAAK,eAAe,EAAE,CAAC;QACjE,GAAG,CAAC,mBAAmB,CAAC,MAAM,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC;IACvD,CAAC;IAED,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,SAAS,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAC/E,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC;IAC5D,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,iBAAiB,EAAE,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC;AACzE,CAAC"}
@@ -0,0 +1,98 @@
1
+ /** Client ids accepted by `--client`. Orca is not a client and GEMINI is a deprecated runner type, so neither appears here. */
2
+ export declare const MCP_CLIENT_IDS: readonly ["claude-code", "codex", "copilot-cli", "opencode", "amp", "cursor-cli", "kimi-cli", "antigravity"];
3
+ export type McpClientId = (typeof MCP_CLIENT_IDS)[number];
4
+ export type McpScope = 'user' | 'project';
5
+ /** Syntax the client uses to inherit a secret from its parent process. */
6
+ export type McpSecretReference = 'dollarBraces' | 'opencodeEnv' | 'codexEnvVars';
7
+ /** How the AgentTeams entry reaches the client's configuration. */
8
+ export type McpInstallStrategy =
9
+ /** The client owns the format; we shell out to its documented non-interactive command. */
10
+ 'vendorCommand'
11
+ /** We own the merge: surgical JSONC upsert with backup and atomic rename. */
12
+ | 'jsonMerge'
13
+ /** No automated path we can prove safe — `install` prints the snippet instead of writing. */
14
+ | 'configOnly';
15
+ /** What the vendor command does when the server name is already registered. */
16
+ export type VendorRerunBehavior = 'update' | 'refuse';
17
+ /** Serialized shape of a single server entry in the client's config. */
18
+ export type McpEntryShape =
19
+ /** `{ type: "stdio", command, args, env }` */
20
+ 'stdio'
21
+ /** `{ command, args, env }` */
22
+ | 'plain'
23
+ /** `{ type: "local", command: [...], environment, enabled }` */
24
+ | 'opencode';
25
+ export interface McpPathContext {
26
+ homeDir: string;
27
+ cwd: string;
28
+ env: NodeJS.ProcessEnv;
29
+ }
30
+ export interface McpServerSpec {
31
+ command: string;
32
+ args: string[];
33
+ env: Record<string, string>;
34
+ }
35
+ export interface VendorCommandPlan {
36
+ executable: string;
37
+ args: string[];
38
+ }
39
+ export interface McpScopeDefinition {
40
+ /** Absolute path of the config file this scope writes to. */
41
+ configPath: (context: McpPathContext) => string;
42
+ format: 'json' | 'jsonc' | 'toml';
43
+ /** Top-level key holding the server map. Absent for TOML. */
44
+ containerKey?: string;
45
+ entryShape?: McpEntryShape;
46
+ strategy: McpInstallStrategy;
47
+ /** Present when `strategy === 'vendorCommand'`. */
48
+ vendor?: {
49
+ buildArgs: (spec: McpServerSpec, serverName: string) => string[];
50
+ rerunBehavior: VendorRerunBehavior;
51
+ /** Patterns that mean "already registered", not "failed". */
52
+ alreadyRegisteredPatterns?: RegExp[];
53
+ };
54
+ /** Present when `strategy === 'configOnly'`; explains why nothing is written. */
55
+ configOnlyReason?: string;
56
+ }
57
+ export interface McpClientDefinition {
58
+ id: McpClientId;
59
+ /** RunnerType key in packages/core-constants. Enforced by a monorepo drift test. */
60
+ runnerType: string;
61
+ label: string;
62
+ /** Executable names looked up on PATH. */
63
+ executables: string[];
64
+ secretReference: McpSecretReference;
65
+ /** Extra directories to probe when the client installs outside PATH (e.g. Kimi). */
66
+ extraBinDirs?: (context: McpPathContext) => string[];
67
+ /** Files/directories whose presence proves the client has been configured on this machine. */
68
+ configSignals: (context: McpPathContext) => string[];
69
+ /** Official documentation for the config contract encoded above. */
70
+ docsUrl: string;
71
+ /** Date the contract above was verified against the vendor's docs and a local install. */
72
+ verifiedAt: string;
73
+ scopes: Record<McpScope, McpScopeDefinition>;
74
+ }
75
+ export type InstallOutcome = 'INSTALLED' | 'ALREADY_REGISTERED' | 'SKIPPED_CONFIG_ONLY' | 'SKIPPED_NOT_DETECTED' | 'FAILED';
76
+ export interface InstallResult {
77
+ clientId: McpClientId;
78
+ scope: McpScope;
79
+ outcome: InstallOutcome;
80
+ strategy: McpInstallStrategy;
81
+ /** The config file the outcome refers to. */
82
+ configPath: string;
83
+ /** Redacted, user-facing explanation. Never contains credentials. */
84
+ detail: string;
85
+ backupPath?: string;
86
+ /** Manual fallback, always present for non-INSTALLED outcomes. */
87
+ manualSnippet?: string;
88
+ }
89
+ export interface DetectionSignal {
90
+ clientId: McpClientId;
91
+ label: string;
92
+ /** Why the client is considered present: config traces, an executable, or both. */
93
+ evidence: 'configured' | 'executable' | 'both' | 'none';
94
+ executablePath: string | null;
95
+ configPaths: string[];
96
+ detected: boolean;
97
+ }
98
+ //# sourceMappingURL=types.d.ts.map