@coderifts/agent-guard 14.0.0 → 15.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.
Files changed (98) hide show
  1. package/README.md +28 -2
  2. package/dist/cjs/adapters/vercel.d.ts +153 -0
  3. package/dist/cjs/adapters/vercel.d.ts.map +1 -0
  4. package/dist/cjs/adapters/vercel.js +255 -0
  5. package/dist/cjs/adapters/vercel.js.map +1 -0
  6. package/dist/cjs/atomic-profile.d.ts +68 -8
  7. package/dist/cjs/atomic-profile.d.ts.map +1 -1
  8. package/dist/cjs/atomic-profile.js +122 -2
  9. package/dist/cjs/atomic-profile.js.map +1 -1
  10. package/dist/cjs/deny-remedy.d.ts +74 -0
  11. package/dist/cjs/deny-remedy.d.ts.map +1 -0
  12. package/dist/cjs/deny-remedy.js +127 -0
  13. package/dist/cjs/deny-remedy.js.map +1 -0
  14. package/dist/cjs/deploy-gate.d.ts +14 -1
  15. package/dist/cjs/deploy-gate.d.ts.map +1 -1
  16. package/dist/cjs/deploy-gate.js.map +1 -1
  17. package/dist/cjs/deploy-receipt-token.d.ts +2 -2
  18. package/dist/cjs/deploy-receipt-token.d.ts.map +1 -1
  19. package/dist/cjs/deploy-receipt-token.js +64 -1
  20. package/dist/cjs/deploy-receipt-token.js.map +1 -1
  21. package/dist/cjs/execute-tool-call.d.ts +16 -1
  22. package/dist/cjs/execute-tool-call.d.ts.map +1 -1
  23. package/dist/cjs/execute-tool-call.js +26 -0
  24. package/dist/cjs/execute-tool-call.js.map +1 -1
  25. package/dist/cjs/execution-grant.d.ts +100 -0
  26. package/dist/cjs/execution-grant.d.ts.map +1 -1
  27. package/dist/cjs/execution-grant.js +101 -0
  28. package/dist/cjs/execution-grant.js.map +1 -1
  29. package/dist/cjs/gate-refusal.js +1 -1
  30. package/dist/cjs/guard.d.ts.map +1 -1
  31. package/dist/cjs/guard.js +56 -8
  32. package/dist/cjs/guard.js.map +1 -1
  33. package/dist/cjs/index.d.ts +8 -4
  34. package/dist/cjs/index.d.ts.map +1 -1
  35. package/dist/cjs/index.js +22 -2
  36. package/dist/cjs/index.js.map +1 -1
  37. package/dist/cjs/policy.d.ts.map +1 -1
  38. package/dist/cjs/policy.js +1 -1
  39. package/dist/cjs/policy.js.map +1 -1
  40. package/dist/cjs/posture-receipt.d.ts +118 -0
  41. package/dist/cjs/posture-receipt.d.ts.map +1 -0
  42. package/dist/cjs/posture-receipt.js +220 -0
  43. package/dist/cjs/posture-receipt.js.map +1 -0
  44. package/dist/cjs/types.d.ts +23 -0
  45. package/dist/cjs/types.d.ts.map +1 -1
  46. package/dist/cjs/with-coderifts.d.ts +17 -2
  47. package/dist/cjs/with-coderifts.d.ts.map +1 -1
  48. package/dist/cjs/with-coderifts.js +22 -5
  49. package/dist/cjs/with-coderifts.js.map +1 -1
  50. package/dist/esm/adapters/vercel.d.ts +153 -0
  51. package/dist/esm/adapters/vercel.d.ts.map +1 -0
  52. package/dist/esm/adapters/vercel.js +247 -0
  53. package/dist/esm/adapters/vercel.js.map +1 -0
  54. package/dist/esm/atomic-profile.d.ts +68 -8
  55. package/dist/esm/atomic-profile.d.ts.map +1 -1
  56. package/dist/esm/atomic-profile.js +120 -1
  57. package/dist/esm/atomic-profile.js.map +1 -1
  58. package/dist/esm/deny-remedy.d.ts +74 -0
  59. package/dist/esm/deny-remedy.d.ts.map +1 -0
  60. package/dist/esm/deny-remedy.js +122 -0
  61. package/dist/esm/deny-remedy.js.map +1 -0
  62. package/dist/esm/deploy-gate.d.ts +14 -1
  63. package/dist/esm/deploy-gate.d.ts.map +1 -1
  64. package/dist/esm/deploy-gate.js.map +1 -1
  65. package/dist/esm/deploy-receipt-token.d.ts +2 -2
  66. package/dist/esm/deploy-receipt-token.d.ts.map +1 -1
  67. package/dist/esm/deploy-receipt-token.js +64 -1
  68. package/dist/esm/deploy-receipt-token.js.map +1 -1
  69. package/dist/esm/execute-tool-call.d.ts +16 -1
  70. package/dist/esm/execute-tool-call.d.ts.map +1 -1
  71. package/dist/esm/execute-tool-call.js +25 -0
  72. package/dist/esm/execute-tool-call.js.map +1 -1
  73. package/dist/esm/execution-grant.d.ts +100 -0
  74. package/dist/esm/execution-grant.d.ts.map +1 -1
  75. package/dist/esm/execution-grant.js +98 -0
  76. package/dist/esm/execution-grant.js.map +1 -1
  77. package/dist/esm/gate-refusal.js +1 -1
  78. package/dist/esm/guard.d.ts.map +1 -1
  79. package/dist/esm/guard.js +57 -9
  80. package/dist/esm/guard.js.map +1 -1
  81. package/dist/esm/index.d.ts +8 -4
  82. package/dist/esm/index.d.ts.map +1 -1
  83. package/dist/esm/index.js +8 -2
  84. package/dist/esm/index.js.map +1 -1
  85. package/dist/esm/policy.d.ts.map +1 -1
  86. package/dist/esm/policy.js +1 -1
  87. package/dist/esm/policy.js.map +1 -1
  88. package/dist/esm/posture-receipt.d.ts +118 -0
  89. package/dist/esm/posture-receipt.d.ts.map +1 -0
  90. package/dist/esm/posture-receipt.js +216 -0
  91. package/dist/esm/posture-receipt.js.map +1 -0
  92. package/dist/esm/types.d.ts +23 -0
  93. package/dist/esm/types.d.ts.map +1 -1
  94. package/dist/esm/with-coderifts.d.ts +17 -2
  95. package/dist/esm/with-coderifts.d.ts.map +1 -1
  96. package/dist/esm/with-coderifts.js +21 -5
  97. package/dist/esm/with-coderifts.js.map +1 -1
  98. package/package.json +1 -1
