@decionis/agent-safe-pipeline 0.1.3 → 0.1.4
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 +318 -16
- package/dist/Index.d.ts +1 -0
- package/dist/Index.d.ts.map +1 -1
- package/dist/Index.js +1 -0
- package/dist/Index.js.map +1 -1
- package/dist/approval/PresenceApprovalCoordinator.d.ts +25 -0
- package/dist/approval/PresenceApprovalCoordinator.d.ts.map +1 -1
- package/dist/approval/PresenceApprovalCoordinator.js +54 -6
- package/dist/approval/PresenceApprovalCoordinator.js.map +1 -1
- package/dist/audit/AuditRecorder.d.ts +122 -0
- package/dist/audit/AuditRecorder.d.ts.map +1 -0
- package/dist/audit/AuditRecorder.js +312 -0
- package/dist/audit/AuditRecorder.js.map +1 -0
- package/dist/decision/DecionisGate.d.ts +91 -2
- package/dist/decision/DecionisGate.d.ts.map +1 -1
- package/dist/decision/DecionisGate.js +793 -44
- package/dist/decision/DecionisGate.js.map +1 -1
- package/dist/decision/DecisionAuthority.d.ts +50 -1
- package/dist/decision/DecisionAuthority.d.ts.map +1 -1
- package/dist/decision/DecisionAuthority.js.map +1 -1
- package/dist/decision/FixtureDecisionAuthority.d.ts +27 -1
- package/dist/decision/FixtureDecisionAuthority.d.ts.map +1 -1
- package/dist/decision/FixtureDecisionAuthority.js +47 -0
- package/dist/decision/FixtureDecisionAuthority.js.map +1 -1
- package/dist/decision/ImmutableGateDecision.d.ts.map +1 -1
- package/dist/decision/ImmutableGateDecision.js +18 -0
- package/dist/decision/ImmutableGateDecision.js.map +1 -1
- package/dist/execution/ActionRegistry.d.ts +37 -0
- package/dist/execution/ActionRegistry.d.ts.map +1 -1
- package/dist/execution/ActionRegistry.js +75 -1
- package/dist/execution/ActionRegistry.js.map +1 -1
- package/dist/execution/AuthorizationVerifier.d.ts +29 -0
- package/dist/execution/AuthorizationVerifier.d.ts.map +1 -1
- package/dist/execution/AuthorizationVerifier.js +126 -25
- package/dist/execution/AuthorizationVerifier.js.map +1 -1
- package/dist/execution/SafeExecutor.d.ts +72 -7
- package/dist/execution/SafeExecutor.d.ts.map +1 -1
- package/dist/execution/SafeExecutor.js +253 -17
- package/dist/execution/SafeExecutor.js.map +1 -1
- package/dist/intent/CanonicalIntentHasher.d.ts +1 -1
- package/dist/intent/CanonicalIntentHasher.d.ts.map +1 -1
- package/dist/intent/CanonicalIntentHasher.js +6 -2
- package/dist/intent/CanonicalIntentHasher.js.map +1 -1
- package/dist/intent/ExecutionIntent.d.ts +14 -2
- package/dist/intent/ExecutionIntent.d.ts.map +1 -1
- package/dist/intent/ExecutionIntent.js +7 -0
- package/dist/intent/ExecutionIntent.js.map +1 -1
- package/dist/intent/IntentCapture.d.ts +5 -0
- package/dist/intent/IntentCapture.d.ts.map +1 -1
- package/dist/intent/IntentCapture.js +12 -1
- package/dist/intent/IntentCapture.js.map +1 -1
- package/dist/shadow/ShadowPipeline.d.ts +75 -5
- package/dist/shadow/ShadowPipeline.d.ts.map +1 -1
- package/dist/shadow/ShadowPipeline.js +157 -7
- package/dist/shadow/ShadowPipeline.js.map +1 -1
- package/dist/testing/Index.d.ts +12 -0
- package/dist/testing/Index.d.ts.map +1 -0
- package/dist/testing/Index.js +12 -0
- package/dist/testing/Index.js.map +1 -0
- package/dist/testing/LocalAuthority.d.ts +203 -0
- package/dist/testing/LocalAuthority.d.ts.map +1 -0
- package/dist/testing/LocalAuthority.js +799 -0
- package/dist/testing/LocalAuthority.js.map +1 -0
- package/dist/testing/LocalPresence.d.ts +210 -0
- package/dist/testing/LocalPresence.d.ts.map +1 -0
- package/dist/testing/LocalPresence.js +473 -0
- package/dist/testing/LocalPresence.js.map +1 -0
- package/package.json +40 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SafeExecutor.js","sourceRoot":"","sources":["../../src/execution/SafeExecutor.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SafeExecutor.js","sourceRoot":"","sources":["../../src/execution/SafeExecutor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type AuthorityIntentBinding, type CapturedIntent, type ExecutionIntent } from "./ExecutionIntent.js";
|
|
2
2
|
import type { JsonValue } from "./JsonValue.js";
|
|
3
3
|
export interface CanonicalLimits {
|
|
4
4
|
readonly maxDepth: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CanonicalIntentHasher.d.ts","sourceRoot":"","sources":["../../src/intent/CanonicalIntentHasher.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"CanonicalIntentHasher.d.ts","sourceRoot":"","sources":["../../src/intent/CanonicalIntentHasher.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,sBAAsB,EAC3B,KAAK,cAAc,EACnB,KAAK,eAAe,EACrB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAIhD,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,qBAAa,qBAAqB;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;gBAEtB,MAAM,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC;IAS7C,OAAO,CAAC,MAAM,EAAE,eAAe,GAAG,cAAc;IAqBhD,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;WAoDjC,SAAS,CAAC,MAAM,EAAE,eAAe,GAAG,sBAAsB;WAiC1D,SAAS,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM;IAIjD,OAAO,CAAC,MAAM,CAAC,YAAY;IAW3B,OAAO,CAAC,MAAM,CAAC,UAAU;IAUzB,OAAO,CAAC,aAAa;CAoBtB"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { createHash } from "node:crypto";
|
|
2
|
+
import { RESERVED_CONTEXT_IDEMPOTENCY_KEY, } from "./ExecutionIntent.js";
|
|
2
3
|
const FORBIDDEN_KEYS = new Set(["__proto__", "constructor", "prototype"]);
|
|
3
4
|
export class CanonicalIntentHasher {
|
|
4
5
|
limits;
|
|
@@ -85,7 +86,6 @@ export class CanonicalIntentHasher {
|
|
|
85
86
|
protocol_version: intent.version,
|
|
86
87
|
tenant_id: intent.tenantId,
|
|
87
88
|
intent_id: intent.intentId,
|
|
88
|
-
idempotency_key: intent.idempotencyKey,
|
|
89
89
|
captured_at: intent.capturedAt,
|
|
90
90
|
expires_at: intent.expiresAt,
|
|
91
91
|
actor: {
|
|
@@ -99,10 +99,14 @@ export class CanonicalIntentHasher {
|
|
|
99
99
|
resource: intent.target,
|
|
100
100
|
parameters: intent.parameters,
|
|
101
101
|
},
|
|
102
|
-
context
|
|
102
|
+
// The idempotency key stays hash-bound by riding in the trusted context.
|
|
103
|
+
context: { ...intent.context, [RESERVED_CONTEXT_IDEMPOTENCY_KEY]: intent.idempotencyKey },
|
|
103
104
|
downstream_target: {
|
|
104
105
|
system: intent.downstreamTarget.system,
|
|
105
106
|
operation: intent.downstreamTarget.operation,
|
|
107
|
+
...(intent.downstreamTarget.environment === undefined
|
|
108
|
+
? {}
|
|
109
|
+
: { environment: intent.downstreamTarget.environment }),
|
|
106
110
|
...(intent.downstreamTarget.endpoint === undefined
|
|
107
111
|
? {}
|
|
108
112
|
: { endpoint: intent.downstreamTarget.endpoint }),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CanonicalIntentHasher.js","sourceRoot":"","sources":["../../src/intent/CanonicalIntentHasher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"CanonicalIntentHasher.js","sourceRoot":"","sources":["../../src/intent/CanonicalIntentHasher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EACL,gCAAgC,GAIjC,MAAM,sBAAsB,CAAC;AAG9B,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC,CAAC;AAS1E,MAAM,OAAO,qBAAqB;IACf,MAAM,CAAkB;IAEzC,YAAmB,MAAiC;QAClD,IAAI,CAAC,MAAM,GAAG;YACZ,QAAQ,EAAE,MAAM,EAAE,QAAQ,IAAI,EAAE;YAChC,UAAU,EAAE,MAAM,EAAE,UAAU,IAAI,KAAK;YACvC,cAAc,EAAE,MAAM,EAAE,cAAc,IAAI,KAAK;YAC/C,QAAQ,EAAE,MAAM,EAAE,QAAQ,IAAI,GAAG,GAAG,IAAI;SACzC,CAAC;IACJ,CAAC;IAEM,OAAO,CAAC,MAAuB;QACpC,MAAM,OAAO,GAAG,qBAAqB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACxD,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,IAAI,CAAC,aAAa,CAAC,OAA+B,EAAE,CAAC,EAAE,GAAG,EAAE;YAC1D,OAAO,IAAI,CAAC,CAAC;YACb,IAAI,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;gBACrC,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;YACxC,CAAC;QACH,CAAC,CAAC,CAAC;QACH,MAAM,eAAe,GAAG,qBAAqB,CAAC,SAAS,CAAC,OAA+B,CAAC,CAAC;QACzF,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;QAC9D,IAAI,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;QAC3E,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAClF,OAAO,MAAM,CAAC,MAAM,CAAC;YACnB,MAAM,EAAE,qBAAqB,CAAC,UAAU,CAAC,MAAM,CAAC;YAChD,eAAe;YACf,UAAU,EAAE,UAAU,MAAM,EAAE;YAC9B,UAAU;SACX,CAAC,CAAC;IACL,CAAC;IAEM,kBAAkB,CAAC,KAAc;QACtC,MAAM,OAAO,GAIR,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QAC3C,MAAM,SAAS,GAAG,IAAI,OAAO,EAAU,CAAC;QACxC,IAAI,OAAO,GAAG,CAAC,CAAC;QAEhB,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;YAC9B,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,CAAC,KAAK,KAAK,IAAI,IAAI,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;gBACzF,SAAS;YACX,CAAC;YACD,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBACpB,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBAChC,SAAS;YACX,CAAC;YACD,IAAI,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ;gBAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;YAC7E,IAAI,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;YACnE,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAC7B,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;YAE5E,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACjC,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;oBACtD,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;gBAC5C,CAAC;gBACD,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;oBAClC,OAAO,IAAI,CAAC,CAAC;oBACb,IAAI,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU;wBAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;oBAC5E,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,GAAG,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;gBAC3E,CAAC;gBACD,SAAS;YACX,CAAC;YAED,MAAM,SAAS,GAAG,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,CAAY,CAAC;YAClE,IAAI,SAAS,KAAK,MAAM,CAAC,SAAS,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;gBACzD,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;YACzC,CAAC;YACD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC7C,IAAI,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC;oBAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;gBAClE,OAAO,IAAI,CAAC,CAAC;gBACb,IAAI,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU;oBAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;gBAC5E,OAAO,CAAC,IAAI,CAAC;oBACX,KAAK,EAAG,OAAO,CAAC,KAAiC,CAAC,GAAG,CAAC;oBACtD,KAAK,EAAE,OAAO,CAAC,KAAK,GAAG,CAAC;oBACxB,OAAO,EAAE,KAAK;iBACf,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAEM,MAAM,CAAC,SAAS,CAAC,MAAuB;QAC7C,OAAO;YACL,gBAAgB,EAAE,MAAM,CAAC,OAAO;YAChC,SAAS,EAAE,MAAM,CAAC,QAAQ;YAC1B,SAAS,EAAE,MAAM,CAAC,QAAQ;YAC1B,WAAW,EAAE,MAAM,CAAC,UAAU;YAC9B,UAAU,EAAE,MAAM,CAAC,SAAS;YAC5B,KAAK,EAAE;gBACL,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE;gBACnB,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI;gBACvB,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;gBAChF,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;aAC3F;YACD,MAAM,EAAE;gBACN,IAAI,EAAE,MAAM,CAAC,MAAM;gBACnB,QAAQ,EAAE,MAAM,CAAC,MAAM;gBACvB,UAAU,EAAE,MAAM,CAAC,UAAU;aAC9B;YACD,yEAAyE;YACzE,OAAO,EAAE,EAAE,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC,gCAAgC,CAAC,EAAE,MAAM,CAAC,cAAc,EAAE;YACzF,iBAAiB,EAAE;gBACjB,MAAM,EAAE,MAAM,CAAC,gBAAgB,CAAC,MAAM;gBACtC,SAAS,EAAE,MAAM,CAAC,gBAAgB,CAAC,SAAS;gBAC5C,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC,WAAW,KAAK,SAAS;oBACnD,CAAC,CAAC,EAAE;oBACJ,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC;gBACzD,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC,QAAQ,KAAK,SAAS;oBAChD,CAAC,CAAC,EAAE;oBACJ,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC;aACpD;SACF,CAAC;IACJ,CAAC;IAEM,MAAM,CAAC,SAAS,CAAC,KAAgB;QACtC,OAAO,IAAI,CAAC,SAAS,CAAC,qBAAqB,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;IACnE,CAAC;IAEO,MAAM,CAAC,YAAY,CAAC,KAAgB;QAC1C,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,qBAAqB,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/F,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;QAC9D,MAAM,UAAU,GAA8B,EAAE,CAAC;QACjD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;YAC5C,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;YACzB,IAAI,KAAK,KAAK,SAAS;gBAAE,UAAU,CAAC,GAAG,CAAC,GAAG,qBAAqB,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QACvF,CAAC;QACD,OAAO,UAAU,CAAC;IACpB,CAAC;IAEO,MAAM,CAAC,UAAU,CAAI,KAAQ;QACnC,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAClE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACrB,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,KAAgC,CAAC,EAAE,CAAC;gBACpE,qBAAqB,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,aAAa,CAAC,KAAgB,EAAE,KAAa,EAAE,KAAiB;QACtE,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACrE,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAChD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;YAC5F,OAAO;QACT,CAAC;QACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,IAAI,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc;gBAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;YACzF,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE,CAAC;gBAC1B,KAAK,EAAE,CAAC;gBACR,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;YAC9C,CAAC;YACD,OAAO;QACT,CAAC;QACD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACjD,IAAI,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;YAClE,KAAK,EAAE,CAAC;YACR,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;CACF"}
|
|
@@ -14,8 +14,15 @@ export declare const IntentActorSchema: z.ZodObject<{
|
|
|
14
14
|
export declare const DownstreamTargetSchema: z.ZodObject<{
|
|
15
15
|
system: z.ZodString;
|
|
16
16
|
operation: z.ZodString;
|
|
17
|
+
environment: z.ZodOptional<z.ZodString>;
|
|
17
18
|
endpoint: z.ZodOptional<z.ZodString>;
|
|
18
19
|
}, z.core.$strict>;
|
|
20
|
+
/**
|
|
21
|
+
* The trusted idempotency key travels inside the hashed wire `context` under
|
|
22
|
+
* this reserved key, because the Decionis `ExecutionIntentBinding` contract
|
|
23
|
+
* has no top-level idempotency field and rejects unknown properties.
|
|
24
|
+
*/
|
|
25
|
+
export declare const RESERVED_CONTEXT_IDEMPOTENCY_KEY = "idempotency_key";
|
|
19
26
|
export declare const TrustedIntentContextSchema: z.ZodObject<{
|
|
20
27
|
tenantId: z.ZodString;
|
|
21
28
|
actor: z.ZodObject<{
|
|
@@ -27,6 +34,7 @@ export declare const TrustedIntentContextSchema: z.ZodObject<{
|
|
|
27
34
|
downstreamTarget: z.ZodObject<{
|
|
28
35
|
system: z.ZodString;
|
|
29
36
|
operation: z.ZodString;
|
|
37
|
+
environment: z.ZodOptional<z.ZodString>;
|
|
30
38
|
endpoint: z.ZodOptional<z.ZodString>;
|
|
31
39
|
}, z.core.$strict>;
|
|
32
40
|
context: z.ZodDefault<z.ZodType<JsonObject, unknown, z.core.$ZodTypeInternals<JsonObject, unknown>>>;
|
|
@@ -51,6 +59,7 @@ export declare const ExecutionIntentSchema: z.ZodObject<{
|
|
|
51
59
|
downstreamTarget: z.ZodObject<{
|
|
52
60
|
system: z.ZodString;
|
|
53
61
|
operation: z.ZodString;
|
|
62
|
+
environment: z.ZodOptional<z.ZodString>;
|
|
54
63
|
endpoint: z.ZodOptional<z.ZodString>;
|
|
55
64
|
}, z.core.$strict>;
|
|
56
65
|
context: z.ZodType<JsonObject, unknown, z.core.$ZodTypeInternals<JsonObject, unknown>>;
|
|
@@ -68,11 +77,11 @@ export interface CapturedIntent {
|
|
|
68
77
|
readonly intentHash: `sha256:${string}`;
|
|
69
78
|
readonly byteLength: number;
|
|
70
79
|
}
|
|
80
|
+
/** Exact wire shape of the Decionis `ExecutionIntentBinding` contract. */
|
|
71
81
|
export interface AuthorityIntentBinding {
|
|
72
82
|
readonly protocol_version: "agent-safe.intent/1";
|
|
73
83
|
readonly tenant_id: string;
|
|
74
84
|
readonly intent_id: string;
|
|
75
|
-
readonly idempotency_key: string;
|
|
76
85
|
readonly captured_at: string;
|
|
77
86
|
readonly expires_at: string;
|
|
78
87
|
readonly actor: {
|
|
@@ -86,10 +95,13 @@ export interface AuthorityIntentBinding {
|
|
|
86
95
|
readonly resource: string;
|
|
87
96
|
readonly parameters: JsonObject;
|
|
88
97
|
};
|
|
89
|
-
readonly context: JsonObject
|
|
98
|
+
readonly context: JsonObject & {
|
|
99
|
+
readonly idempotency_key: string;
|
|
100
|
+
};
|
|
90
101
|
readonly downstream_target: {
|
|
91
102
|
readonly system: string;
|
|
92
103
|
readonly operation: string;
|
|
104
|
+
readonly environment?: string;
|
|
93
105
|
readonly endpoint?: string;
|
|
94
106
|
};
|
|
95
107
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExecutionIntent.d.ts","sourceRoot":"","sources":["../../src/intent/ExecutionIntent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAoB,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAUnE,eAAO,MAAM,mBAAmB;;;;kBAMrB,CAAC;AAEZ,eAAO,MAAM,iBAAiB;;;;;kBAOnB,CAAC;AAEZ,eAAO,MAAM,sBAAsB
|
|
1
|
+
{"version":3,"file":"ExecutionIntent.d.ts","sourceRoot":"","sources":["../../src/intent/ExecutionIntent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAoB,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAUnE,eAAO,MAAM,mBAAmB;;;;kBAMrB,CAAC;AAEZ,eAAO,MAAM,iBAAiB;;;;;kBAOnB,CAAC;AAEZ,eAAO,MAAM,sBAAsB;;;;;kBAOxB,CAAC;AAEZ;;;;GAIG;AACH,eAAO,MAAM,gCAAgC,oBAAoB,CAAC;AAElE,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;kBAS5B,CAAC;AAEZ,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;kBAgBvB,CAAC;AAEZ,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAChE,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAC5D,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AACtE,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAC9E,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC;IAC3C,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,UAAU,EAAE,UAAU,MAAM,EAAE,CAAC;IACxC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,0EAA0E;AAC1E,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,gBAAgB,EAAE,qBAAqB,CAAC;IACjD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE;QACd,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;KAC/B,CAAC;IACF,QAAQ,CAAC,MAAM,EAAE;QACf,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;KACjC,CAAC;IACF,QAAQ,CAAC,OAAO,EAAE,UAAU,GAAG;QAAE,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAA;KAAE,CAAC;IACpE,QAAQ,CAAC,iBAAiB,EAAE;QAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;QAC3B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAC9B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;KAC5B,CAAC;CACH"}
|
|
@@ -26,9 +26,16 @@ export const DownstreamTargetSchema = z
|
|
|
26
26
|
.object({
|
|
27
27
|
system: boundedId,
|
|
28
28
|
operation: boundedId,
|
|
29
|
+
environment: boundedId.optional(),
|
|
29
30
|
endpoint: z.string().trim().min(1).max(500).optional(),
|
|
30
31
|
})
|
|
31
32
|
.strict();
|
|
33
|
+
/**
|
|
34
|
+
* The trusted idempotency key travels inside the hashed wire `context` under
|
|
35
|
+
* this reserved key, because the Decionis `ExecutionIntentBinding` contract
|
|
36
|
+
* has no top-level idempotency field and rejects unknown properties.
|
|
37
|
+
*/
|
|
38
|
+
export const RESERVED_CONTEXT_IDEMPOTENCY_KEY = "idempotency_key";
|
|
32
39
|
export const TrustedIntentContextSchema = z
|
|
33
40
|
.object({
|
|
34
41
|
tenantId: z.string().uuid(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExecutionIntent.js","sourceRoot":"","sources":["../../src/intent/ExecutionIntent.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ExecutionIntent.js","sourceRoot":"","sources":["../../src/intent/ExecutionIntent.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
import type { AuditRecorder } from "../audit/AuditRecorder.js";
|
|
1
2
|
import { type AgentProposal, type CapturedIntent, type TrustedIntentContext } from "./ExecutionIntent.js";
|
|
2
3
|
import { CanonicalIntentHasher } from "./CanonicalIntentHasher.js";
|
|
3
4
|
export interface IntentCaptureOptions {
|
|
5
|
+
readonly audit?: AuditRecorder;
|
|
4
6
|
readonly hasher?: CanonicalIntentHasher;
|
|
5
7
|
readonly clock?: () => Date;
|
|
6
8
|
readonly createId?: () => string;
|
|
@@ -11,7 +13,10 @@ export declare class IntentCapture {
|
|
|
11
13
|
private readonly clock;
|
|
12
14
|
private readonly createId;
|
|
13
15
|
private readonly ttlSeconds;
|
|
16
|
+
private readonly audit;
|
|
14
17
|
constructor(options?: IntentCaptureOptions);
|
|
15
18
|
capture(proposalInput: AgentProposal, trustedInput: TrustedIntentContext): CapturedIntent;
|
|
19
|
+
/** Captures an intent and waits for the optional bounded audit sink once. */
|
|
20
|
+
captureAndAudit(proposalInput: AgentProposal, trustedInput: TrustedIntentContext): Promise<CapturedIntent>;
|
|
16
21
|
}
|
|
17
22
|
//# sourceMappingURL=IntentCapture.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IntentCapture.d.ts","sourceRoot":"","sources":["../../src/intent/IntentCapture.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"IntentCapture.d.ts","sourceRoot":"","sources":["../../src/intent/IntentCapture.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAKL,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,oBAAoB,EAC1B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAEnE,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,KAAK,CAAC,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,MAAM,CAAC,EAAE,qBAAqB,CAAC;IACxC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,MAAM,CAAC;IACjC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAwB;IAC/C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAa;IACnC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAe;IACxC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA4B;gBAE/B,OAAO,CAAC,EAAE,oBAAoB;IAQ1C,OAAO,CAAC,aAAa,EAAE,aAAa,EAAE,YAAY,EAAE,oBAAoB,GAAG,cAAc;IA4BhG,6EAA6E;IAChE,eAAe,CAC1B,aAAa,EAAE,aAAa,EAC5B,YAAY,EAAE,oBAAoB,GACjC,OAAO,CAAC,cAAc,CAAC;CAK3B"}
|
|
@@ -1,22 +1,27 @@
|
|
|
1
1
|
import { randomUUID } from "node:crypto";
|
|
2
|
-
import { AgentProposalSchema, ExecutionIntentSchema, TrustedIntentContextSchema, } from "./ExecutionIntent.js";
|
|
2
|
+
import { AgentProposalSchema, ExecutionIntentSchema, RESERVED_CONTEXT_IDEMPOTENCY_KEY, TrustedIntentContextSchema, } from "./ExecutionIntent.js";
|
|
3
3
|
import { CanonicalIntentHasher } from "./CanonicalIntentHasher.js";
|
|
4
4
|
export class IntentCapture {
|
|
5
5
|
hasher;
|
|
6
6
|
clock;
|
|
7
7
|
createId;
|
|
8
8
|
ttlSeconds;
|
|
9
|
+
audit;
|
|
9
10
|
constructor(options) {
|
|
10
11
|
this.hasher = options?.hasher ?? new CanonicalIntentHasher();
|
|
11
12
|
this.clock = options?.clock ?? (() => new Date());
|
|
12
13
|
this.createId = options?.createId ?? randomUUID;
|
|
13
14
|
this.ttlSeconds = Math.min(Math.max(options?.ttlSeconds ?? 60, 1), 300);
|
|
15
|
+
this.audit = options?.audit;
|
|
14
16
|
}
|
|
15
17
|
capture(proposalInput, trustedInput) {
|
|
16
18
|
this.hasher.assertInputBounded(proposalInput);
|
|
17
19
|
this.hasher.assertInputBounded(trustedInput);
|
|
18
20
|
const proposal = AgentProposalSchema.parse(proposalInput);
|
|
19
21
|
const trusted = TrustedIntentContextSchema.parse(trustedInput);
|
|
22
|
+
if (Object.hasOwn(trusted.context, RESERVED_CONTEXT_IDEMPOTENCY_KEY)) {
|
|
23
|
+
throw new Error("INTENT_CONTEXT_KEY_RESERVED");
|
|
24
|
+
}
|
|
20
25
|
const capturedAt = this.clock();
|
|
21
26
|
const expiresAt = new Date(capturedAt.valueOf() + this.ttlSeconds * 1_000);
|
|
22
27
|
const intent = ExecutionIntentSchema.parse({
|
|
@@ -36,5 +41,11 @@ export class IntentCapture {
|
|
|
36
41
|
});
|
|
37
42
|
return this.hasher.capture(intent);
|
|
38
43
|
}
|
|
44
|
+
/** Captures an intent and waits for the optional bounded audit sink once. */
|
|
45
|
+
async captureAndAudit(proposalInput, trustedInput) {
|
|
46
|
+
const captured = this.capture(proposalInput, trustedInput);
|
|
47
|
+
await this.audit?.record({ eventType: "INTENT_CAPTURED", captured });
|
|
48
|
+
return captured;
|
|
49
|
+
}
|
|
39
50
|
}
|
|
40
51
|
//# sourceMappingURL=IntentCapture.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IntentCapture.js","sourceRoot":"","sources":["../../src/intent/IntentCapture.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"IntentCapture.js","sourceRoot":"","sources":["../../src/intent/IntentCapture.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +1,83 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { AuditRecorder } from "../audit/AuditRecorder.js";
|
|
2
|
+
import type { DecisionAuthority, DecisionVerdict } from "../decision/DecisionAuthority.js";
|
|
2
3
|
import type { CapturedIntent } from "../intent/ExecutionIntent.js";
|
|
4
|
+
export type ShadowObservationStatus = "OBSERVED" | "UNAVAILABLE" | "TIMED_OUT" | "INVALID" | "ABORTED";
|
|
5
|
+
/**
|
|
6
|
+
* Non-authoritative record of what the authority would have decided.
|
|
7
|
+
*
|
|
8
|
+
* The shape deliberately has no `authorization` or `failClosed` field, so it
|
|
9
|
+
* is not structurally assignable to `GateDecision`, and it carries explicit
|
|
10
|
+
* `mode: "SHADOW"` and `authority: "OBSERVATIONAL"` markers that
|
|
11
|
+
* `SafeExecutor` rejects at runtime after any cast or JSON round trip.
|
|
12
|
+
*/
|
|
13
|
+
export interface ShadowObservation {
|
|
14
|
+
readonly mode: "SHADOW";
|
|
15
|
+
readonly authority: "OBSERVATIONAL";
|
|
16
|
+
readonly status: ShadowObservationStatus;
|
|
17
|
+
readonly intentHash: string;
|
|
18
|
+
/** Policy verdict when the authority answered; `null` when it did not or failed closed. */
|
|
19
|
+
readonly verdict: DecisionVerdict | null;
|
|
20
|
+
readonly decisionId: string | null;
|
|
21
|
+
readonly dossierId: string | null;
|
|
22
|
+
readonly reasonCodes: readonly string[];
|
|
23
|
+
/** `true` when the authority returned a grant that this pipeline discarded. */
|
|
24
|
+
readonly grantDiscarded: boolean;
|
|
25
|
+
readonly durationMs: number;
|
|
26
|
+
}
|
|
27
|
+
export type ShadowProductionOutcome<TResult> = {
|
|
28
|
+
readonly status: "COMPLETED";
|
|
29
|
+
readonly result: TResult;
|
|
30
|
+
} | {
|
|
31
|
+
readonly status: "FAILED";
|
|
32
|
+
readonly error: unknown;
|
|
33
|
+
};
|
|
34
|
+
/** Production outcome available immediately; the observation settles on its own bound. */
|
|
35
|
+
export interface ShadowRun<TResult> {
|
|
36
|
+
readonly mode: "SHADOW";
|
|
37
|
+
readonly production: ShadowProductionOutcome<TResult>;
|
|
38
|
+
readonly observation: Promise<ShadowObservation>;
|
|
39
|
+
}
|
|
3
40
|
export interface ShadowComparison<TResult> {
|
|
4
41
|
readonly mode: "SHADOW";
|
|
5
|
-
readonly
|
|
6
|
-
readonly
|
|
42
|
+
readonly production: ShadowProductionOutcome<TResult>;
|
|
43
|
+
readonly observation: ShadowObservation;
|
|
44
|
+
}
|
|
45
|
+
export interface ShadowPipelineOptions {
|
|
46
|
+
/** Optional recorder; every observation is emitted as an `OBSERVATIONAL` `SHADOW_EVALUATED` event. */
|
|
47
|
+
readonly audit?: AuditRecorder;
|
|
48
|
+
/** Independent bound on the hypothetical evaluation. Default 2000 ms, clamped to [1, 15000]. */
|
|
49
|
+
readonly timeoutMs?: number;
|
|
50
|
+
/** Injectable epoch-millisecond clock for deterministic duration tests. */
|
|
51
|
+
readonly clock?: () => number;
|
|
52
|
+
}
|
|
53
|
+
export interface ShadowObserveOptions {
|
|
54
|
+
/** Cancels the observation only; production execution is never cancelled by this pipeline. */
|
|
55
|
+
readonly signal?: AbortSignal;
|
|
7
56
|
}
|
|
57
|
+
/**
|
|
58
|
+
* Runs an existing production execution unchanged while asking an authority
|
|
59
|
+
* what it would have decided. The observation is failure-isolated, bounded,
|
|
60
|
+
* and never carries execution authority.
|
|
61
|
+
*/
|
|
8
62
|
export declare class ShadowPipeline {
|
|
9
63
|
private readonly authority;
|
|
10
|
-
|
|
11
|
-
|
|
64
|
+
private readonly audit;
|
|
65
|
+
private readonly timeoutMs;
|
|
66
|
+
private readonly clock;
|
|
67
|
+
constructor(authority: DecisionAuthority, options?: ShadowPipelineOptions);
|
|
68
|
+
/**
|
|
69
|
+
* Invokes `existingExecution` exactly once and returns as soon as it settles.
|
|
70
|
+
* Its result or thrown error is preserved verbatim. The observation promise
|
|
71
|
+
* never rejects and never delays production.
|
|
72
|
+
*/
|
|
73
|
+
observe<TResult>(captured: CapturedIntent, existingExecution: () => Promise<TResult> | TResult, options?: ShadowObserveOptions): Promise<ShadowRun<TResult>>;
|
|
74
|
+
/** `observe`, then wait for the bounded observation so both sides can be compared inline. */
|
|
75
|
+
compare<TResult>(captured: CapturedIntent, existingExecution: () => Promise<TResult> | TResult, options?: ShadowObserveOptions): Promise<ShadowComparison<TResult>>;
|
|
76
|
+
private evaluate;
|
|
77
|
+
private record;
|
|
78
|
+
private static empty;
|
|
79
|
+
/** Validates a decision from any authority; the grant, if any, is discarded and reported. */
|
|
80
|
+
private static classify;
|
|
81
|
+
private static isBoundedIdentifier;
|
|
12
82
|
}
|
|
13
83
|
//# sourceMappingURL=ShadowPipeline.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ShadowPipeline.d.ts","sourceRoot":"","sources":["../../src/shadow/ShadowPipeline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"ShadowPipeline.d.ts","sourceRoot":"","sources":["../../src/shadow/ShadowPipeline.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +1,164 @@
|
|
|
1
|
+
const DEFAULT_TIMEOUT_MS = 2_000;
|
|
2
|
+
const MAX_TIMEOUT_MS = 15_000;
|
|
3
|
+
const MAX_REASON_CODES = 50;
|
|
4
|
+
const MAX_IDENTIFIER_LENGTH = 200;
|
|
5
|
+
const VERDICTS = new Set(["ALLOW", "ESCALATE", "BLOCK"]);
|
|
6
|
+
/**
|
|
7
|
+
* Runs an existing production execution unchanged while asking an authority
|
|
8
|
+
* what it would have decided. The observation is failure-isolated, bounded,
|
|
9
|
+
* and never carries execution authority.
|
|
10
|
+
*/
|
|
1
11
|
export class ShadowPipeline {
|
|
2
12
|
authority;
|
|
3
|
-
|
|
13
|
+
audit;
|
|
14
|
+
timeoutMs;
|
|
15
|
+
clock;
|
|
16
|
+
constructor(authority, options = {}) {
|
|
4
17
|
this.authority = authority;
|
|
18
|
+
if (authority.evaluationMode === "ENFORCEMENT") {
|
|
19
|
+
throw new Error("SHADOW_AUTHORITY_MUST_BE_OBSERVATIONAL");
|
|
20
|
+
}
|
|
21
|
+
if (options.timeoutMs !== undefined && !Number.isFinite(options.timeoutMs)) {
|
|
22
|
+
throw new Error("SHADOW_TIMEOUT_INVALID");
|
|
23
|
+
}
|
|
24
|
+
this.audit = options.audit;
|
|
25
|
+
this.timeoutMs = Math.min(Math.max(options.timeoutMs ?? DEFAULT_TIMEOUT_MS, 1), MAX_TIMEOUT_MS);
|
|
26
|
+
this.clock = options.clock ?? Date.now;
|
|
5
27
|
}
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
28
|
+
/**
|
|
29
|
+
* Invokes `existingExecution` exactly once and returns as soon as it settles.
|
|
30
|
+
* Its result or thrown error is preserved verbatim. The observation promise
|
|
31
|
+
* never rejects and never delays production.
|
|
32
|
+
*/
|
|
33
|
+
async observe(captured, existingExecution, options = {}) {
|
|
34
|
+
const observation = this.evaluate(captured, options.signal);
|
|
35
|
+
let production;
|
|
36
|
+
try {
|
|
37
|
+
production = { status: "COMPLETED", result: await existingExecution() };
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
production = { status: "FAILED", error };
|
|
41
|
+
}
|
|
42
|
+
return Object.freeze({ mode: "SHADOW", production: Object.freeze(production), observation });
|
|
43
|
+
}
|
|
44
|
+
/** `observe`, then wait for the bounded observation so both sides can be compared inline. */
|
|
45
|
+
async compare(captured, existingExecution, options = {}) {
|
|
46
|
+
const run = await this.observe(captured, existingExecution, options);
|
|
47
|
+
return Object.freeze({
|
|
48
|
+
mode: "SHADOW",
|
|
49
|
+
production: run.production,
|
|
50
|
+
observation: await run.observation,
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
evaluate(captured, signal) {
|
|
54
|
+
const startedAt = this.clock();
|
|
55
|
+
const settled = new Promise((resolve) => {
|
|
56
|
+
let done = false;
|
|
57
|
+
const finish = (classified) => {
|
|
58
|
+
if (done)
|
|
59
|
+
return;
|
|
60
|
+
done = true;
|
|
61
|
+
clearTimeout(timer);
|
|
62
|
+
signal?.removeEventListener("abort", onAbort);
|
|
63
|
+
resolve(classified);
|
|
64
|
+
};
|
|
65
|
+
const onAbort = () => finish(ShadowPipeline.empty("ABORTED"));
|
|
66
|
+
const timer = setTimeout(() => finish(ShadowPipeline.empty("TIMED_OUT")), this.timeoutMs);
|
|
67
|
+
if (signal?.aborted === true) {
|
|
68
|
+
onAbort();
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
signal?.addEventListener("abort", onAbort, { once: true });
|
|
72
|
+
// Promise.resolve().then isolates a synchronously throwing authority.
|
|
73
|
+
void Promise.resolve()
|
|
74
|
+
.then(async () => await this.authority.evaluate(captured))
|
|
75
|
+
.then((decision) => finish(ShadowPipeline.classify(captured, decision)), () => finish(ShadowPipeline.empty("UNAVAILABLE")));
|
|
76
|
+
});
|
|
77
|
+
return settled.then(async (classified) => {
|
|
78
|
+
const observation = Object.freeze({
|
|
79
|
+
mode: "SHADOW",
|
|
80
|
+
authority: "OBSERVATIONAL",
|
|
81
|
+
intentHash: captured.intentHash,
|
|
82
|
+
...classified,
|
|
83
|
+
reasonCodes: Object.freeze([...classified.reasonCodes]),
|
|
84
|
+
durationMs: Math.max(0, this.clock() - startedAt),
|
|
85
|
+
});
|
|
86
|
+
await this.record(captured, observation);
|
|
87
|
+
return observation;
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
async record(captured, observation) {
|
|
91
|
+
if (this.audit === undefined)
|
|
92
|
+
return;
|
|
93
|
+
await this.audit.record({
|
|
94
|
+
eventType: "SHADOW_EVALUATED",
|
|
95
|
+
authority: "OBSERVATIONAL",
|
|
96
|
+
captured,
|
|
97
|
+
...(observation.verdict === null ? {} : { verdict: observation.verdict }),
|
|
98
|
+
...(observation.decisionId === null ? {} : { decisionId: observation.decisionId }),
|
|
99
|
+
...(observation.dossierId === null ? {} : { dossierId: observation.dossierId }),
|
|
100
|
+
reasonCodes: [`SHADOW_${observation.status}`, ...observation.reasonCodes].slice(0, MAX_REASON_CODES),
|
|
101
|
+
durationMs: observation.durationMs,
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
static empty(status, reasonCodes = []) {
|
|
105
|
+
return {
|
|
106
|
+
status,
|
|
107
|
+
verdict: null,
|
|
108
|
+
decisionId: null,
|
|
109
|
+
dossierId: null,
|
|
110
|
+
reasonCodes,
|
|
111
|
+
grantDiscarded: false,
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
/** Validates a decision from any authority; the grant, if any, is discarded and reported. */
|
|
115
|
+
static classify(captured, decision) {
|
|
116
|
+
const candidate = decision;
|
|
117
|
+
if (candidate === null ||
|
|
118
|
+
typeof candidate !== "object" ||
|
|
119
|
+
typeof candidate.verdict !== "string" ||
|
|
120
|
+
!VERDICTS.has(candidate.verdict) ||
|
|
121
|
+
!ShadowPipeline.isBoundedIdentifier(candidate.decisionId) ||
|
|
122
|
+
!(candidate.dossierId === null || ShadowPipeline.isBoundedIdentifier(candidate.dossierId)) ||
|
|
123
|
+
!Array.isArray(candidate.reasonCodes) ||
|
|
124
|
+
candidate.reasonCodes.length > MAX_REASON_CODES ||
|
|
125
|
+
!candidate.reasonCodes.every((code) => ShadowPipeline.isBoundedIdentifier(code))) {
|
|
126
|
+
return ShadowPipeline.empty("INVALID", ["SHADOW_DECISION_MALFORMED"]);
|
|
127
|
+
}
|
|
128
|
+
if (candidate.intentHash !== captured.intentHash) {
|
|
129
|
+
return ShadowPipeline.empty("INVALID", ["SHADOW_BINDING_MISMATCH"]);
|
|
130
|
+
}
|
|
131
|
+
const grantDiscarded = candidate.authorization !== null && typeof candidate.authorization === "object";
|
|
132
|
+
if (candidate.failClosed === true) {
|
|
133
|
+
// The authority did not answer the policy question; report unavailability, not a verdict.
|
|
134
|
+
return {
|
|
135
|
+
status: "UNAVAILABLE",
|
|
136
|
+
verdict: null,
|
|
137
|
+
decisionId: candidate.decisionId,
|
|
138
|
+
dossierId: candidate.dossierId,
|
|
139
|
+
reasonCodes: [...candidate.reasonCodes],
|
|
140
|
+
grantDiscarded,
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
return {
|
|
144
|
+
status: "OBSERVED",
|
|
145
|
+
verdict: candidate.verdict,
|
|
146
|
+
decisionId: candidate.decisionId,
|
|
147
|
+
dossierId: candidate.dossierId,
|
|
148
|
+
reasonCodes: [...candidate.reasonCodes],
|
|
149
|
+
grantDiscarded,
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
static isBoundedIdentifier(value) {
|
|
153
|
+
if (typeof value !== "string" || value.length < 1 || value.length > MAX_IDENTIFIER_LENGTH) {
|
|
154
|
+
return false;
|
|
155
|
+
}
|
|
156
|
+
for (let index = 0; index < value.length; index += 1) {
|
|
157
|
+
const codeUnit = value.charCodeAt(index);
|
|
158
|
+
if (codeUnit <= 0x1f || codeUnit === 0x7f)
|
|
159
|
+
return false;
|
|
160
|
+
}
|
|
161
|
+
return true;
|
|
12
162
|
}
|
|
13
163
|
}
|
|
14
164
|
//# sourceMappingURL=ShadowPipeline.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ShadowPipeline.js","sourceRoot":"","sources":["../../src/shadow/ShadowPipeline.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ShadowPipeline.js","sourceRoot":"","sources":["../../src/shadow/ShadowPipeline.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Local testing entry: loopback doubles for Decionis and Presence plus the
|
|
3
|
+
* development fixture primitives. Import from
|
|
4
|
+
* `@decionis/agent-safe-pipeline/testing`. Nothing here is production
|
|
5
|
+
* authority; the fixture authority refuses to construct under
|
|
6
|
+
* `NODE_ENV=production`, and the local servers bind only to loopback.
|
|
7
|
+
*/
|
|
8
|
+
export { FixtureAuthorizationVerifier, FixtureDecisionAuthority, createFixtureAuthorityPair, type FixtureAuthorityPair, type FixtureCommitRecord, type FixtureVerdictResolver, type UnsafeFixtureAuthorityOptions, } from "../decision/FixtureDecisionAuthority.js";
|
|
9
|
+
export { InMemoryReplayStore } from "../execution/ReplayStore.js";
|
|
10
|
+
export { LocalPresence, LOCAL_PRESENCE_API_KEY, readBody, type LocalAuthenticator, type LocalCeremonyResponse, type LocalPresenceOptions, type LocalPresenceRequestRecord, type LocalReceipt, type LocalReceiptBinding, type LocalReceiptVerification, type LocalVerificationRecord, type LocalVerificationStatus, } from "./LocalPresence.js";
|
|
11
|
+
export { AUTONOMOUS_LIMIT_MINOR, HUMAN_LIMIT_MINOR, LocalAuthority, LOCAL_AUTHORITY_API_KEY, hashBinding, stableStringify, type LocalAuthorityOptions, type LocalAuthorityPolicy, type LocalAuthorityRequestRecord, type LocalGrantRecord, type LocalManagedEscalationRecord, type LocalRouteOverride, } from "./LocalAuthority.js";
|
|
12
|
+
//# sourceMappingURL=Index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Index.d.ts","sourceRoot":"","sources":["../../src/testing/Index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EACL,4BAA4B,EAC5B,wBAAwB,EACxB,0BAA0B,EAC1B,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,sBAAsB,EAC3B,KAAK,6BAA6B,GACnC,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EACL,aAAa,EACb,sBAAsB,EACtB,QAAQ,EACR,KAAK,kBAAkB,EACvB,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,EACzB,KAAK,0BAA0B,EAC/B,KAAK,YAAY,EACjB,KAAK,mBAAmB,EACxB,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,EAC5B,KAAK,uBAAuB,GAC7B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,cAAc,EACd,uBAAuB,EACvB,WAAW,EACX,eAAe,EACf,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,EACzB,KAAK,2BAA2B,EAChC,KAAK,gBAAgB,EACrB,KAAK,4BAA4B,EACjC,KAAK,kBAAkB,GACxB,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Local testing entry: loopback doubles for Decionis and Presence plus the
|
|
3
|
+
* development fixture primitives. Import from
|
|
4
|
+
* `@decionis/agent-safe-pipeline/testing`. Nothing here is production
|
|
5
|
+
* authority; the fixture authority refuses to construct under
|
|
6
|
+
* `NODE_ENV=production`, and the local servers bind only to loopback.
|
|
7
|
+
*/
|
|
8
|
+
export { FixtureAuthorizationVerifier, FixtureDecisionAuthority, createFixtureAuthorityPair, } from "../decision/FixtureDecisionAuthority.js";
|
|
9
|
+
export { InMemoryReplayStore } from "../execution/ReplayStore.js";
|
|
10
|
+
export { LocalPresence, LOCAL_PRESENCE_API_KEY, readBody, } from "./LocalPresence.js";
|
|
11
|
+
export { AUTONOMOUS_LIMIT_MINOR, HUMAN_LIMIT_MINOR, LocalAuthority, LOCAL_AUTHORITY_API_KEY, hashBinding, stableStringify, } from "./LocalAuthority.js";
|
|
12
|
+
//# sourceMappingURL=Index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Index.js","sourceRoot":"","sources":["../../src/testing/Index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EACL,4BAA4B,EAC5B,wBAAwB,EACxB,0BAA0B,GAK3B,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EACL,aAAa,EACb,sBAAsB,EACtB,QAAQ,GAUT,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,cAAc,EACd,uBAAuB,EACvB,WAAW,EACX,eAAe,GAOhB,MAAM,qBAAqB,CAAC"}
|