@coderifts/agent-guard 4.0.0 → 4.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/dist/cjs/conditional-write.d.ts +92 -0
- package/dist/cjs/conditional-write.d.ts.map +1 -0
- package/dist/cjs/conditional-write.js +96 -0
- package/dist/cjs/conditional-write.js.map +1 -0
- package/dist/cjs/execution-proof.d.ts +13 -0
- package/dist/cjs/execution-proof.d.ts.map +1 -1
- package/dist/cjs/execution-proof.js +11 -0
- package/dist/cjs/execution-proof.js.map +1 -1
- package/dist/cjs/guard.d.ts +5 -4
- package/dist/cjs/guard.d.ts.map +1 -1
- package/dist/cjs/guard.js +110 -43
- package/dist/cjs/guard.js.map +1 -1
- package/dist/cjs/index.d.ts +3 -1
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +8 -2
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/types.d.ts +21 -2
- package/dist/cjs/types.d.ts.map +1 -1
- package/dist/cjs/with-coderifts.d.ts +6 -0
- package/dist/cjs/with-coderifts.d.ts.map +1 -1
- package/dist/cjs/with-coderifts.js +8 -0
- package/dist/cjs/with-coderifts.js.map +1 -1
- package/dist/esm/conditional-write.d.ts +92 -0
- package/dist/esm/conditional-write.d.ts.map +1 -0
- package/dist/esm/conditional-write.js +91 -0
- package/dist/esm/conditional-write.js.map +1 -0
- package/dist/esm/execution-proof.d.ts +13 -0
- package/dist/esm/execution-proof.d.ts.map +1 -1
- package/dist/esm/execution-proof.js +11 -0
- package/dist/esm/execution-proof.js.map +1 -1
- package/dist/esm/guard.d.ts +5 -4
- package/dist/esm/guard.d.ts.map +1 -1
- package/dist/esm/guard.js +110 -43
- package/dist/esm/guard.js.map +1 -1
- package/dist/esm/index.d.ts +3 -1
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +2 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/types.d.ts +21 -2
- package/dist/esm/types.d.ts.map +1 -1
- package/dist/esm/with-coderifts.d.ts +6 -0
- package/dist/esm/with-coderifts.d.ts.map +1 -1
- package/dist/esm/with-coderifts.js +8 -0
- package/dist/esm/with-coderifts.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Conditional-execution surface (reporting only — this package never writes).
|
|
3
|
+
*
|
|
4
|
+
* ACTIVE + FRESH only proves content matched at measurement time. A host that resolves
|
|
5
|
+
* then writes unconditionally still races; the conditional write itself is the host's job.
|
|
6
|
+
* We define the surface, demand it by policy, and report whether the host said it happened.
|
|
7
|
+
*
|
|
8
|
+
* Host contract (executeIfUnchanged):
|
|
9
|
+
* The host SHOULD perform writes via executeIfUnchanged(write, expected_token) (or
|
|
10
|
+
* equivalent: only apply the mutation if the resource still holds expected_token).
|
|
11
|
+
* After the attempt, the host reports on the call context:
|
|
12
|
+
* - conditional_write: true — write was conditioned on a version token
|
|
13
|
+
* - conditional_write: false — write was unconditional (host admits it)
|
|
14
|
+
* - conditional_write: 'not_reported' — host did not report (DEFAULT; absence ≠ false)
|
|
15
|
+
* When true, conditioned_on_token is the opaque token the host conditioned on.
|
|
16
|
+
* Tokens are host-defined (git blob sha, etag, mtime-hash, …). This package never
|
|
17
|
+
* interprets them — only carries them and compares for equality (===).
|
|
18
|
+
*/
|
|
19
|
+
/** Host-defined opaque version token. Compared only by string equality. */
|
|
20
|
+
export type VersionToken = string;
|
|
21
|
+
/**
|
|
22
|
+
* Host resolution surface: content plus an opaque version token.
|
|
23
|
+
* Returned by host resolvers that support conditional execution.
|
|
24
|
+
*/
|
|
25
|
+
export type VersionedContent = {
|
|
26
|
+
content: string;
|
|
27
|
+
version_token: VersionToken;
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Host report of whether the write was conditioned on a version token.
|
|
31
|
+
* `not_reported` is the default — absence of a report is not false
|
|
32
|
+
* (absent ≠ 0 ≠ null ≠ unknown).
|
|
33
|
+
*/
|
|
34
|
+
export type ConditionalWriteReport = true | false | 'not_reported';
|
|
35
|
+
/**
|
|
36
|
+
* Per-call forensic basis for conditional write (on every GuardOutcome).
|
|
37
|
+
* Survives replay unchanged when recorded.
|
|
38
|
+
*/
|
|
39
|
+
export type ConditionalWriteBasis = {
|
|
40
|
+
conditional_write: ConditionalWriteReport;
|
|
41
|
+
/**
|
|
42
|
+
* When conditional_write === true, the token the host says it conditioned on.
|
|
43
|
+
* Omitted when not_reported / false / not supplied.
|
|
44
|
+
*/
|
|
45
|
+
conditioned_on_token?: VersionToken | null;
|
|
46
|
+
/** Config requireConditionalWrite for this call (policy). */
|
|
47
|
+
require_conditional_write: boolean;
|
|
48
|
+
/** Whether this call was treated as write-style. */
|
|
49
|
+
write_style: boolean;
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* Values the RUNNER collected / host reported before the pure guard path.
|
|
53
|
+
* Default when omitted: conditional_write 'not_reported'.
|
|
54
|
+
*/
|
|
55
|
+
export type ConditionalWriteCallContext = {
|
|
56
|
+
conditional_write?: ConditionalWriteReport;
|
|
57
|
+
conditioned_on_token?: VersionToken | null;
|
|
58
|
+
/** Optional versioned content for token carry (equality only). */
|
|
59
|
+
versioned_content?: VersionedContent | null;
|
|
60
|
+
};
|
|
61
|
+
/** Equality compare only — never semantic interpretation of the token. */
|
|
62
|
+
export declare function tokensEqual(a: VersionToken | null | undefined, b: VersionToken | null | undefined): boolean;
|
|
63
|
+
/**
|
|
64
|
+
* Build per-call conditional-write basis + optional enforce block.
|
|
65
|
+
* Pure once the host report is a value (no I/O).
|
|
66
|
+
*
|
|
67
|
+
* Policy (mirrors requireFreshness Decision-1): when requireConditionalWrite is true
|
|
68
|
+
* and the call is write-style, conditional_write must be true for enforced execution
|
|
69
|
+
* to be eligible. false and not_reported both refuse (distinct from "host said false"
|
|
70
|
+
* vs "host silent" only on the basis field — both block under policy).
|
|
71
|
+
*/
|
|
72
|
+
export declare function buildConditionalWriteBasis(input: {
|
|
73
|
+
writeStyle: boolean;
|
|
74
|
+
requireConditionalWrite: boolean;
|
|
75
|
+
ctx?: ConditionalWriteCallContext | null;
|
|
76
|
+
}): {
|
|
77
|
+
basis: ConditionalWriteBasis;
|
|
78
|
+
/** If set, enforced execution must not proceed. */
|
|
79
|
+
blockCause?: 'CONDITIONAL_WRITE_REQUIRED';
|
|
80
|
+
};
|
|
81
|
+
/** Residual name when policy requires conditional write but host did not report true. */
|
|
82
|
+
export declare const RESIDUAL_UNCONDITIONAL_WRITE = "composition_unconditional_write_under_policy";
|
|
83
|
+
/**
|
|
84
|
+
* Coverage residual when requireConditionalWrite is on and the host report is not true.
|
|
85
|
+
* inescapable_runtime must stay false — we report what the host told us, never claim compliance.
|
|
86
|
+
*/
|
|
87
|
+
export declare function conditionalWriteResidual(input: {
|
|
88
|
+
requireConditionalWrite: boolean;
|
|
89
|
+
writeStyle: boolean;
|
|
90
|
+
conditionalWrite: ConditionalWriteReport;
|
|
91
|
+
}): string | null;
|
|
92
|
+
//# sourceMappingURL=conditional-write.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conditional-write.d.ts","sourceRoot":"","sources":["../../src/conditional-write.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAIH,2EAA2E;AAC3E,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC;AAElC;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,YAAY,CAAC;CAC7B,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,sBAAsB,GAAG,IAAI,GAAG,KAAK,GAAG,cAAc,CAAC;AAEnE;;;GAGG;AACH,MAAM,MAAM,qBAAqB,GAAG;IAClC,iBAAiB,EAAE,sBAAsB,CAAC;IAC1C;;;OAGG;IACH,oBAAoB,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;IAC3C,6DAA6D;IAC7D,yBAAyB,EAAE,OAAO,CAAC;IACnC,oDAAoD;IACpD,WAAW,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,2BAA2B,GAAG;IACxC,iBAAiB,CAAC,EAAE,sBAAsB,CAAC;IAC3C,oBAAoB,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;IAC3C,kEAAkE;IAClE,iBAAiB,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAC;CAC7C,CAAC;AAEF,0EAA0E;AAC1E,wBAAgB,WAAW,CACzB,CAAC,EAAE,YAAY,GAAG,IAAI,GAAG,SAAS,EAClC,CAAC,EAAE,YAAY,GAAG,IAAI,GAAG,SAAS,GACjC,OAAO,CAIT;AASD;;;;;;;;GAQG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE;IAChD,UAAU,EAAE,OAAO,CAAC;IACpB,uBAAuB,EAAE,OAAO,CAAC;IACjC,GAAG,CAAC,EAAE,2BAA2B,GAAG,IAAI,CAAC;CAC1C,GAAG;IACF,KAAK,EAAE,qBAAqB,CAAC;IAC7B,mDAAmD;IACnD,UAAU,CAAC,EAAE,4BAA4B,CAAC;CAC3C,CAgCA;AAED,yFAAyF;AACzF,eAAO,MAAM,4BAA4B,iDAAiD,CAAC;AAE3F;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE;IAC9C,uBAAuB,EAAE,OAAO,CAAC;IACjC,UAAU,EAAE,OAAO,CAAC;IACpB,gBAAgB,EAAE,sBAAsB,CAAC;CAC1C,GAAG,MAAM,GAAG,IAAI,CAKhB"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Conditional-execution surface (reporting only — this package never writes).
|
|
3
|
+
*
|
|
4
|
+
* ACTIVE + FRESH only proves content matched at measurement time. A host that resolves
|
|
5
|
+
* then writes unconditionally still races; the conditional write itself is the host's job.
|
|
6
|
+
* We define the surface, demand it by policy, and report whether the host said it happened.
|
|
7
|
+
*
|
|
8
|
+
* Host contract (executeIfUnchanged):
|
|
9
|
+
* The host SHOULD perform writes via executeIfUnchanged(write, expected_token) (or
|
|
10
|
+
* equivalent: only apply the mutation if the resource still holds expected_token).
|
|
11
|
+
* After the attempt, the host reports on the call context:
|
|
12
|
+
* - conditional_write: true — write was conditioned on a version token
|
|
13
|
+
* - conditional_write: false — write was unconditional (host admits it)
|
|
14
|
+
* - conditional_write: 'not_reported' — host did not report (DEFAULT; absence ≠ false)
|
|
15
|
+
* When true, conditioned_on_token is the opaque token the host conditioned on.
|
|
16
|
+
* Tokens are host-defined (git blob sha, etag, mtime-hash, …). This package never
|
|
17
|
+
* interprets them — only carries them and compares for equality (===).
|
|
18
|
+
*/
|
|
19
|
+
'use strict';
|
|
20
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21
|
+
exports.RESIDUAL_UNCONDITIONAL_WRITE = void 0;
|
|
22
|
+
exports.tokensEqual = tokensEqual;
|
|
23
|
+
exports.buildConditionalWriteBasis = buildConditionalWriteBasis;
|
|
24
|
+
exports.conditionalWriteResidual = conditionalWriteResidual;
|
|
25
|
+
/** Equality compare only — never semantic interpretation of the token. */
|
|
26
|
+
function tokensEqual(a, b) {
|
|
27
|
+
if (a == null || b == null)
|
|
28
|
+
return false;
|
|
29
|
+
if (typeof a !== 'string' || typeof b !== 'string')
|
|
30
|
+
return false;
|
|
31
|
+
return a === b;
|
|
32
|
+
}
|
|
33
|
+
function normalizeReport(raw) {
|
|
34
|
+
if (raw === true)
|
|
35
|
+
return true;
|
|
36
|
+
if (raw === false)
|
|
37
|
+
return false;
|
|
38
|
+
if (raw === 'not_reported')
|
|
39
|
+
return 'not_reported';
|
|
40
|
+
return 'not_reported';
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Build per-call conditional-write basis + optional enforce block.
|
|
44
|
+
* Pure once the host report is a value (no I/O).
|
|
45
|
+
*
|
|
46
|
+
* Policy (mirrors requireFreshness Decision-1): when requireConditionalWrite is true
|
|
47
|
+
* and the call is write-style, conditional_write must be true for enforced execution
|
|
48
|
+
* to be eligible. false and not_reported both refuse (distinct from "host said false"
|
|
49
|
+
* vs "host silent" only on the basis field — both block under policy).
|
|
50
|
+
*/
|
|
51
|
+
function buildConditionalWriteBasis(input) {
|
|
52
|
+
const require_conditional_write = input.requireConditionalWrite === true;
|
|
53
|
+
const write_style = input.writeStyle === true;
|
|
54
|
+
const ctx = input.ctx && typeof input.ctx === 'object' ? input.ctx : {};
|
|
55
|
+
const conditional_write = normalizeReport(ctx.conditional_write);
|
|
56
|
+
const basis = {
|
|
57
|
+
conditional_write,
|
|
58
|
+
require_conditional_write,
|
|
59
|
+
write_style,
|
|
60
|
+
};
|
|
61
|
+
// Token carry: prefer explicit conditioned_on_token, else versioned_content.version_token.
|
|
62
|
+
if (conditional_write === true) {
|
|
63
|
+
if (typeof ctx.conditioned_on_token === 'string') {
|
|
64
|
+
basis.conditioned_on_token = ctx.conditioned_on_token;
|
|
65
|
+
}
|
|
66
|
+
else if (ctx.versioned_content
|
|
67
|
+
&& typeof ctx.versioned_content === 'object'
|
|
68
|
+
&& typeof ctx.versioned_content.version_token === 'string') {
|
|
69
|
+
basis.conditioned_on_token = ctx.versioned_content.version_token;
|
|
70
|
+
}
|
|
71
|
+
else if (ctx.conditioned_on_token === null) {
|
|
72
|
+
basis.conditioned_on_token = null;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
// Policy on write: only conditional_write:true is eligible for enforced:true.
|
|
76
|
+
if (write_style && require_conditional_write && conditional_write !== true) {
|
|
77
|
+
return { basis, blockCause: 'CONDITIONAL_WRITE_REQUIRED' };
|
|
78
|
+
}
|
|
79
|
+
return { basis };
|
|
80
|
+
}
|
|
81
|
+
/** Residual name when policy requires conditional write but host did not report true. */
|
|
82
|
+
exports.RESIDUAL_UNCONDITIONAL_WRITE = 'composition_unconditional_write_under_policy';
|
|
83
|
+
/**
|
|
84
|
+
* Coverage residual when requireConditionalWrite is on and the host report is not true.
|
|
85
|
+
* inescapable_runtime must stay false — we report what the host told us, never claim compliance.
|
|
86
|
+
*/
|
|
87
|
+
function conditionalWriteResidual(input) {
|
|
88
|
+
if (input.requireConditionalWrite !== true)
|
|
89
|
+
return null;
|
|
90
|
+
if (input.writeStyle !== true)
|
|
91
|
+
return null;
|
|
92
|
+
if (input.conditionalWrite === true)
|
|
93
|
+
return null;
|
|
94
|
+
return exports.RESIDUAL_UNCONDITIONAL_WRITE;
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=conditional-write.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conditional-write.js","sourceRoot":"","sources":["../../src/conditional-write.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,YAAY,CAAC;;;AAkDb,kCAOC;AAkBD,gEAwCC;AASD,4DASC;AApFD,0EAA0E;AAC1E,SAAgB,WAAW,CACzB,CAAkC,EAClC,CAAkC;IAElC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI;QAAE,OAAO,KAAK,CAAC;IACzC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACjE,OAAO,CAAC,KAAK,CAAC,CAAC;AACjB,CAAC;AAED,SAAS,eAAe,CAAC,GAAY;IACnC,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAC9B,IAAI,GAAG,KAAK,KAAK;QAAE,OAAO,KAAK,CAAC;IAChC,IAAI,GAAG,KAAK,cAAc;QAAE,OAAO,cAAc,CAAC;IAClD,OAAO,cAAc,CAAC;AACxB,CAAC;AAED;;;;;;;;GAQG;AACH,SAAgB,0BAA0B,CAAC,KAI1C;IAKC,MAAM,yBAAyB,GAAG,KAAK,CAAC,uBAAuB,KAAK,IAAI,CAAC;IACzE,MAAM,WAAW,GAAG,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;IAC9C,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,OAAO,KAAK,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IACxE,MAAM,iBAAiB,GAAG,eAAe,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAEjE,MAAM,KAAK,GAA0B;QACnC,iBAAiB;QACjB,yBAAyB;QACzB,WAAW;KACZ,CAAC;IAEF,2FAA2F;IAC3F,IAAI,iBAAiB,KAAK,IAAI,EAAE,CAAC;QAC/B,IAAI,OAAO,GAAG,CAAC,oBAAoB,KAAK,QAAQ,EAAE,CAAC;YACjD,KAAK,CAAC,oBAAoB,GAAG,GAAG,CAAC,oBAAoB,CAAC;QACxD,CAAC;aAAM,IACL,GAAG,CAAC,iBAAiB;eAClB,OAAO,GAAG,CAAC,iBAAiB,KAAK,QAAQ;eACzC,OAAO,GAAG,CAAC,iBAAiB,CAAC,aAAa,KAAK,QAAQ,EAC1D,CAAC;YACD,KAAK,CAAC,oBAAoB,GAAG,GAAG,CAAC,iBAAiB,CAAC,aAAa,CAAC;QACnE,CAAC;aAAM,IAAI,GAAG,CAAC,oBAAoB,KAAK,IAAI,EAAE,CAAC;YAC7C,KAAK,CAAC,oBAAoB,GAAG,IAAI,CAAC;QACpC,CAAC;IACH,CAAC;IAED,8EAA8E;IAC9E,IAAI,WAAW,IAAI,yBAAyB,IAAI,iBAAiB,KAAK,IAAI,EAAE,CAAC;QAC3E,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,4BAA4B,EAAE,CAAC;IAC7D,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,CAAC;AACnB,CAAC;AAED,yFAAyF;AAC5E,QAAA,4BAA4B,GAAG,8CAA8C,CAAC;AAE3F;;;GAGG;AACH,SAAgB,wBAAwB,CAAC,KAIxC;IACC,IAAI,KAAK,CAAC,uBAAuB,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACxD,IAAI,KAAK,CAAC,UAAU,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAC3C,IAAI,KAAK,CAAC,gBAAgB,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACjD,OAAO,oCAA4B,CAAC;AACtC,CAAC"}
|
|
@@ -108,16 +108,29 @@ export type ProofBuildInput = {
|
|
|
108
108
|
result?: unknown;
|
|
109
109
|
/** Present only when factory threw. */
|
|
110
110
|
error?: unknown;
|
|
111
|
+
/** Optional conditional-write basis for the enforced+policy invariant. */
|
|
112
|
+
conditionalWriteBasis?: {
|
|
113
|
+
require_conditional_write: boolean;
|
|
114
|
+
write_style: boolean;
|
|
115
|
+
conditional_write: true | false | 'not_reported';
|
|
116
|
+
};
|
|
111
117
|
};
|
|
112
118
|
/**
|
|
113
119
|
* Runtime twin of the type-level enforced⟺receiptVerified invariant.
|
|
114
120
|
* Throws if enforced:true is paired with anything other than receiptVerified+preflighted.
|
|
121
|
+
* When requireConditionalWrite+writeStyle: enforced:true also requires conditional_write:true
|
|
122
|
+
* (same refusal class as the permission gate — not a parallel path).
|
|
115
123
|
* The proof block is read by consumers that do not have our TypeScript brands.
|
|
116
124
|
*/
|
|
117
125
|
export declare function assertEnforcedReceiptInvariant(input: {
|
|
118
126
|
enforced: boolean;
|
|
119
127
|
preflighted: boolean;
|
|
120
128
|
receiptVerified: boolean;
|
|
129
|
+
/** Policy requireConditionalWrite for this call (optional; omit = not checked here). */
|
|
130
|
+
requireConditionalWrite?: boolean;
|
|
131
|
+
writeStyle?: boolean;
|
|
132
|
+
/** Host report: true | false | 'not_reported'. */
|
|
133
|
+
conditionalWrite?: true | false | 'not_reported';
|
|
121
134
|
}): void;
|
|
122
135
|
/**
|
|
123
136
|
* Honest byte hash of a factory return. Only string / Buffer / Uint8Array are hashed as raw bytes.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execution-proof.d.ts","sourceRoot":"","sources":["../../src/execution-proof.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,iDAAiD;AACjD,eAAO,MAAM,oBAAoB,EAAG,0BAAmC,CAAC;AAExE;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,mBAAmB,GAC3B;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,SAAS,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACxD;IACE,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EACF,cAAc,GACd,iBAAiB,GACjB,wBAAwB,GACxB,yBAAyB,CAAC;CAC/B,CAAC;AAEN,MAAM,MAAM,mBAAmB,GAAG;IAChC,UAAU,EAAE,OAAO,oBAAoB,CAAC;IACxC,uGAAuG;IACvG,WAAW,EAAE,OAAO,CAAC;IACrB,4EAA4E;IAC5E,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,OAAO,EAAE;QACP;;;WAGG;QACH,QAAQ,EAAE,OAAO,CAAC;QAClB;;;WAGG;QACH,MAAM,EAAE,kBAAkB,GAAG,IAAI,CAAC;QAClC,sEAAsE;QACtE,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;KAC3B,CAAC;IACF;;;;OAIG;IACH,QAAQ,EAAE;QACR,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;QACzB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;KAC1B,GAAG,IAAI,CAAC;IACT;;;;OAIG;IACH,oBAAoB,EAAE,OAAO,GAAG,IAAI,CAAC;IACrC,SAAS,EAAE;QACT,SAAS,EAAE,OAAO,CAAC;QACnB,QAAQ,EAAE,OAAO,CAAC;QAClB,QAAQ,EAAE,OAAO,CAAC;KACnB,CAAC;IACF;;;OAGG;IACH,YAAY,EAAE,MAAM,CAAC;IACrB,qBAAqB,EAAE,mBAAmB,CAAC;IAC3C;;OAEG;IACH,MAAM,EAAE;QACN,0BAA0B,EAAE,IAAI,CAAC;QACjC,iCAAiC,EAAE,IAAI,CAAC;QACxC,yCAAyC,EAAE,IAAI,CAAC;QAChD,+CAA+C,EAAE,IAAI,CAAC;QACtD,oCAAoC,EAAE,IAAI,CAAC;QAC3C,iDAAiD,EAAE,IAAI,CAAC;KACzD,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,WAAW,EAAE,OAAO,CAAC;IACrB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,YAAY,CAAC;IACtB,0DAA0D;IAC1D,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,uCAAuC;IACvC,KAAK,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"execution-proof.d.ts","sourceRoot":"","sources":["../../src/execution-proof.ts"],"names":[],"mappings":"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"}
|
|
@@ -37,6 +37,8 @@ const LIMITS = Object.freeze({
|
|
|
37
37
|
/**
|
|
38
38
|
* Runtime twin of the type-level enforced⟺receiptVerified invariant.
|
|
39
39
|
* Throws if enforced:true is paired with anything other than receiptVerified+preflighted.
|
|
40
|
+
* When requireConditionalWrite+writeStyle: enforced:true also requires conditional_write:true
|
|
41
|
+
* (same refusal class as the permission gate — not a parallel path).
|
|
40
42
|
* The proof block is read by consumers that do not have our TypeScript brands.
|
|
41
43
|
*/
|
|
42
44
|
function assertEnforcedReceiptInvariant(input) {
|
|
@@ -44,6 +46,11 @@ function assertEnforcedReceiptInvariant(input) {
|
|
|
44
46
|
if (input.preflighted !== true || input.receiptVerified !== true) {
|
|
45
47
|
throw new Error('@coderifts/agent-guard: enforced:true without receiptVerified+preflighted (runtime invariant)');
|
|
46
48
|
}
|
|
49
|
+
if (input.requireConditionalWrite === true && input.writeStyle === true) {
|
|
50
|
+
if (input.conditionalWrite !== true) {
|
|
51
|
+
throw new Error('@coderifts/agent-guard: enforced:true without conditional_write:true under requireConditionalWrite (runtime invariant)');
|
|
52
|
+
}
|
|
53
|
+
}
|
|
47
54
|
}
|
|
48
55
|
}
|
|
49
56
|
function receiptVerifiedOf(verdict) {
|
|
@@ -104,10 +111,14 @@ function executionResultHashOf(input) {
|
|
|
104
111
|
*/
|
|
105
112
|
function buildExecutionProof(input) {
|
|
106
113
|
const receiptVerified = receiptVerifiedOf(input.verdict);
|
|
114
|
+
const cwb = input.conditionalWriteBasis;
|
|
107
115
|
assertEnforcedReceiptInvariant({
|
|
108
116
|
enforced: input.enforced,
|
|
109
117
|
preflighted: input.preflighted,
|
|
110
118
|
receiptVerified,
|
|
119
|
+
requireConditionalWrite: cwb?.require_conditional_write,
|
|
120
|
+
writeStyle: cwb?.write_style,
|
|
121
|
+
conditionalWrite: cwb?.conditional_write,
|
|
111
122
|
});
|
|
112
123
|
const env = envelopeOf(input.verdict);
|
|
113
124
|
const hasEnvelope = env !== null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execution-proof.js","sourceRoot":"","sources":["../../src/execution-proof.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;GAkBG;;;
|
|
1
|
+
{"version":3,"file":"execution-proof.js","sourceRoot":"","sources":["../../src/execution-proof.ts"],"names":[],"mappings":"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"}
|
package/dist/cjs/guard.d.ts
CHANGED
|
@@ -9,10 +9,11 @@
|
|
|
9
9
|
*/
|
|
10
10
|
import type { GuardConfig, GuardOutcome, ToolCallDescriptor, ExecuteFactory } from './types.js';
|
|
11
11
|
import { type FreshnessCallContext } from './freshness.js';
|
|
12
|
+
import { type ConditionalWriteCallContext } from './conditional-write.js';
|
|
12
13
|
/**
|
|
13
|
-
* @param callContext Runner-collected freshness values (optional)
|
|
14
|
-
*
|
|
15
|
-
* calls collectFreshnessCallContext and passes the result
|
|
14
|
+
* @param callContext Runner-collected freshness values (optional) plus optional conditional-write
|
|
15
|
+
* host report fields. When omitted, freshness wiring is NOT_CONFIGURED and conditional_write is
|
|
16
|
+
* not_reported. The tool-registry runner calls collectFreshnessCallContext and passes the result.
|
|
16
17
|
*/
|
|
17
|
-
export declare function guardToolCall<T>(call: ToolCallDescriptor, executeFactory: ExecuteFactory<T>, config: GuardConfig, callContext?: FreshnessCallContext): Promise<GuardOutcome<T>>;
|
|
18
|
+
export declare function guardToolCall<T>(call: ToolCallDescriptor, executeFactory: ExecuteFactory<T>, config: GuardConfig, callContext?: FreshnessCallContext & ConditionalWriteCallContext): Promise<GuardOutcome<T>>;
|
|
18
19
|
//# sourceMappingURL=guard.d.ts.map
|
package/dist/cjs/guard.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"guard.d.ts","sourceRoot":"","sources":["../../src/guard.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,KAAK,EACV,WAAW,EAAE,YAAY,EACT,kBAAkB,EAAE,cAAc,EAEnD,MAAM,YAAY,CAAC;AAMpB,OAAO,EAIL,KAAK,oBAAoB,EAC1B,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"guard.d.ts","sourceRoot":"","sources":["../../src/guard.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,KAAK,EACV,WAAW,EAAE,YAAY,EACT,kBAAkB,EAAE,cAAc,EAEnD,MAAM,YAAY,CAAC;AAMpB,OAAO,EAIL,KAAK,oBAAoB,EAC1B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAGL,KAAK,2BAA2B,EACjC,MAAM,wBAAwB,CAAC;AAoShC;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,CAAC,EACnC,IAAI,EAAE,kBAAkB,EACxB,cAAc,EAAE,cAAc,CAAC,CAAC,CAAC,EACjC,MAAM,EAAE,WAAW,EACnB,WAAW,CAAC,EAAE,oBAAoB,GAAG,2BAA2B,GAC/D,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAsQ1B"}
|