/** * artifacts/inMemoryArtifacts — the claim-check store in a Map. * * For tests, local development, and single-process agents whose artifacts may * die with the process. Exactly as durable as the process — which is the * point of the port: swap the one argument for `fileArtifacts` or * `sqliteArtifacts` and nothing else changes. * * ── Bounded, and counting its drops (the innerRunRecords laws) ───────────── * A retained payload is retained memory, and an agent minting a dataset per * turn for a week would otherwise pin every one of them — the failure would * look like a leak rather than like a feature. So this adapter is ALWAYS * bounded: it has a default byte budget and row budget per scope, an explicit * retention only replaces those dials, and there is deliberately no spelling * for "unbounded" here — a memory store without a ceiling is a leak wearing * configuration. When the budget forces an eviction the least-recently-USED * artifact leaves first (reading refreshes recency, so the dataset a chart is * actively rendered from is not the next casualty), every eviction is * reported by the `put` that caused it, and `dropped` COUNTS them — "we kept * the last 200 of 340" is an answer a debugging session can act on; a * silently missing ref is not. */ import { type ArtifactRetention } from './retention.js'; import { type ArtifactStore } from './types.js'; /** The always-on bounds. Override dials via `retention`; there is no "off". */ export declare const DEFAULT_IN_MEMORY_ARTIFACT_RETENTION: Required>; /** Options for {@link inMemoryArtifacts}. */ export interface InMemoryArtifactsOptions { /** * Retention dials. Merged OVER the defaults — name a dial to change it; * the byte and row budgets always exist (see the header for why). */ readonly retention?: ArtifactRetention; /** @internal Test seam — the clock. Defaults to `Date.now`. */ readonly _now?: () => number; } /** The in-memory store, plus the accounting a bounded store owes its owner. */ export interface InMemoryArtifacts extends ArtifactStore { /** Artifacts evicted by the byte/row budgets since construction (TTL expiry * is the calendar doing its job and is not counted here). Non-zero means * "resolve sooner, or raise the budget". */ readonly dropped: number; /** The dials in force, defaults included. */ readonly retention: ArtifactRetention; } /** * A bounded, drop-counting, per-scope-isolated artifact store in process * memory. * * @example * const store = inMemoryArtifacts({ retention: { ttlMs: 15 * 60_000 } }); * const agent = Agent.create({ provider, artifacts: store }); */ export declare function inMemoryArtifacts(options?: InMemoryArtifactsOptions): InMemoryArtifacts;