Hermes
c9015b59ad
[pending-judge] feat(DC-162 rev2): "Connect your AI" — spec Streamable HTTP MCP + one-click keys
Judge r1 (grade D) blockers, each fixed and tested:
1. TRANSPORT: custom POST-only JSON-RPC → MCP 2025-03-10 Streamable HTTP
(spec-canonical; replaced HTTP+SSE). POST answers application/json for
requests; valid notifications -> 202 empty; malformed notifications ->
no reply (204); batching removed in this revision -> arrays rejected
-32600. GET (server->client stream) and DELETE (session termination)
answer 405 + Allow: POST — the spec's explicit allowance for stateless
request/response servers; documented in /info + modal + OpenAPI.
Origin header validated when present (DNS-rebinding MUST); Accept
negotiation (json required, else 406); MCP-Protocol-Version header
checked when sent. Clients needing server-initiated streams use the
stdio bridge (unchanged, shares mcp-core).
2. CREDENTIAL TYPE PRESERVATION: routes/mcp.js now forwards the SAME
scheme the caller authenticated with (req.auth.type from
middleware.js:549-586): apikey -> x-api-key, jwt -> Authorization
Bearer (NOT dk_-coerced-x-api-key as r1 did). mcp-core createToolHandler
accepts explicit headers. Tests assert BOTH shapes downstream
(apikey carries x-api-key & no Authorization; jwt carries Bearer & no
x-api-key; zero downstream calls for session denial).
3. JSON-RPC VALIDATION: validateJsonRpc — jsonrpc:'2.0', non-empty string
method, params object-or-omitted, id string|number|null. Invalid
Request -32600 (empty body, empty array, batch); tools/call without
string params.name -> -32602; unknown method -> -32601; error envelopes
carry id null when unpairable. Transport primitives rejected by the
app-wide strict JSON parser (400; asserted).
4. REPRODUCIBILITY: status/dist/features.js + sw.js regenerated and
committed IN THE PATCH (repo convention: DC-130/131 committed bundle
rebuilds). Verifier greps the built bundle for aiconn- (23),
mcp/connections (1), httpConfig (2) so a clean `git am` checkout serves
the real frontend.
Judge r1 polish, all applied:
- verifier accepts 0_PATCH.diff / PATCH.diff naming (indexed artifact);
- connections list filtered server-side to "AI connection (...)" keys
(new GET /mcp/connections, session-only; modal switched to it);
- URL-encoded tool path params (serviceId, containerId, action,
templateId, category, zone) in mcp-core.
Config shape: POST /mcp/config (session-only; apikey 403) returns the
standard Streamable-HTTP card {url, transport: streamable-http, headers:
{x-api-key}, mcpProtocolVersion} + per-client note (ChatGPT note states
the public-https requirement honestly; no fabricated connector claims).
Tests: 57 green (34 route incl. auth matrix/type-preservation/transport
rules/JSON-RPC errors + 23 core). Composition-root e2e (8) boots the real
createApp with the mount. eslint 0 errors. Full suite: only the
pre-existing pdf-parse billing family red (unchanged since base 470dfaa).
2026-10-08 03:46:56 -07:00
..
2026-08-23 20:24:42 -07:00
2026-10-07 08:31:14 -07:00
2026-06-13 12:16:56 -07:00
2026-10-08 03:46:56 -07:00
2026-08-12 12:25:26 -07:00
2026-10-08 03:46:56 -07:00
2026-06-26 12:16:38 -07:00
2026-10-07 20:44:07 -07:00
2026-08-18 08:22:29 -07:00
2026-08-22 16:22:53 -07:00
2026-07-01 07:37:45 -07:00
2026-06-13 12:16:56 -07:00
2026-08-23 01:57:20 -07:00
2026-08-23 09:05:27 -07:00
2026-08-23 08:01:29 -07:00
2026-07-01 04:20:57 -07:00
2026-06-13 12:16:56 -07:00
2026-07-20 17:44:11 -07:00
2026-07-20 01:40:33 -07:00
2026-07-02 18:27:03 -07:00
2026-08-18 05:52:32 -07:00
2026-06-27 07:02:47 -07:00
2026-08-22 19:42:25 -07:00
2026-08-23 02:31:16 -07:00
2026-08-23 12:40:32 -07:00
2026-08-23 12:40:32 -07:00
2026-08-23 15:53:58 -07:00
2026-10-07 00:58:03 -07:00
2026-06-13 12:16:56 -07:00
2026-08-12 12:35:58 -07:00
2026-08-22 17:22:13 -07:00
2026-08-23 04:40:41 -07:00
2026-06-13 12:16:56 -07:00
2026-08-18 04:17:50 -07:00
2026-06-26 12:16:38 -07:00
2026-08-17 16:04:18 -07:00
2026-06-13 12:16:56 -07:00
2026-06-13 12:16:56 -07:00
2026-08-12 04:50:16 -07:00
2026-08-12 12:30:57 -07:00
2026-06-13 12:16:56 -07:00
2026-08-23 15:02:00 -07:00
2026-08-22 14:23:25 -07:00
2026-08-22 16:52:53 -07:00
2026-08-22 16:52:53 -07:00
2026-08-22 15:14:25 -07:00
2026-08-22 15:14:25 -07:00
2026-08-13 16:30:20 -07:00
2026-06-13 12:16:56 -07:00
2026-07-20 17:44:11 -07:00
2026-04-06 21:36:46 -07:00
2026-08-04 14:18:49 -07:00
2026-08-22 18:15:37 -07:00
2026-08-22 18:15:37 -07:00
2026-08-22 18:15:37 -07:00
2026-07-20 21:40:26 -07:00
2026-06-13 12:16:56 -07:00
2026-08-23 07:28:10 -07:00
2026-08-23 05:22:04 -07:00
2026-06-25 17:16:16 -07:00
2026-08-12 12:35:58 -07:00
2026-08-18 01:29:19 -07:00
2026-08-22 21:35:51 -07:00
2026-08-18 17:07:13 -07:00
2026-10-03 21:12:35 -07:00
2026-10-03 21:12:35 -07:00
2026-10-03 21:26:29 -07:00
2026-10-03 21:26:29 -07:00
2026-10-03 21:43:11 -07:00
2026-10-03 23:25:23 -07:00
2026-10-03 21:37:13 -07:00
2026-10-03 21:31:57 -07:00
2026-07-06 15:06:28 -07:00
2026-10-03 21:29:41 -07:00
2026-10-03 21:29:41 -07:00
2026-10-04 03:12:23 -07:00
2026-10-03 21:14:20 -07:00
2026-10-03 22:55:22 -07:00
2026-10-03 22:34:02 -07:00
2026-10-03 21:16:20 -07:00
2026-10-03 21:37:13 -07:00
2026-10-03 22:47:27 -07:00
2026-10-03 21:39:33 -07:00
2026-10-03 21:35:15 -07:00
2026-10-03 21:40:09 -07:00
2026-10-03 21:47:34 -07:00
2026-08-22 23:28:36 -07:00
2026-08-22 19:42:25 -07:00
2026-08-22 23:28:36 -07:00
2026-06-13 12:16:56 -07:00
2026-08-12 05:07:24 -07:00
2026-06-13 12:16:56 -07:00
2026-07-21 21:59:03 -07:00
2026-08-14 23:46:23 -07:00
2026-08-23 07:28:10 -07:00
2026-06-13 12:16:56 -07:00
2026-09-13 05:32:14 -07:00
2026-07-24 22:39:29 -07:00
2026-08-22 05:41:38 -07:00
2026-08-19 00:10:37 -07:00
2026-08-19 00:10:37 -07:00
2026-07-21 00:45:46 -07:00
2026-10-07 00:58:03 -07:00
2026-06-13 12:16:56 -07:00
2026-08-22 05:41:38 -07:00
2026-06-13 12:16:56 -07:00
2026-07-06 21:28:03 -07:00
2026-07-06 18:55:16 -07:00
2026-08-18 19:45:08 -07:00
2026-08-18 17:35:59 -07:00
2026-06-13 12:16:56 -07:00
2026-07-20 17:44:11 -07:00
2026-08-18 13:16:44 -07:00
2026-08-18 13:34:51 -07:00
2026-08-31 23:37:00 -07:00
2026-08-18 01:59:14 -07:00
2026-08-18 09:03:58 -07:00
2026-08-15 00:01:16 -07:00