Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions src/config-file.ts
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,10 @@ interface AwfFileConfig {
debugTokens?: boolean;
tokenLogDir?: string;
};
diagnostics?: {
captureBlockedRequests?: boolean | 'summary' | 'redacted' | 'full';
maxCapturedBytes?: number;
};
auth?: {
anthropicTokenUrl?: string;
};
Expand Down Expand Up @@ -246,6 +250,8 @@ export function mapAwfFileConfigToCliOptions(config: AwfFileConfig): Record<stri
modelAliases: config.apiProxy?.models,
debugTokens: config.apiProxy?.logging?.debugTokens,
tokenLogDir: config.apiProxy?.logging?.tokenLogDir,
captureBlockedRequests: config.apiProxy?.diagnostics?.captureBlockedRequests,
maxCapturedBytes: config.apiProxy?.diagnostics?.maxCapturedBytes,
Comment on lines 250 to +254
anthropicTokenUrl: config.apiProxy?.auth?.anthropicTokenUrl,

sslBump: config.security?.sslBump,
Expand Down
8 changes: 8 additions & 0 deletions src/services/api-proxy-service-config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -192,6 +192,14 @@ export function buildApiProxyServiceConfig(params: ApiProxyServiceConfigParams):
// Token and model-alias diagnostic logging
...(config.debugTokens && { AWF_DEBUG_TOKENS: '1' }),
...(config.tokenLogDir && { AWF_TOKEN_LOG_DIR: config.tokenLogDir }),
// Blocked-request diagnostics
...(config.captureBlockedRequests !== undefined &&
config.captureBlockedRequests !== false && {
AWF_CAPTURE_BLOCKED_LLM_REQUESTS: String(config.captureBlockedRequests),
}),
...(config.maxCapturedBytes !== undefined && {
Comment on lines +196 to +200
AWF_MAX_BLOCKED_CAPTURE_BYTES: String(config.maxCapturedBytes),
}),
Comment on lines +199 to +202
// OIDC authentication (Azure, AWS, GCP, Anthropic)
...pickEnvVars(
'AWF_AUTH_TYPE',
Expand Down
28 changes: 28 additions & 0 deletions src/types/api-proxy-options.ts
Original file line number Diff line number Diff line change
Expand Up @@ -475,6 +475,34 @@ export interface ApiProxyOptions {
*/
tokenLogDir?: string;

/**
* Enable capture of body-shape diagnostics for guard-blocked requests.
*
* - `false` (default): Nothing written.
* - `'summary'`: Counts, sizes, hashes — no message content.
* - `'redacted'`: Summary plus first 200 chars per message.
* - `'full'`: Full body up to `maxCapturedBytes`.
* - `true`: Alias for `'summary'`.
*
* Set via:
* - Config file: `apiProxy.diagnostics.captureBlockedRequests: "summary"`
* - Environment variable: `AWF_CAPTURE_BLOCKED_LLM_REQUESTS=summary`
*
* @default false
*/
captureBlockedRequests?: boolean | 'summary' | 'redacted' | 'full';

/**
* Maximum body bytes to include in a single `full`-mode blocked-request-diag record.
*
* Set via:
* - Config file: `apiProxy.diagnostics.maxCapturedBytes: 250000`
* - Environment variable: `AWF_MAX_BLOCKED_CAPTURE_BYTES=250000`
*
* @default 250000
*/
maxCapturedBytes?: number;

/**
* Enable Anthropic prompt-cache optimizations in the API proxy sidecar.
*
Expand Down
Loading