@nekzus/liop 2.4.0-alpha.23 → 2.4.0-alpha.25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. package/README.md +21 -10
  2. package/dist/bin/agent.js +61 -23
  3. package/dist/bridge.d.ts +3 -3
  4. package/dist/bridge.js +3 -3
  5. package/dist/{chunk-WPTOJYN5.js → chunk-3664H3CV.js} +14 -59
  6. package/dist/{chunk-E7RSX476.js → chunk-6MYJBM2E.js} +4 -4
  7. package/dist/{chunk-AMSFSS2I.js → chunk-DSOB2JKM.js} +20 -10
  8. package/dist/{chunk-OHMZZMMC.js → chunk-ET6VRUK2.js} +3 -3
  9. package/dist/{chunk-P34HDRN5.js → chunk-FIVRGOA4.js} +69 -2
  10. package/dist/{chunk-KB3HUVMD.js → chunk-IHKKWXHJ.js} +24 -25
  11. package/dist/chunk-JPWC6XG6.js +941 -0
  12. package/dist/{chunk-YLFNJQI2.js → chunk-KR5UZUEY.js} +24 -3
  13. package/dist/chunk-NXCAFF73.js +59 -0
  14. package/dist/{chunk-7BSCUYUE.js → chunk-R52TZEIL.js} +8 -3
  15. package/dist/{chunk-3WKFZQ34.js → chunk-S3RAZTEM.js} +11 -7
  16. package/dist/{chunk-PUDETPL4.js → chunk-V47P2AQR.js} +5 -3
  17. package/dist/{chunk-E2CFIWD6.js → chunk-WXOWJXY6.js} +4 -4
  18. package/dist/{chunk-ZRWNMP5L.js → chunk-WXYDFCIW.js} +139 -11
  19. package/dist/{chunk-T2QDHVUD.js → chunk-ZU3WVVLC.js} +21 -12
  20. package/dist/client.d.ts +4 -4
  21. package/dist/client.js +6 -6
  22. package/dist/gateway.d.ts +5 -5
  23. package/dist/gateway.js +8 -7
  24. package/dist/{hybrid-B7EjCj3q.d.ts → hybrid-BZpCiUaV.d.ts} +3 -3
  25. package/dist/{index-DDwiS7tf.d.ts → index-BYDtRGue.d.ts} +3 -3
  26. package/dist/{index-D2P6Z_hP.d.ts → index-ByzjpRCk.d.ts} +6 -1
  27. package/dist/index.d.ts +15 -10
  28. package/dist/index.js +15 -14
  29. package/dist/mesh.js +1 -1
  30. package/dist/server.d.ts +3 -3
  31. package/dist/server.js +6 -5
  32. package/dist/{types-rxL19f0l.d.ts → types-29zv9X1V.d.ts} +1 -1
  33. package/dist/types.d.ts +2 -2
  34. package/dist/types.js +2 -2
  35. package/dist/verifier-55HW6AFN.js +6 -0
  36. package/dist/{verifier-DTn1LXDU.d.ts → verifier-DqZ9MQ9l.d.ts} +34 -5
  37. package/dist/workers/logic-execution.d.ts +2 -1
  38. package/dist/workers/logic-execution.js +38 -9
  39. package/dist/workers/zk-verifier.d.ts +1 -1
  40. package/dist/workers/zk-verifier.js +35 -5
  41. package/dist/{zk-CYImPsa6.d.ts → zk-DzYNWBgo.d.ts} +14 -1
  42. package/package.json +6 -2
  43. package/dist/bin/agent.js.map +0 -1
  44. package/dist/bridge.js.map +0 -1
  45. package/dist/chunk-3QH44NKZ.js.map +0 -1
  46. package/dist/chunk-3WKFZQ34.js.map +0 -1
  47. package/dist/chunk-7BSCUYUE.js.map +0 -1
  48. package/dist/chunk-7PITYWOV.js.map +0 -1
  49. package/dist/chunk-AMSFSS2I.js.map +0 -1
  50. package/dist/chunk-E2CFIWD6.js.map +0 -1
  51. package/dist/chunk-E7RSX476.js.map +0 -1
  52. package/dist/chunk-FTF6AMF6.js.map +0 -1
  53. package/dist/chunk-GFGSHQN5.js +0 -206884
  54. package/dist/chunk-GFGSHQN5.js.map +0 -1
  55. package/dist/chunk-IK7CGWAZ.js.map +0 -1
  56. package/dist/chunk-K3DGJLUY.js.map +0 -1
  57. package/dist/chunk-KB3HUVMD.js.map +0 -1
  58. package/dist/chunk-OHMZZMMC.js.map +0 -1
  59. package/dist/chunk-P34HDRN5.js.map +0 -1
  60. package/dist/chunk-PUDETPL4.js.map +0 -1
  61. package/dist/chunk-Q3FKHJ3B.js.map +0 -1
  62. package/dist/chunk-T2QDHVUD.js.map +0 -1
  63. package/dist/chunk-WPTOJYN5.js.map +0 -1
  64. package/dist/chunk-Y62GORQF.js.map +0 -1
  65. package/dist/chunk-YLFNJQI2.js.map +0 -1
  66. package/dist/chunk-ZP3VVXOI.js.map +0 -1
  67. package/dist/chunk-ZRWNMP5L.js.map +0 -1
  68. package/dist/client.js.map +0 -1
  69. package/dist/gateway.js.map +0 -1
  70. package/dist/index.js.map +0 -1
  71. package/dist/kyber-CGOA7Q6A.js.map +0 -1
  72. package/dist/mesh.js.map +0 -1
  73. package/dist/server.js.map +0 -1
  74. package/dist/types.js.map +0 -1
  75. package/dist/verifier-UBJTZQSA.js +0 -6
  76. package/dist/verifier-UBJTZQSA.js.map +0 -1
  77. package/dist/workers/logic-execution.js.map +0 -1
  78. package/dist/workers/zk-verifier.js.map +0 -1
package/dist/index.d.ts CHANGED
@@ -1,22 +1,22 @@
1
1
  export { LiopBridgeOptions, LiopMcpBridge, LiopStreamBridge, LiopStreamBridgeOptions } from './bridge.js';
2
- import { L as LiopTlsOptions } from './index-DDwiS7tf.js';
3
- export { C as CertInfo, a as CertManager, b as CertManagerOptions, c as LiopClient, d as createChannelCredentials, e as createServerCredentials } from './index-DDwiS7tf.js';
2
+ import { L as LiopTlsOptions } from './index-BYDtRGue.js';
3
+ export { C as CertInfo, a as CertManager, b as CertManagerOptions, c as LiopClient, d as createChannelCredentials, e as createServerCredentials } from './index-BYDtRGue.js';
4
4
  import { ProofWithSignals, VerificationKey } from 'micro-zk-proofs';
5
5
  export { ProofWithSignals, VerificationKey } from 'micro-zk-proofs';
6
+ export { L as LiopVerifier, T as TeePolicy, a as TeeVerificationOptions, b as TeeVerificationResult, V as VerifyZkOptions } from './verifier-DqZ9MQ9l.js';
6
7
  import * as http from 'node:http';
7
- export { I as InMemoryRateLimiter, L as LiopHybridGateway, a as LiopMcpRouter, R as RateLimitStatus, b as RateLimiterOptions } from './hybrid-B7EjCj3q.js';
8
- import { A as AuthInfo } from './types-rxL19f0l.js';
9
- export { g as AuditEntry, h as AuditInterceptor, d as AuditLogger, i as AuditRecordParams, j as AuditStatus, k as CacheableResult, C as CallToolRequest, a as CallToolResult, D as DiscoverResult, l as GENESIS_HASH, m as GatewayAdmissionResult, n as GatewayInterceptor, o as GatewayInterceptorContext, G as GatewayInterceptorOptions, e as GetPromptRequest, f as GetPromptResult, I as InputRequest, p as InputRequiredResult, q as InputResponse, J as JwtValidator, L as LiopLogger, r as LogEvent, s as LogInterceptor, t as LogLevel, u as MCP_LEGACY_SUPPORT_ENABLED, v as MCP_PROTOCOL_VERSION, w as MCP_PROTOCOL_VERSION_LEGACY, M as McpEra, b as McpRequest, x as McpRequestMeta, c as McpResponse, P as Prompt, y as PromptSchema, R as Resource, z as ResourceSchema, S as ServerInfo, T as Tool, B as ToolSchema, E as computeEntryHash, F as executeGatewayInterceptor, H as globalAuditLogger, K as log } from './types-rxL19f0l.js';
8
+ export { I as InMemoryRateLimiter, L as LiopHybridGateway, a as LiopMcpRouter, R as RateLimitStatus, b as RateLimiterOptions } from './hybrid-BZpCiUaV.js';
9
+ import { A as AuthInfo } from './types-29zv9X1V.js';
10
+ export { g as AuditEntry, h as AuditInterceptor, d as AuditLogger, i as AuditRecordParams, j as AuditStatus, k as CacheableResult, C as CallToolRequest, a as CallToolResult, D as DiscoverResult, l as GENESIS_HASH, m as GatewayAdmissionResult, n as GatewayInterceptor, o as GatewayInterceptorContext, G as GatewayInterceptorOptions, e as GetPromptRequest, f as GetPromptResult, I as InputRequest, p as InputRequiredResult, q as InputResponse, J as JwtValidator, L as LiopLogger, r as LogEvent, s as LogInterceptor, t as LogLevel, u as MCP_LEGACY_SUPPORT_ENABLED, v as MCP_PROTOCOL_VERSION, w as MCP_PROTOCOL_VERSION_LEGACY, M as McpEra, b as McpRequest, x as McpRequestMeta, c as McpResponse, P as Prompt, y as PromptSchema, R as Resource, z as ResourceSchema, S as ServerInfo, T as Tool, B as ToolSchema, E as computeEntryHash, F as executeGatewayInterceptor, H as globalAuditLogger, K as log } from './types-29zv9X1V.js';
10
11
  export { L as LiopManifest, a as MeshNode, M as MeshNodeConfig } from './node-Djzm6UYd.js';
11
12
  export { SWARM_KEY_BYTE_LENGTH, createSwarmKey, deserializeSwarmKey, loadSwarmKey, parseSwarmKey, saveSwarmKey, serializeSwarmKey } from './mesh.js';
12
13
  import * as grpc from '@grpc/grpc-js';
13
- export { A as AUTH_DEFAULTS, b as AggregationPolicy, c as AuthRole, d as LiopAuthConfig, L as LiopServer, a as LiopServerOptions, e as LogicExecutionPolicy, N as NerScanner, O as OAuthClientConfig, f as OutputSanitizerConfig, P as PII_PATTERNS, g as PII_PRESETS, h as PiiRule, i as PiiScanner, T as ToolHandler, s as sanitizeOutput } from './index-D2P6Z_hP.js';
14
+ export { A as AUTH_DEFAULTS, b as AggregationPolicy, c as AuthRole, d as LiopAuthConfig, L as LiopServer, a as LiopServerOptions, e as LogicExecutionPolicy, N as NerScanner, O as OAuthClientConfig, f as OutputSanitizerConfig, P as PII_PATTERNS, g as PII_PRESETS, h as PiiRule, i as PiiScanner, T as ToolHandler, s as sanitizeOutput } from './index-ByzjpRCk.js';
14
15
  import * as jose from 'jose';
15
16
  import Provider from 'oidc-provider';
