@coderifts/agent-guard 6.3.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.
- package/README.md +29 -10
- package/dist/cjs/deploy-gate.d.ts +10 -1
- package/dist/cjs/deploy-gate.d.ts.map +1 -1
- package/dist/cjs/deploy-gate.js +14 -10
- package/dist/cjs/deploy-gate.js.map +1 -1
- package/dist/cjs/execute-tool-call.d.ts +100 -0
- package/dist/cjs/execute-tool-call.d.ts.map +1 -0
- package/dist/cjs/execute-tool-call.js +334 -0
- package/dist/cjs/execute-tool-call.js.map +1 -0
- package/dist/cjs/execution-time-fingerprint.d.ts +8 -0
- package/dist/cjs/execution-time-fingerprint.d.ts.map +1 -1
- package/dist/cjs/execution-time-fingerprint.js +13 -1
- package/dist/cjs/execution-time-fingerprint.js.map +1 -1
- package/dist/cjs/guard.d.ts.map +1 -1
- package/dist/cjs/guard.js +28 -9
- package/dist/cjs/guard.js.map +1 -1
- package/dist/cjs/index.d.ts +5 -1
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +23 -3
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/merge-gate.d.ts +8 -0
- package/dist/cjs/merge-gate.d.ts.map +1 -1
- package/dist/cjs/merge-gate.js +19 -12
- package/dist/cjs/merge-gate.js.map +1 -1
- package/dist/cjs/remediation-loop-attestation.d.ts +125 -0
- package/dist/cjs/remediation-loop-attestation.d.ts.map +1 -0
- package/dist/cjs/remediation-loop-attestation.js +186 -0
- package/dist/cjs/remediation-loop-attestation.js.map +1 -0
- package/dist/cjs/types.d.ts +20 -3
- package/dist/cjs/types.d.ts.map +1 -1
- package/dist/cjs/with-coderifts.d.ts +2 -1
- package/dist/cjs/with-coderifts.d.ts.map +1 -1
- package/dist/cjs/with-coderifts.js.map +1 -1
- package/dist/esm/deploy-gate.d.ts +10 -1
- package/dist/esm/deploy-gate.d.ts.map +1 -1
- package/dist/esm/deploy-gate.js +14 -10
- package/dist/esm/deploy-gate.js.map +1 -1
- package/dist/esm/execute-tool-call.d.ts +100 -0
- package/dist/esm/execute-tool-call.d.ts.map +1 -0
- package/dist/esm/execute-tool-call.js +325 -0
- package/dist/esm/execute-tool-call.js.map +1 -0
- package/dist/esm/execution-time-fingerprint.d.ts +8 -0
- package/dist/esm/execution-time-fingerprint.d.ts.map +1 -1
- package/dist/esm/execution-time-fingerprint.js +11 -0
- package/dist/esm/execution-time-fingerprint.js.map +1 -1
- package/dist/esm/guard.d.ts.map +1 -1
- package/dist/esm/guard.js +29 -10
- package/dist/esm/guard.js.map +1 -1
- package/dist/esm/index.d.ts +5 -1
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +7 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/merge-gate.d.ts +8 -0
- package/dist/esm/merge-gate.d.ts.map +1 -1
- package/dist/esm/merge-gate.js +19 -12
- package/dist/esm/merge-gate.js.map +1 -1
- package/dist/esm/remediation-loop-attestation.d.ts +125 -0
- package/dist/esm/remediation-loop-attestation.d.ts.map +1 -0
- package/dist/esm/remediation-loop-attestation.js +179 -0
- package/dist/esm/remediation-loop-attestation.js.map +1 -0
- package/dist/esm/types.d.ts +20 -3
- package/dist/esm/types.d.ts.map +1 -1
- package/dist/esm/with-coderifts.d.ts +2 -1
- package/dist/esm/with-coderifts.d.ts.map +1 -1
- package/dist/esm/with-coderifts.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -67,23 +67,40 @@ requireExecutionStateMatch?: boolean | 'warn';
|
|
|
67
67
|
| Mode | Value | Behavior |
|
|
68
68
|
|---|---|---|
|
|
69
69
|
| **OFF** (default) | `false` / absent | No recheck. Residual execution-state race as described under “TOCTOU is unclosed.” |
|
|
70
|
-
| **Warn** (report-only) | `'warn'` | Rechecks. On **drift**, emits `execution_state_drift_observed` via **`onEvent`**, then **proceeds** (
|
|
71
|
-
| **Enforce** | `true` | Rechecks. On
|
|
70
|
+
| **Warn** (report-only) | `'warn'` | Rechecks. On **real drift**, emits loud `execution_state_drift_observed` via **`onEvent`**, then **proceeds**. On **unmeasurable** state (nothing to compare), emits quiet `execution_state_unmeasurable` (not drift, not safety), then **proceeds**. On match, silent. |
|
|
71
|
+
| **Enforce** | `true` | Rechecks. On mismatch, **blocks** with integrity cause `EXECUTION_STATE_DRIFT` (factory never runs). Byte-identical to the original enforce path. |
|
|
72
72
|
|
|
73
|
-
|
|
74
|
-
telemetry shows drift is rare and real. A default flip to enforce is a later, versioned
|
|
75
|
-
product decision — not this mode’s job.
|
|
73
|
+
**Two warn signals (noise-fix for a future default flip):**
|
|
76
74
|
|
|
77
|
-
|
|
75
|
+
| Event | When | Meaning |
|
|
76
|
+
|---|---|---|
|
|
77
|
+
| `execution_state_drift_observed` (loud) | `reason === fingerprint_stale_at_execute` | Authorized fp ≠ current artifacts hash — real T1→T2 content drift. |
|
|
78
|
+
| `execution_state_unmeasurable` (quiet) | `missing_artifacts` or `missing_authorized_fingerprint` | Nothing to measure — **not** evidence of drift and **not** evidence of safety. |
|
|
79
|
+
|
|
80
|
+
A future default flip to warn (step3b, guard@7) will ride on the **loud** signal only; quiet unmeasurable must not page as drift. Recommended adoption: **off → `'warn'` (observe loud only) → `true` (enforce)**.
|
|
81
|
+
|
|
82
|
+
Warn-mode events (host-side only; the guard does **not** phone home), on `GuardConfig.onEvent`:
|
|
78
83
|
|
|
79
84
|
```ts
|
|
85
|
+
// Loud — real drift (shape frozen; regression-locked)
|
|
80
86
|
{
|
|
81
87
|
type: 'execution_state_drift_observed';
|
|
82
88
|
at: string; // ISO timestamp
|
|
83
89
|
decisionId?: string;
|
|
84
90
|
current_fingerprint: string | null;
|
|
85
91
|
authorized_fingerprint: string | null;
|
|
86
|
-
reason: string;
|
|
92
|
+
reason: string; // fingerprint_stale_at_execute
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// Quiet — unmeasurable (additive)
|
|
96
|
+
{
|
|
97
|
+
type: 'execution_state_unmeasurable';
|
|
98
|
+
at: string;
|
|
99
|
+
decisionId?: string;
|
|
100
|
+
current_fingerprint: string | null;
|
|
101
|
+
authorized_fingerprint: string | null;
|
|
102
|
+
reason: string; // missing_artifacts | missing_authorized_fingerprint
|
|
103
|
+
note: 'nothing to measure — not evidence of drift, not evidence of safety';
|
|
87
104
|
}
|
|
88
105
|
```
|
|
89
106
|
|
|
@@ -94,9 +111,10 @@ const outcome = await guardToolCall(call, executeFactory, {
|
|
|
94
111
|
requireExecutionStateMatch: 'warn', // opt-in telemetry; still proceeds on drift
|
|
95
112
|
onEvent: (e) => {
|
|
96
113
|
if (e.type === 'execution_state_drift_observed') {
|
|
97
|
-
// host metrics / log —
|
|
114
|
+
// host metrics / log — real drift only; nothing is sent to CodeRifts from here
|
|
98
115
|
console.warn('execution-state drift', e.decisionId, e.reason, e.current_fingerprint);
|
|
99
116
|
}
|
|
117
|
+
// optional: e.type === 'execution_state_unmeasurable' → debug-only, do not page
|
|
100
118
|
},
|
|
101
119
|
});
|
|
102
120
|
```
|
|
@@ -746,8 +764,9 @@ Pass both on `withCodeRifts({ …, onEvent, monitoringSinkWired: true })`, or on
|
|
|
746
764
|
host commits. Closing that needs a host-side conditional write (compare-and-swap on a version
|
|
747
765
|
token) — this package never writes, and reports `conditional_write` as a host assertion it
|
|
748
766
|
cannot verify. Opt-in **`requireExecutionStateMatch`** (`false` / `'warn'` / `true`) can
|
|
749
|
-
recheck the execution-time fingerprint before the factory (warn =
|
|
750
|
-
`execution_state_drift_observed
|
|
767
|
+
recheck the execution-time fingerprint before the factory (warn = loud
|
|
768
|
+
`execution_state_drift_observed` on real drift / quiet `execution_state_unmeasurable` when
|
|
769
|
+
nothing to measure; true = block with `EXECUTION_STATE_DRIFT`) — a detection or
|
|
751
770
|
enforcement aid, **not** a full TOCTOU closure. See the subsection above.
|
|
752
771
|
- **Retry-safe** — `executionAttempted` is the only safe-to-retry signal; a post-authorization throw
|
|
753
772
|
is `executionAttempted:true` (the remote side effect may have landed).
|
|
@@ -93,8 +93,17 @@ export type DeployGateDecision = {
|
|
|
93
93
|
reason: DeployGateReason;
|
|
94
94
|
enforcement_state: EnforcementState;
|
|
95
95
|
inescapable_deploy: boolean;
|
|
96
|
-
/**
|
|
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":"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
|
|
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"}
|
package/dist/cjs/deploy-gate.js
CHANGED
|
@@ -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,
|
|
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
|
-
|
|
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
|
-
|
|
154
|
+
residuals.push('bypass_open'); // enforced, but a bypass exists
|
|
151
155
|
else
|
|
152
|
-
|
|
156
|
+
residuals.push('enforcement_not_configured'); // ADVISORY / ABSENT / UNKNOWN
|
|
153
157
|
}
|
|
154
|
-
// Optional change-set re-bind skipped:
|
|
155
|
-
//
|
|
156
|
-
|
|
157
|
-
|
|
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":";AAAA;;;;;;;;;;;;;;;;;;;GAmBG;;
|
|
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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"}
|
|
@@ -0,0 +1,334 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Option A safe dispatcher — per-framework execute wrappers that run a tool call
|
|
4
|
+
* through the protected table AND always return a proof-bound framework message.
|
|
5
|
+
*
|
|
6
|
+
* Closes the manual-binder gap (audit D): hosts that use these faces cannot
|
|
7
|
+
* forget bind*GuardOutcome — the return type is ONLY the ProofBound* brand.
|
|
8
|
+
*
|
|
9
|
+
* MECHANISM (measured, tool-registry.ts wrapWithGuard):
|
|
10
|
+
* ProtectedTool.execute for mutators returns guardToolCall(...) → GuardOutcome.
|
|
11
|
+
* No parallel guard path: the dispatcher only calls tool.execute on the table.
|
|
12
|
+
*
|
|
13
|
+
* REACHABILITY (do not overclaim):
|
|
14
|
+
* Same residual as GuardExecutionProof.limits.calls_outside_guarded_path_invisible
|
|
15
|
+
* and withCodeRifts composition honesty — calls outside the returned table remain
|
|
16
|
+
* invisible. This dispatcher only covers calls it is given against the table.
|
|
17
|
+
*
|
|
18
|
+
* BLOCK branch: binder no-result path (never fabricates a tool result) + measured
|
|
19
|
+
* DecisionResultEnvelope fields surfaced when present (decision_id, decision,
|
|
20
|
+
* execution_action, required_action, next_actions, breaking_changes). No invented
|
|
21
|
+
* remediation (ID850 lives in the app, not here).
|
|
22
|
+
*/
|
|
23
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
24
|
+
exports.isGuardOutcome = isGuardOutcome;
|
|
25
|
+
exports.executeProtectedTool = executeProtectedTool;
|
|
26
|
+
exports.surfaceEnvelopeFields = surfaceEnvelopeFields;
|
|
27
|
+
exports.executeOpenAIToolCall = executeOpenAIToolCall;
|
|
28
|
+
exports.executeAnthropicToolCall = executeAnthropicToolCall;
|
|
29
|
+
exports.executeGeminiToolCall = executeGeminiToolCall;
|
|
30
|
+
exports.executeLangGraphToolCall = executeLangGraphToolCall;
|
|
31
|
+
const execution_proof_js_1 = require("./execution-proof.js");
|
|
32
|
+
const openai_js_1 = require("./adapters/openai.js");
|
|
33
|
+
const anthropic_js_1 = require("./adapters/anthropic.js");
|
|
34
|
+
const gemini_js_1 = require("./adapters/gemini.js");
|
|
35
|
+
const langgraph_js_1 = require("./adapters/langgraph.js");
|
|
36
|
+
function resolveProtectedTools(table) {
|
|
37
|
+
if (Array.isArray(table))
|
|
38
|
+
return table;
|
|
39
|
+
if (table && typeof table === 'object') {
|
|
40
|
+
const bag = table;
|
|
41
|
+
if (Array.isArray(bag.protected_tools) && bag.protected_tools.length > 0) {
|
|
42
|
+
return bag.protected_tools;
|
|
43
|
+
}
|
|
44
|
+
if (Array.isArray(bag.tools)) {
|
|
45
|
+
// withCodeRifts returns tools as ProtectedTool[]; OpenAI face also has tools as shape defs —
|
|
46
|
+
// prefer protected_tools when both exist (OpenAI). When only tools, use if they have execute.
|
|
47
|
+
const withExecute = bag.tools.filter((t) => t && typeof t === 'object' && typeof t.execute === 'function');
|
|
48
|
+
if (withExecute.length > 0)
|
|
49
|
+
return withExecute;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return [];
|
|
53
|
+
}
|
|
54
|
+
function findTool(table, name) {
|
|
55
|
+
const tools = resolveProtectedTools(table);
|
|
56
|
+
return tools.find((t) => t && t.name === name);
|
|
57
|
+
}
|
|
58
|
+
// ── GuardOutcome detection ───────────────────────────────────────────────────
|
|
59
|
+
/** Measured shape: every arm has executed + executionAttempted + proof + verdict. */
|
|
60
|
+
function isGuardOutcome(x) {
|
|
61
|
+
if (!x || typeof x !== 'object')
|
|
62
|
+
return false;
|
|
63
|
+
const o = x;
|
|
64
|
+
return (typeof o.executed === 'boolean'
|
|
65
|
+
&& typeof o.executionAttempted === 'boolean'
|
|
66
|
+
&& o.proof != null
|
|
67
|
+
&& typeof o.proof === 'object'
|
|
68
|
+
&& o.verdict != null
|
|
69
|
+
&& typeof o.verdict === 'object');
|
|
70
|
+
}
|
|
71
|
+
// ── Synthetic outcomes (unknown tool / non-outcome execute returns) ──────────
|
|
72
|
+
const FRESHNESS_NOT_CONFIGURED = Object.freeze({
|
|
73
|
+
wiring: 'NOT_CONFIGURED',
|
|
74
|
+
write_style: false,
|
|
75
|
+
require_freshness: false,
|
|
76
|
+
});
|
|
77
|
+
const CW_NOT_REPORTED = Object.freeze({
|
|
78
|
+
conditional_write: 'not_reported',
|
|
79
|
+
require_conditional_write: false,
|
|
80
|
+
write_style: false,
|
|
81
|
+
});
|
|
82
|
+
/**
|
|
83
|
+
* Unknown tool name — typed refusal via binder no-result path.
|
|
84
|
+
* Uses CONFIG_ERROR integrity UNAVAILABLE (not a fabricated ALLOW).
|
|
85
|
+
* Never throws so the host cannot catch-and-fall-back to raw.
|
|
86
|
+
*/
|
|
87
|
+
function unknownToolOutcome(toolName) {
|
|
88
|
+
const verdict = {
|
|
89
|
+
kind: 'UNAVAILABLE',
|
|
90
|
+
cause: 'CONFIG_ERROR',
|
|
91
|
+
failPolicy: 'closed',
|
|
92
|
+
resolution: 'CLOSED',
|
|
93
|
+
action: 'STOP',
|
|
94
|
+
decisionMissing: true,
|
|
95
|
+
unavailableCount: 1,
|
|
96
|
+
};
|
|
97
|
+
const proof = (0, execution_proof_js_1.buildExecutionProof)({
|
|
98
|
+
preflighted: false,
|
|
99
|
+
executionAttempted: false,
|
|
100
|
+
executed: false,
|
|
101
|
+
enforced: false,
|
|
102
|
+
verdict,
|
|
103
|
+
});
|
|
104
|
+
// Annotate verdict for body text; proof already has verdict_kind.
|
|
105
|
+
void toolName;
|
|
106
|
+
return {
|
|
107
|
+
executionAttempted: false,
|
|
108
|
+
executed: false,
|
|
109
|
+
enforced: false,
|
|
110
|
+
verdict,
|
|
111
|
+
preflighted: false,
|
|
112
|
+
proof,
|
|
113
|
+
freshness: FRESHNESS_NOT_CONFIGURED,
|
|
114
|
+
conditional_write: CW_NOT_REPORTED,
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Readonly / passthrough tools return raw values (not GuardOutcome).
|
|
119
|
+
* Wrap as unenforced executed SKIPPED so binders still produce ProofBound*.
|
|
120
|
+
*/
|
|
121
|
+
function wrapRawAsOutcome(result) {
|
|
122
|
+
const verdict = {
|
|
123
|
+
kind: 'SKIPPED',
|
|
124
|
+
reason: 'NOT_A_CONTRACT_CALL',
|
|
125
|
+
signals: ['dispatcher_passthrough'],
|
|
126
|
+
detectorVersion: 'execute-tool-call',
|
|
127
|
+
};
|
|
128
|
+
const proof = (0, execution_proof_js_1.buildExecutionProof)({
|
|
129
|
+
preflighted: false,
|
|
130
|
+
executionAttempted: true,
|
|
131
|
+
executed: true,
|
|
132
|
+
enforced: false,
|
|
133
|
+
verdict,
|
|
134
|
+
result,
|
|
135
|
+
});
|
|
136
|
+
return {
|
|
137
|
+
executionAttempted: true,
|
|
138
|
+
executed: true,
|
|
139
|
+
enforced: false,
|
|
140
|
+
result,
|
|
141
|
+
verdict,
|
|
142
|
+
preflighted: false,
|
|
143
|
+
proof,
|
|
144
|
+
freshness: FRESHNESS_NOT_CONFIGURED,
|
|
145
|
+
conditional_write: CW_NOT_REPORTED,
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
function wrapThrownAsOutcome(error) {
|
|
149
|
+
const verdict = {
|
|
150
|
+
kind: 'SKIPPED',
|
|
151
|
+
reason: 'NOT_A_CONTRACT_CALL',
|
|
152
|
+
signals: ['dispatcher_passthrough_throw'],
|
|
153
|
+
detectorVersion: 'execute-tool-call',
|
|
154
|
+
};
|
|
155
|
+
const proof = (0, execution_proof_js_1.buildExecutionProof)({
|
|
156
|
+
preflighted: false,
|
|
157
|
+
executionAttempted: true,
|
|
158
|
+
executed: false,
|
|
159
|
+
enforced: false,
|
|
160
|
+
verdict,
|
|
161
|
+
error,
|
|
162
|
+
});
|
|
163
|
+
return {
|
|
164
|
+
executionAttempted: true,
|
|
165
|
+
executed: false,
|
|
166
|
+
enforced: false,
|
|
167
|
+
error,
|
|
168
|
+
verdict,
|
|
169
|
+
preflighted: false,
|
|
170
|
+
proof,
|
|
171
|
+
freshness: FRESHNESS_NOT_CONFIGURED,
|
|
172
|
+
conditional_write: CW_NOT_REPORTED,
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
// ── Core: execute through table → GuardOutcome ───────────────────────────────
|
|
176
|
+
/**
|
|
177
|
+
* Locate tool by name on the protected table and invoke its execute.
|
|
178
|
+
* Mutators return GuardOutcome (guardToolCall); unknown → typed refusal outcome.
|
|
179
|
+
*
|
|
180
|
+
* Does NOT claim reachability outside the table
|
|
181
|
+
* (limits.calls_outside_guarded_path_invisible).
|
|
182
|
+
*/
|
|
183
|
+
async function executeProtectedTool(table, toolName, args) {
|
|
184
|
+
const tool = findTool(table, toolName);
|
|
185
|
+
if (!tool) {
|
|
186
|
+
return unknownToolOutcome(toolName);
|
|
187
|
+
}
|
|
188
|
+
try {
|
|
189
|
+
const raw = await tool.execute(args);
|
|
190
|
+
if (isGuardOutcome(raw))
|
|
191
|
+
return raw;
|
|
192
|
+
// Readonly passthrough: raw factory return, not a GuardOutcome.
|
|
193
|
+
return wrapRawAsOutcome(raw);
|
|
194
|
+
}
|
|
195
|
+
catch (err) {
|
|
196
|
+
// Guarded mutators absorb factory throws into GuardOutcome; passthrough may throw.
|
|
197
|
+
return wrapThrownAsOutcome(err);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
function surfaceEnvelopeFields(envelope) {
|
|
201
|
+
if (!envelope || typeof envelope !== 'object')
|
|
202
|
+
return null;
|
|
203
|
+
const e = envelope;
|
|
204
|
+
const out = {};
|
|
205
|
+
if (typeof e.decision_id === 'string')
|
|
206
|
+
out.decision_id = e.decision_id;
|
|
207
|
+
if (typeof e.decision === 'string')
|
|
208
|
+
out.decision = e.decision;
|
|
209
|
+
if (typeof e.execution_action === 'string')
|
|
210
|
+
out.execution_action = e.execution_action;
|
|
211
|
+
if ('required_action' in e) {
|
|
212
|
+
out.required_action = e.required_action == null ? null : String(e.required_action);
|
|
213
|
+
}
|
|
214
|
+
if ('next_actions' in e)
|
|
215
|
+
out.next_actions = e.next_actions;
|
|
216
|
+
if ('breaking_changes' in e) {
|
|
217
|
+
out.breaking_changes =
|
|
218
|
+
typeof e.breaking_changes === 'number' ? e.breaking_changes : e.breaking_changes === null ? null : undefined;
|
|
219
|
+
if (out.breaking_changes === undefined)
|
|
220
|
+
delete out.breaking_changes;
|
|
221
|
+
}
|
|
222
|
+
return Object.keys(out).length > 0 ? out : null;
|
|
223
|
+
}
|
|
224
|
+
function envelopeFromOutcome(outcome) {
|
|
225
|
+
const v = outcome.verdict;
|
|
226
|
+
if (v && typeof v === 'object' && 'envelope' in v && v.envelope && typeof v.envelope === 'object') {
|
|
227
|
+
return v.envelope;
|
|
228
|
+
}
|
|
229
|
+
return null;
|
|
230
|
+
}
|
|
231
|
+
/** Append measured envelope surface to a string body (OpenAI/Anthropic/LangGraph). */
|
|
232
|
+
function appendEnvelopeSurface(body, outcome) {
|
|
233
|
+
if (outcome.executionAttempted !== false)
|
|
234
|
+
return body;
|
|
235
|
+
const fields = surfaceEnvelopeFields(envelopeFromOutcome(outcome));
|
|
236
|
+
if (!fields)
|
|
237
|
+
return body;
|
|
238
|
+
return (body
|
|
239
|
+
+ '\n\n[CodeRifts decision envelope — measured fields only; not a remediation engine]\n'
|
|
240
|
+
+ JSON.stringify(fields, null, 2));
|
|
241
|
+
}
|
|
242
|
+
/** Merge measured envelope into Gemini response object (no fabricated result key). */
|
|
243
|
+
function mergeEnvelopeIntoGeminiResponse(response, outcome) {
|
|
244
|
+
if (outcome.executionAttempted !== false)
|
|
245
|
+
return response;
|
|
246
|
+
const fields = surfaceEnvelopeFields(envelopeFromOutcome(outcome));
|
|
247
|
+
if (!fields)
|
|
248
|
+
return response;
|
|
249
|
+
return { ...response, decision_envelope: fields };
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* OpenAI face: protected table + one tool_call → ProofBoundOpenAIToolMessage only.
|
|
253
|
+
* Return type is branded — host cannot type-check a forgotten-proof path.
|
|
254
|
+
*/
|
|
255
|
+
async function executeOpenAIToolCall(args) {
|
|
256
|
+
const callArgs = parseMaybeJsonArgs(args.arguments);
|
|
257
|
+
const outcome = await executeProtectedTool(args.tools, args.name, callArgs);
|
|
258
|
+
const bound = (0, openai_js_1.bindOpenAIGuardOutcome)(outcome, {
|
|
259
|
+
tool_call_id: args.tool_call_id,
|
|
260
|
+
serialize: args.serialize,
|
|
261
|
+
});
|
|
262
|
+
if (outcome.executionAttempted === false) {
|
|
263
|
+
const content = appendEnvelopeSurface(bound.content, outcome);
|
|
264
|
+
return { role: 'tool', tool_call_id: args.tool_call_id, content };
|
|
265
|
+
}
|
|
266
|
+
return bound;
|
|
267
|
+
}
|
|
268
|
+
async function executeAnthropicToolCall(args) {
|
|
269
|
+
const callArgs = parseMaybeJsonArgs(args.arguments);
|
|
270
|
+
const outcome = await executeProtectedTool(args.tools, args.name, callArgs);
|
|
271
|
+
const bound = (0, anthropic_js_1.bindAnthropicGuardOutcome)(outcome, {
|
|
272
|
+
tool_use_id: args.tool_use_id,
|
|
273
|
+
serialize: args.serialize,
|
|
274
|
+
});
|
|
275
|
+
if (outcome.executionAttempted === false) {
|
|
276
|
+
const content = appendEnvelopeSurface(bound.content, outcome);
|
|
277
|
+
return {
|
|
278
|
+
type: 'tool_result',
|
|
279
|
+
tool_use_id: args.tool_use_id,
|
|
280
|
+
content,
|
|
281
|
+
};
|
|
282
|
+
}
|
|
283
|
+
return bound;
|
|
284
|
+
}
|
|
285
|
+
async function executeGeminiToolCall(args) {
|
|
286
|
+
const callArgs = parseMaybeJsonArgs(args.arguments);
|
|
287
|
+
const outcome = await executeProtectedTool(args.tools, args.name, callArgs);
|
|
288
|
+
const bound = (0, gemini_js_1.bindGeminiGuardOutcome)(outcome, {
|
|
289
|
+
name: args.name,
|
|
290
|
+
serialize: args.serialize,
|
|
291
|
+
});
|
|
292
|
+
if (outcome.executionAttempted === false) {
|
|
293
|
+
const response = mergeEnvelopeIntoGeminiResponse({ ...bound.functionResponse.response }, outcome);
|
|
294
|
+
return {
|
|
295
|
+
functionResponse: { name: args.name, response },
|
|
296
|
+
};
|
|
297
|
+
}
|
|
298
|
+
return bound;
|
|
299
|
+
}
|
|
300
|
+
async function executeLangGraphToolCall(args) {
|
|
301
|
+
const callArgs = parseMaybeJsonArgs(args.arguments);
|
|
302
|
+
const outcome = await executeProtectedTool(args.tools, args.name, callArgs);
|
|
303
|
+
const bound = (0, langgraph_js_1.bindLangGraphGuardOutcome)(outcome, {
|
|
304
|
+
tool_call_id: args.tool_call_id,
|
|
305
|
+
name: args.name,
|
|
306
|
+
serialize: args.serialize,
|
|
307
|
+
});
|
|
308
|
+
if (outcome.executionAttempted === false) {
|
|
309
|
+
const content = appendEnvelopeSurface(bound.content, outcome);
|
|
310
|
+
const msg = {
|
|
311
|
+
content,
|
|
312
|
+
tool_call_id: args.tool_call_id,
|
|
313
|
+
name: args.name,
|
|
314
|
+
};
|
|
315
|
+
return msg;
|
|
316
|
+
}
|
|
317
|
+
return bound;
|
|
318
|
+
}
|
|
319
|
+
// ── helpers ──────────────────────────────────────────────────────────────────
|
|
320
|
+
function parseMaybeJsonArgs(args) {
|
|
321
|
+
if (typeof args === 'string') {
|
|
322
|
+
const s = args.trim();
|
|
323
|
+
if (s.length === 0)
|
|
324
|
+
return {};
|
|
325
|
+
try {
|
|
326
|
+
return JSON.parse(s);
|
|
327
|
+
}
|
|
328
|
+
catch {
|
|
329
|
+
return { _raw: args };
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
return args === undefined ? {} : args;
|
|
333
|
+
}
|
|
334
|
+
//# sourceMappingURL=execute-tool-call.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execute-tool-call.js","sourceRoot":"","sources":["../../src/execute-tool-call.ts"],"names":[],"mappings":"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"}
|