/** * Smart Router CLI subcommands — library-facing command handlers. * * Extension wiring lives in `.pi/extensions/smart-router/commands.ts`; * this module holds reusable subcommand logic for dogfooding and tests. */ import { SessionPinner } from '../domain/pinning/session-pinner.js'; import type { RoutingDatasetRecord, RoutingOutcomeRecord } from '../domain/types/index.js'; import type { StorePort } from '../domain/types/store-port.js'; export declare const UNPIN_SUBCOMMAND: "unpin"; export declare const EXPORT_TELEMETRY_CONTRIB_COMMAND: "export telemetry-contrib"; export declare const TELEMETRY_CONTRIB_VERSION: 1; export declare const TELEMETRY_CONTRIB_SCHEMA_PATH = "specs/001-build-smart-router/contracts/telemetry-contrib.schema.json"; export declare const DEFAULT_TELEMETRY_CONTRIB_EXPORT_DIR = ".pi-smart-router/exports"; export declare const DEFAULT_TELEMETRY_CONTRIB_EXPORT_LIMIT = 10000; /** Keys stripped from contrib export (install-local identifiers and prompt-adjacent fields). */ export declare const TELEMETRY_CONTRIB_STRIP_KEYS: readonly ["request_id", "session_id", "prompt_text", "messages", "prompt", "prompt_fingerprint", "pepper", "install_pepper", "dataset_pepper", "dataset_key", "pepper_key", "install_key", "candidates_json", "context_fit_rejected_json"]; /** Mirrors SP-116 `CALIBRATION_CONTRIB_REJECT_KEYS` for ingest-safe export. */ export declare const TELEMETRY_CONTRIB_REJECT_KEYS: readonly ["session_id", "prompt_text", "messages", "prompt", "prompt_fingerprint"]; /** Mirrors SP-116 tainted key pattern for ingest-safe export. */ export declare const TELEMETRY_CONTRIB_TAINTED_KEY_PATTERN: RegExp; export declare class TelemetryContribValidationError extends Error { readonly name = "TelemetryContribValidationError"; constructor(message: string, options?: ErrorOptions); } /** Fail closed when a contrib row contains forbidden or tainted keys (SP-116 parity). */ export declare function assertTelemetryContribRecordSafe(record: unknown, context?: string): asserts record is Record; /** Strip install-local pepper fields from a validated contrib row (SP-116 parity). */ export declare function sanitizeTelemetryContribRecord(record: Record): Record; export type UnpinOutcome = 'cleared' | 'noop' | 'unavailable'; export interface UnpinCommandResult { readonly outcome: UnpinOutcome; readonly message: string; readonly level: 'info' | 'error'; readonly previousModelId?: string; } export interface UnpinCommandContext { readonly sessionId: string; readonly sessionPinner: SessionPinner | undefined; } export interface ExportTelemetryContribOptions { readonly limit?: number; readonly cwd?: string; readonly writeFile?: boolean; } export interface ExportTelemetryContribResult { readonly path: string | null; readonly recordCount: number; readonly json: string; } export interface TelemetryContribExportContext { readonly store: StorePort; readonly cwd: string; readonly limit: number; } /** Returns true when args invoke `/smart-router unpin`. */ export declare function isUnpinInvocation(args: string): boolean; /** Returns true when args invoke `export telemetry-contrib`. */ export declare function isExportTelemetryContribInvocation(args: string): boolean; export declare function parseExportTelemetryContribArgs(args: string): { readonly limit: number; }; /** * Clear the current session pin via SessionPinner.breakPin(). * Does not modify SessionPinner break rules — operator-initiated unpin only. */ export declare function executeUnpinCommand(ctx: UnpinCommandContext): UnpinCommandResult; export declare function hashSessionIdForContribExport(sessionId: string): string; /** Map a dataset row plus linked outcomes to a privacy-safe telemetry contrib record. */ export declare function toTelemetryContribRecord(record: RoutingDatasetRecord, outcomes?: readonly RoutingOutcomeRecord[]): Record; export declare function formatTelemetryContribJson(records: readonly Record[]): string; export declare function formatTelemetryContribJsonl(records: readonly Record[]): string; export declare function formatTelemetryContribExportTimestamp(date?: Date): string; export declare function getTelemetryContribExportPath(cwd: string, timestamp: string): string; /** Defense-in-depth validation using SP-116 contrib safety checks. */ export declare function validateTelemetryContribRecord(record: unknown, context?: string): Record; export declare function buildTelemetryContribRecords(datasetRecords: readonly RoutingDatasetRecord[], outcomeRecords?: readonly RoutingOutcomeRecord[]): Record[]; export declare function exportTelemetryContrib(ctx: TelemetryContribExportContext, options?: Pick): Promise; /** Join dataset export shape with outcome labels, then strip to contrib-safe fields. */ export declare function datasetExportRowToTelemetryContrib(exportRecord: Record, outcomes: readonly RoutingOutcomeRecord[]): Record; export declare const smartRouterCliSubcommands: { readonly unpin: typeof executeUnpinCommand; readonly exportTelemetryContrib: typeof exportTelemetryContrib; }; //# sourceMappingURL=smart-router-cli.d.ts.map