agentfootprint
Version:
The explainable agent framework — backtrack a wrong answer to the exact context that caused it (evidence, not guesses). Built on footprintjs.
100 lines (99 loc) • 4.21 kB
TypeScript
/** Internal evidence-binding ports. No public configuration or recorded row. */
import type { Assertion } from '../assertion/types.js';
import type { ClaimLedgerRow } from '../unsupported-claim/check.js';
import type { Coverage } from '../../semantics/coverage/types.js';
import type { DeclaredPeriod } from '../../semantics/coverage/period.js';
import type { ToolSemantics } from '../../semantics/types.js';
export interface ScopeDimension {
readonly name: string;
readonly argumentPath: readonly string[];
/** An explicitly authored tool default; never inferred from a schema. */
readonly default?: unknown;
/** Author-owned normalization, coupled to the declaration version. */
readonly normalize?: (value: unknown) => unknown;
}
export interface ScopeDeclaration {
readonly id: string;
readonly version: string;
readonly dimensions: readonly ScopeDimension[];
/** Dimension holding the executed absolute { from, to } read interval. */
readonly periodDimension?: string;
}
export interface ResultIdentity {
/** Trusted unique recording namespace, retained by a later replay adapter. */
readonly namespace: string;
readonly runId: string;
/** Runtime reserves this before awaiting dispatch; provider IDs are separate. */
readonly ordinal: number;
}
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"];
export type BindingReason = (typeof BINDING_REASONS)[number];
export interface CapturedDispatch {
readonly identity: ResultIdentity;
readonly id: string;
readonly toolName: string;
readonly toolCallId: string;
readonly iteration: number;
readonly scopeDeclaration: {
readonly id: string;
readonly version: string;
};
readonly scope?: Readonly<Record<string, unknown>>;
readonly periodDimension?: string;
readonly unavailable?: BindingReason;
}
export interface EvidenceBoundary {
readonly scope: Readonly<Record<string, unknown>>;
readonly coverage: Coverage;
readonly period?: DeclaredPeriod;
}
export interface ResultEvidence extends CapturedDispatch {
/** No raw result, arguments or facts survive an unavailable association. */
readonly facts?: readonly ClaimLedgerRow[];
readonly coverage?: Coverage;
readonly period?: DeclaredPeriod;
}
/** Private return-time copy, captured before awaiting result governance. */
export interface ReturnedEvidence {
readonly resultId: string;
readonly semantics?: ToolSemantics;
readonly unavailable?: 'invalid-evidence';
}
export interface EvidenceSnapshot {
readonly version: 1;
readonly namespace: string;
/** Runtime-owned verified lineage; never supplied by a model declaration. */
readonly runIds: readonly string[];
readonly results: readonly ResultEvidence[];
}
export interface ClaimBindingRule {
readonly id: string;
readonly version: string;
readonly toolName: string;
readonly scopeDeclaration: ScopeDeclaration;
readonly fact: {
readonly entity: string | {
readonly scopeDimension: string;
};
readonly field: string;
};
/** Completeness must be explicitly checked by the author, never from prose. */
readonly coverage?: (boundary: EvidenceBoundary) => 'complete' | 'partial' | 'unknown' | 'stale';
}
export type ClaimBinding = {
readonly kind: 'unverified';
readonly reason: BindingReason;
} | {
/** Binding means eligible comparator inputs, not agreement or a badge. */
readonly kind: 'bound';
readonly resultId: string;
readonly rule: {
readonly id: string;
readonly version: string;
};
readonly scope: Readonly<Record<string, unknown>>;
readonly coverage: Coverage;
readonly period?: DeclaredPeriod;
readonly evidence: Assertion;
readonly claim: Assertion;
};