@nekzus/liop 2.5.0-beta.2 → 2.5.0-beta.4

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 (109) hide show
  1. package/README.md +87 -40
  2. package/dist/bin/agent.js +27 -894
  3. package/dist/bridge.d.ts +4 -3
  4. package/dist/bridge.js +1 -4
  5. package/dist/chunk-2XHSALII.js +3 -0
  6. package/dist/chunk-2ZYX736J.js +2 -0
  7. package/dist/chunk-3WRKTVOF.js +2 -0
  8. package/dist/chunk-6KFKO6ZX.js +2 -0
  9. package/dist/chunk-6VK2XALI.js +2 -0
  10. package/dist/chunk-AYDF3IFZ.js +2 -0
  11. package/dist/chunk-CTTTLCGL.js +31 -0
  12. package/dist/chunk-ECRS6N33.js +4 -0
  13. package/dist/chunk-FDJMH4CB.js +2 -0
  14. package/dist/chunk-FTF6AMF6.js +0 -1
  15. package/dist/chunk-GWVSCZUS.js +2 -0
  16. package/dist/chunk-LEXMMIQI.js +15 -0
  17. package/dist/chunk-LM26HOJ6.js +31 -0
  18. package/dist/chunk-MQ5SU26J.js +2 -0
  19. package/dist/chunk-N35BC62H.js +2 -0
  20. package/dist/chunk-P6IJ3VBD.js +3 -0
  21. package/dist/chunk-TKLRW52V.js +2 -0
  22. package/dist/chunk-V35CXJQN.js +2 -0
  23. package/dist/chunk-WP5ER7RH.js +3 -0
  24. package/dist/chunk-XLVEDKM6.js +2 -0
  25. package/dist/chunk-Y675R34Z.js +2 -0
  26. package/dist/chunk-YD2AF2M6.js +46 -0
  27. package/dist/chunk-YLCNV764.js +3 -0
  28. package/dist/chunk-ZZMSFCJP.js +3 -0
  29. package/dist/client.d.ts +5 -4
  30. package/dist/client.js +1 -11
  31. package/dist/gateway.d.ts +6 -5
  32. package/dist/gateway.js +1 -11
  33. package/dist/{hybrid-DWe1bMoV.d.ts → hybrid-BZpCiUaV.d.ts} +4 -4
  34. package/dist/{index-BuEQtBHD.d.ts → index-BYDtRGue.d.ts} +8 -4
  35. package/dist/{index-CdW8j8Bn.d.ts → index-ByzjpRCk.d.ts} +30 -2
  36. package/dist/index.d.ts +57 -10
  37. package/dist/index.js +4 -317
  38. package/dist/kyber-PULV7PQX.js +2 -0
  39. package/dist/mesh.d.ts +1 -1
  40. package/dist/mesh.js +1 -5
  41. package/dist/{node-B0b2vUFS.d.ts → node-Djzm6UYd.d.ts} +8 -0
  42. package/dist/protocol/liop_core.proto +22 -6
  43. package/dist/server.d.ts +4 -3
  44. package/dist/server.js +1 -8
  45. package/dist/{types-CzRSOlOo.d.ts → types-29zv9X1V.d.ts} +3 -0
  46. package/dist/types.d.ts +2 -1
  47. package/dist/types.js +1 -2
  48. package/dist/verifier-DqZ9MQ9l.d.ts +82 -0
  49. package/dist/verifier-J4NQYZX5.js +2 -0
  50. package/dist/workers/logic-execution.d.ts +7 -0
  51. package/dist/workers/logic-execution.js +1 -271
  52. package/dist/workers/zk-verifier.d.ts +9 -0
  53. package/dist/workers/zk-verifier.js +1 -173
  54. package/dist/zk-DzYNWBgo.d.ts +104 -0
  55. package/package.json +7 -2
  56. package/dist/bin/agent.js.map +0 -1
  57. package/dist/bridge.js.map +0 -1
  58. package/dist/chunk-2KSO3W4A.js +0 -77
  59. package/dist/chunk-2KSO3W4A.js.map +0 -1
  60. package/dist/chunk-2STZHJ24.js +0 -114
  61. package/dist/chunk-2STZHJ24.js.map +0 -1
  62. package/dist/chunk-3QH44NKZ.js +0 -115
  63. package/dist/chunk-3QH44NKZ.js.map +0 -1
  64. package/dist/chunk-5SWHE62F.js +0 -3683
  65. package/dist/chunk-5SWHE62F.js.map +0 -1
  66. package/dist/chunk-7BSCUYUE.js +0 -421
  67. package/dist/chunk-7BSCUYUE.js.map +0 -1
  68. package/dist/chunk-7PITYWOV.js +0 -68
  69. package/dist/chunk-7PITYWOV.js.map +0 -1
  70. package/dist/chunk-EJ426URA.js +0 -818
  71. package/dist/chunk-EJ426URA.js.map +0 -1
  72. package/dist/chunk-FCFTYOAS.js +0 -793
  73. package/dist/chunk-FCFTYOAS.js.map +0 -1
  74. package/dist/chunk-FTF6AMF6.js.map +0 -1
  75. package/dist/chunk-IK7CGWAZ.js +0 -24
  76. package/dist/chunk-IK7CGWAZ.js.map +0 -1
  77. package/dist/chunk-K3DGJLUY.js +0 -106
  78. package/dist/chunk-K3DGJLUY.js.map +0 -1
  79. package/dist/chunk-PAICJCKJ.js +0 -332
  80. package/dist/chunk-PAICJCKJ.js.map +0 -1
  81. package/dist/chunk-PUDETPL4.js +0 -279
  82. package/dist/chunk-PUDETPL4.js.map +0 -1
  83. package/dist/chunk-UJFWPRDM.js +0 -206884
  84. package/dist/chunk-UJFWPRDM.js.map +0 -1
  85. package/dist/chunk-VRB5HUYU.js +0 -1492
  86. package/dist/chunk-VRB5HUYU.js.map +0 -1
  87. package/dist/chunk-VRDZ5IKE.js +0 -558
  88. package/dist/chunk-VRDZ5IKE.js.map +0 -1
  89. package/dist/chunk-WPTOJYN5.js +0 -181
  90. package/dist/chunk-WPTOJYN5.js.map +0 -1
  91. package/dist/chunk-XRDN232O.js +0 -877
  92. package/dist/chunk-XRDN232O.js.map +0 -1
  93. package/dist/chunk-Y62GORQF.js +0 -51
  94. package/dist/chunk-Y62GORQF.js.map +0 -1
  95. package/dist/chunk-ZP3VVXOI.js +0 -66
  96. package/dist/chunk-ZP3VVXOI.js.map +0 -1
  97. package/dist/client.js.map +0 -1
  98. package/dist/gateway.js.map +0 -1
  99. package/dist/index.js.map +0 -1
  100. package/dist/kyber-CGOA7Q6A.js +0 -3
  101. package/dist/kyber-CGOA7Q6A.js.map +0 -1
  102. package/dist/mesh.js.map +0 -1
  103. package/dist/server.js.map +0 -1
  104. package/dist/types.js.map +0 -1
  105. package/dist/verifier-COnid_dg.d.ts +0 -31
  106. package/dist/verifier-XFU7ZB2W.js +0 -6
  107. package/dist/verifier-XFU7ZB2W.js.map +0 -1
  108. package/dist/workers/logic-execution.js.map +0 -1
  109. package/dist/workers/zk-verifier.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/bin/agent.ts"],"names":["token"],"mappings":"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","file":"agent.js","sourcesContent":["#!/usr/bin/env node\n\n// Copyright 2026 Nekzus Solutions and contributors\n// SPDX-License-Identifier: Apache-2.0\n\nimport * as fs from \"node:fs\";\nimport * as os from \"node:os\";\nimport * as path from \"node:path\";\nimport * as readline from \"node:readline\";\nimport { multiaddr } from \"@multiformats/multiaddr\";\nimport { isLegacyRequest } from \"../gateway/mcp-compat.js\";\nimport { LiopMcpRouter } from \"../gateway/router.js\";\nimport { MeshNode } from \"../mesh/index.js\";\nimport { RoutingTable, type ToolDefinition } from \"../runtime/routing-table.js\";\nimport { TokenManager } from \"../runtime/token-manager.js\";\nimport {\n\ttype GatewayTopologyInfo,\n\ttype MeshTopologyInfo,\n\tprobeTopology,\n\ttype TopologyProbeResult,\n} from \"../runtime/topology-probe.js\";\nimport { LiopServer } from \"../server/index.js\";\nimport type { McpRequest, McpResponse } from \"../types.js\";\nimport { log } from \"../utils/logger.js\";\n\n/**\n * Mandatory Diagnostic Tool definition.\n * Claude Desktop silently hides the connector if it receives an empty array initially.\n */\nconst LIOP_MESH_STATUS_TOOL: ToolDefinition = {\n\tname: \"LiopMeshStatus\",\n\tdescription:\n\t\t\"LiopMeshStatus: Returns the current dynamic diagnostic status of the Zero-Trust Neural Mesh.\",\n\tinputSchema: {\n\t\ttype: \"object\",\n\t\tproperties: {},\n\t\tadditionalProperties: false,\n\t},\n};\n\n/**\n * Resolves a full libp2p multiaddr (with PeerID) from a LIOP node's\n * HTTP health endpoint.\n */\nasync function resolveBootstrapFromUrl(url: string): Promise<string | null> {\n\ttry {\n\t\tconst healthUrl = url.endsWith(\"/health\") ? url : `${url}/health`;\n\t\tconst response = await fetch(healthUrl, {\n\t\t\theaders: { Accept: \"application/json\" },\n\t\t\tsignal: AbortSignal.timeout(10000),\n\t\t});\n\t\tif (!response.ok) return null;\n\n\t\tconst data = (await response.json()) as {\n\t\t\tmesh?: { multiaddrs?: string[]; peerId?: string };\n\t\t};\n\t\tif (!data.mesh?.multiaddrs?.length || !data.mesh?.peerId) return null;\n\n\t\tconst tcpAddr = data.mesh.multiaddrs.find(\n\t\t\t(a: string) =>\n\t\t\t\ta.includes(\"/tcp/\") &&\n\t\t\t\t!a.includes(\"/ws\") &&\n\t\t\t\t!a.includes(\"/ip4/127.0.0.1/\"),\n\t\t);\n\t\tif (!tcpAddr) return null;\n\n\t\tlet resolved = shouldEnableDockerMap()\n\t\t\t? industrialAddressMapper(tcpAddr)\n\t\t\t: tcpAddr;\n\t\tif (!resolved || resolved === tcpAddr) {\n\t\t\tconst urlHost = new URL(url).hostname;\n\t\t\tresolved = tcpAddr.replace(/\\/ip4\\/[^/]+/, `/ip4/${urlHost}`);\n\t\t}\n\n\t\tif (!resolved) return null;\n\t\tresolved += resolved.includes(\"/p2p/\") ? \"\" : `/p2p/${data.mesh.peerId}`;\n\t\treturn resolved;\n\t} catch {\n\t\treturn null;\n\t}\n}\n\n/**\n * Normalizes a bootstrap multiaddr string to 127.0.0.1 for local Docker bridge resilience.\n */\nfunction normalizeBootstrap(addr: string): string {\n\tconst trimmed = addr.trim();\n\tconst dockerIpRegex =\n\t\t/\\/ip4\\/172\\.(1[6-9]|2[0-9]|3[0-1])\\.[0-9]{1,3}\\.[0-9]{1,3}/;\n\tconst loopbackRegex = /\\/ip4\\/127\\.0\\.0\\.1/;\n\tconst physicalIpRegex = /\\/ip4\\/192\\.168\\.[0-9]{1,3}\\.[0-9]{1,3}/;\n\n\tif (\n\t\tdockerIpRegex.test(trimmed) ||\n\t\tloopbackRegex.test(trimmed) ||\n\t\tphysicalIpRegex.test(trimmed)\n\t) {\n\t\tconst targetIp = \"127.0.0.1\";\n\t\tconst normalized = trimmed\n\t\t\t.replace(dockerIpRegex, `/ip4/${targetIp}`)\n\t\t\t.replace(loopbackRegex, `/ip4/${targetIp}`)\n\t\t\t.replace(physicalIpRegex, `/ip4/${targetIp}`);\n\n\t\tif (normalized !== trimmed) {\n\t\t\tlog.info(\n\t\t\t\t`[LIOP-Agent] 🔄 Local Routing Hack → Forced 127.0.0.1: ${normalized}`,\n\t\t\t);\n\t\t}\n\t\treturn normalized;\n\t}\n\n\treturn trimmed;\n}\n\n/**\n * Maps Docker-internal IPs to host-published ports for local environments.\n * Supports both legacy demo ports (13001-13005) and production tier ports (15001-15041).\n */\nfunction industrialAddressMapper(addr: string): string | null {\n\t// Production Multi-Tier Mappings\n\tif (addr.includes(\"/ip4/172.23.0.10\"))\n\t\treturn addr.replace(\n\t\t\t/\\/ip4\\/172\\.23\\.0\\.10\\/tcp\\/[0-9]+/,\n\t\t\t\"/ip4/127.0.0.1/tcp/15001\",\n\t\t);\n\tif (addr.includes(\"/ip4/172.23.0.20\"))\n\t\treturn addr.replace(\n\t\t\t/\\/ip4\\/172\\.23\\.0\\.20\\/tcp\\/[0-9]+/,\n\t\t\t\"/ip4/127.0.0.1/tcp/15011\",\n\t\t);\n\tif (addr.includes(\"/ip4/172.21.0.13\"))\n\t\treturn addr.replace(\n\t\t\t/\\/ip4\\/172\\.21\\.0\\.13\\/tcp\\/[0-9]+/,\n\t\t\t\"/ip4/127.0.0.1/tcp/15031\",\n\t\t);\n\tif (addr.includes(\"/ip4/172.21.0.14\"))\n\t\treturn addr.replace(\n\t\t\t/\\/ip4\\/172\\.21\\.0\\.14\\/tcp\\/[0-9]+/,\n\t\t\t\"/ip4/127.0.0.1/tcp/15041\",\n\t\t);\n\n\t// Legacy Demo Cluster Mappings\n\tif (addr.includes(\"/ip4/172.20.0.10\"))\n\t\treturn addr.replace(\n\t\t\t/\\/ip4\\/172\\.20\\.0\\.10\\/tcp\\/[0-9]+/,\n\t\t\t\"/ip4/127.0.0.1/tcp/13001\",\n\t\t);\n\tif (addr.includes(\"/ip4/172.20.0.11\"))\n\t\treturn addr.replace(\n\t\t\t/\\/ip4\\/172\\.20\\.0\\.11\\/tcp\\/[0-9]+/,\n\t\t\t\"/ip4/127.0.0.1/tcp/13003\",\n\t\t);\n\tif (addr.includes(\"/ip4/172.20.0.12\"))\n\t\treturn addr.replace(\n\t\t\t/\\/ip4\\/172\\.20\\.0\\.12\\/tcp\\/[0-9]+/,\n\t\t\t\"/ip4/127.0.0.1/tcp/13004\",\n\t\t);\n\tif (addr.includes(\"/ip4/172.20.0.13\"))\n\t\treturn addr.replace(\n\t\t\t/\\/ip4\\/172\\.20\\.0\\.13\\/tcp\\/[0-9]+/,\n\t\t\t\"/ip4/127.0.0.1/tcp/13005\",\n\t\t);\n\n\t// Drop container-internal loopbacks\n\tif (\n\t\taddr.includes(\"/ip4/127.0.0.1/tcp/4000\") ||\n\t\taddr.includes(\"/ip4/127.0.0.1/tcp/3000\")\n\t) {\n\t\treturn null;\n\t}\n\n\treturn addr;\n}\n\nfunction isDockerDemoHost(urlStr: string): boolean {\n\ttry {\n\t\tconst u = new URL(urlStr);\n\t\treturn (\n\t\t\t(u.hostname === \"127.0.0.1\" || u.hostname === \"localhost\") &&\n\t\t\t(u.port === \"13000\" ||\n\t\t\t\tu.port === \"13001\" ||\n\t\t\t\tu.port === \"15000\" ||\n\t\t\t\tu.port === \"15018\")\n\t\t);\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nfunction shouldEnableDockerMap(): boolean {\n\treturn (\n\t\tprocess.env.NODE_ENV === \"development\" ||\n\t\tprocess.env.NODE_ENV === \"test\" ||\n\t\tprocess.env.LIOP_DOCKER_MAP === \"true\" ||\n\t\tprocess.env.LIOP_DEV_MODE === \"true\" ||\n\t\t(!!process.env.LIOP_NEXUS_URL &&\n\t\t\tisDockerDemoHost(process.env.LIOP_NEXUS_URL))\n\t);\n}\n\n/**\n * Discovers P2P bootstrap nodes through physical beacons, env vars, and URL discovery.\n */\nasync function resolveBootstrapNodes(liopDir: string): Promise<string[]> {\n\tlet bootstrapNodes: string[] = [];\n\tconst args = process.argv.slice(2);\n\tif (args.length > 0) {\n\t\tbootstrapNodes = args.filter((a) => a.startsWith(\"/\"));\n\t}\n\n\tif (bootstrapNodes.length === 0) {\n\t\tconst searchDirs = [\n\t\t\tprocess.cwd(),\n\t\t\tpath.join(process.cwd(), \"tests/infra/nexus-data\"),\n\t\t\tliopDir,\n\t\t\tpath.join(\n\t\t\t\tpath\n\t\t\t\t\t.dirname(new URL(import.meta.url).pathname)\n\t\t\t\t\t.replace(/^\\/([A-Z]:)/, \"$1\"),\n\t\t\t\t\"../../tests/infra/nexus-data\",\n\t\t\t),\n\t\t];\n\n\t\tfor (const dir of searchDirs) {\n\t\t\ttry {\n\t\t\t\tif (fs.existsSync(dir)) {\n\t\t\t\t\tconst files = fs.readdirSync(dir);\n\t\t\t\t\tconst multiaddrFiles = files.filter((f) => f.endsWith(\".multiaddr\"));\n\n\t\t\t\t\tfor (const file of multiaddrFiles) {\n\t\t\t\t\t\tconst filePath = path.join(dir, file);\n\t\t\t\t\t\tconst addr = fs.readFileSync(filePath, \"utf8\").trim();\n\t\t\t\t\t\tif (addr) {\n\t\t\t\t\t\t\tconst normalized = normalizeBootstrap(addr);\n\t\t\t\t\t\t\tif (!bootstrapNodes.includes(normalized)) {\n\t\t\t\t\t\t\t\tbootstrapNodes.push(normalized);\n\t\t\t\t\t\t\t\tlog.info(`[LIOP-Agent] ✅ Loaded beacon: ${file} from ${dir}`);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (bootstrapNodes.length > 0) break;\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\t/* ignore */\n\t\t\t}\n\t\t}\n\t}\n\n\tif (process.env.LIOP_NEXUS_URL) {\n\t\tconst nexusUrl = process.env.LIOP_NEXUS_URL;\n\t\tconst resolved = await resolveBootstrapFromUrl(nexusUrl);\n\t\tif (resolved) {\n\t\t\tconst normalized = normalizeBootstrap(resolved);\n\t\t\tif (!bootstrapNodes.includes(normalized)) {\n\t\t\t\tbootstrapNodes.push(normalized);\n\t\t\t\tlog.info(\n\t\t\t\t\t`[LIOP-Agent] ✅ Added bootstrap from URL discovery: ${normalized}`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (bootstrapNodes.length === 0 && process.env.LIOP_BOOTSTRAP) {\n\t\tbootstrapNodes.push(process.env.LIOP_BOOTSTRAP.trim());\n\t}\n\n\treturn bootstrapNodes.filter((addr) => {\n\t\ttry {\n\t\t\tmultiaddr(addr);\n\t\t\treturn true;\n\t\t} catch {\n\t\t\treturn false;\n\t\t}\n\t});\n}\n\n/**\n * Dispatches an MCP request to an HTTP Gateway (BLG) with automatic token negotiation.\n */\nasync function forwardToGateway(\n\tmcpEndpoint: string,\n\trequest: McpRequest,\n\ttokenManager: TokenManager,\n): Promise<McpResponse> {\n\tconst send = async (token?: string) => {\n\t\tconst headers: Record<string, string> = {\n\t\t\t\"Content-Type\": \"application/json\",\n\t\t};\n\t\tif (token) {\n\t\t\theaders.Authorization = `Bearer ${token}`;\n\t\t}\n\t\tif (request.method) {\n\t\t\theaders[\"Mcp-Method\"] = request.method;\n\t\t}\n\t\tconst params = request.params as { name?: string } | undefined;\n\t\tif (params?.name) {\n\t\t\theaders[\"Mcp-Name\"] = params.name;\n\t\t}\n\n\t\treturn await fetch(mcpEndpoint, {\n\t\t\tmethod: \"POST\",\n\t\t\theaders,\n\t\t\tbody: JSON.stringify(request),\n\t\t\tsignal: AbortSignal.timeout(30000),\n\t\t});\n\t};\n\n\tlet token: string | undefined;\n\ttry {\n\t\ttoken = await tokenManager.getToken();\n\t} catch (err) {\n\t\tlog.warn(\n\t\t\t`[LIOP-Agent] Token acquisition warning: ${err instanceof Error ? err.message : String(err)}`,\n\t\t);\n\t}\n\n\tlet response = await send(token);\n\n\t// If 401 Unauthorized, invalidate token and retry once\n\tif (response.status === 401 && token) {\n\t\tlog.info(\n\t\t\t\"[LIOP-Agent] 🔄 401 received from Gateway. Refreshing token and retrying...\",\n\t\t);\n\t\ttokenManager.invalidate();\n\t\ttry {\n\t\t\ttoken = await tokenManager.getToken();\n\t\t\tresponse = await send(token);\n\t\t} catch {\n\t\t\t/* fallback to original error handling */\n\t\t}\n\t}\n\n\tif (!response.ok) {\n\t\tconst errorBody = await response.text();\n\t\tlet parsedError: Record<string, unknown> | null = null;\n\t\ttry {\n\t\t\tparsedError = JSON.parse(errorBody);\n\t\t} catch {\n\t\t\t// not json\n\t\t}\n\n\t\tconst errorObj = parsedError?.error as\n\t\t\t| { code?: number; message?: string }\n\t\t\t| undefined;\n\t\treturn {\n\t\t\tjsonrpc: \"2.0\",\n\t\t\tid: request.id,\n\t\t\terror: {\n\t\t\t\tcode: errorObj?.code ?? -32603,\n\t\t\t\tmessage:\n\t\t\t\t\terrorObj?.message ??\n\t\t\t\t\t`Gateway returned HTTP ${response.status}: ${errorBody}`,\n\t\t\t},\n\t\t};\n\t}\n\n\treturn (await response.json()) as McpResponse;\n}\n\n/**\n * Operates in Mode 1: GATEWAY MODE.\n * Ultra-lightweight, sub-50ms startup, zero libp2p overhead.\n */\nasync function runGatewayMode(\n\tgateway: GatewayTopologyInfo,\n\ttokenManager: TokenManager,\n\troutingTable: RoutingTable,\n) {\n\tlog.info(\n\t\t`[LIOP-Agent] 🛡️ Running in ADAPTIVE GATEWAY MODE -> ${gateway.mcpEndpoint}`,\n\t);\n\n\t// Register known initial tools\n\troutingTable.registerLocalTool(LIOP_MESH_STATUS_TOOL);\n\troutingTable.registerGatewayTools(\n\t\tgateway.tools.map((t) => ({ name: t })),\n\t\tgateway.mcpEndpoint,\n\t);\n\n\t// Periodic tool refresh from /health to notify Claude of any changes\n\tlet lastToolCount = gateway.tools.length;\n\tconst pollInterval = setInterval(async () => {\n\t\ttry {\n\t\t\tconst res = await fetch(gateway.healthEndpoint, {\n\t\t\t\theaders: { Accept: \"application/json\" },\n\t\t\t\tsignal: AbortSignal.timeout(4000),\n\t\t\t});\n\t\t\tif (res.ok) {\n\t\t\t\tconst data = (await res.json()) as { tools?: string[] };\n\t\t\t\tif (data.tools && data.tools.length !== lastToolCount) {\n\t\t\t\t\tlog.info(\n\t\t\t\t\t\t`[LIOP-Agent] Gateway tools topology updated (${lastToolCount} -> ${data.tools.length})`,\n\t\t\t\t\t);\n\t\t\t\t\tlastToolCount = data.tools.length;\n\t\t\t\t\troutingTable.registerGatewayTools(\n\t\t\t\t\t\tdata.tools.map((t) => ({ name: t })),\n\t\t\t\t\t\tgateway.mcpEndpoint,\n\t\t\t\t\t);\n\t\t\t\t\tprocess.stdout.write(\n\t\t\t\t\t\t`{\"jsonrpc\":\"2.0\",\"method\":\"notifications/tools/list_changed\"}\\n`,\n\t\t\t\t\t);\n\t\t\t\t\tprocess.stdout.write(\n\t\t\t\t\t\t`{\"jsonrpc\":\"2.0\",\"method\":\"notifications/resources/list_changed\"}\\n`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} catch {\n\t\t\t// ignore polling errors\n\t\t}\n\t}, 15000);\n\n\tconst rl = readline.createInterface({\n\t\tinput: process.stdin,\n\t\tterminal: false,\n\t});\n\n\tprocess.stdout.on(\"error\", (err: Error & { code?: string }) => {\n\t\tif (err.code === \"EPIPE\") {\n\t\t\tclearInterval(pollInterval);\n\t\t\tprocess.exit(0);\n\t\t}\n\t});\n\n\trl.on(\"line\", async (line) => {\n\t\tconst trimmed = line.trim();\n\t\tif (!trimmed) return;\n\n\t\tlet request: McpRequest;\n\t\ttry {\n\t\t\trequest = JSON.parse(trimmed);\n\t\t} catch {\n\t\t\treturn;\n\t\t}\n\n\t\tconst { id, method } = request;\n\n\t\tif (method === \"server/discover\") {\n\t\t\tconst discoverResponse: McpResponse = {\n\t\t\t\tjsonrpc: \"2.0\",\n\t\t\t\tid,\n\t\t\t\tresult: {\n\t\t\t\t\tresultType: \"complete\",\n\t\t\t\t\tsupportedVersions: [\"2026-07-28\", \"2025-11-25\"],\n\t\t\t\t\tcapabilities: {\n\t\t\t\t\t\ttools: { listChanged: true },\n\t\t\t\t\t\tresources: { listChanged: true, subscribe: true },\n\t\t\t\t\t\tprompts: { listChanged: true },\n\t\t\t\t\t},\n\t\t\t\t\tserverInfo: {\n\t\t\t\t\t\tname: \"liop-adaptive-agent\",\n\t\t\t\t\t\tversion: \"2.5.0\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t};\n\t\t\tprocess.stdout.write(`${JSON.stringify(discoverResponse)}\\n`);\n\t\t\treturn;\n\t\t}\n\n\t\tif (method === \"initialize\") {\n\t\t\tconst clientVersion =\n\t\t\t\t(\n\t\t\t\t\trequest.params as {\n\t\t\t\t\t\tprotocolVersion?: string;\n\t\t\t\t\t\t_meta?: { \"io.modelcontextprotocol/protocolVersion\"?: string };\n\t\t\t\t\t}\n\t\t\t\t)?.protocolVersion ??\n\t\t\t\t(\n\t\t\t\t\trequest.params as {\n\t\t\t\t\t\t_meta?: { \"io.modelcontextprotocol/protocolVersion\"?: string };\n\t\t\t\t\t}\n\t\t\t\t)?._meta?.[\"io.modelcontextprotocol/protocolVersion\"];\n\t\t\tconst protocolVersion =\n\t\t\t\tclientVersion === \"2026-07-28\" ? \"2026-07-28\" : \"2025-11-25\";\n\n\t\t\tconst initResponse: McpResponse = {\n\t\t\t\tjsonrpc: \"2.0\",\n\t\t\t\tid,\n\t\t\t\tresult: {\n\t\t\t\t\tprotocolVersion,\n\t\t\t\t\tcapabilities: {\n\t\t\t\t\t\ttools: { listChanged: true },\n\t\t\t\t\t\tresources: { listChanged: true, subscribe: true },\n\t\t\t\t\t\tprompts: { listChanged: true },\n\t\t\t\t\t},\n\t\t\t\t\tserverInfo: {\n\t\t\t\t\t\tname: \"liop-adaptive-agent\",\n\t\t\t\t\t\tversion: \"2.5.0\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t};\n\t\t\tprocess.stdout.write(`${JSON.stringify(initResponse)}\\n`);\n\t\t\treturn;\n\t\t}\n\n\t\tif (\n\t\t\tmethod === \"notifications/initialized\" ||\n\t\t\tmethod === \"notifications/cancelled\"\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (method === \"ping\") {\n\t\t\tprocess.stdout.write(\n\t\t\t\t`${JSON.stringify({ jsonrpc: \"2.0\", id, result: {} })}\\n`,\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tif (method === \"resources/templates/list\") {\n\t\t\tconst templatesResponse: McpResponse = {\n\t\t\t\tjsonrpc: \"2.0\",\n\t\t\t\tid,\n\t\t\t\tresult: {\n\t\t\t\t\tresultType: \"complete\",\n\t\t\t\t\tttlMs: 300_000,\n\t\t\t\t\tcacheScope: \"public\",\n\t\t\t\t\tresourceTemplates: [],\n\t\t\t\t},\n\t\t\t};\n\t\t\tprocess.stdout.write(`${JSON.stringify(templatesResponse)}\\n`);\n\t\t\treturn;\n\t\t}\n\n\t\tif (method === \"subscriptions/listen\") {\n\t\t\tconst listenResponse: McpResponse = {\n\t\t\t\tjsonrpc: \"2.0\",\n\t\t\t\tid,\n\t\t\t\tresult: {\n\t\t\t\t\tresultType: \"complete\",\n\t\t\t\t},\n\t\t\t};\n\t\t\tprocess.stdout.write(`${JSON.stringify(listenResponse)}\\n`);\n\t\t\treturn;\n\t\t}\n\n\t\tif (method === \"tools/call\") {\n\t\t\tconst params = request.params as\n\t\t\t\t| { name?: string; arguments?: Record<string, unknown> }\n\t\t\t\t| undefined;\n\t\t\tif (params?.name === \"LiopMeshStatus\") {\n\t\t\t\tconst statusResponse: McpResponse = {\n\t\t\t\t\tjsonrpc: \"2.0\",\n\t\t\t\t\tid,\n\t\t\t\t\tresult: {\n\t\t\t\t\t\tcontent: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\t\t\ttext: JSON.stringify({\n\t\t\t\t\t\t\t\t\tmode: \"adaptive-gateway\",\n\t\t\t\t\t\t\t\t\tgatewayUrl: gateway.baseUrl,\n\t\t\t\t\t\t\t\t\ttier: gateway.tier,\n\t\t\t\t\t\t\t\t\ttoolsAvailable: routingTable.getAllToolDefinitions().length,\n\t\t\t\t\t\t\t\t\tauthenticated: true,\n\t\t\t\t\t\t\t\t\tstatus: \"ONLINE\",\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t\tprocess.stdout.write(`${JSON.stringify(statusResponse)}\\n`);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\ttry {\n\t\t\tconst response = await forwardToGateway(\n\t\t\t\tgateway.mcpEndpoint,\n\t\t\t\trequest,\n\t\t\t\ttokenManager,\n\t\t\t);\n\n\t\t\t// Inject LiopMeshStatus into tools/list if gateway does not list it\n\t\t\tif (\n\t\t\t\tmethod === \"tools/list\" &&\n\t\t\t\tresponse.result &&\n\t\t\t\ttypeof response.result === \"object\"\n\t\t\t) {\n\t\t\t\tconst resObj = response.result as Record<string, unknown>;\n\t\t\t\tconst toolsList = resObj.tools as ToolDefinition[] | undefined;\n\t\t\t\tif (Array.isArray(toolsList)) {\n\t\t\t\t\tconst hasStatus = toolsList.some((t) => t.name === \"LiopMeshStatus\");\n\t\t\t\t\tif (!hasStatus) {\n\t\t\t\t\t\ttoolsList.unshift(LIOP_MESH_STATUS_TOOL);\n\t\t\t\t\t}\n\t\t\t\t\t// Update routing table with descriptions and schemas\n\t\t\t\t\troutingTable.registerGatewayTools(toolsList, gateway.mcpEndpoint);\n\t\t\t\t}\n\n\t\t\t\tif (!isLegacyRequest(request)) {\n\t\t\t\t\tif (!resObj.resultType) {\n\t\t\t\t\t\tresObj.resultType = \"complete\";\n\t\t\t\t\t}\n\t\t\t\t\tif (!resObj.ttlMs) {\n\t\t\t\t\t\tresObj.ttlMs = 300_000;\n\t\t\t\t\t}\n\t\t\t\t\tif (!resObj.cacheScope) {\n\t\t\t\t\t\tresObj.cacheScope = \"public\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tprocess.stdout.write(`${JSON.stringify(response)}\\n`);\n\t\t} catch (err) {\n\t\t\t// Fallback resilience for tools/list\n\t\t\tif (method === \"tools/list\") {\n\t\t\t\tconst isLegacy = isLegacyRequest(request);\n\t\t\t\tconst fallbackResult = isLegacy\n\t\t\t\t\t? { tools: routingTable.getAllToolDefinitions() }\n\t\t\t\t\t: {\n\t\t\t\t\t\t\tresultType: \"complete\",\n\t\t\t\t\t\t\tttlMs: 300_000,\n\t\t\t\t\t\t\tcacheScope: \"public\",\n\t\t\t\t\t\t\ttools: routingTable.getAllToolDefinitions(),\n\t\t\t\t\t\t};\n\t\t\t\tconst fallbackResponse: McpResponse = {\n\t\t\t\t\tjsonrpc: \"2.0\",\n\t\t\t\t\tid,\n\t\t\t\t\tresult: fallbackResult,\n\t\t\t\t};\n\t\t\t\tprocess.stdout.write(`${JSON.stringify(fallbackResponse)}\\n`);\n\t\t\t} else {\n\t\t\t\tconst errResponse: McpResponse = {\n\t\t\t\t\tjsonrpc: \"2.0\",\n\t\t\t\t\tid,\n\t\t\t\t\terror: {\n\t\t\t\t\t\tcode: -32603,\n\t\t\t\t\t\tmessage: `Forwarding failed: ${err instanceof Error ? err.message : String(err)}`,\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t\tprocess.stdout.write(`${JSON.stringify(errResponse)}\\n`);\n\t\t\t}\n\t\t}\n\t});\n\n\trl.on(\"close\", () => {\n\t\tclearInterval(pollInterval);\n\t\tprocess.exit(0);\n\t});\n}\n\n/**\n * Operates in Mode 2: MESH MODE.\n * Preserves full libp2p Kademlia DHT P2P discovery for decentralized environments.\n */\nasync function runMeshMode(mesh: MeshTopologyInfo) {\n\tlog.info(\n\t\t`[LIOP-Agent] 🌐 Running in P2P MESH MODE (${mesh.bootstrapNodes.length} bootstraps)`,\n\t);\n\n\tconst liopServer = new LiopServer({\n\t\tname: \"@nekzus/liop\",\n\t\tversion: \"2.5.0\",\n\t});\n\tliopServer.enableZeroShotAutonomy();\n\n\tconst meshNode = new MeshNode({\n\t\tidentityPath: mesh.identityPath,\n\t\tbootstrapNodes: mesh.bootstrapNodes,\n\t\taddressMapper: shouldEnableDockerMap()\n\t\t\t? industrialAddressMapper\n\t\t\t: undefined,\n\t});\n\n\tawait meshNode.start();\n\tconst router = new LiopMcpRouter(liopServer, meshNode);\n\n\trouter.onToolsChanged = () => {\n\t\tprocess.stdout.write(\n\t\t\t`{\"jsonrpc\":\"2.0\",\"method\":\"notifications/tools/list_changed\"}\\n`,\n\t\t);\n\t\tprocess.stdout.write(\n\t\t\t`{\"jsonrpc\":\"2.0\",\"method\":\"notifications/resources/list_changed\"}\\n`,\n\t\t);\n\t};\n\n\tsetTimeout(() => {\n\t\trouter.refreshManifestCache(true).catch(() => {});\n\t}, 2000);\n\n\tconst POLL_BASE_MS = 10_000;\n\tconst POLL_MAX_MS = 120_000;\n\tlet pollIntervalMs = POLL_BASE_MS;\n\n\tconst scheduleAdaptivePoll = () => {\n\t\tsetTimeout(async () => {\n\t\t\tconst prevSize = router.getCacheSize();\n\t\t\tawait router.refreshManifestCache(true).catch(() => {});\n\t\t\tconst newSize = router.getCacheSize();\n\n\t\t\tif (newSize !== prevSize) {\n\t\t\t\tpollIntervalMs = POLL_BASE_MS;\n\t\t\t} else {\n\t\t\t\tpollIntervalMs = Math.min(\n\t\t\t\t\tMath.round(pollIntervalMs * 1.5),\n\t\t\t\t\tPOLL_MAX_MS,\n\t\t\t\t);\n\t\t\t}\n\t\t\tscheduleAdaptivePoll();\n\t\t}, pollIntervalMs);\n\t};\n\tscheduleAdaptivePoll();\n\n\tconst rl = readline.createInterface({\n\t\tinput: process.stdin,\n\t\tterminal: false,\n\t});\n\n\tprocess.stdout.on(\"error\", (err: Error & { code?: string }) => {\n\t\tif (err.code === \"EPIPE\") process.exit(0);\n\t});\n\n\trl.on(\"line\", async (line) => {\n\t\tconst trimmed = line.trim();\n\t\tif (!trimmed) return;\n\n\t\ttry {\n\t\t\tconst request = JSON.parse(trimmed) as McpRequest;\n\t\t\tif (request.method) {\n\t\t\t\tconst response = await router.dispatch(request);\n\t\t\t\tif (response) {\n\t\t\t\t\tprocess.stdout.write(`${JSON.stringify(response)}\\n`);\n\t\t\t\t}\n\t\t\t}\n\t\t} catch {\n\t\t\t/* ignore malformed lines */\n\t\t}\n\t});\n\n\trl.on(\"close\", () => process.exit(0));\n\tprocess.on(\"SIGINT\", async () => {\n\t\tawait meshNode.stop();\n\t\tprocess.exit(0);\n\t});\n}\n\n/**\n * Operates in Mode 3: HYBRID MODE.\n * Serves tools via Gateway and Mesh concurrently with per-tool dynamic routing.\n */\nasync function runHybridMode(\n\ttopology: TopologyProbeResult,\n\ttokenManager: TokenManager,\n\troutingTable: RoutingTable,\n) {\n\tconst gateway = topology.gateway;\n\tconst mesh = topology.mesh;\n\tif (!gateway || !mesh) {\n\t\tif (gateway) return runGatewayMode(gateway, tokenManager, routingTable);\n\t\tif (mesh) return runMeshMode(mesh);\n\t\treturn;\n\t}\n\n\tlog.info(\n\t\t`[LIOP-Agent] ⚡ Running in HYBRID MODE (Gateway: ${gateway.baseUrl} + Mesh P2P)`,\n\t);\n\n\t// Setup Gateway tools immediately for fast startup\n\troutingTable.registerLocalTool(LIOP_MESH_STATUS_TOOL);\n\troutingTable.registerGatewayTools(\n\t\tgateway.tools.map((t) => ({ name: t })),\n\t\tgateway.mcpEndpoint,\n\t);\n\n\t// Start P2P Mesh in background (Lazy Initialization)\n\tlet meshNode: MeshNode | null = null;\n\tlet router: LiopMcpRouter | null = null;\n\n\tconst initMeshPromise = (async () => {\n\t\ttry {\n\t\t\tconst liopServer = new LiopServer({\n\t\t\t\tname: \"@nekzus/liop-hybrid\",\n\t\t\t\tversion: \"2.5.0\",\n\t\t\t});\n\t\t\tliopServer.enableZeroShotAutonomy();\n\n\t\t\tmeshNode = new MeshNode({\n\t\t\t\tidentityPath: mesh.identityPath,\n\t\t\t\tbootstrapNodes: mesh.bootstrapNodes,\n\t\t\t\taddressMapper: shouldEnableDockerMap()\n\t\t\t\t\t? industrialAddressMapper\n\t\t\t\t\t: undefined,\n\t\t\t});\n\t\t\tawait meshNode.start();\n\t\t\trouter = new LiopMcpRouter(liopServer, meshNode);\n\n\t\t\trouter.onToolsChanged = () => {\n\t\t\t\tprocess.stdout.write(\n\t\t\t\t\t`{\"jsonrpc\":\"2.0\",\"method\":\"notifications/tools/list_changed\"}\\n`,\n\t\t\t\t);\n\t\t\t\tprocess.stdout.write(\n\t\t\t\t\t`{\"jsonrpc\":\"2.0\",\"method\":\"notifications/resources/list_changed\"}\\n`,\n\t\t\t\t);\n\t\t\t};\n\n\t\t\tawait router.refreshManifestCache(true).catch(() => {});\n\t\t\tlog.info(\"[LIOP-Agent] ✅ Background P2P Mesh initialization completed.\");\n\t\t} catch (err) {\n\t\t\tlog.warn(\n\t\t\t\t`[LIOP-Agent] Background Mesh init warning: ${err instanceof Error ? err.message : String(err)}`,\n\t\t\t);\n\t\t}\n\t})();\n\n\tconst rl = readline.createInterface({\n\t\tinput: process.stdin,\n\t\tterminal: false,\n\t});\n\n\tprocess.stdout.on(\"error\", (err: Error & { code?: string }) => {\n\t\tif (err.code === \"EPIPE\") process.exit(0);\n\t});\n\n\trl.on(\"line\", async (line) => {\n\t\tconst trimmed = line.trim();\n\t\tif (!trimmed) return;\n\n\t\tlet request: McpRequest;\n\t\ttry {\n\t\t\trequest = JSON.parse(trimmed);\n\t\t} catch {\n\t\t\treturn;\n\t\t}\n\n\t\tconst { id, method } = request;\n\n\t\tif (method === \"server/discover\") {\n\t\t\tconst discoverResponse: McpResponse = {\n\t\t\t\tjsonrpc: \"2.0\",\n\t\t\t\tid,\n\t\t\t\tresult: {\n\t\t\t\t\tresultType: \"complete\",\n\t\t\t\t\tsupportedVersions: [\"2026-07-28\", \"2025-11-25\"],\n\t\t\t\t\tcapabilities: {\n\t\t\t\t\t\ttools: { listChanged: true },\n\t\t\t\t\t\tresources: { listChanged: true, subscribe: true },\n\t\t\t\t\t\tprompts: { listChanged: true },\n\t\t\t\t\t},\n\t\t\t\t\tserverInfo: {\n\t\t\t\t\t\tname: \"liop-hybrid-agent\",\n\t\t\t\t\t\tversion: \"2.5.0\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t};\n\t\t\tprocess.stdout.write(`${JSON.stringify(discoverResponse)}\\n`);\n\t\t\treturn;\n\t\t}\n\n\t\tif (method === \"initialize\") {\n\t\t\tconst clientVersion =\n\t\t\t\t(\n\t\t\t\t\trequest.params as {\n\t\t\t\t\t\tprotocolVersion?: string;\n\t\t\t\t\t\t_meta?: { \"io.modelcontextprotocol/protocolVersion\"?: string };\n\t\t\t\t\t}\n\t\t\t\t)?.protocolVersion ??\n\t\t\t\t(\n\t\t\t\t\trequest.params as {\n\t\t\t\t\t\t_meta?: { \"io.modelcontextprotocol/protocolVersion\"?: string };\n\t\t\t\t\t}\n\t\t\t\t)?._meta?.[\"io.modelcontextprotocol/protocolVersion\"];\n\t\t\tconst protocolVersion =\n\t\t\t\tclientVersion === \"2026-07-28\" ? \"2026-07-28\" : \"2025-11-25\";\n\n\t\t\tconst initResponse: McpResponse = {\n\t\t\t\tjsonrpc: \"2.0\",\n\t\t\t\tid,\n\t\t\t\tresult: {\n\t\t\t\t\tprotocolVersion,\n\t\t\t\t\tcapabilities: {\n\t\t\t\t\t\ttools: { listChanged: true },\n\t\t\t\t\t\tresources: { listChanged: true, subscribe: true },\n\t\t\t\t\t\tprompts: { listChanged: true },\n\t\t\t\t\t},\n\t\t\t\t\tserverInfo: {\n\t\t\t\t\t\tname: \"liop-hybrid-agent\",\n\t\t\t\t\t\tversion: \"2.5.0\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t};\n\t\t\tprocess.stdout.write(`${JSON.stringify(initResponse)}\\n`);\n\t\t\treturn;\n\t\t}\n\n\t\tif (\n\t\t\tmethod === \"notifications/initialized\" ||\n\t\t\tmethod === \"notifications/cancelled\"\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (method === \"ping\") {\n\t\t\tprocess.stdout.write(\n\t\t\t\t`${JSON.stringify({ jsonrpc: \"2.0\", id, result: {} })}\\n`,\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tif (method === \"resources/templates/list\") {\n\t\t\tconst templatesResponse: McpResponse = {\n\t\t\t\tjsonrpc: \"2.0\",\n\t\t\t\tid,\n\t\t\t\tresult: {\n\t\t\t\t\tresultType: \"complete\",\n\t\t\t\t\tttlMs: 300_000,\n\t\t\t\t\tcacheScope: \"public\",\n\t\t\t\t\tresourceTemplates: [],\n\t\t\t\t},\n\t\t\t};\n\t\t\tprocess.stdout.write(`${JSON.stringify(templatesResponse)}\\n`);\n\t\t\treturn;\n\t\t}\n\n\t\tif (method === \"subscriptions/listen\") {\n\t\t\tconst listenResponse: McpResponse = {\n\t\t\t\tjsonrpc: \"2.0\",\n\t\t\t\tid,\n\t\t\t\tresult: {\n\t\t\t\t\tresultType: \"complete\",\n\t\t\t\t},\n\t\t\t};\n\t\t\tprocess.stdout.write(`${JSON.stringify(listenResponse)}\\n`);\n\t\t\treturn;\n\t\t}\n\n\t\tif (method === \"tools/call\") {\n\t\t\tconst params = request.params as\n\t\t\t\t| { name?: string; arguments?: Record<string, unknown> }\n\t\t\t\t| undefined;\n\t\t\tconst toolName = params?.name || \"\";\n\n\t\t\tconst route = routingTable.resolve(toolName);\n\t\t\tif (route?.provider === \"http-gateway\") {\n\t\t\t\tconst start = Date.now();\n\t\t\t\ttry {\n\t\t\t\t\tconst res = await forwardToGateway(\n\t\t\t\t\t\tgateway.mcpEndpoint,\n\t\t\t\t\t\trequest,\n\t\t\t\t\t\ttokenManager,\n\t\t\t\t\t);\n\t\t\t\t\troutingTable.recordSuccess(toolName, Date.now() - start);\n\t\t\t\t\tprocess.stdout.write(`${JSON.stringify(res)}\\n`);\n\t\t\t\t\treturn;\n\t\t\t\t} catch (_err) {\n\t\t\t\t\troutingTable.recordFailure(toolName);\n\t\t\t\t\tlog.warn(\n\t\t\t\t\t\t`[LIOP-Agent] Gateway call failed for '${toolName}'. Checking P2P fallback...`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// P2P fallback or native P2P route\n\t\t\tawait initMeshPromise;\n\t\t\tif (router) {\n\t\t\t\tconst res = await router.dispatch(request);\n\t\t\t\tif (res) process.stdout.write(`${JSON.stringify(res)}\\n`);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\t// By default, query gateway for tools/list and combine with mesh\n\t\tif (method === \"tools/list\") {\n\t\t\tlet gatewayTools: ToolDefinition[] = [];\n\t\t\ttry {\n\t\t\t\tconst gwRes = await forwardToGateway(\n\t\t\t\t\tgateway.mcpEndpoint,\n\t\t\t\t\trequest,\n\t\t\t\t\ttokenManager,\n\t\t\t\t);\n\t\t\t\tconst resObj = gwRes.result as { tools?: ToolDefinition[] } | undefined;\n\t\t\t\tif (Array.isArray(resObj?.tools)) {\n\t\t\t\t\tgatewayTools = resObj.tools;\n\t\t\t\t\troutingTable.registerGatewayTools(gatewayTools, gateway.mcpEndpoint);\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\tgatewayTools = routingTable.getAllToolDefinitions();\n\t\t\t}\n\n\t\t\tlet meshTools: ToolDefinition[] = [];\n\t\t\tif (router) {\n\t\t\t\tconst meshRes = await router.dispatch(request);\n\t\t\t\tconst meshObj = meshRes?.result as\n\t\t\t\t\t| { tools?: ToolDefinition[] }\n\t\t\t\t\t| undefined;\n\t\t\t\tif (Array.isArray(meshObj?.tools)) {\n\t\t\t\t\tmeshTools = meshObj.tools;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Merge distinct tools\n\t\t\tconst toolMap = new Map<string, ToolDefinition>();\n\t\t\ttoolMap.set(\"LiopMeshStatus\", LIOP_MESH_STATUS_TOOL);\n\t\t\tfor (const t of gatewayTools) toolMap.set(t.name, t);\n\t\t\tfor (const t of meshTools)\n\t\t\t\tif (!toolMap.has(t.name)) toolMap.set(t.name, t);\n\n\t\t\tconst merged = Array.from(toolMap.values()).sort((a, b) =>\n\t\t\t\ta.name.localeCompare(b.name),\n\t\t\t);\n\n\t\t\tconst isLegacy = isLegacyRequest(request);\n\t\t\tconst toolsResult = isLegacy\n\t\t\t\t? { tools: merged }\n\t\t\t\t: {\n\t\t\t\t\t\tresultType: \"complete\",\n\t\t\t\t\t\tttlMs: 300_000,\n\t\t\t\t\t\tcacheScope: \"public\",\n\t\t\t\t\t\ttools: merged,\n\t\t\t\t\t};\n\n\t\t\tprocess.stdout.write(\n\t\t\t\t`${JSON.stringify({ jsonrpc: \"2.0\", id, result: toolsResult })}\\n`,\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\t// Other methods forward to gateway first, then mesh\n\t\ttry {\n\t\t\tconst res = await forwardToGateway(\n\t\t\t\tgateway.mcpEndpoint,\n\t\t\t\trequest,\n\t\t\t\ttokenManager,\n\t\t\t);\n\t\t\tif (\n\t\t\t\t!isLegacyRequest(request) &&\n\t\t\t\tres.result &&\n\t\t\t\ttypeof res.result === \"object\"\n\t\t\t) {\n\t\t\t\tconst resObj = res.result as Record<string, unknown>;\n\t\t\t\tif (!resObj.resultType) {\n\t\t\t\t\tresObj.resultType = \"complete\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tprocess.stdout.write(`${JSON.stringify(res)}\\n`);\n\t\t} catch {\n\t\t\tawait initMeshPromise;\n\t\t\tif (router) {\n\t\t\t\tconst res = await router.dispatch(request);\n\t\t\t\tif (res) process.stdout.write(`${JSON.stringify(res)}\\n`);\n\t\t\t}\n\t\t}\n\t});\n\n\trl.on(\"close\", async () => {\n\t\tif (meshNode) await meshNode.stop();\n\t\tprocess.exit(0);\n\t});\n}\n\n/**\n * Main Entry Point\n */\nasync function main() {\n\t// Auto-Relaunch: Ensure system CA certificates are loaded for TLS compatibility\n\tif (\n\t\t(process.platform === \"win32\" || process.platform === \"darwin\") &&\n\t\t!process.execArgv.includes(\"--use-system-ca\") &&\n\t\t!(process.env.NODE_OPTIONS ?? \"\").includes(\"--use-system-ca\")\n\t) {\n\t\tconst { spawn } = await import(\"node:child_process\");\n\t\tconst child = spawn(\n\t\t\tprocess.execPath,\n\t\t\t[\"--use-system-ca\", ...process.argv.slice(1)],\n\t\t\t{ stdio: \"inherit\", env: process.env },\n\t\t);\n\t\tchild.on(\"exit\", (code) => process.exit(code ?? 1));\n\t\tchild.on(\"error\", () => process.exit(1));\n\t\tawait new Promise(() => {});\n\t\treturn;\n\t}\n\n\tconst buildTime = new Date().toISOString();\n\tlog.info(\n\t\t`[LIOP-Agent] 🚀 Version 2.5.0 (Adaptive Zero-Config) | Build: ${buildTime}`,\n\t);\n\n\tconst liopDir = path.join(os.homedir(), \".liop\");\n\tconst identityPath = path.join(liopDir, \"identity.json\");\n\tif (!fs.existsSync(liopDir)) {\n\t\tfs.mkdirSync(liopDir, { recursive: true });\n\t}\n\n\t// 1. Resolve candidate P2P bootstrap nodes\n\tconst bootstrapNodes = await resolveBootstrapNodes(liopDir);\n\n\t// 2. Execute Adaptive Topology Probe\n\tconst blgUrl = process.env.LIOP_BLG_URL;\n\tconst nexusUrl = process.env.LIOP_NEXUS_URL;\n\tconst clientId =\n\t\tprocess.env.LIOP_CLIENT_ID ||\n\t\tprocess.env.LIOP_OAUTH_CLIENT_ID ||\n\t\t\"liop-agent\";\n\tconst clientSecret =\n\t\tprocess.env.LIOP_CLIENT_SECRET ||\n\t\tprocess.env.LIOP_OAUTH_CLIENT_SECRET ||\n\t\t\"dev-secret-change-me\";\n\tconst staticToken = process.env.LIOP_TOKEN || process.env.LIOP_OAUTH_TOKEN;\n\n\tconst topology = await probeTopology({\n\t\tblgUrl,\n\t\tnexusUrl,\n\t\tclientId,\n\t\tclientSecret,\n\t\tstaticToken,\n\t\tbootstrapNodes,\n\t\tidentityPath,\n\t});\n\n\tconst routingTable = new RoutingTable();\n\tconst tokenManager = new TokenManager({\n\t\ttokenEndpoint:\n\t\t\ttopology.gateway?.tokenEndpoint ||\n\t\t\t`${nexusUrl || \"http://127.0.0.1:15000\"}/oidc/token`,\n\t\tclientId,\n\t\tclientSecret,\n\t\taudience: topology.gateway?.audience,\n\t\tscopes: topology.gateway?.scopes,\n\t\tstaticToken,\n\t});\n\n\t// 3. Dispatch by Mode\n\tswitch (topology.mode) {\n\t\tcase \"gateway\":\n\t\t\tif (!topology.gateway)\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"Topology probe indicated gateway mode without gateway info.\",\n\t\t\t\t);\n\t\t\tawait runGatewayMode(topology.gateway, tokenManager, routingTable);\n\t\t\tbreak;\n\t\tcase \"mesh\":\n\t\t\tif (!topology.mesh)\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"Topology probe indicated mesh mode without mesh info.\",\n\t\t\t\t);\n\t\t\tawait runMeshMode(topology.mesh);\n\t\t\tbreak;\n\t\tcase \"hybrid\":\n\t\t\tawait runHybridMode(topology, tokenManager, routingTable);\n\t\t\tbreak;\n\t}\n}\n\nmain().catch((err) => {\n\tlog.error(`[LIOP-Agent] Fatal Error: ${err.message}`);\n\tprocess.exit(1);\n});\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"bridge.js"}
