@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.
Files changed (66) hide show
  1. package/README.md +29 -10
  2. package/dist/cjs/deploy-gate.d.ts +10 -1
  3. package/dist/cjs/deploy-gate.d.ts.map +1 -1
  4. package/dist/cjs/deploy-gate.js +14 -10
  5. package/dist/cjs/deploy-gate.js.map +1 -1
  6. package/dist/cjs/execute-tool-call.d.ts +100 -0
  7. package/dist/cjs/execute-tool-call.d.ts.map +1 -0
  8. package/dist/cjs/execute-tool-call.js +334 -0
  9. package/dist/cjs/execute-tool-call.js.map +1 -0
  10. package/dist/cjs/execution-time-fingerprint.d.ts +8 -0
  11. package/dist/cjs/execution-time-fingerprint.d.ts.map +1 -1
  12. package/dist/cjs/execution-time-fingerprint.js +13 -1
  13. package/dist/cjs/execution-time-fingerprint.js.map +1 -1
  14. package/dist/cjs/guard.d.ts.map +1 -1
  15. package/dist/cjs/guard.js +28 -9
  16. package/dist/cjs/guard.js.map +1 -1
  17. package/dist/cjs/index.d.ts +5 -1
  18. package/dist/cjs/index.d.ts.map +1 -1
  19. package/dist/cjs/index.js +23 -3
  20. package/dist/cjs/index.js.map +1 -1
  21. package/dist/cjs/merge-gate.d.ts +8 -0
  22. package/dist/cjs/merge-gate.d.ts.map +1 -1
  23. package/dist/cjs/merge-gate.js +19 -12
  24. package/dist/cjs/merge-gate.js.map +1 -1
  25. package/dist/cjs/remediation-loop-attestation.d.ts +125 -0
  26. package/dist/cjs/remediation-loop-attestation.d.ts.map +1 -0
  27. package/dist/cjs/remediation-loop-attestation.js +186 -0
  28. package/dist/cjs/remediation-loop-attestation.js.map +1 -0
  29. package/dist/cjs/types.d.ts +20 -3
  30. package/dist/cjs/types.d.ts.map +1 -1
  31. package/dist/cjs/with-coderifts.d.ts +2 -1
  32. package/dist/cjs/with-coderifts.d.ts.map +1 -1
  33. package/dist/cjs/with-coderifts.js.map +1 -1
  34. package/dist/esm/deploy-gate.d.ts +10 -1
  35. package/dist/esm/deploy-gate.d.ts.map +1 -1
  36. package/dist/esm/deploy-gate.js +14 -10
  37. package/dist/esm/deploy-gate.js.map +1 -1
  38. package/dist/esm/execute-tool-call.d.ts +100 -0
  39. package/dist/esm/execute-tool-call.d.ts.map +1 -0
  40. package/dist/esm/execute-tool-call.js +325 -0
  41. package/dist/esm/execute-tool-call.js.map +1 -0
  42. package/dist/esm/execution-time-fingerprint.d.ts +8 -0
  43. package/dist/esm/execution-time-fingerprint.d.ts.map +1 -1
  44. package/dist/esm/execution-time-fingerprint.js +11 -0
  45. package/dist/esm/execution-time-fingerprint.js.map +1 -1
  46. package/dist/esm/guard.d.ts.map +1 -1
  47. package/dist/esm/guard.js +29 -10
  48. package/dist/esm/guard.js.map +1 -1
  49. package/dist/esm/index.d.ts +5 -1
  50. package/dist/esm/index.d.ts.map +1 -1
  51. package/dist/esm/index.js +7 -1
  52. package/dist/esm/index.js.map +1 -1
  53. package/dist/esm/merge-gate.d.ts +8 -0
  54. package/dist/esm/merge-gate.d.ts.map +1 -1
  55. package/dist/esm/merge-gate.js +19 -12
  56. package/dist/esm/merge-gate.js.map +1 -1
  57. package/dist/esm/remediation-loop-attestation.d.ts +125 -0
  58. package/dist/esm/remediation-loop-attestation.d.ts.map +1 -0
  59. package/dist/esm/remediation-loop-attestation.js +179 -0
  60. package/dist/esm/remediation-loop-attestation.js.map +1 -0
  61. package/dist/esm/types.d.ts +20 -3
  62. package/dist/esm/types.d.ts.map +1 -1
  63. package/dist/esm/with-coderifts.d.ts +2 -1
  64. package/dist/esm/with-coderifts.d.ts.map +1 -1
  65. package/dist/esm/with-coderifts.js.map +1 -1
  66. 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** (does not block). On match, silent (drift-only telemetry). Use this to gather production drift data without changing who executes. |
71
- | **Enforce** | `true` | Rechecks. On drift, **blocks** with integrity cause `EXECUTION_STATE_DRIFT` (factory never runs). Byte-identical to the original enforce path. |
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
- Recommended adoption path: **off → `'warn'` (observe) `true` (enforce)** once your own
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
- Warn-mode event (host-side only; the guard does **not** phone home), on `GuardConfig.onEvent`:
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 — you own retention; nothing is sent to CodeRifts from here
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 = telemetry via
750
- `execution_state_drift_observed`; true = block with `EXECUTION_STATE_DRIFT`) — a detection or
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
- /** 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":"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"}
@@ -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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"}
@@ -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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"}