@ninelives/agent-governance-sdk 5.0.1

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 (126) hide show
  1. package/README.md +363 -0
  2. package/dist/audit.d.ts +26 -0
  3. package/dist/audit.d.ts.map +1 -0
  4. package/dist/audit.js +107 -0
  5. package/dist/audit.js.map +1 -0
  6. package/dist/cascade-containment.d.ts +84 -0
  7. package/dist/cascade-containment.d.ts.map +1 -0
  8. package/dist/cascade-containment.js +387 -0
  9. package/dist/cascade-containment.js.map +1 -0
  10. package/dist/client.d.ts +34 -0
  11. package/dist/client.d.ts.map +1 -0
  12. package/dist/client.js +112 -0
  13. package/dist/client.js.map +1 -0
  14. package/dist/context-poisoning.d.ts +58 -0
  15. package/dist/context-poisoning.d.ts.map +1 -0
  16. package/dist/context-poisoning.js +410 -0
  17. package/dist/context-poisoning.js.map +1 -0
  18. package/dist/credential-vault.d.ts +213 -0
  19. package/dist/credential-vault.d.ts.map +1 -0
  20. package/dist/credential-vault.js +567 -0
  21. package/dist/credential-vault.js.map +1 -0
  22. package/dist/discovery.d.ts +80 -0
  23. package/dist/discovery.d.ts.map +1 -0
  24. package/dist/discovery.js +404 -0
  25. package/dist/discovery.js.map +1 -0
  26. package/dist/encryption/channel.d.ts +29 -0
  27. package/dist/encryption/channel.d.ts.map +1 -0
  28. package/dist/encryption/channel.js +78 -0
  29. package/dist/encryption/channel.js.map +1 -0
  30. package/dist/encryption/index.d.ts +9 -0
  31. package/dist/encryption/index.d.ts.map +1 -0
  32. package/dist/encryption/index.js +23 -0
  33. package/dist/encryption/index.js.map +1 -0
  34. package/dist/encryption/mesh-client.d.ts +281 -0
  35. package/dist/encryption/mesh-client.d.ts.map +1 -0
  36. package/dist/encryption/mesh-client.js +1110 -0
  37. package/dist/encryption/mesh-client.js.map +1 -0
  38. package/dist/encryption/ratchet.d.ts +38 -0
  39. package/dist/encryption/ratchet.d.ts.map +1 -0
  40. package/dist/encryption/ratchet.js +223 -0
  41. package/dist/encryption/ratchet.js.map +1 -0
  42. package/dist/encryption/registry-client.d.ts +136 -0
  43. package/dist/encryption/registry-client.d.ts.map +1 -0
  44. package/dist/encryption/registry-client.js +369 -0
  45. package/dist/encryption/registry-client.js.map +1 -0
  46. package/dist/encryption/x3dh.d.ts +80 -0
  47. package/dist/encryption/x3dh.d.ts.map +1 -0
  48. package/dist/encryption/x3dh.js +238 -0
  49. package/dist/encryption/x3dh.js.map +1 -0
  50. package/dist/framework-adapter.d.ts +63 -0
  51. package/dist/framework-adapter.d.ts.map +1 -0
  52. package/dist/framework-adapter.js +253 -0
  53. package/dist/framework-adapter.js.map +1 -0
  54. package/dist/identity.d.ts +124 -0
  55. package/dist/identity.d.ts.map +1 -0
  56. package/dist/identity.js +446 -0
  57. package/dist/identity.js.map +1 -0
  58. package/dist/index.d.ts +39 -0
  59. package/dist/index.d.ts.map +1 -0
  60. package/dist/index.js +95 -0
  61. package/dist/index.js.map +1 -0
  62. package/dist/kill-switch.d.ts +22 -0
  63. package/dist/kill-switch.d.ts.map +1 -0
  64. package/dist/kill-switch.js +60 -0
  65. package/dist/kill-switch.js.map +1 -0
  66. package/dist/lifecycle.d.ts +50 -0
  67. package/dist/lifecycle.d.ts.map +1 -0
  68. package/dist/lifecycle.js +113 -0
  69. package/dist/lifecycle.js.map +1 -0
  70. package/dist/mcp.d.ts +41 -0
  71. package/dist/mcp.d.ts.map +1 -0
  72. package/dist/mcp.js +233 -0
  73. package/dist/mcp.js.map +1 -0
  74. package/dist/metrics.d.ts +123 -0
  75. package/dist/metrics.d.ts.map +1 -0
  76. package/dist/metrics.js +289 -0
  77. package/dist/metrics.js.map +1 -0
  78. package/dist/oci-manifest.d.ts +49 -0
  79. package/dist/oci-manifest.d.ts.map +1 -0
  80. package/dist/oci-manifest.js +182 -0
  81. package/dist/oci-manifest.js.map +1 -0
  82. package/dist/policy-backends/cedar.d.ts +15 -0
  83. package/dist/policy-backends/cedar.d.ts.map +1 -0
  84. package/dist/policy-backends/cedar.js +88 -0
  85. package/dist/policy-backends/cedar.js.map +1 -0
  86. package/dist/policy-backends/opa.d.ts +17 -0
  87. package/dist/policy-backends/opa.d.ts.map +1 -0
  88. package/dist/policy-backends/opa.js +74 -0
  89. package/dist/policy-backends/opa.js.map +1 -0
  90. package/dist/policy.d.ts +77 -0
  91. package/dist/policy.d.ts.map +1 -0
  92. package/dist/policy.js +760 -0
  93. package/dist/policy.js.map +1 -0
  94. package/dist/prompt-defense.d.ts +37 -0
  95. package/dist/prompt-defense.d.ts.map +1 -0
  96. package/dist/prompt-defense.js +229 -0
  97. package/dist/prompt-defense.js.map +1 -0
  98. package/dist/protocol-facets.d.ts +87 -0
  99. package/dist/protocol-facets.d.ts.map +1 -0
  100. package/dist/protocol-facets.js +728 -0
  101. package/dist/protocol-facets.js.map +1 -0
  102. package/dist/rings.d.ts +17 -0
  103. package/dist/rings.d.ts.map +1 -0
  104. package/dist/rings.js +61 -0
  105. package/dist/rings.js.map +1 -0
  106. package/dist/sandbox.d.ts +61 -0
  107. package/dist/sandbox.d.ts.map +1 -0
  108. package/dist/sandbox.js +199 -0
  109. package/dist/sandbox.js.map +1 -0
  110. package/dist/surface-parity.d.ts +45 -0
  111. package/dist/surface-parity.d.ts.map +1 -0
  112. package/dist/surface-parity.js +216 -0
  113. package/dist/surface-parity.js.map +1 -0
  114. package/dist/trust.d.ts +28 -0
  115. package/dist/trust.d.ts.map +1 -0
  116. package/dist/trust.js +209 -0
  117. package/dist/trust.js.map +1 -0
  118. package/dist/types.d.ts +422 -0
  119. package/dist/types.d.ts.map +1 -0
  120. package/dist/types.js +29 -0
  121. package/dist/types.js.map +1 -0
  122. package/dist/verify.d.ts +135 -0
  123. package/dist/verify.d.ts.map +1 -0
  124. package/dist/verify.js +356 -0
  125. package/dist/verify.js.map +1 -0
  126. package/package.json +66 -0
