agentfootprint 10.1.0 → 10.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CAPABILITIES.md +1 -0
- package/dist/adapters/llm/AnthropicProvider.js +17 -1
- package/dist/adapters/llm/AnthropicProvider.js.map +1 -1
- package/dist/adapters/llm/anthropicMessageProjection.js +26 -1
- package/dist/adapters/llm/anthropicMessageProjection.js.map +1 -1
- package/dist/adapters/llm/anthropicMessagesWire.js +42 -37
- package/dist/adapters/llm/anthropicMessagesWire.js.map +1 -1
- package/dist/adapters/llm/anthropicReplayLayout.js +63 -12
- package/dist/adapters/llm/anthropicReplayLayout.js.map +1 -1
- package/dist/adapters/llm/anthropicToolArguments.js +122 -0
- package/dist/adapters/llm/anthropicToolArguments.js.map +1 -0
- package/dist/adapters/types.js.map +1 -1
- package/dist/answer-validation/validate.js +7 -107
- package/dist/answer-validation/validate.js.map +1 -1
- package/dist/core/Agent.js +5 -0
- package/dist/core/Agent.js.map +1 -1
- package/dist/core/agent/arguments/resolve.js +4 -0
- package/dist/core/agent/arguments/resolve.js.map +1 -1
- package/dist/core/agent/arguments/subflow.js +1 -0
- package/dist/core/agent/arguments/subflow.js.map +1 -1
- package/dist/core/agent/findings/types.js.map +1 -1
- package/dist/core/agent/findings/verificationCheck.js +99 -0
- package/dist/core/agent/findings/verificationCheck.js.map +1 -0
- package/dist/core/agent/findings/verificationCheckpoint.js +110 -0
- package/dist/core/agent/findings/verificationCheckpoint.js.map +1 -0
- package/dist/core/agent/findings/verificationConfig.js +119 -0
- package/dist/core/agent/findings/verificationConfig.js.map +1 -0
- package/dist/core/agent/findings/verificationRow.js +181 -0
- package/dist/core/agent/findings/verificationRow.js.map +1 -0
- package/dist/core/agent/findings/verificationState.js +152 -0
- package/dist/core/agent/findings/verificationState.js.map +1 -0
- package/dist/core/agent/findings/verificationTypes.js +23 -0
- package/dist/core/agent/findings/verificationTypes.js.map +1 -0
- package/dist/core/agent/outputEnforcement.js +5 -0
- package/dist/core/agent/outputEnforcement.js.map +1 -1
- package/dist/core/agent/stages/toolCalls.js +20 -3
- package/dist/core/agent/stages/toolCalls.js.map +1 -1
- package/dist/core/agent/toolArgsValidation.js +12 -1
- package/dist/core/agent/toolArgsValidation.js.map +1 -1
- package/dist/core/runCheckpoint.js +45 -4
- package/dist/core/runCheckpoint.js.map +1 -1
- package/dist/esm/adapters/llm/AnthropicProvider.js +17 -1
- package/dist/esm/adapters/llm/AnthropicProvider.js.map +1 -1
- package/dist/esm/adapters/llm/anthropicMessageProjection.js +26 -1
- package/dist/esm/adapters/llm/anthropicMessageProjection.js.map +1 -1
- package/dist/esm/adapters/llm/anthropicMessagesWire.d.ts +9 -3
- package/dist/esm/adapters/llm/anthropicMessagesWire.js +42 -37
- package/dist/esm/adapters/llm/anthropicMessagesWire.js.map +1 -1
- package/dist/esm/adapters/llm/anthropicReplayLayout.d.ts +1 -1
- package/dist/esm/adapters/llm/anthropicReplayLayout.js +63 -12
- package/dist/esm/adapters/llm/anthropicReplayLayout.js.map +1 -1
- package/dist/esm/adapters/llm/anthropicToolArguments.d.ts +31 -0
- package/dist/esm/adapters/llm/anthropicToolArguments.js +118 -0
- package/dist/esm/adapters/llm/anthropicToolArguments.js.map +1 -0
- package/dist/esm/adapters/types.d.ts +17 -0
- package/dist/esm/adapters/types.js.map +1 -1
- package/dist/esm/answer-validation/validate.js +1 -101
- package/dist/esm/answer-validation/validate.js.map +1 -1
- package/dist/esm/core/Agent.js +5 -0
- package/dist/esm/core/Agent.js.map +1 -1
- package/dist/esm/core/agent/arguments/resolve.d.ts +1 -0
- package/dist/esm/core/agent/arguments/resolve.js +4 -0
- package/dist/esm/core/agent/arguments/resolve.js.map +1 -1
- package/dist/esm/core/agent/arguments/subflow.js +1 -0
- package/dist/esm/core/agent/arguments/subflow.js.map +1 -1
- package/dist/esm/core/agent/findings/types.d.ts +2 -1
- package/dist/esm/core/agent/findings/types.js.map +1 -1
- package/dist/esm/core/agent/findings/verificationCheck.d.ts +24 -0
- package/dist/esm/core/agent/findings/verificationCheck.js +95 -0
- package/dist/esm/core/agent/findings/verificationCheck.js.map +1 -0
- package/dist/esm/core/agent/findings/verificationCheckpoint.d.ts +10 -0
- package/dist/esm/core/agent/findings/verificationCheckpoint.js +104 -0
- package/dist/esm/core/agent/findings/verificationCheckpoint.js.map +1 -0
- package/dist/esm/core/agent/findings/verificationConfig.d.ts +30 -0
- package/dist/esm/core/agent/findings/verificationConfig.js +115 -0
- package/dist/esm/core/agent/findings/verificationConfig.js.map +1 -0
- package/dist/esm/core/agent/findings/verificationRow.d.ts +16 -0
- package/dist/esm/core/agent/findings/verificationRow.js +174 -0
- package/dist/esm/core/agent/findings/verificationRow.js.map +1 -0
- package/dist/esm/core/agent/findings/verificationState.d.ts +39 -0
- package/dist/esm/core/agent/findings/verificationState.js +143 -0
- package/dist/esm/core/agent/findings/verificationState.js.map +1 -0
- package/dist/esm/core/agent/findings/verificationTypes.d.ts +55 -0
- package/dist/esm/core/agent/findings/verificationTypes.js +20 -0
- package/dist/esm/core/agent/findings/verificationTypes.js.map +1 -0
- package/dist/esm/core/agent/outputEnforcement.js +5 -0
- package/dist/esm/core/agent/outputEnforcement.js.map +1 -1
- package/dist/esm/core/agent/stages/toolCalls.js +21 -4
- package/dist/esm/core/agent/stages/toolCalls.js.map +1 -1
- package/dist/esm/core/agent/toolArgsValidation.d.ts +2 -0
- package/dist/esm/core/agent/toolArgsValidation.js +10 -0
- package/dist/esm/core/agent/toolArgsValidation.js.map +1 -1
- package/dist/esm/core/agent/types.d.ts +1 -0
- package/dist/esm/core/runCheckpoint.d.ts +11 -1
- package/dist/esm/core/runCheckpoint.js +45 -4
- package/dist/esm/core/runCheckpoint.js.map +1 -1
- package/dist/esm/integrity/claim-binding/admit.d.ts +12 -0
- package/dist/esm/integrity/claim-binding/admit.js +204 -0
- package/dist/esm/integrity/claim-binding/admit.js.map +1 -0
- package/dist/esm/integrity/claim-binding/bindEvidence.d.ts +8 -0
- package/dist/esm/integrity/claim-binding/bindEvidence.js +144 -0
- package/dist/esm/integrity/claim-binding/bindEvidence.js.map +1 -0
- package/dist/esm/integrity/claim-binding/capture.d.ts +25 -0
- package/dist/esm/integrity/claim-binding/capture.js +143 -0
- package/dist/esm/integrity/claim-binding/capture.js.map +1 -0
- package/dist/esm/integrity/claim-binding/scope.d.ts +23 -0
- package/dist/esm/integrity/claim-binding/scope.js +149 -0
- package/dist/esm/integrity/claim-binding/scope.js.map +1 -0
- package/dist/esm/integrity/claim-binding/types.d.ts +99 -0
- package/dist/esm/integrity/claim-binding/types.js +23 -0
- package/dist/esm/integrity/claim-binding/types.js.map +1 -0
- package/dist/esm/integrity/unsupported-claim/check.js +33 -55
- package/dist/esm/integrity/unsupported-claim/check.js.map +1 -1
- package/dist/esm/integrity/unsupported-claim/evaluate.d.ts +18 -0
- package/dist/esm/integrity/unsupported-claim/evaluate.js +34 -0
- package/dist/esm/integrity/unsupported-claim/evaluate.js.map +1 -0
- package/dist/esm/lib/boundedJson.d.ts +3 -0
- package/dist/esm/lib/boundedJson.js +104 -0
- package/dist/esm/lib/boundedJson.js.map +1 -0
- package/dist/esm/lib/time-travel/receipt.js +4 -0
- package/dist/esm/lib/time-travel/receipt.js.map +1 -1
- package/dist/esm/memory/identity/encode.d.ts +7 -0
- package/dist/esm/memory/identity/encode.js +14 -0
- package/dist/esm/memory/identity/encode.js.map +1 -1
- package/dist/esm/redaction/conversation.js +3 -0
- package/dist/esm/redaction/conversation.js.map +1 -1
- package/dist/esm/redaction/knownStrings.js +8 -0
- package/dist/esm/redaction/knownStrings.js.map +1 -1
- package/dist/esm/thinking/replay.d.ts +6 -1
- package/dist/esm/thinking/replay.js.map +1 -1
- package/dist/integrity/claim-binding/admit.js +211 -0
- package/dist/integrity/claim-binding/admit.js.map +1 -0
- package/dist/integrity/claim-binding/bindEvidence.js +148 -0
- package/dist/integrity/claim-binding/bindEvidence.js.map +1 -0
- package/dist/integrity/claim-binding/capture.js +152 -0
- package/dist/integrity/claim-binding/capture.js.map +1 -0
- package/dist/integrity/claim-binding/scope.js +159 -0
- package/dist/integrity/claim-binding/scope.js.map +1 -0
- package/dist/integrity/claim-binding/types.js +26 -0
- package/dist/integrity/claim-binding/types.js.map +1 -0
- package/dist/integrity/unsupported-claim/check.js +32 -54
- package/dist/integrity/unsupported-claim/check.js.map +1 -1
- package/dist/integrity/unsupported-claim/evaluate.js +38 -0
- package/dist/integrity/unsupported-claim/evaluate.js.map +1 -0
- package/dist/lib/boundedJson.js +109 -0
- package/dist/lib/boundedJson.js.map +1 -0
- package/dist/lib/time-travel/receipt.js +4 -0
- package/dist/lib/time-travel/receipt.js.map +1 -1
- package/dist/memory/identity/encode.js +16 -1
- package/dist/memory/identity/encode.js.map +1 -1
- package/dist/redaction/conversation.js +3 -0
- package/dist/redaction/conversation.js.map +1 -1
- package/dist/redaction/knownStrings.js +8 -0
- package/dist/redaction/knownStrings.js.map +1 -1
- package/dist/thinking/replay.js.map +1 -1
- package/dist/types/adapters/llm/AnthropicProvider.d.ts.map +1 -1
- package/dist/types/adapters/llm/anthropicMessageProjection.d.ts.map +1 -1
- package/dist/types/adapters/llm/anthropicMessagesWire.d.ts +9 -3
- package/dist/types/adapters/llm/anthropicMessagesWire.d.ts.map +1 -1
- package/dist/types/adapters/llm/anthropicReplayLayout.d.ts +1 -1
- package/dist/types/adapters/llm/anthropicReplayLayout.d.ts.map +1 -1
- package/dist/types/adapters/llm/anthropicToolArguments.d.ts +32 -0
- package/dist/types/adapters/llm/anthropicToolArguments.d.ts.map +1 -0
- package/dist/types/adapters/types.d.ts +17 -0
- package/dist/types/adapters/types.d.ts.map +1 -1
- package/dist/types/answer-validation/validate.d.ts.map +1 -1
- package/dist/types/core/Agent.d.ts.map +1 -1
- package/dist/types/core/agent/arguments/resolve.d.ts +1 -0
- package/dist/types/core/agent/arguments/resolve.d.ts.map +1 -1
- package/dist/types/core/agent/arguments/subflow.d.ts.map +1 -1
- package/dist/types/core/agent/findings/types.d.ts +2 -1
- package/dist/types/core/agent/findings/types.d.ts.map +1 -1
- package/dist/types/core/agent/findings/verificationCheck.d.ts +25 -0
- package/dist/types/core/agent/findings/verificationCheck.d.ts.map +1 -0
- package/dist/types/core/agent/findings/verificationCheckpoint.d.ts +11 -0
- package/dist/types/core/agent/findings/verificationCheckpoint.d.ts.map +1 -0
- package/dist/types/core/agent/findings/verificationConfig.d.ts +31 -0
- package/dist/types/core/agent/findings/verificationConfig.d.ts.map +1 -0
- package/dist/types/core/agent/findings/verificationRow.d.ts +17 -0
- package/dist/types/core/agent/findings/verificationRow.d.ts.map +1 -0
- package/dist/types/core/agent/findings/verificationState.d.ts +40 -0
- package/dist/types/core/agent/findings/verificationState.d.ts.map +1 -0
- package/dist/types/core/agent/findings/verificationTypes.d.ts +56 -0
- package/dist/types/core/agent/findings/verificationTypes.d.ts.map +1 -0
- package/dist/types/core/agent/outputEnforcement.d.ts.map +1 -1
- package/dist/types/core/agent/stages/toolCalls.d.ts.map +1 -1
- package/dist/types/core/agent/toolArgsValidation.d.ts +2 -0
- package/dist/types/core/agent/toolArgsValidation.d.ts.map +1 -1
- package/dist/types/core/agent/types.d.ts +1 -0
- package/dist/types/core/agent/types.d.ts.map +1 -1
- package/dist/types/core/runCheckpoint.d.ts +11 -1
- package/dist/types/core/runCheckpoint.d.ts.map +1 -1
- package/dist/types/integrity/claim-binding/admit.d.ts +13 -0
- package/dist/types/integrity/claim-binding/admit.d.ts.map +1 -0
- package/dist/types/integrity/claim-binding/bindEvidence.d.ts +9 -0
- package/dist/types/integrity/claim-binding/bindEvidence.d.ts.map +1 -0
- package/dist/types/integrity/claim-binding/capture.d.ts +26 -0
- package/dist/types/integrity/claim-binding/capture.d.ts.map +1 -0
- package/dist/types/integrity/claim-binding/scope.d.ts +24 -0
- package/dist/types/integrity/claim-binding/scope.d.ts.map +1 -0
- package/dist/types/integrity/claim-binding/types.d.ts +100 -0
- package/dist/types/integrity/claim-binding/types.d.ts.map +1 -0
- package/dist/types/integrity/unsupported-claim/check.d.ts.map +1 -1
- package/dist/types/integrity/unsupported-claim/evaluate.d.ts +19 -0
- package/dist/types/integrity/unsupported-claim/evaluate.d.ts.map +1 -0
- package/dist/types/lib/boundedJson.d.ts +4 -0
- package/dist/types/lib/boundedJson.d.ts.map +1 -0
- package/dist/types/lib/time-travel/receipt.d.ts.map +1 -1
- package/dist/types/memory/identity/encode.d.ts +7 -0
- package/dist/types/memory/identity/encode.d.ts.map +1 -1
- package/dist/types/redaction/conversation.d.ts.map +1 -1
- package/dist/types/redaction/knownStrings.d.ts.map +1 -1
- package/dist/types/thinking/replay.d.ts +6 -1
- package/dist/types/thinking/replay.d.ts.map +1 -1
- package/package.json +3 -2
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/** Exact evidence selection and eligibility, before the shared pair evaluator. */
|
|
2
|
+
import { copyJson, ownData } from '../../lib/boundedJson.js';
|
|
3
|
+
import { participates, comparableValueOf } from '../assertion/types.js';
|
|
4
|
+
import { periodVerdict } from '../../core/agent/coverage/period.js';
|
|
5
|
+
import { resultIdentityOf } from './capture.js';
|
|
6
|
+
import { BINDING_LIMITS, boundedText, boundedResultId, queriedPeriodMatches, scopesMatch, ownConfigArray, } from './scope.js';
|
|
7
|
+
import { bindingRuleOf, readEvidenceSnapshot } from './admit.js';
|
|
8
|
+
const unverified = (reason) => ({ kind: 'unverified', reason });
|
|
9
|
+
const isDoubt = (value) => value === null || value === 'unknown' || value === undefined;
|
|
10
|
+
/**
|
|
11
|
+
* The model supplies only result/value/rule. Snapshot lineage, rule registry
|
|
12
|
+
* and intendedScope are runtime/app inputs. A bound pair is not a verdict.
|
|
13
|
+
* JSON-restored snapshots must originate from the caller's verified recording;
|
|
14
|
+
* this module validates shape and associations, not signatures or ownership.
|
|
15
|
+
*/
|
|
16
|
+
export function bindClaim(rawClaim, snapshot, rules, intendedScope) {
|
|
17
|
+
let claim;
|
|
18
|
+
try {
|
|
19
|
+
claim = ownData(copyJson(rawClaim, BINDING_LIMITS.scopeBytes, true), [
|
|
20
|
+
'result',
|
|
21
|
+
'value',
|
|
22
|
+
'rule',
|
|
23
|
+
]);
|
|
24
|
+
if (!boundedResultId(claim.result) ||
|
|
25
|
+
!boundedText(claim.rule) ||
|
|
26
|
+
!Object.hasOwn(claim, 'value'))
|
|
27
|
+
return unverified('invalid-claim');
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
return unverified('invalid-claim');
|
|
31
|
+
}
|
|
32
|
+
let matchingRules;
|
|
33
|
+
try {
|
|
34
|
+
matchingRules = ownConfigArray(rules, BINDING_LIMITS.results)
|
|
35
|
+
.map(bindingRuleOf)
|
|
36
|
+
.filter((rule) => rule.id === claim.rule);
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
return unverified('invalid-rule');
|
|
40
|
+
}
|
|
41
|
+
if (matchingRules.length === 0)
|
|
42
|
+
return unverified('unknown-rule');
|
|
43
|
+
if (matchingRules.length !== 1)
|
|
44
|
+
return unverified('invalid-rule');
|
|
45
|
+
const rule = matchingRules[0];
|
|
46
|
+
if (rule === undefined)
|
|
47
|
+
return unverified('invalid-rule');
|
|
48
|
+
try {
|
|
49
|
+
const saved = readEvidenceSnapshot(snapshot);
|
|
50
|
+
const matches = saved.results.filter((result) => result.id === claim.result);
|
|
51
|
+
if (matches.length === 0)
|
|
52
|
+
return unverified('missing-result');
|
|
53
|
+
if (matches.length !== 1)
|
|
54
|
+
return unverified('ambiguous-result');
|
|
55
|
+
const result = matches[0];
|
|
56
|
+
if (result === undefined || result.id !== resultIdentityOf(result.identity))
|
|
57
|
+
return unverified('invalid-evidence');
|
|
58
|
+
if (result.identity.namespace !== saved.namespace ||
|
|
59
|
+
!saved.runIds.includes(result.identity.runId))
|
|
60
|
+
return unverified('foreign-result');
|
|
61
|
+
if (result.unavailable !== undefined)
|
|
62
|
+
return unverified(result.unavailable);
|
|
63
|
+
if (result.toolName !== rule.toolName)
|
|
64
|
+
return unverified('invalid-rule');
|
|
65
|
+
if (result.scopeDeclaration.id !== rule.scopeDeclaration.id ||
|
|
66
|
+
result.scopeDeclaration.version !== rule.scopeDeclaration.version)
|
|
67
|
+
return unverified('scope-version-mismatch');
|
|
68
|
+
if (result.scope === undefined)
|
|
69
|
+
return unverified('missing-scope');
|
|
70
|
+
const dimensions = rule.scopeDeclaration.dimensions.map((dimension) => dimension.name);
|
|
71
|
+
if (!dimensions.every(boundedText) ||
|
|
72
|
+
new Set(dimensions).size !== dimensions.length ||
|
|
73
|
+
dimensions.some((name) => !Object.hasOwn(result.scope, name)) ||
|
|
74
|
+
Object.keys(result.scope).some((name) => !dimensions.includes(name)))
|
|
75
|
+
return unverified('missing-scope');
|
|
76
|
+
if (result.periodDimension !== rule.scopeDeclaration.periodDimension)
|
|
77
|
+
return unverified('scope-version-mismatch');
|
|
78
|
+
if (intendedScope !== undefined && !scopesMatch(result.scope, intendedScope))
|
|
79
|
+
return unverified('scope-mismatch');
|
|
80
|
+
const entity = typeof rule.fact.entity === 'string'
|
|
81
|
+
? rule.fact.entity
|
|
82
|
+
: result.scope[rule.fact.entity.scopeDimension];
|
|
83
|
+
if (!boundedText(entity) || !boundedText(rule.fact.field))
|
|
84
|
+
return unverified('invalid-rule');
|
|
85
|
+
if (!Array.isArray(result.facts))
|
|
86
|
+
return unverified('invalid-evidence');
|
|
87
|
+
const facts = result.facts.filter((fact) => fact.entity === entity && fact.field === rule.fact.field);
|
|
88
|
+
if (facts.length === 0)
|
|
89
|
+
return unverified('missing-fact');
|
|
90
|
+
if (facts.length !== 1)
|
|
91
|
+
return unverified('ambiguous-fact');
|
|
92
|
+
const fact = facts[0];
|
|
93
|
+
if (fact === undefined || !participates(fact.value) || !participates(claim.value))
|
|
94
|
+
return unverified('unasserted-value');
|
|
95
|
+
// Absence/doubt needs a separately authored absence rule in a later slice.
|
|
96
|
+
if (isDoubt(comparableValueOf(fact.value)) || isDoubt(comparableValueOf(claim.value)))
|
|
97
|
+
return unverified('unasserted-value');
|
|
98
|
+
if (result.period !== undefined) {
|
|
99
|
+
const verdict = periodVerdict(result.period);
|
|
100
|
+
if (verdict === 'unknown')
|
|
101
|
+
return unverified('coverage-unknown');
|
|
102
|
+
if (verdict !== 'covered')
|
|
103
|
+
return unverified('coverage-partial');
|
|
104
|
+
}
|
|
105
|
+
if (result.periodDimension !== undefined) {
|
|
106
|
+
if (result.period === undefined)
|
|
107
|
+
return unverified('coverage-undeclared');
|
|
108
|
+
if (!queriedPeriodMatches(result.scope[result.periodDimension], result.period))
|
|
109
|
+
return unverified('scope-mismatch');
|
|
110
|
+
}
|
|
111
|
+
if (rule.coverage === undefined || result.coverage === undefined)
|
|
112
|
+
return unverified('coverage-undeclared');
|
|
113
|
+
const completeness = rule.coverage({
|
|
114
|
+
scope: result.scope,
|
|
115
|
+
coverage: result.coverage,
|
|
116
|
+
...(result.period !== undefined && { period: result.period }),
|
|
117
|
+
});
|
|
118
|
+
if (completeness === 'partial')
|
|
119
|
+
return unverified('coverage-partial');
|
|
120
|
+
if (completeness === 'stale')
|
|
121
|
+
return unverified('coverage-stale');
|
|
122
|
+
if (completeness !== 'complete')
|
|
123
|
+
return unverified('coverage-unknown');
|
|
124
|
+
const common = {
|
|
125
|
+
subject: { kind: 'entity', id: entity },
|
|
126
|
+
predicate: rule.fact.field,
|
|
127
|
+
stratum: 'asserted',
|
|
128
|
+
};
|
|
129
|
+
return copyJson({
|
|
130
|
+
kind: 'bound',
|
|
131
|
+
resultId: result.id,
|
|
132
|
+
rule: { id: rule.id, version: rule.version },
|
|
133
|
+
scope: result.scope,
|
|
134
|
+
coverage: result.coverage,
|
|
135
|
+
...(result.period !== undefined && { period: result.period }),
|
|
136
|
+
evidence: { ...common, value: fact.value, provenance: `result ${result.id}` },
|
|
137
|
+
claim: { ...common, value: claim.value, provenance: `rule ${rule.id}` },
|
|
138
|
+
}, BINDING_LIMITS.resultBytes, true);
|
|
139
|
+
}
|
|
140
|
+
catch {
|
|
141
|
+
return unverified('invalid-evidence');
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=bindEvidence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bindEvidence.js","sourceRoot":"","sources":["../../../../src/integrity/claim-binding/bindEvidence.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { CapturedDispatch, EvidenceSnapshot, ResultEvidence, ResultIdentity, ReturnedEvidence, ScopeDeclaration } from './types.js';
|
|
2
|
+
export declare function resultIdentityOf(identity: ResultIdentity): string;
|
|
3
|
+
/** Decode only canonical runtime result occurrences; no lookup or authority is inferred. */
|
|
4
|
+
export declare function readResultIdentity(raw: unknown): ResultIdentity;
|
|
5
|
+
/** Capture selected scope now; a later mutation of args cannot change it. */
|
|
6
|
+
export declare function captureDispatch(identity: ResultIdentity, tool: {
|
|
7
|
+
readonly toolName: string;
|
|
8
|
+
readonly toolCallId: string;
|
|
9
|
+
readonly iteration: number;
|
|
10
|
+
}, executedArgs: unknown, declaration: ScopeDeclaration): CapturedDispatch;
|
|
11
|
+
/** Preserve the returned reading before any async result rule can mutate it. */
|
|
12
|
+
export declare function captureReturnedEvidence(dispatch: CapturedDispatch, original: unknown): ReturnedEvidence;
|
|
13
|
+
/**
|
|
14
|
+
* returned is the return-time copy from that invocation. served is
|
|
15
|
+
* the final model-facing payload AFTER all governance, placement and caps.
|
|
16
|
+
* Visibility is a trusted adapter decision; equality alone grants no access.
|
|
17
|
+
* Rewrites need a future explicit association, and are unavailable here.
|
|
18
|
+
*/
|
|
19
|
+
export declare function finalizeEvidence(dispatch: CapturedDispatch, returned: ReturnedEvidence, served: unknown, access: {
|
|
20
|
+
readonly completed: boolean;
|
|
21
|
+
readonly resultVisible: boolean;
|
|
22
|
+
readonly scopeVisible: boolean;
|
|
23
|
+
}): ResultEvidence;
|
|
24
|
+
/** Freeze the caller's completed evidence universe at the declaration moment. */
|
|
25
|
+
export declare function evidenceSnapshot(namespace: string, verifiedRunIds: readonly string[], results: readonly ResultEvidence[]): EvidenceSnapshot;
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Internal dispatch/return/delivery receipt boundary, not mounted in the Agent.
|
|
3
|
+
* The eventual runtime adapter reserves a namespace/run/ordinal before await,
|
|
4
|
+
* captures at actual execute, then finalizes against the authorized served value.
|
|
5
|
+
*/
|
|
6
|
+
import { decodePresentIdentityField, encodeIdentityField } from '../../memory/identity/encode.js';
|
|
7
|
+
import { copyJson } from '../../lib/boundedJson.js';
|
|
8
|
+
import { canonicalJson } from '../../lib/canonicalJson.js';
|
|
9
|
+
import { readSemantics, semanticsForModel, coverageOfSemantics, periodOfSemantics, } from '../../lib/semantics/envelope.js';
|
|
10
|
+
import { claimRowsOf } from '../unsupported-claim/ledger.js';
|
|
11
|
+
import { BINDING_LIMITS, boundedText, executedScope, scopeDeclarationOf } from './scope.js';
|
|
12
|
+
export function resultIdentityOf(identity) {
|
|
13
|
+
if (!boundedText(identity.namespace) ||
|
|
14
|
+
!boundedText(identity.runId) ||
|
|
15
|
+
!Number.isSafeInteger(identity.ordinal) ||
|
|
16
|
+
identity.ordinal < 1)
|
|
17
|
+
throw new Error('Invalid runtime result identity.');
|
|
18
|
+
return `claim-result/${encodeIdentityField(identity.namespace)}/${encodeIdentityField(identity.runId)}/${identity.ordinal}`;
|
|
19
|
+
}
|
|
20
|
+
/** Decode only canonical runtime result occurrences; no lookup or authority is inferred. */
|
|
21
|
+
export function readResultIdentity(raw) {
|
|
22
|
+
if (typeof raw !== 'string' || raw.length > BINDING_LIMITS.resultIdText)
|
|
23
|
+
throw new TypeError('Invalid saved result identity.');
|
|
24
|
+
const parts = raw.split('/');
|
|
25
|
+
if (parts.length !== 4 || parts[0] !== 'claim-result')
|
|
26
|
+
throw new TypeError('Invalid saved result identity.');
|
|
27
|
+
const identity = Object.freeze({
|
|
28
|
+
namespace: decodePresentIdentityField(parts[1]),
|
|
29
|
+
runId: decodePresentIdentityField(parts[2]),
|
|
30
|
+
ordinal: Number(parts[3]),
|
|
31
|
+
});
|
|
32
|
+
if (resultIdentityOf(identity) !== raw)
|
|
33
|
+
throw new TypeError('Noncanonical saved result identity.');
|
|
34
|
+
return identity;
|
|
35
|
+
}
|
|
36
|
+
/** Capture selected scope now; a later mutation of args cannot change it. */
|
|
37
|
+
export function captureDispatch(identity, tool, executedArgs, declaration) {
|
|
38
|
+
declaration = scopeDeclarationOf(declaration);
|
|
39
|
+
const id = resultIdentityOf(identity);
|
|
40
|
+
if (!boundedText(tool.toolName) ||
|
|
41
|
+
!boundedText(tool.toolCallId) ||
|
|
42
|
+
!Number.isSafeInteger(tool.iteration) ||
|
|
43
|
+
tool.iteration < 0)
|
|
44
|
+
throw new Error('Invalid tool identity.');
|
|
45
|
+
const common = {
|
|
46
|
+
identity: { ...identity },
|
|
47
|
+
id,
|
|
48
|
+
toolName: tool.toolName,
|
|
49
|
+
toolCallId: tool.toolCallId,
|
|
50
|
+
iteration: tool.iteration,
|
|
51
|
+
scopeDeclaration: { id: declaration.id, version: declaration.version },
|
|
52
|
+
...(declaration.periodDimension !== undefined && {
|
|
53
|
+
periodDimension: declaration.periodDimension,
|
|
54
|
+
}),
|
|
55
|
+
};
|
|
56
|
+
try {
|
|
57
|
+
return copyJson({ ...common, scope: executedScope(executedArgs, declaration) }, BINDING_LIMITS.scopeBytes * 2, true);
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
return copyJson({ ...common, unavailable: 'missing-scope' }, BINDING_LIMITS.scopeBytes * 2, true);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
/** Preserve the returned reading before any async result rule can mutate it. */
|
|
64
|
+
export function captureReturnedEvidence(dispatch, original) {
|
|
65
|
+
try {
|
|
66
|
+
const semantics = readSemantics(copyJson(original, BINDING_LIMITS.resultBytes, true));
|
|
67
|
+
if (semantics === undefined)
|
|
68
|
+
throw new Error('No recognized evidence.');
|
|
69
|
+
return Object.freeze({ resultId: dispatch.id, semantics });
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
return Object.freeze({ resultId: dispatch.id, unavailable: 'invalid-evidence' });
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* returned is the return-time copy from that invocation. served is
|
|
77
|
+
* the final model-facing payload AFTER all governance, placement and caps.
|
|
78
|
+
* Visibility is a trusted adapter decision; equality alone grants no access.
|
|
79
|
+
* Rewrites need a future explicit association, and are unavailable here.
|
|
80
|
+
*/
|
|
81
|
+
export function finalizeEvidence(dispatch, returned, served, access) {
|
|
82
|
+
const unavailable = (reason) => copyJson({
|
|
83
|
+
identity: dispatch.identity,
|
|
84
|
+
id: dispatch.id,
|
|
85
|
+
toolName: dispatch.toolName,
|
|
86
|
+
toolCallId: dispatch.toolCallId,
|
|
87
|
+
iteration: dispatch.iteration,
|
|
88
|
+
scopeDeclaration: dispatch.scopeDeclaration,
|
|
89
|
+
unavailable: reason,
|
|
90
|
+
}, BINDING_LIMITS.scopeBytes * 2, true);
|
|
91
|
+
if (dispatch.id !== resultIdentityOf(dispatch.identity))
|
|
92
|
+
return unavailable('invalid-evidence');
|
|
93
|
+
if (access.completed !== true)
|
|
94
|
+
return unavailable('incomplete-result');
|
|
95
|
+
if (access.resultVisible !== true || access.scopeVisible !== true)
|
|
96
|
+
return unavailable('withheld-evidence');
|
|
97
|
+
if (dispatch.unavailable !== undefined)
|
|
98
|
+
return unavailable(dispatch.unavailable);
|
|
99
|
+
if (returned.resultId !== dispatch.id)
|
|
100
|
+
return unavailable('unassociated-result');
|
|
101
|
+
if (returned.unavailable !== undefined)
|
|
102
|
+
return unavailable(returned.unavailable);
|
|
103
|
+
try {
|
|
104
|
+
const raw = copyJson(returned.semantics, BINDING_LIMITS.resultBytes, true);
|
|
105
|
+
const semantics = readSemantics(raw);
|
|
106
|
+
if (semantics === undefined)
|
|
107
|
+
return unavailable('invalid-evidence');
|
|
108
|
+
const model = typeof served === 'string'
|
|
109
|
+
? JSON.parse(served.length <= BINDING_LIMITS.resultBytes ? served : '')
|
|
110
|
+
: served;
|
|
111
|
+
const allowed = copyJson(model, BINDING_LIMITS.resultBytes, true);
|
|
112
|
+
const projection = copyJson(semanticsForModel(semantics), BINDING_LIMITS.resultBytes, true);
|
|
113
|
+
if (canonicalJson(allowed) !== canonicalJson(projection))
|
|
114
|
+
return unavailable('unassociated-result');
|
|
115
|
+
const period = periodOfSemantics(semantics);
|
|
116
|
+
return copyJson({
|
|
117
|
+
...dispatch,
|
|
118
|
+
facts: claimRowsOf(semantics, {
|
|
119
|
+
toolName: dispatch.toolName,
|
|
120
|
+
toolCallId: dispatch.toolCallId,
|
|
121
|
+
iteration: dispatch.iteration,
|
|
122
|
+
}),
|
|
123
|
+
...((semantics.coverage !== undefined || period !== undefined) && {
|
|
124
|
+
coverage: coverageOfSemantics(semantics),
|
|
125
|
+
}),
|
|
126
|
+
...(period !== undefined && { period }),
|
|
127
|
+
}, BINDING_LIMITS.resultBytes, true);
|
|
128
|
+
}
|
|
129
|
+
catch {
|
|
130
|
+
return unavailable('invalid-evidence');
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
/** Freeze the caller's completed evidence universe at the declaration moment. */
|
|
134
|
+
export function evidenceSnapshot(namespace, verifiedRunIds, results) {
|
|
135
|
+
if (!boundedText(namespace) ||
|
|
136
|
+
verifiedRunIds.length > BINDING_LIMITS.results ||
|
|
137
|
+
!verifiedRunIds.every(boundedText) ||
|
|
138
|
+
new Set(verifiedRunIds).size !== verifiedRunIds.length ||
|
|
139
|
+
results.length > BINDING_LIMITS.results)
|
|
140
|
+
throw new Error('Invalid evidence snapshot boundary.');
|
|
141
|
+
return copyJson({ version: 1, namespace, runIds: verifiedRunIds, results }, BINDING_LIMITS.snapshotBytes, true);
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=capture.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capture.js","sourceRoot":"","sources":["../../../../src/integrity/claim-binding/capture.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { DeclaredPeriod } from '../../core/agent/coverage/period.js';
|
|
2
|
+
import type { ScopeDeclaration } from './types.js';
|
|
3
|
+
export declare const BINDING_LIMITS: Readonly<{
|
|
4
|
+
text: 512;
|
|
5
|
+
resultIdText: 3104;
|
|
6
|
+
dimensions: 16;
|
|
7
|
+
path: 16;
|
|
8
|
+
scopeBytes: 8192;
|
|
9
|
+
resultBytes: number;
|
|
10
|
+
snapshotBytes: number;
|
|
11
|
+
results: 256;
|
|
12
|
+
}>;
|
|
13
|
+
export declare function boundedText(value: unknown): value is string;
|
|
14
|
+
export declare function boundedResultId(value: unknown): value is string;
|
|
15
|
+
/** Shallow descriptor-only admission for authored arrays containing callbacks. */
|
|
16
|
+
export declare function ownConfigArray(value: unknown, maximum: number): readonly unknown[];
|
|
17
|
+
/** Inspect authored configuration without evaluating getters or inherited fields. */
|
|
18
|
+
export declare function scopeDeclarationOf(raw: unknown): ScopeDeclaration;
|
|
19
|
+
export declare function executedScope(args: unknown, declaration: ScopeDeclaration): Readonly<Record<string, unknown>>;
|
|
20
|
+
/** Exact declared dimensions; no inferred subset, defaults or currency conversion. */
|
|
21
|
+
export declare function scopesMatch(evidence: Readonly<Record<string, unknown>>, intended: unknown): boolean;
|
|
22
|
+
/** The existing period/instant owners decide validity and temporal equivalence. */
|
|
23
|
+
export declare function queriedPeriodMatches(scopeValue: unknown, period: DeclaredPeriod): boolean;
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
/** Authored scope projection over the arguments actually delivered to execute. */
|
|
2
|
+
import { copyJson, ownData } from '../../lib/boundedJson.js';
|
|
3
|
+
import { canonicalJson } from '../../lib/canonicalJson.js';
|
|
4
|
+
import { compareInstants, instantOf } from '../../core/time/instant.js';
|
|
5
|
+
import { periodProblem } from '../../core/agent/coverage/period.js';
|
|
6
|
+
export const BINDING_LIMITS = Object.freeze({
|
|
7
|
+
text: 512,
|
|
8
|
+
resultIdText: 3104,
|
|
9
|
+
dimensions: 16,
|
|
10
|
+
path: 16,
|
|
11
|
+
scopeBytes: 8192,
|
|
12
|
+
resultBytes: 256 * 1024,
|
|
13
|
+
snapshotBytes: 1024 * 1024,
|
|
14
|
+
results: 256,
|
|
15
|
+
});
|
|
16
|
+
export function boundedText(value) {
|
|
17
|
+
return typeof value === 'string' && value.trim() !== '' && value.length <= BINDING_LIMITS.text;
|
|
18
|
+
}
|
|
19
|
+
export function boundedResultId(value) {
|
|
20
|
+
return (typeof value === 'string' &&
|
|
21
|
+
value.startsWith('claim-result/') &&
|
|
22
|
+
value.length <= BINDING_LIMITS.resultIdText);
|
|
23
|
+
}
|
|
24
|
+
/** Shallow descriptor-only admission for authored arrays containing callbacks. */
|
|
25
|
+
export function ownConfigArray(value, maximum) {
|
|
26
|
+
if (!Array.isArray(value) || Object.getPrototypeOf(value) !== Array.prototype)
|
|
27
|
+
throw new Error('Expected a plain configuration array.');
|
|
28
|
+
const length = Object.getOwnPropertyDescriptor(value, 'length')?.value;
|
|
29
|
+
if (typeof length !== 'number' ||
|
|
30
|
+
!Number.isSafeInteger(length) ||
|
|
31
|
+
length > maximum ||
|
|
32
|
+
Reflect.ownKeys(value).length !== length + 1)
|
|
33
|
+
throw new Error('Invalid configuration array.');
|
|
34
|
+
const items = [];
|
|
35
|
+
for (let index = 0; index < length; index++) {
|
|
36
|
+
const descriptor = Object.getOwnPropertyDescriptor(value, String(index));
|
|
37
|
+
if (!descriptor?.enumerable || !('value' in descriptor))
|
|
38
|
+
throw new Error('Expected dense configuration data.');
|
|
39
|
+
items.push(descriptor.value);
|
|
40
|
+
}
|
|
41
|
+
return Object.freeze(items);
|
|
42
|
+
}
|
|
43
|
+
/** Inspect authored configuration without evaluating getters or inherited fields. */
|
|
44
|
+
export function scopeDeclarationOf(raw) {
|
|
45
|
+
const source = ownData(raw, ['id', 'version', 'dimensions', 'periodDimension']);
|
|
46
|
+
const sourceDimensions = ownConfigArray(source.dimensions, BINDING_LIMITS.dimensions);
|
|
47
|
+
if (!boundedText(source.id) || !boundedText(source.version) || sourceDimensions.length === 0)
|
|
48
|
+
throw new Error('Invalid scope declaration.');
|
|
49
|
+
const names = new Set();
|
|
50
|
+
const dimensions = sourceDimensions.map((rawDimension) => {
|
|
51
|
+
const dimension = ownData(rawDimension, ['name', 'argumentPath', 'default', 'normalize']);
|
|
52
|
+
const path = copyJson(dimension.argumentPath, BINDING_LIMITS.scopeBytes, true);
|
|
53
|
+
if (!boundedText(dimension.name) ||
|
|
54
|
+
names.has(dimension.name) ||
|
|
55
|
+
!Array.isArray(path) ||
|
|
56
|
+
path.length === 0 ||
|
|
57
|
+
path.length > BINDING_LIMITS.path ||
|
|
58
|
+
!path.every(boundedText) ||
|
|
59
|
+
(Object.hasOwn(dimension, 'normalize') && typeof dimension.normalize !== 'function'))
|
|
60
|
+
throw new Error('Invalid scope dimension.');
|
|
61
|
+
names.add(dimension.name);
|
|
62
|
+
return Object.freeze({
|
|
63
|
+
name: dimension.name,
|
|
64
|
+
argumentPath: path,
|
|
65
|
+
...(Object.hasOwn(dimension, 'default') && {
|
|
66
|
+
default: copyJson(dimension.default, BINDING_LIMITS.scopeBytes, true),
|
|
67
|
+
}),
|
|
68
|
+
...(typeof dimension.normalize === 'function' && {
|
|
69
|
+
normalize: dimension.normalize,
|
|
70
|
+
}),
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
if (Object.hasOwn(source, 'periodDimension') &&
|
|
74
|
+
(!boundedText(source.periodDimension) || !names.has(source.periodDimension)))
|
|
75
|
+
throw new Error('Invalid period dimension.');
|
|
76
|
+
return Object.freeze({
|
|
77
|
+
id: source.id,
|
|
78
|
+
version: source.version,
|
|
79
|
+
dimensions: Object.freeze(dimensions),
|
|
80
|
+
...(typeof source.periodDimension === 'string' && { periodDimension: source.periodDimension }),
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
/** Own data properties only: inherited names and accessors supply no scope. */
|
|
84
|
+
function argumentAt(args, path) {
|
|
85
|
+
if (path.length === 0 || path.length > BINDING_LIMITS.path || !path.every(boundedText))
|
|
86
|
+
throw new Error('Invalid scope path.');
|
|
87
|
+
let cursor = args;
|
|
88
|
+
for (const key of path) {
|
|
89
|
+
if (cursor === null || typeof cursor !== 'object')
|
|
90
|
+
return undefined;
|
|
91
|
+
const descriptor = Object.getOwnPropertyDescriptor(cursor, key);
|
|
92
|
+
if (descriptor === undefined) {
|
|
93
|
+
if (key in cursor)
|
|
94
|
+
throw new Error('Inherited scope is not executed own-data.');
|
|
95
|
+
return undefined;
|
|
96
|
+
}
|
|
97
|
+
if (!descriptor.enumerable || !('value' in descriptor))
|
|
98
|
+
throw new Error('Scope requires own data.');
|
|
99
|
+
cursor = descriptor.value;
|
|
100
|
+
}
|
|
101
|
+
return cursor;
|
|
102
|
+
}
|
|
103
|
+
export function executedScope(args, declaration) {
|
|
104
|
+
declaration = scopeDeclarationOf(declaration);
|
|
105
|
+
const scope = {};
|
|
106
|
+
for (const dimension of declaration.dimensions) {
|
|
107
|
+
if (!boundedText(dimension.name) || Object.hasOwn(scope, dimension.name))
|
|
108
|
+
throw new Error('Invalid scope dimension.');
|
|
109
|
+
let value = argumentAt(args, dimension.argumentPath);
|
|
110
|
+
if (value === undefined && Object.hasOwn(dimension, 'default'))
|
|
111
|
+
value = dimension.default;
|
|
112
|
+
if (value === undefined)
|
|
113
|
+
throw new Error('Required scope is missing.');
|
|
114
|
+
// Detach BEFORE invoking an authored normalizer: it cannot mutate dispatch.
|
|
115
|
+
value = copyJson(value, BINDING_LIMITS.scopeBytes, true);
|
|
116
|
+
if (dimension.normalize !== undefined)
|
|
117
|
+
value = dimension.normalize(value);
|
|
118
|
+
Object.defineProperty(scope, dimension.name, {
|
|
119
|
+
value: copyJson(value, BINDING_LIMITS.scopeBytes, true),
|
|
120
|
+
enumerable: true,
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
if (declaration.periodDimension !== undefined &&
|
|
124
|
+
!Object.hasOwn(scope, declaration.periodDimension))
|
|
125
|
+
throw new Error('The period dimension is missing.');
|
|
126
|
+
return copyJson(scope, BINDING_LIMITS.scopeBytes, true);
|
|
127
|
+
}
|
|
128
|
+
/** Exact declared dimensions; no inferred subset, defaults or currency conversion. */
|
|
129
|
+
export function scopesMatch(evidence, intended) {
|
|
130
|
+
const expected = ownData(copyJson(intended, BINDING_LIMITS.scopeBytes, true));
|
|
131
|
+
return canonicalJson(evidence) === canonicalJson(expected);
|
|
132
|
+
}
|
|
133
|
+
/** The existing period/instant owners decide validity and temporal equivalence. */
|
|
134
|
+
export function queriedPeriodMatches(scopeValue, period) {
|
|
135
|
+
const query = ownData(scopeValue, ['from', 'to']);
|
|
136
|
+
if (periodProblem({ queried: query, held: 'unknown' }, 'camel') !== undefined)
|
|
137
|
+
return false;
|
|
138
|
+
const from = instantOf(query.from, 'lenient');
|
|
139
|
+
const to = instantOf(query.to, 'lenient');
|
|
140
|
+
const actualFrom = instantOf(period.queried.from, 'lenient');
|
|
141
|
+
const actualTo = instantOf(period.queried.to, 'lenient');
|
|
142
|
+
return (from !== undefined &&
|
|
143
|
+
to !== undefined &&
|
|
144
|
+
actualFrom !== undefined &&
|
|
145
|
+
actualTo !== undefined &&
|
|
146
|
+
compareInstants(from, actualFrom) === 0 &&
|
|
147
|
+
compareInstants(to, actualTo) === 0);
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=scope.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scope.js","sourceRoot":"","sources":["../../../../src/integrity/claim-binding/scope.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AAIpE,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC;IAC1C,IAAI,EAAE,GAAG;IACT,YAAY,EAAE,IAAI;IAClB,UAAU,EAAE,EAAE;IACd,IAAI,EAAE,EAAE;IACR,UAAU,EAAE,IAAI;IAChB,WAAW,EAAE,GAAG,GAAG,IAAI;IACvB,aAAa,EAAE,IAAI,GAAG,IAAI;IAC1B,OAAO,EAAE,GAAG;CACb,CAAC,CAAC;AAEH,MAAM,UAAU,WAAW,CAAC,KAAc;IACxC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,KAAK,CAAC,MAAM,IAAI,cAAc,CAAC,IAAI,CAAC;AACjG,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAc;IAC5C,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,CAAC,UAAU,CAAC,eAAe,CAAC;QACjC,KAAK,CAAC,MAAM,IAAI,cAAc,CAAC,YAAY,CAC5C,CAAC;AACJ,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,cAAc,CAAC,KAAc,EAAE,OAAe;IAC5D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,SAAS;QAC3E,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC3D,MAAM,MAAM,GAAG,MAAM,CAAC,wBAAwB,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE,KAAgB,CAAC;IAClF,IACE,OAAO,MAAM,KAAK,QAAQ;QAC1B,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC;QAC7B,MAAM,GAAG,OAAO;QAChB,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,MAAM,GAAG,CAAC;QAE5C,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAClD,MAAM,KAAK,GAAc,EAAE,CAAC;IAC5B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;QAC5C,MAAM,UAAU,GAAG,MAAM,CAAC,wBAAwB,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACzE,IAAI,CAAC,UAAU,EAAE,UAAU,IAAI,CAAC,CAAC,OAAO,IAAI,UAAU,CAAC;YACrD,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACxD,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC9B,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,kBAAkB,CAAC,GAAY;IAC7C,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAChF,MAAM,gBAAgB,GAAG,cAAc,CAAC,MAAM,CAAC,UAAU,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC;IACtF,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC;QAC1F,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAChD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,MAAM,UAAU,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,YAAY,EAAkB,EAAE;QACvE,MAAM,SAAS,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC;QAC1F,MAAM,IAAI,GAAG,QAAQ,CAAC,SAAS,CAAC,YAAY,EAAE,cAAc,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QAC/E,IACE,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC;YAC5B,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC;YACzB,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;YACpB,IAAI,CAAC,MAAM,KAAK,CAAC;YACjB,IAAI,CAAC,MAAM,GAAG,cAAc,CAAC,IAAI;YACjC,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;YACxB,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,IAAI,OAAO,SAAS,CAAC,SAAS,KAAK,UAAU,CAAC;YAEpF,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC9C,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC1B,OAAO,MAAM,CAAC,MAAM,CAAC;YACnB,IAAI,EAAE,SAAS,CAAC,IAAI;YACpB,YAAY,EAAE,IAAyB;YACvC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,IAAI;gBACzC,OAAO,EAAE,QAAQ,CAAC,SAAS,CAAC,OAAO,EAAE,cAAc,CAAC,UAAU,EAAE,IAAI,CAAC;aACtE,CAAC;YACF,GAAG,CAAC,OAAO,SAAS,CAAC,SAAS,KAAK,UAAU,IAAI;gBAC/C,SAAS,EAAE,SAAS,CAAC,SAAqD;aAC3E,CAAC;SACH,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IACH,IACE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC;QACxC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;QAE5E,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAC/C,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC;QACrC,GAAG,CAAC,OAAO,MAAM,CAAC,eAAe,KAAK,QAAQ,IAAI,EAAE,eAAe,EAAE,MAAM,CAAC,eAAe,EAAE,CAAC;KAC/F,CAAC,CAAC;AACL,CAAC;AAED,+EAA+E;AAC/E,SAAS,UAAU,CAAC,IAAa,EAAE,IAAuB;IACxD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,cAAc,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;QACpF,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACzC,IAAI,MAAM,GAAG,IAAI,CAAC;IAClB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,MAAM,KAAK,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ;YAAE,OAAO,SAAS,CAAC;QACpE,MAAM,UAAU,GAAG,MAAM,CAAC,wBAAwB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAChE,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;YAC7B,IAAI,GAAG,IAAI,MAAM;gBAAE,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;YAChF,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,UAAU,IAAI,CAAC,CAAC,OAAO,IAAI,UAAU,CAAC;YACpD,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC9C,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC;IAC5B,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,IAAa,EACb,WAA6B;IAE7B,WAAW,GAAG,kBAAkB,CAAC,WAAW,CAAC,CAAC;IAC9C,MAAM,KAAK,GAA4B,EAAE,CAAC;IAC1C,KAAK,MAAM,SAAS,IAAI,WAAW,CAAC,UAAU,EAAE,CAAC;QAC/C,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,CAAC;YACtE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC9C,IAAI,KAAK,GAAG,UAAU,CAAC,IAAI,EAAE,SAAS,CAAC,YAAY,CAAC,CAAC;QACrD,IAAI,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC;YAAE,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC;QAC1F,IAAI,KAAK,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QACvE,4EAA4E;QAC5E,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QACzD,IAAI,SAAS,CAAC,SAAS,KAAK,SAAS;YAAE,KAAK,GAAG,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC1E,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,EAAE;YAC3C,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC,UAAU,EAAE,IAAI,CAAC;YACvD,UAAU,EAAE,IAAI;SACjB,CAAC,CAAC;IACL,CAAC;IACD,IACE,WAAW,CAAC,eAAe,KAAK,SAAS;QACzC,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC,eAAe,CAAC;QAElD,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IACtD,OAAO,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC,UAAU,EAAE,IAAI,CAAsC,CAAC;AAC/F,CAAC;AAED,sFAAsF;AACtF,MAAM,UAAU,WAAW,CACzB,QAA2C,EAC3C,QAAiB;IAEjB,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC;IAC9E,OAAO,aAAa,CAAC,QAAQ,CAAC,KAAK,aAAa,CAAC,QAAQ,CAAC,CAAC;AAC7D,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,oBAAoB,CAAC,UAAmB,EAAE,MAAsB;IAC9E,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;IAClD,IAAI,aAAa,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,OAAO,CAAC,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAC5F,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,IAAc,EAAE,SAAS,CAAC,CAAC;IACxD,MAAM,EAAE,GAAG,SAAS,CAAC,KAAK,CAAC,EAAY,EAAE,SAAS,CAAC,CAAC;IACpD,MAAM,UAAU,GAAG,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAC7D,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;IACzD,OAAO,CACL,IAAI,KAAK,SAAS;QAClB,EAAE,KAAK,SAAS;QAChB,UAAU,KAAK,SAAS;QACxB,QAAQ,KAAK,SAAS;QACtB,eAAe,CAAC,IAAI,EAAE,UAAU,CAAC,KAAK,CAAC;QACvC,eAAe,CAAC,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,CACpC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/** Internal evidence-binding ports. No public configuration or recorded row. */
|
|
2
|
+
import type { Assertion } from '../assertion/types.js';
|
|
3
|
+
import type { ClaimLedgerRow } from '../unsupported-claim/check.js';
|
|
4
|
+
import type { Coverage } from '../../core/agent/coverage/types.js';
|
|
5
|
+
import type { DeclaredPeriod } from '../../core/agent/coverage/period.js';
|
|
6
|
+
import type { ToolSemantics } from '../../lib/semantics/types.js';
|
|
7
|
+
export interface ScopeDimension {
|
|
8
|
+
readonly name: string;
|
|
9
|
+
readonly argumentPath: readonly string[];
|
|
10
|
+
/** An explicitly authored tool default; never inferred from a schema. */
|
|
11
|
+
readonly default?: unknown;
|
|
12
|
+
/** Author-owned normalization, coupled to the declaration version. */
|
|
13
|
+
readonly normalize?: (value: unknown) => unknown;
|
|
14
|
+
}
|
|
15
|
+
export interface ScopeDeclaration {
|
|
16
|
+
readonly id: string;
|
|
17
|
+
readonly version: string;
|
|
18
|
+
readonly dimensions: readonly ScopeDimension[];
|
|
19
|
+
/** Dimension holding the executed absolute { from, to } read interval. */
|
|
20
|
+
readonly periodDimension?: string;
|
|
21
|
+
}
|
|
22
|
+
export interface ResultIdentity {
|
|
23
|
+
/** Trusted unique recording namespace, retained by a later replay adapter. */
|
|
24
|
+
readonly namespace: string;
|
|
25
|
+
readonly runId: string;
|
|
26
|
+
/** Runtime reserves this before awaiting dispatch; provider IDs are separate. */
|
|
27
|
+
readonly ordinal: number;
|
|
28
|
+
}
|
|
29
|
+
export declare const BINDING_REASONS: readonly ["invalid-claim", "unknown-rule", "invalid-rule", "missing-result", "ambiguous-result", "foreign-result", "incomplete-result", "withheld-evidence", "unassociated-result", "invalid-evidence", "missing-scope", "scope-mismatch", "scope-version-mismatch", "missing-fact", "ambiguous-fact", "unasserted-value", "coverage-undeclared", "coverage-partial", "coverage-unknown", "coverage-stale"];
|
|
30
|
+
export type BindingReason = (typeof BINDING_REASONS)[number];
|
|
31
|
+
export interface CapturedDispatch {
|
|
32
|
+
readonly identity: ResultIdentity;
|
|
33
|
+
readonly id: string;
|
|
34
|
+
readonly toolName: string;
|
|
35
|
+
readonly toolCallId: string;
|
|
36
|
+
readonly iteration: number;
|
|
37
|
+
readonly scopeDeclaration: {
|
|
38
|
+
readonly id: string;
|
|
39
|
+
readonly version: string;
|
|
40
|
+
};
|
|
41
|
+
readonly scope?: Readonly<Record<string, unknown>>;
|
|
42
|
+
readonly periodDimension?: string;
|
|
43
|
+
readonly unavailable?: BindingReason;
|
|
44
|
+
}
|
|
45
|
+
export interface EvidenceBoundary {
|
|
46
|
+
readonly scope: Readonly<Record<string, unknown>>;
|
|
47
|
+
readonly coverage: Coverage;
|
|
48
|
+
readonly period?: DeclaredPeriod;
|
|
49
|
+
}
|
|
50
|
+
export interface ResultEvidence extends CapturedDispatch {
|
|
51
|
+
/** No raw result, arguments or facts survive an unavailable association. */
|
|
52
|
+
readonly facts?: readonly ClaimLedgerRow[];
|
|
53
|
+
readonly coverage?: Coverage;
|
|
54
|
+
readonly period?: DeclaredPeriod;
|
|
55
|
+
}
|
|
56
|
+
/** Private return-time copy, captured before awaiting result governance. */
|
|
57
|
+
export interface ReturnedEvidence {
|
|
58
|
+
readonly resultId: string;
|
|
59
|
+
readonly semantics?: ToolSemantics;
|
|
60
|
+
readonly unavailable?: 'invalid-evidence';
|
|
61
|
+
}
|
|
62
|
+
export interface EvidenceSnapshot {
|
|
63
|
+
readonly version: 1;
|
|
64
|
+
readonly namespace: string;
|
|
65
|
+
/** Runtime-owned verified lineage; never supplied by a model declaration. */
|
|
66
|
+
readonly runIds: readonly string[];
|
|
67
|
+
readonly results: readonly ResultEvidence[];
|
|
68
|
+
}
|
|
69
|
+
export interface ClaimBindingRule {
|
|
70
|
+
readonly id: string;
|
|
71
|
+
readonly version: string;
|
|
72
|
+
readonly toolName: string;
|
|
73
|
+
readonly scopeDeclaration: ScopeDeclaration;
|
|
74
|
+
readonly fact: {
|
|
75
|
+
readonly entity: string | {
|
|
76
|
+
readonly scopeDimension: string;
|
|
77
|
+
};
|
|
78
|
+
readonly field: string;
|
|
79
|
+
};
|
|
80
|
+
/** Completeness must be explicitly checked by the author, never from prose. */
|
|
81
|
+
readonly coverage?: (boundary: EvidenceBoundary) => 'complete' | 'partial' | 'unknown' | 'stale';
|
|
82
|
+
}
|
|
83
|
+
export type ClaimBinding = {
|
|
84
|
+
readonly kind: 'unverified';
|
|
85
|
+
readonly reason: BindingReason;
|
|
86
|
+
} | {
|
|
87
|
+
/** Binding means eligible comparator inputs, not agreement or a badge. */
|
|
88
|
+
readonly kind: 'bound';
|
|
89
|
+
readonly resultId: string;
|
|
90
|
+
readonly rule: {
|
|
91
|
+
readonly id: string;
|
|
92
|
+
readonly version: string;
|
|
93
|
+
};
|
|
94
|
+
readonly scope: Readonly<Record<string, unknown>>;
|
|
95
|
+
readonly coverage: Coverage;
|
|
96
|
+
readonly period?: DeclaredPeriod;
|
|
97
|
+
readonly evidence: Assertion;
|
|
98
|
+
readonly claim: Assertion;
|
|
99
|
+
};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export const BINDING_REASONS = Object.freeze([
|
|
2
|
+
'invalid-claim',
|
|
3
|
+
'unknown-rule',
|
|
4
|
+
'invalid-rule',
|
|
5
|
+
'missing-result',
|
|
6
|
+
'ambiguous-result',
|
|
7
|
+
'foreign-result',
|
|
8
|
+
'incomplete-result',
|
|
9
|
+
'withheld-evidence',
|
|
10
|
+
'unassociated-result',
|
|
11
|
+
'invalid-evidence',
|
|
12
|
+
'missing-scope',
|
|
13
|
+
'scope-mismatch',
|
|
14
|
+
'scope-version-mismatch',
|
|
15
|
+
'missing-fact',
|
|
16
|
+
'ambiguous-fact',
|
|
17
|
+
'unasserted-value',
|
|
18
|
+
'coverage-undeclared',
|
|
19
|
+
'coverage-partial',
|
|
20
|
+
'coverage-unknown',
|
|
21
|
+
'coverage-stale',
|
|
22
|
+
]);
|
|
23
|
+
//# sourceMappingURL=types.js.map
|