@coderifts/agent-guard 6.3.0 → 7.0.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 +36 -12
- package/dist/cjs/deploy-gate.d.ts +14 -4
- package/dist/cjs/deploy-gate.d.ts.map +1 -1
- package/dist/cjs/deploy-gate.js +17 -14
- 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 +15 -7
- package/dist/cjs/merge-gate.d.ts.map +1 -1
- package/dist/cjs/merge-gate.js +31 -32
- 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 +14 -4
- package/dist/esm/deploy-gate.d.ts.map +1 -1
- package/dist/esm/deploy-gate.js +17 -14
- 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 +15 -7
- package/dist/esm/merge-gate.d.ts.map +1 -1
- package/dist/esm/merge-gate.js +31 -32
- 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
|
@@ -53,7 +53,12 @@ if (!outcome.executed) console.error('blocked:', outcome.verdict);
|
|
|
53
53
|
// Retry ONLY when outcome.executionAttempted === false (the safe-to-retry signal).
|
|
54
54
|
```
|
|
55
55
|
|
|
56
|
-
#### `requireExecutionStateMatch` — opt-in
|
|
56
|
+
#### `requireExecutionStateMatch` — first-class opt-in warn telemetry (safe pre-flip observation)
|
|
57
|
+
|
|
58
|
+
> **891 / install-time recommendation:** this is the **safe pre-flip observation mode**.
|
|
59
|
+
> It is **built, split, and ready** — but **default remains OFF** by design. Enable
|
|
60
|
+
> `requireExecutionStateMatch: 'warn'` yourself when you want host-side telemetry
|
|
61
|
+
> without blocking tool calls. CodeRifts does **not** auto-flip this default.
|
|
57
62
|
|
|
58
63
|
After a fully enforceable ALLOW/MONITOR decision and **immediately before** `executeFactory`,
|
|
59
64
|
the guard can recompute the execution-time change-set fingerprint (crbundle.v1 over the
|
|
@@ -61,29 +66,46 @@ the guard can recompute the execution-time change-set fingerprint (crbundle.v1 o
|
|
|
61
66
|
authorized. Config field on `GuardConfig` (tri-state):
|
|
62
67
|
|
|
63
68
|
```ts
|
|
64
|
-
requireExecutionStateMatch?: boolean | 'warn';
|
|
69
|
+
requireExecutionStateMatch?: boolean | 'warn'; // default: absent / false (OFF)
|
|
65
70
|
```
|
|
66
71
|
|
|
67
72
|
| Mode | Value | Behavior |
|
|
68
73
|
|---|---|---|
|
|
69
74
|
| **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** (does not block). On
|
|
71
|
-
| **Enforce** | `true` | Rechecks. On
|
|
75
|
+
| **Warn** (report-only · **recommended first step**) | `'warn'` | Rechecks. On **real drift**, emits loud `execution_state_drift_observed` via **`onEvent`**, then **proceeds** (does not block). On **unmeasurable** state (nothing to compare), emits quiet `execution_state_unmeasurable` (not drift, not safety), then **proceeds**. On match, silent. |
|
|
76
|
+
| **Enforce** | `true` | Rechecks. On mismatch, **blocks** with integrity cause `EXECUTION_STATE_DRIFT` (factory never runs). Byte-identical to the original enforce path. |
|
|
77
|
+
|
|
78
|
+
**Two warn signals (noise-split — already shipped; use before any default flip):**
|
|
72
79
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
80
|
+
| Event | When | Meaning |
|
|
81
|
+
|---|---|---|
|
|
82
|
+
| `execution_state_drift_observed` (loud) | `reason === fingerprint_stale_at_execute` | Authorized fp ≠ current artifacts hash — real T1→T2 content drift. |
|
|
83
|
+
| `execution_state_unmeasurable` (quiet) | `missing_artifacts` or `missing_authorized_fingerprint` | Nothing to measure — **not** evidence of drift and **not** evidence of safety. |
|
|
76
84
|
|
|
77
|
-
|
|
85
|
+
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 ladder (human climbs; nothing auto-enables):** **off → `'warn'` (observe loud only, still proceeds) → `true` (enforce / hard stop)**.
|
|
86
|
+
|
|
87
|
+
Warn-mode events (host-side only; the guard does **not** phone home), on `GuardConfig.onEvent`:
|
|
78
88
|
|
|
79
89
|
```ts
|
|
90
|
+
// Loud — real drift (shape frozen; regression-locked)
|
|
80
91
|
{
|
|
81
92
|
type: 'execution_state_drift_observed';
|
|
82
93
|
at: string; // ISO timestamp
|
|
83
94
|
decisionId?: string;
|
|
84
95
|
current_fingerprint: string | null;
|
|
85
96
|
authorized_fingerprint: string | null;
|
|
86
|
-
reason: string;
|
|
97
|
+
reason: string; // fingerprint_stale_at_execute
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
// Quiet — unmeasurable (additive)
|
|
101
|
+
{
|
|
102
|
+
type: 'execution_state_unmeasurable';
|
|
103
|
+
at: string;
|
|
104
|
+
decisionId?: string;
|
|
105
|
+
current_fingerprint: string | null;
|
|
106
|
+
authorized_fingerprint: string | null;
|
|
107
|
+
reason: string; // missing_artifacts | missing_authorized_fingerprint
|
|
108
|
+
note: 'nothing to measure — not evidence of drift, not evidence of safety';
|
|
87
109
|
}
|
|
88
110
|
```
|
|
89
111
|
|
|
@@ -94,9 +116,10 @@ const outcome = await guardToolCall(call, executeFactory, {
|
|
|
94
116
|
requireExecutionStateMatch: 'warn', // opt-in telemetry; still proceeds on drift
|
|
95
117
|
onEvent: (e) => {
|
|
96
118
|
if (e.type === 'execution_state_drift_observed') {
|
|
97
|
-
// host metrics / log —
|
|
119
|
+
// host metrics / log — real drift only; nothing is sent to CodeRifts from here
|
|
98
120
|
console.warn('execution-state drift', e.decisionId, e.reason, e.current_fingerprint);
|
|
99
121
|
}
|
|
122
|
+
// optional: e.type === 'execution_state_unmeasurable' → debug-only, do not page
|
|
100
123
|
},
|
|
101
124
|
});
|
|
102
125
|
```
|
|
@@ -746,8 +769,9 @@ Pass both on `withCodeRifts({ …, onEvent, monitoringSinkWired: true })`, or on
|
|
|
746
769
|
host commits. Closing that needs a host-side conditional write (compare-and-swap on a version
|
|
747
770
|
token) — this package never writes, and reports `conditional_write` as a host assertion it
|
|
748
771
|
cannot verify. Opt-in **`requireExecutionStateMatch`** (`false` / `'warn'` / `true`) can
|
|
749
|
-
recheck the execution-time fingerprint before the factory (warn =
|
|
750
|
-
`execution_state_drift_observed
|
|
772
|
+
recheck the execution-time fingerprint before the factory (warn = loud
|
|
773
|
+
`execution_state_drift_observed` on real drift / quiet `execution_state_unmeasurable` when
|
|
774
|
+
nothing to measure; true = block with `EXECUTION_STATE_DRIFT`) — a detection or
|
|
751
775
|
enforcement aid, **not** a full TOCTOU closure. See the subsection above.
|
|
752
776
|
- **Retry-safe** — `executionAttempted` is the only safe-to-retry signal; a post-authorization throw
|
|
753
777
|
is `executionAttempted:true` (the remote side effect may have landed).
|
|
@@ -25,9 +25,10 @@ export type { GateStatusState, EnforcementState } from './merge-gate.js';
|
|
|
25
25
|
* otherwise-green check; fingerprint_mismatch is a hard failure (not a residual). */
|
|
26
26
|
export type DeployGateReason = 'allow_current_deploy' | 'no_receipt' | 'receipt_not_authorized' | 'operation_mismatch' | 'env_mismatch' | 'stale_artifact' | 'fingerprint_mismatch' | 'body_hash_mismatch' | 'target_mismatch' | 'decision_not_allow' | 'inputs_incomplete' | 'enforcement_not_configured' | 'bypass_open'
|
|
27
27
|
/**
|
|
28
|
-
* Host did not supply expected_fingerprint — the
|
|
29
|
-
* Residual
|
|
30
|
-
* fingerprint_mismatch
|
|
28
|
+
* Host did not supply expected_fingerprint — the change-set re-bind was skipped.
|
|
29
|
+
* Residual names the gap; inescapable_deploy is false (fail-closed). Distinct from
|
|
30
|
+
* fingerprint_mismatch (hard failure when a re-bind WAS requested and disagreed).
|
|
31
|
+
* deploy_allowed may stay true.
|
|
31
32
|
*/
|
|
32
33
|
| 'change_set_not_rebound';
|
|
33
34
|
/** What is being deployed — all fields are INPUTS (the pure function performs no discovery). */
|
|
@@ -93,8 +94,17 @@ export type DeployGateDecision = {
|
|
|
93
94
|
reason: DeployGateReason;
|
|
94
95
|
enforcement_state: EnforcementState;
|
|
95
96
|
inescapable_deploy: boolean;
|
|
96
|
-
/**
|
|
97
|
+
/**
|
|
98
|
+
* Named residual when the check is green but NOT inescapable (honesty channel, §3.2).
|
|
99
|
+
* Compat: FIRST residual in evaluation order (same priority as pre-array single-slot).
|
|
100
|
+
* Prefer `residuals` when co-occurrence matters.
|
|
101
|
+
*/
|
|
97
102
|
residual?: DeployGateReason;
|
|
103
|
+
/**
|
|
104
|
+
* ALL applicable honesty residuals in evaluation order (no duplicates).
|
|
105
|
+
* Empty array when none. Additive — singular `residual` remains for published callers.
|
|
106
|
+
*/
|
|
107
|
+
residuals: DeployGateReason[];
|
|
98
108
|
detail: {
|
|
99
109
|
environment: string;
|
|
100
110
|
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
|
|
1
|
+
{"version":3,"file":"deploy-gate.d.ts","sourceRoot":"","sources":["../../src/deploy-gate.ts"],"names":[],"mappings":"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"}
|
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() === ''
|
|
@@ -141,29 +143,30 @@ function deployGate(input) {
|
|
|
141
143
|
return deny('failure', 'decision_not_allow');
|
|
142
144
|
}
|
|
143
145
|
// 9) success for the CHECK / pipeline step — green for visibility regardless of enforcement strength.
|
|
144
|
-
// 10) inescapable_deploy
|
|
145
|
-
//
|
|
146
|
-
const
|
|
147
|
-
|
|
148
|
-
|
|
146
|
+
// 10) inescapable_deploy (fail-closed): true ONLY when ENFORCING ∧ ¬bypass ∧ fingerprint rebound.
|
|
147
|
+
// Unbound change set → false (cannot assert), never residual-true.
|
|
148
|
+
const enforcementOk = enforcement_state === 'ENFORCING' && enf.bypass_possible === false;
|
|
149
|
+
const rebound = rc.expected_fingerprint != null && String(rc.expected_fingerprint).length > 0;
|
|
150
|
+
const inescapable_deploy = enforcementOk && rebound;
|
|
151
|
+
// Residuals key off the FACT that failed (not the collapsed flag).
|
|
152
|
+
const residuals = [];
|
|
153
|
+
if (!enforcementOk) {
|
|
149
154
|
if (enforcement_state === 'ENFORCING')
|
|
150
|
-
|
|
155
|
+
residuals.push('bypass_open');
|
|
151
156
|
else
|
|
152
|
-
|
|
157
|
+
residuals.push('enforcement_not_configured');
|
|
153
158
|
}
|
|
154
|
-
|
|
155
|
-
|
|
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';
|
|
159
|
+
if (!rebound) {
|
|
160
|
+
residuals.push('change_set_not_rebound');
|
|
160
161
|
}
|
|
162
|
+
const residual = residuals.length > 0 ? residuals[0] : undefined;
|
|
161
163
|
return {
|
|
162
164
|
deploy_allowed: true,
|
|
163
165
|
state: 'success',
|
|
164
166
|
reason: 'allow_current_deploy',
|
|
165
167
|
enforcement_state,
|
|
166
168
|
inescapable_deploy,
|
|
169
|
+
residuals,
|
|
167
170
|
...(residual ? { residual } : {}),
|
|
168
171
|
detail,
|
|
169
172
|
};
|
|
@@ -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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"}
|