@coderifts/agent-guard 6.2.0 → 6.4.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.
Files changed (100) hide show
  1. package/README.md +36 -10
  2. package/dist/cjs/cas-adapters/api.d.ts +94 -0
  3. package/dist/cjs/cas-adapters/api.d.ts.map +1 -0
  4. package/dist/cjs/cas-adapters/api.js +120 -0
  5. package/dist/cjs/cas-adapters/api.js.map +1 -0
  6. package/dist/cjs/cas-adapters/db.d.ts +93 -0
  7. package/dist/cjs/cas-adapters/db.d.ts.map +1 -0
  8. package/dist/cjs/cas-adapters/db.js +139 -0
  9. package/dist/cjs/cas-adapters/db.js.map +1 -0
  10. package/dist/cjs/cas-adapters/registry.d.ts +88 -0
  11. package/dist/cjs/cas-adapters/registry.d.ts.map +1 -0
  12. package/dist/cjs/cas-adapters/registry.js +120 -0
  13. package/dist/cjs/cas-adapters/registry.js.map +1 -0
  14. package/dist/cjs/cas-attestation.d.ts +94 -0
  15. package/dist/cjs/cas-attestation.d.ts.map +1 -0
  16. package/dist/cjs/cas-attestation.js +133 -0
  17. package/dist/cjs/cas-attestation.js.map +1 -0
  18. package/dist/cjs/deploy-gate.d.ts +10 -1
  19. package/dist/cjs/deploy-gate.d.ts.map +1 -1
  20. package/dist/cjs/deploy-gate.js +14 -10
  21. package/dist/cjs/deploy-gate.js.map +1 -1
  22. package/dist/cjs/execute-tool-call.d.ts +100 -0
  23. package/dist/cjs/execute-tool-call.d.ts.map +1 -0
  24. package/dist/cjs/execute-tool-call.js +334 -0
  25. package/dist/cjs/execute-tool-call.js.map +1 -0
  26. package/dist/cjs/execution-time-fingerprint.d.ts +8 -0
  27. package/dist/cjs/execution-time-fingerprint.d.ts.map +1 -1
  28. package/dist/cjs/execution-time-fingerprint.js +13 -1
  29. package/dist/cjs/execution-time-fingerprint.js.map +1 -1
  30. package/dist/cjs/guard.d.ts.map +1 -1
  31. package/dist/cjs/guard.js +28 -9
  32. package/dist/cjs/guard.js.map +1 -1
  33. package/dist/cjs/index.d.ts +13 -1
  34. package/dist/cjs/index.d.ts.map +1 -1
  35. package/dist/cjs/index.js +51 -2
  36. package/dist/cjs/index.js.map +1 -1
  37. package/dist/cjs/merge-gate.d.ts +8 -0
  38. package/dist/cjs/merge-gate.d.ts.map +1 -1
  39. package/dist/cjs/merge-gate.js +19 -12
  40. package/dist/cjs/merge-gate.js.map +1 -1
  41. package/dist/cjs/remediation-loop-attestation.d.ts +125 -0
  42. package/dist/cjs/remediation-loop-attestation.d.ts.map +1 -0
  43. package/dist/cjs/remediation-loop-attestation.js +186 -0
  44. package/dist/cjs/remediation-loop-attestation.js.map +1 -0
  45. package/dist/cjs/types.d.ts +20 -3
  46. package/dist/cjs/types.d.ts.map +1 -1
  47. package/dist/cjs/with-coderifts.d.ts +9 -0
  48. package/dist/cjs/with-coderifts.d.ts.map +1 -1
  49. package/dist/cjs/with-coderifts.js +3 -0
  50. package/dist/cjs/with-coderifts.js.map +1 -1
  51. package/dist/esm/cas-adapters/api.d.ts +94 -0
  52. package/dist/esm/cas-adapters/api.d.ts.map +1 -0
  53. package/dist/esm/cas-adapters/api.js +116 -0
  54. package/dist/esm/cas-adapters/api.js.map +1 -0
  55. package/dist/esm/cas-adapters/db.d.ts +93 -0
  56. package/dist/esm/cas-adapters/db.d.ts.map +1 -0
  57. package/dist/esm/cas-adapters/db.js +135 -0
  58. package/dist/esm/cas-adapters/db.js.map +1 -0
  59. package/dist/esm/cas-adapters/registry.d.ts +88 -0
  60. package/dist/esm/cas-adapters/registry.d.ts.map +1 -0
  61. package/dist/esm/cas-adapters/registry.js +116 -0
  62. package/dist/esm/cas-adapters/registry.js.map +1 -0
  63. package/dist/esm/cas-attestation.d.ts +94 -0
  64. package/dist/esm/cas-attestation.d.ts.map +1 -0
  65. package/dist/esm/cas-attestation.js +127 -0
  66. package/dist/esm/cas-attestation.js.map +1 -0
  67. package/dist/esm/deploy-gate.d.ts +10 -1
  68. package/dist/esm/deploy-gate.d.ts.map +1 -1
  69. package/dist/esm/deploy-gate.js +14 -10
  70. package/dist/esm/deploy-gate.js.map +1 -1
  71. package/dist/esm/execute-tool-call.d.ts +100 -0
  72. package/dist/esm/execute-tool-call.d.ts.map +1 -0
  73. package/dist/esm/execute-tool-call.js +325 -0
  74. package/dist/esm/execute-tool-call.js.map +1 -0
  75. package/dist/esm/execution-time-fingerprint.d.ts +8 -0
  76. package/dist/esm/execution-time-fingerprint.d.ts.map +1 -1
  77. package/dist/esm/execution-time-fingerprint.js +11 -0
  78. package/dist/esm/execution-time-fingerprint.js.map +1 -1
  79. package/dist/esm/guard.d.ts.map +1 -1
  80. package/dist/esm/guard.js +29 -10
  81. package/dist/esm/guard.js.map +1 -1
  82. package/dist/esm/index.d.ts +13 -1
  83. package/dist/esm/index.d.ts.map +1 -1
  84. package/dist/esm/index.js +16 -1
  85. package/dist/esm/index.js.map +1 -1
  86. package/dist/esm/merge-gate.d.ts +8 -0
  87. package/dist/esm/merge-gate.d.ts.map +1 -1
  88. package/dist/esm/merge-gate.js +19 -12
  89. package/dist/esm/merge-gate.js.map +1 -1
  90. package/dist/esm/remediation-loop-attestation.d.ts +125 -0
  91. package/dist/esm/remediation-loop-attestation.d.ts.map +1 -0
  92. package/dist/esm/remediation-loop-attestation.js +179 -0
  93. package/dist/esm/remediation-loop-attestation.js.map +1 -0
  94. package/dist/esm/types.d.ts +20 -3
  95. package/dist/esm/types.d.ts.map +1 -1
  96. package/dist/esm/with-coderifts.d.ts +9 -0
  97. package/dist/esm/with-coderifts.d.ts.map +1 -1
  98. package/dist/esm/with-coderifts.js +3 -0
  99. package/dist/esm/with-coderifts.js.map +1 -1
  100. package/package.json +1 -1
