@resolveio/server-lib 22.3.124 → 22.3.125

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/collections/ai-run.collection.d.ts +3 -0
  2. package/collections/ai-run.collection.js +170 -0
  3. package/collections/ai-run.collection.js.map +1 -0
  4. package/managers/ai-run-evidence.manager.d.ts +36 -0
  5. package/managers/ai-run-evidence.manager.js +377 -0
  6. package/managers/ai-run-evidence.manager.js.map +1 -0
  7. package/managers/openai-usage-ledger.manager.d.ts +1 -0
  8. package/managers/openai-usage-ledger.manager.js +5 -56
  9. package/managers/openai-usage-ledger.manager.js.map +1 -1
  10. package/models/ai-run.model.d.ts +19 -0
  11. package/models/ai-run.model.js +4 -0
  12. package/models/ai-run.model.js.map +1 -0
  13. package/package.json +3 -1
  14. package/public_api.d.ts +7 -0
  15. package/public_api.js +7 -0
  16. package/public_api.js.map +1 -1
  17. package/util/ai-run-evidence-adapters.d.ts +33 -0
  18. package/util/ai-run-evidence-adapters.js +660 -0
  19. package/util/ai-run-evidence-adapters.js.map +1 -0
  20. package/util/ai-run-evidence-dashboard.d.ts +67 -0
  21. package/util/ai-run-evidence-dashboard.js +309 -0
  22. package/util/ai-run-evidence-dashboard.js.map +1 -0
  23. package/util/ai-run-evidence-eval.d.ts +86 -0
  24. package/util/ai-run-evidence-eval.js +854 -0
  25. package/util/ai-run-evidence-eval.js.map +1 -0
  26. package/util/ai-run-evidence.d.ts +212 -0
  27. package/util/ai-run-evidence.js +649 -0
  28. package/util/ai-run-evidence.js.map +1 -0
  29. package/util/ai-runner-qa-tools.d.ts +1 -0
  30. package/util/ai-runner-qa-tools.js +129 -10
  31. package/util/ai-runner-qa-tools.js.map +1 -1
  32. package/util/openai-usage-cost.d.ts +6 -0
  33. package/util/openai-usage-cost.js +92 -0
  34. package/util/openai-usage-cost.js.map +1 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/util/ai-run-evidence-adapters.ts"],"names":[],"mappings":"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","file":"ai-run-evidence-adapters.js","sourcesContent":["import {\n\tAIRun,\n\tAIRunCost,\n\tAIRunEvent,\n\tAIQaArtifact,\n\tAIQaBusinessAssertion,\n\tAIQaCompileResult,\n\tAIQaInfraCheck,\n\tAIQaRouteProbe,\n\tbuildAIRun,\n\tbuildAIRunCost,\n\tbuildAIQaRun,\n\tnormalizeOpenAIUsageRowsForCosting\n} from './ai-run-evidence';\n\nexport interface SupportAIRunAdapterInput {\n\tticket?: Record<string, any>;\n\tjob?: Record<string, any>;\n\tversions?: Array<Record<string, any>>;\n\tbuildPlans?: Array<Record<string, any>>;\n\taiJobs?: Array<Record<string, any>>;\n\ttaskEvents?: Array<Record<string, any>>;\n\tusageLedger?: Array<Record<string, any>>;\n\tcommits?: Array<Record<string, any>>;\n\tqaEvidence?: Record<string, any>;\n\tnow?: Date | string;\n}\n\nexport interface AICoderAIRunAdapterInput {\n\tapp?: Record<string, any>;\n\tjob?: Record<string, any>;\n\tlogs?: Array<Record<string, any>>;\n\tusageLedger?: Array<Record<string, any>>;\n\tcommits?: Array<Record<string, any>>;\n\tqaEvidence?: Record<string, any>;\n\tnow?: Date | string;\n}\n\nexport interface AssistantAIRunAdapterInput {\n\tconversation?: Record<string, any>;\n\tmessages?: Array<Record<string, any>>;\n\tissueReports?: Array<Record<string, any>>;\n\tusageLedger?: Array<Record<string, any>>;\n\tcorrectnessChecks?: Array<Record<string, any>>;\n\tnow?: Date | string;\n}\n\nfunction cleanText(value: any, max = 1000): string {\n\treturn String(value || '').replace(/\\s+/g, ' ').trim().slice(0, max);\n}\n\nfunction idText(value: any, max = 160): string | undefined {\n\tconst normalized = cleanText(value, max);\n\treturn normalized || undefined;\n}\n\nfunction asArray<T = any>(value: any): T[] {\n\treturn Array.isArray(value) ? value : [];\n}\n\nfunction firstText(source: Record<string, any> | undefined, fields: string[], max = 1000): string | undefined {\n\tfor (const field of fields) {\n\t\tconst value = source?.[field];\n\t\tconst normalized = idText(value, max);\n\t\tif (normalized) {\n\t\t\treturn normalized;\n\t\t}\n\t}\n\treturn undefined;\n}\n\nfunction dateValue(source: Record<string, any> | undefined, fields: string[]): Date | string | undefined {\n\tfor (const field of fields) {\n\t\tconst value = source?.[field];\n\t\tif (value) {\n\t\t\treturn value;\n\t\t}\n\t}\n\treturn undefined;\n}\n\nfunction addSourceId(sourceIds: Record<string, string>, key: string, value: any): void {\n\tconst normalized = idText(value);\n\tif (normalized) {\n\t\tsourceIds[key] = normalized;\n\t}\n}\n\nfunction pushEvent(events: AIRunEvent[], event: AIRunEvent): void {\n\tconst message = cleanText(event.message, 1800);\n\tconst metadata = event.metadata || {};\n\tif (!message && !Object.keys(metadata).length && !event.artifactPaths?.length) {\n\t\treturn;\n\t}\n\tevents.push({\n\t\t...event,\n\t\tmessage,\n\t\tartifactPaths: asArray<string>(event.artifactPaths).filter(Boolean).slice(0, 20)\n\t});\n}\n\nfunction eventDate(record: Record<string, any>): Date | string | undefined {\n\treturn dateValue(record, ['recordedAt', 'createdAt', 'updatedAt', 'timestamp', 'time', 'date']);\n}\n\nfunction collectUsageEvents(entries: Array<Record<string, any>>, events: AIRunEvent[]): AIRunCost | undefined {\n\tif (!entries.length) {\n\t\treturn undefined;\n\t}\n\tconst normalizedEntries = normalizeOpenAIUsageRowsForCosting(entries);\n\tfor (const entry of normalizedEntries) {\n\t\tpushEvent(events, {\n\t\t\ttype: 'usage',\n\t\t\tcategory: cleanText(entry.category || entry.kind || entry.phase, 160) || 'usage',\n\t\t\tmessage: cleanText(entry.summary || entry.description || entry.model || 'Model usage recorded.', 800),\n\t\t\trecordedAt: eventDate(entry),\n\t\t\tmetadata: {\n\t\t\t\tmodel: entry.model,\n\t\t\t\tinputTokens: entry.inputTokens ?? entry.input_tokens,\n\t\t\t\toutputTokens: entry.outputTokens ?? entry.output_tokens,\n\t\t\t\ttotalTokens: entry.totalTokens ?? entry.total_tokens,\n\t\t\t\testimatedUsd: entry.estimatedUsd ?? entry.cost_estimate\n\t\t\t}\n\t\t});\n\t}\n\treturn buildAIRunCost(entries);\n}\n\nfunction collectCommitEvents(commits: Array<Record<string, any>>, events: AIRunEvent[]): void {\n\tfor (const commit of commits.slice(0, 80)) {\n\t\tpushEvent(events, {\n\t\t\ttype: 'git_commit',\n\t\t\tmessage: cleanText(commit.message || commit.subject || commit.title || commit.hash || commit.sha, 1200),\n\t\t\trecordedAt: eventDate(commit),\n\t\t\tmetadata: {\n\t\t\t\tsha: commit.sha || commit.hash,\n\t\t\t\tbranch: commit.branch,\n\t\t\t\tauthor: commit.author\n\t\t\t}\n\t\t});\n\t}\n}\n\nfunction statusFromBoolean(value: any, fallback?: string): string | undefined {\n\tif (value === true) {\n\t\treturn 'pass';\n\t}\n\tif (value === false) {\n\t\treturn 'fail';\n\t}\n\treturn fallback;\n}\n\nfunction collectArtifacts(evidence: Record<string, any> | undefined): AIQaArtifact[] {\n\tconst artifacts: AIQaArtifact[] = [];\n\tfor (const entry of asArray<any>(evidence?.artifacts)) {\n\t\tartifacts.push({\n\t\t\ttype: entry.type || 'other',\n\t\t\tpath: cleanText(entry.path || entry.file || entry.artifactPath, 500),\n\t\t\turl: cleanText(entry.url, 500),\n\t\t\ttitle: cleanText(entry.title || entry.name, 300),\n\t\t\tcaption: cleanText(entry.caption || entry.message, 800),\n\t\t\tmetadata: entry.metadata\n\t\t});\n\t}\n\tconst screenshots = asArray<any>(evidence?.screenshots || evidence?.qaScreenshots || evidence?.browserScreenshots);\n\tfor (const screenshot of screenshots.slice(0, 40)) {\n\t\tif (typeof screenshot === 'string') {\n\t\t\tartifacts.push({ type: 'screenshot', path: screenshot });\n\t\t} else {\n\t\t\tartifacts.push({\n\t\t\t\ttype: 'screenshot',\n\t\t\t\tpath: cleanText(screenshot.path || screenshot.file, 500),\n\t\t\t\turl: cleanText(screenshot.url, 500),\n\t\t\t\ttitle: cleanText(screenshot.title || screenshot.route, 300),\n\t\t\t\tcaption: cleanText(screenshot.caption || screenshot.message, 800),\n\t\t\t\tmetadata: screenshot.metadata\n\t\t\t});\n\t\t}\n\t}\n\treturn artifacts;\n}\n\nfunction collectInfraChecks(evidence: Record<string, any> | undefined): AIQaInfraCheck[] {\n\tconst checks: AIQaInfraCheck[] = [];\n\tfor (const entry of asArray<any>(evidence?.infraChecks || evidence?.preflightChecks)) {\n\t\tchecks.push({\n\t\t\tname: cleanText(entry.name || entry.check || entry.key, 160) || 'infra_check',\n\t\t\tstatus: entry.status || statusFromBoolean(entry.passed),\n\t\t\tmessage: cleanText(entry.message || entry.error || entry.reason, 1000),\n\t\t\tpath: cleanText(entry.path, 500),\n\t\t\tdurationMs: Number(entry.durationMs ?? entry.duration_ms) || undefined,\n\t\t\tmetadata: entry.metadata,\n\t\t\tcheckedAt: eventDate(entry)\n\t\t});\n\t}\n\tif (evidence?.preflightStatus) {\n\t\tchecks.push({\n\t\t\tname: 'qa_preflight',\n\t\t\tstatus: evidence.preflightStatus,\n\t\t\tmessage: cleanText(evidence.preflightMessage || evidence.preflightReason, 1000),\n\t\t\tpath: cleanText(evidence.preflightArtifactPath || evidence.preflightPath, 500)\n\t\t});\n\t}\n\treturn checks;\n}\n\nfunction collectCompileResult(evidence: Record<string, any> | undefined): AIQaCompileResult | undefined {\n\tconst build = evidence?.compile || evidence?.build || evidence?.buildEvidence || evidence?.buildResult;\n\tif (!build && evidence?.compileStatus === undefined && evidence?.buildStatus === undefined) {\n\t\treturn undefined;\n\t}\n\tconst status = build?.status\n\t\t|| evidence?.compileStatus\n\t\t|| evidence?.buildStatus\n\t\t|| statusFromBoolean(build?.passed ?? build?.allExpectedPassed ?? evidence?.buildPassed);\n\treturn {\n\t\tstatus,\n\t\tcommand: cleanText(build?.command || evidence?.buildCommand, 500),\n\t\tartifactPath: cleanText(build?.artifactPath || build?.logPath || evidence?.buildLogPath, 500),\n\t\tmessage: cleanText(build?.message || build?.error || evidence?.buildMessage, 1000),\n\t\tdurationMs: Number(build?.durationMs ?? build?.duration_ms) || undefined,\n\t\tstaleEvidence: build?.staleEvidence === true || evidence?.staleBuildEvidence === true,\n\t\trecordedAt: eventDate(build || evidence || {})\n\t};\n}\n\nfunction collectRouteProbes(evidence: Record<string, any> | undefined): AIQaRouteProbe[] {\n\tconst probes: AIQaRouteProbe[] = [];\n\tfor (const entry of asArray<any>(evidence?.routeProbes || evidence?.routes || evidence?.browserRoutes)) {\n\t\tprobes.push({\n\t\t\troute: cleanText(entry.route || entry.path || entry.url, 500) || '/',\n\t\t\tstatus: entry.status || statusFromBoolean(entry.passed),\n\t\t\tscreenshot: cleanText(entry.screenshot || entry.screenshotPath, 500),\n\t\t\tcaption: cleanText(entry.caption || entry.message, 1000),\n\t\t\tshellOnly: entry.shellOnly === true,\n\t\t\tauthenticated: entry.authenticated === true,\n\t\t\tconsoleErrors: asArray<string>(entry.consoleErrors),\n\t\t\tnetworkErrors: asArray<string>(entry.networkErrors),\n\t\t\tmessage: cleanText(entry.message || entry.error, 1000),\n\t\t\trecordedAt: eventDate(entry)\n\t\t});\n\t}\n\tconst screenshots = asArray<any>(evidence?.screenshots || evidence?.qaScreenshots || evidence?.browserScreenshots);\n\tfor (const screenshot of screenshots.slice(0, 20)) {\n\t\tif (typeof screenshot === 'string') {\n\t\t\tprobes.push({ route: '/', status: 'pass', screenshot, caption: 'Historical browser screenshot recorded.' });\n\t\t} else if (screenshot.route || screenshot.path || screenshot.url || screenshot.screenshot || screenshot.file) {\n\t\t\tprobes.push({\n\t\t\t\troute: cleanText(screenshot.route || screenshot.url || screenshot.path, 500) || '/',\n\t\t\t\tstatus: screenshot.status || statusFromBoolean(screenshot.passed, 'pass'),\n\t\t\t\tscreenshot: cleanText(screenshot.screenshot || screenshot.screenshotPath || screenshot.file || screenshot.path, 500),\n\t\t\t\tcaption: cleanText(screenshot.caption || screenshot.message, 1000),\n\t\t\t\tshellOnly: screenshot.shellOnly === true,\n\t\t\t\tauthenticated: screenshot.authenticated === true,\n\t\t\t\trecordedAt: eventDate(screenshot)\n\t\t\t});\n\t\t}\n\t}\n\treturn probes;\n}\n\nfunction collectBusinessAssertions(evidence: Record<string, any> | undefined): AIQaBusinessAssertion[] {\n\tconst assertions: AIQaBusinessAssertion[] = [];\n\tfor (const entry of asArray<any>(evidence?.businessAssertions || evidence?.workflowAssertions || evidence?.assertions)) {\n\t\tassertions.push({\n\t\t\tassertion: cleanText(entry.assertion || entry.name || entry.workflow || entry.expected, 1000) || 'business assertion',\n\t\t\tstatus: entry.status || statusFromBoolean(entry.passed),\n\t\t\tworkflow: cleanText(entry.workflow, 400),\n\t\t\troute: cleanText(entry.route, 500),\n\t\t\taction: cleanText(entry.action, 500),\n\t\t\texpected: cleanText(entry.expected, 1000),\n\t\t\tobserved: cleanText(entry.observed || entry.actual, 1000),\n\t\t\tdataProof: cleanText(entry.dataProof || entry.proof, 1400),\n\t\t\tartifactPaths: asArray<string>(entry.artifactPaths || entry.artifacts),\n\t\t\tmessage: cleanText(entry.message || entry.error || entry.reason, 1000),\n\t\t\trecordedAt: eventDate(entry),\n\t\t\tmetadata: entry.metadata\n\t\t});\n\t}\n\tif (!assertions.length && evidence?.qaRunOutcome === 'business_assertion_passed') {\n\t\tassertions.push({\n\t\t\tassertion: cleanText(evidence.aiRunOutcomeReason || evidence.reason || 'Historical business assertion passed.', 1000),\n\t\t\tstatus: 'pass',\n\t\t\tdataProof: cleanText(evidence.aiRunOutcomeReason || evidence.reason, 1400)\n\t\t});\n\t}\n\tif (!assertions.length && evidence?.qaRunOutcome === 'business_assertion_failed') {\n\t\tassertions.push({\n\t\t\tassertion: cleanText(evidence.aiRunOutcomeReason || evidence.reason || 'Historical business assertion failed.', 1000),\n\t\t\tstatus: 'fail',\n\t\t\tobserved: cleanText(evidence.aiRunOutcomeReason || evidence.reason, 1000)\n\t\t});\n\t}\n\treturn assertions;\n}\n\nfunction buildQaFromEvidence(evidence: Record<string, any> | undefined, now?: Date | string) {\n\treturn buildAIQaRun({\n\t\tinfraChecks: collectInfraChecks(evidence),\n\t\tcompile: collectCompileResult(evidence),\n\t\trouteProbes: collectRouteProbes(evidence),\n\t\tbusinessAssertions: collectBusinessAssertions(evidence),\n\t\tartifacts: collectArtifacts(evidence),\n\t\tnow\n\t});\n}\n\nfunction evidenceObject(...values: any[]): Record<string, any> {\n\tfor (const value of values) {\n\t\tif (value && typeof value === 'object' && !Array.isArray(value)) {\n\t\t\treturn value;\n\t\t}\n\t}\n\treturn {};\n}\n\nexport function buildSupportAIRunFromEvidence(input: SupportAIRunAdapterInput): AIRun {\n\tconst ticket = input.ticket || {};\n\tconst job = input.job || {};\n\tconst evidence = evidenceObject(input.qaEvidence, job.qaEvidence, job.qa_evidence, ticket.qaEvidence, ticket.qa_evidence);\n\tconst events: AIRunEvent[] = [];\n\tconst sourceIds: Record<string, string> = {};\n\taddSourceId(sourceIds, 'ticketId', ticket._id || ticket.id || job.ticketId || job.supportTicketId);\n\taddSourceId(sourceIds, 'ticketNumber', ticket.ticketNumber || ticket.number || job.ticketNumber);\n\taddSourceId(sourceIds, 'jobId', job._id || job.id || job.jobId);\n\taddSourceId(sourceIds, 'buildPlanId', job.buildPlanId || ticket.buildPlanId);\n\n\tfor (const event of asArray<Record<string, any>>(input.taskEvents)) {\n\t\tpushEvent(events, {\n\t\t\ttype: event.type === 'human_intervention' ? 'human_intervention' : 'log',\n\t\t\tcategory: cleanText(event.category || event.phase || event.type, 160),\n\t\t\tmessage: cleanText(event.message || event.summary || event.text || event.title, 1800),\n\t\t\trecordedAt: eventDate(event),\n\t\t\tmetadata: {\n\t\t\t\tstatus: event.status,\n\t\t\t\tphase: event.phase,\n\t\t\t\ttaskId: event.taskId || event._id || event.id\n\t\t\t}\n\t\t});\n\t}\n\tfor (const aiJob of asArray<Record<string, any>>(input.aiJobs)) {\n\t\tpushEvent(events, {\n\t\t\ttype: aiJob.model ? 'model_call' : 'log',\n\t\t\tcategory: cleanText(aiJob.category || aiJob.phase || aiJob.runner, 160),\n\t\t\tmessage: cleanText(aiJob.summary || aiJob.promptSummary || aiJob.status || aiJob.phase, 1800),\n\t\t\trecordedAt: eventDate(aiJob),\n\t\t\tmetadata: {\n\t\t\t\tid: aiJob._id || aiJob.id,\n\t\t\t\tmodel: aiJob.model,\n\t\t\t\tstatus: aiJob.status,\n\t\t\t\tphase: aiJob.phase\n\t\t\t}\n\t\t});\n\t}\n\tcollectCommitEvents(asArray<Record<string, any>>(input.commits), events);\n\tconst cost = collectUsageEvents(asArray<Record<string, any>>(input.usageLedger), events);\n\n\tconst qa = buildQaFromEvidence(evidence, input.now);\n\treturn buildAIRun({\n\t\tsource: 'support_ticket',\n\t\tsourceIds,\n\t\ttitle: firstText(ticket, ['title', 'subject', 'summary']) || firstText(job, ['title', 'summary']),\n\t\tstatus: firstText(job, ['status', 'state']) || firstText(ticket, ['status', 'state']),\n\t\tphase: firstText(job, ['phase', 'runnerPhase']),\n\t\tstartedAt: dateValue(job, ['startedAt', 'createdAt']) || dateValue(ticket, ['createdAt']),\n\t\tcompletedAt: dateValue(job, ['completedAt', 'finishedAt', 'updatedAt']),\n\t\tevents,\n\t\tqa,\n\t\tcost,\n\t\tscorecardPassed: evidence.scorecardPassed === true || evidence.scorecardStatus === 'pass',\n\t\tdeployStatus: evidence.deployStatus,\n\t\tpublishStatus: evidence.publishStatus,\n\t\tsampleDataStatus: evidence.sampleDataStatus,\n\t\tmanualHandoff: evidence.manualHandoff === true || job.manualHandoff === true,\n\t\tstopped: evidence.stopped === true || job.stopped === true,\n\t\trejected: evidence.rejected === true,\n\t\texplicitAccepted: evidence.explicitAccepted === true || ticket.accepted === true,\n\t\tterminal: /complete|closed|resolved|done|failed|rejected/i.test(`${job.status || ''} ${ticket.status || ''}`),\n\t\tnow: input.now,\n\t\tmetadata: {\n\t\t\tversionCount: asArray(input.versions).length,\n\t\t\tbuildPlanCount: asArray(input.buildPlans).length\n\t\t}\n\t});\n}\n\nexport function buildAICoderAIRunFromEvidence(input: AICoderAIRunAdapterInput): AIRun {\n\tconst app = input.app || {};\n\tconst job = input.job || {};\n\tconst evidence = evidenceObject(input.qaEvidence, job.qaEvidence, job.qa_evidence, app.qaEvidence, app.qa_evidence);\n\tconst events: AIRunEvent[] = [];\n\tconst sourceIds: Record<string, string> = {};\n\taddSourceId(sourceIds, 'appId', app._id || app.id || job.appId || job.aicoderAppId);\n\taddSourceId(sourceIds, 'jobId', job._id || job.id || job.jobId);\n\taddSourceId(sourceIds, 'domain', app.domain || app.customDomain || job.domain);\n\n\tfor (const log of asArray<Record<string, any>>(input.logs)) {\n\t\tpushEvent(events, {\n\t\t\ttype: log.type === 'scorecard' ? 'scorecard' : 'log',\n\t\t\tcategory: cleanText(log.category || log.phase || log.level, 160),\n\t\t\tmessage: cleanText(log.message || log.summary || log.text || log.title, 1800),\n\t\t\tartifactPaths: asArray<string>(log.artifactPaths || log.artifacts),\n\t\t\trecordedAt: eventDate(log),\n\t\t\tmetadata: {\n\t\t\t\tstatus: log.status,\n\t\t\t\tlevel: log.level,\n\t\t\t\tscore: log.score\n\t\t\t}\n\t\t});\n\t}\n\tcollectCommitEvents(asArray<Record<string, any>>(input.commits), events);\n\tconst cost = collectUsageEvents(asArray<Record<string, any>>(input.usageLedger), events);\n\tconst qa = buildQaFromEvidence(evidence, input.now);\n\tconst scorecardPassed = evidence.scorecardPassed === true\n\t\t|| evidence.scorecardStatus === 'pass'\n\t\t|| (Number(evidence.score ?? evidence.qualityScore ?? 0) >= Number(evidence.scoreThreshold ?? job.scoreThreshold ?? 90));\n\n\treturn buildAIRun({\n\t\tsource: 'aicoder_app',\n\t\tsourceIds,\n\t\ttitle: firstText(app, ['name', 'title']) || firstText(job, ['appName', 'title', 'goal']),\n\t\tstatus: firstText(job, ['status', 'state']) || firstText(app, ['status', 'state']),\n\t\tphase: firstText(job, ['phase', 'runnerPhase']),\n\t\tstartedAt: dateValue(job, ['startedAt', 'createdAt']) || dateValue(app, ['createdAt']),\n\t\tcompletedAt: dateValue(job, ['completedAt', 'finishedAt', 'updatedAt']),\n\t\tevents,\n\t\tqa,\n\t\tcost,\n\t\tscorecardPassed,\n\t\tdeployStatus: evidence.deployStatus || statusFromBoolean(evidence.deployReady),\n\t\tpublishStatus: evidence.publishStatus || evidence.pullRequestStatus,\n\t\tsampleDataStatus: evidence.sampleDataStatus || statusFromBoolean(evidence.sampleDataReady ?? evidence.hasSampleData),\n\t\tmanualHandoff: evidence.manualHandoff === true || job.manualHandoff === true,\n\t\tstopped: evidence.stopped === true || job.stopped === true,\n\t\trejected: evidence.rejected === true,\n\t\texplicitAccepted: evidence.explicitAccepted === true || app.accepted === true,\n\t\tterminal: /complete|closed|resolved|done|failed|rejected/i.test(`${job.status || ''} ${job.phase || ''}`),\n\t\tnow: input.now,\n\t\tmetadata: {\n\t\t\tdomain: app.domain || app.customDomain || job.domain,\n\t\t\twowScore: evidence.wowScore ?? job.wowScore,\n\t\t\tscore: evidence.score ?? evidence.qualityScore\n\t\t}\n\t});\n}\n\nexport function buildAssistantAIRunFromEvidence(input: AssistantAIRunAdapterInput): AIRun {\n\tconst conversation = input.conversation || {};\n\tconst events: AIRunEvent[] = [];\n\tconst sourceIds: Record<string, string> = {};\n\taddSourceId(sourceIds, 'conversationId', conversation._id || conversation.id || conversation.conversationId);\n\taddSourceId(sourceIds, 'userId', conversation.userId || conversation.ownerId);\n\n\tfor (const message of asArray<Record<string, any>>(input.messages)) {\n\t\tpushEvent(events, {\n\t\t\ttype: 'assistant_message',\n\t\t\tcategory: cleanText(message.role || message.authorRole || message.type, 160),\n\t\t\tmessage: cleanText(message.content || message.text || message.message || message.summary, 1800),\n\t\t\trecordedAt: eventDate(message),\n\t\t\tmetadata: {\n\t\t\t\tid: message._id || message.id,\n\t\t\t\trole: message.role,\n\t\t\t\tmodel: message.model\n\t\t\t}\n\t\t});\n\t}\n\tfor (const report of asArray<Record<string, any>>(input.issueReports)) {\n\t\tpushEvent(events, {\n\t\t\ttype: 'human_intervention',\n\t\t\tcategory: cleanText(report.category || report.status || 'issue_report', 160),\n\t\t\tmessage: cleanText(report.summary || report.description || report.message || report.title, 1800),\n\t\t\trecordedAt: eventDate(report),\n\t\t\tmetadata: {\n\t\t\t\tid: report._id || report.id,\n\t\t\t\tstatus: report.status,\n\t\t\t\tseverity: report.severity\n\t\t\t}\n\t\t});\n\t}\n\tconst cost = collectUsageEvents(asArray<Record<string, any>>(input.usageLedger), events);\n\tconst correctnessEvidence = {\n\t\tbusinessAssertions: asArray<Record<string, any>>(input.correctnessChecks).map((check) => ({\n\t\t\tassertion: check.assertion || check.name || check.case || 'assistant correctness check',\n\t\t\tstatus: check.status || statusFromBoolean(check.passed),\n\t\t\texpected: check.expected,\n\t\t\tobserved: check.observed || check.actual,\n\t\t\tdataProof: check.dataProof || check.proof,\n\t\t\tartifactPaths: check.artifactPaths,\n\t\t\tmessage: check.message || check.reason,\n\t\t\tmetadata: check.metadata,\n\t\t\trecordedAt: eventDate(check)\n\t\t}))\n\t};\n\tconst qa = buildQaFromEvidence(correctnessEvidence, input.now);\n\tconst failedReports = asArray<Record<string, any>>(input.issueReports)\n\t\t.filter((report) => /open|new|fail|bug|wrong|incorrect|error/i.test(`${report.status || ''} ${report.category || ''} ${report.summary || ''}`));\n\n\treturn buildAIRun({\n\t\tsource: 'ai_assistant',\n\t\tsourceIds,\n\t\ttitle: firstText(conversation, ['title', 'subject', 'summary']) || 'AI assistant conversation',\n\t\tstatus: firstText(conversation, ['status', 'state']),\n\t\tphase: firstText(conversation, ['phase']),\n\t\tstartedAt: dateValue(conversation, ['startedAt', 'createdAt']),\n\t\tcompletedAt: dateValue(conversation, ['completedAt', 'closedAt', 'updatedAt']),\n\t\tevents,\n\t\tqa,\n\t\tcost,\n\t\trejected: failedReports.length > 0 || conversation.rejected === true,\n\t\tmanualHandoff: conversation.manualHandoff === true,\n\t\tstopped: conversation.stopped === true,\n\t\texplicitAccepted: conversation.accepted === true,\n\t\tterminal: /complete|closed|resolved|done|failed|rejected/i.test(`${conversation.status || ''}`),\n\t\tnow: input.now,\n\t\tmetadata: {\n\t\t\tissueReportCount: asArray(input.issueReports).length,\n\t\t\tcorrectnessCheckCount: asArray(input.correctnessChecks).length\n\t\t}\n\t});\n}\n"]}
