@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,238 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright (c) Microsoft Corporation.
|
|
3
|
+
// Licensed under the MIT License.
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
exports.X3DHKeyManager = void 0;
|
|
6
|
+
exports.generateX25519KeyPair = generateX25519KeyPair;
|
|
7
|
+
exports.ed25519ToX25519 = ed25519ToX25519;
|
|
8
|
+
exports.kdf = kdf;
|
|
9
|
+
/**
|
|
10
|
+
* X3DH (Extended Triple Diffie-Hellman) key agreement.
|
|
11
|
+
*
|
|
12
|
+
* Implements the Signal X3DH specification for establishing shared secrets
|
|
13
|
+
* between agents. Uses Ed25519 identity keys converted to X25519 for DH.
|
|
14
|
+
*
|
|
15
|
+
* Spec: docs/specs/AGENTMESH-WIRE-1.0.md Section 7
|
|
16
|
+
* Reference: https://signal.org/docs/specifications/x3dh/ (CC0)
|
|
17
|
+
*/
|
|
18
|
+
const ed25519_js_1 = require("@noble/curves/ed25519.js");
|
|
19
|
+
const hkdf_js_1 = require("@noble/hashes/hkdf.js");
|
|
20
|
+
const sha2_js_1 = require("@noble/hashes/sha2.js");
|
|
21
|
+
const node_crypto_1 = require("node:crypto");
|
|
22
|
+
const randomBytes = (n) => {
|
|
23
|
+
const buf = new Uint8Array(n);
|
|
24
|
+
node_crypto_1.webcrypto.getRandomValues(buf);
|
|
25
|
+
return buf;
|
|
26
|
+
};
|
|
27
|
+
const X3DH_INFO = new TextEncoder().encode("AgentMesh_X3DH_v1");
|
|
28
|
+
const KEY_LEN = 32;
|
|
29
|
+
// Spec-compliant X3DH KDF inputs per Signal §2.2:
|
|
30
|
+
// IKM = F (0xFF × 32) || concat(DH outputs)
|
|
31
|
+
// salt = 0x00 × 32 (HKDF salt is the empty/zero block, NOT the F prefix)
|
|
32
|
+
// info = "AgentMesh_X3DH_v1"
|
|
33
|
+
// An earlier implementation passed F (0xFF × 32) as the HKDF *salt* while
|
|
34
|
+
// feeding the bare DH concat as IKM. That derives a different key than the
|
|
35
|
+
// spec, which silently broke interop with any spec-compliant peer — in
|
|
36
|
+
// particular the AGT Python SDK, whose KDF was already corrected upstream in
|
|
37
|
+
// agent-governance-python/.../encryption/x3dh.py (PR #1926). Until now the
|
|
38
|
+
// TypeScript SDK was never aligned, so a Python initiator and a TypeScript
|
|
39
|
+
// responder (or vice-versa) completed X3DH/KNOCK but then failed to decrypt
|
|
40
|
+
// the first message with "invalid tag". Aligning the salt/IKM here restores
|
|
41
|
+
// Python↔TypeScript cross-runtime parity.
|
|
42
|
+
const F_PREFIX = new Uint8Array(32).fill(0xff);
|
|
43
|
+
const ZERO_SALT = new Uint8Array(32);
|
|
44
|
+
function generateX25519KeyPair() {
|
|
45
|
+
const privateKey = randomBytes(KEY_LEN);
|
|
46
|
+
const publicKey = ed25519_js_1.x25519.getPublicKey(privateKey);
|
|
47
|
+
return { privateKey, publicKey };
|
|
48
|
+
}
|
|
49
|
+
function ed25519ToX25519(ed25519Private, ed25519Public) {
|
|
50
|
+
if (ed25519Public.length !== 32) {
|
|
51
|
+
throw new Error("ed25519Public must be 32 bytes");
|
|
52
|
+
}
|
|
53
|
+
if (ed25519Private.length !== 32 && ed25519Private.length !== 64) {
|
|
54
|
+
throw new Error("ed25519Private must be 32 or 64 bytes");
|
|
55
|
+
}
|
|
56
|
+
const priv32 = ed25519Private.length === 64 ? ed25519Private.slice(0, 32) : ed25519Private;
|
|
57
|
+
// Ed25519 seed → SHA-512 → first 32 bytes → clamp per RFC 7748 §5
|
|
58
|
+
const h = (0, sha2_js_1.sha512)(priv32);
|
|
59
|
+
const privateKey = h.slice(0, 32);
|
|
60
|
+
privateKey[0] &= 248;
|
|
61
|
+
privateKey[31] &= 127;
|
|
62
|
+
privateKey[31] |= 64;
|
|
63
|
+
const publicKey = ed25519_js_1.x25519.getPublicKey(privateKey);
|
|
64
|
+
return { privateKey, publicKey };
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* X3DH key-derivation function.
|
|
68
|
+
*
|
|
69
|
+
* Computes `HKDF-SHA256(salt = 0x00 × 32, IKM = F ‖ dhConcat,
|
|
70
|
+
* info = "AgentMesh_X3DH_v1", L = 32)` where `F` is `0xFF × 32`, per the
|
|
71
|
+
* Signal X3DH spec (§2.2). Callers pass `dhConcat` (the concatenation of the
|
|
72
|
+
* DH outputs) as `ikm`; the F prefix is prepended here so every code path
|
|
73
|
+
* (initiator + responder) applies it exactly once.
|
|
74
|
+
*
|
|
75
|
+
* Exported so the test suite can pin the exact derived key against a
|
|
76
|
+
* cross-runtime known-answer vector shared with the AGT Python SDK, which
|
|
77
|
+
* guards against silent salt/IKM regressions that pass intra-runtime
|
|
78
|
+
* consistency checks but break Python↔TypeScript interop.
|
|
79
|
+
*/
|
|
80
|
+
function kdf(ikm) {
|
|
81
|
+
return (0, hkdf_js_1.hkdf)(sha2_js_1.sha256, concat(F_PREFIX, ikm), ZERO_SALT, X3DH_INFO, KEY_LEN);
|
|
82
|
+
}
|
|
83
|
+
function concat(...arrays) {
|
|
84
|
+
const total = arrays.reduce((sum, a) => sum + a.length, 0);
|
|
85
|
+
const result = new Uint8Array(total);
|
|
86
|
+
let offset = 0;
|
|
87
|
+
for (const a of arrays) {
|
|
88
|
+
result.set(a, offset);
|
|
89
|
+
offset += a.length;
|
|
90
|
+
}
|
|
91
|
+
return result;
|
|
92
|
+
}
|
|
93
|
+
class X3DHKeyManager {
|
|
94
|
+
identityKey;
|
|
95
|
+
ed25519Private;
|
|
96
|
+
ed25519Public;
|
|
97
|
+
signedPreKeyPair = null;
|
|
98
|
+
oneTimePreKeys = new Map();
|
|
99
|
+
nextSpkId = 0;
|
|
100
|
+
nextOtkId = 0;
|
|
101
|
+
constructor(ed25519Private, ed25519Public) {
|
|
102
|
+
this.ed25519Private = ed25519Private.length === 64 ? ed25519Private.slice(0, 32) : ed25519Private;
|
|
103
|
+
this.ed25519Public = ed25519Public;
|
|
104
|
+
this.identityKey = ed25519ToX25519(ed25519Private, ed25519Public);
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Ed25519 public key used to sign pre-keys. Distinct from
|
|
108
|
+
* `identityKey.publicKey` (X25519). Peers MUST be given this key to
|
|
109
|
+
* verify the signature on the signed pre-key (`verifyBundle`).
|
|
110
|
+
*/
|
|
111
|
+
get identityKeyEd() {
|
|
112
|
+
return this.ed25519Public;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Sign an arbitrary message with the Ed25519 identity private key.
|
|
116
|
+
*
|
|
117
|
+
* Used for registry registration proof-of-possession (the server
|
|
118
|
+
* verifies `Ed25519(public_key || proof_timestamp)` against
|
|
119
|
+
* `identityKeyEd`) and for the relay's `connect` frame Ed25519
|
|
120
|
+
* timestamp signature.
|
|
121
|
+
*/
|
|
122
|
+
signMessage(message) {
|
|
123
|
+
return ed25519_js_1.ed25519.sign(message, this.ed25519Private);
|
|
124
|
+
}
|
|
125
|
+
generateSignedPreKey() {
|
|
126
|
+
const keyPair = generateX25519KeyPair();
|
|
127
|
+
const signature = ed25519_js_1.ed25519.sign(keyPair.publicKey, this.ed25519Private);
|
|
128
|
+
const keyId = this.nextSpkId++;
|
|
129
|
+
this.signedPreKeyPair = { keyPair, signature, keyId };
|
|
130
|
+
return { keyId, publicKey: keyPair.publicKey, signature };
|
|
131
|
+
}
|
|
132
|
+
generateOneTimePreKeys(count) {
|
|
133
|
+
const keys = [];
|
|
134
|
+
for (let i = 0; i < count; i++) {
|
|
135
|
+
const keyPair = generateX25519KeyPair();
|
|
136
|
+
const keyId = this.nextOtkId++;
|
|
137
|
+
this.oneTimePreKeys.set(keyId, keyPair);
|
|
138
|
+
keys.push({ keyId, publicKey: keyPair.publicKey });
|
|
139
|
+
}
|
|
140
|
+
return keys;
|
|
141
|
+
}
|
|
142
|
+
getPublicBundle(otkId) {
|
|
143
|
+
if (!this.signedPreKeyPair) {
|
|
144
|
+
throw new Error("No signed pre-key generated. Call generateSignedPreKey() first.");
|
|
145
|
+
}
|
|
146
|
+
const bundle = {
|
|
147
|
+
identityKey: this.identityKey.publicKey,
|
|
148
|
+
identityKeyEd: this.ed25519Public,
|
|
149
|
+
signedPreKey: this.signedPreKeyPair.keyPair.publicKey,
|
|
150
|
+
signedPreKeySignature: this.signedPreKeyPair.signature,
|
|
151
|
+
signedPreKeyId: this.signedPreKeyPair.keyId,
|
|
152
|
+
};
|
|
153
|
+
if (otkId !== undefined) {
|
|
154
|
+
const otk = this.oneTimePreKeys.get(otkId);
|
|
155
|
+
if (otk) {
|
|
156
|
+
bundle.oneTimePreKey = otk.publicKey;
|
|
157
|
+
bundle.oneTimePreKeyId = otkId;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
return bundle;
|
|
161
|
+
}
|
|
162
|
+
initiate(peerBundle) {
|
|
163
|
+
verifyBundle(peerBundle);
|
|
164
|
+
const ephemeral = generateX25519KeyPair();
|
|
165
|
+
const dh1 = ed25519_js_1.x25519.getSharedSecret(this.identityKey.privateKey, peerBundle.signedPreKey);
|
|
166
|
+
const dh2 = ed25519_js_1.x25519.getSharedSecret(ephemeral.privateKey, peerBundle.identityKey);
|
|
167
|
+
const dh3 = ed25519_js_1.x25519.getSharedSecret(ephemeral.privateKey, peerBundle.signedPreKey);
|
|
168
|
+
let dhConcat = concat(dh1, dh2, dh3);
|
|
169
|
+
let usedOtkId;
|
|
170
|
+
if (peerBundle.oneTimePreKey) {
|
|
171
|
+
const dh4 = ed25519_js_1.x25519.getSharedSecret(ephemeral.privateKey, peerBundle.oneTimePreKey);
|
|
172
|
+
dhConcat = concat(dhConcat, dh4);
|
|
173
|
+
usedOtkId = peerBundle.oneTimePreKeyId;
|
|
174
|
+
}
|
|
175
|
+
const sharedSecret = kdf(dhConcat);
|
|
176
|
+
const ad = concat(this.identityKey.publicKey, peerBundle.identityKey);
|
|
177
|
+
return {
|
|
178
|
+
sharedSecret,
|
|
179
|
+
ephemeralPublicKey: ephemeral.publicKey,
|
|
180
|
+
usedOneTimeKeyId: usedOtkId,
|
|
181
|
+
associatedData: ad,
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
respond(peerIdentityKey, ephemeralPublicKey, usedOneTimeKeyId) {
|
|
185
|
+
if (!this.signedPreKeyPair) {
|
|
186
|
+
throw new Error("No signed pre-key available.");
|
|
187
|
+
}
|
|
188
|
+
const dh1 = ed25519_js_1.x25519.getSharedSecret(this.signedPreKeyPair.keyPair.privateKey, peerIdentityKey);
|
|
189
|
+
const dh2 = ed25519_js_1.x25519.getSharedSecret(this.identityKey.privateKey, ephemeralPublicKey);
|
|
190
|
+
const dh3 = ed25519_js_1.x25519.getSharedSecret(this.signedPreKeyPair.keyPair.privateKey, ephemeralPublicKey);
|
|
191
|
+
let dhConcat = concat(dh1, dh2, dh3);
|
|
192
|
+
if (usedOneTimeKeyId !== undefined) {
|
|
193
|
+
const otk = this.oneTimePreKeys.get(usedOneTimeKeyId);
|
|
194
|
+
if (!otk) {
|
|
195
|
+
throw new Error(`One-time pre-key ${usedOneTimeKeyId} not found or already consumed.`);
|
|
196
|
+
}
|
|
197
|
+
const dh4 = ed25519_js_1.x25519.getSharedSecret(otk.privateKey, ephemeralPublicKey);
|
|
198
|
+
dhConcat = concat(dhConcat, dh4);
|
|
199
|
+
this.oneTimePreKeys.delete(usedOneTimeKeyId);
|
|
200
|
+
}
|
|
201
|
+
const sharedSecret = kdf(dhConcat);
|
|
202
|
+
const ad = concat(peerIdentityKey, this.identityKey.publicKey);
|
|
203
|
+
return {
|
|
204
|
+
sharedSecret,
|
|
205
|
+
ephemeralPublicKey,
|
|
206
|
+
usedOneTimeKeyId,
|
|
207
|
+
associatedData: ad,
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
get signedPreKey() {
|
|
211
|
+
return this.signedPreKeyPair;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
exports.X3DHKeyManager = X3DHKeyManager;
|
|
215
|
+
function verifyBundle(bundle) {
|
|
216
|
+
if (!bundle.identityKeyEd || bundle.identityKeyEd.length !== 32) {
|
|
217
|
+
throw new Error("Missing or invalid Ed25519 identity key (identityKeyEd). " +
|
|
218
|
+
"Required for signed pre-key signature verification.");
|
|
219
|
+
}
|
|
220
|
+
if (bundle.signedPreKeySignature.length !== 64) {
|
|
221
|
+
throw new Error("Invalid signed pre-key signature length.");
|
|
222
|
+
}
|
|
223
|
+
if (bundle.signedPreKey.length !== 32) {
|
|
224
|
+
throw new Error("Invalid signed pre-key length.");
|
|
225
|
+
}
|
|
226
|
+
if (bundle.identityKey.length !== 32) {
|
|
227
|
+
throw new Error("Invalid identity key length.");
|
|
228
|
+
}
|
|
229
|
+
// Verify the signed pre-key signature using the Ed25519 identity key.
|
|
230
|
+
// This ensures the pre-key was actually generated by the bundle's owner
|
|
231
|
+
// and not injected by an attacker.
|
|
232
|
+
const valid = ed25519_js_1.ed25519.verify(bundle.signedPreKeySignature, bundle.signedPreKey, bundle.identityKeyEd);
|
|
233
|
+
if (!valid) {
|
|
234
|
+
throw new Error("Signed pre-key signature verification FAILED. " +
|
|
235
|
+
"The pre-key was not signed by the claimed identity key.");
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
//# sourceMappingURL=x3dh.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"x3dh.js","sourceRoot":"","sources":["../../src/encryption/x3dh.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { AgentMeshClient } from './client';
|
|
2
|
+
import { ExecutionTrace, GovernanceMetrics, TraceCapture, TraceSpanKind, TraceSpanStatus } from './metrics';
|
|
3
|
+
import { GovernanceResult, TrustedSkillMetadataSource } from './types';
|
|
4
|
+
export interface FrameworkInvocation {
|
|
5
|
+
name: string;
|
|
6
|
+
kind?: TraceSpanKind;
|
|
7
|
+
action?: string;
|
|
8
|
+
/** Optional diagnostic identity hint; if provided, it must match the bound client identity. */
|
|
9
|
+
agentId?: string;
|
|
10
|
+
input?: Record<string, unknown>;
|
|
11
|
+
attributes?: Record<string, unknown>;
|
|
12
|
+
trustedSkillMetadata?: TrustedSkillMetadataSource;
|
|
13
|
+
}
|
|
14
|
+
export interface FrameworkInvocationOutcome<TOutput = unknown> {
|
|
15
|
+
output?: TOutput;
|
|
16
|
+
error?: string;
|
|
17
|
+
status?: TraceSpanStatus;
|
|
18
|
+
costUsd?: number;
|
|
19
|
+
}
|
|
20
|
+
export interface FrameworkAdapterResult<TOutput = unknown> {
|
|
21
|
+
allowed: boolean;
|
|
22
|
+
reason: string;
|
|
23
|
+
action: string;
|
|
24
|
+
invocation: FrameworkInvocation;
|
|
25
|
+
governanceResult: GovernanceResult;
|
|
26
|
+
output?: TOutput;
|
|
27
|
+
error?: string;
|
|
28
|
+
trace: ExecutionTrace;
|
|
29
|
+
}
|
|
30
|
+
export interface GenericFrameworkAdapterOptions {
|
|
31
|
+
metrics?: GovernanceMetrics;
|
|
32
|
+
actionPrefix?: string;
|
|
33
|
+
actionResolver?: (invocation: FrameworkInvocation) => string;
|
|
34
|
+
}
|
|
35
|
+
export declare class FrameworkInvocationHandle<TOutput = unknown> {
|
|
36
|
+
private readonly invocation;
|
|
37
|
+
private readonly action;
|
|
38
|
+
readonly allowed: boolean;
|
|
39
|
+
readonly reason: string;
|
|
40
|
+
readonly governanceResult: GovernanceResult;
|
|
41
|
+
private readonly capture;
|
|
42
|
+
private readonly spanId;
|
|
43
|
+
private readonly metrics;
|
|
44
|
+
private finalized;
|
|
45
|
+
private finalResult?;
|
|
46
|
+
constructor(invocation: FrameworkInvocation, action: string, allowed: boolean, reason: string, governanceResult: GovernanceResult, capture: TraceCapture | undefined, spanId: string | undefined, metrics: GovernanceMetrics | undefined);
|
|
47
|
+
get traceId(): string | undefined;
|
|
48
|
+
toResult(): FrameworkAdapterResult<TOutput>;
|
|
49
|
+
complete(outcome?: FrameworkInvocationOutcome<TOutput>): FrameworkAdapterResult<TOutput>;
|
|
50
|
+
finalizeDenied(trace: ExecutionTrace): FrameworkAdapterResult<TOutput>;
|
|
51
|
+
}
|
|
52
|
+
export declare class GenericFrameworkAdapter {
|
|
53
|
+
private readonly client;
|
|
54
|
+
private readonly metrics?;
|
|
55
|
+
private readonly actionPrefix;
|
|
56
|
+
private readonly actionResolver?;
|
|
57
|
+
constructor(client: AgentMeshClient, options?: GenericFrameworkAdapterOptions);
|
|
58
|
+
beginInvocation<TOutput = unknown>(invocation: FrameworkInvocation): Promise<FrameworkInvocationHandle<TOutput>>;
|
|
59
|
+
run<TOutput>(invocation: FrameworkInvocation, handler: () => Promise<TOutput> | TOutput): Promise<FrameworkAdapterResult<TOutput>>;
|
|
60
|
+
private resolveAction;
|
|
61
|
+
private rejectIdentityMismatch;
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=framework-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"framework-adapter.d.ts","sourceRoot":"","sources":["../src/framework-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright (c) Microsoft Corporation.
|
|
3
|
+
// Licensed under the MIT License.
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
exports.GenericFrameworkAdapter = exports.FrameworkInvocationHandle = void 0;
|
|
6
|
+
const metrics_1 = require("./metrics");
|
|
7
|
+
const crypto_1 = require("crypto");
|
|
8
|
+
class FrameworkInvocationHandle {
|
|
9
|
+
invocation;
|
|
10
|
+
action;
|
|
11
|
+
allowed;
|
|
12
|
+
reason;
|
|
13
|
+
governanceResult;
|
|
14
|
+
capture;
|
|
15
|
+
spanId;
|
|
16
|
+
metrics;
|
|
17
|
+
finalized = false;
|
|
18
|
+
finalResult;
|
|
19
|
+
constructor(invocation, action, allowed, reason, governanceResult, capture, spanId, metrics) {
|
|
20
|
+
this.invocation = invocation;
|
|
21
|
+
this.action = action;
|
|
22
|
+
this.allowed = allowed;
|
|
23
|
+
this.reason = reason;
|
|
24
|
+
this.governanceResult = governanceResult;
|
|
25
|
+
this.capture = capture;
|
|
26
|
+
this.spanId = spanId;
|
|
27
|
+
this.metrics = metrics;
|
|
28
|
+
}
|
|
29
|
+
get traceId() {
|
|
30
|
+
return this.capture?.currentTraceId();
|
|
31
|
+
}
|
|
32
|
+
toResult() {
|
|
33
|
+
if (!this.finalized || !this.finalResult) {
|
|
34
|
+
throw new Error('Invocation has not been completed');
|
|
35
|
+
}
|
|
36
|
+
return this.finalResult;
|
|
37
|
+
}
|
|
38
|
+
complete(outcome = {}) {
|
|
39
|
+
if (this.finalized) {
|
|
40
|
+
throw new Error('Invocation already completed');
|
|
41
|
+
}
|
|
42
|
+
if (!this.capture || !this.spanId) {
|
|
43
|
+
throw new Error('Invocation was already finalized during preflight');
|
|
44
|
+
}
|
|
45
|
+
const status = outcome.status ?? (outcome.error ? 'error' : 'ok');
|
|
46
|
+
this.capture.finishSpan(this.spanId, status, normalizeOutput(outcome.output), outcome.error, outcome.costUsd ?? 0);
|
|
47
|
+
const durationMs = this.capture.getSpanDuration(this.spanId) ?? 0;
|
|
48
|
+
if (this.invocation.kind === 'tool_call' && durationMs > 0) {
|
|
49
|
+
this.metrics?.recordToolCall(this.invocation.name, durationMs);
|
|
50
|
+
}
|
|
51
|
+
const trace = this.capture.finish(outcome.output === undefined ? undefined : stringifyOutput(outcome.output), !outcome.error && status === 'ok');
|
|
52
|
+
this.metrics?.recordTrace(trace);
|
|
53
|
+
this.finalResult = {
|
|
54
|
+
allowed: this.allowed,
|
|
55
|
+
reason: this.reason,
|
|
56
|
+
action: this.action,
|
|
57
|
+
invocation: this.invocation,
|
|
58
|
+
governanceResult: this.governanceResult,
|
|
59
|
+
output: outcome.output,
|
|
60
|
+
error: outcome.error,
|
|
61
|
+
trace,
|
|
62
|
+
};
|
|
63
|
+
this.finalized = true;
|
|
64
|
+
return this.finalResult;
|
|
65
|
+
}
|
|
66
|
+
finalizeDenied(trace) {
|
|
67
|
+
this.finalResult = {
|
|
68
|
+
allowed: false,
|
|
69
|
+
reason: this.reason,
|
|
70
|
+
action: this.action,
|
|
71
|
+
invocation: this.invocation,
|
|
72
|
+
governanceResult: this.governanceResult,
|
|
73
|
+
trace,
|
|
74
|
+
};
|
|
75
|
+
this.finalized = true;
|
|
76
|
+
return this.finalResult;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
exports.FrameworkInvocationHandle = FrameworkInvocationHandle;
|
|
80
|
+
class GenericFrameworkAdapter {
|
|
81
|
+
client;
|
|
82
|
+
metrics;
|
|
83
|
+
actionPrefix;
|
|
84
|
+
actionResolver;
|
|
85
|
+
constructor(client, options = {}) {
|
|
86
|
+
this.client = client;
|
|
87
|
+
this.metrics = options.metrics;
|
|
88
|
+
this.actionPrefix = options.actionPrefix ?? 'framework';
|
|
89
|
+
this.actionResolver = options.actionResolver;
|
|
90
|
+
}
|
|
91
|
+
async beginInvocation(invocation) {
|
|
92
|
+
const action = this.resolveAction(invocation);
|
|
93
|
+
const canonicalAgentId = this.client.identity.did;
|
|
94
|
+
const assertedAgentId = invocation.agentId;
|
|
95
|
+
const normalizedInvocation = {
|
|
96
|
+
...invocation,
|
|
97
|
+
agentId: canonicalAgentId,
|
|
98
|
+
};
|
|
99
|
+
const identityMismatchReason = assertedAgentId && assertedAgentId !== canonicalAgentId
|
|
100
|
+
? `Caller-asserted agentId "${assertedAgentId}" does not match bound client identity "${canonicalAgentId}"`
|
|
101
|
+
: undefined;
|
|
102
|
+
const capture = new metrics_1.TraceCapture(canonicalAgentId, stringifyOutput(normalizedInvocation.input ?? {}));
|
|
103
|
+
const span = capture.startSpan(normalizedInvocation.name, normalizedInvocation.kind ?? 'internal', normalizedInvocation.input, undefined, {
|
|
104
|
+
...(normalizedInvocation.attributes ?? {}),
|
|
105
|
+
...(assertedAgentId ? { assertedAgentId } : {}),
|
|
106
|
+
});
|
|
107
|
+
const skillAuditMetadata = buildSkillAuditMetadata(normalizedInvocation.trustedSkillMetadata, normalizedInvocation.input);
|
|
108
|
+
const governanceResult = identityMismatchReason
|
|
109
|
+
? this.rejectIdentityMismatch(action, canonicalAgentId, identityMismatchReason)
|
|
110
|
+
: await this.client.executeWithGovernance(action, normalizedInvocation.input ?? {}, skillAuditMetadata);
|
|
111
|
+
this.metrics?.recordPolicyDecision(governanceResult.decision, governanceResult.executionTime, {
|
|
112
|
+
action,
|
|
113
|
+
invocationKind: normalizedInvocation.kind ?? 'internal',
|
|
114
|
+
});
|
|
115
|
+
this.metrics?.recordTrustScore(canonicalAgentId, governanceResult.trustScore.overall);
|
|
116
|
+
this.metrics?.recordAuditEntry(this.client.audit.length);
|
|
117
|
+
const allowed = governanceResult.decision === 'allow';
|
|
118
|
+
const reason = identityMismatchReason ?? toReason(action, governanceResult);
|
|
119
|
+
const handle = new FrameworkInvocationHandle(normalizedInvocation, action, allowed, reason, governanceResult, capture, span.spanId, this.metrics);
|
|
120
|
+
if (!allowed) {
|
|
121
|
+
capture.finishSpan(span.spanId, 'error', undefined, reason);
|
|
122
|
+
const trace = capture.finish(undefined, false);
|
|
123
|
+
this.metrics?.recordTrace(trace);
|
|
124
|
+
handle.finalizeDenied(trace);
|
|
125
|
+
}
|
|
126
|
+
return handle;
|
|
127
|
+
}
|
|
128
|
+
async run(invocation, handler) {
|
|
129
|
+
const handle = await this.beginInvocation(invocation);
|
|
130
|
+
if (!handle.allowed) {
|
|
131
|
+
return handle.toResult();
|
|
132
|
+
}
|
|
133
|
+
try {
|
|
134
|
+
const output = await handler();
|
|
135
|
+
return handle.complete({ output });
|
|
136
|
+
}
|
|
137
|
+
catch (error) {
|
|
138
|
+
return handle.complete({
|
|
139
|
+
error: error instanceof Error ? error.message : 'Unknown framework handler error',
|
|
140
|
+
status: 'error',
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
resolveAction(invocation) {
|
|
145
|
+
if (invocation.action) {
|
|
146
|
+
return invocation.action;
|
|
147
|
+
}
|
|
148
|
+
if (this.actionResolver) {
|
|
149
|
+
return this.actionResolver(invocation);
|
|
150
|
+
}
|
|
151
|
+
return `${this.actionPrefix}.${invocation.kind ?? 'internal'}.${invocation.name}`;
|
|
152
|
+
}
|
|
153
|
+
rejectIdentityMismatch(action, agentId, reason) {
|
|
154
|
+
const auditEntry = this.client.audit.log({
|
|
155
|
+
agentId,
|
|
156
|
+
action,
|
|
157
|
+
decision: 'deny',
|
|
158
|
+
});
|
|
159
|
+
this.client.trust.recordFailure(agentId);
|
|
160
|
+
return {
|
|
161
|
+
decision: 'deny',
|
|
162
|
+
trustScore: this.client.trust.getTrustScore(agentId),
|
|
163
|
+
auditEntry,
|
|
164
|
+
executionTime: 0,
|
|
165
|
+
lifecycleState: this.client.lifecycle.state,
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
exports.GenericFrameworkAdapter = GenericFrameworkAdapter;
|
|
170
|
+
function toReason(action, governanceResult) {
|
|
171
|
+
if (governanceResult.ringViolation) {
|
|
172
|
+
return governanceResult.ringViolation.message;
|
|
173
|
+
}
|
|
174
|
+
if (governanceResult.decision === 'review') {
|
|
175
|
+
return `Governance review required for action "${action}"`;
|
|
176
|
+
}
|
|
177
|
+
if (governanceResult.decision === 'deny') {
|
|
178
|
+
return `Governance denied action "${action}"`;
|
|
179
|
+
}
|
|
180
|
+
return `Governance allowed action "${action}"`;
|
|
181
|
+
}
|
|
182
|
+
function normalizeOutput(output) {
|
|
183
|
+
if (output === undefined) {
|
|
184
|
+
return undefined;
|
|
185
|
+
}
|
|
186
|
+
if (output !== null && typeof output === 'object' && !Array.isArray(output)) {
|
|
187
|
+
return output;
|
|
188
|
+
}
|
|
189
|
+
return {
|
|
190
|
+
value: output,
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
function stringifyOutput(output) {
|
|
194
|
+
try {
|
|
195
|
+
return JSON.stringify(output);
|
|
196
|
+
}
|
|
197
|
+
catch {
|
|
198
|
+
return String(output);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
function hashContext(context) {
|
|
202
|
+
if (context === undefined || context === null) {
|
|
203
|
+
return undefined;
|
|
204
|
+
}
|
|
205
|
+
try {
|
|
206
|
+
const canonical = stableStringify(context);
|
|
207
|
+
return (0, crypto_1.createHash)('sha256')
|
|
208
|
+
.update(canonical, 'utf8')
|
|
209
|
+
.digest('hex');
|
|
210
|
+
}
|
|
211
|
+
catch {
|
|
212
|
+
// Fail-safe: non-canonical payloads should not produce hashes.
|
|
213
|
+
return undefined;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
function stableStringify(value) {
|
|
217
|
+
return JSON.stringify(sortKeys(value));
|
|
218
|
+
}
|
|
219
|
+
function sortKeys(value) {
|
|
220
|
+
if (Array.isArray(value)) {
|
|
221
|
+
return value.map(sortKeys);
|
|
222
|
+
}
|
|
223
|
+
if (value !== null &&
|
|
224
|
+
typeof value === 'object') {
|
|
225
|
+
return Object.keys(value)
|
|
226
|
+
.sort()
|
|
227
|
+
.reduce((acc, key) => {
|
|
228
|
+
acc[key] = sortKeys(value[key]);
|
|
229
|
+
return acc;
|
|
230
|
+
}, {});
|
|
231
|
+
}
|
|
232
|
+
return value;
|
|
233
|
+
}
|
|
234
|
+
function buildSkillAuditMetadata(trusted, contextBefore, contextAfter) {
|
|
235
|
+
const contextHashBefore = hashContext(contextBefore);
|
|
236
|
+
const contextHashAfter = hashContext(contextAfter);
|
|
237
|
+
if (!trusted?.skillName &&
|
|
238
|
+
!trusted?.skillOrigin &&
|
|
239
|
+
!contextHashBefore &&
|
|
240
|
+
!contextHashAfter) {
|
|
241
|
+
return undefined;
|
|
242
|
+
}
|
|
243
|
+
return {
|
|
244
|
+
skillName: trusted?.skillName,
|
|
245
|
+
skillOrigin: trusted?.skillOrigin,
|
|
246
|
+
provenanceSourceTrust: trusted?.skillName || trusted?.skillOrigin
|
|
247
|
+
? 'trusted'
|
|
248
|
+
: undefined,
|
|
249
|
+
contextHashBefore,
|
|
250
|
+
contextHashAfter,
|
|
251
|
+
};
|
|
252
|
+
}
|
|
253
|
+
//# sourceMappingURL=framework-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"framework-adapter.js","sourceRoot":"","sources":["../src/framework-adapter.ts"],"names":[],"mappings":"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"}
|