@coderifts/agent-guard 9.3.0 → 9.5.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 (104) hide show
  1. package/README.md +33 -16
  2. package/dist/cjs/adapters/anthropic.d.ts +3 -0
  3. package/dist/cjs/adapters/anthropic.d.ts.map +1 -1
  4. package/dist/cjs/adapters/anthropic.js +5 -23
  5. package/dist/cjs/adapters/anthropic.js.map +1 -1
  6. package/dist/cjs/adapters/gemini.d.ts +3 -0
  7. package/dist/cjs/adapters/gemini.d.ts.map +1 -1
  8. package/dist/cjs/adapters/gemini.js +5 -24
  9. package/dist/cjs/adapters/gemini.js.map +1 -1
  10. package/dist/cjs/adapters/langgraph.d.ts +40 -6
  11. package/dist/cjs/adapters/langgraph.d.ts.map +1 -1
  12. package/dist/cjs/adapters/langgraph.js +75 -30
  13. package/dist/cjs/adapters/langgraph.js.map +1 -1
  14. package/dist/cjs/adapters/openai.d.ts +3 -0
  15. package/dist/cjs/adapters/openai.d.ts.map +1 -1
  16. package/dist/cjs/adapters/openai.js +5 -22
  17. package/dist/cjs/adapters/openai.js.map +1 -1
  18. package/dist/cjs/cas-adapters/fs-default-wire.d.ts +15 -0
  19. package/dist/cjs/cas-adapters/fs-default-wire.d.ts.map +1 -0
  20. package/dist/cjs/cas-adapters/fs-default-wire.js +76 -0
  21. package/dist/cjs/cas-adapters/fs-default-wire.js.map +1 -0
  22. package/dist/cjs/coverage-observed.d.ts +45 -0
  23. package/dist/cjs/coverage-observed.d.ts.map +1 -0
  24. package/dist/cjs/coverage-observed.js +140 -0
  25. package/dist/cjs/coverage-observed.js.map +1 -0
  26. package/dist/cjs/execution-proof.d.ts +7 -0
  27. package/dist/cjs/execution-proof.d.ts.map +1 -1
  28. package/dist/cjs/execution-proof.js +4 -0
  29. package/dist/cjs/execution-proof.js.map +1 -1
  30. package/dist/cjs/final-answer-proof.d.ts.map +1 -1
  31. package/dist/cjs/final-answer-proof.js +8 -0
  32. package/dist/cjs/final-answer-proof.js.map +1 -1
  33. package/dist/cjs/gate-refusal.d.ts +14 -0
  34. package/dist/cjs/gate-refusal.d.ts.map +1 -0
  35. package/dist/cjs/gate-refusal.js +85 -0
  36. package/dist/cjs/gate-refusal.js.map +1 -0
  37. package/dist/cjs/guard.d.ts.map +1 -1
  38. package/dist/cjs/guard.js +15 -0
  39. package/dist/cjs/guard.js.map +1 -1
  40. package/dist/cjs/index.d.ts +5 -1
  41. package/dist/cjs/index.d.ts.map +1 -1
  42. package/dist/cjs/index.js +18 -2
  43. package/dist/cjs/index.js.map +1 -1
  44. package/dist/cjs/tool-registry.d.ts.map +1 -1
  45. package/dist/cjs/tool-registry.js +5 -1
  46. package/dist/cjs/tool-registry.js.map +1 -1
  47. package/dist/cjs/types.d.ts +11 -0
  48. package/dist/cjs/types.d.ts.map +1 -1
  49. package/dist/cjs/with-coderifts.d.ts +14 -2
  50. package/dist/cjs/with-coderifts.d.ts.map +1 -1
  51. package/dist/cjs/with-coderifts.js +37 -4
  52. package/dist/cjs/with-coderifts.js.map +1 -1
  53. package/dist/esm/adapters/anthropic.d.ts +3 -0
  54. package/dist/esm/adapters/anthropic.d.ts.map +1 -1
  55. package/dist/esm/adapters/anthropic.js +3 -21
  56. package/dist/esm/adapters/anthropic.js.map +1 -1
  57. package/dist/esm/adapters/gemini.d.ts +3 -0
  58. package/dist/esm/adapters/gemini.d.ts.map +1 -1
  59. package/dist/esm/adapters/gemini.js +3 -22
  60. package/dist/esm/adapters/gemini.js.map +1 -1
  61. package/dist/esm/adapters/langgraph.d.ts +40 -6
  62. package/dist/esm/adapters/langgraph.d.ts.map +1 -1
  63. package/dist/esm/adapters/langgraph.js +69 -28
  64. package/dist/esm/adapters/langgraph.js.map +1 -1
  65. package/dist/esm/adapters/openai.d.ts +3 -0
  66. package/dist/esm/adapters/openai.d.ts.map +1 -1
  67. package/dist/esm/adapters/openai.js +4 -21
  68. package/dist/esm/adapters/openai.js.map +1 -1
  69. package/dist/esm/cas-adapters/fs-default-wire.d.ts +15 -0
  70. package/dist/esm/cas-adapters/fs-default-wire.d.ts.map +1 -0
  71. package/dist/esm/cas-adapters/fs-default-wire.js +72 -0
  72. package/dist/esm/cas-adapters/fs-default-wire.js.map +1 -0
  73. package/dist/esm/coverage-observed.d.ts +45 -0
  74. package/dist/esm/coverage-observed.d.ts.map +1 -0
  75. package/dist/esm/coverage-observed.js +136 -0
  76. package/dist/esm/coverage-observed.js.map +1 -0
  77. package/dist/esm/execution-proof.d.ts +7 -0
  78. package/dist/esm/execution-proof.d.ts.map +1 -1
  79. package/dist/esm/execution-proof.js +4 -0
  80. package/dist/esm/execution-proof.js.map +1 -1
  81. package/dist/esm/final-answer-proof.d.ts.map +1 -1
  82. package/dist/esm/final-answer-proof.js +8 -0
  83. package/dist/esm/final-answer-proof.js.map +1 -1
  84. package/dist/esm/gate-refusal.d.ts +14 -0
  85. package/dist/esm/gate-refusal.d.ts.map +1 -0
  86. package/dist/esm/gate-refusal.js +78 -0
  87. package/dist/esm/gate-refusal.js.map +1 -0
  88. package/dist/esm/guard.d.ts.map +1 -1
  89. package/dist/esm/guard.js +15 -0
  90. package/dist/esm/guard.js.map +1 -1
  91. package/dist/esm/index.d.ts +5 -1
  92. package/dist/esm/index.d.ts.map +1 -1
  93. package/dist/esm/index.js +5 -1
  94. package/dist/esm/index.js.map +1 -1
  95. package/dist/esm/tool-registry.d.ts.map +1 -1
  96. package/dist/esm/tool-registry.js +5 -1
  97. package/dist/esm/tool-registry.js.map +1 -1
  98. package/dist/esm/types.d.ts +11 -0
  99. package/dist/esm/types.d.ts.map +1 -1
  100. package/dist/esm/with-coderifts.d.ts +14 -2
  101. package/dist/esm/with-coderifts.d.ts.map +1 -1
  102. package/dist/esm/with-coderifts.js +37 -4
  103. package/dist/esm/with-coderifts.js.map +1 -1
  104. package/package.json +1 -1