16
- export { D as DecodedReceipt, P as ProofType, R as RECEIPT_VERSION_V1, a as RECEIPT_VERSION_V2, b as ZK_JOURNAL_V2_SIZE, c as ZkJournalV2, Z as ZkPolicy, d as ZkReceipt, e as ZkVerificationError, f as ZkVerifier, g as decodeJournalV2, h as encodeJournalV2, r as receiptCodec } from './zk-CYImPsa6.js';
17
+ export { D as DecodedReceipt, P as ProofType, R as RECEIPT_VERSION_V1, a as RECEIPT_VERSION_V2, b as ZK_JOURNAL_V2_SIZE, c as ZkJournalV2, Z as ZkPolicy, d as ZkReceipt, e as ZkVerificationError, f as ZkVerifier, g as decodeJournalV2, h as encodeJournalV2, r as receiptCodec } from './zk-DzYNWBgo.js';
17
18
  import '@modelcontextprotocol/sdk/server/mcp.js';
18
19
  import 'zod';
19
- import './verifier-DTn1LXDU.js';
20
20
  import 'node:events';
21
21
 
22
22
  declare const VERIFICATION_LATENCY_BUDGET_MS = 250;
@@ -64,7 +64,7 @@ interface TokenEstimator {
64
64
  *
65
65
  * - Synchronous: safe for hot-path usage without async overhead
66
66
  * - Merge cache reduced to 10K entries for long-running server processes
67
- * - Inlined at build-time: zero external runtime dependencies in node_modules
67
+ * - External dependency: resolved from gpt-tokenizer in node_modules at runtime
68
68
  */
69
69
  declare class RealTokenEstimator implements TokenEstimator {
70
70
  readonly name = "o200k_base";
@@ -426,7 +426,8 @@ declare enum ProofMode {
426
426
  }
427
427
  declare enum ProofType {
428
428
  PROOF_TYPE_HMAC_LEGACY = 0,
429
- PROOF_TYPE_GROTH16 = 2
429
+ PROOF_TYPE_GROTH16 = 2,
430
+ PROOF_TYPE_GROTH16_PQC_HYBRID = 3
430
431
  }
431
432
  interface IntentRequest {
432
433
  agent_did: string;
@@ -524,6 +525,10 @@ declare const Dilithium65Wrapper: {
524
525
  publicKey: Uint8Array;
525
526
  secretKey: Uint8Array;
526
527
  };
528
+ /**
529
+ * Derives the ML-DSA-65 public key from a given secret key.
530
+ */
531
+ getPublicKey(secretKey: Uint8Array): Uint8Array;
527
532
  /**
528
533
  * Validates and imports a raw ML-DSA-65 public key.
529
534
  */
package/dist/index.js CHANGED
@@ -1,23 +1,24 @@
1
- export { WasiSandbox, calculateAstInstructionFuel, getDefaultEnvironment } from './chunk-7BSCUYUE.js';
2
- export { VERIFICATION_LATENCY_BUDGET_MS, deserializeGrothProof, deserializeVKey, serializeGrothProof, serializeVKey, verifyGroth16Proof } from './chunk-OHMZZMMC.js';
3
- export { AesGcmWrapper, LiopClient, LiopRpcClient } from './chunk-3WKFZQ34.js';
4
- export { LiopMcpBridge, LiopStreamBridge } from './chunk-E2CFIWD6.js';
5
- export { GRPC_WEB_CONSTANTS, InMemoryRateLimiter, LiopHybridGateway, buildProtectedResourceMetadata, decodeFrames, dispatchGrpcWebRequest, encodeDataFrame, encodeTrailerFrame, executeGatewayInterceptor, isGrpcWebRequest } from './chunk-E7RSX476.js';
6
- export { RoutingTable, probeTopology } from './chunk-PUDETPL4.js';
1
+ export { WasiSandbox, calculateAstInstructionFuel, getDefaultEnvironment } from './chunk-R52TZEIL.js';
2
+ export { VERIFICATION_LATENCY_BUDGET_MS, deserializeGrothProof, deserializeVKey, serializeGrothProof, serializeVKey, verifyGroth16Proof } from './chunk-ET6VRUK2.js';
3
+ export { AesGcmWrapper, LiopClient, LiopRpcClient } from './chunk-S3RAZTEM.js';
4
+ export { LiopMcpBridge, LiopStreamBridge } from './chunk-WXOWJXY6.js';
5
+ export { GRPC_WEB_CONSTANTS, InMemoryRateLimiter, LiopHybridGateway, buildProtectedResourceMetadata, decodeFrames, dispatchGrpcWebRequest, encodeDataFrame, encodeTrailerFrame, executeGatewayInterceptor, isGrpcWebRequest } from './chunk-6MYJBM2E.js';
6
+ export { RoutingTable, probeTopology } from './chunk-V47P2AQR.js';
7
7
  export { TokenManager } from './chunk-3QH44NKZ.js';
8
- export { AUTH_DEFAULTS, AuditLogger, GENESIS_HASH, JwtValidator, LiopRpcServer, LiopServer, NerScanner, PII_PATTERNS, PII_PRESETS, PiiScanner, computeEntryHash, createOAuthServer, globalAuditLogger } from './chunk-T2QDHVUD.js';
8
+ export { AUTH_DEFAULTS, AuditLogger, GENESIS_HASH, JwtValidator, LiopRpcServer, LiopServer, NerScanner, PII_PATTERNS, PII_PRESETS, PiiScanner, computeEntryHash, createOAuthServer, globalAuditLogger } from './chunk-ZU3WVVLC.js';
9
9
  export { sanitizeOutput } from './chunk-Y62GORQF.js';
10
- export { LiopMcpRouter } from './chunk-AMSFSS2I.js';
11
- import './chunk-ZRWNMP5L.js';
10
+ export { LiopMcpRouter } from './chunk-DSOB2JKM.js';
11
+ export { LiopVerifier } from './chunk-WXYDFCIW.js';
12
12
  import './chunk-IK7CGWAZ.js';
13
13
  export { Kyber768Wrapper } from './chunk-7PITYWOV.js';
14
- export { DILITHIUM65_CONSTANTS, Dilithium65Wrapper, LIOP_SCOPES, authorizeRequest } from './chunk-WPTOJYN5.js';
15
- export { GRPC_CHANNEL_OPTIONS, HeuristicTokenEstimator, LiopOTelBridge, RealTokenEstimator, TokenTelemetryEngine, createChannelCredentials, createServerCredentials, createSyncTokenEstimator, createTokenEstimator } from './chunk-GFGSHQN5.js';
14
+ export { LIOP_SCOPES, authorizeRequest } from './chunk-NXCAFF73.js';
15
+ export { DILITHIUM65_CONSTANTS, Dilithium65Wrapper } from './chunk-3664H3CV.js';
16
+ export { GRPC_CHANNEL_OPTIONS, HeuristicTokenEstimator, LiopOTelBridge, RealTokenEstimator, TokenTelemetryEngine, createChannelCredentials, createServerCredentials, createSyncTokenEstimator, createTokenEstimator } from './chunk-JPWC6XG6.js';
16
17
  export { Counter, Gauge, Histogram, MetricsRegistry, egressBlocksTotal, fuelConsumed, manifestCacheSize, meshPeersConnected, operationDurationMs, pqcHandshakeDurationMs, pqcHandshakesTotal, protocolMetrics, tokensInputTotal, tokensOutputTotal, tokensSavedTotal, toolCallErrorsTotal, toolCallsTotal, wireEgressBytesTotal, wireSavedBytesTotal, zkProofsByTypeTotal, zkProvingDurationMs, zkVerificationDurationMs, zkVerificationsTotal, zkVkeyCacheSize } from './chunk-Q3FKHJ3B.js';
17
- export { MCP_LEGACY_SUPPORT_ENABLED, MCP_PROTOCOL_VERSION, MCP_PROTOCOL_VERSION_LEGACY, PromptSchema, ResourceSchema, ToolSchema } from './chunk-YLFNJQI2.js';
18
- export { ProofType, RECEIPT_VERSION_V1, RECEIPT_VERSION_V2, ZK_JOURNAL_V2_SIZE, ZkVerificationError, ZkVerifier, decodeJournalV2, encodeJournalV2, receiptCodec } from './chunk-P34HDRN5.js';
18
+ export { MCP_LEGACY_SUPPORT_ENABLED, MCP_PROTOCOL_VERSION, MCP_PROTOCOL_VERSION_LEGACY, PromptSchema, ResourceSchema, ToolSchema } from './chunk-KR5UZUEY.js';
19
+ export { ProofType, RECEIPT_VERSION_V1, RECEIPT_VERSION_V2, ZK_JOURNAL_V2_SIZE, ZkVerificationError, ZkVerifier, decodeJournalV2, encodeJournalV2, receiptCodec } from './chunk-FIVRGOA4.js';
19
20
  export { SWARM_KEY_BYTE_LENGTH, createSwarmKey, deserializeSwarmKey, loadSwarmKey, parseSwarmKey, saveSwarmKey, serializeSwarmKey } from './chunk-ZP3VVXOI.js';
20
- export { MeshNode } from './chunk-KB3HUVMD.js';
21
+ export { MeshNode } from './chunk-IHKKWXHJ.js';
21
22
  import { log } from './chunk-K3DGJLUY.js';
22
23
  export { LiopLogger, log } from './chunk-K3DGJLUY.js';
23
24
  import * as crypto from 'crypto';
package/dist/mesh.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import './chunk-FTF6AMF6.js';
2
2
  export { SWARM_KEY_BYTE_LENGTH, createSwarmKey, deserializeSwarmKey, loadSwarmKey, parseSwarmKey, saveSwarmKey, serializeSwarmKey } from './chunk-ZP3VVXOI.js';
3
- export { MeshNode } from './chunk-KB3HUVMD.js';
3
+ export { MeshNode } from './chunk-IHKKWXHJ.js';
4
4
  import './chunk-K3DGJLUY.js';
5
5
  //# sourceMappingURL=mesh.js.map
6
6
  //# sourceMappingURL=mesh.js.map
package/dist/server.d.ts CHANGED
@@ -1,6 +1,6 @@
1
- export { b as AggregationPolicy, L as LiopServer, a as LiopServerOptions, e as LogicExecutionPolicy, N as NerScanner, f as OutputSanitizerConfig, P as PII_PATTERNS, g as PII_PRESETS, h as PiiRule, i as PiiScanner, T as ToolHandler, s as sanitizeOutput } from './index-D2P6Z_hP.js';
1
+ export { b as AggregationPolicy, L as LiopServer, a as LiopServerOptions, e as LogicExecutionPolicy, N as NerScanner, f as OutputSanitizerConfig, P as PII_PATTERNS, g as PII_PRESETS, h as PiiRule, i as PiiScanner, T as ToolHandler, s as sanitizeOutput } from './index-ByzjpRCk.js';
2
2
  import 'zod';
3
3
  import './node-Djzm6UYd.js';
4
- import './types-rxL19f0l.js';
5
- import './zk-CYImPsa6.js';
4
+ import './types-29zv9X1V.js';
5
+ import './zk-DzYNWBgo.js';
6
6
  import 'jose';
package/dist/server.js CHANGED
@@ -1,10 +1,11 @@
1
- export { LiopServer, NerScanner, PII_PATTERNS, PII_PRESETS, PiiScanner } from './chunk-T2QDHVUD.js';
1
+ export { LiopServer, NerScanner, PII_PATTERNS, PII_PRESETS, PiiScanner } from './chunk-ZU3WVVLC.js';
2
2
  export { sanitizeOutput } from './chunk-Y62GORQF.js';
3
- import './chunk-WPTOJYN5.js';
4
- import './chunk-GFGSHQN5.js';
3
+ import './chunk-NXCAFF73.js';
4
+ import './chunk-3664H3CV.js';
5
+ import './chunk-JPWC6XG6.js';
5
6
  import './chunk-Q3FKHJ3B.js';
6
- import './chunk-P34HDRN5.js';
7
- import './chunk-KB3HUVMD.js';
7
+ import './chunk-FIVRGOA4.js';
8
+ import './chunk-IHKKWXHJ.js';
8
9
  import './chunk-K3DGJLUY.js';
9
10
  //# sourceMappingURL=server.js.map
10
11
  //# sourceMappingURL=server.js.map
@@ -1,4 +1,4 @@
1
- import { P as ProofType } from './zk-CYImPsa6.js';
1
+ import { P as ProofType } from './zk-DzYNWBgo.js';
2
2
  import { z } from 'zod';
3
3
  import * as jose from 'jose';
4
4
 
package/dist/types.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export { P as ProofType, R as RECEIPT_VERSION_V1, a as RECEIPT_VERSION_V2, b as ZK_JOURNAL_V2_SIZE, c as ZkJournalV2, Z as ZkPolicy, d as ZkReceipt } from './zk-CYImPsa6.js';
1
+ export { P as ProofType, R as RECEIPT_VERSION_V1, a as RECEIPT_VERSION_V2, b as ZK_JOURNAL_V2_SIZE, c as ZkJournalV2, Z as ZkPolicy, d as ZkReceipt } from './zk-DzYNWBgo.js';
2
2
  import 'zod';
3
- export { h as AuditInterceptor, A as AuthInfo, k as CacheableResult, C as CallToolRequest, a as CallToolResult, D as DiscoverResult, m as GatewayAdmissionResult, n as GatewayInterceptor, o as GatewayInterceptorContext, G as GatewayInterceptorOptions, e as GetPromptRequest, f as GetPromptResult, I as InputRequest, p as InputRequiredResult, q as InputResponse, r as LogEvent, s as LogInterceptor, u as MCP_LEGACY_SUPPORT_ENABLED, v as MCP_PROTOCOL_VERSION, w as MCP_PROTOCOL_VERSION_LEGACY, M as McpEra, b as McpRequest, x as McpRequestMeta, c as McpResponse, P as Prompt, y as PromptSchema, R as Resource, z as ResourceSchema, S as ServerInfo, T as Tool, B as ToolSchema } from './types-rxL19f0l.js';
3
+ export { h as AuditInterceptor, A as AuthInfo, k as CacheableResult, C as CallToolRequest, a as CallToolResult, D as DiscoverResult, m as GatewayAdmissionResult, n as GatewayInterceptor, o as GatewayInterceptorContext, G as GatewayInterceptorOptions, e as GetPromptRequest, f as GetPromptResult, I as InputRequest, p as InputRequiredResult, q as InputResponse, r as LogEvent, s as LogInterceptor, u as MCP_LEGACY_SUPPORT_ENABLED, v as MCP_PROTOCOL_VERSION, w as MCP_PROTOCOL_VERSION_LEGACY, M as McpEra, b as McpRequest, x as McpRequestMeta, c as McpResponse, P as Prompt, y as PromptSchema, R as Resource, z as ResourceSchema, S as ServerInfo, T as Tool, B as ToolSchema } from './types-29zv9X1V.js';
4
4
  import 'jose';
package/dist/types.js CHANGED
@@ -1,4 +1,4 @@
1
- export { MCP_LEGACY_SUPPORT_ENABLED, MCP_PROTOCOL_VERSION, MCP_PROTOCOL_VERSION_LEGACY, PromptSchema, ResourceSchema, ToolSchema } from './chunk-YLFNJQI2.js';
2
- export { ProofType, RECEIPT_VERSION_V1, RECEIPT_VERSION_V2, ZK_JOURNAL_V2_SIZE } from './chunk-P34HDRN5.js';
1
+ export { MCP_LEGACY_SUPPORT_ENABLED, MCP_PROTOCOL_VERSION, MCP_PROTOCOL_VERSION_LEGACY, PromptSchema, ResourceSchema, ToolSchema } from './chunk-KR5UZUEY.js';
2
+ export { ProofType, RECEIPT_VERSION_V1, RECEIPT_VERSION_V2, ZK_JOURNAL_V2_SIZE } from './chunk-FIVRGOA4.js';
3
3
  //# sourceMappingURL=types.js.map
4
4
  //# sourceMappingURL=types.js.map
@@ -0,0 +1,6 @@
1
+ export { LiopVerifier } from './chunk-WXYDFCIW.js';
2
+ import './chunk-IK7CGWAZ.js';
3
+ import './chunk-Q3FKHJ3B.js';
4
+ import './chunk-K3DGJLUY.js';
5
+ //# sourceMappingURL=verifier-55HW6AFN.js.map
6
+ //# sourceMappingURL=verifier-55HW6AFN.js.map
@@ -1,5 +1,28 @@
1
- import { Z as ZkPolicy } from './zk-CYImPsa6.js';
1
+ import { Z as ZkPolicy } from './zk-DzYNWBgo.js';
2
2
 
3
+ type TeePolicy = "required" | "preferred" | "none";
4
+ interface TeeVerificationOptions {
5
+ /** Enforcement policy for TEE attestation */
6
+ policy?: TeePolicy;
7
+ /** Expected cryptographic nonce used during negotiateIntent handshake */
8
+ expectedNonce?: Buffer | Uint8Array;
9
+ /** Expected enclave public key (e.g. ML-KEM-768 public key) */
10
+ expectedPublicKey?: Buffer | Uint8Array;
11
+ /** Expected platform configuration registers (PCRs) */
12
+ expectedPcrs?: Record<number, string>;
13
+ /** Allow synthetic / mesh PSK proofs in non-hardware environments */
14
+ allowSynthetic?: boolean;
15
+ }
16
+ interface TeeVerificationResult {
17
+ verified: boolean;
18
+ platform: "amd-sev-snp" | "aws-nitro" | "intel-tdx" | "synthetic" | "none";
19
+ message: string;
20
+ measurements?: {
21
+ reportDataHex?: string;
22
+ measurementHex?: string;
23
+ chipIdHex?: string;
24
+ };
25
+ }
3
26
  interface VerifyZkOptions {
4
27
  sessionSecret?: Buffer;
5
28
  expectedOutput?: unknown;
@@ -39,15 +62,21 @@ declare class LiopVerifier {
39
62
  */
40
63
  verifyZkReceipt(logicPayload: Buffer, remoteImageIdHex: string, zkReceipt: Buffer, sessionSecretOrOptions?: Buffer | VerifyZkOptions, expectedOutput?: unknown): Promise<boolean>;
41
64
  /**
42
- * Verifies if a node is running inside an authenticated TEE (e.g. AWS Nitro).
65
+ * Detailed hardware attestation verification supporting AMD SEV-SNP, AWS Nitro Enclaves,
66
+ * and synthetic mesh verification.
67
+ */
68
+ verifyTeeAttestationDetailed(attestationReport: Buffer, options?: TeeVerificationOptions): Promise<TeeVerificationResult>;
69
+ /**
70
+ * Verifies if a node is running inside an authenticated TEE (e.g. AMD SEV-SNP or AWS Nitro).
43
71
  *
44
- * @param attestationReport The COSE-signed attestation document from the hardware.
72
+ * @param attestationReport The attestation document from the hardware.
73
+ * @param options Verification policy and binding options.
45
74
  */
46
- verifyTeeAttestation(attestationReport: Buffer): Promise<boolean>;
75
+ verifyTeeAttestation(attestationReport: Buffer, options?: TeeVerificationOptions): Promise<boolean>;
47
76
  /**
48
77
  * Derives the ImageID of a logic payload following the LIOP v1 Standard.
49
78
  */
50
79
  deriveImageId(logicPayload: Buffer): Buffer;
51
80
  }
52
81
 
53
- export { LiopVerifier as L };
82
+ export { LiopVerifier as L, type TeePolicy as T, type VerifyZkOptions as V, type TeeVerificationOptions as a, type TeeVerificationResult as b };
@@ -1,4 +1,4 @@
1
- import { P as ProofType } from '../zk-CYImPsa6.js';
1
+ import { P as ProofType } from '../zk-DzYNWBgo.js';
2
2
 
3
3
  interface WorkerData {
4
4
  isWarmup?: boolean;
@@ -14,6 +14,7 @@ interface WorkerData {
14
14
  aesNonce?: Uint8Array;
15
15
  proofMode?: number;
16
16
  guestImageId?: string;
17
+ pqcSigningKey?: Uint8Array;
17
18
  dpConfig?: {
18
19
  epsilon: number;
19
20
  sensitivity: number;
@@ -1,7 +1,8 @@
1
- import { ASTGuardian, WasiSandbox } from '../chunk-7BSCUYUE.js';
1
+ import { ASTGuardian, WasiSandbox } from '../chunk-R52TZEIL.js';
2
2
  import { sanitizeOutput } from '../chunk-Y62GORQF.js';
3
3
  import { normalizeLogicSource, deriveLogicImageDigest } from '../chunk-IK7CGWAZ.js';
4
- import { encodeJournalV2, receiptCodec } from '../chunk-P34HDRN5.js';
4
+ import { Dilithium65Wrapper } from '../chunk-3664H3CV.js';
5
+ import { encodeJournalV2, receiptCodec } from '../chunk-FIVRGOA4.js';
5
6
  import { Buffer } from 'buffer';
6
7
  import crypto2 from 'crypto';
7
8
  import { createMlKem768 } from 'mlkem';
@@ -266,24 +267,52 @@ async function processLogicExecution(data) {
266
267
  circuit,
267
268
  inputsJson
268
269
  );
269
- } catch {
270
+ } catch (err) {
271
+ if (data.proofMode === 2 /* PROOF_MODE_ZK_BLOCKING */) {
272
+ throw new Error(
273
+ `ZK PROOF GENERATION FAILED: Native Groth16 prover execution error: ${err instanceof Error ? err.message : String(err)}`
274
+ );
275
+ }
270
276
  proofBuf = Buffer.alloc(128, 66);
271
277
  }
272
278
  } else {
279
+ if (data.proofMode === 2 /* PROOF_MODE_ZK_BLOCKING */) {
280
+ throw new Error(
281
+ "ZK PROOF GENERATION FAILED: Native Groth16 prover module unavailable for required policy."
282
+ );
283
+ }
273
284
  proofBuf = Buffer.alloc(128, 66);
274
285
  }
275
- const receiptBuf2 = receiptCodec.encodeV2(
276
- 2 /* GROTH16 */,
277
- journalV2Buf,
278
- proofBuf
279
- );
286
+ let receiptBuf2;
287
+ let effectiveProofType = 2 /* GROTH16 */;
288
+ if (data.pqcSigningKey && data.pqcSigningKey.length > 0) {
289
+ effectiveProofType = 3 /* GROTH16_PQC_HYBRID */;
290
+ const messageToSign = crypto2.createHash("sha256").update(Buffer.concat([journalV2Buf, proofBuf])).digest();
291
+ const signature = Dilithium65Wrapper.sign(
292
+ messageToSign,
293
+ data.pqcSigningKey
294
+ );
295
+ const publicKey = Dilithium65Wrapper.getPublicKey(data.pqcSigningKey);
296
+ receiptBuf2 = receiptCodec.encodeHybridV2(
297
+ journalV2Buf,
298
+ proofBuf,
299
+ Buffer.from(signature),
300
+ Buffer.from(publicKey)
301
+ );
302
+ } else {
303
+ receiptBuf2 = receiptCodec.encodeV2(
304
+ 2 /* GROTH16 */,
305
+ journalV2Buf,
306
+ proofBuf
307
+ );
308
+ }
280
309
  const zkReceipt2 = receiptBuf2.toString("base64");
281
310
  return {
282
311
  image_id: imageId,
283
312
  zk_receipt: zkReceipt2,
284
313
  output: finalOutput,
285
314
  fuel_consumed: result.fuelConsumed,
286
- proof_type: 2 /* GROTH16 */,
315
+ proof_type: effectiveProofType,
287
316
  guest_image_id: guestImageIdBuf.toString("hex")
288
317
  };
289
318
  }
@@ -1,4 +1,4 @@
1
- import { Z as ZkPolicy } from '../zk-CYImPsa6.js';
1
+ import { Z as ZkPolicy } from '../zk-DzYNWBgo.js';
2
2
 
3
3
  /**
4
4
  * ZK Verification Payload Structure.
@@ -1,6 +1,7 @@
1
- import { deserializeVKey, deserializeGrothProof, verifyGroth16Proof } from '../chunk-OHMZZMMC.js';
1
+ import { deserializeVKey, deserializeGrothProof, verifyGroth16Proof } from '../chunk-ET6VRUK2.js';
2
2
  import { deriveLogicImageDigest } from '../chunk-IK7CGWAZ.js';
3
- import { receiptCodec, RECEIPT_VERSION_V1, RECEIPT_VERSION_V2, decodeJournalV2 } from '../chunk-P34HDRN5.js';
3
+ import { Dilithium65Wrapper } from '../chunk-3664H3CV.js';
4
+ import { receiptCodec, RECEIPT_VERSION_V1, RECEIPT_VERSION_V2, decodeJournalV2 } from '../chunk-FIVRGOA4.js';
4
5
  import crypto from 'crypto';
5
6
  import 'worker_threads';
6
7
 
@@ -149,12 +150,40 @@ async function verifyZkReceipt(payload) {
149
150
  };
150
151
  }
151
152
  if (decodedReceipt.version === RECEIPT_VERSION_V2) {
152
- if (decodedReceipt.proofType !== 2 /* GROTH16 */) {
153
+ if (decodedReceipt.proofType !== 2 /* GROTH16 */ && decodedReceipt.proofType !== 3 /* GROTH16_PQC_HYBRID */) {
153
154
  return {
154
155
  verified: false,
155
156
  message: `Unsupported ZK proof type in v2 receipt: ${decodedReceipt.proofType}`
156
157
  };
157
158
  }
159
+ if (decodedReceipt.proofType === 3 /* GROTH16_PQC_HYBRID */) {
160
+ const { pqcSignature, pqcPublicKey } = decodedReceipt;
161
+ if (!pqcSignature || !pqcPublicKey) {
162
+ return {
163
+ verified: false,
164
+ message: "Hybrid Receipt Error: Missing ML-DSA-65 signature or public key."
165
+ };
166
+ }
167
+ const messageDigest = crypto.createHash("sha256").update(Buffer.concat([decodedReceipt.journal, decodedReceipt.proof])).digest();
168
+ try {
169
+ const isPqcValid = Dilithium65Wrapper.verify(
170
+ new Uint8Array(pqcSignature),
171
+ messageDigest,
172
+ new Uint8Array(pqcPublicKey)
173
+ );
174
+ if (!isPqcValid) {
175
+ return {
176
+ verified: false,
177
+ message: "PQC Signature Verification Failed: ML-DSA-65 co-sign is forged or corrupted."
178
+ };
179
+ }
180
+ } catch (err) {
181
+ return {
182
+ verified: false,
183
+ message: `PQC Verification Error: ${err.message}`
184
+ };
185
+ }
186
+ }
158
187
  let journalV2;
159
188
  try {
160
189
  journalV2 = decodeJournalV2(decodedReceipt.journal);
@@ -210,10 +239,11 @@ async function verifyZkReceipt(payload) {
210
239
  };
211
240
  }
212
241
  }
242
+ const isHybrid = decodedReceipt.proofType === 3 /* GROTH16_PQC_HYBRID */;
213
243
  return {
214
244
  verified: true,
215
- message: "Groth16 Zero-Knowledge Proof Mathematically Certified.",
216
- proofType: "groth16"
245
+ message: isHybrid ? "Groth16 + ML-DSA-65 Post-Quantum Hybrid Receipt Certified." : vkeyRaw && vkeyRaw.length > 0 ? "Groth16 Zero-Knowledge Proof Mathematically Certified." : "Groth16 Receipt Structure and Journal Integrity Certified.",
246
+ proofType: isHybrid ? "groth16_pqc_hybrid" : "groth16"
217
247
  };
218
248
  }
219
249
  return {
@@ -1,6 +1,7 @@
1
1
  declare enum ProofType {
2
2
  HMAC_LEGACY = 0,
3
- GROTH16 = 2
3
+ GROTH16 = 2,
4
+ GROTH16_PQC_HYBRID = 3
4
5
  }
5
6
  declare const RECEIPT_VERSION_V1 = 1;
6
7
  declare const RECEIPT_VERSION_V2 = 2;
@@ -49,6 +50,8 @@ interface DecodedReceipt {
49
50
  journal: Buffer;
50
51
  proof: Buffer;
51
52
  raw: Buffer;
53
+ pqcSignature?: Buffer;
54
+ pqcPublicKey?: Buffer;
52
55
  }
53
56
  declare const receiptCodec: {
54
57
  /**
@@ -56,6 +59,16 @@ declare const receiptCodec: {
56
59
  * Layout: [0x02][proofType: 1B][journalLen: 4B UInt32BE][journal][proof][checksum: 32B]
57
60
  */
58
61
  encodeV2(proofType: ProofType, journal: Buffer, proof: Buffer): Buffer;
62
+ /**
63
+ * Encodes a version 2.1 Hybrid Binary Receipt (Groth16 + ML-DSA-65 co-sign).
64
+ * Layout:
65
+ * [0x02][0x03 ProofType.GROTH16_PQC_HYBRID][journalLen: 4B UInt32BE][journal: 144B]
66
+ * [proofLen: 2B UInt16BE][groth16 proof: ~260B]
67
+ * [sigLen: 2B UInt16BE][signature: 3309B]
68
+ * [publicKey: 1952B]
69
+ * [checksum: 32B SHA-256]
70
+ */
71
+ encodeHybridV2(journal: Buffer, proof: Buffer, pqcSignature: Buffer, pqcPublicKey: Buffer): Buffer;
59
72
  /**
60
73
  * Decodes any LIOP Binary Receipt (v1 HMAC or v2 ZK).
61
74
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nekzus/liop",
3
- "version": "2.4.0-alpha.23",
3
+ "version": "2.4.0-alpha.25",
4
4
  "description": "Official SDK for Logic-Injection-on-Origin Protocol (LIOP). Deploy Logic-on-Origin with WebAssembly at gRPC speed and bidirectional MCP compatibility.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -32,6 +32,7 @@
32
32
  "sideEffects": false,
33
33
  "files": [
34
34
  "dist",
35
+ "!dist/**/*.js.map",
35
36
  "README.md",
36
37
  "LICENSE",
37
38
  "NOTICE"
@@ -92,7 +93,6 @@
92
93
  "@types/node": "26.4.0",
93
94
  "@types/oidc-provider": "9.12.1",
94
95
  "@vitest/coverage-v8": "4.1.11",
95
- "gpt-tokenizer": "4.0.0",
96
96
  "tsup": "8.5.1",
97
97
  "tsx": "4.23.13",
98
98
  "typescript": "6.0.3",
@@ -121,6 +121,7 @@
121
121
  "@noble/post-quantum": "0.7.1",
122
122
  "acorn": "8.18.0",
123
123
  "acorn-walk": "8.3.5",
124
+ "gpt-tokenizer": "4.0.0",
124
125
  "hono": "4.13.8",
125
126
  "it-pipe": "3.0.1",
126
127
  "jose": "6.2.12",
@@ -226,6 +227,9 @@
226
227
  "audit:prod:run": "tsx tests/infra/production-audit/cli/audit-run.ts",
227
228
  "audit:prod:runner": "docker compose -f tests/infra/production-audit/docker-compose.production-audit.yml run --rm audit-runner",
228
229
  "audit:prod:clean": "tsx tests/infra/production-audit/cli/audit-clean.ts",
230
+ "audit:local:start": "tsx tests/infra/production-audit/cli/audit-start-local.ts",
231
+ "audit:local:run": "tsx tests/infra/production-audit/cli/audit-run.ts --local",
232
+ "audit:local:runner": "docker compose -f tests/infra/production-audit/docker-compose.production-audit.yml -f tests/infra/production-audit/docker-compose.local.yml run --rm audit-runner",
229
233
  "telemetry:stream": "tsx scripts/telemetry-stream.ts"
230
234
  }
231
235
  }
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/bin/agent.ts"],"names":["token"],"mappings":"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","file":"agent.js","sourcesContent":["#!/usr/bin/env node\n\n// Copyright 2026 Nekzus Solutions and contributors\n// SPDX-License-Identifier: Apache-2.0\n\nimport * as fs from \"node:fs\";\nimport * as os from \"node:os\";\nimport * as path from \"node:path\";\nimport * as readline from \"node:readline\";\nimport { multiaddr } from \"@multiformats/multiaddr\";\nimport { isLegacyRequest } from \"../gateway/mcp-compat.js\";\nimport { LiopMcpRouter } from \"../gateway/router.js\";\nimport { MeshNode } from \"../mesh/index.js\";\nimport { RoutingTable, type ToolDefinition } from \"../runtime/routing-table.js\";\nimport { TokenManager } from \"../runtime/token-manager.js\";\nimport {\n\ttype GatewayTopologyInfo,\n\ttype MeshTopologyInfo,\n\tprobeTopology,\n\ttype TopologyProbeResult,\n} from \"../runtime/topology-probe.js\";\nimport { LiopServer } from \"../server/index.js\";\nimport type { McpRequest, McpResponse } from \"../types.js\";\nimport { log } from \"../utils/logger.js\";\n\n/**\n * Mandatory Diagnostic Tool definition.\n * Claude Desktop silently hides the connector if it receives an empty array initially.\n */\nconst LIOP_MESH_STATUS_TOOL: ToolDefinition = {\n\tname: \"LiopMeshStatus\",\n\tdescription:\n\t\t\"LiopMeshStatus: Returns the current dynamic diagnostic status of the Zero-Trust Neural Mesh.\",\n\tinputSchema: {\n\t\ttype: \"object\",\n\t\tproperties: {},\n\t\tadditionalProperties: false,\n\t},\n};\n\n/**\n * Resolves a full libp2p multiaddr (with PeerID) from a LIOP node's\n * HTTP health endpoint.\n */\nasync function resolveBootstrapFromUrl(url: string): Promise<string | null> {\n\ttry {\n\t\tconst healthUrl = url.endsWith(\"/health\") ? url : `${url}/health`;\n\t\tconst response = await fetch(healthUrl, {\n\t\t\theaders: { Accept: \"application/json\" },\n\t\t\tsignal: AbortSignal.timeout(10000),\n\t\t});\n\t\tif (!response.ok) return null;\n\n\t\tconst data = (await response.json()) as {\n\t\t\tmesh?: { multiaddrs?: string[]; peerId?: string };\n\t\t};\n\t\tif (!data.mesh?.multiaddrs?.length || !data.mesh?.peerId) return null;\n\n\t\tconst tcpAddr = data.mesh.multiaddrs.find(\n\t\t\t(a: string) =>\n\t\t\t\ta.includes(\"/tcp/\") &&\n\t\t\t\t!a.includes(\"/ws\") &&\n\t\t\t\t!a.includes(\"/ip4/127.0.0.1/\"),\n\t\t);\n\t\tif (!tcpAddr) return null;\n\n\t\tlet resolved = shouldEnableDockerMap()\n\t\t\t? industrialAddressMapper(tcpAddr)\n\t\t\t: tcpAddr;\n\t\tif (!resolved || resolved === tcpAddr) {\n\t\t\tconst urlHost = new URL(url).hostname;\n\t\t\tresolved = tcpAddr.replace(/\\/ip4\\/[^/]+/, `/ip4/${urlHost}`);\n\t\t}\n\n\t\tif (!resolved) return null;\n\t\tresolved += resolved.includes(\"/p2p/\") ? \"\" : `/p2p/${data.mesh.peerId}`;\n\t\treturn resolved;\n\t} catch {\n\t\treturn null;\n\t}\n}\n\n/**\n * Normalizes a bootstrap multiaddr string to 127.0.0.1 for local Docker bridge resilience.\n */\nfunction normalizeBootstrap(addr: string): string {\n\tconst trimmed = addr.trim();\n\tconst dockerIpRegex =\n\t\t/\\/ip4\\/172\\.(1[6-9]|2[0-9]|3[0-1])\\.[0-9]{1,3}\\.[0-9]{1,3}/;\n\tconst loopbackRegex = /\\/ip4\\/127\\.0\\.0\\.1/;\n\tconst physicalIpRegex = /\\/ip4\\/192\\.168\\.[0-9]{1,3}\\.[0-9]{1,3}/;\n\n\tif (\n\t\tdockerIpRegex.test(trimmed) ||\n\t\tloopbackRegex.test(trimmed) ||\n\t\tphysicalIpRegex.test(trimmed)\n\t) {\n\t\tconst targetIp = \"127.0.0.1\";\n\t\tconst normalized = trimmed\n\t\t\t.replace(dockerIpRegex, `/ip4/${targetIp}`)\n\t\t\t.replace(loopbackRegex, `/ip4/${targetIp}`)\n\t\t\t.replace(physicalIpRegex, `/ip4/${targetIp}`);\n\n\t\tif (normalized !== trimmed) {\n\t\t\tlog.info(\n\t\t\t\t`[LIOP-Agent] 🔄 Local Routing Hack → Forced 127.0.0.1: ${normalized}`,\n\t\t\t);\n\t\t}\n\t\treturn normalized;\n\t}\n\n\treturn trimmed;\n}\n\n/**\n * Maps Docker-internal IPs to host-published ports for local environments.\n * Supports both legacy demo ports (13001-13005) and production tier ports (15001-15041).\n */\nfunction industrialAddressMapper(addr: string): string | null {\n\t// Production Multi-Tier Mappings\n\tif (addr.includes(\"/ip4/172.23.0.10\"))\n\t\treturn addr.replace(\n\t\t\t/\\/ip4\\/172\\.23\\.0\\.10\\/tcp\\/[0-9]+/,\n\t\t\t\"/ip4/127.0.0.1/tcp/15001\",\n\t\t);\n\tif (addr.includes(\"/ip4/172.23.0.20\"))\n\t\treturn addr.replace(\n\t\t\t/\\/ip4\\/172\\.23\\.0\\.20\\/tcp\\/[0-9]+/,\n\t\t\t\"/ip4/127.0.0.1/tcp/15011\",\n\t\t);\n\tif (addr.includes(\"/ip4/172.21.0.13\"))\n\t\treturn addr.replace(\n\t\t\t/\\/ip4\\/172\\.21\\.0\\.13\\/tcp\\/[0-9]+/,\n\t\t\t\"/ip4/127.0.0.1/tcp/15031\",\n\t\t);\n\tif (addr.includes(\"/ip4/172.21.0.14\"))\n\t\treturn addr.replace(\n\t\t\t/\\/ip4\\/172\\.21\\.0\\.14\\/tcp\\/[0-9]+/,\n\t\t\t\"/ip4/127.0.0.1/tcp/15041\",\n\t\t);\n\n\t// Legacy Demo Cluster Mappings\n\tif (addr.includes(\"/ip4/172.20.0.10\"))\n\t\treturn addr.replace(\n\t\t\t/\\/ip4\\/172\\.20\\.0\\.10\\/tcp\\/[0-9]+/,\n\t\t\t\"/ip4/127.0.0.1/tcp/13001\",\n\t\t);\n\tif (addr.includes(\"/ip4/172.20.0.11\"))\n\t\treturn addr.replace(\n\t\t\t/\\/ip4\\/172\\.20\\.0\\.11\\/tcp\\/[0-9]+/,\n\t\t\t\"/ip4/127.0.0.1/tcp/13003\",\n\t\t);\n\tif (addr.includes(\"/ip4/172.20.0.12\"))\n\t\treturn addr.replace(\n\t\t\t/\\/ip4\\/172\\.20\\.0\\.12\\/tcp\\/[0-9]+/,\n\t\t\t\"/ip4/127.0.0.1/tcp/13004\",\n\t\t);\n\tif (addr.includes(\"/ip4/172.20.0.13\"))\n\t\treturn addr.replace(\n\t\t\t/\\/ip4\\/172\\.20\\.0\\.13\\/tcp\\/[0-9]+/,\n\t\t\t\"/ip4/127.0.0.1/tcp/13005\",\n\t\t);\n\n\t// Drop container-internal loopbacks\n\tif (\n\t\taddr.includes(\"/ip4/127.0.0.1/tcp/4000\") ||\n\t\taddr.includes(\"/ip4/127.0.0.1/tcp/3000\")\n\t) {\n\t\treturn null;\n\t}\n\n\treturn addr;\n}\n\nfunction isDockerDemoHost(urlStr: string): boolean {\n\ttry {\n\t\tconst u = new URL(urlStr);\n\t\treturn (\n\t\t\t(u.hostname === \"127.0.0.1\" || u.hostname === \"localhost\") &&\n\t\t\t(u.port === \"13000\" ||\n\t\t\t\tu.port === \"13001\" ||\n\t\t\t\tu.port === \"15000\" ||\n\t\t\t\tu.port === \"15018\")\n\t\t);\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nfunction shouldEnableDockerMap(): boolean {\n\treturn (\n\t\tprocess.env.NODE_ENV === \"development\" ||\n\t\tprocess.env.NODE_ENV === \"test\" ||\n\t\tprocess.env.LIOP_DOCKER_MAP === \"true\" ||\n\t\tprocess.env.LIOP_DEV_MODE === \"true\" ||\n\t\t(!!process.env.LIOP_NEXUS_URL &&\n\t\t\tisDockerDemoHost(process.env.LIOP_NEXUS_URL))\n\t);\n}\n\n/**\n * Discovers P2P bootstrap nodes through physical beacons, env vars, and URL discovery.\n */\nasync function resolveBootstrapNodes(liopDir: string): Promise<string[]> {\n\tlet bootstrapNodes: string[] = [];\n\tconst args = process.argv.slice(2);\n\tif (args.length > 0) {\n\t\tbootstrapNodes = args.filter((a) => a.startsWith(\"/\"));\n\t}\n\n\tif (bootstrapNodes.length === 0) {\n\t\tconst searchDirs = [\n\t\t\tprocess.cwd(),\n\t\t\tpath.join(process.cwd(), \"tests/infra/nexus-data\"),\n\t\t\tliopDir,\n\t\t\tpath.join(\n\t\t\t\tpath\n\t\t\t\t\t.dirname(new URL(import.meta.url).pathname)\n\t\t\t\t\t.replace(/^\\/([A-Z]:)/, \"$1\"),\n\t\t\t\t\"../../tests/infra/nexus-data\",\n\t\t\t),\n\t\t];\n\n\t\tfor (const dir of searchDirs) {\n\t\t\ttry {\n\t\t\t\tif (fs.existsSync(dir)) {\n\t\t\t\t\tconst files = fs.readdirSync(dir);\n\t\t\t\t\tconst multiaddrFiles = files.filter((f) => f.endsWith(\".multiaddr\"));\n\n\t\t\t\t\tfor (const file of multiaddrFiles) {\n\t\t\t\t\t\tconst filePath = path.join(dir, file);\n\t\t\t\t\t\tconst addr = fs.readFileSync(filePath, \"utf8\").trim();\n\t\t\t\t\t\tif (addr) {\n\t\t\t\t\t\t\tconst normalized = normalizeBootstrap(addr);\n\t\t\t\t\t\t\tif (!bootstrapNodes.includes(normalized)) {\n\t\t\t\t\t\t\t\tbootstrapNodes.push(normalized);\n\t\t\t\t\t\t\t\tlog.info(`[LIOP-Agent] ✅ Loaded beacon: ${file} from ${dir}`);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (bootstrapNodes.length > 0) break;\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\t/* ignore */\n\t\t\t}\n\t\t}\n\t}\n\n\tif (process.env.LIOP_NEXUS_URL) {\n\t\tconst nexusUrl = process.env.LIOP_NEXUS_URL;\n\t\tconst resolved = await resolveBootstrapFromUrl(nexusUrl);\n\t\tif (resolved) {\n\t\t\tconst normalized = normalizeBootstrap(resolved);\n\t\t\tif (!bootstrapNodes.includes(normalized)) {\n\t\t\t\tbootstrapNodes.push(normalized);\n\t\t\t\tlog.info(\n\t\t\t\t\t`[LIOP-Agent] ✅ Added bootstrap from URL discovery: ${normalized}`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (bootstrapNodes.length === 0 && process.env.LIOP_BOOTSTRAP) {\n\t\tbootstrapNodes.push(process.env.LIOP_BOOTSTRAP.trim());\n\t}\n\n\treturn bootstrapNodes.filter((addr) => {\n\t\ttry {\n\t\t\tmultiaddr(addr);\n\t\t\treturn true;\n\t\t} catch {\n\t\t\treturn false;\n\t\t}\n\t});\n}\n\n/**\n * Dispatches an MCP request to an HTTP Gateway (BLG) with automatic token negotiation.\n */\nasync function forwardToGateway(\n\tmcpEndpoint: string,\n\trequest: McpRequest,\n\ttokenManager: TokenManager,\n): Promise<McpResponse> {\n\tconst send = async (token?: string) => {\n\t\tconst headers: Record<string, string> = {\n\t\t\t\"Content-Type\": \"application/json\",\n\t\t};\n\t\tif (token) {\n\t\t\theaders.Authorization = `Bearer ${token}`;\n\t\t}\n\t\tif (request.method) {\n\t\t\theaders[\"Mcp-Method\"] = request.method;\n\t\t}\n\t\tconst params = request.params as { name?: string } | undefined;\n\t\tif (params?.name) {\n\t\t\theaders[\"Mcp-Name\"] = params.name;\n\t\t}\n\n\t\treturn await fetch(mcpEndpoint, {\n\t\t\tmethod: \"POST\",\n\t\t\theaders,\n\t\t\tbody: JSON.stringify(request),\n\t\t\tsignal: AbortSignal.timeout(30000),\n\t\t});\n\t};\n\n\tlet token: string | undefined;\n\ttry {\n\t\ttoken = await tokenManager.getToken();\n\t} catch (err) {\n\t\tlog.warn(\n\t\t\t`[LIOP-Agent] Token acquisition warning: ${err instanceof Error ? err.message : String(err)}`,\n\t\t);\n\t}\n\n\tlet response = await send(token);\n\n\t// If 401 Unauthorized, invalidate token and retry once\n\tif (response.status === 401 && token) {\n\t\tlog.info(\n\t\t\t\"[LIOP-Agent] 🔄 401 received from Gateway. Refreshing token and retrying...\",\n\t\t);\n\t\ttokenManager.invalidate();\n\t\ttry {\n\t\t\ttoken = await tokenManager.getToken();\n\t\t\tresponse = await send(token);\n\t\t} catch {\n\t\t\t/* fallback to original error handling */\n\t\t}\n\t}\n\n\tif (!response.ok) {\n\t\tconst errorBody = await response.text();\n\t\tlet parsedError: Record<string, unknown> | null = null;\n\t\ttry {\n\t\t\tparsedError = JSON.parse(errorBody);\n\t\t} catch {\n\t\t\t// not json\n\t\t}\n\n\t\tconst errorObj = parsedError?.error as\n\t\t\t| { code?: number; message?: string }\n\t\t\t| undefined;\n\t\treturn {\n\t\t\tjsonrpc: \"2.0\",\n\t\t\tid: request.id,\n\t\t\terror: {\n\t\t\t\tcode: errorObj?.code ?? -32603,\n\t\t\t\tmessage:\n\t\t\t\t\terrorObj?.message ??\n\t\t\t\t\t`Gateway returned HTTP ${response.status}: ${errorBody}`,\n\t\t\t},\n\t\t};\n\t}\n\n\treturn (await response.json()) as McpResponse;\n}\n\n/**\n * Operates in Mode 1: GATEWAY MODE.\n * Ultra-lightweight, sub-50ms startup, zero libp2p overhead.\n */\nasync function runGatewayMode(\n\tgateway: GatewayTopologyInfo,\n\ttokenManager: TokenManager,\n\troutingTable: RoutingTable,\n) {\n\tlog.info(\n\t\t`[LIOP-Agent] 🛡️ Running in ADAPTIVE GATEWAY MODE -> ${gateway.mcpEndpoint}`,\n\t);\n\n\t// Register known initial tools\n\troutingTable.registerLocalTool(LIOP_MESH_STATUS_TOOL);\n\troutingTable.registerGatewayTools(\n\t\tgateway.tools.map((t) => ({ name: t })),\n\t\tgateway.mcpEndpoint,\n\t);\n\n\t// Periodic tool refresh from /health to notify Claude of any changes\n\tlet lastToolCount = gateway.tools.length;\n\tconst pollInterval = setInterval(async () => {\n\t\ttry {\n\t\t\tconst res = await fetch(gateway.healthEndpoint, {\n\t\t\t\theaders: { Accept: \"application/json\" },\n\t\t\t\tsignal: AbortSignal.timeout(4000),\n\t\t\t});\n\t\t\tif (res.ok) {\n\t\t\t\tconst data = (await res.json()) as { tools?: string[] };\n\t\t\t\tif (data.tools && data.tools.length !== lastToolCount) {\n\t\t\t\t\tlog.info(\n\t\t\t\t\t\t`[LIOP-Agent] Gateway tools topology updated (${lastToolCount} -> ${data.tools.length})`,\n\t\t\t\t\t);\n\t\t\t\t\tlastToolCount = data.tools.length;\n\t\t\t\t\troutingTable.registerGatewayTools(\n\t\t\t\t\t\tdata.tools.map((t) => ({ name: t })),\n\t\t\t\t\t\tgateway.mcpEndpoint,\n\t\t\t\t\t);\n\t\t\t\t\tprocess.stdout.write(\n\t\t\t\t\t\t`{\"jsonrpc\":\"2.0\",\"method\":\"notifications/tools/list_changed\"}\\n`,\n\t\t\t\t\t);\n\t\t\t\t\tprocess.stdout.write(\n\t\t\t\t\t\t`{\"jsonrpc\":\"2.0\",\"method\":\"notifications/resources/list_changed\"}\\n`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} catch {\n\t\t\t// ignore polling errors\n\t\t}\n\t}, 15000);\n\n\tconst rl = readline.createInterface({\n\t\tinput: process.stdin,\n\t\tterminal: false,\n\t});\n\n\tprocess.stdout.on(\"error\", (err: Error & { code?: string }) => {\n\t\tif (err.code === \"EPIPE\") {\n\t\t\tclearInterval(pollInterval);\n\t\t\tprocess.exit(0);\n\t\t}\n\t});\n\n\trl.on(\"line\", async (line) => {\n\t\tconst trimmed = line.trim();\n\t\tif (!trimmed) return;\n\n\t\tlet request: McpRequest;\n\t\ttry {\n\t\t\trequest = JSON.parse(trimmed);\n\t\t} catch {\n\t\t\treturn;\n\t\t}\n\n\t\tconst { id, method } = request;\n\n\t\tif (method === \"server/discover\") {\n\t\t\tconst discoverResponse: McpResponse = {\n\t\t\t\tjsonrpc: \"2.0\",\n\t\t\t\tid,\n\t\t\t\tresult: {\n\t\t\t\t\tresultType: \"complete\",\n\t\t\t\t\tsupportedVersions: [\"2026-07-28\", \"2025-11-25\"],\n\t\t\t\t\tcapabilities: {\n\t\t\t\t\t\ttools: { listChanged: true },\n\t\t\t\t\t\tresources: { listChanged: true, subscribe: true },\n\t\t\t\t\t\tprompts: { listChanged: true },\n\t\t\t\t\t},\n\t\t\t\t\tserverInfo: {\n\t\t\t\t\t\tname: \"liop-adaptive-agent\",\n\t\t\t\t\t\tversion: \"2.5.0\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t};\n\t\t\tprocess.stdout.write(`${JSON.stringify(discoverResponse)}\\n`);\n\t\t\treturn;\n\t\t}\n\n\t\tif (method === \"initialize\") {\n\t\t\tconst clientVersion =\n\t\t\t\t(\n\t\t\t\t\trequest.params as {\n\t\t\t\t\t\tprotocolVersion?: string;\n\t\t\t\t\t\t_meta?: { \"io.modelcontextprotocol/protocolVersion\"?: string };\n\t\t\t\t\t}\n\t\t\t\t)?.protocolVersion ??\n\t\t\t\t(\n\t\t\t\t\trequest.params as {\n\t\t\t\t\t\t_meta?: { \"io.modelcontextprotocol/protocolVersion\"?: string };\n\t\t\t\t\t}\n\t\t\t\t)?._meta?.[\"io.modelcontextprotocol/protocolVersion\"];\n\t\t\tconst protocolVersion =\n\t\t\t\tclientVersion === \"2026-07-28\" ? \"2026-07-28\" : \"2025-11-25\";\n\n\t\t\tconst initResponse: McpResponse = {\n\t\t\t\tjsonrpc: \"2.0\",\n\t\t\t\tid,\n\t\t\t\tresult: {\n\t\t\t\t\tprotocolVersion,\n\t\t\t\t\tcapabilities: {\n\t\t\t\t\t\ttools: { listChanged: true },\n\t\t\t\t\t\tresources: { listChanged: true, subscribe: true },\n\t\t\t\t\t\tprompts: { listChanged: true },\n\t\t\t\t\t},\n\t\t\t\t\tserverInfo: {\n\t\t\t\t\t\tname: \"liop-adaptive-agent\",\n\t\t\t\t\t\tversion: \"2.5.0\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t};\n\t\t\tprocess.stdout.write(`${JSON.stringify(initResponse)}\\n`);\n\t\t\treturn;\n\t\t}\n\n\t\tif (\n\t\t\tmethod === \"notifications/initialized\" ||\n\t\t\tmethod === \"notifications/cancelled\"\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (method === \"ping\") {\n\t\t\tprocess.stdout.write(\n\t\t\t\t`${JSON.stringify({ jsonrpc: \"2.0\", id, result: {} })}\\n`,\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tif (method === \"resources/templates/list\") {\n\t\t\tconst templatesResponse: McpResponse = {\n\t\t\t\tjsonrpc: \"2.0\",\n\t\t\t\tid,\n\t\t\t\tresult: {\n\t\t\t\t\tresultType: \"complete\",\n\t\t\t\t\tttlMs: 300_000,\n\t\t\t\t\tcacheScope: \"public\",\n\t\t\t\t\tresourceTemplates: [],\n\t\t\t\t},\n\t\t\t};\n\t\t\tprocess.stdout.write(`${JSON.stringify(templatesResponse)}\\n`);\n\t\t\treturn;\n\t\t}\n\n\t\tif (method === \"subscriptions/listen\") {\n\t\t\tconst listenResponse: McpResponse = {\n\t\t\t\tjsonrpc: \"2.0\",\n\t\t\t\tid,\n\t\t\t\tresult: {\n\t\t\t\t\tresultType: \"complete\",\n\t\t\t\t},\n\t\t\t};\n\t\t\tprocess.stdout.write(`${JSON.stringify(listenResponse)}\\n`);\n\t\t\treturn;\n\t\t}\n\n\t\tif (method === \"tools/call\") {\n\t\t\tconst params = request.params as\n\t\t\t\t| { name?: string; arguments?: Record<string, unknown> }\n\t\t\t\t| undefined;\n\t\t\tif (params?.name === \"LiopMeshStatus\") {\n\t\t\t\tconst statusResponse: McpResponse = {\n\t\t\t\t\tjsonrpc: \"2.0\",\n\t\t\t\t\tid,\n\t\t\t\t\tresult: {\n\t\t\t\t\t\tcontent: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\t\t\ttext: JSON.stringify({\n\t\t\t\t\t\t\t\t\tmode: \"adaptive-gateway\",\n\t\t\t\t\t\t\t\t\tgatewayUrl: gateway.baseUrl,\n\t\t\t\t\t\t\t\t\ttier: gateway.tier,\n\t\t\t\t\t\t\t\t\ttoolsAvailable: routingTable.getAllToolDefinitions().length,\n\t\t\t\t\t\t\t\t\tauthenticated: true,\n\t\t\t\t\t\t\t\t\tstatus: \"ONLINE\",\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t\tprocess.stdout.write(`${JSON.stringify(statusResponse)}\\n`);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\ttry {\n\t\t\tconst response = await forwardToGateway(\n\t\t\t\tgateway.mcpEndpoint,\n\t\t\t\trequest,\n\t\t\t\ttokenManager,\n\t\t\t);\n\n\t\t\t// Inject LiopMeshStatus into tools/list if gateway does not list it\n\t\t\tif (\n\t\t\t\tmethod === \"tools/list\" &&\n\t\t\t\tresponse.result &&\n\t\t\t\ttypeof response.result === \"object\"\n\t\t\t) {\n\t\t\t\tconst resObj = response.result as Record<string, unknown>;\n\t\t\t\tconst toolsList = resObj.tools as ToolDefinition[] | undefined;\n\t\t\t\tif (Array.isArray(toolsList)) {\n\t\t\t\t\tconst hasStatus = toolsList.some((t) => t.name === \"LiopMeshStatus\");\n\t\t\t\t\tif (!hasStatus) {\n\t\t\t\t\t\ttoolsList.unshift(LIOP_MESH_STATUS_TOOL);\n\t\t\t\t\t}\n\t\t\t\t\t// Update routing table with descriptions and schemas\n\t\t\t\t\troutingTable.registerGatewayTools(toolsList, gateway.mcpEndpoint);\n\t\t\t\t}\n\n\t\t\t\tif (!isLegacyRequest(request)) {\n\t\t\t\t\tif (!resObj.resultType) {\n\t\t\t\t\t\tresObj.resultType = \"complete\";\n\t\t\t\t\t}\n\t\t\t\t\tif (!resObj.ttlMs) {\n\t\t\t\t\t\tresObj.ttlMs = 300_000;\n\t\t\t\t\t}\n\t\t\t\t\tif (!resObj.cacheScope) {\n\t\t\t\t\t\tresObj.cacheScope = \"public\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tprocess.stdout.write(`${JSON.stringify(response)}\\n`);\n\t\t} catch (err) {\n\t\t\t// Fallback resilience for tools/list\n\t\t\tif (method === \"tools/list\") {\n\t\t\t\tconst isLegacy = isLegacyRequest(request);\n\t\t\t\tconst fallbackResult = isLegacy\n\t\t\t\t\t? { tools: routingTable.getAllToolDefinitions() }\n\t\t\t\t\t: {\n\t\t\t\t\t\t\tresultType: \"complete\",\n\t\t\t\t\t\t\tttlMs: 300_000,\n\t\t\t\t\t\t\tcacheScope: \"public\",\n\t\t\t\t\t\t\ttools: routingTable.getAllToolDefinitions(),\n\t\t\t\t\t\t};\n\t\t\t\tconst fallbackResponse: McpResponse = {\n\t\t\t\t\tjsonrpc: \"2.0\",\n\t\t\t\t\tid,\n\t\t\t\t\tresult: fallbackResult,\n\t\t\t\t};\n\t\t\t\tprocess.stdout.write(`${JSON.stringify(fallbackResponse)}\\n`);\n\t\t\t} else {\n\t\t\t\tconst errResponse: McpResponse = {\n\t\t\t\t\tjsonrpc: \"2.0\",\n\t\t\t\t\tid,\n\t\t\t\t\terror: {\n\t\t\t\t\t\tcode: -32603,\n\t\t\t\t\t\tmessage: `Forwarding failed: ${err instanceof Error ? err.message : String(err)}`,\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t\tprocess.stdout.write(`${JSON.stringify(errResponse)}\\n`);\n\t\t\t}\n\t\t}\n\t});\n\n\trl.on(\"close\", () => {\n\t\tclearInterval(pollInterval);\n\t\tprocess.exit(0);\n\t});\n}\n\n/**\n * Operates in Mode 2: MESH MODE.\n * Preserves full libp2p Kademlia DHT P2P discovery for decentralized environments.\n */\nasync function runMeshMode(mesh: MeshTopologyInfo) {\n\tlog.info(\n\t\t`[LIOP-Agent] 🌐 Running in P2P MESH MODE (${mesh.bootstrapNodes.length} bootstraps)`,\n\t);\n\n\tconst liopServer = new LiopServer({\n\t\tname: \"@nekzus/liop\",\n\t\tversion: \"2.5.0\",\n\t});\n\tliopServer.enableZeroShotAutonomy();\n\n\tconst meshNode = new MeshNode({\n\t\tidentityPath: mesh.identityPath,\n\t\tbootstrapNodes: mesh.bootstrapNodes,\n\t\taddressMapper: shouldEnableDockerMap()\n\t\t\t? industrialAddressMapper\n\t\t\t: undefined,\n\t});\n\n\tawait meshNode.start();\n\tconst router = new LiopMcpRouter(liopServer, meshNode);\n\n\trouter.onToolsChanged = () => {\n\t\tprocess.stdout.write(\n\t\t\t`{\"jsonrpc\":\"2.0\",\"method\":\"notifications/tools/list_changed\"}\\n`,\n\t\t);\n\t\tprocess.stdout.write(\n\t\t\t`{\"jsonrpc\":\"2.0\",\"method\":\"notifications/resources/list_changed\"}\\n`,\n\t\t);\n\t};\n\n\tsetTimeout(() => {\n\t\trouter.refreshManifestCache(true).catch(() => {});\n\t}, 2000);\n\n\tconst POLL_BASE_MS = 10_000;\n\tconst POLL_MAX_MS = 120_000;\n\tlet pollIntervalMs = POLL_BASE_MS;\n\n\tconst scheduleAdaptivePoll = () => {\n\t\tsetTimeout(async () => {\n\t\t\tconst prevSize = router.getCacheSize();\n\t\t\tawait router.refreshManifestCache(true).catch(() => {});\n\t\t\tconst newSize = router.getCacheSize();\n\n\t\t\tif (newSize !== prevSize) {\n\t\t\t\tpollIntervalMs = POLL_BASE_MS;\n\t\t\t} else {\n\t\t\t\tpollIntervalMs = Math.min(\n\t\t\t\t\tMath.round(pollIntervalMs * 1.5),\n\t\t\t\t\tPOLL_MAX_MS,\n\t\t\t\t);\n\t\t\t}\n\t\t\tscheduleAdaptivePoll();\n\t\t}, pollIntervalMs);\n\t};\n\tscheduleAdaptivePoll();\n\n\tconst rl = readline.createInterface({\n\t\tinput: process.stdin,\n\t\tterminal: false,\n\t});\n\n\tprocess.stdout.on(\"error\", (err: Error & { code?: string }) => {\n\t\tif (err.code === \"EPIPE\") process.exit(0);\n\t});\n\n\trl.on(\"line\", async (line) => {\n\t\tconst trimmed = line.trim();\n\t\tif (!trimmed) return;\n\n\t\ttry {\n\t\t\tconst request = JSON.parse(trimmed) as McpRequest;\n\t\t\tif (request.method) {\n\t\t\t\tconst response = await router.dispatch(request);\n\t\t\t\tif (response) {\n\t\t\t\t\tprocess.stdout.write(`${JSON.stringify(response)}\\n`);\n\t\t\t\t}\n\t\t\t}\n\t\t} catch {\n\t\t\t/* ignore malformed lines */\n\t\t}\n\t});\n\n\trl.on(\"close\", () => process.exit(0));\n\tprocess.on(\"SIGINT\", async () => {\n\t\tawait meshNode.stop();\n\t\tprocess.exit(0);\n\t});\n}\n\n/**\n * Operates in Mode 3: HYBRID MODE.\n * Serves tools via Gateway and Mesh concurrently with per-tool dynamic routing.\n */\nasync function runHybridMode(\n\ttopology: TopologyProbeResult,\n\ttokenManager: TokenManager,\n\troutingTable: RoutingTable,\n) {\n\tconst gateway = topology.gateway;\n\tconst mesh = topology.mesh;\n\tif (!gateway || !mesh) {\n\t\tif (gateway) return runGatewayMode(gateway, tokenManager, routingTable);\n\t\tif (mesh) return runMeshMode(mesh);\n\t\treturn;\n\t}\n\n\tlog.info(\n\t\t`[LIOP-Agent] ⚡ Running in HYBRID MODE (Gateway: ${gateway.baseUrl} + Mesh P2P)`,\n\t);\n\n\t// Setup Gateway tools immediately for fast startup\n\troutingTable.registerLocalTool(LIOP_MESH_STATUS_TOOL);\n\troutingTable.registerGatewayTools(\n\t\tgateway.tools.map((t) => ({ name: t })),\n\t\tgateway.mcpEndpoint,\n\t);\n\n\t// Start P2P Mesh in background (Lazy Initialization)\n\tlet meshNode: MeshNode | null = null;\n\tlet router: LiopMcpRouter | null = null;\n\n\tconst initMeshPromise = (async () => {\n\t\ttry {\n\t\t\tconst liopServer = new LiopServer({\n\t\t\t\tname: \"@nekzus/liop-hybrid\",\n\t\t\t\tversion: \"2.5.0\",\n\t\t\t});\n\t\t\tliopServer.enableZeroShotAutonomy();\n\n\t\t\tmeshNode = new MeshNode({\n\t\t\t\tidentityPath: mesh.identityPath,\n\t\t\t\tbootstrapNodes: mesh.bootstrapNodes,\n\t\t\t\taddressMapper: shouldEnableDockerMap()\n\t\t\t\t\t? industrialAddressMapper\n\t\t\t\t\t: undefined,\n\t\t\t});\n\t\t\tawait meshNode.start();\n\t\t\trouter = new LiopMcpRouter(liopServer, meshNode);\n\n\t\t\trouter.onToolsChanged = () => {\n\t\t\t\tprocess.stdout.write(\n\t\t\t\t\t`{\"jsonrpc\":\"2.0\",\"method\":\"notifications/tools/list_changed\"}\\n`,\n\t\t\t\t);\n\t\t\t\tprocess.stdout.write(\n\t\t\t\t\t`{\"jsonrpc\":\"2.0\",\"method\":\"notifications/resources/list_changed\"}\\n`,\n\t\t\t\t);\n\t\t\t};\n\n\t\t\tawait router.refreshManifestCache(true).catch(() => {});\n\t\t\tlog.info(\"[LIOP-Agent] ✅ Background P2P Mesh initialization completed.\");\n\t\t} catch (err) {\n\t\t\tlog.warn(\n\t\t\t\t`[LIOP-Agent] Background Mesh init warning: ${err instanceof Error ? err.message : String(err)}`,\n\t\t\t);\n\t\t}\n\t})();\n\n\tconst rl = readline.createInterface({\n\t\tinput: process.stdin,\n\t\tterminal: false,\n\t});\n\n\tprocess.stdout.on(\"error\", (err: Error & { code?: string }) => {\n\t\tif (err.code === \"EPIPE\") process.exit(0);\n\t});\n\n\trl.on(\"line\", async (line) => {\n\t\tconst trimmed = line.trim();\n\t\tif (!trimmed) return;\n\n\t\tlet request: McpRequest;\n\t\ttry {\n\t\t\trequest = JSON.parse(trimmed);\n\t\t} catch {\n\t\t\treturn;\n\t\t}\n\n\t\tconst { id, method } = request;\n\n\t\tif (method === \"server/discover\") {\n\t\t\tconst discoverResponse: McpResponse = {\n\t\t\t\tjsonrpc: \"2.0\",\n\t\t\t\tid,\n\t\t\t\tresult: {\n\t\t\t\t\tresultType: \"complete\",\n\t\t\t\t\tsupportedVersions: [\"2026-07-28\", \"2025-11-25\"],\n\t\t\t\t\tcapabilities: {\n\t\t\t\t\t\ttools: { listChanged: true },\n\t\t\t\t\t\tresources: { listChanged: true, subscribe: true },\n\t\t\t\t\t\tprompts: { listChanged: true },\n\t\t\t\t\t},\n\t\t\t\t\tserverInfo: {\n\t\t\t\t\t\tname: \"liop-hybrid-agent\",\n\t\t\t\t\t\tversion: \"2.5.0\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t};\n\t\t\tprocess.stdout.write(`${JSON.stringify(discoverResponse)}\\n`);\n\t\t\treturn;\n\t\t}\n\n\t\tif (method === \"initialize\") {\n\t\t\tconst clientVersion =\n\t\t\t\t(\n\t\t\t\t\trequest.params as {\n\t\t\t\t\t\tprotocolVersion?: string;\n\t\t\t\t\t\t_meta?: { \"io.modelcontextprotocol/protocolVersion\"?: string };\n\t\t\t\t\t}\n\t\t\t\t)?.protocolVersion ??\n\t\t\t\t(\n\t\t\t\t\trequest.params as {\n\t\t\t\t\t\t_meta?: { \"io.modelcontextprotocol/protocolVersion\"?: string };\n\t\t\t\t\t}\n\t\t\t\t)?._meta?.[\"io.modelcontextprotocol/protocolVersion\"];\n\t\t\tconst protocolVersion =\n\t\t\t\tclientVersion === \"2026-07-28\" ? \"2026-07-28\" : \"2025-11-25\";\n\n\t\t\tconst initResponse: McpResponse = {\n\t\t\t\tjsonrpc: \"2.0\",\n\t\t\t\tid,\n\t\t\t\tresult: {\n\t\t\t\t\tprotocolVersion,\n\t\t\t\t\tcapabilities: {\n\t\t\t\t\t\ttools: { listChanged: true },\n\t\t\t\t\t\tresources: { listChanged: true, subscribe: true },\n\t\t\t\t\t\tprompts: { listChanged: true },\n\t\t\t\t\t},\n\t\t\t\t\tserverInfo: {\n\t\t\t\t\t\tname: \"liop-hybrid-agent\",\n\t\t\t\t\t\tversion: \"2.5.0\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t};\n\t\t\tprocess.stdout.write(`${JSON.stringify(initResponse)}\\n`);\n\t\t\treturn;\n\t\t}\n\n\t\tif (\n\t\t\tmethod === \"notifications/initialized\" ||\n\t\t\tmethod === \"notifications/cancelled\"\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (method === \"ping\") {\n\t\t\tprocess.stdout.write(\n\t\t\t\t`${JSON.stringify({ jsonrpc: \"2.0\", id, result: {} })}\\n`,\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tif (method === \"resources/templates/list\") {\n\t\t\tconst templatesResponse: McpResponse = {\n\t\t\t\tjsonrpc: \"2.0\",\n\t\t\t\tid,\n\t\t\t\tresult: {\n\t\t\t\t\tresultType: \"complete\",\n\t\t\t\t\tttlMs: 300_000,\n\t\t\t\t\tcacheScope: \"public\",\n\t\t\t\t\tresourceTemplates: [],\n\t\t\t\t},\n\t\t\t};\n\t\t\tprocess.stdout.write(`${JSON.stringify(templatesResponse)}\\n`);\n\t\t\treturn;\n\t\t}\n\n\t\tif (method === \"subscriptions/listen\") {\n\t\t\tconst listenResponse: McpResponse = {\n\t\t\t\tjsonrpc: \"2.0\",\n\t\t\t\tid,\n\t\t\t\tresult: {\n\t\t\t\t\tresultType: \"complete\",\n\t\t\t\t},\n\t\t\t};\n\t\t\tprocess.stdout.write(`${JSON.stringify(listenResponse)}\\n`);\n\t\t\treturn;\n\t\t}\n\n\t\tif (method === \"tools/call\") {\n\t\t\tconst params = request.params as\n\t\t\t\t| { name?: string; arguments?: Record<string, unknown> }\n\t\t\t\t| undefined;\n\t\t\tconst toolName = params?.name || \"\";\n\n\t\t\tconst route = routingTable.resolve(toolName);\n\t\t\tif (route?.provider === \"http-gateway\") {\n\t\t\t\tconst start = Date.now();\n\t\t\t\ttry {\n\t\t\t\t\tconst res = await forwardToGateway(\n\t\t\t\t\t\tgateway.mcpEndpoint,\n\t\t\t\t\t\trequest,\n\t\t\t\t\t\ttokenManager,\n\t\t\t\t\t);\n\t\t\t\t\troutingTable.recordSuccess(toolName, Date.now() - start);\n\t\t\t\t\tprocess.stdout.write(`${JSON.stringify(res)}\\n`);\n\t\t\t\t\treturn;\n\t\t\t\t} catch (_err) {\n\t\t\t\t\troutingTable.recordFailure(toolName);\n\t\t\t\t\tlog.warn(\n\t\t\t\t\t\t`[LIOP-Agent] Gateway call failed for '${toolName}'. Checking P2P fallback...`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// P2P fallback or native P2P route\n\t\t\tawait initMeshPromise;\n\t\t\tif (router) {\n\t\t\t\tconst res = await router.dispatch(request);\n\t\t\t\tif (res) process.stdout.write(`${JSON.stringify(res)}\\n`);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\t// By default, query gateway for tools/list and combine with mesh\n\t\tif (method === \"tools/list\") {\n\t\t\tlet gatewayTools: ToolDefinition[] = [];\n\t\t\ttry {\n\t\t\t\tconst gwRes = await forwardToGateway(\n\t\t\t\t\tgateway.mcpEndpoint,\n\t\t\t\t\trequest,\n\t\t\t\t\ttokenManager,\n\t\t\t\t);\n\t\t\t\tconst resObj = gwRes.result as { tools?: ToolDefinition[] } | undefined;\n\t\t\t\tif (Array.isArray(resObj?.tools)) {\n\t\t\t\t\tgatewayTools = resObj.tools;\n\t\t\t\t\troutingTable.registerGatewayTools(gatewayTools, gateway.mcpEndpoint);\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\tgatewayTools = routingTable.getAllToolDefinitions();\n\t\t\t}\n\n\t\t\tlet meshTools: ToolDefinition[] = [];\n\t\t\tif (router) {\n\t\t\t\tconst meshRes = await router.dispatch(request);\n\t\t\t\tconst meshObj = meshRes?.result as\n\t\t\t\t\t| { tools?: ToolDefinition[] }\n\t\t\t\t\t| undefined;\n\t\t\t\tif (Array.isArray(meshObj?.tools)) {\n\t\t\t\t\tmeshTools = meshObj.tools;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Merge distinct tools\n\t\t\tconst toolMap = new Map<string, ToolDefinition>();\n\t\t\ttoolMap.set(\"LiopMeshStatus\", LIOP_MESH_STATUS_TOOL);\n\t\t\tfor (const t of gatewayTools) toolMap.set(t.name, t);\n\t\t\tfor (const t of meshTools)\n\t\t\t\tif (!toolMap.has(t.name)) toolMap.set(t.name, t);\n\n\t\t\tconst merged = Array.from(toolMap.values()).sort((a, b) =>\n\t\t\t\ta.name.localeCompare(b.name),\n\t\t\t);\n\n\t\t\tconst isLegacy = isLegacyRequest(request);\n\t\t\tconst toolsResult = isLegacy\n\t\t\t\t? { tools: merged }\n\t\t\t\t: {\n\t\t\t\t\t\tresultType: \"complete\",\n\t\t\t\t\t\tttlMs: 300_000,\n\t\t\t\t\t\tcacheScope: \"public\",\n\t\t\t\t\t\ttools: merged,\n\t\t\t\t\t};\n\n\t\t\tprocess.stdout.write(\n\t\t\t\t`${JSON.stringify({ jsonrpc: \"2.0\", id, result: toolsResult })}\\n`,\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\t// Other methods forward to gateway first, then mesh\n\t\ttry {\n\t\t\tconst res = await forwardToGateway(\n\t\t\t\tgateway.mcpEndpoint,\n\t\t\t\trequest,\n\t\t\t\ttokenManager,\n\t\t\t);\n\t\t\tif (\n\t\t\t\t!isLegacyRequest(request) &&\n\t\t\t\tres.result &&\n\t\t\t\ttypeof res.result === \"object\"\n\t\t\t) {\n\t\t\t\tconst resObj = res.result as Record<string, unknown>;\n\t\t\t\tif (!resObj.resultType) {\n\t\t\t\t\tresObj.resultType = \"complete\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tprocess.stdout.write(`${JSON.stringify(res)}\\n`);\n\t\t} catch {\n\t\t\tawait initMeshPromise;\n\t\t\tif (router) {\n\t\t\t\tconst res = await router.dispatch(request);\n\t\t\t\tif (res) process.stdout.write(`${JSON.stringify(res)}\\n`);\n\t\t\t}\n\t\t}\n\t});\n\n\trl.on(\"close\", async () => {\n\t\tif (meshNode) await meshNode.stop();\n\t\tprocess.exit(0);\n\t});\n}\n\n/**\n * Main Entry Point\n */\nasync function main() {\n\t// Auto-Relaunch: Ensure system CA certificates are loaded for TLS compatibility\n\tif (\n\t\t(process.platform === \"win32\" || process.platform === \"darwin\") &&\n\t\t!process.execArgv.includes(\"--use-system-ca\") &&\n\t\t!(process.env.NODE_OPTIONS ?? \"\").includes(\"--use-system-ca\")\n\t) {\n\t\tconst { spawn } = await import(\"node:child_process\");\n\t\tconst child = spawn(\n\t\t\tprocess.execPath,\n\t\t\t[\"--use-system-ca\", ...process.argv.slice(1)],\n\t\t\t{ stdio: \"inherit\", env: process.env },\n\t\t);\n\t\tchild.on(\"exit\", (code) => process.exit(code ?? 1));\n\t\tchild.on(\"error\", () => process.exit(1));\n\t\tawait new Promise(() => {});\n\t\treturn;\n\t}\n\n\tconst buildTime = new Date().toISOString();\n\tlog.info(\n\t\t`[LIOP-Agent] 🚀 Version 2.5.0 (Adaptive Zero-Config) | Build: ${buildTime}`,\n\t);\n\n\tconst liopDir = path.join(os.homedir(), \".liop\");\n\tconst identityPath = path.join(liopDir, \"identity.json\");\n\tif (!fs.existsSync(liopDir)) {\n\t\tfs.mkdirSync(liopDir, { recursive: true });\n\t}\n\n\t// 1. Resolve candidate P2P bootstrap nodes\n\tconst bootstrapNodes = await resolveBootstrapNodes(liopDir);\n\n\t// 2. Execute Adaptive Topology Probe\n\tconst blgUrl = process.env.LIOP_BLG_URL;\n\tconst nexusUrl = process.env.LIOP_NEXUS_URL;\n\tconst clientId =\n\t\tprocess.env.LIOP_CLIENT_ID ||\n\t\tprocess.env.LIOP_OAUTH_CLIENT_ID ||\n\t\t\"liop-agent\";\n\tconst clientSecret =\n\t\tprocess.env.LIOP_CLIENT_SECRET ||\n\t\tprocess.env.LIOP_OAUTH_CLIENT_SECRET ||\n\t\t\"dev-secret-change-me\";\n\tconst staticToken = process.env.LIOP_TOKEN || process.env.LIOP_OAUTH_TOKEN;\n\n\tconst topology = await probeTopology({\n\t\tblgUrl,\n\t\tnexusUrl,\n\t\tclientId,\n\t\tclientSecret,\n\t\tstaticToken,\n\t\tbootstrapNodes,\n\t\tidentityPath,\n\t});\n\n\tconst routingTable = new RoutingTable();\n\tconst tokenManager = new TokenManager({\n\t\ttokenEndpoint:\n\t\t\ttopology.gateway?.tokenEndpoint ||\n\t\t\t`${nexusUrl || \"http://127.0.0.1:15000\"}/oidc/token`,\n\t\tclientId,\n\t\tclientSecret,\n\t\taudience: topology.gateway?.audience,\n\t\tscopes: topology.gateway?.scopes,\n\t\tstaticToken,\n\t});\n\n\t// 3. Dispatch by Mode\n\tswitch (topology.mode) {\n\t\tcase \"gateway\":\n\t\t\tif (!topology.gateway)\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"Topology probe indicated gateway mode without gateway info.\",\n\t\t\t\t);\n\t\t\tawait runGatewayMode(topology.gateway, tokenManager, routingTable);\n\t\t\tbreak;\n\t\tcase \"mesh\":\n\t\t\tif (!topology.mesh)\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"Topology probe indicated mesh mode without mesh info.\",\n\t\t\t\t);\n\t\t\tawait runMeshMode(topology.mesh);\n\t\t\tbreak;\n\t\tcase \"hybrid\":\n\t\t\tawait runHybridMode(topology, tokenManager, routingTable);\n\t\t\tbreak;\n\t}\n}\n\nmain().catch((err) => {\n\tlog.error(`[LIOP-Agent] Fatal Error: ${err.message}`);\n\tprocess.exit(1);\n});\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"bridge.js"}