@clawbureau/clawsig-sdk 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +149 -0
- package/dist/crypto.d.ts +32 -0
- package/dist/crypto.d.ts.map +1 -0
- package/dist/crypto.js +143 -0
- package/dist/crypto.js.map +1 -0
- package/dist/index.d.ts +25 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +27 -0
- package/dist/index.js.map +1 -0
- package/dist/run.d.ts +20 -0
- package/dist/run.d.ts.map +1 -0
- package/dist/run.js +502 -0
- package/dist/run.js.map +1 -0
- package/dist/types.d.ts +435 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +9 -0
- package/dist/types.js.map +1 -0
- package/package.json +57 -0
package/dist/run.js
ADDED
|
@@ -0,0 +1,502 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ClawproofRun — core SDK runtime for recording events and producing
|
|
3
|
+
* signed proof bundles from API scripts.
|
|
4
|
+
*
|
|
5
|
+
* Usage:
|
|
6
|
+
* const run = await createRun(config);
|
|
7
|
+
* await run.recordEvent({ eventType: 'run_start', payload: { task: '...' } });
|
|
8
|
+
* const { response } = await run.callLLM({ provider: 'anthropic', model: 'claude-sonnet-4-5-20250929', body });
|
|
9
|
+
* const result = await run.finalize({ inputs: [...], outputs: [...] });
|
|
10
|
+
*/
|
|
11
|
+
import { hashJsonB64u, sha256B64u, signEd25519, didFromPublicKey, randomUUID, normalizeSha256HashB64u, } from './crypto.js';
|
|
12
|
+
// ---------------------------------------------------------------------------
|
|
13
|
+
// Event hash computation (deterministic key order per adapter spec §4.2)
|
|
14
|
+
// ---------------------------------------------------------------------------
|
|
15
|
+
async function computeEventHash(entry) {
|
|
16
|
+
const canonical = {
|
|
17
|
+
event_id: entry.event_id,
|
|
18
|
+
run_id: entry.run_id,
|
|
19
|
+
event_type: entry.event_type,
|
|
20
|
+
timestamp: entry.timestamp,
|
|
21
|
+
payload_hash_b64u: entry.payload_hash_b64u,
|
|
22
|
+
prev_hash_b64u: entry.prev_hash_b64u,
|
|
23
|
+
};
|
|
24
|
+
return hashJsonB64u(canonical);
|
|
25
|
+
}
|
|
26
|
+
// ---------------------------------------------------------------------------
|
|
27
|
+
// Receipt bridging (camelCase → snake_case)
|
|
28
|
+
// ---------------------------------------------------------------------------
|
|
29
|
+
function bridgeReceipt(artifact, signerDid) {
|
|
30
|
+
const r = artifact.receipt;
|
|
31
|
+
const payload = {
|
|
32
|
+
receipt_version: '1',
|
|
33
|
+
receipt_id: randomUUID(),
|
|
34
|
+
gateway_id: r.proxyDid ?? 'clawproxy',
|
|
35
|
+
provider: r.provider,
|
|
36
|
+
model: r.model ?? artifact.model,
|
|
37
|
+
request_hash_b64u: normalizeSha256HashB64u(r.requestHash),
|
|
38
|
+
response_hash_b64u: normalizeSha256HashB64u(r.responseHash),
|
|
39
|
+
tokens_input: 0,
|
|
40
|
+
tokens_output: 0,
|
|
41
|
+
latency_ms: r.latencyMs,
|
|
42
|
+
timestamp: r.timestamp,
|
|
43
|
+
};
|
|
44
|
+
if (r.binding) {
|
|
45
|
+
payload.binding = {};
|
|
46
|
+
if (r.binding.runId)
|
|
47
|
+
payload.binding.run_id = r.binding.runId;
|
|
48
|
+
if (r.binding.eventHash)
|
|
49
|
+
payload.binding.event_hash_b64u = r.binding.eventHash;
|
|
50
|
+
if (r.binding.nonce)
|
|
51
|
+
payload.binding.nonce = r.binding.nonce;
|
|
52
|
+
if (r.binding.policyHash)
|
|
53
|
+
payload.binding.policy_hash = r.binding.policyHash;
|
|
54
|
+
if (r.binding.tokenScopeHashB64u)
|
|
55
|
+
payload.binding.token_scope_hash_b64u = r.binding.tokenScopeHashB64u;
|
|
56
|
+
}
|
|
57
|
+
return {
|
|
58
|
+
envelope_version: '1',
|
|
59
|
+
envelope_type: 'gateway_receipt',
|
|
60
|
+
payload,
|
|
61
|
+
payload_hash_b64u: '', // filled during finalize
|
|
62
|
+
hash_algorithm: 'SHA-256',
|
|
63
|
+
signature_b64u: r.signature ?? 'unsigned',
|
|
64
|
+
algorithm: 'Ed25519',
|
|
65
|
+
signer_did: signerDid,
|
|
66
|
+
issued_at: r.timestamp,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
function extractReceiptEnvelope(body) {
|
|
70
|
+
const raw = body['_receipt_envelope'];
|
|
71
|
+
if (!raw || typeof raw !== 'object')
|
|
72
|
+
return undefined;
|
|
73
|
+
const isB64u = (value) => typeof value === 'string' &&
|
|
74
|
+
value.length > 0 &&
|
|
75
|
+
/^[A-Za-z0-9_-]+$/.test(value);
|
|
76
|
+
const env = raw;
|
|
77
|
+
if (env.envelope_version !== '1')
|
|
78
|
+
return undefined;
|
|
79
|
+
if (env.envelope_type !== 'gateway_receipt')
|
|
80
|
+
return undefined;
|
|
81
|
+
if (env.algorithm !== 'Ed25519')
|
|
82
|
+
return undefined;
|
|
83
|
+
if (env.hash_algorithm !== 'SHA-256')
|
|
84
|
+
return undefined;
|
|
85
|
+
if (!isB64u(env.payload_hash_b64u))
|
|
86
|
+
return undefined;
|
|
87
|
+
if (!isB64u(env.signature_b64u))
|
|
88
|
+
return undefined;
|
|
89
|
+
if (typeof env.signer_did !== 'string' || !env.signer_did.startsWith('did:key:'))
|
|
90
|
+
return undefined;
|
|
91
|
+
if (typeof env.issued_at !== 'string' || env.issued_at.length === 0)
|
|
92
|
+
return undefined;
|
|
93
|
+
if (!env.payload || typeof env.payload !== 'object')
|
|
94
|
+
return undefined;
|
|
95
|
+
const p = env.payload;
|
|
96
|
+
if (p.receipt_version !== '1')
|
|
97
|
+
return undefined;
|
|
98
|
+
if (typeof p.receipt_id !== 'string' || p.receipt_id.length === 0)
|
|
99
|
+
return undefined;
|
|
100
|
+
if (typeof p.gateway_id !== 'string' || p.gateway_id.length === 0)
|
|
101
|
+
return undefined;
|
|
102
|
+
if (typeof p.provider !== 'string' || p.provider.length === 0)
|
|
103
|
+
return undefined;
|
|
104
|
+
if (typeof p.model !== 'string' || p.model.length === 0)
|
|
105
|
+
return undefined;
|
|
106
|
+
if (!isB64u(p.request_hash_b64u))
|
|
107
|
+
return undefined;
|
|
108
|
+
if (!isB64u(p.response_hash_b64u))
|
|
109
|
+
return undefined;
|
|
110
|
+
if (typeof p.timestamp !== 'string' || p.timestamp.length === 0)
|
|
111
|
+
return undefined;
|
|
112
|
+
return raw;
|
|
113
|
+
}
|
|
114
|
+
// ---------------------------------------------------------------------------
|
|
115
|
+
// Resource descriptor conversion (camelCase → snake_case)
|
|
116
|
+
// ---------------------------------------------------------------------------
|
|
117
|
+
function toResourceItem(r) {
|
|
118
|
+
const out = {
|
|
119
|
+
type: r.type,
|
|
120
|
+
hash_b64u: r.hashB64u,
|
|
121
|
+
};
|
|
122
|
+
if (r.contentType !== undefined)
|
|
123
|
+
out.content_type = r.contentType;
|
|
124
|
+
if (r.uri !== undefined)
|
|
125
|
+
out.uri = r.uri;
|
|
126
|
+
if (r.path !== undefined)
|
|
127
|
+
out.path = r.path;
|
|
128
|
+
if (r.sizeBytes !== undefined)
|
|
129
|
+
out.size_bytes = r.sizeBytes;
|
|
130
|
+
if (r.metadata !== undefined)
|
|
131
|
+
out.metadata = r.metadata;
|
|
132
|
+
return out;
|
|
133
|
+
}
|
|
134
|
+
// ---------------------------------------------------------------------------
|
|
135
|
+
// Run factory
|
|
136
|
+
// ---------------------------------------------------------------------------
|
|
137
|
+
/**
|
|
138
|
+
* Create a new clawsig run for recording events and producing
|
|
139
|
+
* a signed proof bundle.
|
|
140
|
+
*
|
|
141
|
+
* Each run gets a unique `run_<uuid>` identifier and manages its own
|
|
142
|
+
* event chain, receipt collection, and finalization.
|
|
143
|
+
*/
|
|
144
|
+
export async function createRun(config) {
|
|
145
|
+
const runId = `run_${randomUUID()}`;
|
|
146
|
+
const agentDid = config.agentDid ?? await didFromPublicKey(config.keyPair.publicKey);
|
|
147
|
+
const events = [];
|
|
148
|
+
const receipts = [];
|
|
149
|
+
const toolReceipts = [];
|
|
150
|
+
const sideEffectReceipts = [];
|
|
151
|
+
const humanApprovalReceipts = [];
|
|
152
|
+
// Use closure-based methods to avoid `this` binding issues in object literals.
|
|
153
|
+
async function recordEvent(input) {
|
|
154
|
+
const eventId = `evt_${randomUUID()}`;
|
|
155
|
+
const timestamp = new Date().toISOString();
|
|
156
|
+
const payloadHashB64u = await hashJsonB64u(input.payload);
|
|
157
|
+
const prevHashB64u = events.length > 0
|
|
158
|
+
? events[events.length - 1].eventHashB64u
|
|
159
|
+
: null;
|
|
160
|
+
const eventHashB64u = await computeEventHash({
|
|
161
|
+
event_id: eventId,
|
|
162
|
+
run_id: runId,
|
|
163
|
+
event_type: input.eventType,
|
|
164
|
+
timestamp,
|
|
165
|
+
payload_hash_b64u: payloadHashB64u,
|
|
166
|
+
prev_hash_b64u: prevHashB64u,
|
|
167
|
+
});
|
|
168
|
+
const event = {
|
|
169
|
+
eventId,
|
|
170
|
+
runId,
|
|
171
|
+
eventType: input.eventType,
|
|
172
|
+
timestamp,
|
|
173
|
+
payloadHashB64u,
|
|
174
|
+
prevHashB64u,
|
|
175
|
+
eventHashB64u,
|
|
176
|
+
};
|
|
177
|
+
events.push(event);
|
|
178
|
+
const binding = {
|
|
179
|
+
runId,
|
|
180
|
+
eventHash: eventHashB64u,
|
|
181
|
+
nonce: `nonce_${randomUUID()}`,
|
|
182
|
+
};
|
|
183
|
+
return { event, binding };
|
|
184
|
+
}
|
|
185
|
+
function addReceipt(artifact) {
|
|
186
|
+
receipts.push(artifact);
|
|
187
|
+
}
|
|
188
|
+
async function recordToolCall(params) {
|
|
189
|
+
const { binding } = await recordEvent({
|
|
190
|
+
eventType: 'tool_call',
|
|
191
|
+
payload: { tool_name: params.toolName, tool_version: params.toolVersion },
|
|
192
|
+
});
|
|
193
|
+
const argsHashB64u = await hashJsonB64u(params.args);
|
|
194
|
+
const resultHashB64u = await hashJsonB64u(params.result);
|
|
195
|
+
const receipt = {
|
|
196
|
+
receipt_version: '1',
|
|
197
|
+
receipt_id: `tr_${randomUUID()}`,
|
|
198
|
+
tool_name: params.toolName,
|
|
199
|
+
tool_version: params.toolVersion,
|
|
200
|
+
args_hash_b64u: argsHashB64u,
|
|
201
|
+
result_hash_b64u: resultHashB64u,
|
|
202
|
+
result_status: params.resultStatus,
|
|
203
|
+
hash_algorithm: 'SHA-256',
|
|
204
|
+
agent_did: agentDid,
|
|
205
|
+
timestamp: new Date().toISOString(),
|
|
206
|
+
latency_ms: params.latencyMs,
|
|
207
|
+
binding: {
|
|
208
|
+
run_id: binding.runId,
|
|
209
|
+
event_hash_b64u: binding.eventHash,
|
|
210
|
+
nonce: binding.nonce,
|
|
211
|
+
},
|
|
212
|
+
};
|
|
213
|
+
const artifact = {
|
|
214
|
+
type: 'tool_receipt',
|
|
215
|
+
collectedAt: new Date().toISOString(),
|
|
216
|
+
toolName: params.toolName,
|
|
217
|
+
receipt,
|
|
218
|
+
};
|
|
219
|
+
toolReceipts.push(artifact);
|
|
220
|
+
return artifact;
|
|
221
|
+
}
|
|
222
|
+
async function recordSideEffect(params) {
|
|
223
|
+
const { binding } = await recordEvent({
|
|
224
|
+
eventType: 'side_effect',
|
|
225
|
+
payload: { effect_class: params.effectClass, vendor_id: params.vendorId },
|
|
226
|
+
});
|
|
227
|
+
const targetHashB64u = await hashJsonB64u(params.target);
|
|
228
|
+
const requestHashB64u = await hashJsonB64u(params.request);
|
|
229
|
+
const responseHashB64u = await hashJsonB64u(params.response);
|
|
230
|
+
const receipt = {
|
|
231
|
+
receipt_version: '1',
|
|
232
|
+
receipt_id: `ser_${randomUUID()}`,
|
|
233
|
+
effect_class: params.effectClass,
|
|
234
|
+
target_hash_b64u: targetHashB64u,
|
|
235
|
+
vendor_id: params.vendorId,
|
|
236
|
+
request_hash_b64u: requestHashB64u,
|
|
237
|
+
response_hash_b64u: responseHashB64u,
|
|
238
|
+
response_status: params.responseStatus,
|
|
239
|
+
hash_algorithm: 'SHA-256',
|
|
240
|
+
agent_did: agentDid,
|
|
241
|
+
timestamp: new Date().toISOString(),
|
|
242
|
+
latency_ms: params.latencyMs,
|
|
243
|
+
bytes_written: params.bytesWritten,
|
|
244
|
+
binding: {
|
|
245
|
+
run_id: binding.runId,
|
|
246
|
+
event_hash_b64u: binding.eventHash,
|
|
247
|
+
nonce: binding.nonce,
|
|
248
|
+
},
|
|
249
|
+
};
|
|
250
|
+
const artifact = {
|
|
251
|
+
type: 'side_effect_receipt',
|
|
252
|
+
collectedAt: new Date().toISOString(),
|
|
253
|
+
effectClass: params.effectClass,
|
|
254
|
+
receipt,
|
|
255
|
+
};
|
|
256
|
+
sideEffectReceipts.push(artifact);
|
|
257
|
+
return artifact;
|
|
258
|
+
}
|
|
259
|
+
async function recordHumanApproval(params) {
|
|
260
|
+
const { binding } = await recordEvent({
|
|
261
|
+
eventType: 'human_approval',
|
|
262
|
+
payload: { approval_type: params.approvalType, approver_subject: params.approverSubject },
|
|
263
|
+
});
|
|
264
|
+
const scopeHashB64u = await hashJsonB64u(params.scopeClaims);
|
|
265
|
+
const planHashB64u = params.plan !== undefined ? await hashJsonB64u(params.plan) : undefined;
|
|
266
|
+
const receipt = {
|
|
267
|
+
receipt_version: '1',
|
|
268
|
+
receipt_id: `har_${randomUUID()}`,
|
|
269
|
+
approval_type: params.approvalType,
|
|
270
|
+
approver_subject: params.approverSubject,
|
|
271
|
+
approver_method: params.approverMethod,
|
|
272
|
+
agent_did: agentDid,
|
|
273
|
+
scope_hash_b64u: scopeHashB64u,
|
|
274
|
+
scope_summary: params.scopeSummary,
|
|
275
|
+
policy_hash_b64u: params.policyHashB64u,
|
|
276
|
+
minted_capability_id: params.mintedCapabilityId,
|
|
277
|
+
minted_capability_ttl_seconds: params.mintedCapabilityTtlSeconds,
|
|
278
|
+
plan_hash_b64u: planHashB64u,
|
|
279
|
+
evidence_required: params.evidenceRequired,
|
|
280
|
+
hash_algorithm: 'SHA-256',
|
|
281
|
+
timestamp: new Date().toISOString(),
|
|
282
|
+
binding: {
|
|
283
|
+
run_id: binding.runId,
|
|
284
|
+
event_hash_b64u: binding.eventHash,
|
|
285
|
+
nonce: binding.nonce,
|
|
286
|
+
},
|
|
287
|
+
};
|
|
288
|
+
const artifact = {
|
|
289
|
+
type: 'human_approval_receipt',
|
|
290
|
+
collectedAt: new Date().toISOString(),
|
|
291
|
+
approvalType: params.approvalType,
|
|
292
|
+
receipt,
|
|
293
|
+
};
|
|
294
|
+
humanApprovalReceipts.push(artifact);
|
|
295
|
+
return artifact;
|
|
296
|
+
}
|
|
297
|
+
async function callLLM(params) {
|
|
298
|
+
// Record the LLM call event to get binding context
|
|
299
|
+
const { binding } = await recordEvent({
|
|
300
|
+
eventType: 'llm_call',
|
|
301
|
+
payload: { provider: params.provider, model: params.model },
|
|
302
|
+
});
|
|
303
|
+
// Build proxy URL (aligned with clawproxy: POST /v1/proxy/:provider)
|
|
304
|
+
const proxyUrl = `${config.proxyBaseUrl.replace(/\/$/, '')}/v1/proxy/${params.provider}`;
|
|
305
|
+
// Build headers with binding context
|
|
306
|
+
const headers = {
|
|
307
|
+
'Content-Type': 'application/json',
|
|
308
|
+
'X-Run-Id': binding.runId,
|
|
309
|
+
...(binding.eventHash ? { 'X-Event-Hash': binding.eventHash } : {}),
|
|
310
|
+
...(binding.nonce ? { 'X-Idempotency-Key': binding.nonce } : {}),
|
|
311
|
+
};
|
|
312
|
+
const extra = params.headers ?? {};
|
|
313
|
+
// Upstream provider API key (recommended: X-Provider-API-Key; legacy: Authorization)
|
|
314
|
+
const providerAuth = extra['X-Provider-API-Key'] ??
|
|
315
|
+
extra['x-provider-api-key'] ??
|
|
316
|
+
extra['X-Provider-Key'] ??
|
|
317
|
+
extra['x-provider-key'] ??
|
|
318
|
+
extra['X-Provider-Authorization'] ??
|
|
319
|
+
extra['x-provider-authorization'] ??
|
|
320
|
+
extra['Authorization'] ??
|
|
321
|
+
extra['authorization'];
|
|
322
|
+
if (typeof providerAuth === 'string' && providerAuth.trim().length > 0) {
|
|
323
|
+
const raw = providerAuth.trim();
|
|
324
|
+
const m = raw.match(/^Bearer\s+/i);
|
|
325
|
+
const key = (m ? raw.slice(m[0].length) : raw).trim();
|
|
326
|
+
headers['X-Provider-API-Key'] = key;
|
|
327
|
+
}
|
|
328
|
+
// Copy through other headers (Authorization is blocked to avoid CST/provider-key ambiguity)
|
|
329
|
+
for (const [k, v] of Object.entries(extra)) {
|
|
330
|
+
const lowerK = k.toLowerCase();
|
|
331
|
+
if (lowerK === 'authorization')
|
|
332
|
+
continue;
|
|
333
|
+
if (lowerK === 'x-provider-api-key')
|
|
334
|
+
continue;
|
|
335
|
+
if (lowerK === 'x-provider-key')
|
|
336
|
+
continue;
|
|
337
|
+
if (lowerK === 'x-provider-authorization')
|
|
338
|
+
continue;
|
|
339
|
+
headers[k] = v;
|
|
340
|
+
}
|
|
341
|
+
// Proxy auth token (CST)
|
|
342
|
+
if (config.proxyToken) {
|
|
343
|
+
const raw = config.proxyToken.trim();
|
|
344
|
+
const m = raw.match(/^Bearer\s+/i);
|
|
345
|
+
const token = (m ? raw.slice(m[0].length) : raw).trim();
|
|
346
|
+
headers['X-CST'] = token;
|
|
347
|
+
}
|
|
348
|
+
const res = await fetch(proxyUrl, {
|
|
349
|
+
method: 'POST',
|
|
350
|
+
headers,
|
|
351
|
+
body: JSON.stringify(params.body),
|
|
352
|
+
});
|
|
353
|
+
const responseBody = await res.json();
|
|
354
|
+
let receipt;
|
|
355
|
+
const receiptEnvelope = extractReceiptEnvelope(responseBody);
|
|
356
|
+
// Extract receipt from _receipt field
|
|
357
|
+
if (responseBody._receipt) {
|
|
358
|
+
const rawReceipt = responseBody._receipt;
|
|
359
|
+
receipt = {
|
|
360
|
+
type: 'clawproxy_receipt',
|
|
361
|
+
collectedAt: new Date().toISOString(),
|
|
362
|
+
model: params.model,
|
|
363
|
+
receipt: rawReceipt,
|
|
364
|
+
receiptEnvelope,
|
|
365
|
+
};
|
|
366
|
+
addReceipt(receipt);
|
|
367
|
+
}
|
|
368
|
+
return {
|
|
369
|
+
response: responseBody,
|
|
370
|
+
receipt,
|
|
371
|
+
status: res.status,
|
|
372
|
+
};
|
|
373
|
+
}
|
|
374
|
+
async function finalize(options) {
|
|
375
|
+
// 1. Convert events to snake_case EventChainEntry[]
|
|
376
|
+
const eventChain = events.map((e) => ({
|
|
377
|
+
event_id: e.eventId,
|
|
378
|
+
run_id: e.runId,
|
|
379
|
+
event_type: e.eventType,
|
|
380
|
+
timestamp: e.timestamp,
|
|
381
|
+
payload_hash_b64u: e.payloadHashB64u,
|
|
382
|
+
prev_hash_b64u: e.prevHashB64u,
|
|
383
|
+
event_hash_b64u: e.eventHashB64u,
|
|
384
|
+
}));
|
|
385
|
+
// 2. Event chain root hash (first event's hash)
|
|
386
|
+
const chainRootHash = eventChain.length > 0
|
|
387
|
+
? eventChain[0].event_hash_b64u
|
|
388
|
+
: undefined;
|
|
389
|
+
// 3. Harness config hash
|
|
390
|
+
const configHash = await hashJsonB64u({
|
|
391
|
+
id: config.harness.id,
|
|
392
|
+
version: config.harness.version,
|
|
393
|
+
runtime: config.harness.runtime,
|
|
394
|
+
});
|
|
395
|
+
// 4. Bridge receipts to SignedEnvelope<GatewayReceiptPayload>
|
|
396
|
+
const bridgedReceipts = [];
|
|
397
|
+
for (const artifact of receipts) {
|
|
398
|
+
// Prefer canonical `_receipt_envelope` emitted by clawproxy when present.
|
|
399
|
+
if (artifact.receiptEnvelope) {
|
|
400
|
+
bridgedReceipts.push(artifact.receiptEnvelope);
|
|
401
|
+
continue;
|
|
402
|
+
}
|
|
403
|
+
// Fallback: bridge legacy `_receipt` into envelope shape (non-verifiable signature).
|
|
404
|
+
const envelope = bridgeReceipt(artifact, artifact.receipt.proxyDid ?? agentDid);
|
|
405
|
+
envelope.payload_hash_b64u = await hashJsonB64u(envelope.payload);
|
|
406
|
+
bridgedReceipts.push(envelope);
|
|
407
|
+
}
|
|
408
|
+
// 5. Receipts root hash
|
|
409
|
+
let receiptsRootHash;
|
|
410
|
+
if (bridgedReceipts.length > 0) {
|
|
411
|
+
const encoder = new TextEncoder();
|
|
412
|
+
const concat = bridgedReceipts.map((r) => r.payload_hash_b64u).join(':');
|
|
413
|
+
receiptsRootHash = await sha256B64u(encoder.encode(concat));
|
|
414
|
+
}
|
|
415
|
+
// 6. Generate URM
|
|
416
|
+
const urmId = `urm_${randomUUID()}`;
|
|
417
|
+
const urm = {
|
|
418
|
+
urm_version: '1',
|
|
419
|
+
urm_id: urmId,
|
|
420
|
+
run_id: runId,
|
|
421
|
+
agent_did: agentDid,
|
|
422
|
+
issued_at: new Date().toISOString(),
|
|
423
|
+
harness: {
|
|
424
|
+
id: config.harness.id,
|
|
425
|
+
version: config.harness.version,
|
|
426
|
+
runtime: config.harness.runtime,
|
|
427
|
+
config_hash_b64u: config.harness.configHash ?? configHash,
|
|
428
|
+
},
|
|
429
|
+
inputs: options.inputs.map(toResourceItem),
|
|
430
|
+
outputs: options.outputs.map(toResourceItem),
|
|
431
|
+
event_chain_root_hash_b64u: chainRootHash,
|
|
432
|
+
receipts_root_hash_b64u: receiptsRootHash,
|
|
433
|
+
metadata: options.urmMetadata,
|
|
434
|
+
};
|
|
435
|
+
// 7. URM reference for the proof bundle
|
|
436
|
+
const urmHashB64u = await hashJsonB64u(urm);
|
|
437
|
+
const urmRef = {
|
|
438
|
+
urm_version: '1',
|
|
439
|
+
urm_id: urmId,
|
|
440
|
+
resource_type: 'universal_run_manifest',
|
|
441
|
+
resource_hash_b64u: urmHashB64u,
|
|
442
|
+
};
|
|
443
|
+
// 8. Assemble proof bundle payload
|
|
444
|
+
const bundleId = `bundle_${randomUUID()}`;
|
|
445
|
+
const payload = {
|
|
446
|
+
bundle_version: '1',
|
|
447
|
+
bundle_id: bundleId,
|
|
448
|
+
agent_did: agentDid,
|
|
449
|
+
urm: urmRef,
|
|
450
|
+
event_chain: eventChain,
|
|
451
|
+
metadata: {
|
|
452
|
+
harness: {
|
|
453
|
+
id: config.harness.id,
|
|
454
|
+
version: config.harness.version,
|
|
455
|
+
runtime: config.harness.runtime,
|
|
456
|
+
config_hash_b64u: config.harness.configHash ?? configHash,
|
|
457
|
+
},
|
|
458
|
+
},
|
|
459
|
+
};
|
|
460
|
+
if (bridgedReceipts.length > 0) {
|
|
461
|
+
payload.receipts = bridgedReceipts;
|
|
462
|
+
}
|
|
463
|
+
if (toolReceipts.length > 0) {
|
|
464
|
+
payload.tool_receipts = toolReceipts.map((a) => a.receipt);
|
|
465
|
+
}
|
|
466
|
+
if (sideEffectReceipts.length > 0) {
|
|
467
|
+
payload.side_effect_receipts = sideEffectReceipts.map((a) => a.receipt);
|
|
468
|
+
}
|
|
469
|
+
if (humanApprovalReceipts.length > 0) {
|
|
470
|
+
payload.human_approval_receipts = humanApprovalReceipts.map((a) => a.receipt);
|
|
471
|
+
}
|
|
472
|
+
// 9. Compute payload hash + sign
|
|
473
|
+
const payloadHashB64u = await hashJsonB64u(payload);
|
|
474
|
+
const encoder = new TextEncoder();
|
|
475
|
+
const signatureB64u = await signEd25519(config.keyPair.privateKey, encoder.encode(payloadHashB64u));
|
|
476
|
+
// 10. Wrap in SignedEnvelope
|
|
477
|
+
const envelope = {
|
|
478
|
+
envelope_version: '1',
|
|
479
|
+
envelope_type: 'proof_bundle',
|
|
480
|
+
payload,
|
|
481
|
+
payload_hash_b64u: payloadHashB64u,
|
|
482
|
+
hash_algorithm: 'SHA-256',
|
|
483
|
+
signature_b64u: signatureB64u,
|
|
484
|
+
algorithm: 'Ed25519',
|
|
485
|
+
signer_did: agentDid,
|
|
486
|
+
issued_at: new Date().toISOString(),
|
|
487
|
+
};
|
|
488
|
+
return { envelope, urm };
|
|
489
|
+
}
|
|
490
|
+
return {
|
|
491
|
+
get runId() { return runId; },
|
|
492
|
+
get agentDid() { return agentDid; },
|
|
493
|
+
recordEvent,
|
|
494
|
+
addReceipt,
|
|
495
|
+
recordToolCall,
|
|
496
|
+
recordSideEffect,
|
|
497
|
+
recordHumanApproval,
|
|
498
|
+
callLLM,
|
|
499
|
+
finalize,
|
|
500
|
+
};
|
|
501
|
+
}
|
|
502
|
+
//# sourceMappingURL=run.js.map
|
package/dist/run.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../src/run.ts"],"names":[],"mappings":"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"}
|