/** * Config command — scriptable settings surface (routing-table plan, * Ticket 4). * * Presentation-only over the typed key registry in `src/lib/config-store.ts` * (Ticket 3): `resolveConfigKey` / `setConfigValue` / `unsetConfigValue` * own validation and atomic persistence. The dispatcher wires production * helpers; tests inject doubles. * * `get` output is ALWAYS redacted: values pass through `redactSecrets` * against the merged env's credential values, and credential-bearing * field names (e.g. `apiKey`) mask regardless — so a file-stored key is * never printable. `set` refuses credential paths outright at the * registry layer (API keys never ride argv, AGENTS.md). */ import type { CommandResult } from "../command-invocation.js"; import { type FanoutNoticeContext, type ScoutlineConfig } from "../lib/config-store.js"; export interface ConfigGetDependencies { /** Read the current config (production: `readConfig`). */ readonly read: () => Promise; /** Credential values to redact against (production: `configuredSecrets(mergedEnv)`). */ readonly secrets: () => string[]; } export interface ConfigSetDependencies { /** Strict set (production: `setConfigValue`). */ readonly set: (path: string, value: string) => Promise; /** * Success-path notice channel (production: the invocation context's * `notice`, stderr). Used for registry-mandated warnings like the * fan-out cost sentence (search-fanout DESIGN D7) — visible in every * output mode while stdout stays data-only. Optional so presentation * doubles stay minimal. */ readonly notify?: (message: string) => void; /** * Eligibility context (env + provider registry) the fan-out cost * notice needs to name only the routed providers that would actually * bill — the same arm set `resolveFanoutPlan` computes (review fix, * PR #36). Optional: without it the notice falls back to the blanket * sentence instead of naming raw routing entries. */ readonly noticeContext?: FanoutNoticeContext; } export interface ConfigUnsetDependencies { /** Unset (production: `unsetConfigValue`). */ readonly unset: (path: string) => Promise; } /** * `config get [path]`. No path → the full redacted config. With a path * → the redacted value at that path. Unknown paths fail with the valid * roots listed. */ export declare function configGetCommand(path: string | undefined, deps: ConfigGetDependencies): Promise>; /** * `config set `. Strict validation and credential * refusal live in `setConfigValue`; this layer formats the result. */ export declare function configSetCommand(path: string, value: string, deps: ConfigSetDependencies): Promise>; /** * `config unset `. Removal semantics live in `unsetConfigValue`. */ export declare function configUnsetCommand(path: string, deps: ConfigUnsetDependencies): Promise>; export declare const CONFIG_HELP: string; //# sourceMappingURL=config.d.ts.map