{"version":3,"sources":["../../src/utils/tracer-init.ts"],"sourcesContent":["import * as path from 'path';\nimport * as fs from 'fs';\n\n/**\n * Safely initialize a tracer for ProbeAgent with proper path sanitization\n * Uses SimpleTelemetry for lightweight tracing\n * This prevents path traversal vulnerabilities by sanitizing the checkName\n */\ntype ProbeModule =\n  | {\n      SimpleTelemetry?: new (opts: {\n        enableFile: boolean;\n        filePath: string;\n        enableConsole?: boolean;\n      }) => unknown;\n      SimpleAppTracer?: new (telemetry: unknown, sessionId: string) => unknown;\n    }\n  | undefined;\n\nexport async function initializeTracer(\n  sessionId: string,\n  checkName?: string\n): Promise<{ tracer: unknown; telemetryConfig: unknown; filePath: string } | null> {\n  try {\n    // Load Probe lib in a way that works in both ESM and CJS bundles\n    let ProbeLib: ProbeModule;\n    try {\n      ProbeLib = (await import('@probelabs/probe')) as ProbeModule;\n    } catch {\n      try {\n        // Fallback to CJS require if available\n        // eslint-disable-next-line @typescript-eslint/no-require-imports\n        ProbeLib = require('@probelabs/probe') as ProbeModule;\n      } catch {\n        ProbeLib = {} as unknown as ProbeModule;\n      }\n    }\n\n    // Use SimpleTelemetry (probe no longer exports full OpenTelemetry classes)\n    const SimpleTelemetry = ProbeLib?.SimpleTelemetry;\n    const SimpleAppTracer = ProbeLib?.SimpleAppTracer;\n    if (SimpleTelemetry && SimpleAppTracer) {\n      // SECURITY: Sanitize checkName to prevent path traversal attacks\n      const sanitizedCheckName = checkName ? path.basename(checkName) : 'check';\n\n      // Create trace file path in debug-artifacts directory\n      const timestamp = new Date().toISOString().replace(/[:.]/g, '-');\n      const traceDir = process.env.GITHUB_WORKSPACE\n        ? path.join(process.env.GITHUB_WORKSPACE, 'debug-artifacts')\n        : path.join(process.cwd(), 'debug-artifacts');\n\n      // Create traces directory if it doesn't exist\n      if (!fs.existsSync(traceDir)) {\n        fs.mkdirSync(traceDir, { recursive: true });\n      }\n\n      // SECURITY: Use path.join to safely construct the path\n      const traceFilePath = path.join(traceDir, `trace-${sanitizedCheckName}-${timestamp}.jsonl`);\n\n      // SECURITY: Verify the resolved path is within the intended directory\n      const resolvedTracePath = path.resolve(traceFilePath);\n      const resolvedTraceDir = path.resolve(traceDir);\n      if (!resolvedTracePath.startsWith(resolvedTraceDir)) {\n        console.error(\n          `⚠️ Security: Attempted path traversal detected. Check name: ${checkName}, resolved path: ${resolvedTracePath}`\n        );\n        return null;\n      }\n\n      // Initialize simple telemetry\n      const telemetry = new SimpleTelemetry({\n        enableFile: true,\n        filePath: traceFilePath,\n        enableConsole: false,\n      });\n\n      const tracer = new SimpleAppTracer(telemetry, sessionId);\n\n      console.error(`📊 Simple tracing enabled, will save to: ${traceFilePath}`);\n\n      // If in GitHub Actions, log the path for artifact upload\n      if (process.env.GITHUB_ACTIONS) {\n        console.log(`::notice title=AI Trace::Trace will be saved to ${traceFilePath}`);\n        console.log(`::set-output name=trace-path::${traceFilePath}`);\n      }\n\n      // Return with SimpleTelemetry\n      return {\n        tracer,\n        telemetryConfig: telemetry,\n        filePath: traceFilePath,\n      };\n    }\n\n    console.error('⚠️ Telemetry classes not available in ProbeAgent, skipping tracing');\n    return null;\n  } catch (error) {\n    console.error('⚠️ Warning: Failed to initialize tracing:', error);\n    return null;\n  }\n}\n"],"mappings":";;;;;;AAAA,YAAY,UAAU;AACtB,YAAY,QAAQ;AAkBpB,eAAsB,iBACpB,WACA,WACiF;AACjF,MAAI;AAEF,QAAI;AACJ,QAAI;AACF,iBAAY,MAAM,OAAO,kBAAkB;AAAA,IAC7C,QAAQ;AACN,UAAI;AAGF,mBAAW,UAAQ,kBAAkB;AAAA,MACvC,QAAQ;AACN,mBAAW,CAAC;AAAA,MACd;AAAA,IACF;AAGA,UAAM,kBAAkB,UAAU;AAClC,UAAM,kBAAkB,UAAU;AAClC,QAAI,mBAAmB,iBAAiB;AAEtC,YAAM,qBAAqB,YAAiB,cAAS,SAAS,IAAI;AAGlE,YAAM,aAAY,oBAAI,KAAK,GAAE,YAAY,EAAE,QAAQ,SAAS,GAAG;AAC/D,YAAM,WAAW,QAAQ,IAAI,mBACpB,UAAK,QAAQ,IAAI,kBAAkB,iBAAiB,IACpD,UAAK,QAAQ,IAAI,GAAG,iBAAiB;AAG9C,UAAI,CAAI,cAAW,QAAQ,GAAG;AAC5B,QAAG,aAAU,UAAU,EAAE,WAAW,KAAK,CAAC;AAAA,MAC5C;AAGA,YAAM,gBAAqB,UAAK,UAAU,SAAS,kBAAkB,IAAI,SAAS,QAAQ;AAG1F,YAAM,oBAAyB,aAAQ,aAAa;AACpD,YAAM,mBAAwB,aAAQ,QAAQ;AAC9C,UAAI,CAAC,kBAAkB,WAAW,gBAAgB,GAAG;AACnD,gBAAQ;AAAA,UACN,yEAA+D,SAAS,oBAAoB,iBAAiB;AAAA,QAC/G;AACA,eAAO;AAAA,MACT;AAGA,YAAM,YAAY,IAAI,gBAAgB;AAAA,QACpC,YAAY;AAAA,QACZ,UAAU;AAAA,QACV,eAAe;AAAA,MACjB,CAAC;AAED,YAAM,SAAS,IAAI,gBAAgB,WAAW,SAAS;AAEvD,cAAQ,MAAM,mDAA4C,aAAa,EAAE;AAGzE,UAAI,QAAQ,IAAI,gBAAgB;AAC9B,gBAAQ,IAAI,mDAAmD,aAAa,EAAE;AAC9E,gBAAQ,IAAI,iCAAiC,aAAa,EAAE;AAAA,MAC9D;AAGA,aAAO;AAAA,QACL;AAAA,QACA,iBAAiB;AAAA,QACjB,UAAU;AAAA,MACZ;AAAA,IACF;AAEA,YAAQ,MAAM,8EAAoE;AAClF,WAAO;AAAA,EACT,SAAS,OAAO;AACd,YAAQ,MAAM,uDAA6C,KAAK;AAChE,WAAO;AAAA,EACT;AACF;AApGA;AAAA;AAAA;AAAA;","names":[]}