@attest-ai/core 1.0.0-rc.2 → 1.0.0-rc.4

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.
@@ -1,12 +1,12 @@
1
- import { InitializeResult, ProtocolLogger, ProtocolDiagnostic, Trace, Assertion, BatchBudget, EvaluateBatchResult, DriftReport, SimulatePersona, ConversationMessage, SimulateFaultConfig, Step, AssertionResult, Usage, Outcome } from './proto/index.js';
2
- export { AgentId, AssertionId, AssertionSpec, BiasProbe, ConstraintSpec, ContentSpec, ERR_ASSERTION_ERROR, ERR_ENGINE_ERROR, ERR_INVALID_TRACE, ERR_PROVIDER_ERROR, ERR_SESSION_ERROR, ERR_TIMEOUT, EmbeddingSpec, EngineTimeoutError, ErrorData, EvaluateBatchParams, Exchange, FailureClass, GenerateUserMessageParams, GenerateUserMessageResult, Handoff, InitializeParams, JudgeAgreement, JudgeMetadata, LlmJudgeSpec, OTLPConversionError, OUTCOME_FAIL, OUTCOME_PASS, OUTCOME_SKIP, PluginSpec, ProtocolDesyncError, ProtocolDiagnosticBuffer, ProtocolDiagnosticKind, ProtocolError, QueryDriftParams, QueryDriftResult, REASON_BUDGET_EXHAUSTED, REASON_JUDGE_ABSTAINED, REASON_MISSING_EVIDENCE, REASON_PROVIDER_NOT_CONFIGURED, REASON_PROVIDER_UNAVAILABLE, REASON_SHORT_CIRCUITED, REASON_SIMULATION, RPCError, RPCRequest, RPCResponse, STATUS_HARD_FAIL, STATUS_NOT_EVALUATED, STATUS_PASS, STATUS_SOFT_FAIL, STEP_AGENT_CALL, STEP_LLM_CALL, STEP_RETRIEVAL, STEP_TOOL_CALL, SchemaSpec, ShutdownResult, StepError, SubmitPluginResultParams, TYPE_CONSTRAINT, TYPE_CONTENT, TYPE_EMBEDDING, TYPE_LLM_JUDGE, TYPE_PLUGIN, TYPE_SCHEMA, TYPE_TRACE, TYPE_TRACE_TREE, TraceId, TraceMetadata, TraceSpec, TraceTreeSpec, Turn, agentId, assertionId, decodeResponse, encodeRequest, extractId, extractResult, layerForType, previewLine, traceId } from './proto/index.js';
1
+ import { InitializeResult, ProtocolLogger, ProtocolDiagnostic, Trace, Assertion, BatchBudget, BatchContext, EvaluateBatchResult, DriftReport, SimulatePersona, ConversationMessage, SimulateFaultConfig, Step, AssertionResult, Usage, Outcome } from './proto/index.js';
2
+ export { AgentId, AssertionId, AssertionSpec, BiasProbe, ConstraintSpec, ContentSpec, ERR_ASSERTION_ERROR, ERR_ENGINE_ERROR, ERR_INVALID_TRACE, ERR_PROVIDER_ERROR, ERR_SESSION_ERROR, ERR_TIMEOUT, EffectSpec, EmbeddingSpec, EngineTimeoutError, ErrorData, EvaluateBatchParams, Exchange, FailureClass, GenerateUserMessageParams, GenerateUserMessageResult, Handoff, InitializeParams, JudgeAgreement, JudgeMetadata, LlmJudgeSpec, OTLPConversionError, OUTCOME_FAIL, OUTCOME_PASS, OUTCOME_SKIP, PluginSpec, ProtocolDesyncError, ProtocolDiagnosticBuffer, ProtocolDiagnosticKind, ProtocolError, QueryDriftParams, QueryDriftResult, REASON_BUDGET_EXHAUSTED, REASON_JUDGE_ABSTAINED, REASON_MISSING_EVIDENCE, REASON_PROVIDER_NOT_CONFIGURED, REASON_PROVIDER_UNAVAILABLE, REASON_REPLAY_MISS, REASON_SHORT_CIRCUITED, REASON_SIMULATION, RPCError, RPCRequest, RPCResponse, STATUS_HARD_FAIL, STATUS_NOT_EVALUATED, STATUS_PASS, STATUS_SOFT_FAIL, STEP_AGENT_CALL, STEP_LLM_CALL, STEP_RETRIEVAL, STEP_TOOL_CALL, SchemaSpec, ShutdownResult, StepError, SubmitPluginResultParams, TYPE_CONSTRAINT, TYPE_CONTENT, TYPE_EFFECT, TYPE_EMBEDDING, TYPE_LLM_JUDGE, TYPE_PLUGIN, TYPE_SCHEMA, TYPE_TRACE, TYPE_TRACE_TREE, TraceId, TraceMetadata, TraceSpec, TraceTreeSpec, Turn, agentId, assertionId, decodeResponse, encodeRequest, extractId, extractResult, layerForType, previewLine, traceId } from './proto/index.js';
3
3
  import { ChildProcess } from 'node:child_process';
