@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.
- package/README.md +363 -0
- package/dist/audit.d.ts +26 -0
- package/dist/audit.d.ts.map +1 -0
- package/dist/audit.js +107 -0
- package/dist/audit.js.map +1 -0
- package/dist/cascade-containment.d.ts +84 -0
- package/dist/cascade-containment.d.ts.map +1 -0
- package/dist/cascade-containment.js +387 -0
- package/dist/cascade-containment.js.map +1 -0
- package/dist/client.d.ts +34 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +112 -0
- package/dist/client.js.map +1 -0
- package/dist/context-poisoning.d.ts +58 -0
- package/dist/context-poisoning.d.ts.map +1 -0
- package/dist/context-poisoning.js +410 -0
- package/dist/context-poisoning.js.map +1 -0
- package/dist/credential-vault.d.ts +213 -0
- package/dist/credential-vault.d.ts.map +1 -0
- package/dist/credential-vault.js +567 -0
- package/dist/credential-vault.js.map +1 -0
- package/dist/discovery.d.ts +80 -0
- package/dist/discovery.d.ts.map +1 -0
- package/dist/discovery.js +404 -0
- package/dist/discovery.js.map +1 -0
- package/dist/encryption/channel.d.ts +29 -0
- package/dist/encryption/channel.d.ts.map +1 -0
- package/dist/encryption/channel.js +78 -0
- package/dist/encryption/channel.js.map +1 -0
- package/dist/encryption/index.d.ts +9 -0
- package/dist/encryption/index.d.ts.map +1 -0
- package/dist/encryption/index.js +23 -0
- package/dist/encryption/index.js.map +1 -0
- package/dist/encryption/mesh-client.d.ts +281 -0
- package/dist/encryption/mesh-client.d.ts.map +1 -0
- package/dist/encryption/mesh-client.js +1110 -0
- package/dist/encryption/mesh-client.js.map +1 -0
- package/dist/encryption/ratchet.d.ts +38 -0
- package/dist/encryption/ratchet.d.ts.map +1 -0
- package/dist/encryption/ratchet.js +223 -0
- package/dist/encryption/ratchet.js.map +1 -0
- package/dist/encryption/registry-client.d.ts +136 -0
- package/dist/encryption/registry-client.d.ts.map +1 -0
- package/dist/encryption/registry-client.js +369 -0
- package/dist/encryption/registry-client.js.map +1 -0
- package/dist/encryption/x3dh.d.ts +80 -0
- package/dist/encryption/x3dh.d.ts.map +1 -0
- package/dist/encryption/x3dh.js +238 -0
- package/dist/encryption/x3dh.js.map +1 -0
- package/dist/framework-adapter.d.ts +63 -0
- package/dist/framework-adapter.d.ts.map +1 -0
- package/dist/framework-adapter.js +253 -0
- package/dist/framework-adapter.js.map +1 -0
- package/dist/identity.d.ts +124 -0
- package/dist/identity.d.ts.map +1 -0
- package/dist/identity.js +446 -0
- package/dist/identity.js.map +1 -0
- package/dist/index.d.ts +39 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +95 -0
- package/dist/index.js.map +1 -0
- package/dist/kill-switch.d.ts +22 -0
- package/dist/kill-switch.d.ts.map +1 -0
- package/dist/kill-switch.js +60 -0
- package/dist/kill-switch.js.map +1 -0
- package/dist/lifecycle.d.ts +50 -0
- package/dist/lifecycle.d.ts.map +1 -0
- package/dist/lifecycle.js +113 -0
- package/dist/lifecycle.js.map +1 -0
- package/dist/mcp.d.ts +41 -0
- package/dist/mcp.d.ts.map +1 -0
- package/dist/mcp.js +233 -0
- package/dist/mcp.js.map +1 -0
- package/dist/metrics.d.ts +123 -0
- package/dist/metrics.d.ts.map +1 -0
- package/dist/metrics.js +289 -0
- package/dist/metrics.js.map +1 -0
- package/dist/oci-manifest.d.ts +49 -0
- package/dist/oci-manifest.d.ts.map +1 -0
- package/dist/oci-manifest.js +182 -0
- package/dist/oci-manifest.js.map +1 -0
- package/dist/policy-backends/cedar.d.ts +15 -0
- package/dist/policy-backends/cedar.d.ts.map +1 -0
- package/dist/policy-backends/cedar.js +88 -0
- package/dist/policy-backends/cedar.js.map +1 -0
- package/dist/policy-backends/opa.d.ts +17 -0
- package/dist/policy-backends/opa.d.ts.map +1 -0
- package/dist/policy-backends/opa.js +74 -0
- package/dist/policy-backends/opa.js.map +1 -0
- package/dist/policy.d.ts +77 -0
- package/dist/policy.d.ts.map +1 -0
- package/dist/policy.js +760 -0
- package/dist/policy.js.map +1 -0
- package/dist/prompt-defense.d.ts +37 -0
- package/dist/prompt-defense.d.ts.map +1 -0
- package/dist/prompt-defense.js +229 -0
- package/dist/prompt-defense.js.map +1 -0
- package/dist/protocol-facets.d.ts +87 -0
- package/dist/protocol-facets.d.ts.map +1 -0
- package/dist/protocol-facets.js +728 -0
- package/dist/protocol-facets.js.map +1 -0
- package/dist/rings.d.ts +17 -0
- package/dist/rings.d.ts.map +1 -0
- package/dist/rings.js +61 -0
- package/dist/rings.js.map +1 -0
- package/dist/sandbox.d.ts +61 -0
- package/dist/sandbox.d.ts.map +1 -0
- package/dist/sandbox.js +199 -0
- package/dist/sandbox.js.map +1 -0
- package/dist/surface-parity.d.ts +45 -0
- package/dist/surface-parity.d.ts.map +1 -0
- package/dist/surface-parity.js +216 -0
- package/dist/surface-parity.js.map +1 -0
- package/dist/trust.d.ts +28 -0
- package/dist/trust.d.ts.map +1 -0
- package/dist/trust.js +209 -0
- package/dist/trust.js.map +1 -0
- package/dist/types.d.ts +422 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +29 -0
- package/dist/types.js.map +1 -0
- package/dist/verify.d.ts +135 -0
- package/dist/verify.d.ts.map +1 -0
- package/dist/verify.js +356 -0
- package/dist/verify.js.map +1 -0
- 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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"}
|