Files
copilotkit__copilotkit/packages/shared/src/debug.ts
Jordan Ritter 971a8165aa fix: default verbose to false when debug: true to prevent PII exposure
When users pass the boolean shorthand `debug: true`, verbose previously
defaulted to true, logging full event payloads including user messages,
tool args, and state snapshots. Now defaults to false — users must
explicitly opt in with `debug: { verbose: true }`.
2026-04-14 14:57:22 -07:00

56 lines
1.6 KiB
TypeScript

/**
* Granular debug configuration for CopilotKit runtime and client.
* Pass `true` to enable events + lifecycle logging (but NOT verbose payloads),
* or an object for granular control including `verbose: true` for full payloads.
*/
export type DebugConfig =
| boolean
| {
/** Log every event emitted/received. Default: true */
events?: boolean;
/** Log request/run lifecycle. Default: true */
lifecycle?: boolean;
/** Log full event payloads instead of summaries. Default: false — must be explicitly opted in */
verbose?: boolean;
};
/** Normalized debug configuration — all fields resolved to booleans. */
export interface ResolvedDebugConfig {
enabled: boolean;
events: boolean;
lifecycle: boolean;
verbose: boolean;
}
/** The all-off config used when debug is falsy. */
const DEBUG_OFF: ResolvedDebugConfig = {
enabled: false,
events: false,
lifecycle: false,
verbose: false,
};
/**
* Normalizes a DebugConfig value into a ResolvedDebugConfig.
*
* - `false` / `undefined` → all off
* - `true` → events + lifecycle on, verbose off (no PII in logs)
* - object → merges with defaults (events: true, lifecycle: true, verbose: false)
*/
export function resolveDebugConfig(
debug: DebugConfig | undefined,
): ResolvedDebugConfig {
if (!debug) return DEBUG_OFF;
if (debug === true) {
return { enabled: true, events: true, lifecycle: true, verbose: false };
}
const events = debug.events ?? true;
const lifecycle = debug.lifecycle ?? true;
const enabled = events || lifecycle;
const verbose = enabled && (debug.verbose ?? false);
return { enabled, events, lifecycle, verbose };
}