@@ -1,77 +0,0 @@
1
- import { z } from 'zod';
2
-
3
- // src/types.ts
4
-
5
- // src/gateway/mcp-compat.ts
6
- var MCP_LEGACY_SUPPORT_ENABLED = true;
7
- var MCP_PROTOCOL_VERSION_LEGACY = "2025-11-25";
8
- function buildLegacyInitializeResponse(serverInfo, id) {
9
- return {
10
- jsonrpc: "2.0",
11
- id: id ?? null,
12
- result: {
13
- protocolVersion: MCP_PROTOCOL_VERSION_LEGACY,
14
- capabilities: {
15
- tools: { listChanged: true },
16
- resources: { listChanged: true },
17
- prompts: { listChanged: true }
18
- },
19
- serverInfo
20
- }
21
- };
22
- }
23
- function isLegacyRequest(request) {
24
- if (request.method === "initialize" || request.method === "notifications/initialized") {
25
- return true;
26
- }
27
- const params = request.params;
28
- const meta = params?._meta;
29
- const version = meta?.["io.modelcontextprotocol/protocolVersion"];
30
- if (!version || version === MCP_PROTOCOL_VERSION_LEGACY) {
31
- return true;
32
- }
33
- return false;
34
- }
35
- function adaptResponseForLegacyClient(response) {
36
- if (!response.result || typeof response.result !== "object") {
37
- return response;
38
- }
39
- const rawResult = { ...response.result };
40
- delete rawResult.resultType;
41
- delete rawResult.ttlMs;
42
- delete rawResult.cacheScope;
43
- return {
44
- ...response,
45
- result: rawResult
46
- };
47
- }
48
-
49
- // src/types.ts
50
- var MCP_PROTOCOL_VERSION = "2026-07-28";
51
- var ToolSchema = z.object({
52
- name: z.string(),
53
- description: z.string().optional(),
54
- inputSchema: z.record(z.string(), z.unknown())
55
- // Represents a JSON Schema
56
- });
57
- var ResourceSchema = z.object({
58
- uri: z.string(),
59
- name: z.string(),
60
- description: z.string().optional(),
61
- mimeType: z.string().optional()
62
- });
63
- var PromptSchema = z.object({
64
- name: z.string(),
65
- description: z.string().optional(),
66
- arguments: z.array(
67
- z.object({
68
- name: z.string(),
69
- description: z.string().optional(),
70
- required: z.boolean().optional()
71
- })
72
- ).optional()
73
- });
74
-
75
- export { MCP_LEGACY_SUPPORT_ENABLED, MCP_PROTOCOL_VERSION, MCP_PROTOCOL_VERSION_LEGACY, PromptSchema, ResourceSchema, ToolSchema, adaptResponseForLegacyClient, buildLegacyInitializeResponse, isLegacyRequest };
76
- //# sourceMappingURL=chunk-2KSO3W4A.js.map
77
- //# sourceMappingURL=chunk-2KSO3W4A.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/gateway/mcp-compat.ts","../src/types.ts"],"names":[],"mappings":";;;;;AAiBO,IAAM,0BAAA,GAA6B;AAKnC,IAAM,2BAAA,GAA8B;AAKpC,SAAS,6BAAA,CACf,YACA,EAAA,EACc;AACd,EAAA,OAAO;AAAA,IACN,OAAA,EAAS,KAAA;AAAA,IACT,IAAI,EAAA,IAAM,IAAA;AAAA,IACV,MAAA,EAAQ;AAAA,MACP,eAAA,EAAiB,2BAAA;AAAA,MACjB,YAAA,EAAc;AAAA,QACb,KAAA,EAAO,EAAE,WAAA,EAAa,IAAA,EAAK;AAAA,QAC3B,SAAA,EAAW,EAAE,WAAA,EAAa,IAAA,EAAK;AAAA,QAC/B,OAAA,EAAS,EAAE,WAAA,EAAa,IAAA;AAAK,OAC9B;AAAA,MACA;AAAA;AACD,GACD;AACD;AAOO,SAAS,gBAAgB,OAAA,EAA8B;AAC7D,EAAA,IACC,OAAA,CAAQ,MAAA,KAAW,YAAA,IACnB,OAAA,CAAQ,WAAW,2BAAA,EAClB;AACD,IAAA,OAAO,IAAA;AAAA,EACR;AAEA,EAAA,MAAM,SAAS,OAAA,CAAQ,MAAA;AACvB,EAAA,MAAM,OAAO,MAAA,EAAQ,KAAA;AACrB,EAAA,MAAM,OAAA,GAAU,OAAO,yCAAyC,CAAA;AAEhE,EAAA,IAAI,CAAC,OAAA,IAAW,OAAA,KAAY,2BAAA,EAA6B;AACxD,IAAA,OAAO,IAAA;AAAA,EACR;AAEA,EAAA,OAAO,KAAA;AACR;AAMO,SAAS,6BACf,QAAA,EACc;AACd,EAAA,IAAI,CAAC,QAAA,CAAS,MAAA,IAAU,OAAO,QAAA,CAAS,WAAW,QAAA,EAAU;AAC5D,IAAA,OAAO,QAAA;AAAA,EACR;AAEA,EAAA,MAAM,SAAA,GAAY,EAAE,GAAI,QAAA,CAAS,MAAA,EAAmC;AAGpE,EAAA,OAAO,SAAA,CAAU,UAAA;AACjB,EAAA,OAAO,SAAA,CAAU,KAAA;AACjB,EAAA,OAAO,SAAA,CAAU,UAAA;AAEjB,EAAA,OAAO;AAAA,IACN,GAAG,QAAA;AAAA,IACH,MAAA,EAAQ;AAAA,GACT;AACD;;;ACpFO,IAAM,oBAAA,GAAuB;AAyD7B,IAAM,UAAA,GAAa,EAAE,MAAA,CAAO;AAAA,EAClC,IAAA,EAAM,EAAE,MAAA,EAAO;AAAA,EACf,WAAA,EAAa,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,WAAA,EAAa,EAAE,MAAA,CAAO,CAAA,CAAE,QAAO,EAAG,CAAA,CAAE,SAAS;AAAA;AAC9C,CAAC;AAIM,IAAM,cAAA,GAAiB,EAAE,MAAA,CAAO;AAAA,EACtC,GAAA,EAAK,EAAE,MAAA,EAAO;AAAA,EACd,IAAA,EAAM,EAAE,MAAA,EAAO;AAAA,EACf,WAAA,EAAa,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,QAAA,EAAU,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AACtB,CAAC;AAIM,IAAM,YAAA,GAAe,EAAE,MAAA,CAAO;AAAA,EACpC,IAAA,EAAM,EAAE,MAAA,EAAO;AAAA,EACf,WAAA,EAAa,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,WAAW,CAAA,CACT,KAAA;AAAA,IACA,EAAE,MAAA,CAAO;AAAA,MACR,IAAA,EAAM,EAAE,MAAA,EAAO;AAAA,MACf,WAAA,EAAa,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,MACjC,QAAA,EAAU,CAAA,CAAE,OAAA,EAAQ,CAAE,QAAA;AAAS,KAC/B;AAAA,IAED,QAAA;AACH,CAAC","file":"chunk-2KSO3W4A.js","sourcesContent":["// Copyright 2026 Nekzus Solutions and contributors\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { McpRequest, McpResponse, ServerInfo } from \"../types.js\";\n\n/**\n * @mcp-legacy ENTIRE FILE — MCP 2025-era backward compatibility layer.\n * Remove this file when MCP v1 (2025-11-25) reaches EOL.\n *\n * SUNSET INSTRUCTION: Delete this file, then grep for \"@mcp-legacy\" in the\n * codebase to find and remove all remaining legacy seams.\n */\n\n/**\n * @mcp-legacy Master kill switch for MCP 2025-era backward compatibility.\n * Set to `false` when MCP v1 reaches End-of-Life (EOL) to disable all legacy seams.\n */\nexport const MCP_LEGACY_SUPPORT_ENABLED = true;\n\n/**\n * @mcp-legacy Legacy protocol version constant.\n */\nexport const MCP_PROTOCOL_VERSION_LEGACY = \"2025-11-25\" as const;\n\n/**\n * @mcp-legacy Build the legacy initialize handshake response.\n */\nexport function buildLegacyInitializeResponse(\n\tserverInfo: ServerInfo,\n\tid?: string | number | null,\n): McpResponse {\n\treturn {\n\t\tjsonrpc: \"2.0\",\n\t\tid: id ?? null,\n\t\tresult: {\n\t\t\tprotocolVersion: MCP_PROTOCOL_VERSION_LEGACY,\n\t\t\tcapabilities: {\n\t\t\t\ttools: { listChanged: true },\n\t\t\t\tresources: { listChanged: true },\n\t\t\t\tprompts: { listChanged: true },\n\t\t\t},\n\t\t\tserverInfo,\n\t\t},\n\t};\n}\n\n/**\n * @mcp-legacy Detect if a request is strictly from a 2025-era legacy client.\n * Legacy requests either invoke 'initialize', 'notifications/initialized',\n * or lack modern '_meta' protocol envelopes.\n */\nexport function isLegacyRequest(request: McpRequest): boolean {\n\tif (\n\t\trequest.method === \"initialize\" ||\n\t\trequest.method === \"notifications/initialized\"\n\t) {\n\t\treturn true;\n\t}\n\n\tconst params = request.params as Record<string, unknown> | undefined;\n\tconst meta = params?._meta as Record<string, unknown> | undefined;\n\tconst version = meta?.[\"io.modelcontextprotocol/protocolVersion\"];\n\n\tif (!version || version === MCP_PROTOCOL_VERSION_LEGACY) {\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n\n/**\n * @mcp-legacy Wrap and strip modern-era fields (resultType, ttlMs, cacheScope, etc.)\n * from a response to ensure 100% wire-compatibility with strict 2025 MCP clients.\n */\nexport function adaptResponseForLegacyClient(\n\tresponse: McpResponse,\n): McpResponse {\n\tif (!response.result || typeof response.result !== \"object\") {\n\t\treturn response;\n\t}\n\n\tconst rawResult = { ...(response.result as Record<string, unknown>) };\n\n\t// Strip modern-only envelope tags\n\tdelete rawResult.resultType;\n\tdelete rawResult.ttlMs;\n\tdelete rawResult.cacheScope;\n\n\treturn {\n\t\t...response,\n\t\tresult: rawResult,\n\t};\n}\n","// Copyright 2026 Nekzus Solutions and contributors\n// SPDX-License-Identifier: Apache-2.0\n\nimport { z } from \"zod\";\n\n/**\n * Protocol Version Identifiers\n */\nexport const MCP_PROTOCOL_VERSION = \"2026-07-28\" as const;\n\nexport {\n\tMCP_LEGACY_SUPPORT_ENABLED,\n\tMCP_PROTOCOL_VERSION_LEGACY,\n} from \"./gateway/mcp-compat.js\";\n\n/**\n * Protocol Era Classification\n */\nexport type McpEra = \"legacy\" | \"modern\";\n\n/**\n * Caching Hints for MCP 2026-07-28 Spec\n */\nexport interface CacheableResult {\n\tttlMs?: number;\n\tcacheScope?: \"public\" | \"private\";\n}\n\n/**\n * Multi-Round-Trip Requests (MRTR) Specification Types\n */\nexport interface InputRequest {\n\tid: string;\n\tmessage: string;\n\tschema?: Record<string, unknown>;\n}\n\nexport interface InputResponse {\n\tid: string;\n\tvalue: unknown;\n}\n\nexport interface InputRequiredResult {\n\tresultType: \"input_required\";\n\tinputRequests: InputRequest[];\n\trequestState?: string;\n}\n\n/**\n * Modern Envelope Metadata (_meta)\n */\nexport interface McpRequestMeta {\n\t\"io.modelcontextprotocol/protocolVersion\"?: string;\n\t\"io.modelcontextprotocol/clientInfo\"?: {\n\t\tname: string;\n\t\tversion: string;\n\t};\n\t\"io.modelcontextprotocol/clientCapabilities\"?: Record<string, unknown>;\n\t[key: string]: unknown;\n}\n\n/**\n * Base Protocol Types representing parity with Model Context Protocol\n */\n\nexport const ToolSchema = z.object({\n\tname: z.string(),\n\tdescription: z.string().optional(),\n\tinputSchema: z.record(z.string(), z.unknown()), // Represents a JSON Schema\n});\n\nexport type Tool = z.infer<typeof ToolSchema>;\n\nexport const ResourceSchema = z.object({\n\turi: z.string(),\n\tname: z.string(),\n\tdescription: z.string().optional(),\n\tmimeType: z.string().optional(),\n});\n\nexport type Resource = z.infer<typeof ResourceSchema>;\n\nexport const PromptSchema = z.object({\n\tname: z.string(),\n\tdescription: z.string().optional(),\n\targuments: z\n\t\t.array(\n\t\t\tz.object({\n\t\t\t\tname: z.string(),\n\t\t\t\tdescription: z.string().optional(),\n\t\t\t\trequired: z.boolean().optional(),\n\t\t\t}),\n\t\t)\n\t\t.optional(),\n});\n\nexport type Prompt = z.infer<typeof PromptSchema>;\n\nexport interface CallToolRequest {\n\tname: string;\n\targuments?: Record<string, unknown>;\n}\n\nexport interface CallToolResult {\n\tcontent: Array<{\n\t\ttype: \"text\" | \"image\" | \"resource\";\n\t\ttext?: string;\n\t\tdata?: string;\n\t\tmimeType?: string;\n\t\tresource?: {\n\t\t\turi: string;\n\t\t\ttext?: string;\n\t\t\tblob?: string;\n\t\t};\n\t}>;\n\tisError?: boolean;\n}\n\nexport interface GetPromptRequest {\n\tname: string;\n\targuments?: Record<string, string>;\n}\n\nexport interface GetPromptResult {\n\tdescription?: string;\n\tmessages: Array<{\n\t\trole: \"user\" | \"assistant\";\n\t\tcontent:\n\t\t\t| { type: \"text\"; text: string }\n\t\t\t| { type: \"image\"; data: string; mimeType: string }\n\t\t\t| {\n\t\t\t\t\ttype: \"resource\";\n\t\t\t\t\tresource: { uri: string; text?: string; blob?: string };\n\t\t\t };\n\t}>;\n}\n\nexport interface ServerInfo {\n\tname: string;\n\tversion: string;\n\tcapabilities?: {\n\t\tprompts?: { listChanged?: boolean };\n\t\tresources?: { subscribe?: boolean; listChanged?: boolean };\n\t\ttools?: { listChanged?: boolean };\n\t\t/** @mcp-legacy @deprecated Deprecated in MCP 2026-07-28 spec */\n\t\tlogging?: Record<string, unknown>;\n\t};\n}\n\nexport interface DiscoverResult {\n\tresultType: \"complete\";\n\tsupportedVersions: string[];\n\tcapabilities: ServerInfo[\"capabilities\"];\n\tserverInfo: ServerInfo;\n\tinstructions?: string;\n}\n\nexport interface McpRequest {\n\tmethod: string;\n\tparams?: unknown;\n\tid?: string | number | null;\n\tjsonrpc?: \"2.0\";\n}\n\nexport interface McpResponse {\n\tjsonrpc: \"2.0\";\n\tid?: string | number | null;\n\tresult?: unknown;\n\terror?: {\n\t\tcode: number;\n\t\tmessage: string;\n\t\tdata?: unknown;\n\t};\n}\n\n/**\n * Re-export Gateway Interceptor types for consumer convenience.\n */\nexport type {\n\tGatewayAdmissionResult,\n\tGatewayInterceptor,\n\tGatewayInterceptorContext,\n\tGatewayInterceptorOptions,\n} from \"./gateway/interceptor.js\";\nexport type { AuditInterceptor } from \"./interceptors/audit-interceptor.js\";\n/**\n * Re-export Log & Audit Interceptor types for consumer convenience.\n */\nexport type {\n\tLogEvent,\n\tLogInterceptor,\n} from \"./interceptors/log-interceptor.js\";\n/**\n * Re-export AuthInfo from the security module for convenience.\n * Compatible with MCP TypeScript SDK AuthInfo interface shape.\n */\nexport type { AuthInfo } from \"./security/jwt-validator.js\";\n"]}
@@ -1,114 +0,0 @@
1
- import { deriveLogicImageDigest } from './chunk-IK7CGWAZ.js';
2
- import { zkVerificationDurationMs } from './chunk-PAICJCKJ.js';
3
- import { log } from './chunk-K3DGJLUY.js';
4
- import * as fs from 'fs';
5
- import { createRequire } from 'module';
6
- import path from 'path';
7
- import { fileURLToPath, pathToFileURL } from 'url';
8
- import { Piscina } from 'piscina';
9
-
10
- var __filename$1 = fileURLToPath(import.meta.url);
11
- var __dirname$1 = path.dirname(__filename$1);
12
- var LiopVerifier = class _LiopVerifier {
13
- // Singleton Worker Pool for heavy ZK verification
14
- static zkWorkerPool = null;
15
- getZkPool() {
16
- if (!_LiopVerifier.zkWorkerPool) {
17
- const isTS = import.meta.url.endsWith(".ts");
18
- const workerExt = isTS ? ".ts" : ".js";
19
- let execArgv = [];
20
- if (isTS) {
21
- try {
22
- const req = createRequire(import.meta.url);
23
- const tsxPkg = req.resolve("tsx/package.json");
24
- const absoluteTsx = pathToFileURL(
25
- path.join(path.dirname(tsxPkg), "dist", "loader.mjs")
26
- ).href;
27
- execArgv = ["--import", absoluteTsx];
28
- } catch (_e) {
29
- execArgv = ["--import", "tsx"];
30
- }
31
- }
32
- const workerPaths = [
33
- path.resolve(__dirname$1, `./workers/zk-verifier${workerExt}`),
34
- // Flat dist/ (tsup)
35
- path.resolve(__dirname$1, `../workers/zk-verifier${workerExt}`)
36
- // Original src/
37
- ];
38
- const workerFilename = workerPaths.find((p) => fs.existsSync(p)) || workerPaths[1];
39
- _LiopVerifier.zkWorkerPool = new Piscina({
40
- filename: workerFilename,
41
- minThreads: 1,
42
- maxThreads: 2,
43
- // Minimal footprint since verification is fast compared to generation
44
- idleTimeout: 3e4,
45
- execArgv
46
- });
47
- _LiopVerifier.zkWorkerPool.run({ action: "warmup" }).catch((err) => {
48
- log.debug(
49
- `[LiopVerifier] Verification pool warm-up ping failed: ${err.message}`
50
- );
51
- });
52
- }
53
- return _LiopVerifier.zkWorkerPool;
54
- }
55
- /**
56
- * Verifies a Zero-Knowledge Receipt from a remote LIOP node via Worker Pool.
57
- *
58
- * @param logicPayload The raw WASM or JS logic that was sent to the provider.
59
- * @param remoteImageIdHex The ImageID reported by the provider (must match our local calculation).
60
- * @param zkReceipt The mathematical proof (Seal + Journal) from the zkVM.
61
- */
62
- async verifyZkReceipt(logicPayload, remoteImageIdHex, zkReceipt, sessionSecret, expectedOutput) {
63
- const pool = this.getZkPool();
64
- if (!pool) throw new Error("Worker pool initialization failed");
65
- const startTime = performance.now();
66
- const result = await pool.run({
67
- action: "verify_receipt",
68
- logicPayload: new Uint8Array(logicPayload),
69
- remoteImageIdHex,
70
- zkReceipt: new Uint8Array(zkReceipt),
71
- sessionSecret: sessionSecret ? new Uint8Array(sessionSecret) : void 0,
72
- expectedOutput
73
- });
74
- const durationMs = performance.now() - startTime;
75
- try {
76
- zkVerificationDurationMs.observe(
77
- { status: result.verified ? "verified" : "failed" },
78
- durationMs
79
- );
80
- } catch {
81
- }
82
- if (result.verified) {
83
- log.info(`[LiopVerifier] ${result.message}`);
84
- return true;
85
- }
86
- log.error(`[LiopVerifier] FAILED: ${result.message}`);
87
- return false;
88
- }
89
- /**
90
- * Verifies if a node is running inside an authenticated TEE (e.g. AWS Nitro).
91
- *
92
- * @param attestationReport The COSE-signed attestation document from the hardware.
93
- */
94
- async verifyTeeAttestation(attestationReport) {
95
- if (attestationReport.length === 0) return true;
96
- try {
97
- log.info("[LiopVerifier] TEE Attestation: Not configured (no-op).");
98
- return true;
99
- } catch (err) {
100
- log.error("[LiopVerifier] TEE Verification Failed:", err);
101
- return false;
102
- }
103
- }
104
- /**
105
- * Derives the ImageID of a logic payload following the LIOP v1 Standard.
106
- */
107
- deriveImageId(logicPayload) {
108
- return deriveLogicImageDigest(logicPayload);
109
- }
110
- };
111
-
112
- export { LiopVerifier };
113
- //# sourceMappingURL=chunk-2STZHJ24.js.map
114
- //# sourceMappingURL=chunk-2STZHJ24.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/crypto/verifier.ts"],"names":["__filename","__dirname"],"mappings":"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","file":"chunk-2STZHJ24.js","sourcesContent":["// Copyright 2026 Nekzus Solutions and contributors\n// SPDX-License-Identifier: Apache-2.0\n\nimport * as fs from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport path from \"node:path\";\nimport { fileURLToPath, pathToFileURL } from \"node:url\";\nimport { Piscina } from \"piscina\";\nimport { zkVerificationDurationMs } from \"../observability/metrics.js\";\nimport { log } from \"../utils/logger.js\";\nimport { deriveLogicImageDigest } from \"./logic-image-id.js\";\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(__filename);\n\n/**\n * LIOP Tier-0 Industrial Verifier\n *\n * This engine is responsible for the trustless verification of remote logic execution.\n * It validates both the integrity of the code (ZkImageID) and the mathematical proof\n * of its execution (ZkSeal), as well as hardware-level attestation (TEE).\n */\nexport class LiopVerifier {\n\t// Singleton Worker Pool for heavy ZK verification\n\tprivate static zkWorkerPool: Piscina | null = null;\n\n\tprivate getZkPool() {\n\t\tif (!LiopVerifier.zkWorkerPool) {\n\t\t\tconst isTS = import.meta.url.endsWith(\".ts\");\n\t\t\tconst workerExt = isTS ? \".ts\" : \".js\";\n\n\t\t\tlet execArgv: string[] = [];\n\t\t\tif (isTS) {\n\t\t\t\ttry {\n\t\t\t\t\tconst req = createRequire(import.meta.url);\n\t\t\t\t\tconst tsxPkg = req.resolve(\"tsx/package.json\");\n\t\t\t\t\tconst absoluteTsx = pathToFileURL(\n\t\t\t\t\t\tpath.join(path.dirname(tsxPkg), \"dist\", \"loader.mjs\"),\n\t\t\t\t\t).href;\n\t\t\t\t\texecArgv = [\"--import\", absoluteTsx];\n\t\t\t\t} catch (_e) {\n\t\t\t\t\texecArgv = [\"--import\", \"tsx\"];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Support both flat dist/ and original src/ structure\n\t\t\tconst workerPaths = [\n\t\t\t\tpath.resolve(__dirname, `./workers/zk-verifier${workerExt}`), // Flat dist/ (tsup)\n\t\t\t\tpath.resolve(__dirname, `../workers/zk-verifier${workerExt}`), // Original src/\n\t\t\t];\n\n\t\t\tconst workerFilename =\n\t\t\t\tworkerPaths.find((p) => fs.existsSync(p)) || workerPaths[1];\n\n\t\t\tLiopVerifier.zkWorkerPool = new Piscina({\n\t\t\t\tfilename: workerFilename,\n\t\t\t\tminThreads: 1,\n\t\t\t\tmaxThreads: 2, // Minimal footprint since verification is fast compared to generation\n\t\t\t\tidleTimeout: 30000,\n\t\t\t\texecArgv,\n\t\t\t});\n\n\t\t\t// Pre-warm the verification worker\n\t\t\tLiopVerifier.zkWorkerPool.run({ action: \"warmup\" }).catch((err) => {\n\t\t\t\tlog.debug(\n\t\t\t\t\t`[LiopVerifier] Verification pool warm-up ping failed: ${err.message}`,\n\t\t\t\t);\n\t\t\t});\n\t\t}\n\t\treturn LiopVerifier.zkWorkerPool;\n\t}\n\n\t/**\n\t * Verifies a Zero-Knowledge Receipt from a remote LIOP node via Worker Pool.\n\t *\n\t * @param logicPayload The raw WASM or JS logic that was sent to the provider.\n\t * @param remoteImageIdHex The ImageID reported by the provider (must match our local calculation).\n\t * @param zkReceipt The mathematical proof (Seal + Journal) from the zkVM.\n\t */\n\tpublic async verifyZkReceipt(\n\t\tlogicPayload: Buffer,\n\t\tremoteImageIdHex: string,\n\t\tzkReceipt: Buffer,\n\t\tsessionSecret?: Buffer,\n\t\texpectedOutput?: unknown,\n\t): Promise<boolean> {\n\t\tconst pool = this.getZkPool();\n\t\tif (!pool) throw new Error(\"Worker pool initialization failed\");\n\t\tconst startTime = performance.now();\n\t\tconst result = await pool.run({\n\t\t\taction: \"verify_receipt\",\n\t\t\tlogicPayload: new Uint8Array(logicPayload),\n\t\t\tremoteImageIdHex,\n\t\t\tzkReceipt: new Uint8Array(zkReceipt),\n\t\t\tsessionSecret: sessionSecret ? new Uint8Array(sessionSecret) : undefined,\n\t\t\texpectedOutput,\n\t\t});\n\t\tconst durationMs = performance.now() - startTime;\n\n\t\ttry {\n\t\t\tzkVerificationDurationMs.observe(\n\t\t\t\t{ status: result.verified ? \"verified\" : \"failed\" },\n\t\t\t\tdurationMs,\n\t\t\t);\n\t\t} catch {\n\t\t\t// Metrics observation failure must never disrupt cryptographic verification\n\t\t}\n\n\t\tif (result.verified) {\n\t\t\tlog.info(`[LiopVerifier] ${result.message}`);\n\t\t\treturn true;\n\t\t}\n\n\t\tlog.error(`[LiopVerifier] FAILED: ${result.message}`);\n\t\treturn false;\n\t}\n\n\t/**\n\t * Verifies if a node is running inside an authenticated TEE (e.g. AWS Nitro).\n\t *\n\t * @param attestationReport The COSE-signed attestation document from the hardware.\n\t */\n\tpublic async verifyTeeAttestation(\n\t\tattestationReport: Buffer,\n\t): Promise<boolean> {\n\t\tif (attestationReport.length === 0) return true; // Optional in Mesh Alpha\n\n\t\ttry {\n\t\t\t// Architecture for AWS Nitro Enclaves:\n\t\t\t// 1. Decode CBOR/COSE\n\t\t\t// 2. Verify Signature against AWS Nitro Root CA\n\t\t\t// 3. Compare PCRs\n\t\t\tlog.info(\"[LiopVerifier] TEE Attestation: Not configured (no-op).\");\n\t\t\treturn true;\n\t\t} catch (err) {\n\t\t\tlog.error(\"[LiopVerifier] TEE Verification Failed:\", err);\n\t\t\treturn false;\n\t\t}\n\t}\n\n\t/**\n\t * Derives the ImageID of a logic payload following the LIOP v1 Standard.\n\t */\n\tpublic deriveImageId(logicPayload: Buffer): Buffer {\n\t\treturn deriveLogicImageDigest(logicPayload);\n\t}\n}\n"]}
@@ -1,115 +0,0 @@
1
- import { log } from './chunk-K3DGJLUY.js';
2
-
3
- // src/runtime/token-manager.ts
4
- var TokenManager = class _TokenManager {
5
- cachedToken = null;
6
- expiresAt = 0;
7
- // Epoch ms
8
- pendingPromise = null;
9
- tokenEndpoint;
10
- clientId;
11
- clientSecret;
12
- audience;
13
- scope;
14
- staticToken;
15
- // Preemptive refresh threshold: 30 seconds before expiration
16
- static REFRESH_BUFFER_MS = 3e4;
17
- constructor(options) {
18
- this.tokenEndpoint = options.tokenEndpoint;
19
- this.clientId = options.clientId;
20
- this.clientSecret = options.clientSecret;
21
- this.audience = options.audience ?? "urn:liop:mesh:api";
22
- this.scope = Array.isArray(options.scopes) ? options.scopes.join(" ") : options.scopes ?? "liop:tools:call liop:tools:list liop:resources:read liop:schema:read liop:mesh:query";
23
- this.staticToken = options.staticToken;
24
- }
25
- /**
26
- * Returns a valid OAuth 2.1 access token.
27
- * Automatically performs preemptive refresh if the token is close to expiry.
28
- */
29
- async getToken() {
30
- if (this.staticToken) {
31
- return this.staticToken;
32
- }
33
- const now = Date.now();
34
- if (this.cachedToken && now < this.expiresAt - _TokenManager.REFRESH_BUFFER_MS) {
35
- return this.cachedToken;
36
- }
37
- if (this.pendingPromise) {
38
- return this.pendingPromise;
39
- }
40
- this.pendingPromise = (async () => {
41
- try {
42
- const token = await this.fetchNewToken();
43
- this.cachedToken = token;
44
- return token;
45
- } finally {
46
- this.pendingPromise = null;
47
- }
48
- })();
49
- return this.pendingPromise;
50
- }
51
- /**
52
- * Force-invalidates cached token, e.g. after receiving a 401 Unauthorized response.
53
- */
54
- invalidate() {
55
- this.cachedToken = null;
56
- this.expiresAt = 0;
57
- if (this.clientId && this.clientSecret) {
58
- this.staticToken = void 0;
59
- }
60
- log.info("[TokenManager] Cached OAuth access token invalidated.");
61
- }
62
- /**
63
- * Returns true if the token is absent or has passed the refresh threshold.
64
- */
65
- isExpired() {
66
- if (this.staticToken) return false;
67
- return !this.cachedToken || Date.now() >= this.expiresAt - _TokenManager.REFRESH_BUFFER_MS;
68
- }
69
- getExpiresAt() {
70
- return this.expiresAt;
71
- }
72
- async fetchNewToken() {
73
- log.info(
74
- `[TokenManager] Requesting M2M token from ${this.tokenEndpoint} for client '${this.clientId}'...`
75
- );
76
- const params = new URLSearchParams({
77
- grant_type: "client_credentials",
78
- client_id: this.clientId,
79
- client_secret: this.clientSecret,
80
- resource: this.audience,
81
- scope: this.scope
82
- });
83
- const response = await fetch(this.tokenEndpoint, {
84
- method: "POST",
85
- headers: {
86
- "Content-Type": "application/x-www-form-urlencoded",
87
- Accept: "application/json"
88
- },
89
- body: params.toString(),
90
- signal: AbortSignal.timeout(1e4)
91
- });
92
- if (!response.ok) {
93
- const errorText = await response.text();
94
- throw new Error(
95
- `OAuth token request failed [HTTP ${response.status}]: ${errorText}`
96
- );
97
- }
98
- const data = await response.json();
99
- if (!data.access_token) {
100
- throw new Error(
101
- "OAuth token response did not contain an 'access_token' field."
102
- );
103
- }
104
- const expiresInSec = typeof data.expires_in === "number" ? data.expires_in : 3600;
105
- this.expiresAt = Date.now() + expiresInSec * 1e3;
106
- log.info(
107
- `[TokenManager] Acquired access token successfully. Expires in ${expiresInSec}s.`
108
- );
109
- return data.access_token;
110
- }
111
- };
112
-
113
- export { TokenManager };
114
- //# sourceMappingURL=chunk-3QH44NKZ.js.map
115
- //# sourceMappingURL=chunk-3QH44NKZ.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/runtime/token-manager.ts"],"names":[],"mappings":";;;AAwBO,IAAM,YAAA,GAAN,MAAM,aAAA,CAAa;AAAA,EACjB,WAAA,GAA6B,IAAA;AAAA,EAC7B,SAAA,GAAY,CAAA;AAAA;AAAA,EACZ,cAAA,GAAyC,IAAA;AAAA,EAEhC,aAAA;AAAA,EACA,QAAA;AAAA,EACA,YAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACT,WAAA;AAAA;AAAA,EAGR,OAAwB,iBAAA,GAAoB,GAAA;AAAA,EAE5C,YAAY,OAAA,EAA8B;AACzC,IAAA,IAAA,CAAK,gBAAgB,OAAA,CAAQ,aAAA;AAC7B,IAAA,IAAA,CAAK,WAAW,OAAA,CAAQ,QAAA;AACxB,IAAA,IAAA,CAAK,eAAe,OAAA,CAAQ,YAAA;AAC5B,IAAA,IAAA,CAAK,QAAA,GAAW,QAAQ,QAAA,IAAY,mBAAA;AACpC,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ,MAAM,CAAA,GACtC,OAAA,CAAQ,MAAA,CAAO,IAAA,CAAK,GAAG,CAAA,GACtB,OAAA,CAAQ,MAAA,IACV,sFAAA;AACF,IAAA,IAAA,CAAK,cAAc,OAAA,CAAQ,WAAA;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAa,QAAA,GAA4B;AACxC,IAAA,IAAI,KAAK,WAAA,EAAa;AACrB,MAAA,OAAO,IAAA,CAAK,WAAA;AAAA,IACb;AAEA,IAAA,MAAM,GAAA,GAAM,KAAK,GAAA,EAAI;AACrB,IAAA,IACC,KAAK,WAAA,IACL,GAAA,GAAM,IAAA,CAAK,SAAA,GAAY,cAAa,iBAAA,EACnC;AACD,MAAA,OAAO,IAAA,CAAK,WAAA;AAAA,IACb;AAEA,IAAA,IAAI,KAAK,cAAA,EAAgB;AACxB,MAAA,OAAO,IAAA,CAAK,cAAA;AAAA,IACb;AAEA,IAAA,IAAA,CAAK,kBAAkB,YAAY;AAClC,MAAA,IAAI;AACH,QAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,aAAA,EAAc;AACvC,QAAA,IAAA,CAAK,WAAA,GAAc,KAAA;AACnB,QAAA,OAAO,KAAA;AAAA,MACR,CAAA,SAAE;AACD,QAAA,IAAA,CAAK,cAAA,GAAiB,IAAA;AAAA,MACvB;AAAA,IACD,CAAA,GAAG;AAEH,IAAA,OAAO,IAAA,CAAK,cAAA;AAAA,EACb;AAAA;AAAA;AAAA;AAAA,EAKO,UAAA,GAAmB;AACzB,IAAA,IAAA,CAAK,WAAA,GAAc,IAAA;AACnB,IAAA,IAAA,CAAK,SAAA,GAAY,CAAA;AACjB,IAAA,IAAI,IAAA,CAAK,QAAA,IAAY,IAAA,CAAK,YAAA,EAAc;AACvC,MAAA,IAAA,CAAK,WAAA,GAAc,MAAA;AAAA,IACpB;AACA,IAAA,GAAA,CAAI,KAAK,uDAAuD,CAAA;AAAA,EACjE;AAAA;AAAA;AAAA;AAAA,EAKO,SAAA,GAAqB;AAC3B,IAAA,IAAI,IAAA,CAAK,aAAa,OAAO,KAAA;AAC7B,IAAA,OACC,CAAC,KAAK,WAAA,IACN,IAAA,CAAK,KAAI,IAAK,IAAA,CAAK,YAAY,aAAA,CAAa,iBAAA;AAAA,EAE9C;AAAA,EAEO,YAAA,GAAuB;AAC7B,IAAA,OAAO,IAAA,CAAK,SAAA;AAAA,EACb;AAAA,EAEA,MAAc,aAAA,GAAiC;AAC9C,IAAA,GAAA,CAAI,IAAA;AAAA,MACH,CAAA,yCAAA,EAA4C,IAAA,CAAK,aAAa,CAAA,aAAA,EAAgB,KAAK,QAAQ,CAAA,IAAA;AAAA,KAC5F;AAEA,IAAA,MAAM,MAAA,GAAS,IAAI,eAAA,CAAgB;AAAA,MAClC,UAAA,EAAY,oBAAA;AAAA,MACZ,WAAW,IAAA,CAAK,QAAA;AAAA,MAChB,eAAe,IAAA,CAAK,YAAA;AAAA,MACpB,UAAU,IAAA,CAAK,QAAA;AAAA,MACf,OAAO,IAAA,CAAK;AAAA,KACZ,CAAA;AAED,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,IAAA,CAAK,aAAA,EAAe;AAAA,MAChD,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS;AAAA,QACR,cAAA,EAAgB,mCAAA;AAAA,QAChB,MAAA,EAAQ;AAAA,OACT;AAAA,MACA,IAAA,EAAM,OAAO,QAAA,EAAS;AAAA,MACtB,MAAA,EAAQ,WAAA,CAAY,OAAA,CAAQ,GAAM;AAAA,KAClC,CAAA;AAED,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AACjB,MAAA,MAAM,SAAA,GAAY,MAAM,QAAA,CAAS,IAAA,EAAK;AACtC,MAAA,MAAM,IAAI,KAAA;AAAA,QACT,CAAA,iCAAA,EAAoC,QAAA,CAAS,MAAM,CAAA,GAAA,EAAM,SAAS,CAAA;AAAA,OACnE;AAAA,IACD;AAEA,IAAA,MAAM,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK;AAMlC,IAAA,IAAI,CAAC,KAAK,YAAA,EAAc;AACvB,MAAA,MAAM,IAAI,KAAA;AAAA,QACT;AAAA,OACD;AAAA,IACD;AAEA,IAAA,MAAM,eACL,OAAO,IAAA,CAAK,UAAA,KAAe,QAAA,GAAW,KAAK,UAAA,GAAa,IAAA;AACzD,IAAA,IAAA,CAAK,SAAA,GAAY,IAAA,CAAK,GAAA,EAAI,GAAI,YAAA,GAAe,GAAA;AAE7C,IAAA,GAAA,CAAI,IAAA;AAAA,MACH,iEAAiE,YAAY,CAAA,EAAA;AAAA,KAC9E;AAEA,IAAA,OAAO,IAAA,CAAK,YAAA;AAAA,EACb;AACD","file":"chunk-3QH44NKZ.js","sourcesContent":["// Copyright 2026 Nekzus Solutions and contributors\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * LIOP Token Manager — Adaptive OAuth 2.1 M2M Token Lifecycle\n *\n * Implements resilient token caching with preemptive refresh (30s safety buffer),\n * concurrency de-duplication (single in-flight HTTP request), and on-demand\n * invalidation for 401 Unauthorized handling.\n *\n * Standards: RFC 6749, RFC 8707 (Resource Indicators), RFC 9068 (JWT Profile)\n */\n\nimport { log } from \"../utils/logger.js\";\n\nexport interface TokenManagerOptions {\n\ttokenEndpoint: string;\n\tclientId: string;\n\tclientSecret: string;\n\taudience?: string;\n\tscopes?: string | string[];\n\tstaticToken?: string;\n}\n\nexport class TokenManager {\n\tprivate cachedToken: string | null = null;\n\tprivate expiresAt = 0; // Epoch ms\n\tprivate pendingPromise: Promise<string> | null = null;\n\n\tprivate readonly tokenEndpoint: string;\n\tprivate readonly clientId: string;\n\tprivate readonly clientSecret: string;\n\tprivate readonly audience: string;\n\tprivate readonly scope: string;\n\tprivate staticToken?: string;\n\n\t// Preemptive refresh threshold: 30 seconds before expiration\n\tprivate static readonly REFRESH_BUFFER_MS = 30_000;\n\n\tconstructor(options: TokenManagerOptions) {\n\t\tthis.tokenEndpoint = options.tokenEndpoint;\n\t\tthis.clientId = options.clientId;\n\t\tthis.clientSecret = options.clientSecret;\n\t\tthis.audience = options.audience ?? \"urn:liop:mesh:api\";\n\t\tthis.scope = Array.isArray(options.scopes)\n\t\t\t? options.scopes.join(\" \")\n\t\t\t: (options.scopes ??\n\t\t\t\t\"liop:tools:call liop:tools:list liop:resources:read liop:schema:read liop:mesh:query\");\n\t\tthis.staticToken = options.staticToken;\n\t}\n\n\t/**\n\t * Returns a valid OAuth 2.1 access token.\n\t * Automatically performs preemptive refresh if the token is close to expiry.\n\t */\n\tpublic async getToken(): Promise<string> {\n\t\tif (this.staticToken) {\n\t\t\treturn this.staticToken;\n\t\t}\n\n\t\tconst now = Date.now();\n\t\tif (\n\t\t\tthis.cachedToken &&\n\t\t\tnow < this.expiresAt - TokenManager.REFRESH_BUFFER_MS\n\t\t) {\n\t\t\treturn this.cachedToken;\n\t\t}\n\n\t\tif (this.pendingPromise) {\n\t\t\treturn this.pendingPromise;\n\t\t}\n\n\t\tthis.pendingPromise = (async () => {\n\t\t\ttry {\n\t\t\t\tconst token = await this.fetchNewToken();\n\t\t\t\tthis.cachedToken = token;\n\t\t\t\treturn token;\n\t\t\t} finally {\n\t\t\t\tthis.pendingPromise = null;\n\t\t\t}\n\t\t})();\n\n\t\treturn this.pendingPromise;\n\t}\n\n\t/**\n\t * Force-invalidates cached token, e.g. after receiving a 401 Unauthorized response.\n\t */\n\tpublic invalidate(): void {\n\t\tthis.cachedToken = null;\n\t\tthis.expiresAt = 0;\n\t\tif (this.clientId && this.clientSecret) {\n\t\t\tthis.staticToken = undefined;\n\t\t}\n\t\tlog.info(\"[TokenManager] Cached OAuth access token invalidated.\");\n\t}\n\n\t/**\n\t * Returns true if the token is absent or has passed the refresh threshold.\n\t */\n\tpublic isExpired(): boolean {\n\t\tif (this.staticToken) return false;\n\t\treturn (\n\t\t\t!this.cachedToken ||\n\t\t\tDate.now() >= this.expiresAt - TokenManager.REFRESH_BUFFER_MS\n\t\t);\n\t}\n\n\tpublic getExpiresAt(): number {\n\t\treturn this.expiresAt;\n\t}\n\n\tprivate async fetchNewToken(): Promise<string> {\n\t\tlog.info(\n\t\t\t`[TokenManager] Requesting M2M token from ${this.tokenEndpoint} for client '${this.clientId}'...`,\n\t\t);\n\n\t\tconst params = new URLSearchParams({\n\t\t\tgrant_type: \"client_credentials\",\n\t\t\tclient_id: this.clientId,\n\t\t\tclient_secret: this.clientSecret,\n\t\t\tresource: this.audience,\n\t\t\tscope: this.scope,\n\t\t});\n\n\t\tconst response = await fetch(this.tokenEndpoint, {\n\t\t\tmethod: \"POST\",\n\t\t\theaders: {\n\t\t\t\t\"Content-Type\": \"application/x-www-form-urlencoded\",\n\t\t\t\tAccept: \"application/json\",\n\t\t\t},\n\t\t\tbody: params.toString(),\n\t\t\tsignal: AbortSignal.timeout(10_000),\n\t\t});\n\n\t\tif (!response.ok) {\n\t\t\tconst errorText = await response.text();\n\t\t\tthrow new Error(\n\t\t\t\t`OAuth token request failed [HTTP ${response.status}]: ${errorText}`,\n\t\t\t);\n\t\t}\n\n\t\tconst data = (await response.json()) as {\n\t\t\taccess_token?: string;\n\t\t\texpires_in?: number;\n\t\t\ttoken_type?: string;\n\t\t};\n\n\t\tif (!data.access_token) {\n\t\t\tthrow new Error(\n\t\t\t\t\"OAuth token response did not contain an 'access_token' field.\",\n\t\t\t);\n\t\t}\n\n\t\tconst expiresInSec =\n\t\t\ttypeof data.expires_in === \"number\" ? data.expires_in : 3600;\n\t\tthis.expiresAt = Date.now() + expiresInSec * 1000;\n\n\t\tlog.info(\n\t\t\t`[TokenManager] Acquired access token successfully. Expires in ${expiresInSec}s.`,\n\t\t);\n\n\t\treturn data.access_token;\n\t}\n}\n"]}