import type { ResolvedSkillSelection } from "../types/skill-selection.js"; export interface SelectedSecretBindings { schema: "hasna.skills-secret-bindings.v1"; selection: Pick & { profileId: string; }; consumer: { stationId: string; workspaceDirectory: string; }; /** Exact canonical /v1 authority of the independently configured Secrets client. */ secretsAuthority: string; /** Declared environment name -> vault key. Values are resolved freshly for each run. */ bindings: Record; } export interface SelectedSecretsClient { readonly baseUrl: string; getSecret(query: { key: string; }, init?: RequestInit): Promise<{ key: string; value: string; expires_at?: string | null; }>; } export interface SelectedSecretScope { selection: ResolvedSkillSelection; profileId: string; cwd: string; } export declare function selectedSecretBindingsTemplate(scope: SelectedSecretScope, names: string[], createClient?: () => SelectedSecretsClient): SelectedSecretBindings; /** Runtime controls must not be supplied as credentials, even by a reviewed binding. */ export declare function declaredSecretNames(value: unknown): string[]; /** Reading is bounded and rejects symlinks/devices. Parsing errors never echo file contents. */ export declare function readSelectedSecretBindings(path: string): SelectedSecretBindings; /** Validate every grant before constructing a client or reading any secret. */ export declare function validateSelectedSecretBindings(value: unknown, scope: SelectedSecretScope, names: string[]): SelectedSecretBindings; export declare function resolveSelectedSecrets(bindings: SelectedSecretBindings, createClient?: () => SelectedSecretsClient): Promise>; /** Limit accidental disclosure in child output. This is not a sandbox for hostile code. */ export declare function redactExecutionSecrets(text: string, env: Record): string;