package/README.md CHANGED
@@ -230,7 +230,7 @@ opt-down. Not TOCTOU closure (see **`requireExecutionStateMatch`** above).
230
230
  A conflicting opt-down **aborts construction** (`ENFORCING_STRICT cannot be weakened: <flag> conflicts`).
231
231
  Requires `resolvePriorContent` at construction. Does **not** claim host cannot register raw tools
232
232
  outside the returned table — residual `calls_outside_guarded_path_invisible`. Adapters
233
- (`withCodeRiftsOpenAI` / Anthropic / Gemini / LangGraph) still emit only the guarded list.
233
+ (`withCodeRiftsOpenAI` / Anthropic / Gemini / LangGraph / Vercel) still emit only the guarded list.
234
234
 
235
235
  ### Production enforcement (`ENFORCING_STRICT` + freshness / CAS)
236
236
 
@@ -474,9 +474,35 @@ const {
474
474
 
475
475
  See also `examples/gemini-adapter.mjs` (not published in the npm tarball).
476
476
 
477
+ **Vercel AI SDK (roadmap 129).** Same thin pattern; emits a **dependency-free**
478
+ `generateText` / `streamText` `tools` record (`{ [name]: { description?, parameters, execute } }`)
479
+ matching v4 `tool({ description, parameters, execute })`. This package does **not**
480
+ depend on `ai` or `zod` — `parameters` is JSON Schema from `ProtectedTool.inputSchema`
481
+ (v4 accepts Zod Schema | JSON Schema). `execute` is the guarded factory; mutator
482
+ outcomes are bound with **`bindVercelGuardOutcome`** (`toolCallId`). Assurance still
483
+ unflattened:
484
+
485
+ ```typescript
486
+ import { withCodeRiftsVercel } from '@coderifts/agent-guard';
487
+ // host-owned (not a dependency of this package):
488
+ // import { generateText, tool } from 'ai';
489
+
490
+ const {
491
+ tools, // generateText tools record; guarded execute bound
492
+ protected_tools,
493
+ registry_report,
494
+ composition_assurance, // still may be incomplete (inescapable_runtime:false) — do not drop
495
+ receipt_thread,
496
+ } = withCodeRiftsVercel({ tools: rawTools, client, operation: 'merge' });
497
+
498
+ // generateText({ model, tools, prompt }) — only `tools` / `protected_tools` enter the loop
499
+ ```
500
+
501
+ See also `examples/vercel-adapter.mjs` (not published in the npm tarball).
502
+
477
503
  ### Policy delivery
478
504
 
479
- The four adapters (`withCodeRiftsOpenAI` / Anthropic / Gemini / LangGraph, and
505
+ The adapters (`withCodeRiftsOpenAI` / Anthropic / Gemini / LangGraph / Vercel, and
480
506
  the `bind*GuardOutcome` helpers) are **result-shapers**. They convert guarded
481
507
  tools and bind proof onto the **tool result**. They never see the outbound
482
508
  `messages` / `system` field, so they cannot auto-inject into the request. File-based
@@ -0,0 +1,153 @@
1
+ /**
2
+ * Vercel AI SDK tool adapter over withCodeRifts (roadmap 129 / wave-2 —
3
+ * same thin pattern as OpenAI / Anthropic / LangGraph / Gemini).
4
+ *
5
+ * Thin converter. Guard logic stays in withCodeRifts; this module:
6
+ * 1. calls withCodeRifts with the same input shape,
7
+ * 2. maps each ProtectedTool → a dependency-free Vercel `tool()` object,
8
+ * 3. wraps `execute` so the guarded execute runs first, then bindVercelGuardOutcome,
9
+ * 4. returns those tools PLUS the untouched assurance objects.
10
+ *
11
+ * Measured Vercel AI SDK v4 `tool()` (no `ai` package in this repo; types from
12
+ * https://ai-sdk.dev/v4/docs/reference/ai-sdk-core/tool ):
13
+ *
14
+ * import { tool } from 'ai';
15
+ * tool({
16
+ * description?: string,
17
+ * parameters: Zod Schema | JSON Schema,
18
+ * execute?: async (parameters: T, options: ToolExecutionOptions) => RESULT,
19
+ * })
20
+ * ToolExecutionOptions = { toolCallId: string, messages: CoreMessage[], abortSignal?: AbortSignal }
21
+ *
22
+ * generateText / streamText `tools` is a Record keyed by tool name (not an array).
23
+ * This package does NOT depend on `ai` or `zod`. `parameters` is JSON Schema from
24
+ * ProtectedTool.inputSchema (v4 accepts JSON Schema; hosts may wrap with `tool()` + Zod).
25
+ *
26
+ * Only-protected-tools (6/D at the adapter surface):
27
+ * - `tools` is derived ONLY from the frozen registry's ProtectedTool list.
28
+ * - Raw tools never appear in the returned table.
29
+ *
30
+ * Honesty (do not "upgrade" assurance): composition_assurance is passed through
31
+ * EXACTLY as the core reported it.
32
+ */
33
+ import type { WithCodeRiftsInput, WithCodeRiftsResult, CompositionAssurance, ReceiptThreadHandle } from '../with-coderifts.js';
34
+ import type { CoverageObservedHandle } from '../coverage-observed.js';
35
+ import type { ProtectedTool, RegistryCoverageReport } from '../tool-registry.js';
36
+ import type { GuardOutcome } from '../types.js';
37
+ /**
38
+ * Second argument of Vercel AI SDK v4 `execute` (ToolExecutionOptions).
39
+ * @see https://ai-sdk.dev/v4/docs/ai-sdk-core/tools-and-tool-calling#tool-execution-options
40
+ */
41
+ export type VercelToolExecutionOptions = {
42
+ toolCallId: string;
43
+ messages?: unknown[];
44
+ abortSignal?: AbortSignal;
45
+ };
46
+ /**
47
+ * Dependency-free Vercel `tool()` object (no `ai` import).
48
+ * Name is the key in the generateText `tools` record, not a field on the object.
49
+ * @see https://ai-sdk.dev/v4/docs/reference/ai-sdk-core/tool
50
+ */
51
+ export type VercelTool = {
52
+ description?: string;
53
+ /** JSON Schema — v4 `parameters` accepts Zod Schema | JSON Schema. */
54
+ parameters: Record<string, unknown>;
55
+ /**
56
+ * Guarded execute. Return is the Vercel RESULT (generateText puts it in ToolResultPart.result).
57
+ * Mutators: proof-bound string from bindVercelGuardOutcome (never a nested part, never raw GuardOutcome).
58
+ * Readonly passthrough may return the raw factory value.
59
+ */
60
+ execute: (args: unknown, options?: VercelToolExecutionOptions) => Promise<unknown>;
61
+ };
62
+ /**
63
+ * Result of withCodeRiftsVercel — Vercel tool record + core assurance, unflattened.
64
+ *
65
+ * `tools` is the ONLY bag intended for generateText / streamText. `protected_tools`
66
+ * is the same guarded list (with execute) for host dispatch — never the raw tools.
67
+ */
68
+ export type WithCodeRiftsVercelResult = {
69
+ /** generateText `tools` record — only protected/guarded tools, keyed by name. */
70
+ tools: Record<string, VercelTool>;
71
+ /**
72
+ * Guarded ProtectedTool list from withCodeRifts (same tools as `tools`).
73
+ * Host may dispatch through these; never raw tools.
74
+ */
75
+ protected_tools: ProtectedTool[];
76
+ /** Untouched registry report — registry's own truth. */
77
+ registry_report: RegistryCoverageReport;
78
+ /**
79
+ * Product-level assurance — deliberately narrower than the registry.
80
+ * Passed through untouched; may still show inescapable_runtime:false and
81
+ * residual composition_call_policy_incomplete.
82
+ */
83
+ composition_assurance: CompositionAssurance;
84
+ /** Per-composition receipt cursor — NOT product-truth chain evidence. */
85
+ receipt_thread: ReceiptThreadHandle;
86
+ /** Observed coverage for this withCodeRifts run. Half A always; Half B via reportToolDispatch. */
87
+ coverage_observed: CoverageObservedHandle;
88
+ repository?: string;
89
+ };
90
+ /**
91
+ * Map one ProtectedTool → Vercel `tool()` object (description, parameters, execute).
92
+ * Binds guarded execute; mutator GuardOutcome is mapped through bindVercelGuardOutcome.
93
+ * Prefer tool.inputSchema when it is a plain object; otherwise empty object schema.
94
+ */
95
+ export declare function protectedToolToVercel(tool: ProtectedTool): VercelTool;
96
+ /**
97
+ * Convert a list of ProtectedTool into a Vercel generateText `tools` record.
98
+ * Does NOT call the guard — map over an already-protected list.
99
+ */
100
+ export declare function toVercelTools(protectedTools: readonly ProtectedTool[]): Record<string, VercelTool>;
101
+ /**
102
+ * Build Vercel-ready guarded tools from raw tools + client + operation.
103
+ *
104
+ * Calls withCodeRifts internally (guard logic stays in the core). Returns:
105
+ * - `tools` — generateText record { [name]: { description?, parameters, execute } }
106
+ * - `protected_tools` — same guarded tools
107
+ * - assurance objects from the core, passed through untouched
108
+ *
109
+ * @param input Same shape as withCodeRifts (WithCodeRiftsInput).
110
+ */
111
+ export declare function withCodeRiftsVercel(input: WithCodeRiftsInput): WithCodeRiftsVercelResult;
112
+ /**
113
+ * Shape adapter over an existing WithCodeRiftsResult (composition style).
114
+ * Prefer withCodeRiftsVercel when starting from raw tools.
115
+ *
116
+ * Does not re-run the guard; does not invent assurance.
117
+ */
118
+ export declare function vercelToolAdapter(result: WithCodeRiftsResult): WithCodeRiftsVercelResult;
119
+ /**
120
+ * Minimal Vercel AI SDK v4 tool-result part. No `ai` dependency.
121
+ * Id field is `toolCallId` (ToolExecutionOptions / ToolResultPart).
122
+ * @see https://ai-sdk.dev/v4/docs/ai-sdk-core/tools-and-tool-calling
123
+ */
124
+ export type VercelToolResult = {
125
+ type: 'tool-result';
126
+ toolCallId: string;
127
+ toolName?: string;
128
+ result: string;
129
+ };
130
+ declare const __proofBoundVercelBrand: unique symbol;
131
+ export type ProofBoundVercelToolResult = VercelToolResult & {
132
+ readonly __proofBound: typeof __proofBoundVercelBrand;
133
+ };
134
+ export type BindVercelGuardOutcomeArgs<T> = {
135
+ /** Vercel toolCallId this tool-result answers. */
136
+ toolCallId: string;
137
+ /** Optional tool name (ToolResultPart.toolName). */
138
+ toolName?: string;
139
+ serialize?: (result: T) => string;
140
+ /**
141
+ * Attach the rendered GuardExecutionProof (S4). Default ON.
142
+ * Pass `false` to opt out.
143
+ */
144
+ attachProof?: boolean;
145
+ };
146
+ export declare function defaultSerializeVercelToolResult<T>(result: T): string;
147
+ /**
148
+ * Map a full GuardOutcome into a Vercel tool-result part with proof embedded.
149
+ * Same arm mapping as bindOpenAIGuardOutcome; id field is toolCallId.
150
+ */
151
+ export declare function bindVercelGuardOutcome<T>(outcome: GuardOutcome<T>, args: BindVercelGuardOutcomeArgs<T>): ProofBoundVercelToolResult;
152
+ export {};
153
+ //# sourceMappingURL=vercel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vercel.d.ts","sourceRoot":"","sources":["../../../src/adapters/vercel.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,255 @@
1
+ "use strict";
2
+ /**
3
+ * Vercel AI SDK tool adapter over withCodeRifts (roadmap 129 / wave-2 —
4
+ * same thin pattern as OpenAI / Anthropic / LangGraph / Gemini).
5
+ *
6
+ * Thin converter. Guard logic stays in withCodeRifts; this module:
7
+ * 1. calls withCodeRifts with the same input shape,
8
+ * 2. maps each ProtectedTool → a dependency-free Vercel `tool()` object,
9
+ * 3. wraps `execute` so the guarded execute runs first, then bindVercelGuardOutcome,
10
+ * 4. returns those tools PLUS the untouched assurance objects.
11
+ *
12
+ * Measured Vercel AI SDK v4 `tool()` (no `ai` package in this repo; types from
13
+ * https://ai-sdk.dev/v4/docs/reference/ai-sdk-core/tool ):
14
+ *
15
+ * import { tool } from 'ai';
16
+ * tool({
17
+ * description?: string,
18
+ * parameters: Zod Schema | JSON Schema,
19
+ * execute?: async (parameters: T, options: ToolExecutionOptions) => RESULT,
20
+ * })
21
+ * ToolExecutionOptions = { toolCallId: string, messages: CoreMessage[], abortSignal?: AbortSignal }
22
+ *
23
+ * generateText / streamText `tools` is a Record keyed by tool name (not an array).
24
+ * This package does NOT depend on `ai` or `zod`. `parameters` is JSON Schema from
25
+ * ProtectedTool.inputSchema (v4 accepts JSON Schema; hosts may wrap with `tool()` + Zod).
26
+ *
27
+ * Only-protected-tools (6/D at the adapter surface):
28
+ * - `tools` is derived ONLY from the frozen registry's ProtectedTool list.
29
+ * - Raw tools never appear in the returned table.
30
+ *
31
+ * Honesty (do not "upgrade" assurance): composition_assurance is passed through
32
+ * EXACTLY as the core reported it.
33
+ */
34
+ Object.defineProperty(exports, "__esModule", { value: true });
35
+ exports.protectedToolToVercel = protectedToolToVercel;
36
+ exports.toVercelTools = toVercelTools;
37
+ exports.withCodeRiftsVercel = withCodeRiftsVercel;
38
+ exports.vercelToolAdapter = vercelToolAdapter;
39
+ exports.defaultSerializeVercelToolResult = defaultSerializeVercelToolResult;
40
+ exports.bindVercelGuardOutcome = bindVercelGuardOutcome;
41
+ const with_coderifts_js_1 = require("../with-coderifts.js");
42
+ const execution_proof_js_1 = require("../execution-proof.js");
43
+ const final_answer_proof_js_1 = require("../final-answer-proof.js");
44
+ const gate_refusal_js_1 = require("../gate-refusal.js");
45
+ /** Empty JSON Schema object — used when a ProtectedTool has no inputSchema. */
46
+ const EMPTY_PARAMETERS = Object.freeze({
47
+ type: 'object',
48
+ properties: {},
49
+ });
50
+ /**
51
+ * Local GuardOutcome duck-type. Do not import execute-tool-call (that module
52
+ * imports this binder — a cycle). Same fields as isGuardOutcome.
53
+ */
54
+ function looksLikeGuardOutcome(x) {
55
+ if (!x || typeof x !== 'object')
56
+ return false;
57
+ const o = x;
58
+ return (typeof o.executed === 'boolean'
59
+ && typeof o.executionAttempted === 'boolean'
60
+ && o.proof != null
61
+ && typeof o.proof === 'object'
62
+ && o.verdict != null
63
+ && typeof o.verdict === 'object');
64
+ }
65
+ function toolCallIdFromOptions(options) {
66
+ if (options && typeof options.toolCallId === 'string')
67
+ return options.toolCallId;
68
+ return '';
69
+ }
70
+ const FRESHNESS_NOT_CONFIGURED = Object.freeze({
71
+ wiring: 'NOT_CONFIGURED',
72
+ write_style: false,
73
+ require_freshness: false,
74
+ });
75
+ const CW_NOT_REPORTED = Object.freeze({
76
+ conditional_write: 'not_reported',
77
+ require_conditional_write: false,
78
+ write_style: false,
79
+ mutating: false,
80
+ });
81
+ /**
82
+ * Guarded mutator returned a non-outcome — never forward the raw value to generateText.
83
+ * Same CONFIG_ERROR / UNAVAILABLE arm as execute-tool-call unknownToolOutcome (no cycle).
84
+ */
85
+ function guardedNonOutcomeRefusal(toolName) {
86
+ const verdict = {
87
+ kind: 'UNAVAILABLE',
88
+ cause: 'CONFIG_ERROR',
89
+ failPolicy: 'closed',
90
+ resolution: 'CLOSED',
91
+ action: 'STOP',
92
+ decisionMissing: true,
93
+ unavailableCount: 1,
94
+ };
95
+ const commit_observation = {
96
+ status: 'not_observed',
97
+ observed_at: new Date().toISOString(),
98
+ host_attestation: 'absent',
99
+ };
100
+ const proof = (0, execution_proof_js_1.buildExecutionProof)({
101
+ preflighted: false,
102
+ executionAttempted: false,
103
+ executed: false,
104
+ enforced: false,
105
+ verdict,
106
+ commitObservation: commit_observation,
107
+ });
108
+ void toolName;
109
+ return {
110
+ executionAttempted: false,
111
+ executed: false,
112
+ enforced: false,
113
+ verdict,
114
+ preflighted: false,
115
+ proof,
116
+ freshness: FRESHNESS_NOT_CONFIGURED,
117
+ conditional_write: CW_NOT_REPORTED,
118
+ commit_observation,
119
+ };
120
+ }
121
+ /**
122
+ * Map one ProtectedTool → Vercel `tool()` object (description, parameters, execute).
123
+ * Binds guarded execute; mutator GuardOutcome is mapped through bindVercelGuardOutcome.
124
+ * Prefer tool.inputSchema when it is a plain object; otherwise empty object schema.
125
+ */
126
+ function protectedToolToVercel(tool) {
127
+ const parameters = tool.inputSchema != null
128
+ && typeof tool.inputSchema === 'object'
129
+ && !Array.isArray(tool.inputSchema)
130
+ ? tool.inputSchema
131
+ : { ...EMPTY_PARAMETERS };
132
+ const execute = async (args, options) => {
133
+ const raw = await Promise.resolve().then(() => tool.execute(args));
134
+ const bindArgs = {
135
+ toolCallId: toolCallIdFromOptions(options),
136
+ toolName: tool.name,
137
+ };
138
+ // generateText treats execute's return as RESULT (the `result` field of a
139
+ // tool-result part). Return the bound body, not the part — otherwise the
140
+ // SDK nests { type:'tool-result', result: { type:'tool-result', ... } }.
141
+ if (looksLikeGuardOutcome(raw)) {
142
+ return bindVercelGuardOutcome(raw, bindArgs).result;
143
+ }
144
+ if (tool._coderifts && tool._coderifts.guarded) {
145
+ return bindVercelGuardOutcome(guardedNonOutcomeRefusal(tool.name), bindArgs).result;
146
+ }
147
+ return raw;
148
+ };
149
+ const out = {
150
+ parameters,
151
+ execute,
152
+ };
153
+ if (tool.description != null && tool.description !== '') {
154
+ out.description = tool.description;
155
+ }
156
+ return out;
157
+ }
158
+ /**
159
+ * Convert a list of ProtectedTool into a Vercel generateText `tools` record.
160
+ * Does NOT call the guard — map over an already-protected list.
161
+ */
162
+ function toVercelTools(protectedTools) {
163
+ const out = {};
164
+ for (const t of protectedTools) {
165
+ out[t.name] = protectedToolToVercel(t);
166
+ }
167
+ return out;
168
+ }
169
+ /**
170
+ * Build Vercel-ready guarded tools from raw tools + client + operation.
171
+ *
172
+ * Calls withCodeRifts internally (guard logic stays in the core). Returns:
173
+ * - `tools` — generateText record { [name]: { description?, parameters, execute } }
174
+ * - `protected_tools` — same guarded tools
175
+ * - assurance objects from the core, passed through untouched
176
+ *
177
+ * @param input Same shape as withCodeRifts (WithCodeRiftsInput).
178
+ */
179
+ function withCodeRiftsVercel(input) {
180
+ const core = (0, with_coderifts_js_1.withCodeRifts)(input);
181
+ return vercelToolAdapter(core);
182
+ }
183
+ /**
184
+ * Shape adapter over an existing WithCodeRiftsResult (composition style).
185
+ * Prefer withCodeRiftsVercel when starting from raw tools.
186
+ *
187
+ * Does not re-run the guard; does not invent assurance.
188
+ */
189
+ function vercelToolAdapter(result) {
190
+ const protected_tools = result.tools;
191
+ const tools = toVercelTools(protected_tools);
192
+ const out = {
193
+ tools,
194
+ protected_tools,
195
+ registry_report: result.registry_report,
196
+ composition_assurance: result.composition_assurance,
197
+ receipt_thread: result.receipt_thread,
198
+ coverage_observed: result.coverage_observed,
199
+ };
200
+ if (result.repository !== undefined) {
201
+ out.repository = result.repository;
202
+ }
203
+ return out;
204
+ }
205
+ function defaultSerializeVercelToolResult(result) {
206
+ if (typeof result === 'string')
207
+ return result;
208
+ if (typeof result === 'number'
209
+ || typeof result === 'boolean'
210
+ || typeof result === 'bigint'
211
+ || result === null
212
+ || result === undefined) {
213
+ return String(result);
214
+ }
215
+ try {
216
+ return JSON.stringify(result);
217
+ }
218
+ catch {
219
+ return String(result);
220
+ }
221
+ }
222
+ /**
223
+ * Map a full GuardOutcome into a Vercel tool-result part with proof embedded.
224
+ * Same arm mapping as bindOpenAIGuardOutcome; id field is toolCallId.
225
+ */
226
+ function bindVercelGuardOutcome(outcome, args) {
227
+ const toolCallId = args.toolCallId;
228
+ const serialize = args.serialize ?? defaultSerializeVercelToolResult;
229
+ let body;
230
+ if (outcome.executed === true) {
231
+ body = serialize(outcome.result);
232
+ }
233
+ else if (outcome.executionAttempted === false) {
234
+ body = (0, gate_refusal_js_1.formatGateRefusalBody)(outcome);
235
+ }
236
+ else {
237
+ const err = 'error' in outcome ? outcome.error : undefined;
238
+ const kind = (0, gate_refusal_js_1.verdictKind)(outcome);
239
+ body =
240
+ `Tool execution failed after gate decision (verdict: ${kind}): ${(0, gate_refusal_js_1.formatGuardError)(err)}`;
241
+ }
242
+ const result = args.attachProof === false
243
+ ? body
244
+ : (0, final_answer_proof_js_1.attachProofToAgentResponse)(body, outcome.proof);
245
+ const part = {
246
+ type: 'tool-result',
247
+ toolCallId,
248
+ result,
249
+ };
250
+ if (args.toolName != null && args.toolName !== '') {
251
+ part.toolName = args.toolName;
252
+ }
253
+ return part;
254
+ }
255
+ //# sourceMappingURL=vercel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vercel.js","sourceRoot":"","sources":["../../../src/adapters/vercel.ts"],"names":[],"mappings":"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"}
@@ -1,14 +1,46 @@
1
+ import type { PostureVerifyInput } from './posture-receipt.js';
2
+ export declare const PROFILE_ENFORCING_ATOMIC_V1: "ENFORCING_ATOMIC_V1";
1
3
  /**
2
- * ENFORCING_ATOMIC_V1versioned profile (roadmap 1090).
4
+ * ENFORCING_ATOMIC_V2 (roadmap 1167) V1 plus a VERIFIED credential boundary.
5
+ *
6
+ * WHY A NEW NAME RATHER THAN A STRICTER _V1. with-coderifts.ts:228 states the
7
+ * rule this package learned from its own 10.0.0 and 12.0.0 releases: "The next
8
+ * tightening MUST be `_V2`; adding a condition to `_V1` reintroduces the defect
9
+ * this type exists to remove." A caller who wrote `_V1` keeps exactly the
10
+ * contract they asked for; the stricter check costs them nothing.
11
+ *
12
+ * WHAT V2's credential_boundary PROVES:
13
+ * A signed `cr.posture.receipt.v1` verified against a caller-supplied key
14
+ * (registry or pinned PEM) asserts `verdict: 'PASS'` — the credential
15
+ * boundary was read back out of the live catalog at `measured_at`, that
16
+ * reading is inside the caller's freshness window, and the receipt is bound
17
+ * to this `deployment_id`.
3
18
  *
4
- * STRICT_V1 is frozen and is not edited. ATOMIC is a NEW profile: construction
5
- * aborts with ATOMIC_PROFILE_UNSATISFIED when the invariant conjunction is not
6
- * wired. Executor behaviour (nonce consume-once, CAS, read-back, attestation)
7
- * is still observed per call; construction only demands the wiring.
19
+ * WHAT IT DOES NOT PROVE, and this list is the point rather than a caveat:
20
+ * · NOT a tuple the CALLER did not name. executor_id, adapter_id, target_uri
21
+ * and policy_hash ARE now bound (AUDIT P1 / RES-3) — but each only when the
22
+ * construction configures it. The earlier text here said the producer does
23
+ * not sign those fields; re-measured 2026-08-29 against capability-demo
24
+ * demo/src/posture.js, the issuer spreads them into the SIGNED canonical
25
+ * body whenever they carry real content, so binding them is backed by the
26
+ * producer rather than asserted over it. What has NOT changed is the rule
27
+ * underneath: a field nobody configured is reported in the verifier's
28
+ * `not_bound` list, never defaulted into looking checked.
29
+ * · NOT an expiry. The receipt carries `measured_at` and no `expires_at`, so
30
+ * the age check is a FRESHNESS window the CALLER supplies via `maxAgeMs`.
31
+ * A guard-side default would present our policy as the receipt's statement.
32
+ * · NOT executor behaviour. Same honest limit as every other invariant here:
33
+ * construction demands wiring, and a read-back at `measured_at` is a fact
34
+ * about that moment, not about the write that happens afterwards.
35
+ */
36
+ export declare const PROFILE_ENFORCING_ATOMIC_V2: "ENFORCING_ATOMIC_V2";
37
+ /**
38
+ * The unsuffixed wire value stays pinned to V1 FOREVER (with-coderifts.ts:231-233).
39
+ * Re-pointing it at V2 would silently move every existing caller — the migration
40
+ * the versioned names exist to refuse.
8
41
  */
9
- export declare const PROFILE_ENFORCING_ATOMIC_V1: "ENFORCING_ATOMIC_V1";
10
42
  export declare const GUARD_ATOMIC_WIRE_VALUE: "ENFORCING_ATOMIC";
11
- export type AtomicProfileSpelling = 'ENFORCING_ATOMIC' | 'ENFORCING_ATOMIC_V1';
43
+ export type AtomicProfileSpelling = 'ENFORCING_ATOMIC' | 'ENFORCING_ATOMIC_V1' | 'ENFORCING_ATOMIC_V2';
12
44
  export declare const ATOMIC_PROFILE_UNSATISFIED: "ATOMIC_PROFILE_UNSATISFIED";
13
45
  export type AtomicOutcome = 'AUTHORIZED_COMMITTED' | 'REFUSED' | 'INDETERMINATE';
14
46
  /** Frozen invariant names — adding one is ATOMIC_V2, not an edit here. */
@@ -19,7 +51,9 @@ export type MutatorRegister = {
19
51
  list: () => readonly string[];
20
52
  };
21
53
  export declare function createMutatorRegister(): MutatorRegister;
22
- export declare function isEnforcingAtomic(profile: unknown): boolean;
54
+ export declare function isEnforcingAtomic(profile: unknown): profile is AtomicProfileSpelling;
55
+ /** V2 only. The unsuffixed alias is V1 and must never answer true here. */
56
+ export declare function isEnforcingAtomicV2(profile: unknown): boolean;
23
57
  export type AtomicConstructionInput = {
24
58
  executionGrant?: {
25
59
  enabled?: boolean;
@@ -29,6 +63,13 @@ export type AtomicConstructionInput = {
29
63
  executorId?: string;
30
64
  adapterId?: string;
31
65
  targetUri?: string;
66
+ /**
67
+ * MEASURED: executorId/adapterId/targetUri already existed here; policyHash
68
+ * did not exist anywhere in this package — its only mention was the comment
69
+ * above saying it was not bound. Added so the tuple can be STATED, not so it
70
+ * can be assumed: leaving it unset binds nothing, and says so.
71
+ */
72
+ policyHash?: string;
32
73
  executorAttestation?: {
33
74
  registry?: unknown;
34
75
  } | null;
@@ -36,7 +77,26 @@ export type AtomicConstructionInput = {
36
77
  casAdapter?: unknown;
37
78
  readBack?: unknown;
38
79
  credentialBoundary?: unknown;
80
+ /** V2 ONLY. Ignored on V1, whose credential_boundary check is frozen. */
81
+ profile?: AtomicProfileSpelling;
82
+ };
83
+ /**
84
+ * V2 caller-supplied freshness window must be finite, positive, and ≤ 24h.
85
+ * A larger value is not a freshness check (the receipt has no expires_at).
86
+ */
87
+ export declare const ATOMIC_V2_MAX_AGE_MS_CAP = 86400000;
88
+ /**
89
+ * V2 credential_boundary input. A bare `true` is deliberately NOT assignable.
90
+ */
91
+ export type VerifiedCredentialBoundary = {
92
+ postureReceipt: string;
93
+ registry?: PostureVerifyInput['registry'];
94
+ pinnedKeyPem?: string;
95
+ deploymentId?: string;
96
+ maxAgeMs?: number;
97
+ now?: () => number;
39
98
  };
99
+ export declare const CREDENTIAL_BOUNDARY_BARE_REJECTED: string;
40
100
  export declare function atomicConstructionProblems(input: AtomicConstructionInput): string[];
41
101
  export declare function throwAtomicUnsatisfied(problems: string[]): never;
42
102
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"atomic-profile.d.ts","sourceRoot":"","sources":["../../src/atomic-profile.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,eAAO,MAAM,2BAA2B,EAAG,qBAA8B,CAAC;AAC1E,eAAO,MAAM,uBAAuB,EAAG,kBAA2B,CAAC;AACnE,MAAM,MAAM,qBAAqB,GAAG,kBAAkB,GAAG,qBAAqB,CAAC;AAE/E,eAAO,MAAM,0BAA0B,EAAG,4BAAqC,CAAC;AAEhF,MAAM,MAAM,aAAa,GAAG,sBAAsB,GAAG,SAAS,GAAG,eAAe,CAAC;AAEjF,0EAA0E;AAC1E,eAAO,MAAM,iBAAiB,4NAYnB,CAAC;AAEZ,MAAM,MAAM,eAAe,GAAG;IAC5B,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,eAAe,CAAC;IACnD,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IAC/B,IAAI,EAAE,MAAM,SAAS,MAAM,EAAE,CAAC;CAC/B,CAAC;AAEF,wBAAgB,qBAAqB,IAAI,eAAe,CAkBvD;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAE3D;AAED,MAAM,MAAM,uBAAuB,GAAG;IACpC,cAAc,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAC;QAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAClG,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mBAAmB,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC;IACpD,eAAe,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;IACzC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B,CAAC;AAEF,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,uBAAuB,GAAG,MAAM,EAAE,CAsCnF;AAED,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,KAAK,CAOhE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE;IACnC,eAAe,EAAE,OAAO,CAAC;IACzB,YAAY,EAAE,OAAO,CAAC;IACtB,aAAa,EAAE,OAAO,CAAC;IACvB,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;IACpB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,YAAY,EAAE,OAAO,CAAC;IACtB,UAAU,EAAE,OAAO,CAAC;IACpB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,4BAA4B,CAAC,EAAE,OAAO,CAAC;CACxC,GAAG,aAAa,CAahB"}
1
+ {"version":3,"file":"atomic-profile.d.ts","sourceRoot":"","sources":["../../src/atomic-profile.ts"],"names":[],"mappings":"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"}