4
4
  import { Interface } from 'node:readline';
5
5
  import { AsyncLocalStorage } from 'node:async_hooks';
6
6
  import { EventEmitter } from 'node:events';
7
7
 
8
- declare const VERSION = "1.0.0-rc.2";
9
- declare const ENGINE_VERSION = "1.0.0-rc.2";
8
+ declare const VERSION = "1.0.0-rc.4";
9
+ declare const ENGINE_VERSION = "1.0.0-rc.4";
10
10
 
11
11
  declare class EngineManager {
12
12
  private enginePath;
@@ -84,6 +84,7 @@ declare class AttestClient {
84
84
  evaluateBatch(trace: Trace, assertions: readonly Assertion[], options?: {
85
85
  timeout?: number;
86
86
  budget?: BatchBudget;
87
+ context?: BatchContext;
87
88
  }): Promise<EvaluateBatchResult>;
88
89
  submitPluginResult(traceId: string, pluginName: string, assertionId: string, status: string, score: number, explanation: string, options?: {
89
90
  timeout?: number;
@@ -248,9 +249,52 @@ declare class TraceTree {
248
249
 
249
250
  type TrajectoryMode = "strict" | "unordered" | "subset" | "superset";
250
251
  type ArgOperator = "eq" | "ne" | "lt" | "lte" | "gt" | "gte" | "in" | "not_in";
252
+ /** A resource's records filtered by exact field values. */
253
+ type Where = Record<string, unknown>;
254
+ /**
255
+ * Effect checks against one world snapshot, from {@link ExpectChain.world}. Each method adds
256
+ * an `effect` assertion (Layer 3) to the parent chain and returns it.
257
+ */
258
+ declare class WorldChecks<C> {
259
+ private readonly _snapshot;
260
+ private readonly _add;
261
+ constructor(snapshot: Record<string, unknown> | null, add: (spec: Record<string, unknown>) => C);
262
+ private addCheck;
263
+ /**
264
+ * Assert how many records of `resource` match `where`. Give `equals`, or `atMost` and/or
265
+ * `atLeast`. A violation reads `effect violated: 2 refunds for O-1042 (expected 1)`.
266
+ *
267
+ * @throws Error when no bound is given, or `equals` is combined with another bound.
268
+ *
269
+ * @example
270
+ * ```ts
271
+ * expect(trace).world(await world.state()).count("refunds", { equals: 1, where: { order_id: "O-1042" } });
272
+ * ```
273
+ */
274
+ count(resource: string, opts: {
275
+ equals?: number;
276
+ atMost?: number;
277
+ atLeast?: number;
278
+ where?: Where;
279
+ }): C;
280
+ /** Assert no two matching records share the same values for field(s) `by`. */
281
+ unique(resource: string, opts: {
282
+ by: string | string[];
283
+ where?: Where;
284
+ }): C;
285
+ /**
286
+ * Assert every matching record carries a distinct value in field `key` (default
287
+ * `idempotency_key`), the record field that stores the idempotency key.
288
+ */
289
+ idempotent(resource: string, opts?: {
290
+ key?: string;
291
+ where?: Where;
292
+ }): C;
293
+ }
251
294
  declare class ExpectChain {
252
295
  private readonly _result;
253
296
  private readonly _assertions;
297
+ private _worldBytes;
254
298
  constructor(result: AgentResult);
255
299
  get assertions(): Assertion[];
256
300
  get trace(): Trace;
@@ -565,6 +609,12 @@ declare class ExpectChain {
565
609
  toolArgSatisfies(tool: string, arg: string, op: ArgOperator, value: unknown, opts?: {
566
610
  soft?: boolean;
567
611
  }): this;
612
+ /**
613
+ * Check effects in a world snapshot:
614
+ * `expect(trace).world(await world.state()).count(...)`. `null` means the test ran without
615
+ * a world helper: the checks are `not_evaluated` (`missing_evidence`).
616
+ */
617
+ world(snapshot: Record<string, unknown> | null): WorldChecks<this>;
568
618
  /**
569
619
  * Assert the output message contains the given string.
570
620
  *
@@ -955,6 +1005,264 @@ declare class ExpectChain {
955
1005
  */
956
1006
  declare function attestExpect(result: AgentResult | Trace): ExpectChain;
957
1007
 
1008
+ /**
1009
+ * Capture: turn a run into a verified fixture, and fixtures into tests.
1010
+ *
1011
+ * `attest capture --name <name> -- <command>` (the engine) records a run's trace and model
1012
+ * exchanges into `tests/attest/fixtures/<name>.attest.json`. This module is the TypeScript
1013
+ * side:
1014
+ *
1015
+ * - `record()` captures the code in a callback in this process.
1016
+ * - `loadFixture()` reads a fixture (`proto/attest/v1/fixture-v1.schema.json`).
1017
+ * - `emitVitest()` writes the fixture's drafted contracts as a Vitest file, using the
1018
+ * `attestExpect()` DSL. `attest capture` and `record()` call it.
1019
+ */
1020
+
1021
+ /** A capture did not produce a fixture, or produced one that is not verified. */
1022
+ declare class CaptureError extends Error {
1023
+ /** The fixture written, when the engine wrote one. */
1024
+ readonly fixture: string | null;
1025
+ constructor(message: string, fixture?: string | null);
1026
+ }
1027
+ /** A drafted contract: an engine assertion spec plus its id and description. */
1028
+ interface Contract {
1029
+ id: string;
1030
+ kind: string;
1031
+ description: string;
1032
+ type: string;
1033
+ spec: Record<string, unknown>;
1034
+ }
1035
+ /** A contract's status on the captured trace. */
1036
+ interface ContractResult {
1037
+ contract: string;
1038
+ status: string;
1039
+ explanation: string;
1040
+ }
1041
+ /** A capture fixture (fixture-v1). */
1042
+ interface Fixture {
1043
+ name: string;
1044
+ source: {
1045
+ kind: string;
1046
+ replay_capable: boolean;
1047
+ command?: string[];
1048
+ exit_code?: number;
1049
+ };
1050
+ trace: Trace;
1051
+ exchanges: Record<string, unknown>[];
1052
+ contracts: Contract[];
1053
+ verification: {
1054
+ verified: boolean;
1055
+ expect_fail: boolean;
1056
+ trace_check: {
1057
+ ok: boolean;
1058
+ errors: number;
1059
+ warnings: number;
1060
+ };
1061
+ results: ContractResult[];
1062
+ expected_failures: string[];
1063
+ };
1064
+ world: Record<string, unknown> | null;
1065
+ }
1066
+ /** Read a capture fixture written by `attest capture` or `record()`. */
1067
+ declare function loadFixture(file: string | URL): Fixture;
1068
+ /** The `ExpectChain` method call that emits `contract`'s spec; throws when there is none. */
1069
+ declare function dslCall(contract: Contract): string;
1070
+ /**
1071
+ * Where the drafted test for a fixture goes: `tests/attest/<name>.test.ts` for
1072
+ * `tests/attest/fixtures/<name>.attest.json`.
1073
+ */
1074
+ declare function testPathFor(fixturePath: string): string;
1075
+ /**
1076
+ * Render a fixture's drafted contracts as a Vitest module.
1077
+ *
1078
+ * A verified fixture becomes a test that enforces every contract with `evaluate`. An
1079
+ * incident reproduction (`expect_fail`) becomes a test that checks, with `inspect`, that
1080
+ * the expected failures still fail and the other contracts still pass; it stays green
1081
+ * while it reproduces the incident.
1082
+ */
1083
+ declare function renderVitest(fixture: Fixture, fixturePath: string, testPath: string): string;
1084
+ /**
1085
+ * Write the drafted Vitest file for a fixture unless it already exists. Returns the path
1086
+ * written, or null when a test file is already there (re-capturing never overwrites an
1087
+ * edited test).
1088
+ */
1089
+ declare function emitVitest(fixturePath: string): string | null;
1090
+ /** A running in-process capture. */
1091
+ interface Capture {
1092
+ name: string;
1093
+ /** The variables `record()` set in `process.env` for the callback. */
1094
+ env: Record<string, string>;
1095
+ }
1096
+ interface RecordOptions {
1097
+ /** Fixture directory (default `tests/attest/fixtures`). */
1098
+ outDir?: string;
1099
+ /** Save an incident reproduction: verified when drafted contracts fail. */
1100
+ expectFail?: boolean;
1101
+ /** Trace `agent_id` (default: the first turn's agent name). */
1102
+ agentId?: string;
1103
+ /** Write the drafted Vitest file (default true). */
1104
+ emitTest?: boolean;
1105
+ /** Engine binary (default: the SDK's engine discovery). */
1106
+ enginePath?: string;
1107
+ /**
1108
+ * A `world.yaml` to host for the callback (the engine's `--world`): its base URL variable
1109
+ * (`PAYMENTS_BASE_URL`) is set for the callback and the world's final state is saved in
1110
+ * the fixture's `world` section.
1111
+ */
1112
+ world?: string;
1113
+ /**
1114
+ * Called after the callback returns and before the fixture is built; pass the tracer
1115
+ * provider's `forceFlush` so batched spans reach the receiver.
1116
+ */
1117
+ flush?: () => unknown;
1118
+ }
1119
+ interface RecordResult<T> {
1120
+ value: T;
1121
+ fixture: string;
1122
+ verified: boolean;
1123
+ testFile: string | null;
1124
+ }
1125
+ /**
1126
+ * Capture `fn` as fixture `<outDir>/<name>.attest.json`.
1127
+ *
1128
+ * Starts `attest-engine capture --serve`, which hosts the recording proxy and the
1129
+ * OTLP/HTTP receiver on 127.0.0.1, and sets `OPENAI_BASE_URL`, `ANTHROPIC_BASE_URL` and
1130
+ * `OTEL_EXPORTER_OTLP_TRACES_ENDPOINT` while `fn` runs. Model clients and the
1131
+ * OpenTelemetry exporter read these when they are constructed, so construct them inside
1132
+ * `fn`, and pass the tracer provider's `forceFlush` as `flush`. Afterwards the variables
1133
+ * are restored and the engine writes the fixture; for a verified fixture with `emitTest`
1134
+ * the drafted Vitest file is written unless one exists. If `fn` throws, the capture is
1135
+ * abandoned and no fixture is written. Captures cannot overlap.
1136
+ *
1137
+ * @throws CaptureError when another capture is running, the engine writes no fixture,
1138
+ * or the fixture is not verified (its drafted contracts did not hold; the fixture is
1139
+ * still written and no test is drafted).
1140
+ */
1141
+ declare function record<T>(name: string, fn: (capture: Capture) => T | Promise<T>, opts?: RecordOptions): Promise<RecordResult<T>>;
1142
+
1143
+ /**
1144
+ * Replay: run the agent's real code with model responses served from a fixture.
1145
+ *
1146
+ * `startReplay(name)` starts `attest-engine replay --serve`, which hosts the replay
1147
+ * proxy on 127.0.0.1, and sets `OPENAI_BASE_URL`, `ANTHROPIC_BASE_URL` and
1148
+ * `OTEL_EXPORTER_OTLP_TRACES_ENDPOINT` until `finish()`. The proxy answers every model
1149
+ * request from `<fixturesDir>/<name>.attest.json` and makes no provider call. A request
1150
+ * that matches no recording is a miss; `finish()` returns the engine's summary.
1151
+ */
1152
+ type ReplayMode = "strict" | "auto";
1153
+ type ReplayModeSetting = ReplayMode | "off";
1154
+ /** One request the agent made during the replay. */
1155
+ interface ReplayRecord {
1156
+ seq: number;
1157
+ provider: string;
1158
+ api: string;
1159
+ outcome: "replayed" | "live" | "miss";
1160
+ exchange?: number;
1161
+ message?: string;
1162
+ }
1163
+ /** What the replay session served, as the engine reports it. */
1164
+ interface ReplaySummary {
1165
+ fixture: string;
1166
+ mode: ReplayMode;
1167
+ replayed: number;
1168
+ live: number;
1169
+ misses: number;
1170
+ unused: number;
1171
+ live_cost_usd: number;
1172
+ unpriced_live_calls: number;
1173
+ records: ReplayRecord[];
1174
+ }
1175
+ /** A strict-mode replay request matched no recording. `message` is the engine's miss message. */
1176
+ declare class ReplayMissError extends Error {
1177
+ readonly summary: ReplaySummary;
1178
+ constructor(message: string, summary: ReplaySummary);
1179
+ }
1180
+ /** An auto-mode replay request matched no recording and no provider key was set: `not_evaluated: replay_miss`. */
1181
+ declare class ReplayNotEvaluatedError extends Error {
1182
+ readonly summary: ReplaySummary;
1183
+ constructor(message: string, summary: ReplaySummary);
1184
+ }
1185
+ declare class ReplayError extends Error {
1186
+ constructor(message: string);
1187
+ }
1188
+ interface ReplayOptions {
1189
+ /** Fixture directory (default `tests/attest/fixtures`). */
1190
+ fixturesDir?: string;
1191
+ /** `strict`, `auto` or `off`; default per `resolveMode`. `off` starts nothing. */
1192
+ mode?: ReplayModeSetting;
1193
+ /**
1194
+ * Pass `--no-live` to the engine: no miss is forwarded live. Default: `ATTEST_EGRESS=block`.
1195
+ * An installed egress guard always implies it.
1196
+ */
1197
+ noLive?: boolean;
1198
+ /** Engine binary (default: the SDK's engine discovery). */
1199
+ enginePath?: string;
1200
+ }
1201
+ interface ReplaySession {
1202
+ readonly name: string;
1203
+ readonly mode: ReplayModeSetting;
1204
+ /** The variables the session set in `process.env`. */
1205
+ readonly env: Record<string, string>;
1206
+ /** The summary once `finish()` has run, else `null`. */
1207
+ readonly summary: ReplaySummary | null;
1208
+ /** Stop the engine, restore the environment and return the summary (`null` for `off`). Idempotent. */
1209
+ finish(): Promise<ReplaySummary | null>;
1210
+ /** The error a miss raises (valid after `finish()`): strict => miss, auto => not evaluated. */
1211
+ error(): ReplayMissError | ReplayNotEvaluatedError | null;
1212
+ /** `finish()`, then throw `error()` if any. */
1213
+ check(): Promise<void>;
1214
+ }
1215
+ /**
1216
+ * Replay mode from `explicit`, else `ATTEST_REPLAY` (`strict|auto|off`), else `strict`
1217
+ * when `CI` is set, else `auto`.
1218
+ */
1219
+ declare function resolveMode(explicit?: ReplayModeSetting, env?: NodeJS.ProcessEnv): ReplayModeSetting;
1220
+ /** Start a replay session for fixture `name`. Sessions cannot overlap. */
1221
+ declare function startReplay(name: string, opts?: ReplayOptions): Promise<ReplaySession>;
1222
+ /** The first miss message of a summary, or `null`. */
1223
+ declare function firstMiss(summary: ReplaySummary): string | null;
1224
+ /** `N live model calls · $X.XX`, plus ` (+N unpriced)`. */
1225
+ declare function liveLine(live: number, costUsd: number, unpriced?: number): string;
1226
+
1227
+ /** A world-v1 snapshot. */
1228
+ type WorldSnapshot = Record<string, unknown>;
1229
+ declare class WorldError extends Error {
1230
+ constructor(message: string);
1231
+ }
1232
+ interface WorldOptions {
1233
+ /** Engine binary (default: the SDK's engine discovery). */
1234
+ enginePath?: string;
1235
+ }
1236
+ interface WorldSession {
1237
+ /** The absolute `world.yaml` path. */
1238
+ readonly path: string;
1239
+ /** The variable the session set in `process.env`: the world's base URL. */
1240
+ readonly env: Record<string, string>;
1241
+ /** The world's base URL. */
1242
+ readonly baseUrl: string;
1243
+ /** The current world-v1 snapshot, read from the running world. */
1244
+ state(): Promise<WorldSnapshot>;
1245
+ /** Stop the world, restore the environment and return the final snapshot. Idempotent. */
1246
+ stop(): Promise<WorldSnapshot>;
1247
+ }
1248
+ /** Host the world defined by `worldFile` until the session stops. Worlds cannot overlap. */
1249
+ declare function startWorld(worldFile: string, opts?: WorldOptions): Promise<WorldSession>;
1250
+
1251
+ declare class EgressBlockedError extends Error {
1252
+ readonly host: string;
1253
+ constructor(host: string);
1254
+ }
1255
+ declare function isProviderHost(host: string): boolean;
1256
+ /** True when `ATTEST_EGRESS=block`. */
1257
+ declare function egressBlockRequested(env?: NodeJS.ProcessEnv): boolean;
1258
+ /**
1259
+ * Install the guard. Installs are counted: the returned function releases only this
1260
+ * install (once), and the guard comes off when every install has been released.
1261
+ */
1262
+ declare function installEgressGuard(): () => void;
1263
+ /** Remove the guard now, whatever the install count. */
1264
+ declare function uninstallEgressGuard(): void;
1265
+
958
1266
  declare class Agent {
959
1267
  readonly name: string;
960
1268
  private readonly fn;
@@ -1286,7 +1594,7 @@ declare class OTelAdapter {
1286
1594
  * @throws RangeError when a parsed export holds a non-finite number.
1287
1595
  * @throws OTLPConversionError when the engine times out, overflows the output buffer or
1288
1596
  * prints no trace.
1289
- * @throws Error from `spawnSync` when the engine cannot start.
1597
+ * @throws Error when the engine cannot start.
1290
1598
  */
1291
1599
  static fromOtlp(otlp: OTLPInput, agentId?: string): Promise<Trace>;
1292
1600
  }
@@ -1355,4 +1663,5 @@ interface TraceAdapter {
1355
1663
  traceFromResponse(response: unknown, options?: Record<string, unknown>): Trace;
1356
1664
  }
1357
1665
 
1358
- export { ADVERSARIAL_USER, Agent, AgentResult, type AgreementResult, AlertDispatcher, type AlertPayload, AnthropicAdapter, Assertion, AssertionResult, AttestClient, type AttestClientOptions, type AttestPlugin, BatchBudget, CONFUSED_USER, COOPERATIVE_USER, ContinuousEvalRunner, ConversationMessage, DriftReport, ENGINE_VERSION, EngineManager, EvaluateBatchResult, ExpectChain, FRIENDLY_USER, GeminiAdapter, InitializeResult, type LabelPair, type LabeledRecord, LangChainAdapter, ManualAdapter, OTelAdapter, OllamaAdapter, OpenAIAdapter, Outcome, PluginRegistry, type PluginResult, ProtocolDiagnostic, ProtocolLogger, type RenderOptions, Sampler, SimulateFaultConfig, SimulatePersona, Step, TIER_1, TIER_2, TIER_3, Trace, type TraceAdapter, TraceBuilder, TraceTree, Usage, VERSION, activeBuilder, addUsage, agent, attestExpect, computeAgreement, config, delegate, executePluginAssertion, formatUsage, getSampleRate, isSimulationMode, loadLabelsCSV, loadLabelsJSONL, parseUsage, promptHash, renderAssertionFailure, renderDiagnostics, renderSummary, requireSimulationCapability, resetConfig, simulationEnvEnabled, sumUsage, tier, usageSummaryLine, zeroUsage };
1666
+ export { ADVERSARIAL_USER, Agent, AgentResult, AlertDispatcher, AnthropicAdapter, Assertion, AssertionResult, AttestClient, BatchBudget, BatchContext, CONFUSED_USER, COOPERATIVE_USER, CaptureError, ContinuousEvalRunner, ConversationMessage, DriftReport, ENGINE_VERSION, EgressBlockedError, EngineManager, EvaluateBatchResult, ExpectChain, FRIENDLY_USER, GeminiAdapter, InitializeResult, LangChainAdapter, ManualAdapter, OTelAdapter, OllamaAdapter, OpenAIAdapter, Outcome, PluginRegistry, ProtocolDiagnostic, ProtocolLogger, ReplayError, ReplayMissError, ReplayNotEvaluatedError, Sampler, SimulateFaultConfig, SimulatePersona, Step, TIER_1, TIER_2, TIER_3, Trace, TraceBuilder, TraceTree, Usage, VERSION, WorldChecks, WorldError, activeBuilder, addUsage, agent, attestExpect, computeAgreement, config, delegate, dslCall, egressBlockRequested, emitVitest, executePluginAssertion, firstMiss, formatUsage, getSampleRate, installEgressGuard, isProviderHost, isSimulationMode, liveLine, loadFixture, loadLabelsCSV, loadLabelsJSONL, parseUsage, promptHash, record, renderAssertionFailure, renderDiagnostics, renderSummary, renderVitest, requireSimulationCapability, resetConfig, resolveMode, simulationEnvEnabled, startReplay, startWorld, sumUsage, testPathFor, tier, uninstallEgressGuard, usageSummaryLine, zeroUsage };
1667
+ export type { AgreementResult, AlertPayload, AttestClientOptions, AttestPlugin, Capture, Contract, ContractResult, Fixture, LabelPair, LabeledRecord, PluginResult, RecordOptions, RecordResult, RenderOptions, ReplayMode, ReplayModeSetting, ReplayOptions, ReplayRecord, ReplaySession, ReplaySummary, TraceAdapter, WorldOptions, WorldSession, WorldSnapshot };