Improve audit pipeline and outreach review

This commit is contained in:
2026-06-08 22:16:32 +02:00
parent ff18fc202e
commit 1695110e0a
34 changed files with 2792 additions and 238 deletions

View File

@@ -38,6 +38,19 @@ const auditGenerationParsedJson = v.union(
v.string(),
v.record(v.string(), auditGenerationParsedValue),
);
const auditFindingEvidenceRef = v.object({
id: v.string(),
type: v.union(
v.literal("crawl_page"),
v.literal("technical_check"),
v.literal("screenshot"),
v.literal("pagespeed"),
v.literal("jina_excerpt"),
v.literal("generation_stage"),
),
label: v.string(),
sourceUrl: v.optional(v.string()),
});
type AuditGenerationLead = Pick<
Doc<"leads">,
@@ -569,6 +582,57 @@ export const persistAuditGenerationResult = internalMutation({
},
});
export const replaceAuditFindings = internalMutation({
args: {
auditId: v.id("audits"),
runId: v.id("agentRuns"),
findings: v.array(
v.object({
skillId: v.string(),
claim: v.string(),
recommendation: v.string(),
customerBenefit: v.string(),
severity: v.union(v.literal(1), v.literal(2), v.literal(3)),
confidence: v.number(),
evidenceRefs: v.array(auditFindingEvidenceRef),
reviewStatus: v.union(
v.literal("pending"),
v.literal("accepted"),
v.literal("rejected"),
),
}),
),
},
handler: async (ctx, args) => {
const existing = await ctx.db
.query("auditFindings")
.withIndex("by_auditId", (q) => q.eq("auditId", args.auditId))
.collect();
for (const finding of existing) {
await ctx.db.delete(finding._id);
}
const now = Date.now();
for (const finding of args.findings) {
await ctx.db.insert("auditFindings", {
auditId: args.auditId,
runId: args.runId,
skillId: finding.skillId,
claim: finding.claim,
recommendation: finding.recommendation,
customerBenefit: finding.customerBenefit,
severity: finding.severity,
confidence: finding.confidence,
evidenceRefs: finding.evidenceRefs,
reviewStatus: finding.reviewStatus,
createdAt: now,
updatedAt: now,
});
}
},
});
export const persistExternalCaptureScreenshot = internalMutation({
args: {
leadId: v.id("leads"),