witnora 0.8.1 → 0.9.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/README.md +275 -12
- package/dist/artifact-manifest.js +37 -0
- package/dist/artifact-validation.js +102 -0
- package/dist/badge.js +31 -0
- package/dist/browser-adapter.js +156 -0
- package/dist/bundle.js +100 -0
- package/dist/cli.js +971 -0
- package/dist/command-help.js +71 -0
- package/dist/companion-artifacts.js +170 -0
- package/dist/conformance.js +115 -0
- package/dist/control-plane.js +409 -0
- package/dist/corpus-governance.js +126 -0
- package/dist/corpus-store.js +239 -0
- package/dist/corpus.js +438 -0
- package/dist/credentials.js +127 -0
- package/dist/evidence-signing.js +85 -0
- package/dist/failure-review.js +188 -0
- package/dist/guided-setup.js +101 -0
- package/dist/index.js +16 -0
- package/dist/lab.js +323 -0
- package/dist/local-server.js +491 -0
- package/dist/monitor.js +100 -0
- package/dist/normalizers.js +265 -0
- package/dist/onboarding-templates.js +158 -0
- package/dist/release-gate.js +457 -0
- package/dist/report.js +165 -0
- package/dist/runner.js +349 -0
- package/dist/sandbox.js +424 -0
- package/dist/schema-validator.js +503 -0
- package/dist/try.js +135 -0
- package/dist/types.js +3 -0
- package/dist/vendor/onegent-runtime/browser-adapter-kit.d.ts +107 -0
- package/dist/vendor/onegent-runtime/browser-adapter-kit.d.ts.map +1 -0
- package/dist/vendor/onegent-runtime/browser-adapter-kit.js +187 -0
- package/dist/vendor/onegent-runtime/browser-enforcement-runtime.d.ts +183 -0
- package/dist/vendor/onegent-runtime/browser-enforcement-runtime.d.ts.map +1 -0
- package/dist/vendor/onegent-runtime/browser-enforcement-runtime.js +344 -0
- package/dist/vendor/onegent-runtime/controlled-adapter.d.ts +6 -0
- package/dist/vendor/onegent-runtime/controlled-adapter.d.ts.map +1 -0
- package/dist/vendor/onegent-runtime/controlled-adapter.js +40 -0
- package/dist/vendor/onegent-runtime/mock-procurement.d.ts +6 -0
- package/dist/vendor/onegent-runtime/mock-procurement.d.ts.map +1 -0
- package/dist/vendor/onegent-runtime/mock-procurement.js +33 -0
- package/dist/vendor/onegent-runtime/policies.d.ts +6 -0
- package/dist/vendor/onegent-runtime/policies.d.ts.map +1 -0
- package/dist/vendor/onegent-runtime/policies.js +109 -0
- package/dist/vendor/onegent-runtime/risk.d.ts +3 -0
- package/dist/vendor/onegent-runtime/risk.d.ts.map +1 -0
- package/dist/vendor/onegent-runtime/risk.js +54 -0
- package/dist/vendor/onegent-runtime/sandbox-adapter-kit.d.ts +45 -0
- package/dist/vendor/onegent-runtime/sandbox-adapter-kit.d.ts.map +1 -0
- package/dist/vendor/onegent-runtime/sandbox-adapter-kit.js +148 -0
- package/dist/vendor/onegent-runtime/sandbox-harness.d.ts +167 -0
- package/dist/vendor/onegent-runtime/sandbox-harness.d.ts.map +1 -0
- package/dist/vendor/onegent-runtime/sandbox-harness.js +729 -0
- package/dist/vendor/onegent-runtime/sandbox-hosted.d.ts +77 -0
- package/dist/vendor/onegent-runtime/sandbox-hosted.d.ts.map +1 -0
- package/dist/vendor/onegent-runtime/sandbox-hosted.js +152 -0
- package/dist/vendor/onegent-runtime/sdk.d.ts +29 -0
- package/dist/vendor/onegent-runtime/sdk.d.ts.map +1 -0
- package/dist/vendor/onegent-runtime/sdk.js +140 -0
- package/dist/vendor/onegent-runtime/service.d.ts +27 -0
- package/dist/vendor/onegent-runtime/service.d.ts.map +1 -0
- package/dist/vendor/onegent-runtime/service.js +423 -0
- package/dist/vendor/onegent-runtime/store.d.ts +16 -0
- package/dist/vendor/onegent-runtime/store.d.ts.map +1 -0
- package/dist/vendor/onegent-runtime/store.js +29 -0
- package/dist/vendor/onegent-runtime/stripe-test-readonly.d.ts +79 -0
- package/dist/vendor/onegent-runtime/stripe-test-readonly.d.ts.map +1 -0
- package/dist/vendor/onegent-runtime/stripe-test-readonly.js +163 -0
- package/dist/vendor/onegent-runtime/trust-crypto.d.ts +11 -0
- package/dist/vendor/onegent-runtime/trust-crypto.d.ts.map +1 -0
- package/dist/vendor/onegent-runtime/trust-crypto.js +70 -0
- package/dist/vendor/onegent-runtime/trust-types.d.ts +163 -0
- package/dist/vendor/onegent-runtime/trust-types.d.ts.map +1 -0
- package/dist/vendor/onegent-runtime/trust-types.js +7 -0
- package/dist/vendor/onegent-runtime/trusted-recorder.d.ts +49 -0
- package/dist/vendor/onegent-runtime/trusted-recorder.d.ts.map +1 -0
- package/dist/vendor/onegent-runtime/trusted-recorder.js +347 -0
- package/dist/vendor/onegent-runtime/types.d.ts +287 -0
- package/dist/vendor/onegent-runtime/types.d.ts.map +1 -0
- package/dist/vendor/onegent-runtime/types.js +1 -0
- package/dist/vendor/onegent-runtime/vendor-sandbox-egress.d.ts +49 -0
- package/dist/vendor/onegent-runtime/vendor-sandbox-egress.d.ts.map +1 -0
- package/dist/vendor/onegent-runtime/vendor-sandbox-egress.js +152 -0
- package/package.json +33 -13
- package/bin/witnora.js +0 -3
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import { createBoundedVendorSandboxEgress, VendorSandboxEgressError, } from "./vendor-sandbox-egress.js";
|
|
2
|
+
export const STRIPE_TEST_API_ORIGIN = "https://api.stripe.com";
|
|
3
|
+
export const STRIPE_SANDBOX_TIMEOUT_MS = 5_000;
|
|
4
|
+
export const STRIPE_SANDBOX_MAX_REQUESTS_PER_MINUTE = 10;
|
|
5
|
+
export const STRIPE_PAYMENT_INTENT_RETRIEVE = "stripe.payment_intent.retrieve";
|
|
6
|
+
export const STRIPE_PAYMENT_INTENT_LIST = "stripe.payment_intent.list";
|
|
7
|
+
const STRIPE_RESOURCES = Object.freeze([
|
|
8
|
+
Object.freeze({
|
|
9
|
+
id: STRIPE_PAYMENT_INTENT_RETRIEVE,
|
|
10
|
+
method: "GET",
|
|
11
|
+
pathPattern: /^\/v1\/payment_intents\/pi_[A-Za-z0-9]{8,128}$/,
|
|
12
|
+
}),
|
|
13
|
+
Object.freeze({
|
|
14
|
+
id: STRIPE_PAYMENT_INTENT_LIST,
|
|
15
|
+
method: "GET",
|
|
16
|
+
pathPattern: /^\/v1\/payment_intents\?limit=(?:[1-9]|10)$/,
|
|
17
|
+
}),
|
|
18
|
+
]);
|
|
19
|
+
export function createStripeTestModeReadOnlyAdapter(options) {
|
|
20
|
+
const apiKey = options.restrictedApiKey.trim();
|
|
21
|
+
if (!/^rk_test_[A-Za-z0-9_]{8,}$/.test(apiKey)) {
|
|
22
|
+
throw new Error("Stripe read-only reference adapter requires an rk_test_ restricted test-mode key.");
|
|
23
|
+
}
|
|
24
|
+
const timeoutMs = options.timeoutMs ?? STRIPE_SANDBOX_TIMEOUT_MS;
|
|
25
|
+
const maxRequestsPerMinute = options.maxRequestsPerMinute ?? STRIPE_SANDBOX_MAX_REQUESTS_PER_MINUTE;
|
|
26
|
+
const egress = createBoundedVendorSandboxEgress({
|
|
27
|
+
policy: {
|
|
28
|
+
vendor: "stripe",
|
|
29
|
+
allowedOrigin: STRIPE_TEST_API_ORIGIN,
|
|
30
|
+
resources: STRIPE_RESOURCES,
|
|
31
|
+
timeoutMs,
|
|
32
|
+
maxRequestsPerMinute,
|
|
33
|
+
},
|
|
34
|
+
fetch: options.fetch,
|
|
35
|
+
now: options.now,
|
|
36
|
+
});
|
|
37
|
+
const get = (resource, path) => egress.requestJson({
|
|
38
|
+
resource,
|
|
39
|
+
method: "GET",
|
|
40
|
+
path,
|
|
41
|
+
headers: {
|
|
42
|
+
authorization: `Bearer ${apiKey}`,
|
|
43
|
+
accept: "application/json",
|
|
44
|
+
"user-agent": "agentcert-onegent-runtime/stripe-sandbox-readonly-v0.4",
|
|
45
|
+
},
|
|
46
|
+
});
|
|
47
|
+
return Object.freeze({
|
|
48
|
+
name: "stripe-test-mode-readonly",
|
|
49
|
+
safety: Object.freeze({
|
|
50
|
+
mode: "sandbox",
|
|
51
|
+
access: "read-only",
|
|
52
|
+
vendor: "stripe",
|
|
53
|
+
allowedOrigins: Object.freeze([STRIPE_TEST_API_ORIGIN]),
|
|
54
|
+
allowedMethods: Object.freeze(["GET"]),
|
|
55
|
+
allowedResources: Object.freeze([STRIPE_PAYMENT_INTENT_RETRIEVE, STRIPE_PAYMENT_INTENT_LIST]),
|
|
56
|
+
timeoutMs,
|
|
57
|
+
maxRequestsPerMinute,
|
|
58
|
+
}),
|
|
59
|
+
retrievePaymentIntent: async (id) => {
|
|
60
|
+
if (!/^pi_[A-Za-z0-9]{8,128}$/.test(id))
|
|
61
|
+
throw new Error("Stripe PaymentIntent ID is invalid.");
|
|
62
|
+
return paymentIntentSnapshot(await get(STRIPE_PAYMENT_INTENT_RETRIEVE, `/v1/payment_intents/${encodeURIComponent(id)}`));
|
|
63
|
+
},
|
|
64
|
+
listPaymentIntents: async (limit = 10) => {
|
|
65
|
+
if (!Number.isSafeInteger(limit) || limit < 1 || limit > 10)
|
|
66
|
+
throw new Error("Stripe read-only list limit must be an integer from 1 to 10.");
|
|
67
|
+
const payload = await get(STRIPE_PAYMENT_INTENT_LIST, `/v1/payment_intents?limit=${limit}`);
|
|
68
|
+
if (!isRecord(payload) || payload.object !== "list" || !Array.isArray(payload.data)) {
|
|
69
|
+
throw new Error("Stripe returned an invalid PaymentIntent list response.");
|
|
70
|
+
}
|
|
71
|
+
return payload.data.map(paymentIntentSnapshot);
|
|
72
|
+
},
|
|
73
|
+
getRequestAudit: () => egress.getAuditLog(),
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
export async function runStripeSandboxReadOnlyCertification(options) {
|
|
77
|
+
const generatedAt = new Date((options.now ?? Date.now)()).toISOString();
|
|
78
|
+
const timeoutMs = options.timeoutMs ?? STRIPE_SANDBOX_TIMEOUT_MS;
|
|
79
|
+
const maxRequestsPerMinute = options.maxRequestsPerMinute ?? STRIPE_SANDBOX_MAX_REQUESTS_PER_MINUTE;
|
|
80
|
+
const checks = [];
|
|
81
|
+
let adapter;
|
|
82
|
+
let observation;
|
|
83
|
+
try {
|
|
84
|
+
adapter = createStripeTestModeReadOnlyAdapter(options);
|
|
85
|
+
checks.push(passed("restricted-test-key", "Credential format is restricted to Stripe rk_test_ keys and is not retained."), passed("fixed-egress-policy", "Egress is fixed to Stripe HTTPS, GET, and allowlisted PaymentIntent resources."));
|
|
86
|
+
observation = await adapter.retrievePaymentIntent(options.paymentIntentId);
|
|
87
|
+
checks.push(passed("bounded-read", "The allowlisted PaymentIntent read completed within the configured bounds."), passed("test-mode-response", "Stripe explicitly returned livemode=false."), passed("evidence-redaction", "The evidence snapshot excludes credentials, client_secret, metadata, and raw response bytes."));
|
|
88
|
+
}
|
|
89
|
+
catch (error) {
|
|
90
|
+
if (!adapter) {
|
|
91
|
+
checks.push(failed("restricted-test-key", "A valid Stripe rk_test_ restricted test-mode key was not available."), failed("fixed-egress-policy", "The request was not attempted because credential validation failed."));
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
checks.push(failed("bounded-read", safeStripeFailure(error)));
|
|
95
|
+
}
|
|
96
|
+
checks.push(failed("test-mode-response", "No validated Stripe test-mode observation was produced."), failed("evidence-redaction", "No successful redacted observation was produced."));
|
|
97
|
+
}
|
|
98
|
+
const passedCount = checks.filter((check) => check.status === "passed").length;
|
|
99
|
+
const report = {
|
|
100
|
+
schemaVersion: "agentcert.sandbox_vendor_egress.v0.4",
|
|
101
|
+
kind: "agentcert.sandbox_vendor_egress",
|
|
102
|
+
implementation: "stripe-payment-intent-readonly",
|
|
103
|
+
vendor: "stripe",
|
|
104
|
+
environment: "sandbox",
|
|
105
|
+
generatedAt,
|
|
106
|
+
verdict: { passed: passedCount === checks.length, score: Math.round((passedCount / checks.length) * 100) },
|
|
107
|
+
summary: { passed: passedCount, failed: checks.length - passedCount, total: checks.length },
|
|
108
|
+
checks,
|
|
109
|
+
policy: {
|
|
110
|
+
allowedOrigins: [STRIPE_TEST_API_ORIGIN],
|
|
111
|
+
allowedMethods: ["GET"],
|
|
112
|
+
allowedResources: [STRIPE_PAYMENT_INTENT_RETRIEVE, STRIPE_PAYMENT_INTENT_LIST],
|
|
113
|
+
timeoutMs,
|
|
114
|
+
maxRequestsPerMinute,
|
|
115
|
+
},
|
|
116
|
+
audit: adapter?.getRequestAudit() ?? [],
|
|
117
|
+
...(observation ? { observation } : {}),
|
|
118
|
+
disclaimer: "Stripe sandbox read-only evidence proves this bounded test-mode observation only. It does not authorize writes, attest Stripe controls, or certify production behavior.",
|
|
119
|
+
};
|
|
120
|
+
return structuredClone(report);
|
|
121
|
+
}
|
|
122
|
+
function paymentIntentSnapshot(value) {
|
|
123
|
+
if (!isRecord(value) || value.object !== "payment_intent" || typeof value.id !== "string") {
|
|
124
|
+
throw new Error("Stripe returned an invalid PaymentIntent response.");
|
|
125
|
+
}
|
|
126
|
+
if (value.livemode !== false)
|
|
127
|
+
throw new Error("Stripe read-only adapter refuses responses that are not explicitly test mode.");
|
|
128
|
+
return {
|
|
129
|
+
id: value.id,
|
|
130
|
+
object: "payment_intent",
|
|
131
|
+
livemode: false,
|
|
132
|
+
...numberField(value, "amount", "amount"),
|
|
133
|
+
...numberField(value, "amount_capturable", "amountCapturable"),
|
|
134
|
+
...numberField(value, "amount_received", "amountReceived"),
|
|
135
|
+
...stringField(value, "currency", "currency"),
|
|
136
|
+
...stringField(value, "status", "status"),
|
|
137
|
+
...numberField(value, "created", "created"),
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
function safeStripeFailure(error) {
|
|
141
|
+
if (error instanceof VendorSandboxEgressError)
|
|
142
|
+
return `Stripe sandbox read failed (${error.code}).`;
|
|
143
|
+
if (error instanceof Error && error.message.includes("not explicitly test mode"))
|
|
144
|
+
return "Stripe response was not explicitly test mode.";
|
|
145
|
+
if (error instanceof Error && error.message.includes("invalid PaymentIntent"))
|
|
146
|
+
return "Stripe returned an invalid PaymentIntent response.";
|
|
147
|
+
return "Stripe sandbox read failed before a validated observation was produced.";
|
|
148
|
+
}
|
|
149
|
+
function passed(id, message) {
|
|
150
|
+
return { id, status: "passed", message };
|
|
151
|
+
}
|
|
152
|
+
function failed(id, message) {
|
|
153
|
+
return { id, status: "failed", message };
|
|
154
|
+
}
|
|
155
|
+
function numberField(value, source, target) {
|
|
156
|
+
return typeof value[source] === "number" && Number.isFinite(value[source]) ? { [target]: value[source] } : {};
|
|
157
|
+
}
|
|
158
|
+
function stringField(value, source, target) {
|
|
159
|
+
return typeof value[source] === "string" ? { [target]: value[source] } : {};
|
|
160
|
+
}
|
|
161
|
+
function isRecord(value) {
|
|
162
|
+
return Boolean(value) && typeof value === "object" && !Array.isArray(value);
|
|
163
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { SourceSignature, SourceSigner } from "./trust-types.js";
|
|
2
|
+
export declare function canonicalJson(value: unknown): string;
|
|
3
|
+
export declare function sha256(value: string | Buffer): string;
|
|
4
|
+
export declare function publicKeyPemFor(signer: SourceSigner): string;
|
|
5
|
+
export declare function publicKeySha256(publicKeyPem: string): string;
|
|
6
|
+
export declare function signDigest(digest: string, signer: SourceSigner): SourceSignature;
|
|
7
|
+
export declare function verifyDigest(digest: string, signature: SourceSignature, publicKeyPem: string): boolean;
|
|
8
|
+
export declare function generateSourceSigner(keyId: string): SourceSigner & {
|
|
9
|
+
publicKeyPem: string;
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=trust-crypto.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trust-crypto.d.ts","sourceRoot":"","sources":["../../../../onegent-runtime/src/trust-crypto.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEtE,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAEpD;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAErD;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAG5D;AAED,wBAAgB,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAG5D;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,eAAe,CAOhF;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAOtG;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,GAAG;IAAE,YAAY,EAAE,MAAM,CAAA;CAAE,CAO3F"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { createHash, createPrivateKey, createPublicKey, generateKeyPairSync, sign, verify, } from "node:crypto";
|
|
2
|
+
export function canonicalJson(value) {
|
|
3
|
+
return JSON.stringify(canonicalValue(value));
|
|
4
|
+
}
|
|
5
|
+
export function sha256(value) {
|
|
6
|
+
return createHash("sha256").update(value).digest("hex");
|
|
7
|
+
}
|
|
8
|
+
export function publicKeyPemFor(signer) {
|
|
9
|
+
if (signer.publicKeyPem)
|
|
10
|
+
return normalizePem(signer.publicKeyPem);
|
|
11
|
+
return createPublicKey(createPrivateKey(signer.privateKeyPem)).export({ type: "spki", format: "pem" }).toString();
|
|
12
|
+
}
|
|
13
|
+
export function publicKeySha256(publicKeyPem) {
|
|
14
|
+
const der = createPublicKey(publicKeyPem).export({ type: "spki", format: "der" });
|
|
15
|
+
return sha256(der);
|
|
16
|
+
}
|
|
17
|
+
export function signDigest(digest, signer) {
|
|
18
|
+
assertDigest(digest);
|
|
19
|
+
return {
|
|
20
|
+
algorithm: "Ed25519",
|
|
21
|
+
keyId: signer.keyId,
|
|
22
|
+
signature: sign(null, Buffer.from(digest, "hex"), createPrivateKey(signer.privateKeyPem)).toString("base64url"),
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
export function verifyDigest(digest, signature, publicKeyPem) {
|
|
26
|
+
if (!/^[a-f0-9]{64}$/.test(digest) || signature.algorithm !== "Ed25519")
|
|
27
|
+
return false;
|
|
28
|
+
try {
|
|
29
|
+
return verify(null, Buffer.from(digest, "hex"), createPublicKey(publicKeyPem), Buffer.from(signature.signature, "base64url"));
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
export function generateSourceSigner(keyId) {
|
|
36
|
+
const { privateKey, publicKey } = generateKeyPairSync("ed25519");
|
|
37
|
+
return {
|
|
38
|
+
keyId,
|
|
39
|
+
privateKeyPem: privateKey.export({ type: "pkcs8", format: "pem" }).toString(),
|
|
40
|
+
publicKeyPem: publicKey.export({ type: "spki", format: "pem" }).toString(),
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
function canonicalValue(value) {
|
|
44
|
+
if (value === null || typeof value === "string" || typeof value === "boolean")
|
|
45
|
+
return value;
|
|
46
|
+
if (typeof value === "number") {
|
|
47
|
+
if (!Number.isFinite(value))
|
|
48
|
+
throw new Error("Canonical JSON does not support non-finite numbers.");
|
|
49
|
+
return Object.is(value, -0) ? 0 : value;
|
|
50
|
+
}
|
|
51
|
+
if (Array.isArray(value))
|
|
52
|
+
return value.map(canonicalValue);
|
|
53
|
+
if (value && typeof value === "object") {
|
|
54
|
+
const output = {};
|
|
55
|
+
for (const key of Object.keys(value).sort()) {
|
|
56
|
+
const child = value[key];
|
|
57
|
+
if (child !== undefined)
|
|
58
|
+
output[key] = canonicalValue(child);
|
|
59
|
+
}
|
|
60
|
+
return output;
|
|
61
|
+
}
|
|
62
|
+
throw new Error(`Canonical JSON does not support ${typeof value}.`);
|
|
63
|
+
}
|
|
64
|
+
function normalizePem(value) {
|
|
65
|
+
return createPublicKey(value).export({ type: "spki", format: "pem" }).toString();
|
|
66
|
+
}
|
|
67
|
+
function assertDigest(value) {
|
|
68
|
+
if (!/^[a-f0-9]{64}$/.test(value))
|
|
69
|
+
throw new Error("A SHA-256 hex digest is required for source signing.");
|
|
70
|
+
}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import type { ActionExecutionSummary, ActionIntent, ActionType, CreateActionIntentInput, LocalActionAdapter, VerificationResult } from "./types.js";
|
|
2
|
+
export declare const EVIDENCE_STRENGTH_LEVELS: readonly ["reported", "recorded", "enforced", "outcome_verified", "independently_reviewed"];
|
|
3
|
+
export type EvidenceStrengthLevel = (typeof EVIDENCE_STRENGTH_LEVELS)[number];
|
|
4
|
+
export interface EvidenceStrengthAssessment {
|
|
5
|
+
schemaVersion: "agentcert.evidence_strength.v0.1";
|
|
6
|
+
level: EvidenceStrengthLevel;
|
|
7
|
+
claims: string[];
|
|
8
|
+
limitations: string[];
|
|
9
|
+
}
|
|
10
|
+
export interface CollectorIdentity {
|
|
11
|
+
id: string;
|
|
12
|
+
version: string;
|
|
13
|
+
keyId: string;
|
|
14
|
+
publicKeySha256: string;
|
|
15
|
+
environment: string;
|
|
16
|
+
}
|
|
17
|
+
export interface SourceSigner {
|
|
18
|
+
keyId: string;
|
|
19
|
+
privateKeyPem: string;
|
|
20
|
+
publicKeyPem?: string;
|
|
21
|
+
}
|
|
22
|
+
export interface SourceSignature {
|
|
23
|
+
algorithm: "Ed25519";
|
|
24
|
+
keyId: string;
|
|
25
|
+
signature: string;
|
|
26
|
+
}
|
|
27
|
+
export interface ActionMandateScope {
|
|
28
|
+
actionTypes: ActionType[];
|
|
29
|
+
targetSystems: string[];
|
|
30
|
+
permissions: string[];
|
|
31
|
+
businessObjectIds?: string[];
|
|
32
|
+
recipients?: string[];
|
|
33
|
+
currencies?: string[];
|
|
34
|
+
maxAmount?: number;
|
|
35
|
+
}
|
|
36
|
+
export interface ActionMandatePayload {
|
|
37
|
+
schemaVersion: "agentcert.action_mandate.v0.1";
|
|
38
|
+
mandateId: string;
|
|
39
|
+
issuer: {
|
|
40
|
+
id: string;
|
|
41
|
+
type: "human" | "organization" | "service";
|
|
42
|
+
};
|
|
43
|
+
subject: {
|
|
44
|
+
principalId: string;
|
|
45
|
+
agentVersion?: string;
|
|
46
|
+
};
|
|
47
|
+
scope: ActionMandateScope;
|
|
48
|
+
expectedOutcome?: Record<string, unknown>;
|
|
49
|
+
policySha256: string;
|
|
50
|
+
validFrom: string;
|
|
51
|
+
expiresAt: string;
|
|
52
|
+
issuedAt: string;
|
|
53
|
+
}
|
|
54
|
+
export interface ActionMandate extends ActionMandatePayload {
|
|
55
|
+
digestSha256: string;
|
|
56
|
+
sourceSignature: SourceSignature;
|
|
57
|
+
}
|
|
58
|
+
export interface CreateActionMandateInput extends Omit<ActionMandatePayload, "schemaVersion" | "issuedAt"> {
|
|
59
|
+
issuedAt?: string;
|
|
60
|
+
}
|
|
61
|
+
export interface MandateVerification {
|
|
62
|
+
valid: boolean;
|
|
63
|
+
digestMatches: boolean;
|
|
64
|
+
signatureMatches: boolean;
|
|
65
|
+
active: boolean;
|
|
66
|
+
errors: string[];
|
|
67
|
+
}
|
|
68
|
+
export interface MandateStore {
|
|
69
|
+
readonly name: string;
|
|
70
|
+
get(mandateId: string): Promise<ActionMandate | undefined>;
|
|
71
|
+
put(mandate: ActionMandate): Promise<ActionMandate>;
|
|
72
|
+
list(): Promise<ActionMandate[]>;
|
|
73
|
+
}
|
|
74
|
+
export type TrustedRecordType = "RUN_STARTED" | "JOURNAL_RECOVERED" | "EVENTS_DROPPED" | "MANDATE_BOUND" | "ACTION_CAPTURED" | "APPROVAL_REQUESTED" | "ACTION_APPROVED" | "ACTION_REJECTED" | "EXECUTION_STARTED" | "EXECUTION_COMPLETED" | "EXECUTION_GRANT_VERIFIED" | "EXECUTION_GRANT_CLAIMED" | "EXECUTION_SESSION_STARTED" | "CREDENTIAL_LEASE_ACTIVATED" | "BROWSER_CONTEXT_CREATED" | "TARGET_NAVIGATION" | "AUTHORIZED_ACTION_PREPARED" | "FINAL_PARAMETERS_VERIFIED" | "HIGH_RISK_SUBMISSION_STARTED" | "HIGH_RISK_SUBMISSION_COMPLETED" | "TARGET_RESPONSE_OBSERVED" | "OUTCOME_PROBE_STARTED" | "CREDENTIAL_LEASE_REVOKED" | "EXECUTION_SESSION_COMPLETED" | "EXECUTION_SESSION_FAILED" | "OUTCOME_OBSERVED" | "VERIFICATION_PASSED" | "VERIFICATION_FAILED" | "RUN_COMPLETED";
|
|
75
|
+
export interface TrustedActionRecord {
|
|
76
|
+
schemaVersion: "agentcert.trusted_action_record.v0.1";
|
|
77
|
+
recordId: string;
|
|
78
|
+
runId: string;
|
|
79
|
+
sequence: number;
|
|
80
|
+
occurredAt: string;
|
|
81
|
+
type: TrustedRecordType;
|
|
82
|
+
collector: CollectorIdentity;
|
|
83
|
+
previousEventHash?: string;
|
|
84
|
+
payload: Record<string, unknown>;
|
|
85
|
+
payloadSha256: string;
|
|
86
|
+
eventHash: string;
|
|
87
|
+
sourceSignature: SourceSignature;
|
|
88
|
+
}
|
|
89
|
+
export interface JournalGap {
|
|
90
|
+
afterSequence: number;
|
|
91
|
+
beforeSequence: number;
|
|
92
|
+
missing: number;
|
|
93
|
+
declared: boolean;
|
|
94
|
+
}
|
|
95
|
+
export interface JournalValidation {
|
|
96
|
+
valid: boolean;
|
|
97
|
+
complete: boolean;
|
|
98
|
+
sourceSigned: boolean;
|
|
99
|
+
gaps: JournalGap[];
|
|
100
|
+
duplicateSequences: number[];
|
|
101
|
+
duplicateRecordIds: string[];
|
|
102
|
+
hashMismatches: number[];
|
|
103
|
+
signatureFailures: number[];
|
|
104
|
+
droppedEventCount: number;
|
|
105
|
+
recoveredTailBytes: number;
|
|
106
|
+
errors: string[];
|
|
107
|
+
}
|
|
108
|
+
export interface TrustedRunReceipt {
|
|
109
|
+
schemaVersion: "agentcert.trusted_run_receipt.v0.1";
|
|
110
|
+
runId: string;
|
|
111
|
+
collector: CollectorIdentity;
|
|
112
|
+
startedAt: string;
|
|
113
|
+
completedAt: string;
|
|
114
|
+
eventCount: number;
|
|
115
|
+
droppedEventCount: number;
|
|
116
|
+
firstEventHash: string;
|
|
117
|
+
lastEventHash: string;
|
|
118
|
+
mandateDigests: string[];
|
|
119
|
+
actionIds: string[];
|
|
120
|
+
journal: JournalValidation;
|
|
121
|
+
evidenceStrength: EvidenceStrengthAssessment;
|
|
122
|
+
sourcePublicKeyPem: string;
|
|
123
|
+
receiptSha256: string;
|
|
124
|
+
sourceSignature: SourceSignature;
|
|
125
|
+
}
|
|
126
|
+
export interface TrustedRecorderSink {
|
|
127
|
+
name: string;
|
|
128
|
+
write(record: TrustedActionRecord): Promise<void>;
|
|
129
|
+
}
|
|
130
|
+
export interface ControlledAdapterBoundary {
|
|
131
|
+
mode: "agentcert_gateway";
|
|
132
|
+
credentials: "gateway_managed";
|
|
133
|
+
bypassPrevention: "credentials_unavailable_to_agent";
|
|
134
|
+
allowedActionTypes: ActionType[];
|
|
135
|
+
allowedTargetSystems: string[];
|
|
136
|
+
}
|
|
137
|
+
export interface ControlledActionAdapter extends LocalActionAdapter {
|
|
138
|
+
control: ControlledAdapterBoundary;
|
|
139
|
+
}
|
|
140
|
+
export interface OutcomeObservation {
|
|
141
|
+
observationId: string;
|
|
142
|
+
observedAt: string;
|
|
143
|
+
observedState: Record<string, unknown>;
|
|
144
|
+
source: string;
|
|
145
|
+
}
|
|
146
|
+
export interface IndependentOutcomeProbe {
|
|
147
|
+
name: string;
|
|
148
|
+
independent: true;
|
|
149
|
+
observe(action: ActionIntent, execution: ActionExecutionSummary): Promise<OutcomeObservation>;
|
|
150
|
+
}
|
|
151
|
+
export interface TrustedActionEvidence {
|
|
152
|
+
schemaVersion: "agentcert.trusted_action_evidence.v0.1";
|
|
153
|
+
mandate: ActionMandate;
|
|
154
|
+
runReceipt: TrustedRunReceipt;
|
|
155
|
+
outcomeObservation?: OutcomeObservation;
|
|
156
|
+
verification?: VerificationResult;
|
|
157
|
+
evidenceStrength: EvidenceStrengthAssessment;
|
|
158
|
+
}
|
|
159
|
+
export interface TrustedCaptureInput {
|
|
160
|
+
action: CreateActionIntentInput;
|
|
161
|
+
mandateId: string;
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=trust-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trust-types.d.ts","sourceRoot":"","sources":["../../../../onegent-runtime/src/trust-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { CollectorIdentity, EvidenceStrengthAssessment, JournalValidation, SourceSigner, TrustedActionRecord, TrustedRecorderSink, TrustedRecordType, TrustedRunReceipt } from "./trust-types.js";
|
|
2
|
+
export interface TrustedActionRecorderOptions {
|
|
3
|
+
runId: string;
|
|
4
|
+
storageDirectory: string;
|
|
5
|
+
collector: Omit<CollectorIdentity, "keyId" | "publicKeySha256">;
|
|
6
|
+
signer: SourceSigner;
|
|
7
|
+
now?: () => Date;
|
|
8
|
+
}
|
|
9
|
+
export interface ReceiptInput {
|
|
10
|
+
mandateDigests: string[];
|
|
11
|
+
actionIds: string[];
|
|
12
|
+
evidenceStrength: EvidenceStrengthAssessment;
|
|
13
|
+
}
|
|
14
|
+
export interface TrustedRunReceiptVerification {
|
|
15
|
+
valid: boolean;
|
|
16
|
+
digestMatches: boolean;
|
|
17
|
+
signatureMatches: boolean;
|
|
18
|
+
collectorKeyMatches: boolean;
|
|
19
|
+
errors: string[];
|
|
20
|
+
}
|
|
21
|
+
export declare class TrustedActionRecorder {
|
|
22
|
+
readonly runId: string;
|
|
23
|
+
readonly journalPath: string;
|
|
24
|
+
readonly ackPath: string;
|
|
25
|
+
readonly collector: CollectorIdentity;
|
|
26
|
+
readonly sourcePublicKeyPem: string;
|
|
27
|
+
private readonly records;
|
|
28
|
+
private readonly signer;
|
|
29
|
+
private readonly now;
|
|
30
|
+
private recoveredTailBytes;
|
|
31
|
+
private ackSequence;
|
|
32
|
+
private writeChain;
|
|
33
|
+
private constructor();
|
|
34
|
+
static open(options: TrustedActionRecorderOptions): Promise<TrustedActionRecorder>;
|
|
35
|
+
start(payload?: Record<string, unknown>): Promise<TrustedActionRecord>;
|
|
36
|
+
append(type: Exclude<TrustedRecordType, "RUN_STARTED" | "RUN_COMPLETED">, payload?: Record<string, unknown>): Promise<TrustedActionRecord>;
|
|
37
|
+
recordDropped(count: number, reason: string): Promise<TrustedActionRecord>;
|
|
38
|
+
complete(payload?: Record<string, unknown>): Promise<TrustedActionRecord>;
|
|
39
|
+
validation(): JournalValidation;
|
|
40
|
+
listRecords(): TrustedActionRecord[];
|
|
41
|
+
pendingRecords(): TrustedActionRecord[];
|
|
42
|
+
flush(sink: TrustedRecorderSink): Promise<number>;
|
|
43
|
+
createReceipt(input: ReceiptInput): TrustedRunReceipt;
|
|
44
|
+
private appendAt;
|
|
45
|
+
private persistAck;
|
|
46
|
+
}
|
|
47
|
+
export declare function verifyTrustedRunReceipt(receipt: TrustedRunReceipt): TrustedRunReceiptVerification;
|
|
48
|
+
export declare function validateTrustedJournal(records: TrustedActionRecord[], publicKeyPem: string, recoveredTailBytes?: number): JournalValidation;
|
|
49
|
+
//# sourceMappingURL=trusted-recorder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trusted-recorder.d.ts","sourceRoot":"","sources":["../../../../onegent-runtime/src/trusted-recorder.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,iBAAiB,EACjB,0BAA0B,EAE1B,iBAAiB,EACjB,YAAY,EACZ,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,EACjB,iBAAiB,EAClB,MAAM,kBAAkB,CAAC;AAQ1B,MAAM,WAAW,4BAA4B;IAC3C,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,IAAI,CAAC,iBAAiB,EAAE,OAAO,GAAG,iBAAiB,CAAC,CAAC;IAChE,MAAM,EAAE,YAAY,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,gBAAgB,EAAE,0BAA0B,CAAC;CAC9C;AAED,MAAM,WAAW,6BAA6B;IAC5C,KAAK,EAAE,OAAO,CAAC;IACf,aAAa,EAAE,OAAO,CAAC;IACvB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,mBAAmB,EAAE,OAAO,CAAC;IAC7B,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,qBAAa,qBAAqB;IAa9B,QAAQ,CAAC,KAAK,EAAE,MAAM;IAZxB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,iBAAiB,CAAC;IACtC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwB;IAChD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAe;IACtC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAa;IACjC,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,UAAU,CAAoC;IAEtD,OAAO;WAuBM,IAAI,CAAC,OAAO,EAAE,4BAA4B,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAkClF,KAAK,CAAC,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAoB1E,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,iBAAiB,EAAE,aAAa,GAAG,eAAe,CAAC,EAAE,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAM9I,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAM1E,QAAQ,CAAC,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAOnF,UAAU,IAAI,iBAAiB;IAI/B,WAAW,IAAI,mBAAmB,EAAE;IAIpC,cAAc,IAAI,mBAAmB,EAAE;IAIjC,KAAK,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC;IAWvD,aAAa,CAAC,KAAK,EAAE,YAAY,GAAG,iBAAiB;YAyBvC,QAAQ;YAmCR,UAAU;CAKzB;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,iBAAiB,GAAG,6BAA6B,CAYjG;AAED,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,mBAAmB,EAAE,EAC9B,YAAY,EAAE,MAAM,EACpB,kBAAkB,SAAI,GACrB,iBAAiB,CA2DnB"}
|