@sbissoli/mcp-surface 0.1.0 → 0.2.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.
package/CHANGELOG.md CHANGED
@@ -8,6 +8,43 @@ seguinte — cada servidor faz bump explícito).
8
8
  e, pela regra da trava, obrigaria cada servidor a subir de versão sem ter mudado nada.
9
9
  Mudança de normalização é major (ou minor em 0.x), com nota de migração.
10
10
 
11
+ ## [0.2.0] — 2026-10-04
12
+
13
+ A normalização NÃO muda: todo `surface.lock.json` continua conferindo. Minor porque a
14
+ superfície publicada do pacote cresce (subpath novo).
15
+
16
+ ### Adicionado
17
+
18
+ - **`@sbissoli/mcp-surface/cliente`**: o teste com forma de cliente, que nasceu no
19
+ ilo-mcp-server 1.3.0 (ideia de leitor, https://dev.to/arhancanli/comment/3g4i4).
20
+ `conectarComoCliente` (transporte em memória com JSON no fio), `chamarComoCliente`
21
+ (`tools/list` antes do `tools/call`, lança se o `Client` reprovar ou vier `isError`),
22
+ `controlesNegativos` (quebras derivadas do `outputSchema` listado, mais a armadilha do
23
+ `tools/list` ausente) e `quebrasDoSchema`. `@modelcontextprotocol/client` entra como peer
24
+ OPCIONAL; a raiz do pacote continua sem o `Client`, que o Worker não pode carregar.
25
+
26
+ ## [0.1.1] — 2026-10-02
27
+
28
+ Achados da adoção nos irmãos, no mesmo dia. A normalização NÃO muda: todo
29
+ `surface.lock.json` travado com a 0.1.0 continua conferindo.
30
+
31
+ ### Adicionado
32
+
33
+ - `verificar --perfil <chave>` (`OpcoesVerificar.perfil`): servidor com uma superfície por
34
+ rota (senado-br-mcp: `full` em `/mcp`, `openai-app` em `/mcp/openai-app-v2`) trava a
35
+ `declarada` como mapa `{ perfil: superfície }`, e o endpoint é conferido contra a chave
36
+ que ele serve.
37
+ - `linhaDeCompatibilidade(versao)`.
38
+
39
+ ### Corrigido
40
+
41
+ - **O replay acusava como quebra fora de major uma mudança incompatível em minor de 0.x**,
42
+ que o semver permite (ilo-mcp-server 0.5.0 → 0.6.0, `filters` passou a obrigatório).
43
+ Em 0.x a linha de compatibilidade é o minor.
44
+ - O replay chamava `npm` com argumentos em array e `shell: true` no Windows — o DEP0190 do
45
+ Node 24 (argumentos concatenados sem escape). Agora a linha vai montada e citada.
46
+ - `bin` sem o `./`, que o npm corrigia sozinho a cada publicação com aviso.
47
+
11
48
  ## [0.1.0] — 2026-10-02
12
49
 
13
50
  Primeira versão, extraída do molde no bcb-br-mcp (PR #49, 1.15.1). A normalização é a do
package/README.md CHANGED
@@ -70,6 +70,35 @@ travar superfície nova sob a versão antiga.
70
70
  Fluxo de quem muda a superfície: `npm version <nível> --no-git-tag-version` →
71
71
  `npm run surface:lock` → commitar o lock junto.
72
72
 
73
+ ## Teste com forma de cliente (`@sbissoli/mcp-surface/cliente`)
74
+
75
+ O servidor interrogado pelo `Client` do SDK, que reprova o resultado de `tools/call`
76
+ contra o `outputSchema` **listado**. Assim o teste falha como a sessão do usuário falharia,
77
+ sem um validador escolhido por nós. É subpath à parte porque o `Client` compila schemas
78
+ com Ajv (`new Function`), que o Worker proíbe: só se importa em teste Node, e o
79
+ `@modelcontextprotocol/client` é peer opcional.
80
+
81
+ ```ts
82
+ import { chamarComoCliente, conectarComoCliente, controlesNegativos } from "@sbissoli/mcp-surface/cliente";
83
+
84
+ const client = await conectarComoCliente(buildServer(env));
85
+ const r = await chamarComoCliente(client, "minha_tool", { x: 1 }); // lança se o Client reprovar ou se vier isError
86
+
87
+ const vs = await controlesNegativos(() => buildServer(env), "minha_tool", { x: 1 });
88
+ for (const v of vs) expect(v.obtido, `${v.descricao}: ${v.mensagem ?? ""}`).toBe(v.esperado);
89
+ ```
90
+
91
+ - `conectarComoCliente` passa toda mensagem do servidor por JSON antes de entregá-la: o
92
+ transporte em memória não serializa, e chave `undefined` só some no fio.
93
+ - `chamarComoCliente` faz `tools/list` antes do primeiro `tools/call` da conexão. Sem
94
+ isso, o `Client` (2.0 a 2.2) devolve o resultado sem validar.
95
+ - `controlesNegativos` adultera o resultado entre servidor e cliente, com quebras
96
+ **derivadas do schema listado**: `structuredContent` ausente, cada obrigatório ausente e
97
+ o primeiro obrigatório de tipo errado. Cada quebra tem de fazer a chamada falhar. O
98
+ último veredito é a armadilha (sem `tools/list`, a quebra passa calada); se o SDK mudar,
99
+ ele acusa. Quebras do próprio servidor, como campo a mais onde o schema fecha o objeto,
100
+ entram pelo 4º argumento.
101
+
73
102
  ## Observações
74
103
 
75
104
  - Uma atualização do SDK que mexa nas `capabilities` também acende a trava — de propósito:
package/dist/cli.d.ts CHANGED
@@ -9,9 +9,11 @@
9
9
  * "surface:lock": "npm run build && mcp-surface travar --cmd \"vitest run tests/surface-lock.test.ts\""
10
10
  *
11
11
  * mcp-surface verificar <endpoint> [--trava surface.lock.json] [--config apiKeyAusente]
12
- * [--rota "POST /mcp"] [--tool <nome>] [--args '<json>']
12
+ * [--rota "POST /mcp"] [--perfil <chave>] [--tool <nome>] [--args '<json>']
13
13
  * Confere o endpoint no ar contra a trava (superfície declarada + quem
14
- * responde sem token). Fim do deploy. Sai com 1 se divergir.
14
+ * responde sem token). Fim do deploy. Sai com 1 se divergir. `--perfil`:
15
+ * servidor com uma superfície por rota trava a `declarada` como mapa, e
16
+ * esta é a chave que o endpoint serve.
15
17
  *
16
18
  * mcp-surface replay [--pacote <nome npm>] [--registro <nome no MCP Registry>]
17
19
  * [--url <endpoint>] [--saida baselines]
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;;;GAmBG"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;;;;;GAqBG"}
package/dist/cli.js CHANGED
@@ -9,9 +9,11 @@
9
9
  * "surface:lock": "npm run build && mcp-surface travar --cmd \"vitest run tests/surface-lock.test.ts\""