@@ -0,0 +1,281 @@
1
+ /**
2
+ * AgentMesh transport client — WebSocket connection to relay with
3
+ * plaintext-peer support, KNOCK pending queue, and wsFactory hook.
4
+ *
5
+ * Spec: docs/specs/AGENTMESH-WIRE-1.0.md Sections 9, 10, 12
6
+ *
7
+ * Features added for AzureClaw compatibility:
8
+ * - plaintextPeers: bypass E2E encryption for legacy peers (e.g., Rust controller)
9
+ * - wsFactory: custom WebSocket constructor for HTTPS_PROXY CONNECT tunneling
10
+ * - KNOCK pending queue: handle race between KNOCK and first message
11
+ */
12
+ import { SecureChannel, type ChannelEstablishment } from "./channel";
13
+ import { X3DHKeyManager, type PreKeyBundle } from "./x3dh";
14
+ import { RegistryClient, type RegistryClientOptions, type DiscoverResult } from "./registry-client";
15
+ export type WebSocketFactory = (url: string) => WebSocket;
16
+ export interface MeshClientOptions {
17
+ relayUrl: string;
18
+ registryUrl: string;
19
+ keyManager: X3DHKeyManager;
20
+ agentDid: string;
21
+ displayName?: string;
22
+ /** Custom WebSocket constructor (e.g., for HTTPS_PROXY CONNECT tunneling in Node 22) */
23
+ wsFactory?: WebSocketFactory;
24
+ /**
25
+ * Inject a pre-built RegistryClient (overrides registryUrl). Useful for
26
+ * tests, custom auth, or sharing a client across multiple MeshClients.
27
+ */
28
+ registryClient?: RegistryClient;
29
+ /**
30
+ * Extra options forwarded to the auto-built RegistryClient when
31
+ * `registryClient` is not provided. Ignored if registryClient is set.
32
+ */
33
+ registryClientOptions?: Partial<Omit<RegistryClientOptions, "baseUrl">>;
34
+ /**
35
+ * Capabilities to publish at registration time. The displayName is
36
+ * automatically appended (so peers can find this agent via
37
+ * `discover(displayName)`). Default: empty array.
38
+ */
39
+ capabilities?: string[];
40
+ /**
41
+ * Arbitrary metadata to publish at registration. The display_name is
42
+ * automatically merged in if displayName is set.
43
+ */
44
+ registrationMetadata?: Record<string, string>;
45
+ /**
46
+ * Number of one-time pre-keys to generate and upload at connect time.
47
+ * Each successful X3DH initiation by a peer consumes one. Default 20.
48
+ */
49
+ oneTimePrekeyCount?: number;
50
+ /**
51
+ * If false, skip auto-registration on connect even when registryUrl is
52
+ * set (caller will register manually via getRegistry().register()).
53
+ * Default true.
54
+ */
55
+ autoRegister?: boolean;
56
+ /** AMIDs/DIDs that bypass Signal E2E — use legacy base64(JSON) wire format */
57
+ plaintextPeers?: string[];
58
+ /** Max time (ms) to wait for KNOCK resolution before rejecting a message */
59
+ knockTimeout?: number;
60
+ /**
61
+ * Automatically reconnect on non-1000 close events.
62
+ * Defaults to true. Set to false to keep the legacy manual-only behavior.
63
+ */
64
+ autoReconnect?: boolean;
65
+ /** Max reconnect attempts (default: Number.POSITIVE_INFINITY). */
66
+ maxReconnectAttempts?: number;
67
+ /** Base reconnect delay in ms before exponential backoff (default: 1000). */
68
+ reconnectBaseDelayMs?: number;
69
+ /** Max reconnect delay cap in ms (default: 60000). */
70
+ reconnectMaxDelayMs?: number;
71
+ /**
72
+ * Max messages to buffer per peer when an encrypted message arrives before
73
+ * its KNOCK has been processed (out-of-order delivery on the relay).
74
+ * Mirrors vendored agentmesh-sdk patch #16. Default 5. Set to 0 to disable.
75
+ */
76
+ preKnockBufferSize?: number;
77
+ /**
78
+ * TTL in ms for buffered pre-KNOCK messages before they are evicted.
79
+ * Default 3000.
80
+ */
81
+ preKnockBufferTtlMs?: number;
82
+ /**
83
+ * Max number of distinct peers that can have pre-KNOCK message buffers
84
+ * simultaneously. Prevents memory exhaustion from an adversary sending
85
+ * messages from many distinct DIDs before any KNOCK arrives. When
86
+ * exceeded, the oldest peer's buffer is evicted entirely. Default 100.
87
+ */
88
+ maxBufferedPeers?: number;
89
+ }
90
+ export interface MeshSession {
91
+ peerId: string;
92
+ channel: SecureChannel | null;
93
+ isPlaintext: boolean;
94
+ createdAt: Date;
95
+ messageCount: number;
96
+ }
97
+ /**
98
+ * WebSocket close code sent by the relay when another connection
99
+ * authenticates for the same DID and displaces this socket.
100
+ *
101
+ * Deliberately not 1000 (Normal Closure): 1000 is indistinguishable from the
102
+ * client closing its own socket, which made a mailbox takeover silent and
103
+ * unattributable. Clients receive this as a server-initiated close but must
104
+ * NOT auto-reconnect on it — reconnecting would displace the replacing socket
105
+ * and the two would evict each other in a loop.
106
+ *
107
+ * Must stay in sync with `WS_CLOSE_SESSION_REPLACED` in the relay
108
+ * (`agentmesh/relay/app.py`).
109
+ */
110
+ export declare const WS_CLOSE_SESSION_REPLACED = 4006;
111
+ /**
112
+ * High-level mesh client for agent-to-agent communication.
113
+ *
114
+ * Manages WebSocket connection to the relay, session establishment
115
+ * (KNOCK + X3DH), and message encryption/decryption. Supports
116
+ * plaintext peers for legacy interop.
117
+ */
118
+ export declare class MeshClient {
119
+ private options;
120
+ private sessions;
121
+ private plaintextPeers;
122
+ private knockPending;
123
+ private knockAccepted;
124
+ private messageHandlers;
125
+ private knockHandlers;
126
+ private errorHandlers;
127
+ private disconnectHandlers;
128
+ private e2eVerifiedHandlers;
129
+ /** Tracks peers whose first encrypted message we've seen — feeds onE2EVerified. */
130
+ private e2eVerifiedSet;
131
+ private ws;
132
+ private connected;
133
+ private knockTimeout;
134
+ private autoReconnect;
135
+ private maxReconnectAttempts;
136
+ private reconnectBaseDelayMs;
137
+ private reconnectMaxDelayMs;
138
+ private reconnectAttempts;
139
+ private reconnectTimer;
140
+ private clientInitiatedClose;
141
+ private preKnockBufferSize;
142
+ private preKnockBufferTtlMs;
143
+ private maxBufferedPeers;
144
+ /**
145
+ * Per-peer buffer for encrypted message frames that arrived before the
146
+ * peer's KNOCK was processed. Drained when the KNOCK is later accepted.
147
+ * Mirrors vendored agentmesh-sdk patch #16.
148
+ */
149
+ private preKnockBuffer;
150
+ private readonly registry;
151
+ private readonly autoRegister;
152
+ private readonly oneTimePrekeyCount;
153
+ private registered;
154
+ /**
155
+ * The agent DID used on every wire-level send (`connect.from`,
156
+ * `mesh_send.from`, `knock.from`, …). Starts at `options.agentDid` so
157
+ * back-compat is preserved when no registry is configured or when
158
+ * registering against a pre-2533 registry. When `registerSelf()` runs
159
+ * against a POP-aware registry (AGT main since 2026-05-23), the server
160
+ * returns the canonical `did:mesh:<sha256(public_key)[:32]>` and we
161
+ * adopt it here — every subsequent frame uses the canonical form so
162
+ * relay and registry lookups agree.
163
+ */
164
+ private activeDid;
165
+ /**
166
+ * Public read-only view of the active DID. Caller code that previously
167
+ * read `options.agentDid` and stored it should read this instead so
168
+ * post-registration DID swaps are visible.
169
+ */
170
+ get currentDid(): string;
171
+ constructor(options: MeshClientOptions);
172
+ /**
173
+ * Access the RegistryClient (built from registryUrl or injected via
174
+ * registryClient). Returns null only if MeshClient was constructed
175
+ * without a registry URL or client — which means discover/peer lookup
176
+ * features are disabled.
177
+ */
178
+ getRegistry(): RegistryClient | null;
179
+ addPlaintextPeer(peerId: string): void;
180
+ removePlaintextPeer(peerId: string): void;
181
+ isPlaintextPeer(peerId: string): boolean;
182
+ connect(): Promise<void>;
183
+ /**
184
+ * Publish this agent in the registry and upload an X3DH pre-key bundle.
185
+ *
186
+ * - Generates a signed pre-key and `oneTimePrekeyCount` one-time
187
+ * pre-keys via `keyManager.generateSignedPreKey()` /
188
+ * `generateOneTimePreKeys()`.
189
+ * - Capabilities are `[displayName?, ...options.capabilities]` so peers
190
+ * can find this agent via `registry.discover(displayName)`.
191
+ * - Throws RegistryError on transport / 4xx (other than 409) / 5xx
192
+ * failure. Callers that want best-effort registration should catch.
193
+ *
194
+ * Safe to call directly when `autoRegister: false` was used.
195
+ */
196
+ registerSelf(): Promise<void>;
197
+ /**
198
+ * Discover peers advertising a given capability. Returns [] if no
199
+ * registry is configured.
200
+ */
201
+ discover(capability: string, limit?: number): Promise<DiscoverResult[]>;
202
+ /**
203
+ * Convenience: fetch a peer's pre-key bundle from the registry, then
204
+ * call `establishSession`. Throws if no registry is configured or no
205
+ * bundle is published for `peerId`.
206
+ */
207
+ establishSessionWithPeer(peerId: string): Promise<MeshSession>;
208
+ private scheduleReconnect;
209
+ disconnect(): Promise<void>;
210
+ /**
211
+ * Disconnect and reconnect to the relay.
212
+ *
213
+ * Resets the WebSocket connection and sends a fresh connect +
214
+ * fetch_pending sequence, triggering inbox replay for any messages
215
+ * queued while offline.
216
+ */
217
+ reconnect(): Promise<void>;
218
+ get isConnected(): boolean;
219
+ send(peerId: string, payload: unknown): Promise<void>;
220
+ establishSession(peerId: string, peerBundle: PreKeyBundle): Promise<MeshSession>;
221
+ acceptSession(peerId: string, establishment: ChannelEstablishment): MeshSession;
222
+ getSession(peerId: string): MeshSession | undefined;
223
+ closeSession(peerId: string): boolean;
224
+ onMessage(handler: (from: string, payload: unknown, isPlaintext: boolean) => void): void;
225
+ onKnock(handler: (from: string, intent: unknown) => Promise<boolean>): void;
226
+ /**
227
+ * Register a callback for transport-level errors.
228
+ *
229
+ * Fires for: WebSocket errors (handshake, mid-stream), decrypt failures,
230
+ * KNOCK protocol errors, frame validation, and `session_desync` events
231
+ * (recoverable ratchet drift — caller should re-establishSession to that
232
+ * peer; differs from "decrypt" which means no session existed at all).
233
+ * Multiple handlers may be registered; each is invoked in registration
234
+ * order. Handler exceptions are swallowed so one buggy observer cannot
235
+ * break the others.
236
+ */
237
+ onError(handler: (kind: "ws" | "decrypt" | "knock" | "frame" | "session_desync", from: string, detail: string) => void): void;
238
+ /**
239
+ * Register a callback for transport disconnect events.
240
+ *
241
+ * `reason` is `"client"` for caller-initiated `disconnect()`, `"server"`
242
+ * for relay-side closes (network drop, relay restart), and `"ws-error"`
243
+ * when an error event fires on an already-connected socket.
244
+ */
245
+ onDisconnect(handler: (reason: "client" | "server" | "ws-error", code?: number) => void): void;
246
+ /**
247
+ * Register a callback that fires the first time we successfully decrypt
248
+ * a message from a given peer (i.e. the X3DH+Double-Ratchet session
249
+ * with that peer is fully end-to-end verified).
250
+ *
251
+ * `isFirstPeer` is `true` only for the very first verified peer in the
252
+ * client's lifetime; subsequent peers fire with `false`. This lets
253
+ * orchestrators print "mesh online" once and "+ peer X verified" for
254
+ * the rest.
255
+ */
256
+ onE2EVerified(handler: (peerAmid: string, isFirstPeer: boolean) => void): void;
257
+ sendHeartbeat(): void;
258
+ private handleFrame;
259
+ private handleMessage;
260
+ /**
261
+ * Handle a batch of pending messages replayed by the relay on reconnect.
262
+ *
263
+ * The relay may respond to a fetch_pending frame with a
264
+ * pending_messages frame containing an array of queued messages.
265
+ * Each message is dispatched through the standard handleMessage path.
266
+ */
267
+ private handlePendingMessages;
268
+ private handleKnock;
269
+ private handleKnockAccept;
270
+ private handleKnockReject;
271
+ private bufferPreKnockFrame;
272
+ private drainPreKnockBuffer;
273
+ private dropPreKnockBuffer;
274
+ private serializeEstablishment;
275
+ private deserializeEstablishment;
276
+ private sendFrame;
277
+ private incrementSessionCount;
278
+ private uint8ToBase64;
279
+ private base64ToUint8;
280
+ }
281
+ //# sourceMappingURL=mesh-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mesh-client.d.ts","sourceRoot":"","sources":["../../src/encryption/mesh-client.ts"],"names":[],"mappings":"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"}