All files / src/action error-reporting.ts

100% Statements 4/4
100% Branches 5/5
100% Functions 2/2
100% Lines 4/4

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33                    9x                     9x 9x               9x    
import { Sentry } from '../sentry.js';
import { classifyError } from '../sdk/errors.js';
import type { ErrorCode } from '../types/index.js';
 
interface TriggerErrorContext {
  triggerName: string;
  skillName: string;
}
 
function shouldFingerprintTriggerError(code: ErrorCode): boolean {
  return (
    code === 'provider_unavailable'
    || code === 'all_hunks_failed'
    || code === 'invalid_model_selector'
  );
}
 
/**
 * Capture trigger failures with stable tags and grouped fingerprints.
 */
export function captureActionTriggerError(error: unknown, context: TriggerErrorContext): ErrorCode {
  const { code } = classifyError(error);
  Sentry.captureException(error, {
    tags: {
      'warden.trigger.name': context.triggerName,
      'gen_ai.agent.name': context.skillName,
      'warden.error.code': code,
    },
    ...(shouldFingerprintTriggerError(code) ? { fingerprint: ['warden', code] } : {}),
  });
  return code;
}