@@ -0,0 +1,120 @@
1
+ /**
2
+ * Registry compareAndSwap CAS adapter — opaque registry/version token discipline over host-injected I/O.
3
+ *
4
+ * Uses executeIfUnchanged (conditional-write.ts). Does not invent a parallel outcome shape.
5
+ * Token format is opaque to the guard (string equality only).
6
+ *
7
+ * Token encoding (this adapter only; not interpreted by the core):
8
+ * registry:v1:<host_registry_token>
9
+ * Missing / empty token → REGISTRY_ABSENT_TOKEN.
10
+ *
11
+ * HONESTY: this adapter never talks to a registry client. The host callback performs
12
+ * compareAndSwap(expected, newValue) (or equivalent) and reports {swapped|conflict}.
13
+ * The adapter only normalizes tokens and maps the report onto ExecuteIfUnchangedOutcome.
14
+ *
15
+ * No registry SDKs — all I/O is host-injected.
16
+ */
17
+ 'use strict';
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.tokensEqual = exports.REGISTRY_ABSENT_TOKEN = exports.REGISTRY_VERSION_TOKEN_PREFIX = void 0;
20
+ exports.createRegistryVersionToken = createRegistryVersionToken;
21
+ exports.registryTokenRaw = registryTokenRaw;
22
+ exports.writeRegistryIfUnchanged = writeRegistryIfUnchanged;
23
+ const conditional_write_js_1 = require("../conditional-write.js");
24
+ Object.defineProperty(exports, "tokensEqual", { enumerable: true, get: function () { return conditional_write_js_1.tokensEqual; } });
25
+ /** Prefix for this adapter's opaque tokens (equality-only outside this module). */
26
+ exports.REGISTRY_VERSION_TOKEN_PREFIX = 'registry:v1:';
27
+ /**
28
+ * Token used when the registry key is absent / unversioned.
29
+ * Hosts that measured absence should pass this as expected_token for first put.
30
+ */
31
+ exports.REGISTRY_ABSENT_TOKEN = 'registry:v1:absent';
32
+ /**
33
+ * Build a VersionToken from a host registry revision / generation / etag-like value.
34
+ * null / undefined / empty → REGISTRY_ABSENT_TOKEN.
35
+ */
36
+ function createRegistryVersionToken(token) {
37
+ if (token == null)
38
+ return exports.REGISTRY_ABSENT_TOKEN;
39
+ if (typeof token === 'number' && !Number.isFinite(token))
40
+ return exports.REGISTRY_ABSENT_TOKEN;
41
+ const s = String(token).trim();
42
+ if (s.length === 0)
43
+ return exports.REGISTRY_ABSENT_TOKEN;
44
+ return `${exports.REGISTRY_VERSION_TOKEN_PREFIX}${s}`;
45
+ }
46
+ /** Raw value embedded in a registry:v1: token (for host CAS APIs). Absent → null. */
47
+ function registryTokenRaw(token) {
48
+ if (typeof token !== 'string' || !token.startsWith(exports.REGISTRY_VERSION_TOKEN_PREFIX)) {
49
+ return null;
50
+ }
51
+ if (token === exports.REGISTRY_ABSENT_TOKEN)
52
+ return null;
53
+ const raw = token.slice(exports.REGISTRY_VERSION_TOKEN_PREFIX.length);
54
+ return raw.length > 0 ? raw : null;
55
+ }
56
+ function normalizeRegistryReport(report) {
57
+ if (!report || typeof report !== 'object') {
58
+ throw new Error('writeRegistryIfUnchanged: host compareAndSwap must return RegistryHostCasReport');
59
+ }
60
+ if ('swapped' in report) {
61
+ if (report.swapped === true) {
62
+ return { kind: 'committed', new_token: report.new_token, result: report.result };
63
+ }
64
+ return { kind: 'conflict', current_token: report.current_token };
65
+ }
66
+ if (report.status === 'committed') {
67
+ return { kind: 'committed', new_token: report.new_token, result: report.result };
68
+ }
69
+ if (report.status === 'conflict') {
70
+ return { kind: 'conflict', current_token: report.current_token };
71
+ }
72
+ throw new Error('writeRegistryIfUnchanged: unknown host report shape');
73
+ }
74
+ /**
75
+ * Conditional registry write: re-read token; if matches → host compareAndSwap.
76
+ *
77
+ * Mapping (host report → ExecuteIfUnchangedOutcome):
78
+ * swapped:true / status:committed → committed
79
+ * swapped:false / status:conflict → refused / stale_version_token
80
+ * current_token from host when supplied, else null
81
+ *
82
+ * Wired through executeIfUnchanged — not a parallel path.
83
+ */
84
+ async function writeRegistryIfUnchanged(args) {
85
+ const detect = args.detect_stale_during_commit === true;
86
+ return (0, conditional_write_js_1.executeIfUnchanged)({
87
+ expected_token: args.expected_token,
88
+ current_token: async () => createRegistryVersionToken(await args.current_token()),
89
+ detect_stale_during_commit: detect,
90
+ expected_after_commit: detect
91
+ ? async (written) => {
92
+ if (typeof written.new_token === 'string' && written.new_token.trim().length > 0) {
93
+ return createRegistryVersionToken(written.new_token);
94
+ }
95
+ return createRegistryVersionToken(await args.current_token());
96
+ }
97
+ : undefined,
98
+ write: async () => {
99
+ const report = await args.compareAndSwap({
100
+ expected: registryTokenRaw(args.expected_token),
101
+ expected_token: args.expected_token,
102
+ });
103
+ const norm = normalizeRegistryReport(report);
104
+ if (norm.kind === 'conflict') {
105
+ const cur = norm.current_token !== undefined
106
+ ? createRegistryVersionToken(norm.current_token)
107
+ : null;
108
+ throw new conditional_write_js_1.StaleVersionTokenAbort(cur);
109
+ }
110
+ const new_token = norm.new_token === undefined || norm.new_token === null
111
+ ? null
112
+ : String(norm.new_token);
113
+ return {
114
+ new_token,
115
+ result: norm.result,
116
+ };
117
+ },
118
+ });
119
+ }
120
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/cas-adapters/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,94 @@
1
+ /**
2
+ * CAS attestation binder (ID781 option A follow-on) — separate record linking a frozen
3
+ * GuardExecutionProof (v1) with an ExecuteIfUnchangedOutcome.
4
+ *
5
+ * Does NOT modify execution-proof.ts, the proof shape, or conditional-write outcome types.
6
+ * Does NOT claim that the host write is unique, that version tokens equal change_fp, or that
7
+ * committed_stale_detected is "safe". Those non-claims are always set on `limits`.
8
+ *
9
+ * The proof's own limit `conditional_write_is_host_asserted_not_cas_verified` names this gap;
10
+ * this module is the separate attestation surface that pairs proof + CAS outcome without
11
+ * widening the proof spec.
12
+ */
13
+ import type { GuardExecutionProof, ExecutionResultHash } from './execution-proof.js';
14
+ import type { ExecuteIfUnchangedOutcome, VersionToken } from './conditional-write.js';
15
+ /** Machine-readable schema id — mirrors EXECUTION_PROOF_SPEC style. */
16
+ export declare const CAS_ATTESTATION_SPEC: "cas-attestation.v1";
17
+ /**
18
+ * Explicit non-claims. Always set (same discipline as GuardExecutionProof.limits).
19
+ * Readers that treat missing fields as "ok" are wrong.
20
+ */
21
+ export type CasAttestationLimits = {
22
+ /** Host may have performed other writes outside executeIfUnchanged. */
23
+ does_not_claim_only_write_on_host: true;
24
+ /** version_token / post_commit_token are opaque CAS resource versions — not change_fp identity. */
25
+ does_not_claim_version_token_proves_change_fp_match: true;
26
+ /** committed_stale_detected means write ran and post-check disagreed — not "safe" or rolled back. */
27
+ does_not_claim_committed_stale_is_safe: true;
28
+ /** execution_result_hash hashes the factory return, not CAS file bytes / token equality. */
29
+ does_not_claim_execution_result_hash_equals_cas_bytes: true;
30
+ /** Same host-bypass residual as the proof family — package cannot force host CAS use. */
31
+ does_not_claim_host_cannot_bypass: true;
32
+ /** Attestation is linkage of two inputs, not a re-decision of governance ALLOW/BLOCK. */
33
+ does_not_claim_governance_redecision: true;
34
+ };
35
+ /** CAS branch projection — only fields present on the measured outcome branch. */
36
+ export type CasAttestationCas = {
37
+ status: 'committed';
38
+ write_ran: true;
39
+ version_token: VersionToken;
40
+ } | {
41
+ status: 'refused';
42
+ write_ran: false;
43
+ reason: 'stale_version_token';
44
+ expected_token: VersionToken;
45
+ current_token: VersionToken | null;
46
+ } | {
47
+ status: 'committed_stale_detected';
48
+ write_ran: true;
49
+ reason: 'stale_during_commit';
50
+ expected_token: VersionToken;
51
+ post_commit_token: VersionToken | null;
52
+ };
53
+ /**
54
+ * Frozen cas-attestation.v1 record.
55
+ * References are lifted from the proof; cas is projected from the outcome; derived flags
56
+ * are only what is honestly computable from those two inputs.
57
+ */
58
+ export type CasAttestation = {
59
+ attestation_spec: typeof CAS_ATTESTATION_SPEC;
60
+ references: {
61
+ decision_id: string | null;
62
+ change_fp: string | null;
63
+ operation: string | null;
64
+ execution_result_hash: ExecutionResultHash;
65
+ receipt_verified: boolean;
66
+ };
67
+ cas: CasAttestationCas;
68
+ derived: {
69
+ /**
70
+ * receipt.verified === true AND outcome.status === 'committed'
71
+ * (clean commit only — committed_stale_detected is NOT this flag).
72
+ */
73
+ authorized_and_committed: boolean;
74
+ /** Write mutation ran: committed or committed_stale_detected. */
75
+ write_ran: boolean;
76
+ /** outcome.status === 'committed_stale_detected'. */
77
+ stale_during_commit: boolean;
78
+ /** outcome.status === 'refused'. */
79
+ refused: boolean;
80
+ };
81
+ limits: CasAttestationLimits;
82
+ };
83
+ /** Type guard: object carries the frozen v1 proof_spec. */
84
+ export declare function isGuardExecutionProof(x: unknown): x is GuardExecutionProof;
85
+ /** Type guard: object is one of the three ExecuteIfUnchangedOutcome branches. */
86
+ export declare function isExecuteIfUnchangedOutcome(x: unknown): x is ExecuteIfUnchangedOutcome<unknown>;
87
+ /**
88
+ * Bind a frozen GuardExecutionProof with an ExecuteIfUnchangedOutcome into a cas-attestation.v1.
89
+ *
90
+ * Validation-first: rejects non-v1 proofs and non-outcome shapes (throws TypeError —
91
+ * builders fail closed; the human render layer soft-fails instead).
92
+ */
93
+ export declare function buildCasAttestation(proof: GuardExecutionProof, outcome: ExecuteIfUnchangedOutcome<unknown>): CasAttestation;
94
+ //# sourceMappingURL=cas-attestation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cas-attestation.d.ts","sourceRoot":"","sources":["../../src/cas-attestation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAErF,OAAO,KAAK,EAAE,yBAAyB,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEtF,uEAAuE;AACvE,eAAO,MAAM,oBAAoB,EAAG,oBAA6B,CAAC;AAElE;;;GAGG;AACH,MAAM,MAAM,oBAAoB,GAAG;IACjC,uEAAuE;IACvE,iCAAiC,EAAE,IAAI,CAAC;IACxC,mGAAmG;IACnG,mDAAmD,EAAE,IAAI,CAAC;IAC1D,qGAAqG;IACrG,sCAAsC,EAAE,IAAI,CAAC;IAC7C,4FAA4F;IAC5F,qDAAqD,EAAE,IAAI,CAAC;IAC5D,yFAAyF;IACzF,iCAAiC,EAAE,IAAI,CAAC;IACxC,yFAAyF;IACzF,oCAAoC,EAAE,IAAI,CAAC;CAC5C,CAAC;AAWF,kFAAkF;AAClF,MAAM,MAAM,iBAAiB,GACzB;IACE,MAAM,EAAE,WAAW,CAAC;IACpB,SAAS,EAAE,IAAI,CAAC;IAChB,aAAa,EAAE,YAAY,CAAC;CAC7B,GACD;IACE,MAAM,EAAE,SAAS,CAAC;IAClB,SAAS,EAAE,KAAK,CAAC;IACjB,MAAM,EAAE,qBAAqB,CAAC;IAC9B,cAAc,EAAE,YAAY,CAAC;IAC7B,aAAa,EAAE,YAAY,GAAG,IAAI,CAAC;CACpC,GACD;IACE,MAAM,EAAE,0BAA0B,CAAC;IACnC,SAAS,EAAE,IAAI,CAAC;IAChB,MAAM,EAAE,qBAAqB,CAAC;IAC9B,cAAc,EAAE,YAAY,CAAC;IAC7B,iBAAiB,EAAE,YAAY,GAAG,IAAI,CAAC;CACxC,CAAC;AAEN;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,gBAAgB,EAAE,OAAO,oBAAoB,CAAC;IAC9C,UAAU,EAAE;QACV,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;QAC3B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;QACzB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;QACzB,qBAAqB,EAAE,mBAAmB,CAAC;QAC3C,gBAAgB,EAAE,OAAO,CAAC;KAC3B,CAAC;IACF,GAAG,EAAE,iBAAiB,CAAC;IACvB,OAAO,EAAE;QACP;;;WAGG;QACH,wBAAwB,EAAE,OAAO,CAAC;QAClC,iEAAiE;QACjE,SAAS,EAAE,OAAO,CAAC;QACnB,qDAAqD;QACrD,mBAAmB,EAAE,OAAO,CAAC;QAC7B,oCAAoC;QACpC,OAAO,EAAE,OAAO,CAAC;KAClB,CAAC;IACF,MAAM,EAAE,oBAAoB,CAAC;CAC9B,CAAC;AAEF,2DAA2D;AAC3D,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,mBAAmB,CAQ1E;AAED,iFAAiF;AACjF,wBAAgB,2BAA2B,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,yBAAyB,CAAC,OAAO,CAAC,CAgB/F;AAiCD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,mBAAmB,EAC1B,OAAO,EAAE,yBAAyB,CAAC,OAAO,CAAC,GAC1C,cAAc,CAyChB"}
@@ -0,0 +1,133 @@
1
+ "use strict";
2
+ /**
3
+ * CAS attestation binder (ID781 option A follow-on) — separate record linking a frozen
4
+ * GuardExecutionProof (v1) with an ExecuteIfUnchangedOutcome.
5
+ *
6
+ * Does NOT modify execution-proof.ts, the proof shape, or conditional-write outcome types.
7
+ * Does NOT claim that the host write is unique, that version tokens equal change_fp, or that
8
+ * committed_stale_detected is "safe". Those non-claims are always set on `limits`.
9
+ *
10
+ * The proof's own limit `conditional_write_is_host_asserted_not_cas_verified` names this gap;
11
+ * this module is the separate attestation surface that pairs proof + CAS outcome without
12
+ * widening the proof spec.
13
+ */
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.CAS_ATTESTATION_SPEC = void 0;
16
+ exports.isGuardExecutionProof = isGuardExecutionProof;
17
+ exports.isExecuteIfUnchangedOutcome = isExecuteIfUnchangedOutcome;
18
+ exports.buildCasAttestation = buildCasAttestation;
19
+ const execution_proof_js_1 = require("./execution-proof.js");
20
+ /** Machine-readable schema id — mirrors EXECUTION_PROOF_SPEC style. */
21
+ exports.CAS_ATTESTATION_SPEC = 'cas-attestation.v1';
22
+ const LIMITS = Object.freeze({
23
+ does_not_claim_only_write_on_host: true,
24
+ does_not_claim_version_token_proves_change_fp_match: true,
25
+ does_not_claim_committed_stale_is_safe: true,
26
+ does_not_claim_execution_result_hash_equals_cas_bytes: true,
27
+ does_not_claim_host_cannot_bypass: true,
28
+ does_not_claim_governance_redecision: true,
29
+ });
30
+ /** Type guard: object carries the frozen v1 proof_spec. */
31
+ function isGuardExecutionProof(x) {
32
+ if (!x || typeof x !== 'object')
33
+ return false;
34
+ const p = x;
35
+ return p.proof_spec === execution_proof_js_1.EXECUTION_PROOF_SPEC
36
+ && p.receipt != null
37
+ && typeof p.receipt === 'object'
38
+ && p.execution_result_hash != null
39
+ && typeof p.execution_result_hash === 'object';
40
+ }
41
+ /** Type guard: object is one of the three ExecuteIfUnchangedOutcome branches. */
42
+ function isExecuteIfUnchangedOutcome(x) {
43
+ if (!x || typeof x !== 'object')
44
+ return false;
45
+ const o = x;
46
+ if (o.status === 'committed') {
47
+ const c = x;
48
+ return typeof c.version_token === 'string';
49
+ }
50
+ if (o.status === 'refused') {
51
+ const r = x;
52
+ return r.reason === 'stale_version_token' && typeof r.expected_token === 'string';
53
+ }
54
+ if (o.status === 'committed_stale_detected') {
55
+ const s = x;
56
+ return s.reason === 'stale_during_commit' && typeof s.expected_token === 'string';
57
+ }
58
+ return false;
59
+ }
60
+ function freezeExecutionResultHash(h) {
61
+ return Object.freeze({ ...h });
62
+ }
63
+ function projectCas(outcome) {
64
+ if (outcome.status === 'committed') {
65
+ return Object.freeze({
66
+ status: 'committed',
67
+ write_ran: true,
68
+ version_token: outcome.version_token,
69
+ });
70
+ }
71
+ if (outcome.status === 'refused') {
72
+ return Object.freeze({
73
+ status: 'refused',
74
+ write_ran: false,
75
+ reason: 'stale_version_token',
76
+ expected_token: outcome.expected_token,
77
+ current_token: outcome.current_token == null ? null : outcome.current_token,
78
+ });
79
+ }
80
+ // committed_stale_detected
81
+ return Object.freeze({
82
+ status: 'committed_stale_detected',
83
+ write_ran: true,
84
+ reason: 'stale_during_commit',
85
+ expected_token: outcome.expected_token,
86
+ post_commit_token: outcome.post_commit_token == null ? null : outcome.post_commit_token,
87
+ });
88
+ }
89
+ /**
90
+ * Bind a frozen GuardExecutionProof with an ExecuteIfUnchangedOutcome into a cas-attestation.v1.
91
+ *
92
+ * Validation-first: rejects non-v1 proofs and non-outcome shapes (throws TypeError —
93
+ * builders fail closed; the human render layer soft-fails instead).
94
+ */
95
+ function buildCasAttestation(proof, outcome) {
96
+ if (!isGuardExecutionProof(proof)) {
97
+ throw new TypeError('@coderifts/agent-guard: buildCasAttestation requires a valid guard-execution-proof.v1 object '
98
+ + '(proof_spec mismatch or missing required fields)');
99
+ }
100
+ if (!isExecuteIfUnchangedOutcome(outcome)) {
101
+ throw new TypeError('@coderifts/agent-guard: buildCasAttestation requires a valid ExecuteIfUnchangedOutcome '
102
+ + '(status committed | refused | committed_stale_detected with branch fields)');
103
+ }
104
+ const receipt_verified = proof.receipt.verified === true;
105
+ const cas = projectCas(outcome);
106
+ const write_ran = cas.write_ran === true;
107
+ const stale_during_commit = cas.status === 'committed_stale_detected';
108
+ const refused = cas.status === 'refused';
109
+ const authorized_and_committed = receipt_verified && cas.status === 'committed';
110
+ const attestation = {
111
+ attestation_spec: exports.CAS_ATTESTATION_SPEC,
112
+ references: Object.freeze({
113
+ decision_id: proof.decision_id,
114
+ change_fp: proof.binds_to != null ? proof.binds_to.change_fp : null,
115
+ operation: proof.binds_to != null ? proof.binds_to.operation : null,
116
+ execution_result_hash: freezeExecutionResultHash(proof.execution_result_hash),
117
+ receipt_verified,
118
+ }),
119
+ cas,
120
+ derived: Object.freeze({
121
+ authorized_and_committed,
122
+ write_ran,
123
+ stale_during_commit,
124
+ refused,
125
+ }),
126
+ limits: LIMITS,
127
+ };
128
+ return freezeAttestation(attestation);
129
+ }
130
+ function freezeAttestation(a) {
131
+ return Object.freeze(a);
132
+ }
133
+ //# sourceMappingURL=cas-attestation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cas-attestation.js","sourceRoot":"","sources":["../../src/cas-attestation.ts"],"names":[],"mappings":"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"}
@@ -93,8 +93,17 @@ export type DeployGateDecision = {
93
93
  reason: DeployGateReason;
94
94
  enforcement_state: EnforcementState;
95
95
  inescapable_deploy: boolean;
96
- /** Named residual when the check is green but NOT inescapable (honesty channel, §3.2). */
96
+ /**
97
+ * Named residual when the check is green but NOT inescapable (honesty channel, §3.2).
98
+ * Compat: FIRST residual in evaluation order (same priority as pre-array single-slot).
99
+ * Prefer `residuals` when co-occurrence matters.
100
+ */
97
101
  residual?: DeployGateReason;
102
+ /**
103
+ * ALL applicable honesty residuals in evaluation order (no duplicates).
104
+ * Empty array when none. Additive — singular `residual` remains for published callers.
105
+ */
106
+ residuals: DeployGateReason[];
98
107
  detail: {
99
108
  environment: string;
100
109
  artifact_id: string;
@@ -1 +1 @@
1
- {"version":3,"file":"deploy-gate.d.ts","sourceRoot":"","sources":["../../src/deploy-gate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"deploy-gate.d.ts","sourceRoot":"","sources":["../../src/deploy-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEzE,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEzE;;sFAEsF;AACtF,MAAM,MAAM,gBAAgB,GACxB,sBAAsB,GACtB,YAAY,GACZ,wBAAwB,GACxB,oBAAoB,GACpB,cAAc,GACd,gBAAgB,GAChB,sBAAsB,GACtB,oBAAoB,GACpB,iBAAiB,GACjB,oBAAoB,GACpB,mBAAmB,GACnB,4BAA4B,GAC5B,aAAa;AACf;;;;GAIG;GACD,wBAAwB,CAAC;AAE7B,gGAAgG;AAChG,MAAM,MAAM,YAAY,GAAG;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,iGAAiG;IACjG,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,6GAA6G;AAC7G,MAAM,MAAM,iBAAiB,GAAG;IAC9B,oBAAoB,EAAE,OAAO,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,kBAAkB,GAAG,OAAO,GAAG,MAAM,CAAC;IACnE,gBAAgB,CAAC,EAAE,UAAU,GAAG,0BAA0B,GAAG,kBAAkB,GAAG,MAAM,GAAG,MAAM,CAAC;IAClG,yCAAyC;IACzC,SAAS,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,WAAW,GAAG,SAAS,GAAG,MAAM,CAAC;IAClE,iFAAiF;IACjF,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,yFAAyF;IACzF,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,CAAC;AAEF,qGAAqG;AACrG,MAAM,MAAM,sBAAsB,GAAG;IACnC,WAAW,EAAE,gBAAgB,CAAC;IAC9B,eAAe,EAAE,OAAO,CAAC;IACzB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,SAAS,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,WAAW,EAAE,sBAAsB,CAAC;IACpC,+EAA+E;IAC/E,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC,kEAAkE;IAClE,sBAAsB,CAAC,EAAE,OAAO,CAAC;IAEjC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,YAAY,EAAE,YAAY,CAAC;IAC3B,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAClC,eAAe,EAAE,qBAAqB,CAAC;IACvC,+EAA+E;IAC/E,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,8FAA8F;IAC9F,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,+EAA+E;IAC/E,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,cAAc,EAAE,OAAO,CAAC;IACxB,KAAK,EAAE,eAAe,CAAC;IACvB,MAAM,EAAE,gBAAgB,CAAC;IACzB,iBAAiB,EAAE,gBAAgB,CAAC;IACpC,kBAAkB,EAAE,OAAO,CAAC;IAC5B;;;;OAIG;IACH,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B;;;OAGG;IACH,SAAS,EAAE,gBAAgB,EAAE,CAAC;IAC9B,MAAM,EAAE;QACN,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,MAAM,CAAC;QACpB,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;QACjC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;QACjC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;KAC1B,CAAC;CACH,CAAC;AAkCF;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,kBAAkB,CAmHrE"}
@@ -82,7 +82,9 @@ function deployGate(input) {
82
82
  operation: receipt && receipt.operation != null ? String(receipt.operation) : null,
83
83
  };
84
84
  const deny = (state, reason) => ({
85
- deploy_allowed: false, state, reason, enforcement_state, inescapable_deploy: false, detail,
85
+ deploy_allowed: false, state, reason, enforcement_state, inescapable_deploy: false,
86
+ residuals: [],
87
+ detail,
86
88
  });
87
89
  // 0) incomplete target → pending/failure (fail-closed on missing evaluation input).
88
90
  if (!target.environment || String(target.environment).trim() === ''
@@ -144,26 +146,28 @@ function deployGate(input) {
144
146
  // 10) inescapable_deploy claim (STRICT, §1.4 step 10 / D8): only when the pipeline actually enforces
145
147
  // the step AND no bypass is possible. Never true otherwise.
146
148
  const inescapable_deploy = enforcement_state === 'ENFORCING' && enf.bypass_possible === false;
147
- let residual;
149
+ // Collect ALL applicable honesty residuals in evaluation order (no overwrite).
150
+ // Singular residual = residuals[0] (enforcement-axis before change_set_not_rebound).
151
+ const residuals = [];
148
152
  if (!inescapable_deploy) {
149
153
  if (enforcement_state === 'ENFORCING')
150
- residual = 'bypass_open'; // enforced, but a bypass exists
154
+ residuals.push('bypass_open'); // enforced, but a bypass exists
151
155
  else
152
- residual = 'enforcement_not_configured'; // ADVISORY / ABSENT / UNKNOWN
156
+ residuals.push('enforcement_not_configured'); // ADVISORY / ABSENT / UNKNOWN
153
157
  }
154
- // Optional change-set re-bind skipped: record the gap, do not flip the claim (same residual-only
155
- // shape as merge-gate change_set_not_rebound / required_check_app_*). Only fills when no residual
156
- // is already named. Distinct from fingerprint_mismatch (hard fail when a re-bind was requested
157
- // and disagreed).
158
- if (rc.expected_fingerprint == null && residual === undefined) {
159
- residual = 'change_set_not_rebound';
158
+ // Optional change-set re-bind skipped: co-occurs with enforcement residuals
159
+ // (previously dropped when singular residual was already set). Distinct from fingerprint_mismatch.
160
+ if (rc.expected_fingerprint == null) {
161
+ residuals.push('change_set_not_rebound');
160
162
  }
163
+ const residual = residuals.length > 0 ? residuals[0] : undefined;
161
164
  return {
162
165
  deploy_allowed: true,
163
166
  state: 'success',
164
167
  reason: 'allow_current_deploy',
165
168
  enforcement_state,
166
169
  inescapable_deploy,
170
+ residuals,
167
171
  ...(residual ? { residual } : {}),
168
172
  detail,
169
173
  };
@@ -1 +1 @@
1
- {"version":3,"file":"deploy-gate.js","sourceRoot":"","sources":["../../src/deploy-gate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"deploy-gate.js","sourceRoot":"","sources":["../../src/deploy-gate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,100 @@
1
+ /**
2
+ * Option A safe dispatcher — per-framework execute wrappers that run a tool call
3
+ * through the protected table AND always return a proof-bound framework message.
4
+ *
5
+ * Closes the manual-binder gap (audit D): hosts that use these faces cannot
6
+ * forget bind*GuardOutcome — the return type is ONLY the ProofBound* brand.
7
+ *
8
+ * MECHANISM (measured, tool-registry.ts wrapWithGuard):
9
+ * ProtectedTool.execute for mutators returns guardToolCall(...) → GuardOutcome.
10
+ * No parallel guard path: the dispatcher only calls tool.execute on the table.
11
+ *
12
+ * REACHABILITY (do not overclaim):
13
+ * Same residual as GuardExecutionProof.limits.calls_outside_guarded_path_invisible
14
+ * and withCodeRifts composition honesty — calls outside the returned table remain
15
+ * invisible. This dispatcher only covers calls it is given against the table.
16
+ *
17
+ * BLOCK branch: binder no-result path (never fabricates a tool result) + measured
18
+ * DecisionResultEnvelope fields surfaced when present (decision_id, decision,
19
+ * execution_action, required_action, next_actions, breaking_changes). No invented
20
+ * remediation (ID850 lives in the app, not here).
21
+ */
22
+ import type { GuardOutcome, DecisionResultEnvelope } from './types.js';
23
+ import type { ProtectedTool } from './tool-registry.js';
24
+ import { type BindOpenAIGuardOutcomeArgs, type ProofBoundOpenAIToolMessage } from './adapters/openai.js';
25
+ import { type BindAnthropicGuardOutcomeArgs, type ProofBoundAnthropicToolResult } from './adapters/anthropic.js';
26
+ import { type BindGeminiGuardOutcomeArgs, type ProofBoundGeminiFunctionResponse } from './adapters/gemini.js';
27
+ import { type BindLangGraphGuardOutcomeArgs, type ProofBoundLangGraphToolMessage } from './adapters/langgraph.js';
28
+ /**
29
+ * Accepts a bare ProtectedTool[] or a withCodeRifts / withCodeRifts* result that
30
+ * carries `tools` and/or `protected_tools`.
31
+ */
32
+ export type ProtectedToolTableInput = readonly ProtectedTool[] | {
33
+ tools?: readonly ProtectedTool[];
34
+ protected_tools?: readonly ProtectedTool[];
35
+ };
36
+ /** Measured shape: every arm has executed + executionAttempted + proof + verdict. */
37
+ export declare function isGuardOutcome(x: unknown): x is GuardOutcome<unknown>;
38
+ /**
39
+ * Locate tool by name on the protected table and invoke its execute.
40
+ * Mutators return GuardOutcome (guardToolCall); unknown → typed refusal outcome.
41
+ *
42
+ * Does NOT claim reachability outside the table
43
+ * (limits.calls_outside_guarded_path_invisible).
44
+ */
45
+ export declare function executeProtectedTool(table: ProtectedToolTableInput, toolName: string, args: unknown): Promise<GuardOutcome<unknown>>;
46
+ /**
47
+ * Fields lifted only when present on DecisionResultEnvelope (producer schema).
48
+ * required_action is DISPLAY ONLY per schema — never a control source / remediation enginge.
49
+ * No invented remediation structures (ID850 is app-side).
50
+ */
51
+ export type SurfacedEnvelopeFields = {
52
+ decision_id?: string;
53
+ decision?: string;
54
+ execution_action?: string;
55
+ required_action?: string | null;
56
+ next_actions?: unknown;
57
+ breaking_changes?: number | null;
58
+ };
59
+ export declare function surfaceEnvelopeFields(envelope: DecisionResultEnvelope | null | undefined): SurfacedEnvelopeFields | null;
60
+ export type ExecuteOpenAIToolCallArgs = {
61
+ /** Protected table or withCodeRifts / withCodeRiftsOpenAI result. */
62
+ tools: ProtectedToolTableInput;
63
+ /** Model tool_call_id this message answers. */
64
+ tool_call_id: string;
65
+ /** Function/tool name as returned by the model. */
66
+ name: string;
67
+ /** Tool arguments (object or JSON string). */
68
+ arguments?: unknown;
69
+ serialize?: BindOpenAIGuardOutcomeArgs<unknown>['serialize'];
70
+ };
71
+ /**
72
+ * OpenAI face: protected table + one tool_call → ProofBoundOpenAIToolMessage only.
73
+ * Return type is branded — host cannot type-check a forgotten-proof path.
74
+ */
75
+ export declare function executeOpenAIToolCall(args: ExecuteOpenAIToolCallArgs): Promise<ProofBoundOpenAIToolMessage>;
76
+ export type ExecuteAnthropicToolCallArgs = {
77
+ tools: ProtectedToolTableInput;
78
+ tool_use_id: string;
79
+ name: string;
80
+ arguments?: unknown;
81
+ serialize?: BindAnthropicGuardOutcomeArgs<unknown>['serialize'];
82
+ };
83
+ export declare function executeAnthropicToolCall(args: ExecuteAnthropicToolCallArgs): Promise<ProofBoundAnthropicToolResult>;
84
+ export type ExecuteGeminiToolCallArgs = {
85
+ tools: ProtectedToolTableInput;
86
+ /** Gemini function name (also used as BindGemini name). */
87
+ name: string;
88
+ arguments?: unknown;
89
+ serialize?: BindGeminiGuardOutcomeArgs<unknown>['serialize'];
90
+ };
91
+ export declare function executeGeminiToolCall(args: ExecuteGeminiToolCallArgs): Promise<ProofBoundGeminiFunctionResponse>;
92
+ export type ExecuteLangGraphToolCallArgs = {
93
+ tools: ProtectedToolTableInput;
94
+ tool_call_id: string;
95
+ name: string;
96
+ arguments?: unknown;
97
+ serialize?: BindLangGraphGuardOutcomeArgs<unknown>['serialize'];
98
+ };
99
+ export declare function executeLangGraphToolCall(args: ExecuteLangGraphToolCallArgs): Promise<ProofBoundLangGraphToolMessage>;
100
+ //# sourceMappingURL=execute-tool-call.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execute-tool-call.d.ts","sourceRoot":"","sources":["../../src/execute-tool-call.ts"],"names":[],"mappings":"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"}