@@ -0,0 +1,67 @@
1
+ import { AIRun, AIRunCost } from './ai-run-evidence';
2
+ import { buildAIRunTrainingExampleFromRun } from './ai-run-evidence-eval';
3
+ export interface AIRunTimelineItem {
4
+ time?: string;
5
+ type: string;
6
+ label: string;
7
+ status?: string;
8
+ message?: string;
9
+ evidenceRefs: string[];
10
+ metadata?: Record<string, any>;
11
+ }
12
+ export interface AIRunQaHealth {
13
+ outcome?: string;
14
+ infra: {
15
+ pass: number;
16
+ fail: number;
17
+ blocked: number;
18
+ warn: number;
19
+ unknown: number;
20
+ };
21
+ compile?: {
22
+ status?: string;
23
+ stale?: boolean;
24
+ artifactPath?: string;
25
+ message?: string;
26
+ };
27
+ route: {
28
+ pass: number;
29
+ fail: number;
30
+ shellOnly: number;
31
+ };
32
+ business: {
33
+ pass: number;
34
+ fail: number;
35
+ blocked: number;
36
+ missing: boolean;
37
+ };
38
+ }
39
+ export interface AIRunCostPanel {
40
+ totalTokens: number;
41
+ estimatedUsd: number;
42
+ models: string[];
43
+ categories: Array<{
44
+ category: string;
45
+ totalTokens: number;
46
+ estimatedUsd: number;
47
+ count: number;
48
+ }>;
49
+ }
50
+ export interface AIRunOperatorView {
51
+ runId?: string;
52
+ source: string;
53
+ title?: string;
54
+ outcome: string;
55
+ failureClass: string;
56
+ nextAction?: string;
57
+ warnings: string[];
58
+ timeline: AIRunTimelineItem[];
59
+ qaHealth: AIRunQaHealth;
60
+ costPanel: AIRunCostPanel;
61
+ trainingExample: ReturnType<typeof buildAIRunTrainingExampleFromRun>;
62
+ }
63
+ export declare function buildAIRunTimeline(run: AIRun): AIRunTimelineItem[];
64
+ export declare function buildAIRunQaHealth(run: AIRun): AIRunQaHealth;
65
+ export declare function buildAIRunCostPanel(cost?: AIRunCost): AIRunCostPanel;
66
+ export declare function buildAIRunFalsePassWarnings(run: AIRun): string[];
67
+ export declare function buildAIRunOperatorView(run: AIRun): AIRunOperatorView;
@@ -0,0 +1,309 @@
1
+ "use strict";
2
+ var __values = (this && this.__values) || function(o) {
3
+ var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
4
+ if (m) return m.call(o);
5
+ if (o && typeof o.length === "number") return {
6
+ next: function () {
7
+ if (o && i >= o.length) o = void 0;
8
+ return { value: o && o[i++], done: !o };
9
+ }
10
+ };
11
+ throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
12
+ };
13
+ var __read = (this && this.__read) || function (o, n) {
14
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
15
+ if (!m) return o;
16
+ var i = m.call(o), r, ar = [], e;
17
+ try {
18
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
19
+ }
20
+ catch (error) { e = { error: error }; }
21
+ finally {
22
+ try {
23
+ if (r && !r.done && (m = i["return"])) m.call(i);
24
+ }
25
+ finally { if (e) throw e.error; }
26
+ }
27
+ return ar;
28
+ };
29
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
30
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
31
+ if (ar || !(i in from)) {
32
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
33
+ ar[i] = from[i];
34
+ }
35
+ }
36
+ return to.concat(ar || Array.prototype.slice.call(from));
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.buildAIRunTimeline = buildAIRunTimeline;
40
+ exports.buildAIRunQaHealth = buildAIRunQaHealth;
41
+ exports.buildAIRunCostPanel = buildAIRunCostPanel;
42
+ exports.buildAIRunFalsePassWarnings = buildAIRunFalsePassWarnings;
43
+ exports.buildAIRunOperatorView = buildAIRunOperatorView;
44
+ var ai_run_evidence_eval_1 = require("./ai-run-evidence-eval");
45
+ function cleanText(value, max) {
46
+ if (max === void 0) { max = 1000; }
47
+ return String(value || '').replace(/\s+/g, ' ').trim().slice(0, max);
48
+ }
49
+ function toIso(value) {
50
+ if (value instanceof Date && Number.isFinite(value.getTime())) {
51
+ return value.toISOString();
52
+ }
53
+ if (value) {
54
+ var parsed = new Date(value);
55
+ if (Number.isFinite(parsed.getTime())) {
56
+ return parsed.toISOString();
57
+ }
58
+ }
59
+ return undefined;
60
+ }
61
+ function countStatuses(values) {
62
+ var e_1, _a;
63
+ var result = {
64
+ pass: 0,
65
+ fail: 0,
66
+ blocked: 0,
67
+ warn: 0,
68
+ unknown: 0
69
+ };
70
+ try {
71
+ for (var values_1 = __values(values), values_1_1 = values_1.next(); !values_1_1.done; values_1_1 = values_1.next()) {
72
+ var value = values_1_1.value;
73
+ var status_1 = cleanText(value.status, 40).toLowerCase();
74
+ if (status_1 === 'pass' || status_1 === 'fail' || status_1 === 'blocked' || status_1 === 'warn') {
75
+ result[status_1] += 1;
76
+ }
77
+ else {
78
+ result.unknown += 1;
79
+ }
80
+ }
81
+ }
82
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
83
+ finally {
84
+ try {
85
+ if (values_1_1 && !values_1_1.done && (_a = values_1.return)) _a.call(values_1);
86
+ }
87
+ finally { if (e_1) throw e_1.error; }
88
+ }
89
+ return result;
90
+ }
91
+ function sortTimeline(items) {
92
+ return __spreadArray([], __read(items), false).sort(function (left, right) {
93
+ var leftTime = left.time ? new Date(left.time).getTime() : 0;
94
+ var rightTime = right.time ? new Date(right.time).getTime() : 0;
95
+ return leftTime - rightTime;
96
+ });
97
+ }
98
+ function buildAIRunTimeline(run) {
99
+ var e_2, _a, e_3, _b, e_4, _c, e_5, _d, e_6, _e;
100
+ var _f, _g, _h, _j;
101
+ var items = [];
102
+ try {
103
+ for (var _k = __values(run.events || []), _l = _k.next(); !_l.done; _l = _k.next()) {
104
+ var event_1 = _l.value;
105
+ items.push({
106
+ time: toIso(event_1.recordedAt),
107
+ type: event_1.type,
108
+ label: event_1.category || event_1.type,
109
+ message: cleanText(event_1.message, 2000),
110
+ evidenceRefs: Array.isArray(event_1.artifactPaths) ? event_1.artifactPaths : [],
111
+ metadata: event_1.metadata
112
+ });
113
+ }
114
+ }
115
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
116
+ finally {
117
+ try {
118
+ if (_l && !_l.done && (_a = _k.return)) _a.call(_k);
119
+ }
120
+ finally { if (e_2) throw e_2.error; }
121
+ }
122
+ try {
123
+ for (var _m = __values(run.gates || []), _o = _m.next(); !_o.done; _o = _m.next()) {
124
+ var gate = _o.value;
125
+ items.push({
126
+ time: toIso(gate.recordedAt),
127
+ type: 'gate',
128
+ label: gate.label || gate.key,
129
+ status: gate.status,
130
+ message: gate.reason,
131
+ evidenceRefs: gate.evidenceRefs || [],
132
+ metadata: gate.metadata
133
+ });
134
+ }
135
+ }
136
+ catch (e_3_1) { e_3 = { error: e_3_1 }; }
137
+ finally {
138
+ try {
139
+ if (_o && !_o.done && (_b = _m.return)) _b.call(_m);
140
+ }
141
+ finally { if (e_3) throw e_3.error; }
142
+ }
143
+ try {
144
+ for (var _p = __values(((_f = run.qa) === null || _f === void 0 ? void 0 : _f.infraChecks) || []), _q = _p.next(); !_q.done; _q = _p.next()) {
145
+ var check = _q.value;
146
+ items.push({
147
+ time: toIso(check.checkedAt),
148
+ type: 'qa_infra',
149
+ label: check.name,
150
+ status: check.status,
151
+ message: check.message,
152
+ evidenceRefs: check.path ? [check.path] : [],
153
+ metadata: check.metadata
154
+ });
155
+ }
156
+ }
157
+ catch (e_4_1) { e_4 = { error: e_4_1 }; }
158
+ finally {
159
+ try {
160
+ if (_q && !_q.done && (_c = _p.return)) _c.call(_p);
161
+ }
162
+ finally { if (e_4) throw e_4.error; }
163
+ }
164
+ if ((_g = run.qa) === null || _g === void 0 ? void 0 : _g.compile) {
165
+ items.push({
166
+ time: toIso(run.qa.compile.recordedAt),
167
+ type: 'qa_compile',
168
+ label: run.qa.compile.command || 'Compile/build',
169
+ status: run.qa.compile.status,
170
+ message: run.qa.compile.message,
171
+ evidenceRefs: run.qa.compile.artifactPath ? [run.qa.compile.artifactPath] : [],
172
+ metadata: run.qa.compile.metadata
173
+ });
174
+ }
175
+ try {
176
+ for (var _r = __values(((_h = run.qa) === null || _h === void 0 ? void 0 : _h.routeProbes) || []), _s = _r.next(); !_s.done; _s = _r.next()) {
177
+ var probe = _s.value;
178
+ items.push({
179
+ time: toIso(probe.recordedAt),
180
+ type: 'qa_route_probe',
181
+ label: probe.route,
182
+ status: probe.status,
183
+ message: probe.message || probe.caption,
184
+ evidenceRefs: probe.screenshot ? [probe.screenshot] : [],
185
+ metadata: probe.metadata
186
+ });
187
+ }
188
+ }
189
+ catch (e_5_1) { e_5 = { error: e_5_1 }; }
190
+ finally {
191
+ try {
192
+ if (_s && !_s.done && (_d = _r.return)) _d.call(_r);
193
+ }
194
+ finally { if (e_5) throw e_5.error; }
195
+ }
196
+ try {
197
+ for (var _t = __values(((_j = run.qa) === null || _j === void 0 ? void 0 : _j.businessAssertions) || []), _u = _t.next(); !_u.done; _u = _t.next()) {
198
+ var assertion = _u.value;
199
+ items.push({
200
+ time: toIso(assertion.recordedAt),
201
+ type: 'qa_business_assertion',
202
+ label: assertion.assertion,
203
+ status: assertion.status,
204
+ message: assertion.observed || assertion.dataProof || assertion.message,
205
+ evidenceRefs: assertion.artifactPaths || [],
206
+ metadata: assertion.metadata
207
+ });
208
+ }
209
+ }
210
+ catch (e_6_1) { e_6 = { error: e_6_1 }; }
211
+ finally {
212
+ try {
213
+ if (_u && !_u.done && (_e = _t.return)) _e.call(_t);
214
+ }
215
+ finally { if (e_6) throw e_6.error; }
216
+ }
217
+ return sortTimeline(items);
218
+ }
219
+ function buildAIRunQaHealth(run) {
220
+ var _a, _b, _c, _d, _e;
221
+ var infraCounts = countStatuses(((_a = run.qa) === null || _a === void 0 ? void 0 : _a.infraChecks) || []);
222
+ var routeProbes = ((_b = run.qa) === null || _b === void 0 ? void 0 : _b.routeProbes) || [];
223
+ var routePass = routeProbes.filter(function (probe) { return probe.status === 'pass' && probe.shellOnly !== true; }).length;
224
+ var routeFail = routeProbes.filter(function (probe) { return probe.status === 'fail' || probe.status === 'blocked'; }).length;
225
+ var shellOnly = routeProbes.filter(function (probe) { return probe.shellOnly === true; }).length;
226
+ var assertions = ((_c = run.qa) === null || _c === void 0 ? void 0 : _c.businessAssertions) || [];
227
+ var businessPass = assertions.filter(function (assertion) { return assertion.status === 'pass'; }).length;
228
+ var businessFail = assertions.filter(function (assertion) { return assertion.status === 'fail'; }).length;
229
+ var businessBlocked = assertions.filter(function (assertion) { return assertion.status === 'blocked'; }).length;
230
+ return {
231
+ outcome: (_d = run.qa) === null || _d === void 0 ? void 0 : _d.outcome,
232
+ infra: {
233
+ pass: infraCounts.pass,
234
+ fail: infraCounts.fail,
235
+ blocked: infraCounts.blocked,
236
+ warn: infraCounts.warn,
237
+ unknown: infraCounts.unknown
238
+ },
239
+ compile: ((_e = run.qa) === null || _e === void 0 ? void 0 : _e.compile) ? {
240
+ status: run.qa.compile.status,
241
+ stale: run.qa.compile.staleEvidence === true || run.qa.compile.status === 'stale',
242
+ artifactPath: run.qa.compile.artifactPath,
243
+ message: run.qa.compile.message
244
+ } : undefined,
245
+ route: {
246
+ pass: routePass,
247
+ fail: routeFail,
248
+ shellOnly: shellOnly
249
+ },
250
+ business: {
251
+ pass: businessPass,
252
+ fail: businessFail,
253
+ blocked: businessBlocked,
254
+ missing: assertions.length === 0
255
+ }
256
+ };
257
+ }
258
+ function buildAIRunCostPanel(cost) {
259
+ var categories = Object.keys((cost === null || cost === void 0 ? void 0 : cost.categories) || {}).sort().map(function (category) {
260
+ var _a;
261
+ var entry = (_a = cost === null || cost === void 0 ? void 0 : cost.categories) === null || _a === void 0 ? void 0 : _a[category];
262
+ return {
263
+ category: category,
264
+ totalTokens: Number((entry === null || entry === void 0 ? void 0 : entry.totalTokens) || 0),
265
+ estimatedUsd: Number((entry === null || entry === void 0 ? void 0 : entry.estimatedUsd) || 0),
266
+ count: Number((entry === null || entry === void 0 ? void 0 : entry.count) || 0)
267
+ };
268
+ });
269
+ return {
270
+ totalTokens: Number((cost === null || cost === void 0 ? void 0 : cost.totalTokens) || 0),
271
+ estimatedUsd: Number((cost === null || cost === void 0 ? void 0 : cost.estimatedUsd) || 0),
272
+ models: Array.isArray(cost === null || cost === void 0 ? void 0 : cost.models) ? cost.models : [],
273
+ categories: categories
274
+ };
275
+ }
276
+ function buildAIRunFalsePassWarnings(run) {
277
+ var _a, _b, _c, _d;
278
+ var warnings = Array.isArray(run.warnings) ? __spreadArray([], __read(run.warnings), false) : [];
279
+ if (run.outcome === 'false_pass' && !warnings.includes('false_pass_outcome')) {
280
+ warnings.push('false_pass_outcome');
281
+ }
282
+ if ((((_a = run.qa) === null || _a === void 0 ? void 0 : _a.outcome) === 'route_only_pass' || ((_b = run.qa) === null || _b === void 0 ? void 0 : _b.outcome) === 'incomplete') && !warnings.includes('missing_business_assertion')) {
283
+ warnings.push('missing_business_assertion');
284
+ }
285
+ if (((_d = (_c = run.qa) === null || _c === void 0 ? void 0 : _c.routeProbes) === null || _d === void 0 ? void 0 : _d.some(function (probe) { return probe.shellOnly === true; })) && !warnings.includes('shell_only_route')) {
286
+ warnings.push('shell_only_route');
287
+ }
288
+ if (run.outcome === 'release_blocked' && !warnings.includes('release_blocked_after_scorecard')) {
289
+ warnings.push('release_blocked_after_scorecard');
290
+ }
291
+ return warnings;
292
+ }
293
+ function buildAIRunOperatorView(run) {
294
+ return {
295
+ runId: run.id || run._id,
296
+ source: run.source,
297
+ title: run.title,
298
+ outcome: run.outcome,
299
+ failureClass: (0, ai_run_evidence_eval_1.classifyAIRunFailureClass)(run),
300
+ nextAction: run.nextAction,
301
+ warnings: buildAIRunFalsePassWarnings(run),
302
+ timeline: buildAIRunTimeline(run),
303
+ qaHealth: buildAIRunQaHealth(run),
304
+ costPanel: buildAIRunCostPanel(run.cost),
305
+ trainingExample: (0, ai_run_evidence_eval_1.buildAIRunTrainingExampleFromRun)(run)
306
+ };
307
+ }
308
+
309
+ //# sourceMappingURL=ai-run-evidence-dashboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/util/ai-run-evidence-dashboard.ts"],"names":[],"mappings":"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","file":"ai-run-evidence-dashboard.js","sourcesContent":["import { AIRun, AIRunCost } from './ai-run-evidence';\nimport { buildAIRunTrainingExampleFromRun, classifyAIRunFailureClass } from './ai-run-evidence-eval';\n\nexport interface AIRunTimelineItem {\n\ttime?: string;\n\ttype: string;\n\tlabel: string;\n\tstatus?: string;\n\tmessage?: string;\n\tevidenceRefs: string[];\n\tmetadata?: Record<string, any>;\n}\n\nexport interface AIRunQaHealth {\n\toutcome?: string;\n\tinfra: {\n\t\tpass: number;\n\t\tfail: number;\n\t\tblocked: number;\n\t\twarn: number;\n\t\tunknown: number;\n\t};\n\tcompile?: {\n\t\tstatus?: string;\n\t\tstale?: boolean;\n\t\tartifactPath?: string;\n\t\tmessage?: string;\n\t};\n\troute: {\n\t\tpass: number;\n\t\tfail: number;\n\t\tshellOnly: number;\n\t};\n\tbusiness: {\n\t\tpass: number;\n\t\tfail: number;\n\t\tblocked: number;\n\t\tmissing: boolean;\n\t};\n}\n\nexport interface AIRunCostPanel {\n\ttotalTokens: number;\n\testimatedUsd: number;\n\tmodels: string[];\n\tcategories: Array<{\n\t\tcategory: string;\n\t\ttotalTokens: number;\n\t\testimatedUsd: number;\n\t\tcount: number;\n\t}>;\n}\n\nexport interface AIRunOperatorView {\n\trunId?: string;\n\tsource: string;\n\ttitle?: string;\n\toutcome: string;\n\tfailureClass: string;\n\tnextAction?: string;\n\twarnings: string[];\n\ttimeline: AIRunTimelineItem[];\n\tqaHealth: AIRunQaHealth;\n\tcostPanel: AIRunCostPanel;\n\ttrainingExample: ReturnType<typeof buildAIRunTrainingExampleFromRun>;\n}\n\nfunction cleanText(value: any, max = 1000): string {\n\treturn String(value || '').replace(/\\s+/g, ' ').trim().slice(0, max);\n}\n\nfunction toIso(value: any): string | undefined {\n\tif (value instanceof Date && Number.isFinite(value.getTime())) {\n\t\treturn value.toISOString();\n\t}\n\tif (value) {\n\t\tconst parsed = new Date(value);\n\t\tif (Number.isFinite(parsed.getTime())) {\n\t\t\treturn parsed.toISOString();\n\t\t}\n\t}\n\treturn undefined;\n}\n\nfunction countStatuses(values: Array<{ status?: string }>): Record<string, number> {\n\tconst result: Record<string, number> = {\n\t\tpass: 0,\n\t\tfail: 0,\n\t\tblocked: 0,\n\t\twarn: 0,\n\t\tunknown: 0\n\t};\n\tfor (const value of values) {\n\t\tconst status = cleanText(value.status, 40).toLowerCase();\n\t\tif (status === 'pass' || status === 'fail' || status === 'blocked' || status === 'warn') {\n\t\t\tresult[status] += 1;\n\t\t}\n\t\telse {\n\t\t\tresult.unknown += 1;\n\t\t}\n\t}\n\treturn result;\n}\n\nfunction sortTimeline(items: AIRunTimelineItem[]): AIRunTimelineItem[] {\n\treturn [...items].sort((left, right) => {\n\t\tconst leftTime = left.time ? new Date(left.time).getTime() : 0;\n\t\tconst rightTime = right.time ? new Date(right.time).getTime() : 0;\n\t\treturn leftTime - rightTime;\n\t});\n}\n\nexport function buildAIRunTimeline(run: AIRun): AIRunTimelineItem[] {\n\tconst items: AIRunTimelineItem[] = [];\n\tfor (const event of run.events || []) {\n\t\titems.push({\n\t\t\ttime: toIso(event.recordedAt),\n\t\t\ttype: event.type,\n\t\t\tlabel: event.category || event.type,\n\t\t\tmessage: cleanText(event.message, 2000),\n\t\t\tevidenceRefs: Array.isArray(event.artifactPaths) ? event.artifactPaths : [],\n\t\t\tmetadata: event.metadata\n\t\t});\n\t}\n\tfor (const gate of run.gates || []) {\n\t\titems.push({\n\t\t\ttime: toIso(gate.recordedAt),\n\t\t\ttype: 'gate',\n\t\t\tlabel: gate.label || gate.key,\n\t\t\tstatus: gate.status,\n\t\t\tmessage: gate.reason,\n\t\t\tevidenceRefs: gate.evidenceRefs || [],\n\t\t\tmetadata: gate.metadata\n\t\t});\n\t}\n\tfor (const check of run.qa?.infraChecks || []) {\n\t\titems.push({\n\t\t\ttime: toIso(check.checkedAt),\n\t\t\ttype: 'qa_infra',\n\t\t\tlabel: check.name,\n\t\t\tstatus: check.status,\n\t\t\tmessage: check.message,\n\t\t\tevidenceRefs: check.path ? [check.path] : [],\n\t\t\tmetadata: check.metadata\n\t\t});\n\t}\n\tif (run.qa?.compile) {\n\t\titems.push({\n\t\t\ttime: toIso(run.qa.compile.recordedAt),\n\t\t\ttype: 'qa_compile',\n\t\t\tlabel: run.qa.compile.command || 'Compile/build',\n\t\t\tstatus: run.qa.compile.status,\n\t\t\tmessage: run.qa.compile.message,\n\t\t\tevidenceRefs: run.qa.compile.artifactPath ? [run.qa.compile.artifactPath] : [],\n\t\t\tmetadata: run.qa.compile.metadata\n\t\t});\n\t}\n\tfor (const probe of run.qa?.routeProbes || []) {\n\t\titems.push({\n\t\t\ttime: toIso(probe.recordedAt),\n\t\t\ttype: 'qa_route_probe',\n\t\t\tlabel: probe.route,\n\t\t\tstatus: probe.status,\n\t\t\tmessage: probe.message || probe.caption,\n\t\t\tevidenceRefs: probe.screenshot ? [probe.screenshot] : [],\n\t\t\tmetadata: probe.metadata\n\t\t});\n\t}\n\tfor (const assertion of run.qa?.businessAssertions || []) {\n\t\titems.push({\n\t\t\ttime: toIso(assertion.recordedAt),\n\t\t\ttype: 'qa_business_assertion',\n\t\t\tlabel: assertion.assertion,\n\t\t\tstatus: assertion.status,\n\t\t\tmessage: assertion.observed || assertion.dataProof || assertion.message,\n\t\t\tevidenceRefs: assertion.artifactPaths || [],\n\t\t\tmetadata: assertion.metadata\n\t\t});\n\t}\n\treturn sortTimeline(items);\n}\n\nexport function buildAIRunQaHealth(run: AIRun): AIRunQaHealth {\n\tconst infraCounts = countStatuses(run.qa?.infraChecks || []);\n\tconst routeProbes = run.qa?.routeProbes || [];\n\tconst routePass = routeProbes.filter((probe) => probe.status === 'pass' && probe.shellOnly !== true).length;\n\tconst routeFail = routeProbes.filter((probe) => probe.status === 'fail' || probe.status === 'blocked').length;\n\tconst shellOnly = routeProbes.filter((probe) => probe.shellOnly === true).length;\n\tconst assertions = run.qa?.businessAssertions || [];\n\tconst businessPass = assertions.filter((assertion) => assertion.status === 'pass').length;\n\tconst businessFail = assertions.filter((assertion) => assertion.status === 'fail').length;\n\tconst businessBlocked = assertions.filter((assertion) => assertion.status === 'blocked').length;\n\treturn {\n\t\toutcome: run.qa?.outcome,\n\t\tinfra: {\n\t\t\tpass: infraCounts.pass,\n\t\t\tfail: infraCounts.fail,\n\t\t\tblocked: infraCounts.blocked,\n\t\t\twarn: infraCounts.warn,\n\t\t\tunknown: infraCounts.unknown\n\t\t},\n\t\tcompile: run.qa?.compile ? {\n\t\t\tstatus: run.qa.compile.status,\n\t\t\tstale: run.qa.compile.staleEvidence === true || run.qa.compile.status === 'stale',\n\t\t\tartifactPath: run.qa.compile.artifactPath,\n\t\t\tmessage: run.qa.compile.message\n\t\t} : undefined,\n\t\troute: {\n\t\t\tpass: routePass,\n\t\t\tfail: routeFail,\n\t\t\tshellOnly\n\t\t},\n\t\tbusiness: {\n\t\t\tpass: businessPass,\n\t\t\tfail: businessFail,\n\t\t\tblocked: businessBlocked,\n\t\t\tmissing: assertions.length === 0\n\t\t}\n\t};\n}\n\nexport function buildAIRunCostPanel(cost?: AIRunCost): AIRunCostPanel {\n\tconst categories = Object.keys(cost?.categories || {}).sort().map((category) => {\n\t\tconst entry = cost?.categories?.[category];\n\t\treturn {\n\t\t\tcategory,\n\t\t\ttotalTokens: Number(entry?.totalTokens || 0),\n\t\t\testimatedUsd: Number(entry?.estimatedUsd || 0),\n\t\t\tcount: Number(entry?.count || 0)\n\t\t};\n\t});\n\treturn {\n\t\ttotalTokens: Number(cost?.totalTokens || 0),\n\t\testimatedUsd: Number(cost?.estimatedUsd || 0),\n\t\tmodels: Array.isArray(cost?.models) ? cost.models : [],\n\t\tcategories\n\t};\n}\n\nexport function buildAIRunFalsePassWarnings(run: AIRun): string[] {\n\tconst warnings = Array.isArray(run.warnings) ? [...run.warnings] : [];\n\tif (run.outcome === 'false_pass' && !warnings.includes('false_pass_outcome')) {\n\t\twarnings.push('false_pass_outcome');\n\t}\n\tif ((run.qa?.outcome === 'route_only_pass' || run.qa?.outcome === 'incomplete') && !warnings.includes('missing_business_assertion')) {\n\t\twarnings.push('missing_business_assertion');\n\t}\n\tif (run.qa?.routeProbes?.some((probe) => probe.shellOnly === true) && !warnings.includes('shell_only_route')) {\n\t\twarnings.push('shell_only_route');\n\t}\n\tif (run.outcome === 'release_blocked' && !warnings.includes('release_blocked_after_scorecard')) {\n\t\twarnings.push('release_blocked_after_scorecard');\n\t}\n\treturn warnings;\n}\n\nexport function buildAIRunOperatorView(run: AIRun): AIRunOperatorView {\n\treturn {\n\t\trunId: run.id || (run as any)._id,\n\t\tsource: run.source,\n\t\ttitle: run.title,\n\t\toutcome: run.outcome,\n\t\tfailureClass: classifyAIRunFailureClass(run),\n\t\tnextAction: run.nextAction,\n\t\twarnings: buildAIRunFalsePassWarnings(run),\n\t\ttimeline: buildAIRunTimeline(run),\n\t\tqaHealth: buildAIRunQaHealth(run),\n\t\tcostPanel: buildAIRunCostPanel(run.cost),\n\t\ttrainingExample: buildAIRunTrainingExampleFromRun(run)\n\t};\n}\n"]}
@@ -0,0 +1,86 @@
1
+ import { AIRun, AIRunOutcomeLabel, AIRunSource, AIRunTrainingExample } from './ai-run-evidence';
2
+ export type AIRunFailureClass = 'none' | 'infra' | 'compile' | 'route' | 'business' | 'release' | 'false_pass' | 'assistant_correctness' | 'manual' | 'stopped' | 'unknown';
3
+ export type AIRunRetryAction = 'none' | 'stop' | 'retry_infra_repair' | 'retry_build_repair' | 'retry_route_repair' | 'retry_business_repair' | 'retry_release_repair' | 'manual_handoff';
4
+ export interface AIRunEvalExpectedGate {
5
+ key: string;
6
+ status?: string;
7
+ }
8
+ export interface AIRunEvalExpected {
9
+ outcome: AIRunOutcomeLabel;
10
+ failureClass?: AIRunFailureClass;
11
+ nextActionIncludes?: string;
12
+ gates?: AIRunEvalExpectedGate[];
13
+ }
14
+ export interface AIRunEvalFixture {
15
+ id: string;
16
+ title: string;
17
+ source: AIRunSource;
18
+ run: AIRun;
19
+ expected: AIRunEvalExpected;
20
+ tags: string[];
21
+ }
22
+ export interface AIRunEvalResult {
23
+ id: string;
24
+ title: string;
25
+ source: AIRunSource;
26
+ passed: boolean;
27
+ actualOutcome: AIRunOutcomeLabel;
28
+ expectedOutcome: AIRunOutcomeLabel;
29
+ actualFailureClass: AIRunFailureClass;
30
+ expectedFailureClass?: AIRunFailureClass;
31
+ failures: string[];
32
+ tags: string[];
33
+ }
34
+ export interface AIRunEvalSummary {
35
+ passed: boolean;
36
+ total: number;
37
+ passedCount: number;
38
+ failedCount: number;
39
+ results: AIRunEvalResult[];
40
+ failuresByTag: Record<string, number>;
41
+ outcomes: Record<string, number>;
42
+ }
43
+ export interface AIRunDatasetExport {
44
+ generatedAt: string;
45
+ totalRuns: number;
46
+ summary: {
47
+ bySource: Record<string, number>;
48
+ byOutcome: Record<string, number>;
49
+ byFailureClass: Record<string, number>;
50
+ estimatedUsd: number;
51
+ totalTokens: number;
52
+ };
53
+ runs: AIRun[];
54
+ trainingExamples: AIRunTrainingExample[];
55
+ }
56
+ export interface AIRunDatasetExportOptions {
57
+ redact?: boolean;
58
+ includeRuns?: boolean;
59
+ maxEvidenceItems?: number;
60
+ now?: Date | string;
61
+ }
62
+ export interface AIRunRetryPolicyInput {
63
+ currentRun: AIRun;
64
+ previousRun?: AIRun;
65
+ newEvidenceCount?: number;
66
+ unchangedFailureLimit?: number;
67
+ sameFailureCount?: number;
68
+ historicalAcceptanceRate?: number;
69
+ estimatedNextRetryCostUsd?: number;
70
+ minRetryExpectedValue?: number;
71
+ }
72
+ export interface AIRunRetryDecision {
73
+ action: AIRunRetryAction;
74
+ failureClass: AIRunFailureClass;
75
+ repeatedFailure: boolean;
76
+ reason: string;
77
+ nextAction: string;
78
+ retryExpectedValue?: number;
79
+ }
80
+ export declare function classifyAIRunFailureClass(run: AIRun): AIRunFailureClass;
81
+ export declare function evaluateAIRunFixture(fixture: AIRunEvalFixture): AIRunEvalResult;
82
+ export declare function evaluateAIRunFixtures(fixtures?: AIRunEvalFixture[]): AIRunEvalSummary;
83
+ export declare function buildAIRunTrainingExampleFromRun(run: AIRun, maxEvidenceItems?: number): AIRunTrainingExample;
84
+ export declare function buildAIRunDatasetExport(runs: AIRun[], options?: AIRunDatasetExportOptions): AIRunDatasetExport;
85
+ export declare function decideAIRunRetry(input: AIRunRetryPolicyInput): AIRunRetryDecision;
86
+ export declare const AI_RUN_SEED_EVAL_FIXTURES: AIRunEvalFixture[];