@@ -13,10 +13,18 @@
13
13
  * owns the framework import and wires descriptors into tool() / ToolNode /
14
14
  * bind_tools / StateGraph themselves.
15
15
  *
16
- * Descriptor shape (dependency-free plain object):
17
- * { name, description?, schema, func, invoke }
16
+ * Descriptor shape (dependency-free, StructuredTool-compatible for createReactAgent):
17
+ * { name, description, schema, func, invoke, lc_runnable: true }
18
+ * Measured against @langchain/langgraph createReactAgent tools:
19
+ * ToolNode | (StructuredToolInterface | DynamicTool | RunnableToolLike)[]
20
+ * (@langchain/langgraph@0.2.74 d.ts; current npm 1.4.12). Runtime isRunnable
21
+ * requires lc_runnable === true; ToolNode drops non-matching tools and the
22
+ * model sees "Tool not found" — NEVER return that silent shape.
18
23
  * - schema = JSON Schema from ProtectedTool.inputSchema (or empty object schema)
19
24
  * - func / invoke = the GUARDED execute (same function reference) — never the raw tool
25
+ * - description always set (fallback to name) — StructuredToolInterface requires it
26
+ * NO hard @langchain/* dependency: duck-type the measured surface. If a tool would
27
+ * still fail that check, throw LangGraphToolsNotStructuredError (named, with the fix).
20
28
  *
21
29
  * Honesty (do not "upgrade" assurance):
22
30
  * - composition_assurance is passed through EXACTLY as the core reported it
@@ -34,6 +42,36 @@
34
42
  */
35
43
  import { withCodeRifts } from '../with-coderifts.js';
36
44
  import { attachProofToAgentResponse } from '../final-answer-proof.js';
45
+ import { formatGateRefusalBody, formatGuardError, verdictKind, } from '../gate-refusal.js';
46
+ /**
47
+ * Named error — thrown instead of returning tools createReactAgent would silently drop.
48
+ * Never a model-visible "Tool not found".
49
+ */
50
+ export class LangGraphToolsNotStructuredError extends Error {
51
+ constructor(message) {
52
+ super(message
53
+ ?? 'withCodeRiftsLangGraph() tools are not StructuredTool-compatible for createReactAgent. '
54
+ + 'createReactAgent (@langchain/langgraph) requires StructuredToolInterface | DynamicTool | '
55
+ + 'RunnableToolLike (name, description, schema, invoke, lc_runnable). '
56
+ + 'Fix: wrap with tool() from @langchain/core/tools — see README (LangChain / LangGraph).');
57
+ this.name = 'LangGraphToolsNotStructuredError';
58
+ }
59
+ }
60
+ /**
61
+ * True iff `t` matches the measured createReactAgent tool surface
62
+ * (StructuredToolInterface | DynamicTool | RunnableToolLike).
63
+ */
64
+ export function isLangGraphReactAgentTool(t) {
65
+ if (!t || typeof t !== 'object')
66
+ return false;
67
+ const o = t;
68
+ return typeof o.name === 'string' && o.name.length > 0
69
+ && typeof o.description === 'string'
70
+ && o.schema != null && typeof o.schema === 'object' && !Array.isArray(o.schema)
71
+ && typeof o.invoke === 'function'
72
+ && typeof o.func === 'function'
73
+ && o.lc_runnable === true;
74
+ }
37
75
  /** Empty JSON Schema object — used when a ProtectedTool has no inputSchema. */
