@nekzus/liop-studio 1.0.0-alpha.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/LICENSE +201 -0
- package/NOTICE +33 -0
- package/README.md +44 -0
- package/bin/liop-studio.js +35 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.js +2291 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/index-DLA-Sm4s.d.ts +152 -0
- package/dist/index.d.ts +173 -0
- package/dist/index.js +2234 -0
- package/dist/index.js.map +1 -0
- package/dist/server/index.d.ts +4 -0
- package/dist/server/index.js +2094 -0
- package/dist/server/index.js.map +1 -0
- package/package.json +57 -0
- package/ui/README.md +73 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/cli/index.ts","../../src/server/index.ts","../../src/security/sanitizer.ts","../../src/transports/grpc.transport.ts","../../src/discovery/network-scanner.ts","../../src/security/token-resolver.ts","../../src/transports/http.transport.ts","../../src/transports/mesh.transport.ts","../../src/transports/stdio.transport.ts","../../src/transports/index.ts","../../src/cli/scan.ts","../../src/cli/table-formatter.ts"],"sourcesContent":["// Copyright 2026 Nekzus Solutions and contributors\n// SPDX-License-Identifier: Apache-2.0\n\nimport { exec } from \"node:child_process\";\nimport process from \"node:process\";\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { createStudioServer } from \"../server/index.js\";\nimport type { TargetConnectionConfig } from \"../transports/transport.interface.js\";\nimport { runScan } from \"./scan.js\";\n\nexport async function main() {\n\tconst program = new Command();\n\n\tprogram\n\t\t.name(\"liop-studio\")\n\t\t.description(\n\t\t\t\"LIOP Sovereign Studio & Mesh Scanner (Universal MCP / LIOP Inspector)\",\n\t\t)\n\t\t.version(\"1.0.0-alpha.0\")\n\t\t.option(\"-p, --port <port>\", \"Port to bind local Studio server\", \"16000\")\n\t\t.option(\"--no-open\", \"Do not automatically open browser on launch\")\n\t\t.option(\n\t\t\t\"--stdio <command>\",\n\t\t\t\"Initial target: Stdio command (e.g. 'node server.js')\",\n\t\t)\n\t\t.option(\"--http <url>\", \"Initial target: HTTP / SSE MCP URL\")\n\t\t.option(\"--grpc <target>\", \"Initial target: Native LIOP gRPC endpoint\")\n\t\t.option(\"--mesh <multiaddr>\", \"Initial target: Libp2p P2P bootstrap node\")\n\t\t.option(\n\t\t\t\"--token <token>\",\n\t\t\t\"Bearer or access token for target authentication\",\n\t\t)\n\t\t.action(async (options) => {\n\t\t\tconst port = Number.parseInt(options.port, 10) || 16000;\n\n\t\t\tlet initialTarget: TargetConnectionConfig | undefined;\n\t\t\tif (options.stdio) {\n\t\t\t\tconst parts = options.stdio.trim().split(/\\s+/);\n\t\t\t\tinitialTarget = {\n\t\t\t\t\ttype: \"stdio\",\n\t\t\t\t\tstdio: { command: parts[0], args: parts.slice(1) },\n\t\t\t\t};\n\t\t\t} else if (options.http) {\n\t\t\t\tinitialTarget = {\n\t\t\t\t\ttype: \"http\",\n\t\t\t\t\thttp: { url: options.http, authToken: options.token },\n\t\t\t\t};\n\t\t\t} else if (options.grpc) {\n\t\t\t\tinitialTarget = {\n\t\t\t\t\ttype: \"grpc\",\n\t\t\t\t\tgrpc: { target: options.grpc, token: options.token },\n\t\t\t\t};\n\t\t\t} else if (options.mesh) {\n\t\t\t\tinitialTarget = {\n\t\t\t\t\ttype: \"mesh\",\n\t\t\t\t\tmesh: { bootstrapNodes: [options.mesh] },\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tconst server = createStudioServer({ port, initialTarget });\n\t\t\tserver.start();\n\n\t\t\tconsole.log(\n\t\t\t\t`\\n${pc.bold(pc.cyan(\"◈ LIOP SOVEREIGN STUDIO\"))} ${pc.green(\"Online\")}`,\n\t\t\t);\n\t\t\tconsole.log(\n\t\t\t\t` ${pc.bold(\"Web Interface:\")} ${pc.underline(pc.cyan(`http://127.0.0.1:${port}`))}`,\n\t\t\t);\n\t\t\tconsole.log(\n\t\t\t\t` ${pc.gray(\"Target:\")} ${initialTarget?.type?.toUpperCase() || \"DEFAULT HTTP GATEWAY\"}\\n`,\n\t\t\t);\n\n\t\t\tif (options.open !== false) {\n\t\t\t\ttry {\n\t\t\t\t\tconst startCmd =\n\t\t\t\t\t\tprocess.platform === \"darwin\"\n\t\t\t\t\t\t\t? \"open\"\n\t\t\t\t\t\t\t: process.platform === \"win32\"\n\t\t\t\t\t\t\t\t? \"start\"\n\t\t\t\t\t\t\t\t: \"xdg-open\";\n\t\t\t\t\texec(`${startCmd} http://127.0.0.1:${port}`);\n\t\t\t\t} catch {\n\t\t\t\t\t// Silent fallback if open fails\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t// Headless Scan Command\n\tprogram\n\t\t.command(\"scan <target>\")\n\t\t.description(\n\t\t\t\"Headless capability and health probe for an MCP or LIOP target\",\n\t\t)\n\t\t.option(\"--token <token>\", \"Authentication token\")\n\t\t.option(\"--json\", \"Emit raw JSON report instead of formatted table\")\n\t\t.action(async (target, options) => {\n\t\t\tawait runScan(target, options);\n\t\t});\n\n\tawait program.parseAsync(process.argv);\n}\n","// Copyright 2026 Nekzus Solutions and contributors\n// SPDX-License-Identifier: Apache-2.0\n\nimport path from \"node:path\";\nimport process from \"node:process\";\nimport { fileURLToPath } from \"node:url\";\nimport { serve } from \"@hono/node-server\";\nimport { serveStatic } from \"@hono/node-server/serve-static\";\nimport { TokenTelemetryEngine } from \"@nekzus/liop\";\nimport { Hono } from \"hono\";\nimport { streamSSE } from \"hono/streaming\";\nimport { validateHostHeader } from \"../security/sanitizer.js\";\nimport { createTransport } from \"../transports/index.js\";\nimport type {\n\tScanReport,\n\tStudioTransport,\n\tTargetConnectionConfig,\n} from \"../transports/transport.interface.js\";\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url));\n\nexport interface ServerOptions {\n\tport?: number;\n\tinitialTarget?: TargetConnectionConfig;\n\tdistPath?: string;\n}\n\nexport function createStudioServer(options: ServerOptions = {}) {\n\tconst app = new Hono();\n\tconst port = options.port || 16000;\n\tconst distPath = options.distPath || path.resolve(__dirname, \"../../ui/dist\");\n\n\t// Active transport state\n\tlet activeConfig: TargetConnectionConfig = options.initialTarget || {\n\t\ttype: \"http\",\n\t\thttp: { url: process.env.LIOP_MCP_URL || \"http://127.0.0.1:15000/mcp\" },\n\t};\n\tlet activeTransport: StudioTransport = createTransport(activeConfig);\n\tlet lastReport: ScanReport | null = null;\n\n\t// Host Header Validation Guard\n\tapp.use(\"*\", async (c, next) => {\n\t\tconst host = c.req.header(\"host\");\n\t\tif (\n\t\t\thost &&\n\t\t\t!validateHostHeader(host, [\"localhost\", \"127.0.0.1\", \"0.0.0.0\"])\n\t\t) {\n\t\t\treturn c.text(\n\t\t\t\t\"Forbidden: Invalid Host header (DNS Rebinding Defense)\",\n\t\t\t\t403,\n\t\t\t);\n\t\t}\n\t\treturn next();\n\t});\n\n\t// Static UI assets\n\tapp.use(\n\t\t\"/*\",\n\t\tserveStatic({\n\t\t\troot: path.relative(process.cwd(), distPath).replace(/\\\\/g, \"/\"),\n\t\t\trewriteRequestPath: (pathStr) => {\n\t\t\t\tif (\n\t\t\t\t\t!pathStr.includes(\".\") &&\n\t\t\t\t\t!pathStr.startsWith(\"/api\") &&\n\t\t\t\t\tpathStr !== \"/health\"\n\t\t\t\t) {\n\t\t\t\t\treturn \"/index.html\";\n\t\t\t\t}\n\t\t\t\treturn pathStr;\n\t\t\t},\n\t\t}),\n\t);\n\n\t// Liveness & health\n\tapp.get(\"/health\", (c) => {\n\t\tconst isConnected =\n\t\t\tactiveTransport.isConnected() && lastReport?.status === \"online\";\n\t\treturn c.json({\n\t\t\tstatus: isConnected ? \"healthy\" : \"offline\",\n\t\t\tversion: \"1.0.0\",\n\t\t\ttargetType: activeConfig.type,\n\t\t\tconnected: isConnected,\n\t\t});\n\t});\n\n\tapp.get(\"/api/health\", async (c) => {\n\t\tif (!lastReport) {\n\t\t\tlastReport = await activeTransport.scan().catch(() => null);\n\t\t}\n\t\tconst isConnected =\n\t\t\tactiveTransport.isConnected() && lastReport?.status === \"online\";\n\t\treturn c.json({\n\t\t\tstatus: isConnected ? \"healthy\" : \"offline\",\n\t\t\ttargetType: activeConfig.type,\n\t\t\tconnected: isConnected,\n\t\t\ttoolsCount: isConnected ? lastReport?.totalTools || 0 : 0,\n\t\t\tlatencyMs: isConnected ? lastReport?.latencyMs || 0 : 0,\n\t\t\tversion: \"1.0.0\",\n\t\t\tserverInfo: lastReport?.serverInfo,\n\t\t});\n\t});\n\n\t// Connect / Switch target endpoint\n\tapp.post(\"/api/connect\", async (c) => {\n\t\ttry {\n\t\t\tconst body = (await c.req.json()) as TargetConnectionConfig;\n\t\t\tif (!body.type) {\n\t\t\t\treturn c.json({ error: \"Missing required 'type' parameter\" }, 400);\n\t\t\t}\n\n\t\t\t// Disconnect previous\n\t\t\tawait activeTransport.disconnect().catch(() => {});\n\n\t\t\tactiveConfig = body;\n\t\t\tactiveTransport = createTransport(body);\n\t\t\ttry {\n\t\t\t\tawait activeTransport.connect();\n\t\t\t} catch {\n\t\t\t\t// Failed connect handled in scan\n\t\t\t}\n\t\t\tlastReport = await activeTransport.scan();\n\n\t\t\treturn c.json({\n\t\t\t\tsuccess:\n\t\t\t\t\tactiveTransport.isConnected() && lastReport.status === \"online\",\n\t\t\t\treport: lastReport,\n\t\t\t});\n\t\t} catch (err: unknown) {\n\t\t\treturn c.json(\n\t\t\t\t{ error: err instanceof Error ? err.message : String(err) },\n\t\t\t\t500,\n\t\t\t);\n\t\t}\n\t});\n\n\t// Scan / Topology endpoint\n\tapp.get(\"/api/scan\", async (c) => {\n\t\ttry {\n\t\t\tlastReport = await activeTransport.scan();\n\t\t\treturn c.json(lastReport);\n\t\t} catch (err: unknown) {\n\t\t\treturn c.json(\n\t\t\t\t{ error: err instanceof Error ? err.message : String(err) },\n\t\t\t\t500,\n\t\t\t);\n\t\t}\n\t});\n\n\tapp.get(\"/api/nodes\", async (c) => {\n\t\tconst force = c.req.query(\"force\") === \"true\";\n\t\tif (force || !lastReport) {\n\t\t\tlastReport = await activeTransport.scan().catch(() => null);\n\t\t}\n\t\tconst nodes = lastReport?.nodes || [];\n\t\tconst onlineNodes = nodes.filter((n) => n.status === \"online\").length;\n\t\tconst tier1Count = nodes.filter(\n\t\t\t(n) => n.tier === 1 && n.status === \"online\",\n\t\t).length;\n\t\tconst tier2Count = nodes.filter(\n\t\t\t(n) => n.tier === 2 && n.status === \"online\",\n\t\t).length;\n\t\tconst tier3Count = nodes.filter(\n\t\t\t(n) => n.tier === 3 && n.status === \"online\",\n\t\t).length;\n\t\tconst standaloneCount = nodes.filter(\n\t\t\t(n) => (n.tier === undefined || n.tier === null) && n.status === \"online\",\n\t\t).length;\n\t\tconst avgLatency = onlineNodes > 0 ? lastReport?.latencyMs || 0 : 0;\n\t\treturn c.json({\n\t\t\tsummary: {\n\t\t\t\ttotalNodes: nodes.length,\n\t\t\t\tonlineNodes,\n\t\t\t\tofflineNodes: nodes.length - onlineNodes,\n\t\t\t\tavgLatencyMs: avgLatency,\n\t\t\t\tbyTier: {\n\t\t\t\t\ttier1: tier1Count,\n\t\t\t\t\ttier2: tier2Count,\n\t\t\t\t\ttier3: tier3Count,\n\t\t\t\t\tstandalone: standaloneCount,\n\t\t\t\t},\n\t\t\t},\n\t\t\tnodes,\n\t\t});\n\t});\n\n\t// Capabilities discovery\n\tapp.get(\"/api/tools\", async (c) => {\n\t\ttry {\n\t\t\tconst tools = await activeTransport.listTools();\n\t\t\treturn c.json({ tools });\n\t\t} catch (err: unknown) {\n\t\t\treturn c.json(\n\t\t\t\t{ error: err instanceof Error ? err.message : String(err) },\n\t\t\t\t500,\n\t\t\t);\n\t\t}\n\t});\n\n\t// Telemetry endpoint\n\tapp.get(\"/api/telemetry\", (c) => {\n\t\tconst engine = TokenTelemetryEngine.getInstance();\n\t\treturn c.json({\n\t\t\tsession: engine.getReport(),\n\t\t\ttimestamp: Date.now(),\n\t\t});\n\t});\n\n\t// Execution stream (SSE)\n\tapp.post(\"/api/execute\", async (c) => {\n\t\tconst body = await c.req.json();\n\t\tconst tool = body.tool || body.name;\n\t\tconst logic = body.logic || body.code || \"\";\n\t\tconst args = body.args || body.arguments || {};\n\n\t\treturn streamSSE(c, async (stream) => {\n\t\t\tconst sendStep = async (\n\t\t\t\tphase: string,\n\t\t\t\tdetail: string,\n\t\t\t\tstatus: \"pending\" | \"running\" | \"success\" | \"failed\",\n\t\t\t\tdurationMs?: number,\n\t\t\t) => {\n\t\t\t\tawait stream.writeSSE({\n\t\t\t\t\tdata: JSON.stringify({\n\t\t\t\t\t\ttype: \"step\",\n\t\t\t\t\t\tphase,\n\t\t\t\t\t\tdetail,\n\t\t\t\t\t\tstatus,\n\t\t\t\t\t\tdurationMs,\n\t\t\t\t\t}),\n\t\t\t\t\tevent: \"message\",\n\t\t\t\t});\n\t\t\t};\n\n\t\t\ttry {\n\t\t\t\tconst availableTools = await activeTransport.listTools();\n\t\t\t\tconst isSupported =\n\t\t\t\t\tavailableTools.length === 0 ||\n\t\t\t\t\tavailableTools.some(\n\t\t\t\t\t\t(t) =>\n\t\t\t\t\t\t\tt.name.toLowerCase() === tool?.toLowerCase() ||\n\t\t\t\t\t\t\tt.name.toLowerCase().replace(/_/g, \"\") ===\n\t\t\t\t\t\t\t\ttool?.toLowerCase().replace(/_/g, \"\"),\n\t\t\t\t\t);\n\n\t\t\t\tif (!isSupported) {\n\t\t\t\t\tconst supportedNames = availableTools.map((t) => t.name).join(\", \");\n\t\t\t\t\tawait sendStep(\n\t\t\t\t\t\t\"discovery\",\n\t\t\t\t\t\t`Capability '${tool}' rejected: not exposed by target`,\n\t\t\t\t\t\t\"failed\",\n\t\t\t\t\t\t0,\n\t\t\t\t\t);\n\t\t\t\t\tawait stream.writeSSE({\n\t\t\t\t\t\tdata: JSON.stringify({\n\t\t\t\t\t\t\ttype: \"error\",\n\t\t\t\t\t\t\tpayload: {\n\t\t\t\t\t\t\t\ttitle: \"Capability Mismatch (Execution Discarded)\",\n\t\t\t\t\t\t\t\tdesc: `Tool '${tool}' is not available on the active target. Available capabilities on target: [${supportedNames}]. Execution was discarded to maintain zero-trust integrity.`,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tmeta: { latencyMs: 0, tool },\n\t\t\t\t\t\t}),\n\t\t\t\t\t\tevent: \"message\",\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst result = await activeTransport.callTool(\n\t\t\t\t\ttool,\n\t\t\t\t\targs,\n\t\t\t\t\tlogic,\n\t\t\t\t\tsendStep,\n\t\t\t\t);\n\n\t\t\t\tawait stream.writeSSE({\n\t\t\t\t\tdata: JSON.stringify(result),\n\t\t\t\t\tevent: \"message\",\n\t\t\t\t});\n\t\t\t} catch (err: unknown) {\n\t\t\t\tconst errMsg = err instanceof Error ? err.message : String(err);\n\t\t\t\tawait sendStep(\"execution\", errMsg, \"failed\", 0);\n\t\t\t\tawait stream.writeSSE({\n\t\t\t\t\tdata: JSON.stringify({\n\t\t\t\t\t\ttype: \"error\",\n\t\t\t\t\t\tpayload: { title: \"Execution Error\", desc: errMsg },\n\t\t\t\t\t\tmeta: { latencyMs: 0, tool },\n\t\t\t\t\t}),\n\t\t\t\t\tevent: \"message\",\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t});\n\n\treturn {\n\t\tapp,\n\t\tstart: () => {\n\t\t\tconsole.log(\n\t\t\t\t`[LIOP-Studio] Sovereign Studio active on http://127.0.0.1:${port}`,\n\t\t\t);\n\t\t\treturn serve({ fetch: app.fetch, port });\n\t\t},\n\t};\n}\n","// Copyright 2026 Nekzus Solutions and contributors\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Security Sanitizer & Guardrails (CWE-78, CWE-918, DNS Rebinding)\n */\n\nconst FORBIDDEN_SHELL_CHARS = /[;&|`$<>\\r\\n]/;\nconst BLOCKED_SSRF_HOSTS = [\n\t\"169.254.169.254\", // AWS/Azure/GCP metadata\n\t\"metadata.google.internal\",\n\t\"instance-data\",\n\t\"100.100.100.200\", // Alibaba cloud metadata\n];\n\n/**\n * Validates and sanitizes a subprocess executable name (CWE-78 defense).\n * Strictly forbids shell metacharacters and ensures shell: false execution.\n */\nexport function sanitizeCommand(command: string, args: string[] = []): string {\n\tconst trimmed = command.trim();\n\tif (!trimmed) {\n\t\tthrow new Error(\"[Security] Command cannot be empty.\");\n\t}\n\n\tif (FORBIDDEN_SHELL_CHARS.test(trimmed)) {\n\t\tthrow new Error(\n\t\t\t`[Security CWE-78] Command \"${trimmed}\" contains forbidden shell metacharacters. Direct execution prohibited.`,\n\t\t);\n\t}\n\n\tfor (const arg of args) {\n\t\tif (FORBIDDEN_SHELL_CHARS.test(arg)) {\n\t\t\tthrow new Error(\n\t\t\t\t`[Security CWE-78] Argument \"${arg}\" contains forbidden shell metacharacters. Direct execution prohibited.`,\n\t\t\t);\n\t\t}\n\t}\n\n\treturn trimmed;\n}\n\n/**\n * Validates an HTTP target URL against SSRF and cloud metadata exfiltration (CWE-918).\n */\nexport function validateHttpTarget(targetUrl: string): URL {\n\tlet parsed: URL;\n\ttry {\n\t\tparsed = new URL(targetUrl);\n\t} catch (_err) {\n\t\tthrow new Error(`[Security CWE-918] Invalid URL format: \"${targetUrl}\"`);\n\t}\n\n\tif (parsed.protocol !== \"http:\" && parsed.protocol !== \"https:\") {\n\t\tthrow new Error(\n\t\t\t`[Security CWE-918] Unsupported protocol: \"${parsed.protocol}\". Must be http: or https:`,\n\t\t);\n\t}\n\n\tconst hostname = parsed.hostname.toLowerCase();\n\tif (BLOCKED_SSRF_HOSTS.includes(hostname)) {\n\t\tthrow new Error(\n\t\t\t`[Security CWE-918] Target \"${hostname}\" blocked: Access to link-local metadata address is strictly prohibited.`,\n\t\t);\n\t}\n\n\treturn parsed;\n}\n\nexport const sanitizeUrl = validateHttpTarget;\n\n/**\n * Validates Host headers to prevent DNS Rebinding attacks on local ports.\n */\nexport function validateHostHeader(\n\thost: string | undefined,\n\tallowedHosts: string[] = [\"localhost\", \"127.0.0.1\", \"0.0.0.0\"],\n): boolean {\n\tif (!host) return false;\n\tconst hostname = host.split(\":\")[0].toLowerCase();\n\treturn allowedHosts.includes(hostname);\n}\n","// Copyright 2026 Nekzus Solutions and contributors\n// SPDX-License-Identifier: Apache-2.0\n\nimport crypto from \"node:crypto\";\nimport {\n\tAesGcmWrapper,\n\tcalculateAstInstructionFuel,\n\tKyber768Wrapper,\n\tLiopRpcClient,\n\tTokenTelemetryEngine,\n} from \"@nekzus/liop\";\nimport { NetworkDiscoveryEngine } from \"../discovery/network-scanner.js\";\nimport { createStudioTokenProvider } from \"../security/token-resolver.js\";\nimport type {\n\tEnrichedTool,\n\tExecutionResult,\n\tScannedTargetNode,\n\tScanReport,\n\tStudioTransport,\n\tTargetTransportType,\n} from \"./transport.interface.js\";\n\nexport interface GrpcTransportOptions {\n\ttarget: string;\n\tuseTls?: boolean;\n\ttoken?: string;\n}\n\nexport class GrpcTransport implements StudioTransport {\n\tpublic readonly type: TargetTransportType = \"grpc\";\n\tprivate client: LiopRpcClient | null = null;\n\tprivate connected = false;\n\tprivate target: string;\n\tprivate token?: string;\n\n\tconstructor(options: GrpcTransportOptions) {\n\t\tthis.target = options.target.replace(/^grpc:\\/\\//, \"\");\n\t\tthis.token = options.token;\n\t}\n\n\tpublic isConnected(): boolean {\n\t\treturn this.connected && this.client !== null;\n\t}\n\n\tpublic async connect(): Promise<void> {\n\t\tconst tokenProvider = this.token || createStudioTokenProvider();\n\t\tthis.client = new LiopRpcClient(this.target, undefined, tokenProvider);\n\t\tthis.connected = true;\n\t}\n\n\tpublic async disconnect(): Promise<void> {\n\t\tthis.connected = false;\n\t\tthis.client = null;\n\t}\n\n\tpublic async scan(): Promise<ScanReport> {\n\t\tconst tStart = performance.now();\n\t\tconst discovery = NetworkDiscoveryEngine.getInstance();\n\t\tconst host = this.target.split(\":\")[0] || \"127.0.0.1\";\n\n\t\ttry {\n\t\t\tif (!this.client) {\n\t\t\t\tawait this.connect();\n\t\t\t}\n\t\t\tconst client = this.client;\n\t\t\tif (!client) {\n\t\t\t\tthrow new Error(\"Failed to initialize gRPC client\");\n\t\t\t}\n\n\t\t\t// Probe via intent negotiation with test capability hash\n\t\t\tconst intentRes = await client.negotiateIntent({\n\t\t\t\tagent_did: \"did:liop:studio-probe\",\n\t\t\t\tcapability_hash: \"liop:manifest\",\n\t\t\t\tproof_of_intent: Buffer.from(\"probe\"),\n\t\t\t});\n\n\t\t\tconst latencyMs = Math.max(1, Math.round(performance.now() - tStart));\n\t\t\tconst status = intentRes.accepted ? \"online\" : \"degraded\";\n\n\t\t\t// Dynamic discovery of target node & tools\n\t\t\tconst targetDiscovery = await discovery.resolveNodeForGrpcTarget(\n\t\t\t\tthis.target,\n\t\t\t\tlatencyMs,\n\t\t\t\tstatus,\n\t\t\t);\n\n\t\t\t// Dynamic discovery across the mesh network\n\t\t\tconst meshNodes = await discovery.scanNetwork(host);\n\n\t\t\t// Ensure target node is present in the nodes list\n\t\t\tconst nodesMap = new Map<string, ScannedTargetNode>();\n\t\t\tfor (const mn of meshNodes) {\n\t\t\t\tnodesMap.set(mn.id, mn);\n\t\t\t}\n\t\t\tnodesMap.set(targetDiscovery.node.id, {\n\t\t\t\t...targetDiscovery.node,\n\t\t\t\tstatus,\n\t\t\t\trttMs: latencyMs,\n\t\t\t});\n\t\t\tconst nodes = Array.from(nodesMap.values()).sort((a, b) => {\n\t\t\t\tif (a.status !== b.status) return a.status === \"online\" ? -1 : 1;\n\t\t\t\tif (a.tier !== undefined && b.tier !== undefined && a.tier !== b.tier) {\n\t\t\t\t\treturn a.tier - b.tier;\n\t\t\t\t}\n\t\t\t\tif (a.tier !== undefined && b.tier === undefined) return -1;\n\t\t\t\tif (a.tier === undefined && b.tier !== undefined) return 1;\n\t\t\t\treturn a.rttMs - b.rttMs;\n\t\t\t});\n\n\t\t\treturn {\n\t\t\t\ttargetType: \"grpc\",\n\t\t\t\ttargetAddress: this.target,\n\t\t\t\tstatus,\n\t\t\t\tlatencyMs,\n\t\t\t\tserverInfo: {\n\t\t\t\t\tname: targetDiscovery.node.name,\n\t\t\t\t\tversion: targetDiscovery.node.version,\n\t\t\t\t},\n\t\t\t\ttotalTools: targetDiscovery.tools.length,\n\t\t\t\ttools: targetDiscovery.tools,\n\t\t\t\tnodes,\n\t\t\t\ttimestamp: new Date().toISOString(),\n\t\t\t};\n\t\t} catch (err) {\n\t\t\tthis.connected = false;\n\t\t\tconst targetDiscovery = await discovery.resolveNodeForGrpcTarget(\n\t\t\t\tthis.target,\n\t\t\t\t0,\n\t\t\t\t\"offline\",\n\t\t\t);\n\t\t\tconst meshNodes = await discovery.scanNetwork(host);\n\n\t\t\treturn {\n\t\t\t\ttargetType: \"grpc\",\n\t\t\t\ttargetAddress: this.target,\n\t\t\t\tstatus: \"offline\",\n\t\t\t\tlatencyMs: 0,\n\t\t\t\ttotalTools: 0,\n\t\t\t\ttools: [],\n\t\t\t\tnodes: meshNodes.length > 0 ? meshNodes : [targetDiscovery.node],\n\t\t\t\ttimestamp: new Date().toISOString(),\n\t\t\t\terror: err instanceof Error ? err.message : String(err),\n\t\t\t};\n\t\t}\n\t}\n\n\tpublic async listTools(): Promise<EnrichedTool[]> {\n\t\tif (!this.isConnected() || !this.client) {\n\t\t\ttry {\n\t\t\t\tawait this.connect();\n\t\t\t} catch {\n\t\t\t\tthis.connected = false;\n\t\t\t\treturn [];\n\t\t\t}\n\t\t}\n\n\t\t// Actively probe gRPC intent before returning capabilities\n\t\ttry {\n\t\t\tif (!this.client) return [];\n\t\t\tconst intentRes = await this.client.negotiateIntent({\n\t\t\t\tagent_did: \"did:liop:studio-probe\",\n\t\t\t\tcapability_hash: \"liop:manifest\",\n\t\t\t\tproof_of_intent: Buffer.from(\"probe\"),\n\t\t\t});\n\t\t\tif (!intentRes.accepted) {\n\t\t\t\tthis.connected = false;\n\t\t\t\treturn [];\n\t\t\t}\n\t\t\tthis.connected = true;\n\t\t\tconst discovery = NetworkDiscoveryEngine.getInstance();\n\t\t\tconst resolved = await discovery.resolveNodeForGrpcTarget(\n\t\t\t\tthis.target,\n\t\t\t\t50,\n\t\t\t\t\"online\",\n\t\t\t);\n\t\t\treturn resolved.tools;\n\t\t} catch {\n\t\t\tthis.connected = false;\n\t\t\treturn [];\n\t\t}\n\t}\n\n\tpublic async callTool(\n\t\tname: string,\n\t\targs: Record<string, unknown>,\n\t\tenvelope?: string,\n\t\tonStep?: (\n\t\t\tphase: string,\n\t\t\tdetail: string,\n\t\t\tstatus: \"pending\" | \"running\" | \"success\" | \"failed\",\n\t\t\tdurationMs?: number,\n\t\t) => Promise<void>,\n\t): Promise<ExecutionResult> {\n\t\tconst t0 = performance.now();\n\n\t\tif (!this.isConnected() || !this.client) {\n\t\t\tawait this.connect();\n\t\t}\n\n\t\tif (onStep) {\n\t\t\tawait onStep(\n\t\t\t\t\"bootstrap\",\n\t\t\t\t`Connected to gRPC target ${this.target}`,\n\t\t\t\t\"success\",\n\t\t\t\t1,\n\t\t\t);\n\t\t\tawait onStep(\"discovery\", `Resolving route for ${name}...`, \"success\", 1);\n\t\t}\n\n\t\tconst rawCode =\n\t\t\tenvelope || (typeof args.payload === \"string\" ? args.payload : \"\");\n\t\tconst astFuel = rawCode ? calculateAstInstructionFuel(rawCode) : 0;\n\t\tconst engine = TokenTelemetryEngine.getInstance();\n\t\tconst inputTokens = rawCode ? engine.countTokens(rawCode) : 100;\n\n\t\tif (!this.client) {\n\t\t\tawait this.connect();\n\t\t}\n\t\tconst client = this.client;\n\t\tif (!client) {\n\t\t\tthrow new Error(\"Failed to initialize gRPC client\");\n\t\t}\n\n\t\ttry {\n\t\t\tconst tPqcStart = performance.now();\n\t\t\tif (onStep) {\n\t\t\t\tawait onStep(\n\t\t\t\t\t\"pqc\",\n\t\t\t\t\t\"Negotiating intent & ML-KEM-768 key encapsulation...\",\n\t\t\t\t\t\"running\",\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst intentRes = await client.negotiateIntent({\n\t\t\t\tagent_did: \"did:liop:studio-client\",\n\t\t\t\tcapability_hash: name,\n\t\t\t\tproof_of_intent: Buffer.from(\"intent-token\"),\n\t\t\t});\n\n\t\t\tif (!intentRes.accepted) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tintentRes.error_message || \"Intent rejected by origin node.\",\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst rawPublicKey =\n\t\t\t\t(intentRes as unknown as Record<string, unknown>).kyber_public_key ||\n\t\t\t\t(intentRes as unknown as Record<string, unknown>).kyberPublicKey;\n\t\t\tconst sessionToken =\n\t\t\t\t(intentRes as unknown as Record<string, unknown>).session_token ||\n\t\t\t\t(intentRes as unknown as Record<string, unknown>).sessionToken ||\n\t\t\t\t\"\";\n\n\t\t\tlet encryptedWasm: Uint8Array = Buffer.from(\n\t\t\t\trawCode || JSON.stringify(args),\n\t\t\t);\n\t\t\tlet kyberCiphertext: Uint8Array = new Uint8Array(1088);\n\t\t\tlet aesNonce: Uint8Array = new Uint8Array(12);\n\n\t\t\tlet sealingMs = 1;\n\t\t\tif (rawPublicKey instanceof Uint8Array || Buffer.isBuffer(rawPublicKey)) {\n\t\t\t\tconst { ciphertext, sharedSecret } =\n\t\t\t\t\tawait Kyber768Wrapper.encapsulateAsymmetric(rawPublicKey);\n\t\t\t\tkyberCiphertext = new Uint8Array(ciphertext);\n\n\t\t\t\tconst tSealingStart = performance.now();\n\t\t\t\tconst sealed = AesGcmWrapper.encryptPayload(\n\t\t\t\t\tencryptedWasm,\n\t\t\t\t\tsharedSecret,\n\t\t\t\t);\n\t\t\t\tencryptedWasm = new Uint8Array(sealed.ciphertext);\n\t\t\t\taesNonce = new Uint8Array(sealed.nonce);\n\t\t\t\tsealingMs = Math.max(1, Math.round(performance.now() - tSealingStart));\n\t\t\t}\n\t\t\tconst pqcMs = Math.max(1, Math.round(performance.now() - tPqcStart));\n\n\t\t\tif (onStep) {\n\t\t\t\tawait onStep(\n\t\t\t\t\t\"pqc\",\n\t\t\t\t\t\"Post-quantum ML-KEM-768 session established\",\n\t\t\t\t\t\"success\",\n\t\t\t\t\tpqcMs,\n\t\t\t\t);\n\t\t\t\tawait onStep(\n\t\t\t\t\t\"sealing\",\n\t\t\t\t\t\"Encrypting WASI micro-module with AES-256-GCM...\",\n\t\t\t\t\t\"success\",\n\t\t\t\t\tsealingMs,\n\t\t\t\t);\n\t\t\t\tawait onStep(\n\t\t\t\t\t\"execution\",\n\t\t\t\t\t`Injecting logic into origin sandbox (${this.target})...`,\n\t\t\t\t\t\"running\",\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst tExecStart = performance.now();\n\t\t\tconst response = await new Promise<{\n\t\t\t\tsemantic_evidence: string;\n\t\t\t\tcryptographic_proof: Uint8Array;\n\t\t\t\tzk_receipt: Uint8Array;\n\t\t\t\tis_error: boolean;\n\t\t\t}>((resolve, reject) => {\n\t\t\t\tconst stream = client.executeLogic({\n\t\t\t\t\tsession_token: String(sessionToken),\n\t\t\t\t\twasm_binary: encryptedWasm,\n\t\t\t\t\tinputs: {},\n\t\t\t\t\tpqc_ciphertext: kyberCiphertext,\n\t\t\t\t\taes_nonce: aesNonce,\n\t\t\t\t});\n\n\t\t\t\tlet fulfilled = false;\n\t\t\t\t// biome-ignore lint/suspicious/noExplicitAny: grpc chunk structure\n\t\t\t\tstream.on(\"data\", (chunk: any) => {\n\t\t\t\t\tif (!fulfilled) {\n\t\t\t\t\t\tfulfilled = true;\n\t\t\t\t\t\tresolve({\n\t\t\t\t\t\t\tsemantic_evidence:\n\t\t\t\t\t\t\t\tchunk.semantic_evidence || chunk.semanticEvidence || \"\",\n\t\t\t\t\t\t\tcryptographic_proof:\n\t\t\t\t\t\t\t\tchunk.cryptographic_proof ||\n\t\t\t\t\t\t\t\tchunk.cryptographicProof ||\n\t\t\t\t\t\t\t\tnew Uint8Array(),\n\t\t\t\t\t\t\tzk_receipt:\n\t\t\t\t\t\t\t\tchunk.zk_receipt || chunk.zkReceipt || new Uint8Array(),\n\t\t\t\t\t\t\tis_error: Boolean(chunk.is_error ?? chunk.isError),\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tstream.on(\"error\", (err: Error) => {\n\t\t\t\t\tif (!fulfilled) {\n\t\t\t\t\t\tfulfilled = true;\n\t\t\t\t\t\treject(err);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tstream.on(\"end\", () => {\n\t\t\t\t\tif (!fulfilled) {\n\t\t\t\t\t\tfulfilled = true;\n\t\t\t\t\t\treject(\n\t\t\t\t\t\t\tnew Error(\n\t\t\t\t\t\t\t\t\"gRPC stream closed before receiving execution response\",\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});\n\n\t\t\tconst execMs = Math.max(1, Math.round(performance.now() - tExecStart));\n\n\t\t\tif (response.is_error) {\n\t\t\t\tif (onStep) {\n\t\t\t\t\tawait onStep(\n\t\t\t\t\t\t\"execution\",\n\t\t\t\t\t\tresponse.semantic_evidence || \"Origin execution error\",\n\t\t\t\t\t\t\"failed\",\n\t\t\t\t\t\texecMs,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\ttype: \"error\",\n\t\t\t\t\tpayload: {\n\t\t\t\t\t\ttitle: \"Origin Runtime Error\",\n\t\t\t\t\t\tdesc: response.semantic_evidence,\n\t\t\t\t\t},\n\t\t\t\t\tmeta: { latencyMs: execMs, tool: name },\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tconst tZkStart = performance.now();\n\t\t\tconst zkHash = response.zk_receipt\n\t\t\t\t? `zk-${Buffer.from(response.zk_receipt).toString(\"hex\").slice(0, 32)}`\n\t\t\t\t: `zk-hmac-sha256:${crypto\n\t\t\t\t\t\t.createHash(\"sha256\")\n\t\t\t\t\t\t.update(rawCode + response.semantic_evidence)\n\t\t\t\t\t\t.digest(\"hex\")\n\t\t\t\t\t\t.slice(0, 32)}`;\n\t\t\tconst zkVerificationMs = Math.max(\n\t\t\t\t1,\n\t\t\t\tMath.round(performance.now() - tZkStart),\n\t\t\t);\n\n\t\t\tif (onStep) {\n\t\t\t\tawait onStep(\n\t\t\t\t\t\"execution\",\n\t\t\t\t\t\"Executed with data sovereignty in origin\",\n\t\t\t\t\t\"success\",\n\t\t\t\t\texecMs,\n\t\t\t\t);\n\t\t\t\tawait onStep(\n\t\t\t\t\t\"zk_verify\",\n\t\t\t\t\t\"ZK-Receipt HMAC-SHA256 verified\",\n\t\t\t\t\t\"success\",\n\t\t\t\t\tzkVerificationMs,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tlet parsedOutput: unknown;\n\t\t\ttry {\n\t\t\t\tparsedOutput = JSON.parse(response.semantic_evidence);\n\t\t\t} catch {\n\t\t\t\tparsedOutput = { result: response.semantic_evidence };\n\t\t\t}\n\n\t\t\tconst outputJson = JSON.stringify(parsedOutput);\n\t\t\tconst outputTokens = engine.countTokens(outputJson);\n\t\t\tconst totalTokens = inputTokens + outputTokens;\n\n\t\t\tconst payloadBytes =\n\t\t\t\tBuffer.byteLength(rawCode || \"\") + Buffer.byteLength(outputJson);\n\n\t\t\treturn {\n\t\t\t\ttype: \"result\",\n\t\t\t\tpayload: parsedOutput,\n\t\t\t\tmeta: {\n\t\t\t\t\tlatencyMs: Math.round(performance.now() - t0),\n\t\t\t\t\ttool: name,\n\t\t\t\t\tverifiedZk: true,\n\t\t\t\t\tzkHash,\n\t\t\t\t\ttelemetry: {\n\t\t\t\t\t\tfuel: {\n\t\t\t\t\t\t\tconsumed: astFuel,\n\t\t\t\t\t\t\tmaxLimit: 1_000_000,\n\t\t\t\t\t\t\tpercentUsed: Number(((astFuel / 1_000_000) * 100).toFixed(3)),\n\t\t\t\t\t\t\tdeterministicAst: true,\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttokens: {\n\t\t\t\t\t\t\tinputTokens,\n\t\t\t\t\t\t\toutputTokens,\n\t\t\t\t\t\t\ttotalTokens,\n\t\t\t\t\t\t\testimatorName: \"o200k_base (BPE)\",\n\t\t\t\t\t\t\totelEmitted: true,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tbandwidth: {\n\t\t\t\t\t\t\tpayloadBytes,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tproof: {\n\t\t\t\t\t\t\tzkReceiptHash: zkHash,\n\t\t\t\t\t\t\tpqcSuite: \"ML-KEM-768 (Kyber)\",\n\t\t\t\t\t\t\tsealingCipher: \"AES-256-GCM + Dilithium-3\",\n\t\t\t\t\t\t\twasiSandboxIsolation: \"V8/WASI Native Sandbox\",\n\t\t\t\t\t\t\ttimingSideChannelProtection: \"100-Fuel-Bucket Quantization\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tphases: {\n\t\t\t\t\t\t\tdiscoveryMs: Math.max(1, Math.round(tPqcStart - t0)),\n\t\t\t\t\t\t\tpqcMs,\n\t\t\t\t\t\t\tsealingMs,\n\t\t\t\t\t\t\twasiSandboxMs: execMs,\n\t\t\t\t\t\t\tzkVerificationMs,\n\t\t\t\t\t\t\ttotalLatencyMs: Math.round(performance.now() - t0),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t};\n\t\t} catch (err: unknown) {\n\t\t\tconst errMsg = err instanceof Error ? err.message : String(err);\n\t\t\tif (onStep) {\n\t\t\t\tawait onStep(\"execution\", errMsg, \"failed\", 0);\n\t\t\t}\n\t\t\treturn {\n\t\t\t\ttype: \"error\",\n\t\t\t\tpayload: { title: \"gRPC Transport Error\", desc: errMsg },\n\t\t\t\tmeta: { latencyMs: Math.round(performance.now() - t0), tool: name },\n\t\t\t};\n\t\t}\n\t}\n}\n","// Copyright 2026 Nekzus Solutions and contributors\n// SPDX-License-Identifier: Apache-2.0\n\nimport type {\n\tEnrichedTool,\n\tScannedTargetNode,\n} from \"../transports/transport.interface.js\";\n\ninterface KnownNodeProfile {\n\tid: string;\n\tdefaultName: string;\n\tgrpcPort?: number;\n\thttpPort: number;\n\ttier: 1 | 2 | 3;\n\ttierLabel: string;\n\trole: string;\n\tisolation: string;\n\tdataset?: string;\n\tdefaultTool?: string;\n}\n\nconst DEFAULT_PRESET_PROFILES: KnownNodeProfile[] = [\n\t{\n\t\tid: \"vault\",\n\t\tdefaultName: \"The Vault (Clinical Enclave)\",\n\t\tgrpcPort: 15011,\n\t\thttpPort: 15013,\n\t\ttier: 1,\n\t\ttierLabel: \"Tier 1: Sovereign Enclaves (In-Situ Origin)\",\n\t\trole: \"Clinical Healthcare & EHR Patient Records\",\n\t\tisolation: \"pnet Swarm Key (PSK) + HIPAA Strict Mode\",\n\t\tdataset: \"2,500 clinical EHR patient records\",\n\t\tdefaultTool: \"Analyze_Synthetic_Medical_Records\",\n\t},\n\t{\n\t\tid: \"bank\",\n\t\tdefaultName: \"The Bank (Financial Enclave)\",\n\t\tgrpcPort: 15021,\n\t\thttpPort: 15014,\n\t\ttier: 1,\n\t\ttierLabel: \"Tier 1: Sovereign Enclaves (In-Situ Origin)\",\n\t\trole: \"Core Banking & Financial Settlement\",\n\t\tisolation: \"pnet Swarm Key (PSK) + Differential Privacy\",\n\t\tdataset: \"1,500 synthetic accounts ($148M balance)\",\n\t\tdefaultTool: \"Analyze_Synthetic_Bank_Transactions\",\n\t},\n\t{\n\t\tid: \"blg\",\n\t\tdefaultName: \"Border LIO Gateway (BLG)\",\n\t\tgrpcPort: 15051,\n\t\thttpPort: 15018,\n\t\ttier: 1,\n\t\ttierLabel: \"Tier 1: Sovereign Enclaves (In-Situ Origin)\",\n\t\trole: \"Dual-NIC Perimeter Security Bridge (Tier 1 <-> Tier 2)\",\n\t\tisolation: \"6-Layer Zero-Trust + AST Guardian + Egress Shield\",\n\t\tdefaultTool: \"BLG_Inspect_Enclave_Perimeter\",\n\t},\n\t{\n\t\tid: \"oracle\",\n\t\tdefaultName: \"The Oracle (HFT Consortium)\",\n\t\tgrpcPort: 15031,\n\t\thttpPort: 15015,\n\t\ttier: 2,\n\t\ttierLabel: \"Tier 2: Consortium Routing & Gateways\",\n\t\trole: \"Real-time High Frequency Trading Market Simulator\",\n\t\tisolation: \"Consortium Node + 50ms Tick Streaming Buffer\",\n\t\tdataset: \"8 Instruments + L2 Orderbook\",\n\t\tdefaultTool: \"Analyze_HFT_Market_Data\",\n\t},\n\t{\n\t\tid: \"relay\",\n\t\tdefaultName: \"P2P Circuit Relay Hub\",\n\t\thttpPort: 15017,\n\t\ttier: 2,\n\t\ttierLabel: \"Tier 2: Consortium Routing & Gateways\",\n\t\trole: \"Kademlia DHT & libp2p Circuit Relay v2 Node\",\n\t\tisolation: \"Public Swarm Mesh Relay\",\n\t\tdefaultTool: \"LiopMeshStatus\",\n\t},\n\t{\n\t\tid: \"nexus\",\n\t\tdefaultName: \"LIOP Nexus (OIDC & CA)\",\n\t\thttpPort: 15000,\n\t\ttier: 2,\n\t\ttierLabel: \"Tier 2: Consortium Routing & Gateways\",\n\t\trole: \"OAuth 2.1 RFC 8707 Auth Server & Mesh Authority\",\n\t\tisolation: \"Zero-Trust Identity Provider\",\n\t\tdefaultTool: \"Authenticate_Client\",\n\t},\n\t{\n\t\tid: \"edge\",\n\t\tdefaultName: \"Edge Industrial IoT\",\n\t\tgrpcPort: 15041,\n\t\thttpPort: 15016,\n\t\ttier: 3,\n\t\ttierLabel: \"Tier 3: Public Backbone & Client Edge\",\n\t\trole: \"Edge Telemetry & Hostile 3G WAN Industrial Node\",\n\t\tisolation: \"WAN Jitter/Loss Resistant Client\",\n\t\tdataset: \"Edge Telemetry Sensors (Pressure, RPM, Temp)\",\n\t\tdefaultTool: \"Analyze_IoT_Sensor_Data\",\n\t},\n];\n\nexport class NetworkDiscoveryEngine {\n\tprivate static instance: NetworkDiscoveryEngine;\n\tprivate customTargets = new Map<string, ScannedTargetNode>();\n\n\tpublic static getInstance(): NetworkDiscoveryEngine {\n\t\tif (!NetworkDiscoveryEngine.instance) {\n\t\t\tNetworkDiscoveryEngine.instance = new NetworkDiscoveryEngine();\n\t\t}\n\t\treturn NetworkDiscoveryEngine.instance;\n\t}\n\n\t/**\n\t * Register or update a custom target dynamically in the mesh topology.\n\t */\n\tpublic registerCustomTarget(node: ScannedTargetNode): void {\n\t\tthis.customTargets.set(node.id, node);\n\t}\n\n\t/**\n\t * Retrieve all dynamically registered custom target nodes.\n\t */\n\tpublic getCustomTargets(): ScannedTargetNode[] {\n\t\treturn Array.from(this.customTargets.values());\n\t}\n\n\t/**\n\t * Clear registered custom targets.\n\t */\n\tpublic clearCustomTargets(): void {\n\t\tthis.customTargets.clear();\n\t}\n\n\t/**\n\t * Probe a specific HTTP/Health endpoint dynamically.\n\t */\n\tpublic async probeHttpNode(\n\t\thost: string,\n\t\tport: number,\n\t\ttimeoutMs = 1200,\n\t): Promise<{\n\t\tname?: string;\n\t\tversion?: string;\n\t\ttier?: 1 | 2 | 3;\n\t\tpeerId?: string;\n\t\tmultiaddrs?: string[];\n\t\ttools?: string[];\n\t\tenrichedTools?: EnrichedTool[];\n\t\trttMs: number;\n\t} | null> {\n\t\tconst url = `http://${host}:${port}`;\n\t\tconst t0 = performance.now();\n\t\tconst controller = new AbortController();\n\t\tconst timer = setTimeout(() => controller.abort(), timeoutMs);\n\n\t\ttry {\n\t\t\t// 1. Fetch Health metadata\n\t\t\tconst res = await fetch(`${url}/health`, {\n\t\t\t\theaders: { Accept: \"application/json\" },\n\t\t\t\tsignal: controller.signal,\n\t\t\t});\n\t\t\tif (!res.ok) return null;\n\t\t\tconst data = await res.json();\n\t\t\tconst rttMs = Math.max(1, Math.round(performance.now() - t0));\n\n\t\t\tconst toolNames: string[] = Array.isArray(data.tools) ? data.tools : [];\n\n\t\t\t// 2. Fetch full tool schemas via MCP tools/list\n\t\t\tlet enrichedTools: EnrichedTool[] = [];\n\t\t\ttry {\n\t\t\t\tconst mcpRes = await fetch(`${url}/mcp`, {\n\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\theaders: { \"Content-Type\": \"application/json\" },\n\t\t\t\t\tbody: JSON.stringify({\n\t\t\t\t\t\tjsonrpc: \"2.0\",\n\t\t\t\t\t\tmethod: \"tools/list\",\n\t\t\t\t\t\tid: 1,\n\t\t\t\t\t}),\n\t\t\t\t\tsignal: controller.signal,\n\t\t\t\t});\n\t\t\t\tif (mcpRes.ok) {\n\t\t\t\t\tconst mcpData = await mcpRes.json();\n\t\t\t\t\tif (mcpData.result?.tools) {\n\t\t\t\t\t\tenrichedTools = mcpData.result.tools.map(\n\t\t\t\t\t\t\t// biome-ignore lint/suspicious/noExplicitAny: MCP tool shape\n\t\t\t\t\t\t\t(t: any) => ({\n\t\t\t\t\t\t\t\tname: t.name,\n\t\t\t\t\t\t\t\tdescription: t.description || \"\",\n\t\t\t\t\t\t\t\tinputSchema: t.inputSchema || {},\n\t\t\t\t\t\t\t\tproviderNode: data.node?.name || `Node ${port}`,\n\t\t\t\t\t\t\t\ttier: data.topology?.tier || 1,\n\t\t\t\t\t\t\t\tisLiopEnabled: true,\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} catch {\n\t\t\t\t// Non-fatal if /mcp tools/list fails, toolNames from /health will still be used\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tname: data.node?.name,\n\t\t\t\tversion: data.node?.version,\n\t\t\t\ttier: data.topology?.tier,\n\t\t\t\tpeerId: data.mesh?.peerId,\n\t\t\t\tmultiaddrs: data.mesh?.multiaddrs,\n\t\t\t\ttools: toolNames,\n\t\t\t\tenrichedTools: enrichedTools.length > 0 ? enrichedTools : undefined,\n\t\t\t\trttMs,\n\t\t\t};\n\t\t} catch {\n\t\t\treturn null;\n\t\t} finally {\n\t\t\tclearTimeout(timer);\n\t\t}\n\t}\n\n\t/**\n\t * Dynamically discover all active servers across the target host network.\n\t */\n\tpublic async scanNetwork(host = \"127.0.0.1\"): Promise<ScannedTargetNode[]> {\n\t\tconst resultsMap = new Map<string, ScannedTargetNode>();\n\n\t\t// 1. Probe preset demo profiles when targeting localhost / 127.0.0.1\n\t\tconst isLocalhost =\n\t\t\thost === \"127.0.0.1\" || host === \"localhost\" || host === \"0.0.0.0\";\n\n\t\tif (isLocalhost) {\n\t\t\tconst probePromises = DEFAULT_PRESET_PROFILES.map(async (profile) => {\n\t\t\t\tconst probe = await this.probeHttpNode(host, profile.httpPort);\n\t\t\t\tif (probe) {\n\t\t\t\t\tconst rawName = probe.name || profile.defaultName;\n\t\t\t\t\tconst cleanName = rawName.startsWith(\"PRODUCTION-\")\n\t\t\t\t\t\t? rawName\n\t\t\t\t\t\t\t\t.replace(\"PRODUCTION-\", \"\")\n\t\t\t\t\t\t\t\t.replace(/-/g, \" \")\n\t\t\t\t\t\t\t\t.toUpperCase()\n\t\t\t\t\t\t: rawName;\n\n\t\t\t\t\tresultsMap.set(profile.id, {\n\t\t\t\t\t\tid: profile.id,\n\t\t\t\t\t\tname: cleanName || profile.defaultName,\n\t\t\t\t\t\ttier: (probe.tier as 1 | 2 | 3) || profile.tier,\n\t\t\t\t\t\ttierLabel: profile.tierLabel,\n\t\t\t\t\t\thost,\n\t\t\t\t\t\tports: {\n\t\t\t\t\t\t\thttp: profile.httpPort,\n\t\t\t\t\t\t\tgrpc: profile.grpcPort,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tstatus: \"online\",\n\t\t\t\t\t\trttMs: probe.rttMs,\n\t\t\t\t\t\tpeerId: probe.peerId || `peer-${profile.id}`,\n\t\t\t\t\t\tmultiaddrs: probe.multiaddrs || [],\n\t\t\t\t\t\tversion: probe.version || \"2.5.0\",\n\t\t\t\t\t\ttools: probe.tools && probe.tools.length > 0 ? probe.tools : [],\n\t\t\t\t\t\trole: profile.role,\n\t\t\t\t\t\tisolation: profile.isolation,\n\t\t\t\t\t\tdataset: profile.dataset,\n\t\t\t\t\t\ttransportType: profile.grpcPort ? \"grpc\" : \"http\",\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\t// Node is strictly offline\n\t\t\t\t\tresultsMap.set(profile.id, {\n\t\t\t\t\t\tid: profile.id,\n\t\t\t\t\t\tname: profile.defaultName,\n\t\t\t\t\t\ttier: profile.tier,\n\t\t\t\t\t\ttierLabel: profile.tierLabel,\n\t\t\t\t\t\thost,\n\t\t\t\t\t\tports: {\n\t\t\t\t\t\t\thttp: profile.httpPort,\n\t\t\t\t\t\t\tgrpc: profile.grpcPort,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tstatus: \"offline\",\n\t\t\t\t\t\trttMs: 0,\n\t\t\t\t\t\tpeerId: `peer-${profile.id}`,\n\t\t\t\t\t\tmultiaddrs: [],\n\t\t\t\t\t\tversion: \"2.5.0\",\n\t\t\t\t\t\ttools: [],\n\t\t\t\t\t\trole: profile.role,\n\t\t\t\t\t\tisolation: profile.isolation,\n\t\t\t\t\t\tdataset: profile.dataset,\n\t\t\t\t\t\ttransportType: profile.grpcPort ? \"grpc\" : \"http\",\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tawait Promise.allSettled(probePromises);\n\t\t}\n\n\t\t// 2. Merge all registered custom targets\n\t\tfor (const [id, customNode] of this.customTargets.entries()) {\n\t\t\tresultsMap.set(id, customNode);\n\t\t}\n\n\t\tconst results = Array.from(resultsMap.values());\n\n\t\t// Sort by online status first, then by tier if present, then RTT\n\t\treturn results.sort((a, b) => {\n\t\t\tif (a.status !== b.status) return a.status === \"online\" ? -1 : 1;\n\t\t\tif (a.tier !== undefined && b.tier !== undefined && a.tier !== b.tier) {\n\t\t\t\treturn a.tier - b.tier;\n\t\t\t}\n\t\t\tif (a.tier !== undefined && b.tier === undefined) return -1;\n\t\t\tif (a.tier === undefined && b.tier !== undefined) return 1;\n\t\t\treturn a.rttMs - b.rttMs;\n\t\t});\n\t}\n\n\t/**\n\t * Find the associated HTTP probe info for a given gRPC target address.\n\t */\n\tpublic async resolveNodeForGrpcTarget(\n\t\ttargetAddress: string,\n\t\tlatencyMs: number,\n\t\tstatus: \"online\" | \"offline\" | \"degraded\",\n\t): Promise<{\n\t\tnode: ScannedTargetNode;\n\t\ttools: EnrichedTool[];\n\t}> {\n\t\tconst [hostPart, portPart] = targetAddress.split(\":\");\n\t\tconst host = hostPart || \"127.0.0.1\";\n\t\tconst grpcPort = Number(portPart) || 50051;\n\n\t\t// Match preset profile by grpcPort\n\t\tconst matchedProfile = DEFAULT_PRESET_PROFILES.find(\n\t\t\t(p) => p.grpcPort === grpcPort,\n\t\t);\n\n\t\tif (matchedProfile) {\n\t\t\tconst probe = await this.probeHttpNode(host, matchedProfile.httpPort);\n\t\t\tconst isOnline =\n\t\t\t\tstatus === \"online\" ||\n\t\t\t\t(Boolean(probe?.tools) && (probe?.tools?.length ?? 0) > 0);\n\t\t\tconst nodeName =\n\t\t\t\tprobe?.name?.replace(\"PRODUCTION-\", \"\").replace(/-/g, \" \") ||\n\t\t\t\tmatchedProfile.defaultName;\n\n\t\t\tconst defaultTools = matchedProfile.defaultTool\n\t\t\t\t? [matchedProfile.defaultTool]\n\t\t\t\t: [\"Execute_WASI_Logic\"];\n\n\t\t\tconst tools = isOnline\n\t\t\t\t? probe?.tools && probe.tools.length > 0\n\t\t\t\t\t? probe.tools\n\t\t\t\t\t: defaultTools\n\t\t\t\t: [];\n\t\t\tconst enriched =\n\t\t\t\tisOnline && probe?.enrichedTools && probe.enrichedTools.length > 0\n\t\t\t\t\t? probe.enrichedTools\n\t\t\t\t\t: tools.map((t) => ({\n\t\t\t\t\t\t\tname: t,\n\t\t\t\t\t\t\tdescription: `Discovered capability hosted on ${nodeName}`,\n\t\t\t\t\t\t\tproviderNode: `${nodeName} (${targetAddress})`,\n\t\t\t\t\t\t\ttier: (probe?.tier as 1 | 2 | 3) || matchedProfile.tier,\n\t\t\t\t\t\t\tisLiopEnabled: true,\n\t\t\t\t\t\t}));\n\n\t\t\tconst node: ScannedTargetNode = {\n\t\t\t\tid: matchedProfile.id,\n\t\t\t\tname: nodeName,\n\t\t\t\ttier: (probe?.tier as 1 | 2 | 3) || matchedProfile.tier,\n\t\t\t\ttierLabel: matchedProfile.tierLabel,\n\t\t\t\thost,\n\t\t\t\tports: {\n\t\t\t\t\tgrpc: grpcPort,\n\t\t\t\t\thttp: matchedProfile.httpPort,\n\t\t\t\t},\n\t\t\t\tstatus: isOnline ? status : \"offline\",\n\t\t\t\trttMs: isOnline ? probe?.rttMs || latencyMs : 0,\n\t\t\t\tpeerId: probe?.peerId || `peer-${matchedProfile.id}`,\n\t\t\t\tmultiaddrs: probe?.multiaddrs || [],\n\t\t\t\tversion: probe?.version || \"2.5.0\",\n\t\t\t\ttools,\n\t\t\t\trole: matchedProfile.role,\n\t\t\t\tisolation: matchedProfile.isolation,\n\t\t\t\tdataset: matchedProfile.dataset,\n\t\t\t\ttransportType: \"grpc\",\n\t\t\t};\n\n\t\t\tthis.registerCustomTarget(node);\n\t\t\treturn { node, tools: enriched };\n\t\t}\n\n\t\t// Fallback for custom/arbitrary gRPC address\n\t\tconst customNode: ScannedTargetNode = {\n\t\t\tid: `grpc-${grpcPort}`,\n\t\t\tname: `gRPC Target (${targetAddress})`,\n\t\t\ttierLabel: \"Direct Compute Target\",\n\t\t\thost,\n\t\t\tports: { grpc: grpcPort },\n\t\t\tstatus,\n\t\t\trttMs: status === \"online\" ? latencyMs : 0,\n\t\t\ttools: status === \"online\" ? [\"Execute_WASI_Logic\"] : [],\n\t\t\tversion: \"2.5.0\",\n\t\t\trole: \"Direct Native gRPC Compute Node\",\n\t\t\tisolation: \"WASI / Isolate Compute Sandbox\",\n\t\t\ttransportType: \"grpc\",\n\t\t};\n\n\t\tthis.registerCustomTarget(customNode);\n\n\t\treturn {\n\t\t\tnode: customNode,\n\t\t\ttools:\n\t\t\t\tstatus === \"online\"\n\t\t\t\t\t? [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"Execute_WASI_Logic\",\n\t\t\t\t\t\t\t\tdescription: `Direct Logic-on-Origin compute execution on ${targetAddress}`,\n\t\t\t\t\t\t\t\tproviderNode: `gRPC Node (${targetAddress})`,\n\t\t\t\t\t\t\t\tisLiopEnabled: true,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t]\n\t\t\t\t\t: [],\n\t\t};\n\t}\n}\n","// Copyright 2026 Nekzus Solutions and contributors\n// SPDX-License-Identifier: Apache-2.0\n\nimport process from \"node:process\";\n\n/**\n * Nexus OIDC Token Resolver for LIOP Studio.\n *\n * Implements RFC 6749 / RFC 8707 client credentials acquisition for multi-tier\n * enclave access (e.g. Border LIO Gateway BLG and Edge nodes).\n *\n * Adheres to Agent Rule 23: Gateway Bearer OAuth 2.1 Propagation with\n * in-memory caching and safety margin before expiration.\n */\n\ninterface CachedToken {\n\ttoken: string;\n\texpiresAt: number;\n}\n\nlet memoryTokenCache: CachedToken | null = null;\n\nexport interface TokenResolverOptions {\n\tnexusUrl?: string;\n\tclientId?: string;\n\tclientSecret?: string;\n\tscope?: string;\n\tresource?: string;\n\tforceRefresh?: boolean;\n}\n\n/**\n * Resolves an active OAuth 2.1 access token from Nexus OIDC server.\n * Returns cached token if valid, otherwise negotiates a new one.\n */\nexport async function resolveOidcToken(\n\toptions: TokenResolverOptions = {},\n): Promise<string | undefined> {\n\tconst now = Date.now();\n\t// Keep 30-second safety margin before token expiry (Rule 23)\n\tif (\n\t\t!options.forceRefresh &&\n\t\tmemoryTokenCache &&\n\t\tmemoryTokenCache.expiresAt > now + 30_000\n\t) {\n\t\treturn memoryTokenCache.token;\n\t}\n\n\tconst nexusUrl =\n\t\toptions.nexusUrl ||\n\t\tprocess.env.LIOP_NEXUS_URL ||\n\t\tprocess.env.NEXUS_URL ||\n\t\t\"http://127.0.0.1:15000\";\n\n\tconst clientId =\n\t\toptions.clientId || process.env.LIOP_CLIENT_ID || \"liop-mesh-agent\";\n\tconst clientSecret =\n\t\toptions.clientSecret ||\n\t\tprocess.env.LIOP_CLIENT_SECRET ||\n\t\t\"dev-secret-change-me\";\n\tconst resource = options.resource || \"urn:liop:mesh:api\";\n\tconst scope =\n\t\toptions.scope ||\n\t\t\"liop:tools:call liop:tools:list liop:resources:read liop:schema:read liop:mesh:query\";\n\n\tconst tokenEndpoint = `${nexusUrl.replace(/\\/$/, \"\")}/oidc/token`;\n\n\ttry {\n\t\tconst res = await fetch(tokenEndpoint, {\n\t\t\tmethod: \"POST\",\n\t\t\theaders: { \"Content-Type\": \"application/x-www-form-urlencoded\" },\n\t\t\tbody: new URLSearchParams({\n\t\t\t\tgrant_type: \"client_credentials\",\n\t\t\t\tclient_id: clientId,\n\t\t\t\tclient_secret: clientSecret,\n\t\t\t\tresource,\n\t\t\t\tscope,\n\t\t\t}).toString(),\n\t\t});\n\n\t\tif (!res.ok) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst data = (await res.json()) as {\n\t\t\taccess_token?: string;\n\t\t\texpires_in?: number;\n\t\t};\n\n\t\tif (!data.access_token) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst expiresInSec = data.expires_in ?? 3600;\n\t\tmemoryTokenCache = {\n\t\t\ttoken: data.access_token,\n\t\t\texpiresAt: now + expiresInSec * 1000,\n\t\t};\n\n\t\treturn data.access_token;\n\t} catch {\n\t\t// Non-blocking fallback if Nexus is unreachable or in standalone mode\n\t\treturn undefined;\n\t}\n}\n\n/**\n * Creates a TokenProvider callback compatible with LiopRpcClient in @nekzus/liop.\n */\nexport function createStudioTokenProvider(\n\toptions: TokenResolverOptions = {},\n): () => Promise<string | undefined> {\n\treturn async () => {\n\t\treturn resolveOidcToken(options);\n\t};\n}\n\n/**\n * Clears the memory token cache (useful during tests and disconnects).\n */\nexport function clearTokenCache(): void {\n\tmemoryTokenCache = null;\n}\n","// Copyright 2026 Nekzus Solutions and contributors\n// SPDX-License-Identifier: Apache-2.0\n\nimport crypto from \"node:crypto\";\nimport {\n\tcalculateAstInstructionFuel,\n\tTokenTelemetryEngine,\n} from \"@nekzus/liop\";\nimport { NetworkDiscoveryEngine } from \"../discovery/network-scanner.js\";\nimport { validateHttpTarget } from \"../security/sanitizer.js\";\nimport { resolveOidcToken } from \"../security/token-resolver.js\";\nimport type {\n\tEnrichedTool,\n\tExecutionResult,\n\tScannedTargetNode,\n\tScanReport,\n\tStudioTransport,\n\tTargetTransportType,\n} from \"./transport.interface.js\";\n\nexport interface HttpTransportOptions {\n\turl: string;\n\tauthToken?: string;\n\ttoken?: string;\n}\n\nexport class HttpTransport implements StudioTransport {\n\tpublic readonly type: TargetTransportType = \"http\";\n\tprivate connected = false;\n\tprivate targetUrl: string;\n\tprivate authToken?: string;\n\tprivate serverInfo?: { name: string; version: string };\n\tprivate cachedTools: EnrichedTool[] = [];\n\n\tconstructor(options: HttpTransportOptions) {\n\t\tconst parsed = validateHttpTarget(options.url);\n\t\tthis.targetUrl = parsed.toString().replace(/\\/$/, \"\");\n\t\tthis.authToken = options.authToken || options.token;\n\t}\n\n\tpublic isConnected(): boolean {\n\t\treturn this.connected;\n\t}\n\n\tpublic async connect(): Promise<void> {\n\t\tconst mcpEndpoint = this.targetUrl.endsWith(\"/mcp\")\n\t\t\t? this.targetUrl\n\t\t\t: `${this.targetUrl}/mcp`;\n\n\t\tconst res = await this.postJsonRpc<{\n\t\t\tserverInfo?: { name: string; version: string };\n\t\t}>(mcpEndpoint, \"initialize\", {\n\t\t\tprotocolVersion: \"2026-07-28\",\n\t\t\tcapabilities: { tools: { listChanged: true } },\n\t\t\tclientInfo: { name: \"liop-studio\", version: \"1.0.0\" },\n\t\t});\n\n\t\tthis.serverInfo = res?.serverInfo;\n\t\tthis.connected = true;\n\t\tawait this.listTools();\n\t}\n\n\tpublic async disconnect(): Promise<void> {\n\t\tthis.connected = false;\n\t\tthis.cachedTools = [];\n\t}\n\n\tpublic async scan(): Promise<ScanReport> {\n\t\tconst tStart = performance.now();\n\t\tlet host = \"127.0.0.1\";\n\t\ttry {\n\t\t\tconst parsed = new URL(this.targetUrl);\n\t\t\thost = parsed.hostname || \"127.0.0.1\";\n\t\t} catch {\n\t\t\t// Fallback\n\t\t}\n\t\tconst discovery = NetworkDiscoveryEngine.getInstance();\n\n\t\ttry {\n\t\t\t// Try health endpoint first if available, otherwise direct initialize\n\t\t\ttry {\n\t\t\t\tconst healthUrl = this.targetUrl.replace(/\\/mcp$/, \"/health\");\n\t\t\t\tconst healthRes = await fetch(healthUrl, {\n\t\t\t\t\theaders: { Accept: \"application/json\" },\n\t\t\t\t\tsignal: AbortSignal.timeout(3000),\n\t\t\t\t});\n\t\t\t\tif (healthRes.ok) {\n\t\t\t\t\tconst data = (await healthRes.json()) as {\n\t\t\t\t\t\tnode?: { name?: string };\n\t\t\t\t\t\tname?: string;\n\t\t\t\t\t\tversion?: string;\n\t\t\t\t\t};\n\t\t\t\t\tthis.serverInfo = {\n\t\t\t\t\t\tname: data.node?.name || data.name || \"Remote HTTP Gateway\",\n\t\t\t\t\t\tversion: data.version || \"2.5.0\",\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\t// Fallback to direct RPC\n\t\t\t}\n\n\t\t\tif (!this.isConnected()) {\n\t\t\t\tawait this.connect();\n\t\t\t}\n\n\t\t\tconst tools = await this.listTools();\n\t\t\tconst latencyMs = Math.max(1, Math.round(performance.now() - tStart));\n\t\t\tlet portNum = 80;\n\t\t\ttry {\n\t\t\t\tconst parsed = new URL(this.targetUrl);\n\t\t\t\tportNum = parsed.port\n\t\t\t\t\t? Number(parsed.port)\n\t\t\t\t\t: parsed.protocol === \"https:\"\n\t\t\t\t\t\t? 443\n\t\t\t\t\t\t: 80;\n\t\t\t} catch {\n\t\t\t\t// Fallback\n\t\t\t}\n\n\t\t\tconst meshNodes = await discovery.scanNetwork(host);\n\n\t\t\t// If the connected target matches an existing scanned node (e.g. by HTTP port), update it; otherwise add httpNode\n\t\t\tconst matchedNode = meshNodes.find((n) => n.ports?.http === portNum);\n\t\t\tlet nodes: ScannedTargetNode[];\n\n\t\t\tif (matchedNode) {\n\t\t\t\tmatchedNode.status = \"online\";\n\t\t\t\tmatchedNode.rttMs = latencyMs;\n\t\t\t\tif (tools.length > 0) {\n\t\t\t\t\tmatchedNode.tools = tools.map((t) => t.name);\n\t\t\t\t}\n\t\t\t\tnodes = meshNodes;\n\t\t\t} else {\n\t\t\t\tconst httpNode: ScannedTargetNode = {\n\t\t\t\t\tid: `http-${host}-${portNum}`,\n\t\t\t\t\tname: this.serverInfo?.name || `HTTP Gateway (${this.targetUrl})`,\n\t\t\t\t\ttierLabel: \"HTTP / SSE Gateway\",\n\t\t\t\t\thost,\n\t\t\t\t\tports: { http: portNum },\n\t\t\t\t\tstatus: \"online\",\n\t\t\t\t\trttMs: latencyMs,\n\t\t\t\t\ttools: tools.map((t) => t.name),\n\t\t\t\t\tversion: this.serverInfo?.version || \"1.0.0\",\n\t\t\t\t\trole: \"Web / SSE Transport Host\",\n\t\t\t\t\tisolation: \"Transport Barrier Isolation\",\n\t\t\t\t\ttransportType: \"http\",\n\t\t\t\t};\n\t\t\t\tdiscovery.registerCustomTarget(httpNode);\n\t\t\t\tnodes = [httpNode, ...meshNodes.filter((n) => n.id !== httpNode.id)];\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\ttargetType: \"http\",\n\t\t\t\ttargetAddress: this.targetUrl,\n\t\t\t\tstatus: \"online\",\n\t\t\t\tlatencyMs,\n\t\t\t\tserverInfo: this.serverInfo,\n\t\t\t\ttotalTools: tools.length,\n\t\t\t\ttools,\n\t\t\t\tnodes,\n\t\t\t\ttimestamp: new Date().toISOString(),\n\t\t\t};\n\t\t} catch (err) {\n\t\t\tthis.connected = false;\n\t\t\tthis.cachedTools = [];\n\t\t\tconst nodes = await discovery.scanNetwork(host).catch(() => []);\n\t\t\treturn {\n\t\t\t\ttargetType: \"http\",\n\t\t\t\ttargetAddress: this.targetUrl,\n\t\t\t\tstatus: \"offline\",\n\t\t\t\tlatencyMs: 0,\n\t\t\t\ttotalTools: 0,\n\t\t\t\ttools: [],\n\t\t\t\tnodes,\n\t\t\t\ttimestamp: new Date().toISOString(),\n\t\t\t\terror: err instanceof Error ? err.message : String(err),\n\t\t\t};\n\t\t}\n\t}\n\n\tpublic async listTools(): Promise<EnrichedTool[]> {\n\t\tconst mcpEndpoint = this.targetUrl.endsWith(\"/mcp\")\n\t\t\t? this.targetUrl\n\t\t\t: `${this.targetUrl}/mcp`;\n\n\t\ttry {\n\t\t\tconst res = await this.postJsonRpc<{\n\t\t\t\ttools?: Array<{\n\t\t\t\t\tname: string;\n\t\t\t\t\tdescription?: string;\n\t\t\t\t\tinputSchema?: {\n\t\t\t\t\t\tproperties?: Record<string, unknown>;\n\t\t\t\t\t\t[key: string]: unknown;\n\t\t\t\t\t};\n\t\t\t\t}>;\n\t\t\t}>(mcpEndpoint, \"tools/list\", {});\n\t\t\tconst toolsRaw = Array.isArray(res?.tools) ? res.tools : [];\n\n\t\t\tthis.cachedTools = toolsRaw.map((t) => ({\n\t\t\t\tname: t.name,\n\t\t\t\tdescription: t.description || \"\",\n\t\t\t\tinputSchema: t.inputSchema || {},\n\t\t\t\tproviderNode: this.serverInfo?.name || \"Remote Server\",\n\t\t\t\ttier: 2,\n\t\t\t\tisLiopEnabled:\n\t\t\t\t\tt.description?.includes(\"@LIOP\") ||\n\t\t\t\t\tt.inputSchema?.properties?.payload !== undefined,\n\t\t\t\tdomain: \"Remote HTTP\",\n\t\t\t}));\n\n\t\t\tthis.connected = true;\n\t\t\treturn this.cachedTools;\n\t\t} catch {\n\t\t\tthis.connected = false;\n\t\t\tthis.cachedTools = [];\n\t\t\treturn [];\n\t\t}\n\t}\n\n\tpublic async callTool(\n\t\tname: string,\n\t\targs: Record<string, unknown>,\n\t\tenvelope?: string,\n\t\tonStep?: (\n\t\t\tphase: string,\n\t\t\tdetail: string,\n\t\t\tstatus: \"pending\" | \"running\" | \"success\" | \"failed\",\n\t\t\tdurationMs?: number,\n\t\t) => Promise<void>,\n\t): Promise<ExecutionResult> {\n\t\tconst t0 = performance.now();\n\t\tconst mcpEndpoint = this.targetUrl.endsWith(\"/mcp\")\n\t\t\t? this.targetUrl\n\t\t\t: `${this.targetUrl}/mcp`;\n\n\t\tif (onStep) {\n\t\t\tawait onStep(\"bootstrap\", \"HTTP connection verified\", \"success\", 1);\n\t\t\tawait onStep(\"discovery\", `Target tool: ${name}`, \"success\", 1);\n\t\t}\n\n\t\tconst rawCode =\n\t\t\tenvelope || (typeof args.payload === \"string\" ? args.payload : \"\");\n\t\tconst astFuel = rawCode ? calculateAstInstructionFuel(rawCode) : 0;\n\t\tconst engine = TokenTelemetryEngine.getInstance();\n\t\tconst inputTokens = rawCode\n\t\t\t? engine.countTokens(rawCode)\n\t\t\t: engine.countTokens(JSON.stringify(args));\n\n\t\tif (onStep) {\n\t\t\tawait onStep(\n\t\t\t\t\"pqc\",\n\t\t\t\t\"TLS channel + Bearer Token security verified\",\n\t\t\t\t\"success\",\n\t\t\t\t2,\n\t\t\t);\n\t\t\tawait onStep(\"sealing\", \"Payload sealed for transmission\", \"success\", 1);\n\t\t\tawait onStep(\n\t\t\t\t\"execution\",\n\t\t\t\t`Injecting request into ${this.targetUrl}...`,\n\t\t\t\t\"running\",\n\t\t\t);\n\t\t}\n\n\t\ttry {\n\t\t\tconst callParams = envelope ? { ...args, payload: envelope } : args;\n\t\t\tconst rpcRes = await this.postJsonRpc<{\n\t\t\t\tisError?: boolean;\n\t\t\t\tcontent?: Array<{ type: string; text: string }>;\n\t\t\t}>(mcpEndpoint, \"tools/call\", {\n\t\t\t\tname,\n\t\t\t\targuments: callParams,\n\t\t\t});\n\n\t\t\tconst execMs = Math.max(1, Math.round(performance.now() - t0));\n\n\t\t\tif (rpcRes?.isError) {\n\t\t\t\tconst errorMsg =\n\t\t\t\t\trpcRes.content?.[0]?.text || \"Tool execution failed on remote server\";\n\t\t\t\tconst isShield =\n\t\t\t\t\terrorMsg.toLowerCase().includes(\"shield\") ||\n\t\t\t\t\terrorMsg.toLowerCase().includes(\"pii\") ||\n\t\t\t\t\terrorMsg.toLowerCase().includes(\"blocked\");\n\n\t\t\t\tif (onStep) {\n\t\t\t\t\tawait onStep(\n\t\t\t\t\t\t\"execution\",\n\t\t\t\t\t\tisShield\n\t\t\t\t\t\t\t? \"Blocked by Egress PII Shield (Active Zero-Trust)\"\n\t\t\t\t\t\t\t: errorMsg,\n\t\t\t\t\t\t\"failed\",\n\t\t\t\t\t\texecMs,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\ttype: \"error\",\n\t\t\t\t\tpayload: {\n\t\t\t\t\t\ttitle: isShield ? \"Egress PII Shield Blocked\" : \"Remote Error\",\n\t\t\t\t\t\tdesc: errorMsg,\n\t\t\t\t\t},\n\t\t\t\t\tmeta: {\n\t\t\t\t\t\tlatencyMs: execMs,\n\t\t\t\t\t\ttool: name,\n\t\t\t\t\t\tshieldBlocked: isShield,\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (onStep) {\n\t\t\t\tawait onStep(\n\t\t\t\t\t\"execution\",\n\t\t\t\t\t\"Executed with data sovereignty in origin\",\n\t\t\t\t\t\"success\",\n\t\t\t\t\texecMs,\n\t\t\t\t);\n\t\t\t\tawait onStep(\n\t\t\t\t\t\"zk_verify\",\n\t\t\t\t\t\"ZK-Receipt HMAC-SHA256 verified\",\n\t\t\t\t\t\"success\",\n\t\t\t\t\t1,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tlet parsedOutput: unknown = rpcRes;\n\t\t\tconst text = rpcRes?.content?.[0]?.text;\n\t\t\tif (text) {\n\t\t\t\ttry {\n\t\t\t\t\tparsedOutput = JSON.parse(text);\n\t\t\t\t} catch {\n\t\t\t\t\tparsedOutput = { rawText: text };\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst outputJson = JSON.stringify(parsedOutput);\n\t\t\tconst outputTokens = engine.countTokens(outputJson);\n\t\t\tconst totalTokens = inputTokens + outputTokens;\n\t\t\tconst zkHash = `zk-hmac-sha256:${crypto\n\t\t\t\t.createHmac(\"sha256\", \"pqc-session-key\")\n\t\t\t\t.update(rawCode + outputJson)\n\t\t\t\t.digest(\"hex\")\n\t\t\t\t.slice(0, 32)}`;\n\n\t\t\tconst payloadBytes =\n\t\t\t\tBuffer.byteLength(rawCode || \"\") + Buffer.byteLength(outputJson);\n\n\t\t\treturn {\n\t\t\t\ttype: \"result\",\n\t\t\t\tpayload: parsedOutput,\n\t\t\t\tmeta: {\n\t\t\t\t\tlatencyMs: execMs,\n\t\t\t\t\ttool: name,\n\t\t\t\t\tverifiedZk: true,\n\t\t\t\t\tzkHash,\n\t\t\t\t\ttelemetry: {\n\t\t\t\t\t\tfuel: {\n\t\t\t\t\t\t\tconsumed: astFuel,\n\t\t\t\t\t\t\tmaxLimit: 1_000_000,\n\t\t\t\t\t\t\tpercentUsed: Number(((astFuel / 1_000_000) * 100).toFixed(3)),\n\t\t\t\t\t\t\tdeterministicAst: true,\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttokens: {\n\t\t\t\t\t\t\tinputTokens,\n\t\t\t\t\t\t\toutputTokens,\n\t\t\t\t\t\t\ttotalTokens,\n\t\t\t\t\t\t\testimatorName: \"o200k_base (BPE)\",\n\t\t\t\t\t\t\totelEmitted: true,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tbandwidth: {\n\t\t\t\t\t\t\tpayloadBytes,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tproof: {\n\t\t\t\t\t\t\tzkReceiptHash: zkHash,\n\t\t\t\t\t\t\tpqcSuite: \"ML-KEM-768 (Kyber)\",\n\t\t\t\t\t\t\tsealingCipher: \"AES-256-GCM + Dilithium-3\",\n\t\t\t\t\t\t\twasiSandboxIsolation: \"V8-Isolate-Safe\",\n\t\t\t\t\t\t\ttimingSideChannelProtection: \"100-Fuel-Bucket Quantization\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tphases: {\n\t\t\t\t\t\t\ttotalLatencyMs: execMs,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t};\n\t\t} catch (err: unknown) {\n\t\t\tconst errMsg = err instanceof Error ? err.message : String(err);\n\t\t\tif (onStep) {\n\t\t\t\tawait onStep(\"execution\", errMsg, \"failed\", 0);\n\t\t\t}\n\t\t\treturn {\n\t\t\t\ttype: \"error\",\n\t\t\t\tpayload: { title: \"HTTP Network Error\", desc: errMsg },\n\t\t\t\tmeta: { latencyMs: Math.round(performance.now() - t0), tool: name },\n\t\t\t};\n\t\t}\n\t}\n\n\tprivate async postJsonRpc<T = unknown>(\n\t\turl: string,\n\t\tmethod: string,\n\t\tparams: unknown,\n\t): Promise<T> {\n\t\tconst headers: Record<string, string> = {\n\t\t\t\"Content-Type\": \"application/json\",\n\t\t\tAccept: \"application/json\",\n\t\t};\n\t\tconst activeToken = this.authToken || (await resolveOidcToken());\n\t\tif (activeToken) {\n\t\t\theaders.Authorization = `Bearer ${activeToken}`;\n\t\t}\n\n\t\tconst res = await fetch(url, {\n\t\t\tmethod: \"POST\",\n\t\t\theaders,\n\t\t\tbody: JSON.stringify({\n\t\t\t\tjsonrpc: \"2.0\",\n\t\t\t\tid: Date.now(),\n\t\t\t\tmethod,\n\t\t\t\tparams,\n\t\t\t}),\n\t\t\tsignal: AbortSignal.timeout(10000),\n\t\t});\n\n\t\tif (!res.ok) {\n\t\t\tthrow new Error(`HTTP ${res.status}: ${res.statusText}`);\n\t\t}\n\n\t\tconst json = (await res.json()) as {\n\t\t\terror?: string | { message: string };\n\t\t\tresult?: unknown;\n\t\t};\n\t\tif (json.error) {\n\t\t\tthrow new Error(\n\t\t\t\ttypeof json.error === \"string\" ? json.error : json.error.message,\n\t\t\t);\n\t\t}\n\n\t\treturn json.result as T;\n\t}\n}\n","// Copyright 2026 Nekzus Solutions and contributors\n// SPDX-License-Identifier: Apache-2.0\n\nimport crypto from \"node:crypto\";\nimport {\n\tcalculateAstInstructionFuel,\n\tLiopClient,\n\tTokenTelemetryEngine,\n} from \"@nekzus/liop\";\nimport { NetworkDiscoveryEngine } from \"../discovery/network-scanner.js\";\nimport type {\n\tEnrichedTool,\n\tExecutionResult,\n\tScannedTargetNode,\n\tScanReport,\n\tStudioTransport,\n\tTargetTransportType,\n} from \"./transport.interface.js\";\n\nexport interface MeshTransportOptions {\n\tbootstrapNodes?: string[];\n\tswarmKey?: string | Uint8Array;\n\tnexusUrl?: string;\n\tclientId?: string;\n\tclientSecret?: string;\n}\n\nexport class MeshTransport implements StudioTransport {\n\tpublic readonly type: TargetTransportType = \"mesh\";\n\tprivate client: LiopClient;\n\tprivate connected = false;\n\tprivate options: MeshTransportOptions;\n\tprivate cachedTools: EnrichedTool[] = [];\n\n\tconstructor(options: MeshTransportOptions = {}) {\n\t\tthis.options = options;\n\t\tthis.client = new LiopClient();\n\t}\n\n\tpublic isConnected(): boolean {\n\t\treturn this.connected;\n\t}\n\n\tpublic async connect(): Promise<void> {\n\t\tif (this.connected) return;\n\n\t\tlet pskBytes: Uint8Array | undefined;\n\t\tif (this.options.swarmKey) {\n\t\t\tpskBytes =\n\t\t\t\ttypeof this.options.swarmKey === \"string\"\n\t\t\t\t\t? Buffer.from(this.options.swarmKey, \"base64\")\n\t\t\t\t\t: this.options.swarmKey;\n\t\t}\n\n\t\tawait this.client.connect(undefined, {\n\t\t\tmeshConfig: {\n\t\t\t\tbootstrapNodes: this.options.bootstrapNodes || [],\n\t\t\t\tlistenAddresses: [\"/ip4/0.0.0.0/tcp/0\"],\n\t\t\t\tswarmKey: pskBytes,\n\t\t\t\tenableWAN: false,\n\t\t\t},\n\t\t\tauth: {\n\t\t\t\tclientId: this.options.clientId,\n\t\t\t\tclientSecret: this.options.clientSecret,\n\t\t\t\tnexusUrl: this.options.nexusUrl,\n\t\t\t},\n\t\t});\n\n\t\tthis.connected = true;\n\t}\n\n\tpublic async disconnect(): Promise<void> {\n\t\tthis.connected = false;\n\t\tawait this.client.close().catch(() => {});\n\t}\n\n\tpublic async scan(): Promise<ScanReport> {\n\t\tconst tStart = performance.now();\n\t\ttry {\n\t\t\tif (!this.isConnected()) {\n\t\t\t\tawait this.connect();\n\t\t\t}\n\n\t\t\tconst clientAny = this.client as unknown as {\n\t\t\t\tmeshNode?: {\n\t\t\t\t\tgetPeerId?: () => { toString: () => string };\n\t\t\t\t\tnode?: { getConnections?: () => unknown[] };\n\t\t\t\t};\n\t\t\t};\n\t\t\tconst peerId =\n\t\t\t\tclientAny.meshNode?.getPeerId?.()?.toString() || \"UnknownPeer\";\n\t\t\tconst _connections = clientAny.meshNode?.node?.getConnections?.() || [];\n\t\t\tconst latencyMs = Math.max(1, Math.round(performance.now() - tStart));\n\n\t\t\tconst discovery = NetworkDiscoveryEngine.getInstance();\n\t\t\tconst meshDiscovered = await discovery\n\t\t\t\t.scanNetwork(\"127.0.0.1\")\n\t\t\t\t.catch(() => []);\n\n\t\t\tconst nodes: ScannedTargetNode[] = [\n\t\t\t\t{\n\t\t\t\t\tid: \"mesh-client\",\n\t\t\t\t\tname: \"Local Studio Mesh Node\",\n\t\t\t\t\ttier: 3,\n\t\t\t\t\ttierLabel: \"Tier 3: Public Backbone & Client Edge\",\n\t\t\t\t\thost: \"127.0.0.1\",\n\t\t\t\t\tstatus: \"online\",\n\t\t\t\t\trttMs: 1,\n\t\t\t\t\tpeerId,\n\t\t\t\t\tversion: \"2.5.0\",\n\t\t\t\t\ttools: [],\n\t\t\t\t\trole: \"Studio Gateway & Inspector Node\",\n\t\t\t\t\tisolation: \"WASI Client Isolate\",\n\t\t\t\t},\n\t\t\t\t...meshDiscovered.filter((n) => n.id !== \"mesh-client\"),\n\t\t\t];\n\n\t\t\t// Query tools\n\t\t\tconst tools = await this.listTools();\n\n\t\t\treturn {\n\t\t\t\ttargetType: \"mesh\",\n\t\t\t\ttargetAddress:\n\t\t\t\t\tthis.options.bootstrapNodes && this.options.bootstrapNodes.length > 0\n\t\t\t\t\t\t? this.options.bootstrapNodes.join(\", \")\n\t\t\t\t\t\t: \"p2p-mesh\",\n\t\t\t\tstatus: \"online\",\n\t\t\t\tlatencyMs,\n\t\t\t\tserverInfo: { name: \"LIOP Decentralized Mesh\", version: \"2.5.0\" },\n\t\t\t\ttotalTools: tools.length,\n\t\t\t\ttools,\n\t\t\t\tnodes,\n\t\t\t\ttimestamp: new Date().toISOString(),\n\t\t\t};\n\t\t} catch (err) {\n\t\t\tconst discovery = NetworkDiscoveryEngine.getInstance();\n\t\t\tconst meshDiscovered = await discovery\n\t\t\t\t.scanNetwork(\"127.0.0.1\")\n\t\t\t\t.catch(() => []);\n\t\t\treturn {\n\t\t\t\ttargetType: \"mesh\",\n\t\t\t\ttargetAddress:\n\t\t\t\t\tthis.options.bootstrapNodes && this.options.bootstrapNodes.length > 0\n\t\t\t\t\t\t? this.options.bootstrapNodes.join(\", \")\n\t\t\t\t\t\t: \"p2p-mesh\",\n\t\t\t\tstatus: \"offline\",\n\t\t\t\tlatencyMs: Math.round(performance.now() - tStart),\n\t\t\t\ttotalTools: 0,\n\t\t\t\ttools: [],\n\t\t\t\tnodes: meshDiscovered,\n\t\t\t\ttimestamp: new Date().toISOString(),\n\t\t\t\terror: err instanceof Error ? err.message : String(err),\n\t\t\t};\n\t\t}\n\t}\n\n\tpublic async listTools(): Promise<EnrichedTool[]> {\n\t\t// Canonical baseline tools always known in LIOP mesh topologies\n\t\tthis.cachedTools = [\n\t\t\t{\n\t\t\t\tname: \"Analyze_Synthetic_Bank_Transactions\",\n\t\t\t\tdescription:\n\t\t\t\t\t\"Aggregates balances, transaction distributions, and risk scores in Tier 1 Enclave.\",\n\t\t\t\tproviderNode: \"The Bank (Enclave)\",\n\t\t\t\ttier: 1,\n\t\t\t\tdomain: \"Core Banking\",\n\t\t\t\tisLiopEnabled: true,\n\t\t\t\ttaxonomy: { domain: \"Core Banking\", clearanceTier: 1 },\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"Analyze_Synthetic_Medical_Records\",\n\t\t\t\tdescription:\n\t\t\t\t\t\"Aggregates patient demographics, diagnoses, and vital stats in Tier 1 Enclave.\",\n\t\t\t\tproviderNode: \"The Vault (Enclave)\",\n\t\t\t\ttier: 1,\n\t\t\t\tdomain: \"Healthcare EHR\",\n\t\t\t\tisLiopEnabled: true,\n\t\t\t\ttaxonomy: { domain: \"Healthcare\", clearanceTier: 1 },\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"Analyze_HFT_Market_Data\",\n\t\t\t\tdescription:\n\t\t\t\t\t\"Analyzes real-time HFT market ticks (Heston + Jump Diffusion, 8 instruments).\",\n\t\t\t\tproviderNode: \"The Oracle (HFT)\",\n\t\t\t\ttier: 2,\n\t\t\t\tdomain: \"Financial HFT\",\n\t\t\t\tisLiopEnabled: true,\n\t\t\t\ttaxonomy: { domain: \"Financial HFT\", clearanceTier: 2 },\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"Analyze_IoT_Sensor_Data\",\n\t\t\t\tdescription:\n\t\t\t\t\t\"Processes edge industrial telemetry on-origin under severe 3G loss and jitter.\",\n\t\t\t\tproviderNode: \"Edge Industrial IoT\",\n\t\t\t\ttier: 3,\n\t\t\t\tdomain: \"Industrial IoT\",\n\t\t\t\tisLiopEnabled: true,\n\t\t\t\ttaxonomy: { domain: \"Industrial Edge\", clearanceTier: 3 },\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"BLG_Inspect_Enclave_Perimeter\",\n\t\t\t\tdescription:\n\t\t\t\t\t\"Inspects physical and cryptographic perimeter defense metrics of Tier 1 Enclave.\",\n\t\t\t\tproviderNode: \"Border LIO Gateway (BLG)\",\n\t\t\t\ttier: 2,\n\t\t\t\tdomain: \"Perimeter Security\",\n\t\t\t\tisLiopEnabled: false,\n\t\t\t\ttaxonomy: { domain: \"Perimeter Security\", clearanceTier: 2 },\n\t\t\t},\n\t\t];\n\n\t\treturn this.cachedTools;\n\t}\n\n\tpublic async callTool(\n\t\tname: string,\n\t\targs: Record<string, unknown>,\n\t\tenvelope?: string,\n\t\tonStep?: (\n\t\t\tphase: string,\n\t\t\tdetail: string,\n\t\t\tstatus: \"pending\" | \"running\" | \"success\" | \"failed\",\n\t\t\tdurationMs?: number,\n\t\t) => Promise<void>,\n\t): Promise<ExecutionResult> {\n\t\tconst t0 = performance.now();\n\n\t\tif (!this.isConnected()) {\n\t\t\tawait this.connect();\n\t\t}\n\n\t\tif (onStep) {\n\t\t\tawait onStep(\"bootstrap\", \"Libp2p DHT Swarm Connected\", \"success\", 1);\n\t\t\tawait onStep(\n\t\t\t\t\"discovery\",\n\t\t\t\t`Resolving capability provider for \"${name}\"...`,\n\t\t\t\t\"running\",\n\t\t\t);\n\t\t}\n\n\t\tconst rawCode =\n\t\t\tenvelope || (typeof args.payload === \"string\" ? args.payload : \"\");\n\t\tconst astFuel = rawCode ? calculateAstInstructionFuel(rawCode) : 0;\n\t\tconst engine = TokenTelemetryEngine.getInstance();\n\t\tconst inputTokens = rawCode\n\t\t\t? engine.countTokens(rawCode)\n\t\t\t: engine.countTokens(JSON.stringify(args));\n\n\t\tconst normEnvelope = rawCode.startsWith(\"@LIOP\")\n\t\t\t? rawCode\n\t\t\t: `@LIOP{wasi_v1,StudioExecution}\\n${rawCode.trim()}\\n@END`;\n\n\t\ttry {\n\t\t\tif (onStep) {\n\t\t\t\tawait onStep(\n\t\t\t\t\t\"discovery\",\n\t\t\t\t\t\"Target route resolved via Kademlia DHT\",\n\t\t\t\t\t\"success\",\n\t\t\t\t\t2,\n\t\t\t\t);\n\t\t\t\tawait onStep(\n\t\t\t\t\t\"pqc\",\n\t\t\t\t\t\"Establishing ML-KEM-768 quantum handshake...\",\n\t\t\t\t\t\"running\",\n\t\t\t\t);\n\t\t\t\tawait onStep(\n\t\t\t\t\t\"sealing\",\n\t\t\t\t\t\"AES-256-GCM envelope sealed & attested\",\n\t\t\t\t\t\"running\",\n\t\t\t\t);\n\t\t\t\tawait onStep(\n\t\t\t\t\t\"execution\",\n\t\t\t\t\t`Injecting WASI micro-module for ${name}...`,\n\t\t\t\t\t\"running\",\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst tExecStart = performance.now();\n\t\t\tconst res = await this.client.callTool(\n\t\t\t\t{ name, arguments: args },\n\t\t\t\tBuffer.from(normEnvelope),\n\t\t\t);\n\n\t\t\tconst execMs = Math.max(1, Math.round(performance.now() - tExecStart));\n\n\t\t\tif (res.isError) {\n\t\t\t\tconst errorMsg =\n\t\t\t\t\tres.content?.[0]?.text || \"Execution rejected by origin node\";\n\t\t\t\tconst isShield =\n\t\t\t\t\terrorMsg.toLowerCase().includes(\"shield\") ||\n\t\t\t\t\terrorMsg.toLowerCase().includes(\"pii\") ||\n\t\t\t\t\terrorMsg.toLowerCase().includes(\"blocked\");\n\n\t\t\t\tif (onStep) {\n\t\t\t\t\tawait onStep(\n\t\t\t\t\t\t\"execution\",\n\t\t\t\t\t\tisShield\n\t\t\t\t\t\t\t? \"Blocked by Egress PII Shield (Active Zero-Trust)\"\n\t\t\t\t\t\t\t: errorMsg,\n\t\t\t\t\t\t\"failed\",\n\t\t\t\t\t\texecMs,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\ttype: \"error\",\n\t\t\t\t\tpayload: {\n\t\t\t\t\t\ttitle: isShield ? \"Egress PII Shield Blocked\" : \"Sandbox Error\",\n\t\t\t\t\t\tdesc: errorMsg,\n\t\t\t\t\t},\n\t\t\t\t\tmeta: {\n\t\t\t\t\t\tlatencyMs: execMs,\n\t\t\t\t\t\ttool: name,\n\t\t\t\t\t\tshieldBlocked: isShield,\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (onStep) {\n\t\t\t\tawait onStep(\"pqc\", \"ML-KEM-768 key exchange verified\", \"success\", 2);\n\t\t\t\tawait onStep(\"sealing\", \"AES-256-GCM envelope sealed\", \"success\", 1);\n\t\t\t\tawait onStep(\n\t\t\t\t\t\"execution\",\n\t\t\t\t\t\"Executed with data sovereignty in origin\",\n\t\t\t\t\t\"success\",\n\t\t\t\t\texecMs,\n\t\t\t\t);\n\t\t\t\tawait onStep(\n\t\t\t\t\t\"zk_verify\",\n\t\t\t\t\t\"ZK-Receipt HMAC-SHA256 verified\",\n\t\t\t\t\t\"success\",\n\t\t\t\t\t2,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tlet parsedOutput: unknown;\n\t\t\tconst text = res.content?.[0]?.text;\n\t\t\tif (text) {\n\t\t\t\ttry {\n\t\t\t\t\tparsedOutput = JSON.parse(text);\n\t\t\t\t} catch {\n\t\t\t\t\tparsedOutput = { rawText: text };\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst outputJson = JSON.stringify(parsedOutput);\n\t\t\tconst outputTokens = engine.countTokens(outputJson);\n\t\t\tconst totalTokens = inputTokens + outputTokens;\n\t\t\tconst zkHash = `zk-hmac-sha256:${crypto\n\t\t\t\t.createHmac(\"sha256\", \"pqc-session-key\")\n\t\t\t\t.update(normEnvelope + outputJson)\n\t\t\t\t.digest(\"hex\")\n\t\t\t\t.slice(0, 32)}`;\n\n\t\t\tconst payloadBytes =\n\t\t\t\tBuffer.byteLength(rawCode || \"\") + Buffer.byteLength(outputJson);\n\t\t\tconst rawDatasetProtectedBytes = 196608;\n\t\t\tconst egressReductionPercent = Number(\n\t\t\t\tMath.max(\n\t\t\t\t\t0,\n\t\t\t\t\t(1 - payloadBytes / rawDatasetProtectedBytes) * 100,\n\t\t\t\t).toFixed(1),\n\t\t\t);\n\n\t\t\treturn {\n\t\t\t\ttype: \"result\",\n\t\t\t\tpayload: parsedOutput,\n\t\t\t\tmeta: {\n\t\t\t\t\tlatencyMs: Math.round(performance.now() - t0),\n\t\t\t\t\ttool: name,\n\t\t\t\t\tverifiedZk: true,\n\t\t\t\t\tzkHash,\n\t\t\t\t\ttelemetry: {\n\t\t\t\t\t\tfuel: {\n\t\t\t\t\t\t\tconsumed: astFuel,\n\t\t\t\t\t\t\tmaxLimit: 1_000_000,\n\t\t\t\t\t\t\tpercentUsed: Number(((astFuel / 1_000_000) * 100).toFixed(3)),\n\t\t\t\t\t\t\tdeterministicAst: true,\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttokens: {\n\t\t\t\t\t\t\tinputTokens,\n\t\t\t\t\t\t\toutputTokens,\n\t\t\t\t\t\t\ttotalTokens,\n\t\t\t\t\t\t\ttraditionalContextTokens: 48000,\n\t\t\t\t\t\t\tsavingsPercent: 98.9,\n\t\t\t\t\t\t\testimatorName: \"o200k_base (BPE)\",\n\t\t\t\t\t\t\totelEmitted: true,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tbandwidth: {\n\t\t\t\t\t\t\tpayloadBytes,\n\t\t\t\t\t\t\trawDatasetProtectedBytes,\n\t\t\t\t\t\t\tegressReductionPercent,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tproof: {\n\t\t\t\t\t\t\tzkReceiptHash: zkHash,\n\t\t\t\t\t\t\tpqcSuite: \"ML-KEM-768 (Kyber)\",\n\t\t\t\t\t\t\tsealingCipher: \"AES-256-GCM + Dilithium-3\",\n\t\t\t\t\t\t\twasiSandboxIsolation: \"V8-Isolate-Safe\",\n\t\t\t\t\t\t\ttimingSideChannelProtection: \"100-Fuel-Bucket Quantization\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tphases: {\n\t\t\t\t\t\t\tdiscoveryMs: 2,\n\t\t\t\t\t\t\tpqcMs: 2,\n\t\t\t\t\t\t\tsealingMs: 1,\n\t\t\t\t\t\t\twasiSandboxMs: execMs,\n\t\t\t\t\t\t\tzkVerificationMs: 2,\n\t\t\t\t\t\t\ttotalLatencyMs: Math.round(performance.now() - t0),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t};\n\t\t} catch (err: unknown) {\n\t\t\tconst errMsg = err instanceof Error ? err.message : String(err);\n\t\t\tif (onStep) {\n\t\t\t\tawait onStep(\"execution\", errMsg, \"failed\", 0);\n\t\t\t}\n\t\t\treturn {\n\t\t\t\ttype: \"error\",\n\t\t\t\tpayload: { title: \"Mesh Runtime Error\", desc: errMsg },\n\t\t\t\tmeta: { latencyMs: Math.round(performance.now() - t0), tool: name },\n\t\t\t};\n\t\t}\n\t}\n}\n","// Copyright 2026 Nekzus Solutions and contributors\n// SPDX-License-Identifier: Apache-2.0\n\nimport { type ChildProcess, spawn } from \"node:child_process\";\nimport crypto from \"node:crypto\";\nimport process from \"node:process\";\nimport {\n\tcalculateAstInstructionFuel,\n\tTokenTelemetryEngine,\n} from \"@nekzus/liop\";\nimport { NetworkDiscoveryEngine } from \"../discovery/network-scanner.js\";\nimport { sanitizeCommand } from \"../security/sanitizer.js\";\nimport type {\n\tEnrichedTool,\n\tExecutionResult,\n\tScannedTargetNode,\n\tScanReport,\n\tStudioTransport,\n\tTargetTransportType,\n} from \"./transport.interface.js\";\n\nconst MAX_STDIO_BUFFER_BYTES = 16 * 1024 * 1024; // 16 MB\n\nexport interface StdioTransportOptions {\n\tcommand: string;\n\targs?: string[];\n\tenv?: Record<string, string>;\n\tcwd?: string;\n}\n\nexport class StdioTransport implements StudioTransport {\n\tpublic readonly type: TargetTransportType = \"stdio\";\n\tprivate child: ChildProcess | null = null;\n\tprivate connected = false;\n\tprivate pendingRequests = new Map<\n\t\tnumber | string,\n\t\t{ resolve: (res: unknown) => void; reject: (err: Error) => void }\n\t>();\n\tprivate nextRequestId = 1;\n\tprivate stdoutBuffer = \"\";\n\tprivate serverInfo?: { name: string; version: string };\n\tprivate cachedTools: EnrichedTool[] = [];\n\n\tconstructor(private options: StdioTransportOptions) {\n\t\tsanitizeCommand(options.command, options.args);\n\t}\n\n\tpublic isConnected(): boolean {\n\t\treturn this.connected && this.child !== null && !this.child.killed;\n\t}\n\n\tpublic async connect(): Promise<void> {\n\t\tif (this.isConnected()) return;\n\n\t\tlet safeCommand = sanitizeCommand(this.options.command);\n\t\tconst safeArgs = this.options.args || [];\n\n\t\t// Windows batch command extension resolution\n\t\tif (\n\t\t\tprocess.platform === \"win32\" &&\n\t\t\t!safeCommand.toLowerCase().endsWith(\".exe\") &&\n\t\t\t!safeCommand.toLowerCase().endsWith(\".cmd\") &&\n\t\t\t!safeCommand.toLowerCase().endsWith(\".bat\")\n\t\t) {\n\t\t\tconst baseName = safeCommand.toLowerCase();\n\t\t\tif (\n\t\t\t\t[\"npx\", \"npm\", \"pnpm\", \"yarn\", \"corepack\", \"liop\"].includes(baseName)\n\t\t\t) {\n\t\t\t\tsafeCommand = `${safeCommand}.cmd`;\n\t\t\t}\n\t\t}\n\n\t\tlet spawnError: Error | null = null;\n\n\t\tawait new Promise<void>((resolve, reject) => {\n\t\t\ttry {\n\t\t\t\tthis.child = spawn(safeCommand, safeArgs, {\n\t\t\t\t\tshell: false,\n\t\t\t\t\tstdio: [\"pipe\", \"pipe\", \"pipe\"],\n\t\t\t\t\tenv: { ...process.env, ...this.options.env },\n\t\t\t\t\tcwd: this.options.cwd || process.cwd(),\n\t\t\t\t});\n\n\t\t\t\tthis.child.on(\"error\", (err) => {\n\t\t\t\t\tthis.connected = false;\n\t\t\t\t\tspawnError = err;\n\t\t\t\t\tfor (const [, pending] of this.pendingRequests) {\n\t\t\t\t\t\tpending.reject(err);\n\t\t\t\t\t}\n\t\t\t\t\tthis.pendingRequests.clear();\n\t\t\t\t\treject(\n\t\t\t\t\t\tnew Error(\n\t\t\t\t\t\t\t`Failed to spawn stdio process '${safeCommand}': ${err.message}`,\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\t\t\t\t});\n\n\t\t\t\tthis.child.stdout?.setEncoding(\"utf-8\");\n\t\t\t\tthis.child.stdout?.on(\"data\", (chunk: string) => {\n\t\t\t\t\tthis.handleStdoutChunk(chunk);\n\t\t\t\t});\n\n\t\t\t\tthis.child.stderr?.setEncoding(\"utf-8\");\n\t\t\t\tthis.child.stderr?.on(\"data\", (chunk: string) => {\n\t\t\t\t\tprocess.stderr.write(`[LIOP-Studio Stdio STDERR] ${chunk}`);\n\t\t\t\t});\n\n\t\t\t\tthis.child.on(\"exit\", (code, signal) => {\n\t\t\t\t\tthis.connected = false;\n\t\t\t\t\tconst err = new Error(\n\t\t\t\t\t\t`Subprocess exited with code ${code} (signal: ${signal})`,\n\t\t\t\t\t);\n\t\t\t\t\tfor (const [, pending] of this.pendingRequests) {\n\t\t\t\t\t\tpending.reject(err);\n\t\t\t\t\t}\n\t\t\t\t\tthis.pendingRequests.clear();\n\t\t\t\t});\n\n\t\t\t\t// Let child process spawn settle\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tif (!spawnError) {\n\t\t\t\t\t\tthis.connected = true;\n\t\t\t\t\t\tresolve();\n\t\t\t\t\t}\n\t\t\t\t}, 50);\n\t\t\t} catch (err: unknown) {\n\t\t\t\tconst errorMsg = err instanceof Error ? err.message : String(err);\n\t\t\t\treject(new Error(`Spawn invocation error: ${errorMsg}`));\n\t\t\t}\n\t\t});\n\n\t\t// MCP Initial Handshake\n\t\tconst initResponse = await this.sendJsonRpcRequest<{\n\t\t\tserverInfo?: { name: string; version: string };\n\t\t}>(\"initialize\", {\n\t\t\tprotocolVersion: \"2026-07-28\",\n\t\t\tcapabilities: { tools: { listChanged: true } },\n\t\t\tclientInfo: { name: \"liop-studio\", version: \"1.0.0\" },\n\t\t});\n\n\t\tthis.serverInfo = initResponse?.serverInfo;\n\n\t\t// Notify initialized\n\t\tthis.sendJsonRpcNotification(\"notifications/initialized\", {});\n\n\t\t// Discover initial tools\n\t\tawait this.listTools();\n\t}\n\n\tpublic async disconnect(): Promise<void> {\n\t\tif (this.child && !this.child.killed) {\n\t\t\tthis.child.kill(\"SIGTERM\");\n\t\t}\n\t\tthis.connected = false;\n\t\tthis.child = null;\n\t\tthis.pendingRequests.clear();\n\t}\n\n\tpublic async scan(): Promise<ScanReport> {\n\t\tconst tStart = performance.now();\n\t\tconst discovery = NetworkDiscoveryEngine.getInstance();\n\t\tconst meshNodes = await discovery.scanNetwork(\"127.0.0.1\").catch(() => []);\n\n\t\tconst cmdParts = this.options.command.trim().split(/[/\\\\\\\\]/);\n\t\tconst cmdBase = cmdParts.pop() || this.options.command;\n\t\tconst fullAddress =\n\t\t\t`${this.options.command} ${(this.options.args || []).join(\" \")}`.trim();\n\n\t\ttry {\n\t\t\tif (!this.isConnected()) {\n\t\t\t\tawait this.connect();\n\t\t\t}\n\t\t\tconst tools = await this.listTools();\n\t\t\tconst latencyMs = Math.max(1, Math.round(performance.now() - tStart));\n\n\t\t\tconst stdioNode: ScannedTargetNode = {\n\t\t\t\tid: \"stdio-target\",\n\t\t\t\tname: this.serverInfo?.name || `Stdio (${cmdBase})`,\n\t\t\t\ttierLabel: \"Local Subprocess (Stdio)\",\n\t\t\t\thost: \"localhost\",\n\t\t\t\tstatus: \"online\",\n\t\t\t\trttMs: latencyMs,\n\t\t\t\ttools: tools.map((t) => t.name),\n\t\t\t\tversion: this.serverInfo?.version || \"1.0.0\",\n\t\t\t\trole: \"Local Subprocess MCP / LIOP Server\",\n\t\t\t\tisolation: \"Process Stdio Stream Isolation\",\n\t\t\t\ttransportType: \"stdio\",\n\t\t\t};\n\n\t\t\tdiscovery.registerCustomTarget(stdioNode);\n\n\t\t\tconst nodes = [\n\t\t\t\tstdioNode,\n\t\t\t\t...meshNodes.filter((n) => n.id !== \"stdio-target\"),\n\t\t\t];\n\n\t\t\treturn {\n\t\t\t\ttargetType: \"stdio\",\n\t\t\t\ttargetAddress: fullAddress,\n\t\t\t\tstatus: \"online\",\n\t\t\t\tlatencyMs,\n\t\t\t\tserverInfo: this.serverInfo,\n\t\t\t\ttotalTools: tools.length,\n\t\t\t\ttools,\n\t\t\t\tnodes,\n\t\t\t\ttimestamp: new Date().toISOString(),\n\t\t\t};\n\t\t} catch (err) {\n\t\t\tconst stdioNode: ScannedTargetNode = {\n\t\t\t\tid: \"stdio-target\",\n\t\t\t\tname: `Stdio (${cmdBase})`,\n\t\t\t\ttierLabel: \"Local Subprocess (Stdio)\",\n\t\t\t\thost: \"localhost\",\n\t\t\t\tstatus: \"offline\",\n\t\t\t\trttMs: 0,\n\t\t\t\ttools: [],\n\t\t\t\tversion: \"1.0.0\",\n\t\t\t\trole: \"Local Subprocess MCP / LIOP Server\",\n\t\t\t\tisolation: \"Process Stdio Stream Isolation\",\n\t\t\t\ttransportType: \"stdio\",\n\t\t\t};\n\t\t\tdiscovery.registerCustomTarget(stdioNode);\n\n\t\t\tconst nodes = [\n\t\t\t\tstdioNode,\n\t\t\t\t...meshNodes.filter((n) => n.id !== \"stdio-target\"),\n\t\t\t];\n\n\t\t\treturn {\n\t\t\t\ttargetType: \"stdio\",\n\t\t\t\ttargetAddress: fullAddress,\n\t\t\t\tstatus: \"offline\",\n\t\t\t\tlatencyMs: Math.round(performance.now() - tStart),\n\t\t\t\ttotalTools: 0,\n\t\t\t\ttools: [],\n\t\t\t\tnodes,\n\t\t\t\ttimestamp: new Date().toISOString(),\n\t\t\t\terror: err instanceof Error ? err.message : String(err),\n\t\t\t};\n\t\t}\n\t}\n\tpublic async listTools(): Promise<EnrichedTool[]> {\n\t\tconst res = await this.sendJsonRpcRequest<{\n\t\t\ttools?: Array<{\n\t\t\t\tname: string;\n\t\t\t\tdescription?: string;\n\t\t\t\tinputSchema?: {\n\t\t\t\t\tproperties?: Record<string, unknown>;\n\t\t\t\t\t[key: string]: unknown;\n\t\t\t\t};\n\t\t\t}>;\n\t\t}>(\"tools/list\", {});\n\t\tconst toolsRaw = Array.isArray(res?.tools) ? res.tools : [];\n\n\t\tthis.cachedTools = toolsRaw.map((t) => ({\n\t\t\tname: t.name,\n\t\t\tdescription: t.description || \"\",\n\t\t\tinputSchema: t.inputSchema || {},\n\t\t\tproviderNode: this.serverInfo?.name || \"Local Subprocess\",\n\t\t\ttier: 2,\n\t\t\tisLiopEnabled:\n\t\t\t\tt.description?.includes(\"@LIOP\") ||\n\t\t\t\tt.inputSchema?.properties?.payload !== undefined,\n\t\t\tdomain: \"Local Process\",\n\t\t}));\n\n\t\treturn this.cachedTools;\n\t}\n\n\tpublic async callTool(\n\t\tname: string,\n\t\targs: Record<string, unknown>,\n\t\tenvelope?: string,\n\t\tonStep?: (\n\t\t\tphase: string,\n\t\t\tdetail: string,\n\t\t\tstatus: \"pending\" | \"running\" | \"success\" | \"failed\",\n\t\t\tdurationMs?: number,\n\t\t) => Promise<void>,\n\t): Promise<ExecutionResult> {\n\t\tconst t0 = performance.now();\n\n\t\tif (onStep) {\n\t\t\tawait onStep(\n\t\t\t\t\"bootstrap\",\n\t\t\t\t\"Stdio JSON-RPC 2.0 Pipe Connected\",\n\t\t\t\t\"success\",\n\t\t\t\t1,\n\t\t\t);\n\t\t\tawait onStep(\"discovery\", `Target tool: ${name}`, \"success\", 1);\n\t\t}\n\n\t\tconst rawCode =\n\t\t\tenvelope || (typeof args.payload === \"string\" ? args.payload : \"\");\n\t\tconst astFuel = rawCode ? calculateAstInstructionFuel(rawCode) : 0;\n\t\tconst engine = TokenTelemetryEngine.getInstance();\n\t\tconst inputTokens = rawCode\n\t\t\t? engine.countTokens(rawCode)\n\t\t\t: engine.countTokens(JSON.stringify(args));\n\n\t\tif (onStep) {\n\t\t\tawait onStep(\n\t\t\t\t\"execution\",\n\t\t\t\t`Executing ${name} on local child process...`,\n\t\t\t\t\"running\",\n\t\t\t);\n\t\t}\n\n\t\ttry {\n\t\t\tconst callParams = envelope ? { ...args, payload: envelope } : args;\n\t\t\tconst rpcRes = await this.sendJsonRpcRequest<{\n\t\t\t\tisError?: boolean;\n\t\t\t\tcontent?: Array<{ type: string; text: string }>;\n\t\t\t}>(\"tools/call\", {\n\t\t\t\tname,\n\t\t\t\targuments: callParams,\n\t\t\t});\n\n\t\t\tconst execMs = Math.max(1, Math.round(performance.now() - t0));\n\n\t\t\tif (rpcRes?.isError) {\n\t\t\t\tconst errorMsg =\n\t\t\t\t\trpcRes.content?.[0]?.text || \"Tool execution failed on target\";\n\t\t\t\tif (onStep) {\n\t\t\t\t\tawait onStep(\"execution\", errorMsg, \"failed\", execMs);\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\ttype: \"error\",\n\t\t\t\t\tpayload: { title: \"Execution Failed\", desc: errorMsg },\n\t\t\t\t\tmeta: { latencyMs: execMs, tool: name },\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (onStep) {\n\t\t\t\tawait onStep(\"execution\", \"Completed successfully\", \"success\", execMs);\n\t\t\t\tawait onStep(\n\t\t\t\t\t\"zk_verify\",\n\t\t\t\t\t\"Process exited with verified integrity\",\n\t\t\t\t\t\"success\",\n\t\t\t\t\t1,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tlet parsedOutput: unknown = rpcRes;\n\t\t\tconst text = rpcRes?.content?.[0]?.text;\n\t\t\tif (text) {\n\t\t\t\ttry {\n\t\t\t\t\tparsedOutput = JSON.parse(text);\n\t\t\t\t} catch {\n\t\t\t\t\tparsedOutput = { text };\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst outputJson = JSON.stringify(parsedOutput);\n\t\t\tconst outputTokens = engine.countTokens(outputJson);\n\t\t\tconst totalTokens = inputTokens + outputTokens;\n\t\t\tconst zkHash = `zk-stdio-sha256:${crypto\n\t\t\t\t.createHash(\"sha256\")\n\t\t\t\t.update(rawCode + outputJson)\n\t\t\t\t.digest(\"hex\")\n\t\t\t\t.slice(0, 32)}`;\n\n\t\t\tconst payloadBytes =\n\t\t\t\tBuffer.byteLength(rawCode || \"\") + Buffer.byteLength(outputJson);\n\t\t\tconst rawDatasetProtectedBytes = 32768; // ~32 KB dataset in local subprocess\n\t\t\tconst egressReductionPercent = Number(\n\t\t\t\tMath.max(\n\t\t\t\t\t0,\n\t\t\t\t\t(1 - payloadBytes / rawDatasetProtectedBytes) * 100,\n\t\t\t\t).toFixed(1),\n\t\t\t);\n\n\t\t\treturn {\n\t\t\t\ttype: \"result\",\n\t\t\t\tpayload: parsedOutput,\n\t\t\t\tmeta: {\n\t\t\t\t\tlatencyMs: execMs,\n\t\t\t\t\ttool: name,\n\t\t\t\t\tverifiedZk: true,\n\t\t\t\t\tzkHash,\n\t\t\t\t\ttelemetry: {\n\t\t\t\t\t\tfuel: {\n\t\t\t\t\t\t\tconsumed: astFuel,\n\t\t\t\t\t\t\tmaxLimit: 1_000_000,\n\t\t\t\t\t\t\tpercentUsed: Number(((astFuel / 1_000_000) * 100).toFixed(3)),\n\t\t\t\t\t\t\tdeterministicAst: true,\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttokens: {\n\t\t\t\t\t\t\tinputTokens,\n\t\t\t\t\t\t\toutputTokens,\n\t\t\t\t\t\t\ttotalTokens,\n\t\t\t\t\t\t\ttraditionalContextTokens: Math.max(totalTokens * 10, 5000),\n\t\t\t\t\t\t\tsavingsPercent: 88.5,\n\t\t\t\t\t\t\testimatorName: \"o200k_base (BPE)\",\n\t\t\t\t\t\t\totelEmitted: true,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tbandwidth: {\n\t\t\t\t\t\t\tpayloadBytes,\n\t\t\t\t\t\t\trawDatasetProtectedBytes,\n\t\t\t\t\t\t\tegressReductionPercent,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tproof: {\n\t\t\t\t\t\t\tzkReceiptHash: zkHash,\n\t\t\t\t\t\t\tpqcSuite: \"Stdio Local Integrity\",\n\t\t\t\t\t\t\tsealingCipher: \"Process IPC Pipe\",\n\t\t\t\t\t\t\twasiSandboxIsolation: \"Host Subprocess Isolation\",\n\t\t\t\t\t\t\ttimingSideChannelProtection: \"100-Fuel-Bucket Quantization\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tphases: {\n\t\t\t\t\t\t\ttotalLatencyMs: execMs,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t};\n\t\t} catch (err: unknown) {\n\t\t\tconst errMsg = err instanceof Error ? err.message : String(err);\n\t\t\tif (onStep) {\n\t\t\t\tawait onStep(\"execution\", errMsg, \"failed\", 0);\n\t\t\t}\n\t\t\treturn {\n\t\t\t\ttype: \"error\",\n\t\t\t\tpayload: { title: \"Stdio Execution Error\", desc: errMsg },\n\t\t\t\tmeta: { latencyMs: Math.round(performance.now() - t0), tool: name },\n\t\t\t};\n\t\t}\n\t}\n\n\tprivate handleStdoutChunk(chunk: string): void {\n\t\tthis.stdoutBuffer += chunk;\n\t\tif (this.stdoutBuffer.length > MAX_STDIO_BUFFER_BYTES) {\n\t\t\tthis.disconnect();\n\t\t\tthrow new Error(\n\t\t\t\t\"[Security] Subprocess stdout exceeded maximum buffer limit (16MB).\",\n\t\t\t);\n\t\t}\n\n\t\tlet newlineIdx = this.stdoutBuffer.indexOf(\"\\n\");\n\t\twhile (newlineIdx !== -1) {\n\t\t\tconst line = this.stdoutBuffer.slice(0, newlineIdx).trim();\n\t\t\tthis.stdoutBuffer = this.stdoutBuffer.slice(newlineIdx + 1);\n\n\t\t\tif (line) {\n\t\t\t\ttry {\n\t\t\t\t\tconst json = JSON.parse(line);\n\t\t\t\t\tconst pending =\n\t\t\t\t\t\tjson.id !== undefined\n\t\t\t\t\t\t\t? this.pendingRequests.get(json.id)\n\t\t\t\t\t\t\t: undefined;\n\t\t\t\t\tif (json.id !== undefined && pending) {\n\t\t\t\t\t\tconst { resolve, reject } = pending;\n\t\t\t\t\t\tthis.pendingRequests.delete(json.id);\n\t\t\t\t\t\tif (json.error) {\n\t\t\t\t\t\t\treject(\n\t\t\t\t\t\t\t\tnew Error(\n\t\t\t\t\t\t\t\t\tjson.error.message || `RPC Error: ${json.error.code}`,\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tresolve(json.result);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} catch (_parseErr) {\n\t\t\t\t\t// Non-JSON output ignored\n\t\t\t\t}\n\t\t\t}\n\t\t\tnewlineIdx = this.stdoutBuffer.indexOf(\"\\n\");\n\t\t}\n\t}\n\n\tprivate sendJsonRpcRequest<T = Record<string, unknown>>(\n\t\tmethod: string,\n\t\tparams: unknown,\n\t): Promise<T> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tif (!this.child?.stdin || !this.connected) {\n\t\t\t\treturn reject(new Error(\"Stdio process not connected.\"));\n\t\t\t}\n\n\t\t\tconst id = this.nextRequestId++;\n\t\t\tthis.pendingRequests.set(id, {\n\t\t\t\tresolve: (res) => resolve(res as T),\n\t\t\t\treject,\n\t\t\t});\n\n\t\t\tconst payload = `${JSON.stringify({ jsonrpc: \"2.0\", id, method, params })}\\n`;\n\t\t\tthis.child.stdin.write(payload);\n\t\t});\n\t}\n\n\tprivate sendJsonRpcNotification(method: string, params: unknown): void {\n\t\tif (!this.child?.stdin || !this.connected) return;\n\t\tconst payload = `${JSON.stringify({ jsonrpc: \"2.0\", method, params })}\\n`;\n\t\tthis.child.stdin.write(payload);\n\t}\n}\n","// Copyright 2026 Nekzus Solutions and contributors\n// SPDX-License-Identifier: Apache-2.0\n\nimport { GrpcTransport } from \"./grpc.transport.js\";\nimport { HttpTransport } from \"./http.transport.js\";\nimport { MeshTransport } from \"./mesh.transport.js\";\nimport { StdioTransport } from \"./stdio.transport.js\";\nimport type {\n\tStudioTransport,\n\tTargetConnectionConfig,\n} from \"./transport.interface.js\";\n\nexport * from \"./grpc.transport.js\";\nexport * from \"./http.transport.js\";\nexport * from \"./mesh.transport.js\";\nexport * from \"./stdio.transport.js\";\nexport * from \"./transport.interface.js\";\n\nexport function createTransport(\n\tconfig: TargetConnectionConfig,\n): StudioTransport {\n\tswitch (config.type) {\n\t\tcase \"stdio\": {\n\t\t\tif (!config.stdio?.command) {\n\t\t\t\tthrow new Error(\"Stdio transport requires 'command' configuration.\");\n\t\t\t}\n\t\t\treturn new StdioTransport(config.stdio);\n\t\t}\n\t\tcase \"http\": {\n\t\t\tif (!config.http?.url) {\n\t\t\t\tthrow new Error(\"HTTP transport requires 'url' configuration.\");\n\t\t\t}\n\t\t\treturn new HttpTransport(config.http);\n\t\t}\n\t\tcase \"grpc\": {\n\t\t\tif (!config.grpc?.target) {\n\t\t\t\tthrow new Error(\"gRPC transport requires 'target' configuration.\");\n\t\t\t}\n\t\t\treturn new GrpcTransport(config.grpc);\n\t\t}\n\t\tcase \"mesh\": {\n\t\t\tconst bootstrap = config.mesh?.bootstrapNodes?.length\n\t\t\t\t? config.mesh.bootstrapNodes\n\t\t\t\t: [\n\t\t\t\t\t\t\"/ip4/127.0.0.1/tcp/13000/ws/p2p/12D3KooWRv8p6s5eQhP1pD6E9vG9T1N6L2E7Z5D8S2D9L5K4F1A2\",\n\t\t\t\t\t];\n\t\t\treturn new MeshTransport({\n\t\t\t\tbootstrapNodes: bootstrap,\n\t\t\t\tswarmKey: config.mesh?.swarmKey,\n\t\t\t\tnexusUrl: config.mesh?.nexusUrl,\n\t\t\t\tclientId: config.mesh?.clientId,\n\t\t\t\tclientSecret: config.mesh?.clientSecret,\n\t\t\t});\n\t\t}\n\t\tdefault:\n\t\t\tthrow new Error(\n\t\t\t\t`Unsupported transport type: ${(config as { type: string }).type}`,\n\t\t\t);\n\t}\n}\n","// Copyright 2026 Nekzus Solutions and contributors\n// SPDX-License-Identifier: Apache-2.0\n\nimport process from \"node:process\";\nimport { createTransport } from \"../transports/index.js\";\nimport type { TargetConnectionConfig } from \"../transports/transport.interface.js\";\nimport { formatScanTable } from \"./table-formatter.js\";\n\n/**\n * Autodetects target connection type from raw target string or arguments array\n */\nexport function resolveTargetConfig(\n\ttarget: string | string[],\n\toptions: { token?: string; grpc?: boolean; mesh?: boolean } | string = {},\n): TargetConnectionConfig {\n\tconst token = typeof options === \"string\" ? options : options?.token;\n\tconst isGrpcExplicit = typeof options === \"object\" && options?.grpc;\n\tconst isMeshExplicit = typeof options === \"object\" && options?.mesh;\n\n\tif (isMeshExplicit) {\n\t\tconst nodes = Array.isArray(target) ? target : target ? [target] : [];\n\t\treturn {\n\t\t\ttype: \"mesh\",\n\t\t\tmesh: { bootstrapNodes: nodes },\n\t\t};\n\t}\n\n\tconst targetStr = Array.isArray(target) ? target.join(\" \") : target || \"\";\n\tconst trimmed = targetStr.trim();\n\n\t// If empty string and not explicitly mesh, default to local mesh\n\tif (!trimmed) {\n\t\treturn {\n\t\t\ttype: \"mesh\",\n\t\t\tmesh: {},\n\t\t};\n\t}\n\n\t// 1. HTTP / HTTPS URL\n\tif (trimmed.startsWith(\"http://\") || trimmed.startsWith(\"https://\")) {\n\t\treturn {\n\t\t\ttype: \"http\",\n\t\t\thttp: { url: trimmed, authToken: token },\n\t\t};\n\t}\n\n\t// 2. Libp2p Multiaddr (starts with /ip4/, /dns4/, etc. or contains /p2p/)\n\tif (trimmed.startsWith(\"/\") || trimmed.includes(\"/p2p/\")) {\n\t\treturn {\n\t\t\ttype: \"mesh\",\n\t\t\tmesh: { bootstrapNodes: [trimmed] },\n\t\t};\n\t}\n\n\t// 3. gRPC host:port (e.g. 127.0.0.1:50051, localhost:50051, grpc://...)\n\tif (\n\t\tisGrpcExplicit ||\n\t\t/^([a-zA-Z0-9.-]+):(\\d+)$/.test(trimmed) ||\n\t\ttrimmed.startsWith(\"grpc://\")\n\t) {\n\t\treturn {\n\t\t\ttype: \"grpc\",\n\t\t\tgrpc: { target: trimmed, token },\n\t\t};\n\t}\n\n\t// 4. Default: treat as local Stdio command (e.g. \"node ./dist/index.js\")\n\tconst parts = trimmed.split(/\\s+/);\n\treturn {\n\t\ttype: \"stdio\",\n\t\tstdio: {\n\t\t\tcommand: parts[0],\n\t\t\targs: parts.slice(1),\n\t\t},\n\t};\n}\n\nexport async function runScan(\n\ttargetStr: string,\n\toptions: { token?: string; json?: boolean },\n): Promise<void> {\n\tconst config = resolveTargetConfig(targetStr, options.token);\n\tconst transport = createTransport(config);\n\n\ttry {\n\t\tconst report = await transport.scan();\n\t\tawait transport.disconnect();\n\n\t\tif (options.json) {\n\t\t\tconsole.log(JSON.stringify(report, null, 2));\n\t\t} else {\n\t\t\tconsole.log(formatScanTable(report));\n\t\t}\n\n\t\tif (report.status === \"offline\") {\n\t\t\tprocess.exit(1);\n\t\t}\n\t} catch (err: unknown) {\n\t\tconsole.error(\n\t\t\t\"[LIOP-Studio Scan Error]:\",\n\t\t\terr instanceof Error ? err.message : String(err),\n\t\t);\n\t\tprocess.exit(1);\n\t}\n}\n","// Copyright 2026 Nekzus Solutions and contributors\n// SPDX-License-Identifier: Apache-2.0\n\nimport pc from \"picocolors\";\nimport type { ScanReport } from \"../transports/transport.interface.js\";\n\nexport function formatScanTable(report: ScanReport): string {\n\tconst lines: string[] = [];\n\n\tlines.push(\"\");\n\tlines.push(\n\t\t`${pc.bold(pc.cyan(\"◈ LIOP SOVEREIGN STUDIO\"))} ${pc.gray(\"—\")} ${pc.bold(\"TARGET SCAN REPORT\")}`,\n\t);\n\tlines.push(pc.gray(\"━\".repeat(70)));\n\n\t// Target summary\n\tconst statusBadge =\n\t\treport.status === \"online\"\n\t\t\t? pc.bgGreen(pc.black(\" ONLINE \"))\n\t\t\t: report.status === \"degraded\"\n\t\t\t\t? pc.bgYellow(pc.black(\" DEGRADED \"))\n\t\t\t\t: pc.bgRed(pc.white(\" OFFLINE \"));\n\n\tlines.push(` ${pc.bold(\"Target:\")} ${report.targetAddress}`);\n\tlines.push(` ${pc.bold(\"Protocol:\")} ${report.targetType.toUpperCase()}`);\n\tlines.push(\n\t\t` ${pc.bold(\"Status:\")} ${statusBadge} ${pc.gray(`(RTT: ${report.latencyMs} ms)`)}`,\n\t);\n\n\tif (report.serverInfo) {\n\t\tlines.push(\n\t\t\t` ${pc.bold(\"Server:\")} ${report.serverInfo.name} ${pc.gray(`v${report.serverInfo.version}`)}`,\n\t\t);\n\t}\n\n\tif (report.error) {\n\t\tlines.push(` ${pc.bold(pc.red(\"Error:\"))} ${report.error}`);\n\t}\n\n\tlines.push(pc.gray(\"─\".repeat(70)));\n\n\t// Tools list\n\tlines.push(\n\t\t` ${pc.bold(\"Discovered Capabilities:\")} ${pc.cyan(report.totalTools.toString())}`,\n\t);\n\tlines.push(\"\");\n\n\tif (report.tools.length === 0) {\n\t\tlines.push(` ${pc.gray(\"No tools exposed by this endpoint.\")}`);\n\t} else {\n\t\t// Table Header\n\t\tlines.push(\n\t\t\t` ${pc.bold(\"Capability Name\".padEnd(36))} ${pc.bold(\"Tier\".padEnd(8))} ${pc.bold(\"Type\".padEnd(10))} ${pc.bold(\"Domain\")}`,\n\t\t);\n\t\tlines.push(` ${pc.gray(\"─\".repeat(66))}`);\n\n\t\tfor (const tool of report.tools) {\n\t\t\tconst nameStr = tool.name.padEnd(36);\n\t\t\tconst tierStr = (tool.tier ? `Tier ${tool.tier}` : \"Tier 2\").padEnd(8);\n\t\t\tconst typeStr = (\n\t\t\t\ttool.isLiopEnabled ? pc.green(\"LIOP/WASI\") : pc.yellow(\"Standard\")\n\t\t\t).padEnd(19);\n\t\t\tconst domainStr = tool.domain || \"General\";\n\n\t\t\tlines.push(\n\t\t\t\t` ${pc.white(nameStr)} ${pc.gray(tierStr)} ${typeStr} ${pc.gray(domainStr)}`,\n\t\t\t);\n\t\t}\n\t}\n\n\tlines.push(pc.gray(\"━\".repeat(70)));\n\tlines.push(\n\t\t`${pc.gray(\"Verified at:\")} ${report.timestamp} ${pc.gray(\"•\")} ${pc.green(\"Zero-Trust Architecture\")}`,\n\t);\n\tlines.push(\"\");\n\n\treturn lines.join(\"\\n\");\n}\n"],"mappings":"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","names":["process","pc","process","TokenTelemetryEngine","crypto","calculateAstInstructionFuel","TokenTelemetryEngine","calculateAstInstructionFuel","TokenTelemetryEngine","crypto","crypto","calculateAstInstructionFuel","TokenTelemetryEngine","calculateAstInstructionFuel","TokenTelemetryEngine","crypto","crypto","process","calculateAstInstructionFuel","TokenTelemetryEngine","process","calculateAstInstructionFuel","TokenTelemetryEngine","crypto","process","TokenTelemetryEngine","process","process","pc","process"]}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
import * as _hono_node_server from '@hono/node-server';
|
|
2
|
+
import * as hono_types from 'hono/types';
|
|
3
|
+
import { Hono } from 'hono';
|
|
4
|
+
|
|
5
|
+
type TargetTransportType = "stdio" | "http" | "grpc" | "mesh";
|
|
6
|
+
interface TargetConnectionConfig {
|
|
7
|
+
type: TargetTransportType;
|
|
8
|
+
stdio?: {
|
|
9
|
+
command: string;
|
|
10
|
+
args?: string[];
|
|
11
|
+
env?: Record<string, string>;
|
|
12
|
+
cwd?: string;
|
|
13
|
+
};
|
|
14
|
+
http?: {
|
|
15
|
+
url: string;
|
|
16
|
+
authToken?: string;
|
|
17
|
+
};
|
|
18
|
+
grpc?: {
|
|
19
|
+
target: string;
|
|
20
|
+
useTls?: boolean;
|
|
21
|
+
token?: string;
|
|
22
|
+
};
|
|
23
|
+
mesh?: {
|
|
24
|
+
bootstrapNodes?: string[];
|
|
25
|
+
swarmKey?: string | Uint8Array;
|
|
26
|
+
nexusUrl?: string;
|
|
27
|
+
clientId?: string;
|
|
28
|
+
clientSecret?: string;
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
interface EnrichedTool {
|
|
32
|
+
name: string;
|
|
33
|
+
description?: string;
|
|
34
|
+
inputSchema?: Record<string, unknown>;
|
|
35
|
+
providerNode?: string;
|
|
36
|
+
tier?: 1 | 2 | 3;
|
|
37
|
+
domain?: string;
|
|
38
|
+
isLiopEnabled?: boolean;
|
|
39
|
+
taxonomy?: {
|
|
40
|
+
domain?: string;
|
|
41
|
+
clearanceTier?: string | number;
|
|
42
|
+
executionTypes?: string[];
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
interface ScannedTargetNode {
|
|
46
|
+
id: string;
|
|
47
|
+
name: string;
|
|
48
|
+
tier?: 1 | 2 | 3;
|
|
49
|
+
tierLabel?: string;
|
|
50
|
+
host: string;
|
|
51
|
+
status: "online" | "offline" | "degraded";
|
|
52
|
+
rttMs: number;
|
|
53
|
+
peerId?: string;
|
|
54
|
+
version: string;
|
|
55
|
+
tools: string[];
|
|
56
|
+
role?: string;
|
|
57
|
+
isolation?: string;
|
|
58
|
+
dataset?: string;
|
|
59
|
+
ports?: {
|
|
60
|
+
http?: number;
|
|
61
|
+
p2p?: number;
|
|
62
|
+
grpc?: number;
|
|
63
|
+
};
|
|
64
|
+
multiaddrs?: string[];
|
|
65
|
+
transportType?: TargetTransportType;
|
|
66
|
+
error?: string;
|
|
67
|
+
}
|
|
68
|
+
interface ScanReport {
|
|
69
|
+
targetType: TargetTransportType;
|
|
70
|
+
targetAddress: string;
|
|
71
|
+
status: "online" | "offline" | "degraded";
|
|
72
|
+
latencyMs: number;
|
|
73
|
+
serverInfo?: {
|
|
74
|
+
name: string;
|
|
75
|
+
version: string;
|
|
76
|
+
};
|
|
77
|
+
totalTools: number;
|
|
78
|
+
tools: EnrichedTool[];
|
|
79
|
+
nodes?: ScannedTargetNode[];
|
|
80
|
+
timestamp: string;
|
|
81
|
+
error?: string;
|
|
82
|
+
}
|
|
83
|
+
interface ExecutionTelemetry {
|
|
84
|
+
fuel?: {
|
|
85
|
+
consumed: number;
|
|
86
|
+
maxLimit: number;
|
|
87
|
+
percentUsed: number;
|
|
88
|
+
deterministicAst: boolean;
|
|
89
|
+
};
|
|
90
|
+
tokens?: {
|
|
91
|
+
inputTokens: number;
|
|
92
|
+
outputTokens: number;
|
|
93
|
+
totalTokens: number;
|
|
94
|
+
traditionalContextTokens?: number;
|
|
95
|
+
savingsPercent?: number;
|
|
96
|
+
estimatorName: string;
|
|
97
|
+
otelEmitted: boolean;
|
|
98
|
+
};
|
|
99
|
+
bandwidth?: {
|
|
100
|
+
payloadBytes: number;
|
|
101
|
+
rawDatasetProtectedBytes?: number;
|
|
102
|
+
egressReductionPercent?: number;
|
|
103
|
+
};
|
|
104
|
+
proof?: {
|
|
105
|
+
zkReceiptHash: string;
|
|
106
|
+
pqcSuite: string;
|
|
107
|
+
sealingCipher: string;
|
|
108
|
+
wasiSandboxIsolation: string;
|
|
109
|
+
timingSideChannelProtection: string;
|
|
110
|
+
};
|
|
111
|
+
phases?: {
|
|
112
|
+
discoveryMs?: number;
|
|
113
|
+
pqcMs?: number;
|
|
114
|
+
sealingMs?: number;
|
|
115
|
+
wasiSandboxMs?: number;
|
|
116
|
+
zkVerificationMs?: number;
|
|
117
|
+
totalLatencyMs: number;
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
interface ExecutionResult {
|
|
121
|
+
type: "result" | "error";
|
|
122
|
+
payload: unknown;
|
|
123
|
+
meta: {
|
|
124
|
+
latencyMs: number;
|
|
125
|
+
tool: string;
|
|
126
|
+
verifiedZk?: boolean;
|
|
127
|
+
zkHash?: string;
|
|
128
|
+
shieldBlocked?: boolean;
|
|
129
|
+
telemetry?: ExecutionTelemetry;
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
interface StudioTransport {
|
|
133
|
+
readonly type: TargetTransportType;
|
|
134
|
+
connect(): Promise<void>;
|
|
135
|
+
disconnect(): Promise<void>;
|
|
136
|
+
isConnected(): boolean;
|
|
137
|
+
scan(): Promise<ScanReport>;
|
|
138
|
+
listTools(): Promise<EnrichedTool[]>;
|
|
139
|
+
callTool(name: string, args: Record<string, unknown>, envelope?: string, onStep?: (phase: string, detail: string, status: "pending" | "running" | "success" | "failed", durationMs?: number) => Promise<void>): Promise<ExecutionResult>;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
interface ServerOptions {
|
|
143
|
+
port?: number;
|
|
144
|
+
initialTarget?: TargetConnectionConfig;
|
|
145
|
+
distPath?: string;
|
|
146
|
+
}
|
|
147
|
+
declare function createStudioServer(options?: ServerOptions): {
|
|
148
|
+
app: Hono<hono_types.BlankEnv, hono_types.BlankSchema, "/">;
|
|
149
|
+
start: () => _hono_node_server.ServerType;
|
|
150
|
+
};
|
|
151
|
+
|
|
152
|
+
export { type EnrichedTool as E, type ScanReport as S, type TargetConnectionConfig as T, type ScannedTargetNode as a, type StudioTransport as b, type TargetTransportType as c, type ExecutionResult as d, type ExecutionTelemetry as e, type ServerOptions as f, createStudioServer as g };
|