import type { SetProviderRequest } from "@agentclientprotocol/sdk"; /** The durable Vertex routing config, shaped for the Claude agent's `providers/set` `_meta` * (claude-agent-acp >= 0.60.0 reads `_meta.claudeCode.vertex.{projectId,region}`). Used to build * the wire request on both the immediate call and every replay. */ export declare function providerVertexMeta(vertex: { projectId: string; region: string; }): Record; /** One recorded `providers/set` — the full replacement configuration for one provider. The * request-scoped `_meta` passthrough is deliberately NOT recorded: it rides the immediate wire * call only, while the intent captures the durable routing config. The `vertex` project/region ARE * durable routing config, not request-scoped: the Claude agent's `vertex` apiType * (claude-agent-acp >= 0.60.0) reads them from `_meta.claudeCode.vertex` and stores them as * provider config, so a replayed `providers/set` that dropped them would be rejected and every * pooled connection would fail to route. They are carried as a typed field (not generic `_meta`) * so the request-scoped-`_meta`-is-not-replayed contract is unchanged. Non-credential; secrets * stay in `headers`. */ export interface ProviderIntent { providerId: SetProviderRequest["providerId"]; apiType: SetProviderRequest["apiType"]; baseUrl: SetProviderRequest["baseUrl"]; /** SECRET gateway headers, replayed verbatim and never surfaced anywhere else. */ headers?: SetProviderRequest["headers"]; /** Durable Vertex project/region — replayed into `_meta.claudeCode.vertex` on every * reconstructed `providers/set`. Present only for `apiType === "vertex"`. */ vertex?: { projectId: string; region: string; }; } /** The runner's single in-memory provider-intent store. Default-OFF by construction: until the * first successful `setProvider`, no entry exists, `isStale` is always false, and replay is a * no-op — byte-identical to the pre-provider baseline. */ export declare class ProviderStore { private readonly byPool; /** Record the full replacement configuration for one provider and advance the generation. The * stored copy is store-owned, so a superseded copy's header values are zeroized (§2.14-style * hygiene) before it is replaced. */ record(poolKey: string, intent: ProviderIntent): void; /** Drop the recorded intent for one provider (after a successful `providers/disable`) — * zeroizing its stored header values — and advance the generation so routed processes recycle. * Removing an unrecorded id still advances — disable is idempotent agent-side and an extra * recycle is harmless. */ remove(poolKey: string, providerId: string): void; /** The recorded intents for one pool key, in insertion order (replay order). */ intentsFor(poolKey: string): ProviderIntent[]; /** The current generation for one pool key; 0 when nothing was ever recorded. */ generation(poolKey: string): number; /** True when a connection stamped at `stamp` no longer reflects the recorded routing. A pool * key with no entry is never stale (the default-OFF baseline). */ isStale(poolKey: string, stamp: number): boolean; } //# sourceMappingURL=provider-store.d.ts.map