38
76
  const EMPTY_SCHEMA = Object.freeze({
39
77
  type: 'object',
@@ -51,15 +89,21 @@ export function protectedToolToLangGraph(tool) {
51
89
  ? tool.inputSchema
52
90
  : { ...EMPTY_SCHEMA };
53
91
  // Guarded execute only — never a raw unwrapped executor.
54
- const guarded = (args) => Promise.resolve(tool.execute(args));
92
+ const guarded = (args, _config) => Promise.resolve().then(() => tool.execute(args));
93
+ const description = tool.description != null && tool.description !== ''
94
+ ? tool.description
95
+ : tool.name;
55
96
  const out = {
56
97
  name: tool.name,
98
+ description,
57
99
  schema,
58
100
  func: guarded,
59
101
  invoke: guarded,
102
+ lc_runnable: true,
60
103
  };
61
- if (tool.description != null && tool.description !== '') {
62
- out.description = tool.description;
104
+ if (!isLangGraphReactAgentTool(out)) {
105
+ throw new LangGraphToolsNotStructuredError(`protectedToolToLangGraph(${JSON.stringify(tool.name)}): tool is not createReactAgent-consumable. `
106
+ + 'Fix: wrap with tool() from @langchain/core/tools — see README (LangChain / LangGraph).');
63
107
  }
64
108
  return out;
65
109
  }
@@ -68,13 +112,29 @@ export function protectedToolToLangGraph(tool) {
68
112
  * Does NOT call the guard — pure map over an already-protected list.
69
113
  */
70
114
  export function toLangGraphTools(protectedTools) {
71
- return protectedTools.map(protectedToolToLangGraph);
115
+ return bindLangGraphTools(protectedTools.map(protectedToolToLangGraph));
116
+ }
117
+ /**
118
+ * Assert (and return) tools that createReactAgent can consume.
119
+ * Throws LangGraphToolsNotStructuredError — never a silent "Tool not found".
120
+ */
121
+ export function bindLangGraphTools(tools) {
122
+ const out = [];
123
+ for (const t of tools) {
124
+ if (!isLangGraphReactAgentTool(t)) {
125
+ const n = t && typeof t === 'object' && 'name' in t ? String(t.name) : '?';
126
+ throw new LangGraphToolsNotStructuredError(`bindLangGraphTools: ${JSON.stringify(n)} is not StructuredTool-compatible for createReactAgent. `
127
+ + 'Fix: wrap with tool() from @langchain/core/tools — see README (LangChain / LangGraph).');
128
+ }
129
+ out.push(t);
130
+ }
131
+ return out;
72
132
  }
73
133
  /**
74
134
  * Build LangGraph/LangChain-ready guarded tool descriptors from raw tools + client + operation.
75
135
  *
76
136
  * Calls withCodeRifts internally (guard logic stays in the core). Returns:
77
- * - `tools` — plain descriptors { name, description?, schema, func, invoke }
137
+ * - `tools` — StructuredTool-compatible descriptors { name, description, schema, func, invoke, lc_runnable }
78
138
  * - `protected_tools` — same guarded tools
79
139
  * - assurance objects from the core, passed through untouched
80
140
  *
@@ -99,6 +159,7 @@ export function langGraphToolAdapter(result) {
99
159
  registry_report: result.registry_report,
100
160
  composition_assurance: result.composition_assurance,
101
161
  receipt_thread: result.receipt_thread,
162
+ coverage_observed: result.coverage_observed,
102
163
  };
103
164
  if (result.repository !== undefined) {
104
165
  out.repository = result.repository;
@@ -134,10 +195,7 @@ export function bindLangGraphGuardOutcome(outcome, args) {
134
195
  body = serialize(outcome.result);
135
196
  }
136
197
  else if (outcome.executionAttempted === false) {
137
- const kind = verdictKind(outcome);
138
- body =
139
- `CodeRifts gate did not permit execution (verdict: ${kind}). `
140
- + 'No tool result was produced.';
198
+ body = formatGateRefusalBody(outcome);
141
199
  }
142
200
  else {
143
201
  const err = 'error' in outcome ? outcome.error : undefined;
@@ -157,21 +215,4 @@ export function bindLangGraphGuardOutcome(outcome, args) {
157
215
  }
158
216
  return msg;
159
217
  }
160
- function verdictKind(outcome) {
161
- return outcome.verdict && typeof outcome.verdict === 'object' && 'kind' in outcome.verdict
162
- ? String(outcome.verdict.kind)
163
- : 'UNKNOWN';
164
- }
165
- function formatGuardError(err) {
166
- if (err instanceof Error)
167
- return err.message || err.name || 'Error';
168
- if (typeof err === 'string')
169
- return err;
170
- try {
171
- return JSON.stringify(err);
172
- }
173
- catch {
174
- return String(err);
175
- }
176
- }
177
218
  //# sourceMappingURL=langgraph.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"langgraph.js","sourceRoot":"","sources":["../../../src/adapters/langgraph.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"langgraph.js","sourceRoot":"","sources":["../../../src/adapters/langgraph.ts"],"names":[],"mappings":"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"}
@@ -22,6 +22,7 @@
22
22
  * LangGraph / Anthropic adapters follow the same thin-converter pattern later.
23
23
  */
24
24
  import type { WithCodeRiftsInput, WithCodeRiftsResult, CompositionAssurance, ReceiptThreadHandle } from '../with-coderifts.js';
25
+ import type { CoverageObservedHandle } from '../coverage-observed.js';
25
26
  import type { ProtectedTool, RegistryCoverageReport } from '../tool-registry.js';
26
27
  import type { GuardOutcome } from '../types.js';
27
28
  /**
@@ -61,6 +62,8 @@ export type WithCodeRiftsOpenAIResult = {
61
62
  composition_assurance: CompositionAssurance;
62
63
  /** Per-composition receipt cursor — NOT product-truth chain evidence. */
63
64
  receipt_thread: ReceiptThreadHandle;
65
+ /** Observed coverage for this withCodeRifts run. Half A always; Half B via reportToolDispatch. */
66
+ coverage_observed: CoverageObservedHandle;
64
67
  repository?: string;
65
68
  };
66
69
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../../src/adapters/openai.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAGH,OAAO,KAAK,EACV,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACpB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AACjF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGhD;;;GAGG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,2EAA2E;QAC3E,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACrC,CAAC;CACH,CAAC;AAEF;;;;;GAKG;AACH,MAAM,MAAM,yBAAyB,GAAG;IACtC,+EAA+E;IAC/E,KAAK,EAAE,kBAAkB,EAAE,CAAC;IAC5B;;;OAGG;IACH,eAAe,EAAE,aAAa,EAAE,CAAC;IACjC,wDAAwD;IACxD,eAAe,EAAE,sBAAsB,CAAC;IACxC;;;;OAIG;IACH,qBAAqB,EAAE,oBAAoB,CAAC;IAC5C,yEAAyE;IACzE,cAAc,EAAE,mBAAmB,CAAC;IACpC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAQF;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,aAAa,GAAG,kBAAkB,CAgB7E;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,cAAc,EAAE,SAAS,aAAa,EAAE,GAAG,kBAAkB,EAAE,CAE5F;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,kBAAkB,GAAG,yBAAyB,CAGxF;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,mBAAmB,GAAG,yBAAyB,CAcxF;AAID;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF;;;GAGG;AACH,OAAO,CAAC,MAAM,iBAAiB,EAAE,OAAO,MAAM,CAAC;AAC/C,MAAM,MAAM,2BAA2B,GAAG,iBAAiB,GAAG;IAC5D,QAAQ,CAAC,YAAY,EAAE,OAAO,iBAAiB,CAAC;CACjD,CAAC;AAEF,MAAM,MAAM,0BAA0B,CAAC,CAAC,IAAI;IAC1C,gDAAgD;IAChD,YAAY,EAAE,MAAM,CAAC;IACrB,4FAA4F;IAC5F,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,MAAM,CAAC;IAClC;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF;;;GAGG;AACH,wBAAgB,gCAAgC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,MAAM,CAgBrE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,EACtC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,EACxB,IAAI,EAAE,0BAA0B,CAAC,CAAC,CAAC,GAClC,2BAA2B,CAuC7B"}
1
+ {"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../../src/adapters/openai.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAGH,OAAO,KAAK,EACV,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACpB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,KAAK,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AACjF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAQhD;;;GAGG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,2EAA2E;QAC3E,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACrC,CAAC;CACH,CAAC;AAEF;;;;;GAKG;AACH,MAAM,MAAM,yBAAyB,GAAG;IACtC,+EAA+E;IAC/E,KAAK,EAAE,kBAAkB,EAAE,CAAC;IAC5B;;;OAGG;IACH,eAAe,EAAE,aAAa,EAAE,CAAC;IACjC,wDAAwD;IACxD,eAAe,EAAE,sBAAsB,CAAC;IACxC;;;;OAIG;IACH,qBAAqB,EAAE,oBAAoB,CAAC;IAC5C,yEAAyE;IACzE,cAAc,EAAE,mBAAmB,CAAC;IACpC,kGAAkG;IAClG,iBAAiB,EAAE,sBAAsB,CAAC;IAC1C,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAQF;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,aAAa,GAAG,kBAAkB,CAgB7E;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,cAAc,EAAE,SAAS,aAAa,EAAE,GAAG,kBAAkB,EAAE,CAE5F;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,kBAAkB,GAAG,yBAAyB,CAGxF;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,mBAAmB,GAAG,yBAAyB,CAexF;AAID;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF;;;GAGG;AACH,OAAO,CAAC,MAAM,iBAAiB,EAAE,OAAO,MAAM,CAAC;AAC/C,MAAM,MAAM,2BAA2B,GAAG,iBAAiB,GAAG;IAC5D,QAAQ,CAAC,YAAY,EAAE,OAAO,iBAAiB,CAAC;CACjD,CAAC;AAEF,MAAM,MAAM,0BAA0B,CAAC,CAAC,IAAI;IAC1C,gDAAgD;IAChD,YAAY,EAAE,MAAM,CAAC;IACrB,4FAA4F;IAC5F,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,MAAM,CAAC;IAClC;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF;;;GAGG;AACH,wBAAgB,gCAAgC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,MAAM,CAgBrE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,EACtC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,EACxB,IAAI,EAAE,0BAA0B,CAAC,CAAC,CAAC,GAClC,2BAA2B,CAgC7B"}
@@ -23,6 +23,7 @@
23
23
  */
24
24
  import { withCodeRifts } from '../with-coderifts.js';
25
25
  import { attachProofToAgentResponse } from '../final-answer-proof.js';
26
+ import { formatGateRefusalBody, formatGuardError, verdictKind, } from '../gate-refusal.js';
26
27
  /** Empty JSON Schema object — used when a ProtectedTool has no inputSchema. */
27
28
  const EMPTY_PARAMETERS = Object.freeze({
28
29
  type: 'object',
@@ -83,6 +84,7 @@ export function openAIToolAdapter(result) {
83
84
  registry_report: result.registry_report,
84
85
  composition_assurance: result.composition_assurance,
85
86
  receipt_thread: result.receipt_thread,
87
+ coverage_observed: result.coverage_observed,
86
88
  };
87
89
  if (result.repository !== undefined) {
88
90
  out.repository = result.repository;
@@ -133,20 +135,13 @@ export function bindOpenAIGuardOutcome(outcome, args) {
133
135
  }
134
136
  else if (outcome.executionAttempted === false) {
135
137
  // Blocked before factory — no result; never fabricate one.
136
- const kind = outcome.verdict && typeof outcome.verdict === 'object' && 'kind' in outcome.verdict
137
- ? String(outcome.verdict.kind)
138
- : 'UNKNOWN';
139
- body =
140
- `CodeRifts gate did not permit execution (verdict: ${kind}). `
141
- + 'No tool result was produced.';
138
+ body = formatGateRefusalBody(outcome);
142
139
  }
143
140
  else {
144
141
  // executionAttempted && !executed → factory threw; error is present.
145
142
  const err = 'error' in outcome ? outcome.error : undefined;
146
143
  const errText = formatGuardError(err);
147
- const kind = outcome.verdict && typeof outcome.verdict === 'object' && 'kind' in outcome.verdict
148
- ? String(outcome.verdict.kind)
149
- : 'UNKNOWN';
144
+ const kind = verdictKind(outcome);
150
145
  body =
151
146
  `Tool execution failed after gate decision (verdict: ${kind}): ${errText}`;
152
147
  }
@@ -162,16 +157,4 @@ export function bindOpenAIGuardOutcome(outcome, args) {
162
157
  };
163
158
  return msg;
164
159
  }
165
- function formatGuardError(err) {
166
- if (err instanceof Error)
167
- return err.message || err.name || 'Error';
168
- if (typeof err === 'string')
169
- return err;
170
- try {
171
- return JSON.stringify(err);
172
- }
173
- catch {
174
- return String(err);
175
- }
176
- }
177
160
  //# sourceMappingURL=openai.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"openai.js","sourceRoot":"","sources":["../../../src/adapters/openai.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"openai.js","sourceRoot":"","sources":["../../../src/adapters/openai.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { ExecuteIfUnchangedOutcome } from '../conditional-write.js';
2
+ /** Unambiguous fs target: a non-empty `path` string on tool arguments (Write convention). */
3
+ export declare function inferFsPathFromArgs(args: unknown): string | null;
4
+ /**
5
+ * Full-file body for a Write-style tool. `contents` wins; `content` only when this
6
+ * is not an Edit (no old_string/new_string). Fragments are not a whole-file CAS.
7
+ */
8
+ export declare function inferFullFileWriteContent(args: unknown): string | null;
9
+ /**
10
+ * Wire the FS adapter when path + full-file contents are both present.
11
+ * Otherwise run the host write unchanged. If the host already returned an
12
+ * ExecuteIfUnchangedOutcome, pass it through (do not wrap again).
13
+ */
14
+ export declare function wrapWriteWithFsCas<T>(args: unknown, write: () => Promise<T> | T): Promise<T | ExecuteIfUnchangedOutcome<unknown>>;
15
+ //# sourceMappingURL=fs-default-wire.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs-default-wire.d.ts","sourceRoot":"","sources":["../../../src/cas-adapters/fs-default-wire.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAGzE,6FAA6F;AAC7F,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAQhE;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAQtE;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,CAAC,EACxC,IAAI,EAAE,OAAO,EACb,KAAK,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GAC1B,OAAO,CAAC,CAAC,GAAG,yBAAyB,CAAC,OAAO,CAAC,CAAC,CAmBjD"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Default-wire helper for the FS CAS adapter.
3
+ *
4
+ * Only when the target AND the full-file body are unambiguously inferable
5
+ * (`args.path` + `args.contents` / `args.content`, Write-style). Edit fragments
6
+ * (`old_string`/`new_string`) are NOT a full-file write — leave those opt-in.
7
+ * API / DB / registry adapters stay opt-in.
8
+ *
9
+ * This layer performs writeFileIfUnchanged (the FS adapter), not a token
10
+ * pre-check around an unconditional host write — that would be a silent
11
+ * `committed` claim.
12
+ */
13
+ 'use strict';
14
+ import { isExecuteIfUnchangedOutcome } from '../cas-attestation.js';
15
+ import { createFsVersionToken, writeFileIfUnchanged } from './fs.js';
16
+ /** Unambiguous fs target: a non-empty `path` string on tool arguments (Write convention). */
17
+ export function inferFsPathFromArgs(args) {
18
+ if (!args || typeof args !== 'object')
19
+ return null;
20
+ const path = args.path;
21
+ if (typeof path !== 'string')
22
+ return null;
23
+ const trimmed = path.trim();
24
+ if (!trimmed)
25
+ return null;
26
+ if (/^[a-zA-Z][a-zA-Z0-9+.-]*:\/\//.test(trimmed))
27
+ return null;
28
+ return trimmed;
29
+ }
30
+ /**
31
+ * Full-file body for a Write-style tool. `contents` wins; `content` only when this
32
+ * is not an Edit (no old_string/new_string). Fragments are not a whole-file CAS.
33
+ */
34
+ export function inferFullFileWriteContent(args) {
35
+ if (!args || typeof args !== 'object')
36
+ return null;
37
+ const a = args;
38
+ if (typeof a.contents === 'string')
39
+ return a.contents;
40
+ if (typeof a.content === 'string' && a.old_string == null && a.new_string == null) {
41
+ return a.content;
42
+ }
43
+ return null;
44
+ }
45
+ /**
46
+ * Wire the FS adapter when path + full-file contents are both present.
47
+ * Otherwise run the host write unchanged. If the host already returned an
48
+ * ExecuteIfUnchangedOutcome, pass it through (do not wrap again).
49
+ */
50
+ export async function wrapWriteWithFsCas(args, write) {
51
+ const filePath = inferFsPathFromArgs(args);
52
+ const content = inferFullFileWriteContent(args);
53
+ if (filePath && content != null) {
54
+ let expected;
55
+ try {
56
+ expected = await createFsVersionToken(filePath);
57
+ }
58
+ catch {
59
+ return write();
60
+ }
61
+ return writeFileIfUnchanged({
62
+ path: filePath,
63
+ expected_token: expected,
64
+ content,
65
+ });
66
+ }
67
+ const raw = await write();
68
+ if (isExecuteIfUnchangedOutcome(raw))
69
+ return raw;
70
+ return raw;
71
+ }
72
+ //# sourceMappingURL=fs-default-wire.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs-default-wire.js","sourceRoot":"","sources":["../../../src/cas-adapters/fs-default-wire.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,YAAY,CAAC;AAEb,OAAO,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AAEpE,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAErE,6FAA6F;AAC7F,MAAM,UAAU,mBAAmB,CAAC,IAAa;IAC/C,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACnD,MAAM,IAAI,GAAI,IAA2B,CAAC,IAAI,CAAC;IAC/C,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC5B,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAC1B,IAAI,+BAA+B,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IAC/D,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,yBAAyB,CAAC,IAAa;IACrD,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACnD,MAAM,CAAC,GAAG,IAA+B,CAAC;IAC1C,IAAI,OAAO,CAAC,CAAC,QAAQ,KAAK,QAAQ;QAAE,OAAO,CAAC,CAAC,QAAQ,CAAC;IACtD,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,CAAC,UAAU,IAAI,IAAI,IAAI,CAAC,CAAC,UAAU,IAAI,IAAI,EAAE,CAAC;QAClF,OAAO,CAAC,CAAC,OAAO,CAAC;IACnB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,IAAa,EACb,KAA2B;IAE3B,MAAM,QAAQ,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC3C,MAAM,OAAO,GAAG,yBAAyB,CAAC,IAAI,CAAC,CAAC;IAChD,IAAI,QAAQ,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;QAChC,IAAI,QAAgB,CAAC;QACrB,IAAI,CAAC;YACH,QAAQ,GAAG,MAAM,oBAAoB,CAAC,QAAQ,CAAC,CAAC;QAClD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,EAAE,CAAC;QACjB,CAAC;QACD,OAAO,oBAAoB,CAAC;YAC1B,IAAI,EAAE,QAAQ;YACd,cAAc,EAAE,QAAQ;YACxB,OAAO;SACR,CAAC,CAAC;IACL,CAAC;IACD,MAAM,GAAG,GAAG,MAAM,KAAK,EAAE,CAAC;IAC1B,IAAI,2BAA2B,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC;IACjD,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,45 @@
1
+ export type CoverageObservedClass = 'UNKNOWN_OUTSIDE_SCOPE' | 'INCOMPLETE_OBSERVED' | 'COMPLETE_OBSERVED';
2
+ export type CoverageDispatch = {
3
+ name: string;
4
+ /** Host timestamp if they have one. Accepted and discarded — the snapshot is counts, not a trail. */
5
+ at?: string;
6
+ };
7
+ type CoverageObservedBase = {
8
+ governed_calls: number;
9
+ tools: readonly string[];
10
+ };
11
+ export type CoverageObservedUnknown = CoverageObservedBase & {
12
+ class: 'UNKNOWN_OUTSIDE_SCOPE';
13
+ };
14
+ export type CoverageObservedIncomplete = CoverageObservedBase & {
15
+ class: 'INCOMPLETE_OBSERVED';
16
+ total_calls: number;
17
+ ungoverned_calls: number;
18
+ ungoverned_tools: readonly string[];
19
+ };
20
+ export type CoverageObservedComplete = CoverageObservedBase & {
21
+ class: 'COMPLETE_OBSERVED';
22
+ total_calls: number;
23
+ ungoverned_calls: number;
24
+ ungoverned_tools: readonly string[];
25
+ };
26
+ export type CoverageObserved = CoverageObservedUnknown | CoverageObservedIncomplete | CoverageObservedComplete;
27
+ export type CoverageObservedHandle = {
28
+ snapshot: () => CoverageObserved;
29
+ reportToolDispatch: (ev: CoverageDispatch) => void;
30
+ reportToolDispatchBatch: (evs: readonly CoverageDispatch[]) => void;
31
+ };
32
+ export type CoverageObserver = {
33
+ setTableNames: (names: readonly string[]) => void;
34
+ recordGoverned: (name: string) => void;
35
+ snapshot: () => CoverageObserved;
36
+ handle: CoverageObservedHandle;
37
+ };
38
+ export declare function createCoverageObserver(): CoverageObserver;
39
+ export declare function freezeCoverageObserved(obs: CoverageObserved): CoverageObserved;
40
+ /**
41
+ * Proof / T3 human line. Half B absent vs named ungoverned vs complete host report.
42
+ */
43
+ export declare function formatCoverageObservedLine(obs: CoverageObserved): string;
44
+ export {};
45
+ //# sourceMappingURL=coverage-observed.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coverage-observed.d.ts","sourceRoot":"","sources":["../../src/coverage-observed.ts"],"names":[],"mappings":"AAeA,MAAM,MAAM,qBAAqB,GAC7B,uBAAuB,GACvB,qBAAqB,GACrB,mBAAmB,CAAC;AAExB,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,qGAAqG;IACrG,EAAE,CAAC,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,KAAK,oBAAoB,GAAG;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG,oBAAoB,GAAG;IAC3D,KAAK,EAAE,uBAAuB,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG,oBAAoB,GAAG;IAC9D,KAAK,EAAE,qBAAqB,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG,oBAAoB,GAAG;IAC5D,KAAK,EAAE,mBAAmB,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC,CAAC;AAEF,MAAM,MAAM,gBAAgB,GACxB,uBAAuB,GACvB,0BAA0B,GAC1B,wBAAwB,CAAC;AAE7B,MAAM,MAAM,sBAAsB,GAAG;IACnC,QAAQ,EAAE,MAAM,gBAAgB,CAAC;IACjC,kBAAkB,EAAE,CAAC,EAAE,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACnD,uBAAuB,EAAE,CAAC,GAAG,EAAE,SAAS,gBAAgB,EAAE,KAAK,IAAI,CAAC;CACrE,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,aAAa,EAAE,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,KAAK,IAAI,CAAC;IAClD,cAAc,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,QAAQ,EAAE,MAAM,gBAAgB,CAAC;IACjC,MAAM,EAAE,sBAAsB,CAAC;CAChC,CAAC;AAaF,wBAAgB,sBAAsB,IAAI,gBAAgB,CAuEzD;AAED,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,gBAAgB,GAAG,gBAAgB,CAiB9E;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,gBAAgB,GAAG,MAAM,CAcxE"}
@@ -0,0 +1,136 @@
1
+ /**
2
+ * Coverage attestation — what the guard MEASURED about tool traffic, not what it
3
+ * assumed at registration time.
4
+ *
5
+ * Half A (always): counts execute() through the returned table (governed_calls / tools).
6
+ * Half B (optional host report): total_calls / ungoverned_* — OMITTED when the host
7
+ * never reported, never zero. Absence ≠ zero.
8
+ *
9
+ * Observation only. Not a verdict input. Not a preimage field.
10
+ *
11
+ * Run scope: one withCodeRifts instance (same lifetime as receipt_thread). There is
12
+ * no process-wide session; this is the smallest honest run.
13
+ */
14
+ 'use strict';
15
+ function uniqueInOrder(names) {
16
+ const seen = new Set();
17
+ const out = [];
18
+ for (const n of names) {
19
+ if (seen.has(n))
20
+ continue;
21
+ seen.add(n);
22
+ out.push(n);
23
+ }
24
+ return out;
25
+ }
26
+ export function createCoverageObserver() {
27
+ const table = new Set();
28
+ const governed = [];
29
+ const host = [];
30
+ let hostReported = false;
31
+ function snapshot() {
32
+ const tools = uniqueInOrder(governed);
33
+ if (!hostReported) {
34
+ return freezeCoverageObserved({
35
+ class: 'UNKNOWN_OUTSIDE_SCOPE',
36
+ governed_calls: governed.length,
37
+ tools,
38
+ });
39
+ }
40
+ const ungovernedList = host.filter((n) => !table.has(n));
41
+ if (ungovernedList.length > 0) {
42
+ return freezeCoverageObserved({
43
+ class: 'INCOMPLETE_OBSERVED',
44
+ governed_calls: governed.length,
45
+ tools,
46
+ total_calls: host.length,
47
+ ungoverned_calls: ungovernedList.length,
48
+ ungoverned_tools: uniqueInOrder(ungovernedList),
49
+ });
50
+ }
51
+ return freezeCoverageObserved({
52
+ class: 'COMPLETE_OBSERVED',
53
+ governed_calls: governed.length,
54
+ tools,
55
+ total_calls: host.length,
56
+ ungoverned_calls: 0,
57
+ ungoverned_tools: [],
58
+ });
59
+ }
60
+ function reportOne(ev) {
61
+ if (!ev || typeof ev.name !== 'string')
62
+ return false;
63
+ const name = ev.name.trim();
64
+ if (!name)
65
+ return false;
66
+ host.push(name);
67
+ return true;
68
+ }
69
+ const handle = {
70
+ snapshot,
71
+ reportToolDispatch(ev) {
72
+ if (reportOne(ev))
73
+ hostReported = true;
74
+ },
75
+ reportToolDispatchBatch(evs) {
76
+ // An actual array (including []) is a supplied report. A non-array is not.
77
+ if (!Array.isArray(evs))
78
+ return;
79
+ hostReported = true;
80
+ for (const ev of evs)
81
+ reportOne(ev);
82
+ },
83
+ };
84
+ return {
85
+ setTableNames(names) {
86
+ table.clear();
87
+ if (!Array.isArray(names) && !names)
88
+ return;
89
+ for (const n of names) {
90
+ if (typeof n === 'string' && n)
91
+ table.add(n);
92
+ }
93
+ },
94
+ recordGoverned(name) {
95
+ if (typeof name === 'string' && name)
96
+ governed.push(name);
97
+ },
98
+ snapshot,
99
+ handle,
100
+ };
101
+ }
102
+ export function freezeCoverageObserved(obs) {
103
+ const tools = Object.freeze(obs.tools.slice());
104
+ if (obs.class === 'UNKNOWN_OUTSIDE_SCOPE') {
105
+ return Object.freeze({
106
+ class: 'UNKNOWN_OUTSIDE_SCOPE',
107
+ governed_calls: obs.governed_calls,
108
+ tools,
109
+ });
110
+ }
111
+ return Object.freeze({
112
+ class: obs.class,
113
+ governed_calls: obs.governed_calls,
114
+ tools,
115
+ total_calls: obs.total_calls,
116
+ ungoverned_calls: obs.ungoverned_calls,
117
+ ungoverned_tools: Object.freeze((obs.ungoverned_tools || []).slice()),
118
+ });
119
+ }
120
+ /**
121
+ * Proof / T3 human line. Half B absent vs named ungoverned vs complete host report.
122
+ */
123
+ export function formatCoverageObservedLine(obs) {
124
+ const n = obs.governed_calls;
125
+ const callWord = n === 1 ? 'call' : 'calls';
126
+ if (obs.class === 'UNKNOWN_OUTSIDE_SCOPE') {
127
+ return `governed ${n} ${callWord}; traffic outside the guarded table not observable from here`;
128
+ }
129
+ if (obs.class === 'INCOMPLETE_OBSERVED') {
130
+ const names = obs.ungoverned_tools.join(', ');
131
+ return (`governed ${n}/${obs.total_calls} dispatched calls; `
132
+ + `${obs.ungoverned_calls} outside the guarded table: ${names}`);
133
+ }
134
+ return `governed ${n}/${obs.total_calls} dispatched calls; 0 outside the guarded table`;
135
+ }
136
+ //# sourceMappingURL=coverage-observed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coverage-observed.js","sourceRoot":"","sources":["../../src/coverage-observed.ts"],"names":[],"mappings":"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"}
@@ -145,6 +145,11 @@ export type GuardExecutionProof = {
145
145
  fingerprint: string | null;
146
146
  execution_action: string | null;
147
147
  }>;
148
+ /**
149
+ * Observed tool-traffic coverage (withCodeRifts run). Observation only; omitted
150
+ * when no observer is wired. Not a preimage field.
151
+ */
152
+ coverage_observed?: import('./coverage-observed.js').CoverageObserved;
148
153
  };
149
154
  export type ProofBuildInput = {
150
155
  preflighted: boolean;
@@ -179,6 +184,8 @@ export type ProofBuildInput = {
179
184
  fingerprint: string | null;
180
185
  execution_action: string | null;
181
186
  }>;
187
+ /** Coverage snapshot (observation). Omit when no observer. */
188
+ coverageObserved?: import('./coverage-observed.js').CoverageObserved;
182
189
  };
183
190
  /**
184
191
  * Runtime twin of the type-level enforced⟺receiptVerified invariant.
@@ -1 +1 @@
1
- {"version":3,"file":"execution-proof.d.ts","sourceRoot":"","sources":["../../src/execution-proof.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"execution-proof.d.ts","sourceRoot":"","sources":["../../src/execution-proof.ts"],"names":[],"mappings":"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"}
@@ -18,6 +18,7 @@
18
18
  * package, or that an absent field means compliance. Those limits are explicit on every block.
19
19
  */
20
20
  import { createHash } from 'node:crypto';
21
+ import { freezeCoverageObserved } from './coverage-observed.js';
21
22
  /** Machine-readable schema id for this block. */
22
23
  export const EXECUTION_PROOF_SPEC = 'guard-execution-proof.v1';
23
24
  const LIMITS = Object.freeze({
@@ -175,6 +176,9 @@ export function buildExecutionProof(input) {
175
176
  if (Array.isArray(input.recheckTrail) && input.recheckTrail.length > 0) {
176
177
  proof.recheck_trail = Object.freeze(input.recheckTrail.map((e) => Object.freeze({ ...e })));
177
178
  }
179
+ if (input.coverageObserved && typeof input.coverageObserved === 'object') {
180
+ proof.coverage_observed = freezeCoverageObserved(input.coverageObserved);
181
+ }
178
182
  return freezeProof(proof);
179
183
  }
180
184
  function freezeMonitoringDelivery(d) {