main #11
@ -1,5 +1,5 @@
|
||||
{
|
||||
"_variables": {
|
||||
"lastUpdateCheck": 1753528124767
|
||||
"lastUpdateCheck": 1754571688630
|
||||
}
|
||||
}
|
@ -178,16 +178,16 @@ GIT_API_TOKEN=your-git-api-token
|
||||
# ============================================================================
|
||||
|
||||
# Enable detailed audit trail of AI decision-making
|
||||
PUBLIC_FORENSIC_AUDIT_ENABLED=true
|
||||
FORENSIC_AUDIT_ENABLED=true
|
||||
|
||||
# Audit detail level: minimal, standard, verbose
|
||||
PUBLIC_FORENSIC_AUDIT_DETAIL_LEVEL=standard
|
||||
FORENSIC_AUDIT_DETAIL_LEVEL=standard
|
||||
|
||||
# Audit retention time (hours)
|
||||
PUBLIC_FORENSIC_AUDIT_RETENTION_HOURS=24
|
||||
FORENSIC_AUDIT_RETENTION_HOURS=24
|
||||
|
||||
# Maximum audit entries per request
|
||||
PUBLIC_FORENSIC_AUDIT_MAX_ENTRIES=50
|
||||
FORENSIC_AUDIT_MAX_ENTRIES=50
|
||||
|
||||
# ============================================================================
|
||||
# 10. SIMPLIFIED CONFIDENCE SCORING SYSTEM
|
||||
|
@ -157,8 +157,20 @@ class ImprovedMicroTaskAIPipeline {
|
||||
weights: `Semantic:${this.confidenceConfig.semanticWeight} Suitability:${this.confidenceConfig.suitabilityWeight}`,
|
||||
thresholds: `${this.confidenceConfig.minimumThreshold}/${this.confidenceConfig.mediumThreshold}/${this.confidenceConfig.highThreshold}`
|
||||
});
|
||||
|
||||
console.log('[AI PIPELINE] Environment variable debug:', {
|
||||
FORENSIC_AUDIT_ENABLED: process.env.FORENSIC_AUDIT_ENABLED,
|
||||
FORENSIC_AUDIT_DETAIL_LEVEL: process.env.FORENSIC_AUDIT_DETAIL_LEVEL,
|
||||
NODE_ENV: process.env.NODE_ENV,
|
||||
allEnvKeys: Object.keys(process.env).filter(k => k.includes('AUDIT')),
|
||||
dotenvLoaded: !!process.env.PUBLIC_BASE_URL // Proxy for "dotenv worked"
|
||||
});
|
||||
|
||||
console.log('[AI PIPELINE] Final audit config:', this.auditConfig);
|
||||
}
|
||||
|
||||
|
||||
|
||||
private getEnv(key: string): string {
|
||||
const value = process.env[key];
|
||||
if (!value) {
|
||||
|
@ -1,5 +1,5 @@
|
||||
// src/utils/auditService.ts
|
||||
|
||||
import 'dotenv/config';
|
||||
|
||||
function env(key: string, fallback: string | undefined = undefined): string | undefined {
|
||||
if (typeof process !== 'undefined' && process.env?.[key] !== undefined) {
|
||||
@ -26,7 +26,7 @@ interface AuditConfig {
|
||||
enabled: boolean;
|
||||
detailLevel: 'minimal' | 'standard' | 'verbose';
|
||||
retentionHours: number;
|
||||
maxEntriesPerRequest: number;
|
||||
maxEntries: number;
|
||||
}
|
||||
|
||||
interface CompressedAuditEntry {
|
||||
@ -91,30 +91,49 @@ class AuditService {
|
||||
}
|
||||
|
||||
private loadConfig(): AuditConfig {
|
||||
const enabledFlag =
|
||||
(typeof import.meta !== 'undefined' &&
|
||||
(import.meta as any).env?.PUBLIC_FORENSIC_AUDIT_ENABLED) ?? 'false';
|
||||
// Use the env() helper function that handles both server and client contexts
|
||||
const enabledFlag = env('FORENSIC_AUDIT_ENABLED', 'false');
|
||||
const detailLevel = env('FORENSIC_AUDIT_DETAIL_LEVEL', 'standard') as 'minimal' | 'standard' | 'verbose';
|
||||
const retentionHours = parseInt(env('FORENSIC_AUDIT_RETENTION_HOURS', '72') || '72', 10);
|
||||
const maxEntries = parseInt(env('FORENSIC_AUDIT_MAX_ENTRIES', '50') || '50', 10);
|
||||
|
||||
console.log('[AUDIT SERVICE] Configuration loaded:', {
|
||||
enabled: enabledFlag === 'true',
|
||||
detailLevel,
|
||||
retentionHours,
|
||||
maxEntries,
|
||||
context: typeof process !== 'undefined' ? 'server' : 'client'
|
||||
});
|
||||
|
||||
return {
|
||||
enabled: enabledFlag === 'true',
|
||||
detailLevel:
|
||||
((import.meta as any).env?.PUBLIC_FORENSIC_AUDIT_DETAIL_LEVEL as any) ||
|
||||
'standard',
|
||||
retentionHours: parseInt(
|
||||
(import.meta as any).env?.PUBLIC_FORENSIC_AUDIT_RETENTION_HOURS || '72',
|
||||
10
|
||||
),
|
||||
maxEntriesPerRequest: parseInt(
|
||||
(import.meta as any).env?.PUBLIC_FORENSIC_AUDIT_MAX_ENTRIES || '50',
|
||||
10
|
||||
),
|
||||
detailLevel,
|
||||
retentionHours,
|
||||
maxEntries
|
||||
};
|
||||
}
|
||||
|
||||
getDebugInfo(): {
|
||||
config: AuditConfig;
|
||||
environment: Record<string, any>;
|
||||
context: string;
|
||||
} {
|
||||
const context = typeof process !== 'undefined' ? 'server' : 'client';
|
||||
|
||||
return {
|
||||
config: this.config,
|
||||
environment: {
|
||||
FORENSIC_AUDIT_ENABLED: env('FORENSIC_AUDIT_ENABLED'),
|
||||
FORENSIC_AUDIT_DETAIL_LEVEL: env('FORENSIC_AUDIT_DETAIL_LEVEL'),
|
||||
FORENSIC_AUDIT_RETENTION_HOURS: env('FORENSIC_AUDIT_RETENTION_HOURS'),
|
||||
FORENSIC_AUDIT_MAX_ENTRIES: env('FORENSIC_AUDIT_MAX_ENTRIES'),
|
||||
processEnvKeys: typeof process !== 'undefined' ? Object.keys(process.env).filter(k => k.includes('AUDIT')) : [],
|
||||
importMetaEnvAvailable: typeof import.meta !== 'undefined' && !!(import.meta as any).env
|
||||
},
|
||||
context
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Add an audit entry with automatic data compression
|
||||
*/
|
||||
addEntry(
|
||||
phase: string,
|
||||
action: string,
|
||||
@ -226,9 +245,6 @@ class AuditService {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Compress audit entry for efficient transport
|
||||
*/
|
||||
private compressEntry(entry: AuditEntry): CompressedAuditEntry | null {
|
||||
if (!entry || typeof entry !== 'object') {
|
||||
console.warn('[AUDIT] Invalid audit entry:', entry);
|
||||
@ -286,9 +302,6 @@ class AuditService {
|
||||
return String(data);
|
||||
}
|
||||
|
||||
/**
|
||||
* Standard level data compression
|
||||
*/
|
||||
private summarizeForStorage(data: any): any {
|
||||
if (typeof data === 'string' && data.length > 500) {
|
||||
return data.slice(0, 500) + '...[truncated]';
|
||||
@ -299,9 +312,6 @@ class AuditService {
|
||||
return data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Minimal level data compression
|
||||
*/
|
||||
private minimalSummary(data: any): any {
|
||||
if (typeof data === 'string' && data.length > 100) {
|
||||
return data.slice(0, 100) + '...[truncated]';
|
||||
@ -388,3 +398,17 @@ class AuditService {
|
||||
|
||||
export const auditService = new AuditService();
|
||||
export type { ProcessedAuditTrail, CompressedAuditEntry };
|
||||
// Add this at the bottom of auditService.ts (after the existing exports)
|
||||
|
||||
// Export debug utilities for troubleshooting
|
||||
export const debugAuditService = {
|
||||
getDebugInfo() {
|
||||
return auditService.getDebugInfo();
|
||||
},
|
||||
isEnabled() {
|
||||
return auditService.isEnabled();
|
||||
},
|
||||
getConfig() {
|
||||
return auditService.getConfig();
|
||||
}
|
||||
};
|
Loading…
x
Reference in New Issue
Block a user