10
10
  *
11
11
  * mcp-surface verificar <endpoint> [--trava surface.lock.json] [--config apiKeyAusente]
12
- * [--rota "POST /mcp"] [--tool <nome>] [--args '<json>']
12
+ * [--rota "POST /mcp"] [--perfil <chave>] [--tool <nome>] [--args '<json>']
13
13
  * Confere o endpoint no ar contra a trava (superfície declarada + quem
14
- * responde sem token). Fim do deploy. Sai com 1 se divergir.
14
+ * responde sem token). Fim do deploy. Sai com 1 se divergir. `--perfil`:
15
+ * servidor com uma superfície por rota trava a `declarada` como mapa, e
16
+ * esta é a chave que o endpoint serve.
15
17
  *
16
18
  * mcp-surface replay [--pacote <nome npm>] [--registro <nome no MCP Registry>]
17
19
  * [--url <endpoint>] [--saida baselines]
@@ -63,6 +65,7 @@ async function main() {
63
65
  caminhoDaTrava: opcao("trava") ?? "surface.lock.json",
64
66
  ...(opcao("config") ? { config: opcao("config") } : {}),
65
67
  ...(opcao("rota") ? { rota: opcao("rota") } : {}),
68
+ ...(opcao("perfil") ? { perfil: opcao("perfil") } : {}),
66
69
  ...(tool ? { chamada: { name: tool, arguments: JSON.parse(opcao("args") ?? "{}") } } : {}),
67
70
  log: linha => console.log(linha),
68
71
  });
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,173 @@
1
+ /**
2
+ * Teste com forma de cliente: o servidor interrogado pelo `Client` do SDK, que
3
+ * reprova o resultado de `tools/call` contra o `outputSchema` LISTADO — o teste
4
+ * falha como a sessão do usuário falharia, sem validador escolhido por nós.
5
+ *
6
+ * Ideia de leitor (https://dev.to/arhancanli/comment/3g4i4); o circuito nasceu
7
+ * no ilo-mcp-server 1.3.0 e mora aqui para os sete servidores o usarem igual.
8
+ *
9
+ * Subpath próprio (`@sbissoli/mcp-surface/cliente`), fora da raiz do pacote: o
10
+ * `Client` compila os schemas com Ajv (`new Function`), que o runtime da
11
+ * Cloudflare proíbe. Importar daqui é coisa de teste em Node, nunca de Worker.
12
+ *
13
+ * Duas armadilhas que este módulo fecha, medidas no ilo:
14
+ * - o `Client` só valida contra o schema que tem em cache do `tools/list` —
15
+ * sem `listTools` antes, `callTool` devolve o que recebeu sem validar;
16
+ * - o `InMemoryTransport` não serializa: chave `undefined` sobrevive em memória
17
+ * e some no fio (`JSON.stringify`). Aqui toda mensagem do servidor passa por
18
+ * JSON antes de chegar ao cliente, como passaria pela rede.
19
+ */
20
+ import { Client } from "@modelcontextprotocol/client";
21
+ import type { ServidorConectavel } from "./memoria.js";
22
+ /** Resultado de `tools/call` como viaja no fio (o que uma quebra recebe). */
23
+ export type ResultadoNoFio = {
24
+ content?: unknown;
25
+ structuredContent?: Record<string, unknown>;
26
+ } & Record<string, unknown>;
27
+ export interface OpcoesConexao {
28
+ /** Mexe no resultado de `tools/call` entre servidor e cliente (controle negativo). */
29
+ adulterar?: (r: ResultadoNoFio) => void;
30
+ }
31
+ export declare function conectarComoCliente(server: ServidorConectavel, opcoes?: OpcoesConexao): Promise<Client>;
32
+ /**
33
+ * Chamada que TEM de dar certo, no percurso do cliente. Lança quando o `Client`
34
+ * reprova o resultado e também quando a tool responde `isError` — o servidor do
35
+ * SDK v2 valida a própria saída e, se ela não obedece, devolve o erro em
36
+ * `isError` ("Output validation error"), não em exceção. Para afirmar uma
37
+ * recusa de propósito (parâmetro inválido), use `client.callTool` direto.
38
+ */
39
+ export declare function chamarComoCliente(client: Client, nome: string, args?: Record<string, unknown>): Promise<{
40
+ [x: string]: unknown;
41
+ _meta?: {
42
+ [x: string]: unknown;
43
+ "io.modelcontextprotocol/serverInfo"?: {
44
+ version: string;
45
+ websiteUrl?: string | undefined;
46
+ description?: string | undefined;
47
+ icons?: {
48
+ src: string;
49
+ mimeType?: string | undefined;
50
+ sizes?: string[] | undefined;
51
+ theme?: "dark" | "light" | undefined;
52
+ }[] | undefined;
53
+ name: string;
54
+ title?: string | undefined;
55
+ } | undefined;
56
+ } | undefined;
57
+ content: ({
58
+ type: "text";
59
+ text: string;
60
+ annotations?: {
61
+ audience?: ("assistant" | "user")[] | undefined;
62
+ priority?: number | undefined;
63
+ lastModified?: string | undefined;
64
+ } | undefined;
65
+ _meta?: {
66
+ [x: string]: unknown;
67
+ } | undefined;
68
+ } | {
69
+ type: "image";
70
+ data: string;
71
+ mimeType: string;
72
+ annotations?: {
73
+ audience?: ("assistant" | "user")[] | undefined;
74
+ priority?: number | undefined;
75
+ lastModified?: string | undefined;
76
+ } | undefined;
77
+ _meta?: {
78
+ [x: string]: unknown;
79
+ } | undefined;
80
+ } | {
81
+ type: "audio";
82
+ data: string;
83
+ mimeType: string;
84
+ annotations?: {
85
+ audience?: ("assistant" | "user")[] | undefined;
86
+ priority?: number | undefined;
87
+ lastModified?: string | undefined;
88
+ } | undefined;
89
+ _meta?: {
90
+ [x: string]: unknown;
91
+ } | undefined;
92
+ } | {
93
+ uri: string;
94
+ description?: string | undefined;
95
+ mimeType?: string | undefined;
96
+ size?: number | undefined;
97
+ annotations?: {
98
+ audience?: ("assistant" | "user")[] | undefined;
99
+ priority?: number | undefined;
100
+ lastModified?: string | undefined;
101
+ } | undefined;
102
+ _meta?: {
103
+ [x: string]: unknown;
104
+ } | undefined;
105
+ icons?: {
106
+ src: string;
107
+ mimeType?: string | undefined;
108
+ sizes?: string[] | undefined;
109
+ theme?: "dark" | "light" | undefined;
110
+ }[] | undefined;
111
+ name: string;
112
+ title?: string | undefined;
113
+ type: "resource_link";
114
+ } | {
115
+ type: "resource";
116
+ resource: {
117
+ uri: string;
118
+ mimeType?: string | undefined;
119
+ _meta?: {
120
+ [x: string]: unknown;
121
+ } | undefined;
122
+ text: string;
123
+ } | {
124
+ uri: string;
125
+ mimeType?: string | undefined;
126
+ _meta?: {
127
+ [x: string]: unknown;
128
+ } | undefined;
129
+ blob: string;
130
+ };
131
+ annotations?: {
132
+ audience?: ("assistant" | "user")[] | undefined;
133
+ priority?: number | undefined;
134
+ lastModified?: string | undefined;
135
+ } | undefined;
136
+ _meta?: {
137
+ [x: string]: unknown;
138
+ } | undefined;
139
+ })[];
140
+ structuredContent?: unknown;
141
+ isError?: boolean | undefined;
142
+ }>;
143
+ export interface Quebra {
144
+ descricao: string;
145
+ adulterar: (r: ResultadoNoFio) => void;
146
+ }
147
+ /**
148
+ * As quebras genéricas, DERIVADAS do schema listado (não de nomes escritos à
149
+ * mão): `structuredContent` ausente, cada campo obrigatório ausente, o primeiro
150
+ * obrigatório com tipo declarado trocado de tipo.
151
+ */
152
+ export declare function quebrasDoSchema(outputSchema: Record<string, unknown>): Quebra[];
153
+ export interface Veredito {
154
+ descricao: string;
155
+ /** O que o circuito exige: o cliente reprovar a quebra (ou, na armadilha, deixá-la passar). */
156
+ esperado: "reprova" | "passa";
157
+ /** `isError`: a chamada-base falhou como tool — o caso está mal montado. */
158
+ obtido: "reprova" | "passa" | "isError";
159
+ mensagem?: string;
160
+ }
161
+ /**
162
+ * Controle negativo pelo lado do resultado: o servidor responde certo, o que
163
+ * chega ao cliente está quebrado, e a chamada TEM de falhar. Um servidor novo
164
+ * por quebra (`fabrica`), porque cada conexão leva a sua adulteração.
165
+ *
166
+ * Inclui a armadilha como veredito esperado "passa": sem `tools/list` antes, a
167
+ * primeira quebra passa calada. Se um dia o SDK passar a validar sem a lista,
168
+ * esse veredito acusa — e a regra do `listTools` pode ser revista.
169
+ *
170
+ * O teste afirma `obtido === esperado` em cada veredito; a `descricao` diz qual.
171
+ */
172
+ export declare function controlesNegativos(fabrica: () => ServidorConectavel | Promise<ServidorConectavel>, nome: string, args?: Record<string, unknown>, extras?: Quebra[]): Promise<Veredito[]>;
173
+ //# sourceMappingURL=cliente.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cliente.d.ts","sourceRoot":"","sources":["../src/cliente.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAC;AAGtD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAEvD,6EAA6E;AAC7E,MAAM,MAAM,cAAc,GAAG;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE1H,MAAM,WAAW,aAAa;IAC5B,sFAAsF;IACtF,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,cAAc,KAAK,IAAI,CAAC;CACzC;AAID,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,kBAAkB,EAAE,MAAM,GAAE,aAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CAYjH;AAWD;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAOvG;AAED,MAAM,WAAW,MAAM;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,CAAC,CAAC,EAAE,cAAc,KAAK,IAAI,CAAC;CACxC;AASD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,EAAE,CAoB/E;AAED,MAAM,WAAW,QAAQ;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,+FAA+F;IAC/F,QAAQ,EAAE,SAAS,GAAG,OAAO,CAAC;IAC9B,4EAA4E;IAC5E,MAAM,EAAE,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,MAAM,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC,EAC/D,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EAClC,MAAM,GAAE,MAAM,EAAO,GACpB,OAAO,CAAC,QAAQ,EAAE,CAAC,CAoCrB"}
@@ -0,0 +1,147 @@
1
+ /**
2
+ * Teste com forma de cliente: o servidor interrogado pelo `Client` do SDK, que
3
+ * reprova o resultado de `tools/call` contra o `outputSchema` LISTADO — o teste
4
+ * falha como a sessão do usuário falharia, sem validador escolhido por nós.
5
+ *
6
+ * Ideia de leitor (https://dev.to/arhancanli/comment/3g4i4); o circuito nasceu
7
+ * no ilo-mcp-server 1.3.0 e mora aqui para os sete servidores o usarem igual.
8
+ *
9
+ * Subpath próprio (`@sbissoli/mcp-surface/cliente`), fora da raiz do pacote: o
10
+ * `Client` compila os schemas com Ajv (`new Function`), que o runtime da
11
+ * Cloudflare proíbe. Importar daqui é coisa de teste em Node, nunca de Worker.
12
+ *
13
+ * Duas armadilhas que este módulo fecha, medidas no ilo:
14
+ * - o `Client` só valida contra o schema que tem em cache do `tools/list` —
15
+ * sem `listTools` antes, `callTool` devolve o que recebeu sem validar;
16
+ * - o `InMemoryTransport` não serializa: chave `undefined` sobrevive em memória
17
+ * e some no fio (`JSON.stringify`). Aqui toda mensagem do servidor passa por
18
+ * JSON antes de chegar ao cliente, como passaria pela rede.
19
+ */
20
+ import { Client } from "@modelcontextprotocol/client";
21
+ import { InMemoryTransport } from "@modelcontextprotocol/server";
22
+ const listados = new WeakSet();
23
+ export async function conectarComoCliente(server, opcoes = {}) {
24
+ const [lado, ladoServidor] = InMemoryTransport.createLinkedPair();
25
+ const enviar = ladoServidor.send.bind(ladoServidor);
26
+ ladoServidor.send = async (mensagem, extra) => {
27
+ const noFio = JSON.parse(JSON.stringify(mensagem));
28
+ const r = noFio.result;
29
+ if (opcoes.adulterar && r && "content" in r)
30
+ opcoes.adulterar(r);
31
+ return enviar(noFio, extra);
32
+ };
33
+ const client = new Client({ name: "mcp-surface/cliente", version: "0.0.0" });
34
+ await Promise.all([server.connect(ladoServidor), client.connect(lado)]);
35
+ return client;
36
+ }
37
+ /** O percurso do cliente: `tools/list` (uma vez por conexão) → `tools/call`. */
38
+ async function percorrer(client, nome, args) {
39
+ if (!listados.has(client)) {
40
+ await client.listTools();
41
+ listados.add(client);
42
+ }
43
+ return client.callTool({ name: nome, arguments: args });
44
+ }
45
+ /**
46
+ * Chamada que TEM de dar certo, no percurso do cliente. Lança quando o `Client`
47
+ * reprova o resultado e também quando a tool responde `isError` — o servidor do
48
+ * SDK v2 valida a própria saída e, se ela não obedece, devolve o erro em
49
+ * `isError` ("Output validation error"), não em exceção. Para afirmar uma
50
+ * recusa de propósito (parâmetro inválido), use `client.callTool` direto.
51
+ */
52
+ export async function chamarComoCliente(client, nome, args = {}) {
53
+ const r = await percorrer(client, nome, args);
54
+ if (r.isError) {
55
+ const texto = Array.isArray(r.content) ? r.content.map(c => ("text" in c ? c.text : "")).join(" ") : "";
56
+ throw new Error(`${nome} respondeu isError: ${texto}`);
57
+ }
58
+ return r;
59
+ }
60
+ /** Um valor do tipo errado para o tipo JSON Schema declarado. */
61
+ function tipoErrado(tipo) {
62
+ if (tipo === "string")
63
+ return 0;
64
+ if (typeof tipo === "string")
65
+ return "valor-de-tipo-errado";
66
+ return undefined;
67
+ }
68
+ /**
69
+ * As quebras genéricas, DERIVADAS do schema listado (não de nomes escritos à
70
+ * mão): `structuredContent` ausente, cada campo obrigatório ausente, o primeiro
71
+ * obrigatório com tipo declarado trocado de tipo.
72
+ */
73
+ export function quebrasDoSchema(outputSchema) {
74
+ const obrigatorios = Array.isArray(outputSchema.required) ? outputSchema.required : [];
75
+ const props = (outputSchema.properties ?? {});
76
+ const quebras = [
77
+ { descricao: "structuredContent ausente", adulterar: r => void delete r.structuredContent },
78
+ ...obrigatorios.map(campo => ({
79
+ descricao: `campo obrigatório ausente (${campo})`,
80
+ adulterar: (r) => void delete r.structuredContent?.[campo],
81
+ })),
82
+ ];
83
+ const tipado = obrigatorios.find(c => tipoErrado(props[c]?.type) !== undefined);
84
+ if (tipado) {
85
+ quebras.push({
86
+ descricao: `campo de tipo errado (${tipado})`,
87
+ adulterar: r => {
88
+ if (r.structuredContent)
89
+ r.structuredContent[tipado] = tipoErrado(props[tipado]?.type);
90
+ },
91
+ });
92
+ }
93
+ return quebras;
94
+ }
95
+ /**
96
+ * Controle negativo pelo lado do resultado: o servidor responde certo, o que
97
+ * chega ao cliente está quebrado, e a chamada TEM de falhar. Um servidor novo
98
+ * por quebra (`fabrica`), porque cada conexão leva a sua adulteração.
99
+ *
100
+ * Inclui a armadilha como veredito esperado "passa": sem `tools/list` antes, a
101
+ * primeira quebra passa calada. Se um dia o SDK passar a validar sem a lista,
102
+ * esse veredito acusa — e a regra do `listTools` pode ser revista.
103
+ *
104
+ * O teste afirma `obtido === esperado` em cada veredito; a `descricao` diz qual.
105
+ */
106
+ export async function controlesNegativos(fabrica, nome, args = {}, extras = []) {
107
+ const sonda = await conectarComoCliente(await fabrica());
108
+ let schema;
109
+ try {
110
+ const { tools } = await sonda.listTools();
111
+ schema = tools.find(t => t.name === nome)?.outputSchema;
112
+ }
113
+ finally {
114
+ await sonda.close();
115
+ }
116
+ if (!schema)
117
+ throw new Error(`${nome}: sem outputSchema no tools/list — não há contrato a provar`);
118
+ const quebras = [...quebrasDoSchema(schema), ...extras];
119
+ const rodar = async (q, listar) => {
120
+ const client = await conectarComoCliente(await fabrica(), { adulterar: q.adulterar });
121
+ try {
122
+ const r = listar ? await percorrer(client, nome, args) : await client.callTool({ name: nome, arguments: args });
123
+ // Erro de tool NÃO é reprovação do validador: a chamada-base tem de dar
124
+ // certo, ou o controle não prova nada — veredito que nunca confere.
125
+ if (r.isError)
126
+ return { obtido: "isError", mensagem: JSON.stringify(r.content) };
127
+ return { obtido: "passa" };
128
+ }
129
+ catch (e) {
130
+ return { obtido: "reprova", mensagem: e instanceof Error ? e.message : String(e) };
131
+ }
132
+ finally {
133
+ await client.close();
134
+ }
135
+ };
136
+ const vereditos = [];
137
+ for (const q of quebras)
138
+ vereditos.push({ descricao: q.descricao, esperado: "reprova", ...(await rodar(q, true)) });
139
+ const armadilha = quebras[1] ?? quebras[0];
140
+ vereditos.push({
141
+ descricao: `a armadilha: sem tools/list antes, "${armadilha.descricao}" passa calada`,
142
+ esperado: "passa",
143
+ ...(await rodar(armadilha, false)),
144
+ });
145
+ return vereditos;
146
+ }
147
+ //# sourceMappingURL=cliente.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cliente.js","sourceRoot":"","sources":["../src/cliente.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -4,5 +4,5 @@ export { CABECALHOS_MCP, comHost, corpoDoPedido, ipDaSonda, lerCorpoJsonRpc, med
4
4
  export { VAR_ESCRITA, conferirSecao, lerTrava, modoEscrita, type NomeDaSecao, type Trava, type Veredito } from "./trava.js";
