@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/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"],"sourcesContent":["// 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"],"mappings":"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","names":["process","TokenTelemetryEngine","crypto","calculateAstInstructionFuel","TokenTelemetryEngine","calculateAstInstructionFuel","TokenTelemetryEngine","crypto","crypto","calculateAstInstructionFuel","TokenTelemetryEngine","calculateAstInstructionFuel","TokenTelemetryEngine","crypto","crypto","process","calculateAstInstructionFuel","TokenTelemetryEngine","process","calculateAstInstructionFuel","TokenTelemetryEngine","crypto","process","TokenTelemetryEngine"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@nekzus/liop-studio",
|
|
3
|
+
"version": "1.0.0-alpha.0",
|
|
4
|
+
"description": "LIOP Sovereign Studio — Developer studio, mesh scanner, and logic-on-origin inspector for LIOP & MCP.",
|
|
5
|
+
"author": "Nekzus Solutions and contributors",
|
|
6
|
+
"license": "Apache-2.0",
|
|
7
|
+
"type": "module",
|
|
8
|
+
"main": "dist/index.js",
|
|
9
|
+
"types": "dist/index.d.ts",
|
|
10
|
+
"bin": {
|
|
11
|
+
"liop-studio": "./bin/liop-studio.js",
|
|
12
|
+
"liop-scan": "./bin/liop-studio.js"
|
|
13
|
+
},
|
|
14
|
+
"files": [
|
|
15
|
+
"dist",
|
|
16
|
+
"bin",
|
|
17
|
+
"ui/dist",
|
|
18
|
+
"README.md",
|
|
19
|
+
"LICENSE",
|
|
20
|
+
"NOTICE"
|
|
21
|
+
],
|
|
22
|
+
"publishConfig": {
|
|
23
|
+
"access": "public",
|
|
24
|
+
"registry": "https://registry.npmjs.org/",
|
|
25
|
+
"provenance": true
|
|
26
|
+
},
|
|
27
|
+
"engines": {
|
|
28
|
+
"node": ">=20.0"
|
|
29
|
+
},
|
|
30
|
+
"dependencies": {
|
|
31
|
+
"@hono/node-server": "2.1.1",
|
|
32
|
+
"@nekzus/liop": "2.4.0-alpha.9",
|
|
33
|
+
"commander": "^13.1.0",
|
|
34
|
+
"hono": "4.13.5",
|
|
35
|
+
"picocolors": "^1.1.1",
|
|
36
|
+
"zod": "4.4.3"
|
|
37
|
+
},
|
|
38
|
+
"devDependencies": {
|
|
39
|
+
"@biomejs/biome": "2.5.10",
|
|
40
|
+
"@types/node": "26.4.0",
|
|
41
|
+
"tsup": "8.5.1",
|
|
42
|
+
"tsx": "4.23.12",
|
|
43
|
+
"typescript": "6.0.3",
|
|
44
|
+
"vitest": "4.1.11"
|
|
45
|
+
},
|
|
46
|
+
"scripts": {
|
|
47
|
+
"build": "tsup",
|
|
48
|
+
"build:ui": "pnpm --filter @nekzus/liop-studio-ui build",
|
|
49
|
+
"build:all": "pnpm --filter @nekzus/liop build && pnpm build:ui && pnpm build",
|
|
50
|
+
"start": "node bin/liop-studio.js",
|
|
51
|
+
"scan": "node bin/liop-studio.js scan",
|
|
52
|
+
"test": "vitest run",
|
|
53
|
+
"lint": "biome lint .",
|
|
54
|
+
"format": "biome format --write .",
|
|
55
|
+
"check": "biome check ."
|
|
56
|
+
}
|
|
57
|
+
}
|
package/ui/README.md
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# React + TypeScript + Vite
|
|
2
|
+
|
|
3
|
+
This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.
|
|
4
|
+
|
|
5
|
+
Currently, two official plugins are available:
|
|
6
|
+
|
|
7
|
+
- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react) uses [Oxc](https://oxc.rs)
|
|
8
|
+
- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc) uses [SWC](https://swc.rs/)
|
|
9
|
+
|
|
10
|
+
## React Compiler
|
|
11
|
+
|
|
12
|
+
The React Compiler is not enabled on this template because of its impact on dev & build performances. To add it, see [this documentation](https://react.dev/learn/react-compiler/installation).
|
|
13
|
+
|
|
14
|
+
## Expanding the ESLint configuration
|
|
15
|
+
|
|
16
|
+
If you are developing a production application, we recommend updating the configuration to enable type-aware lint rules:
|
|
17
|
+
|
|
18
|
+
```js
|
|
19
|
+
export default defineConfig([
|
|
20
|
+
globalIgnores(['dist']),
|
|
21
|
+
{
|
|
22
|
+
files: ['**/*.{ts,tsx}'],
|
|
23
|
+
extends: [
|
|
24
|
+
// Other configs...
|
|
25
|
+
|
|
26
|
+
// Remove tseslint.configs.recommended and replace with this
|
|
27
|
+
tseslint.configs.recommendedTypeChecked,
|
|
28
|
+
// Alternatively, use this for stricter rules
|
|
29
|
+
tseslint.configs.strictTypeChecked,
|
|
30
|
+
// Optionally, add this for stylistic rules
|
|
31
|
+
tseslint.configs.stylisticTypeChecked,
|
|
32
|
+
|
|
33
|
+
// Other configs...
|
|
34
|
+
],
|
|
35
|
+
languageOptions: {
|
|
36
|
+
parserOptions: {
|
|
37
|
+
project: ['./tsconfig.node.json', './tsconfig.app.json'],
|
|
38
|
+
tsconfigRootDir: import.meta.dirname,
|
|
39
|
+
},
|
|
40
|
+
// other options...
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
])
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
You can also install [eslint-plugin-react-x](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-x) and [eslint-plugin-react-dom](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-dom) for React-specific lint rules:
|
|
47
|
+
|
|
48
|
+
```js
|
|
49
|
+
// eslint.config.js
|
|
50
|
+
import reactX from 'eslint-plugin-react-x'
|
|
51
|
+
import reactDom from 'eslint-plugin-react-dom'
|
|
52
|
+
|
|
53
|
+
export default defineConfig([
|
|
54
|
+
globalIgnores(['dist']),
|
|
55
|
+
{
|
|
56
|
+
files: ['**/*.{ts,tsx}'],
|
|
57
|
+
extends: [
|
|
58
|
+
// Other configs...
|
|
59
|
+
// Enable lint rules for React
|
|
60
|
+
reactX.configs['recommended-typescript'],
|
|
61
|
+
// Enable lint rules for React DOM
|
|
62
|
+
reactDom.configs.recommended,
|
|
63
|
+
],
|
|
64
|
+
languageOptions: {
|
|
65
|
+
parserOptions: {
|
|
66
|
+
project: ['./tsconfig.node.json', './tsconfig.app.json'],
|
|
67
|
+
tsconfigRootDir: import.meta.dirname,
|
|
68
|
+
},
|
|
69
|
+
// other options...
|
|
70
|
+
},
|
|
71
|
+
},
|
|
72
|
+
])
|
|
73
|
+
```
|