@pwrdrvr/agent-acp 0.16.1 → 0.17.0

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.
@@ -0,0 +1,51 @@
1
+ // src/mcp-server-config.ts
2
+ function isKeyValueArray(collection) {
3
+ return Array.isArray(collection);
4
+ }
5
+ function normalizeKeyValues(collection) {
6
+ if (collection === void 0) return [];
7
+ if (isKeyValueArray(collection)) {
8
+ return collection.map(({ name, value }) => ({ name, value }));
9
+ }
10
+ return Object.entries(collection).map(([name, value]) => ({ name, value }));
11
+ }
12
+ function normalizeAcpMcpServerConfig(server) {
13
+ if ("type" in server) {
14
+ return {
15
+ name: server.name,
16
+ type: server.type,
17
+ url: server.url,
18
+ headers: normalizeKeyValues(server.headers)
19
+ };
20
+ }
21
+ return {
22
+ name: server.name,
23
+ command: server.command,
24
+ args: [...server.args ?? []],
25
+ env: normalizeKeyValues(server.env)
26
+ };
27
+ }
28
+ function normalizeAcpMcpServerConfigs(servers) {
29
+ return servers.map(normalizeAcpMcpServerConfig);
30
+ }
31
+ function redactAcpMcpCredentials(message, servers) {
32
+ const secrets = /* @__PURE__ */ new Set();
33
+ for (const server of servers) {
34
+ const values = "type" in server ? [server.url, ...normalizeKeyValues(server.headers).map(({ value }) => value)] : normalizeKeyValues(server.env).map(({ value }) => value);
35
+ for (const value of values) {
36
+ if (value.length > 0) secrets.add(value);
37
+ }
38
+ }
39
+ let redacted = message;
40
+ for (const secret of [...secrets].sort((a, b) => b.length - a.length)) {
41
+ redacted = redacted.split(secret).join("[REDACTED]");
42
+ }
43
+ return redacted;
44
+ }
45
+
46
+ export {
47
+ normalizeAcpMcpServerConfig,
48
+ normalizeAcpMcpServerConfigs,
49
+ redactAcpMcpCredentials
50
+ };
51
+ //# sourceMappingURL=chunk-64RRSPSB.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/mcp-server-config.ts"],"sourcesContent":["import type { McpServer } from \"@agentclientprotocol/sdk\";\n\n/** ACP key/value entry used by stdio environments and HTTP headers. */\nexport type AcpMcpKeyValue = {\n name: string;\n value: string;\n};\n\n/** Host-friendly collection accepted wherever ACP requires key/value entries. */\nexport type AcpMcpKeyValueCollection =\n | Readonly<Record<string, string>>\n | readonly AcpMcpKeyValue[];\n\n/** Backward-compatible stdio MCP configuration. ACP stdio has no `type` field. */\nexport type AcpStdioMcpServerConfig = {\n name: string;\n command: string;\n args?: readonly string[];\n env?: AcpMcpKeyValueCollection;\n};\n\n/** Streamable HTTP MCP configuration from the ACP v1 schema. */\nexport type AcpHttpMcpServerConfig = {\n name: string;\n type: \"http\";\n url: string;\n headers: AcpMcpKeyValueCollection;\n};\n\n/** Legacy HTTP+SSE MCP configuration from the ACP v1 schema. */\nexport type AcpSseMcpServerConfig = {\n name: string;\n type: \"sse\";\n url: string;\n headers: AcpMcpKeyValueCollection;\n};\n\n/** Public MCP input accepted by agent-acp session lifecycle methods. */\nexport type AcpMcpServerConfig =\n | AcpStdioMcpServerConfig\n | AcpHttpMcpServerConfig\n | AcpSseMcpServerConfig;\n\n/** Exact MCP server wire union from the pinned ACP protocol library. */\nexport type AcpMcpServerWireConfig = McpServer;\n\nfunction isKeyValueArray(\n collection: AcpMcpKeyValueCollection\n): collection is readonly AcpMcpKeyValue[] {\n return Array.isArray(collection);\n}\n\nfunction normalizeKeyValues(\n collection: AcpMcpKeyValueCollection | undefined\n): AcpMcpKeyValue[] {\n if (collection === undefined) return [];\n if (isKeyValueArray(collection)) {\n return collection.map(({ name, value }) => ({ name, value }));\n }\n return Object.entries(collection).map(([name, value]) => ({ name, value }));\n}\n\n/** Serialize a host-friendly config into the exact ACP v1 wire representation. */\nexport function normalizeAcpMcpServerConfig(\n server: AcpMcpServerConfig\n): AcpMcpServerWireConfig {\n if (\"type\" in server) {\n return {\n name: server.name,\n type: server.type,\n url: server.url,\n headers: normalizeKeyValues(server.headers)\n };\n }\n return {\n name: server.name,\n command: server.command,\n args: [...(server.args ?? [])],\n env: normalizeKeyValues(server.env)\n };\n}\n\n/** Serialize a per-session list without retaining mutable caller collections. */\nexport function normalizeAcpMcpServerConfigs(\n servers: readonly AcpMcpServerConfig[]\n): AcpMcpServerWireConfig[] {\n return servers.map(normalizeAcpMcpServerConfig);\n}\n\n/**\n * Remove credential-bearing MCP values from a lifecycle error. The server URL\n * is redacted in full because it may carry user-info or query credentials.\n */\nexport function redactAcpMcpCredentials(\n message: string,\n servers: readonly AcpMcpServerConfig[]\n): string {\n const secrets = new Set<string>();\n for (const server of servers) {\n const values =\n \"type\" in server\n ? [server.url, ...normalizeKeyValues(server.headers).map(({ value }) => value)]\n : normalizeKeyValues(server.env).map(({ value }) => value);\n for (const value of values) {\n if (value.length > 0) secrets.add(value);\n }\n }\n let redacted = message;\n for (const secret of [...secrets].sort((a, b) => b.length - a.length)) {\n redacted = redacted.split(secret).join(\"[REDACTED]\");\n }\n return redacted;\n}\n"],"mappings":";AA8CA,SAAS,gBACP,YACyC;AACzC,SAAO,MAAM,QAAQ,UAAU;AACjC;AAEA,SAAS,mBACP,YACkB;AAClB,MAAI,eAAe,OAAW,QAAO,CAAC;AACtC,MAAI,gBAAgB,UAAU,GAAG;AAC/B,WAAO,WAAW,IAAI,CAAC,EAAE,MAAM,MAAM,OAAO,EAAE,MAAM,MAAM,EAAE;AAAA,EAC9D;AACA,SAAO,OAAO,QAAQ,UAAU,EAAE,IAAI,CAAC,CAAC,MAAM,KAAK,OAAO,EAAE,MAAM,MAAM,EAAE;AAC5E;AAGO,SAAS,4BACd,QACwB;AACxB,MAAI,UAAU,QAAQ;AACpB,WAAO;AAAA,MACL,MAAM,OAAO;AAAA,MACb,MAAM,OAAO;AAAA,MACb,KAAK,OAAO;AAAA,MACZ,SAAS,mBAAmB,OAAO,OAAO;AAAA,IAC5C;AAAA,EACF;AACA,SAAO;AAAA,IACL,MAAM,OAAO;AAAA,IACb,SAAS,OAAO;AAAA,IAChB,MAAM,CAAC,GAAI,OAAO,QAAQ,CAAC,CAAE;AAAA,IAC7B,KAAK,mBAAmB,OAAO,GAAG;AAAA,EACpC;AACF;AAGO,SAAS,6BACd,SAC0B;AAC1B,SAAO,QAAQ,IAAI,2BAA2B;AAChD;AAMO,SAAS,wBACd,SACA,SACQ;AACR,QAAM,UAAU,oBAAI,IAAY;AAChC,aAAW,UAAU,SAAS;AAC5B,UAAM,SACJ,UAAU,SACN,CAAC,OAAO,KAAK,GAAG,mBAAmB,OAAO,OAAO,EAAE,IAAI,CAAC,EAAE,MAAM,MAAM,KAAK,CAAC,IAC5E,mBAAmB,OAAO,GAAG,EAAE,IAAI,CAAC,EAAE,MAAM,MAAM,KAAK;AAC7D,eAAW,SAAS,QAAQ;AAC1B,UAAI,MAAM,SAAS,EAAG,SAAQ,IAAI,KAAK;AAAA,IACzC;AAAA,EACF;AACA,MAAI,WAAW;AACf,aAAW,UAAU,CAAC,GAAG,OAAO,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG;AACrE,eAAW,SAAS,MAAM,MAAM,EAAE,KAAK,YAAY;AAAA,EACrD;AACA,SAAO;AACT;","names":[]}