5
5
  export { capturarHttp, capturarStdio, pedirHttp } from "./remoto.js";
6
6
  export { verificarNoAr, type OpcoesVerificar } from "./verificar.js";
7
- export { diferenca, replay, type OpcoesReplay } from "./replay.js";
7
+ export { diferenca, linhaDeCompatibilidade, replay, type OpcoesReplay } from "./replay.js";
8
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,WAAW,EACX,gBAAgB,EAChB,oBAAoB,EACpB,kBAAkB,EAClB,KAAK,eAAe,GACrB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,kBAAkB,EAAE,KAAK,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAC3E,OAAO,EACL,cAAc,EACd,OAAO,EACP,aAAa,EACb,SAAS,EACT,eAAe,EACf,aAAa,EACb,SAAS,EACT,aAAa,EACb,KAAK,YAAY,EACjB,KAAK,MAAM,GACZ,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,KAAK,KAAK,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC5H,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACrE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,WAAW,EACX,gBAAgB,EAChB,oBAAoB,EACpB,kBAAkB,EAClB,KAAK,eAAe,GACrB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,kBAAkB,EAAE,KAAK,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAC3E,OAAO,EACL,cAAc,EACd,OAAO,EACP,aAAa,EACb,SAAS,EACT,eAAe,EACf,aAAa,EACb,SAAS,EACT,aAAa,EACb,KAAK,YAAY,EACjB,KAAK,MAAM,GACZ,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,KAAK,KAAK,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC5H,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACrE,OAAO,EAAE,SAAS,EAAE,sBAAsB,EAAE,MAAM,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC"}
package/dist/index.js CHANGED
@@ -4,5 +4,5 @@ export { CABECALHOS_MCP, comHost, corpoDoPedido, ipDaSonda, lerCorpoJsonRpc, med
4
4
  export { VAR_ESCRITA, conferirSecao, lerTrava, modoEscrita } from "./trava.js";
5
5
  export { capturarHttp, capturarStdio, pedirHttp } from "./remoto.js";
6
6
  export { verificarNoAr } from "./verificar.js";
7
- export { diferenca, replay } from "./replay.js";
7
+ export { diferenca, linhaDeCompatibilidade, replay } from "./replay.js";
8
8
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,WAAW,EACX,gBAAgB,EAChB,oBAAoB,EACpB,kBAAkB,GAEnB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,kBAAkB,EAA2B,MAAM,cAAc,CAAC;AAC3E,OAAO,EACL,cAAc,EACd,OAAO,EACP,aAAa,EACb,SAAS,EACT,eAAe,EACf,aAAa,EACb,SAAS,EACT,aAAa,GAGd,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,QAAQ,EAAE,WAAW,EAA+C,MAAM,YAAY,CAAC;AAC5H,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EAAE,aAAa,EAAwB,MAAM,gBAAgB,CAAC;AACrE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAqB,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,WAAW,EACX,gBAAgB,EAChB,oBAAoB,EACpB,kBAAkB,GAEnB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,kBAAkB,EAA2B,MAAM,cAAc,CAAC;AAC3E,OAAO,EACL,cAAc,EACd,OAAO,EACP,aAAa,EACb,SAAS,EACT,eAAe,EACf,aAAa,EACb,SAAS,EACT,aAAa,GAGd,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,QAAQ,EAAE,WAAW,EAA+C,MAAM,YAAY,CAAC;AAC5H,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EAAE,aAAa,EAAwB,MAAM,gBAAgB,CAAC;AACrE,OAAO,EAAE,SAAS,EAAE,sBAAsB,EAAE,MAAM,EAAqB,MAAM,aAAa,CAAC"}
package/dist/replay.d.ts CHANGED
@@ -40,6 +40,13 @@ export declare function diferenca(antes: Item, depois: Item): {
40
40
  capabilities: boolean;
41
41
  identidade: boolean;
42
42
  };
43
+ /**
44
+ * A linha de compatibilidade da versão: o major — e, em 0.x, o minor, porque
45
+ * no semver de série 0 mudança incompatível em minor é permitida. Medido no
46
+ * replay do ilo-mcp-server (0.5.0 → 0.6.0 tornou `filters` obrigatório): a
47
+ * 0.1.0 do pacote listava isso como quebra fora de major.
48
+ */
49
+ export declare function linhaDeCompatibilidade(v: string): string;
43
50
  export declare function replay(o: OpcoesReplay): Promise<{
44
51
  markdown: string;
45
52
  json: unknown;
@@ -1 +1 @@
1
- {"version":3,"file":"replay.d.ts","sourceRoot":"","sources":["../src/replay.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAYH,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,kFAAkF;IAClF,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,4DAA4D;IAC5D,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,8EAA8E;IAC9E,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/B;AAWD,KAAK,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAYpC,+EAA+E;AAC/E,wBAAgB,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI;;QAEtC,IAAI,EAAQ,MAAM,EAAE;QAAE,KAAK,EAAQ,MAAM,EAAE;QAAE,KAAK,EAAQ,MAAM,EAAE;;;QAC9D,IAAI,EAAQ,MAAM,EAAE;QAAE,KAAK,EAAQ,MAAM,EAAE;;;QAC7C,IAAI,EAAQ,MAAM,EAAE;QAAE,KAAK,EAAQ,MAAM,EAAE;;aACvC,MAAM,EAAE;;;;EA2C1B;AAID,wBAAsB,MAAM,CAAC,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC,CA8I1F"}
1
+ {"version":3,"file":"replay.d.ts","sourceRoot":"","sources":["../src/replay.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAqBH,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,kFAAkF;IAClF,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,4DAA4D;IAC5D,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,8EAA8E;IAC9E,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/B;AAWD,KAAK,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAYpC,+EAA+E;AAC/E,wBAAgB,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI;;QAEtC,IAAI,EAAQ,MAAM,EAAE;QAAE,KAAK,EAAQ,MAAM,EAAE;QAAE,KAAK,EAAQ,MAAM,EAAE;;;QAC9D,IAAI,EAAQ,MAAM,EAAE;QAAE,KAAK,EAAQ,MAAM,EAAE;;;QAC7C,IAAI,EAAQ,MAAM,EAAE;QAAE,KAAK,EAAQ,MAAM,EAAE;;aACvC,MAAM,EAAE;;;;EA2C1B;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAGxD;AAED,wBAAsB,MAAM,CAAC,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC,CAoJ1F"}
package/dist/replay.js CHANGED
@@ -15,9 +15,19 @@ import { tmpdir } from "node:os";
15
15
  import { join } from "node:path";
16
16
  import { capturarHttp, capturarStdio } from "./remoto.js";
17
17
  import { impressaoDigital } from "./superficie.js";
18
- const shell = process.platform === "win32";
18
+ /**
19
+ * `npm` como processo filho. No Windows o executável é `npm.cmd`, que o Node
20
+ * só roda com `shell: true` — e com shell os argumentos têm de ir JÁ numa
21
+ * linha de comando (passá-los em array é o DEP0190 do Node 24).
22
+ */
23
+ function rodarNpm(argv) {
24
+ if (process.platform !== "win32")
25
+ return spawnSync("npm", argv, { encoding: "utf8" });
26
+ const linha = ["npm", ...argv.map(a => (/[\s"&|<>^]/.test(a) ? `"${a.replaceAll('"', '\\"')}"` : a))].join(" ");
27
+ return spawnSync(linha, { encoding: "utf8", shell: true });
28
+ }
19
29
  function npmJson(...argv) {
20
- const r = spawnSync("npm", argv, { encoding: "utf8", shell });
30
+ const r = rodarNpm(argv);
21
31
  if (r.status !== 0)
22
32
  throw new Error(`npm ${argv.join(" ")}: ${r.stderr}`);
23
33
  return JSON.parse(r.stdout);
@@ -82,7 +92,16 @@ export function diferenca(antes, depois) {
82
92
  r.identidade = impressaoDigital(init(antes)["serverInfo"]) !== impressaoDigital(init(depois)["serverInfo"]);
83
93
  return r;
84
94
  }
85
- const major = (v) => Number(v.split(".")[0]);
95
+ /**
96
+ * A linha de compatibilidade da versão: o major — e, em 0.x, o minor, porque
97
+ * no semver de série 0 mudança incompatível em minor é permitida. Medido no
98
+ * replay do ilo-mcp-server (0.5.0 → 0.6.0 tornou `filters` obrigatório): a
99
+ * 0.1.0 do pacote listava isso como quebra fora de major.
100
+ */
101
+ export function linhaDeCompatibilidade(v) {
102
+ const [maior, menor] = v.split(".");
103
+ return maior === "0" ? `0.${menor}` : String(maior);
104
+ }
86
105
  export async function replay(o) {
87
106
  const log = o.log ?? (() => { });
88
107
  const versoes = npmJson("view", o.pacote, "versions", "--json");
@@ -103,7 +122,17 @@ export async function replay(o) {
103
122
  const base = { versao: v, data: datas[v]?.slice(0, 10), noRegistro: registro.has(v) };
104
123
  const dir = mkdtempSync(join(tmpdir(), "mcp-surface-replay-"));
105
124
  try {
106
- const inst = spawnSync("npm", ["install", `${o.pacote}@${v}`, "--prefix", dir, "--omit=dev", "--ignore-scripts", "--no-audit", "--no-fund", "--loglevel=error"], { encoding: "utf8", shell });
125
+ const inst = rodarNpm([
126
+ "install",
127
+ `${o.pacote}@${v}`,
128
+ "--prefix",
129
+ dir,
130
+ "--omit=dev",
131
+ "--ignore-scripts",
132
+ "--no-audit",
133
+ "--no-fund",
134
+ "--loglevel=error",
135
+ ]);
107
136
  if (inst.status !== 0)
108
137
  throw new Error(inst.stderr.trim().split("\n").pop());
109
138
  const pasta = join(dir, "node_modules", ...o.pacote.split("/"));
@@ -182,7 +211,7 @@ export async function replay(o) {
182
211
  if (d.identidade)
183
212
  partes.push("identidade");
184
213
  mudou = l.sha256 === anterior.sha256 ? "nada" : partes.join("; ") || "detalhe de normalização";
185
- if (d.quebras.length && major(l.versao) === major(anterior.versao)) {
214
+ if (d.quebras.length && linhaDeCompatibilidade(l.versao) === linhaDeCompatibilidade(anterior.versao)) {
186
215
  quebras.push({ de: anterior.versao, para: l.versao, itens: d.quebras });
187
216
  }
188
217
  }
@@ -190,7 +219,7 @@ export async function replay(o) {
190
219
  anterior = l;
191
220
  }
192
221
  md.push("", "## Remoções fora de versão major", "");
193
- md.push("Tool, resource ou prompt removido, parâmetro removido ou parâmetro que passou a obrigatório quebra o cliente que dependia dele; pela convenção de versão isso pede major. Listado sem julgamento — cada caso pode ter tido razão registrada no CHANGELOG.", "");
222
+ md.push("Tool, resource ou prompt removido, parâmetro removido ou parâmetro que passou a obrigatório quebra o cliente que dependia dele; pela convenção de versão isso pede major (em 0.x, minor). Listado sem julgamento — cada caso pode ter tido razão registrada no CHANGELOG.", "");
194
223
  if (!quebras.length)
195
224
  md.push("Nenhuma.");
196
225
  for (const q of quebras)
@@ -1 +1 @@
1
- {"version":3,"file":"replay.js","sourceRoot":"","sources":["../src/replay.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"replay.js","sourceRoot":"","sources":["../src/replay.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEnD;;;;GAIG;AACH,SAAS,QAAQ,CAAC,IAAc;IAC9B,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO;QAAE,OAAO,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;IACtF,MAAM,KAAK,GAAG,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAChH,OAAO,SAAS,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AAC7D,CAAC;AAwBD,SAAS,OAAO,CAAC,GAAG,IAAc;IAChC,MAAM,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IACzB,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1E,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAC9B,CAAC;AAED,MAAM,KAAK,GAAG,CAAC,GAAS,EAAE,KAAa,EAAE,EAAE,CAAE,GAAG,CAAC,KAAK,CAAmB,IAAI,EAAE,CAAC;AAChF,MAAM,KAAK,GAAG,CAAC,CAAS,EAAE,KAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACzE,MAAM,IAAI,GAAG,CAAC,GAAS,EAAE,EAAE,CAAC,GAAG,CAAC,YAAY,CAAS,CAAC;AAEtD,+EAA+E;AAC/E,MAAM,UAAU,SAAS,CAAC,KAAW,EAAE,MAAY;IACjD,MAAM,CAAC,GAAG;QACR,KAAK,EAAE,EAAE,IAAI,EAAE,EAAc,EAAE,KAAK,EAAE,EAAc,EAAE,KAAK,EAAE,EAAc,EAAE;QAC7E,SAAS,EAAE,EAAE,IAAI,EAAE,EAAc,EAAE,KAAK,EAAE,EAAc,EAAE;QAC1D,OAAO,EAAE,EAAE,IAAI,EAAE,EAAc,EAAE,KAAK,EAAE,EAAc,EAAE;QACxD,OAAO,EAAE,EAAc;QACvB,YAAY,EAAE,KAAK;QACnB,YAAY,EAAE,KAAK;QACnB,UAAU,EAAE,KAAK;KAClB,CAAC;IACF,MAAM,EAAE,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3E,MAAM,EAAE,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5E,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE;QAAE,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;YAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAChE,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;QACxB,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,CAAC,CAAC,EAAE,CAAC;YACP,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACtB,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;YACtC,SAAS;QACX,CAAC;QACD,IAAI,gBAAgB,CAAC,CAAC,CAAC,KAAK,gBAAgB,CAAC,CAAC,CAAC;YAAE,SAAS;QAC1D,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACtB,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,EAAE,CAAS,CAAC;QAC5C,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,EAAE,CAAS,CAAC;QAC5C,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,CAAS,CAAC;QAC5C,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,CAAS,CAAC,EAAE,CAAC;YAC9D,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,0BAA0B,CAAC,IAAI,CAAC,CAAC;QACtE,CAAC;QACD,MAAM,EAAE,GAAG,IAAI,GAAG,CAAE,EAAE,CAAC,UAAU,CAA0B,IAAI,EAAE,CAAC,CAAC;QACnE,KAAK,MAAM,CAAC,IAAK,EAAE,CAAC,UAAU,CAA0B,IAAI,EAAE,EAAE,CAAC;YAC/D,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;gBAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,sCAAsC,CAAC,IAAI,CAAC,CAAC;QAClF,CAAC;IACH,CAAC;IACD,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC,CAAU,EAAE,CAAC;QAClF,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;QACrD,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;QACtD,KAAK,MAAM,CAAC,IAAI,CAAC;YAAE,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAAE,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACxD,KAAK,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YAClB,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;gBACd,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACvB,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,KAAK,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,cAAc,CAAC,EAAE,CAAC,CAAC;YACpF,CAAC;QACH,CAAC;IACH,CAAC;IACD,CAAC,CAAC,YAAY,GAAG,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,CAAC,KAAK,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC;IAClH,CAAC,CAAC,YAAY,GAAG,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,CAAC,KAAK,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC;IAClH,CAAC,CAAC,UAAU,GAAG,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC,KAAK,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;IAC5G,OAAO,CAAC,CAAC;AACX,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CAAC,CAAS;IAC9C,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACpC,OAAO,KAAK,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,CAAe;IAC1C,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAChC,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAa,CAAC;IAC5E,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAA2B,CAAC;IAEpF,IAAI,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IACjC,IAAI,CAAC,CAAC,cAAc,EAAE,CAAC;QACrB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,KAAK,CACrB,8DAA8D,kBAAkB,CAAC,CAAC,CAAC,cAAc,CAAC,YAAY,CAC/G,CAAC;YACF,MAAM,KAAK,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAuE,CAAC;YACvG,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QACvH,CAAC;QAAC,MAAM,CAAC;YACP,uDAAuD;QACzD,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAY,EAAE,CAAC;IAC3B,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,MAAM,IAAI,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACtF,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,qBAAqB,CAAC,CAAC,CAAC;QAC/D,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,QAAQ,CAAC;gBACpB,SAAS;gBACT,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,EAAE;gBAClB,UAAU;gBACV,GAAG;gBACH,YAAY;gBACZ,kBAAkB;gBAClB,YAAY;gBACZ,WAAW;gBACX,kBAAkB;aACnB,CAAC,CAAC;YACH,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;YAC7E,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,cAAc,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;YAChE,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CAA6D,CAAC;YACtI,MAAM,GAAG,GAAG,OAAO,GAAG,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,IAAI,UAAU,CAAC,CAAC;YAChH,MAAM,GAAG,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;YACzD,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;YAC/D,MAAM,MAAM,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;YACrC,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;YACtC,GAAG,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,MAAM,QAAQ,CAAC,CAAC;QAC5E,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,IAAI,GAAG,MAAM,CAAE,CAAW,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC;YAC/C,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YAC/B,GAAG,CAAC,GAAG,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;QAC5B,CAAC;gBAAS,CAAC;YACT,MAAM,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAED,IAAI,OAA2B,CAAC;IAChC,IAAI,aAAiC,CAAC;IACtC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC;QACV,OAAO,GAAG,gBAAgB,CAAC,MAAM,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACtD,aAAa,GAAG,MAAM,KAAK,CAAC,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;aACnD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAmC,CAAC;aACpD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;aACpB,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAC5B,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACnD,MAAM,EAAE,GAAa,EAAE,CAAC;IACxB,EAAE,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC,MAAM,KAAK,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;IACxE,EAAE,CAAC,IAAI,CACL,6RAA6R,EAC7R,EAAE,CACH,CAAC;IACF,IAAI,CAAC,CAAC,GAAG,IAAI,OAAO,EAAE,CAAC;QACrB,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,aAAa,CAAC,CAAC;QAC/D,EAAE,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC;QACnC,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,GAAG,8BAA8B,aAAa,IAAI,GAAG,KAAK,CAAC,CAAC;QACvF,EAAE,CAAC,IAAI,CAAC,2BAA2B,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;QAC9D,IAAI,SAAS,EAAE,MAAM,EAAE,CAAC;YACtB,EAAE,CAAC,IAAI,CACL,SAAS,CAAC,MAAM,KAAK,OAAO;gBAC1B,CAAC,CAAC,oCAAoC,aAAa,oBAAoB;gBACvE,CAAC,CAAC,wBAAwB,aAAa,2BAA2B,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CACvG,CAAC;QACJ,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAC3E,EAAE,CAAC,IAAI,CAAC,wDAAwD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,SAAS,GAAG,EAAE,EAAE,CAAC,CAAC;IACzG,CAAC;IAED,EAAE,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAC;IAClC,EAAE,CAAC,IAAI,CAAC,uFAAuF,CAAC,CAAC;IACjG,EAAE,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;IACtC,MAAM,OAAO,GAAyD,EAAE,CAAC;IACzE,IAAI,QAA2B,CAAC;IAChC,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;YACxB,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,MAAM,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAC7H,SAAS;QACX,CAAC;QACD,IAAI,KAAK,GAAG,YAAY,CAAC;QACzB,IAAI,QAAQ,EAAE,GAAG,EAAE,CAAC;YAClB,MAAM,CAAC,GAAG,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;YACzC,MAAM,MAAM,GAAa,EAAE,CAAC;YAC5B,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM;gBAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,WAAW,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACnG,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM;gBAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,WAAW,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACtG,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM;gBAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,kBAAkB,CAAC,CAAC;YACjF,IAAI,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM;gBAAE,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;YAC3I,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM;gBAAE,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;YACjI,IAAI,CAAC,CAAC,YAAY;gBAAE,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAChD,IAAI,CAAC,CAAC,YAAY;gBAAE,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAChD,IAAI,CAAC,CAAC,UAAU;gBAAE,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC5C,KAAK,GAAG,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,yBAAyB,CAAC;YAC/F,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,IAAI,sBAAsB,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,sBAAsB,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBACrG,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YAC1E,CAAC;QACH,CAAC;QACD,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,MAAM,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,MAAM,MAAM,KAAK,IAAI,CAAC,CAAC;QACnJ,QAAQ,GAAG,CAAC,CAAC;IACf,CAAC;IACD,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,kCAAkC,EAAE,EAAE,CAAC,CAAC;IACpD,EAAE,CAAC,IAAI,CACL,2QAA2Q,EAC3Q,EAAE,CACH,CAAC;IACF,IAAI,CAAC,OAAO,CAAC,MAAM;QAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACzC,KAAK,MAAM,CAAC,IAAI,OAAO;QAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACrF,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC;IAC9B,EAAE,CAAC,IAAI,CACL,gLAAgL,EAChL,oIAAoI,EACpI,sHAAsH,CACvH,CAAC;IAEF,MAAM,IAAI,GAAG;QACX,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QAChC,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,QAAQ,EAAE,CAAC,CAAC,GAAG,IAAI,IAAI;QACvB,aAAa,EAAE,aAAa,IAAI,IAAI;QACpC,UAAU,EAAE,OAAO,IAAI,IAAI;QAC3B,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACtC,GAAG,CAAC;YACJ,GAAG,CAAC,GAAG;gBACL,CAAC,CAAC;oBACE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC;oBACzC,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,WAAW,CAAC,EAAE,KAAK,CAAC;oBAChD,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,SAAS,CAAC,EAAE,MAAM,CAAC;oBAC7C,kBAAkB,EAAE,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,CAAC;iBAChE;gBACH,CAAC,CAAC,EAAE,CAAC;SACR,CAAC,CAAC;KACJ,CAAC;IACF,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;AAClD,CAAC"}
@@ -10,6 +10,11 @@ export interface OpcoesVerificar {
10
10
  config?: string;
11
11
  /** Rota da seção `semToken` que corresponde a `url`. Padrão: `POST /mcp`. */
12
12
  rota?: string;
13
+ /**
14
+ * Servidor com mais de uma superfície (perfis por rota): a `declarada` é um
15
+ * mapa `{ perfil: superfície }` e esta é a chave que `url` serve.
16
+ */
17
+ perfil?: string;
13
18
  /** A mesma tool local que a trava sondou; sem ela, `tools/call` não é conferido. */
14
19
  chamada?: ChamadaLocal;
15
20
  tentativas?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"verificar.d.ts","sourceRoot":"","sources":["../src/verificar.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAiB,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAI9D,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,cAAc,EAAE,MAAM,CAAC;IACvB,2FAA2F;IAC3F,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,6EAA6E;IAC7E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oFAAoF;IACpF,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/B;AAED,+EAA+E;AAC/E,wBAAsB,aAAa,CAAC,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAqC9E"}
1
+ {"version":3,"file":"verificar.d.ts","sourceRoot":"","sources":["../src/verificar.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAiB,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAI9D,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,cAAc,EAAE,MAAM,CAAC;IACvB,2FAA2F;IAC3F,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,6EAA6E;IAC7E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oFAAoF;IACpF,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/B;AAED,+EAA+E;AAC/E,wBAAsB,aAAa,CAAC,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA2C9E"}
package/dist/verificar.js CHANGED
@@ -18,6 +18,13 @@ export async function verificarNoAr(o) {
18
18
  return `surface.lock.json incompleto: falta a seção declarada ou semToken["${config}"]["${rota}"].`;
19
19
  }
20
20
  const sonda = sondaSemToken(o.chamada).filter(p => p.method in semToken);
21
+ let esperado = declarada.sha256;
22
+ if (o.perfil !== undefined) {
23
+ const porPerfil = declarada.conteudo?.[o.perfil];
24
+ if (porPerfil === undefined)
25
+ return `surface.lock.json: a seção declarada não tem o perfil "${o.perfil}".`;
26
+ esperado = impressaoDigital(porPerfil);
27
+ }
21
28
  const tentativas = o.tentativas ?? 6;
22
29
  let ultimo = "";
23
30
  for (let t = 1; t <= tentativas; t++) {
@@ -29,13 +36,13 @@ export async function verificarNoAr(o) {
29
36
  if (responde !== semToken[pedido.method])
30
37
  divergentes.push(`${pedido.method} (no ar ${responde})`);
31
38
  }
32
- if (sha === declarada.sha256 && divergentes.length === 0) {
33
- log(`no ar = trava: declarada ${sha.slice(0, 12)} (travada em ${declarada.versao}); ` +
39
+ if (sha === esperado && divergentes.length === 0) {
40
+ log(`no ar = trava: declarada${o.perfil !== undefined ? ` [${o.perfil}]` : ""} ${sha.slice(0, 12)} (travada em ${declarada.versao}); ` +
34
41
  `sem token: ${config}/${rota} confere em ${sonda.length} métodos.`);
35
42
  return null;
36
43
  }
37
44
  ultimo =
38
- (sha !== declarada.sha256 ? `declarada no ar ${sha.slice(0, 12)} ≠ trava ${declarada.sha256.slice(0, 12)}. ` : "") +
45
+ (sha !== esperado ? `declarada no ar ${sha.slice(0, 12)} ≠ trava ${esperado.slice(0, 12)}. ` : "") +
39
46
  (divergentes.length ? `sem token diverge em: ${divergentes.join(", ")}.` : "");
40
47
  log(`tentativa ${t}: ${ultimo}`);
41
48
  // A Cloudflare serve isolates mistos por alguns segundos logo após o deploy.
@@ -1 +1 @@
1
- {"version":3,"file":"verificar.js","sourceRoot":"","sources":["../src/verificar.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"verificar.js","sourceRoot":"","sources":["../src/verificar.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sbissoli/mcp-surface",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "description": "Impressão digital da superfície de um servidor MCP: initialize (instructions + capabilities) + tools/resources/prompts + quem responde sem token, travados ao lado da versão — mudou sem subir a versão = build vermelho e deploy recusado; mais a conferência do endpoint no ar e o replay das versões publicadas",
5
5
  "repository": {
6
6
  "type": "git",
@@ -17,10 +17,14 @@
17
17
  ".": {
18
18
  "types": "./dist/index.d.ts",
19
19
  "default": "./dist/index.js"
20
+ },
21
+ "./cliente": {
22
+ "types": "./dist/cliente.d.ts",
23
+ "default": "./dist/cliente.js"
20
24
  }
21
25
  },
22
26
  "bin": {
23
- "mcp-surface": "./dist/cli.js"
27
+ "mcp-surface": "dist/cli.js"
24
28
  },
25
29
  "files": [
26
30
  "dist",
@@ -33,9 +37,16 @@
33
37
  "test": "vitest run"
34
38
  },
35
39
  "peerDependencies": {
40
+ "@modelcontextprotocol/client": "^2.0.0",
36
41
  "@modelcontextprotocol/server": "^2.0.0"
37
42
  },
43
+ "peerDependenciesMeta": {
44
+ "@modelcontextprotocol/client": {
45
+ "optional": true
46
+ }
47
+ },
38
48
  "devDependencies": {
49
+ "@modelcontextprotocol/client": "^2.1.0",
39
50
  "@modelcontextprotocol/server": "^2.1.0"
40
51
  },
41
52
  "keywords": [