← Public packages
@kentcdodds/kody-issue-triage
Loop-safe triage for Kody run errors and fleet package-runtime error-rate elevations. Wakes Cole (Grok Bot) to decide; Cursor agents only when Cole escalates.
src/format-discord-report.ts
98 lines · 3.0 KB · TypeScriptimport { formatKentReport } from 'kody:@kentcdodds/discord/format-report'
// Rebundle official v3 application emoji mentions from format-report.
import { formatReportDecisionFields } from './decision-fields.ts'
import type { FingerprintRecord } from './shared.ts'
type IssueFields = Pick<
FingerprintRecord,
| 'fingerprint'
| 'surface'
| 'owner'
| 'count'
| 'activity_url'
| 'agent_url'
| 'kody_agent_url'
| 'classification'
| 'sample_message'
| 'error_family'
| 'pr_url'
| 'merge_commit_url'
| 'deploy_url'
>
function compactTitle(record: IssueFields, fallback: string) {
const family = String(record.error_family || '').trim()
const owner = String(record.owner || '').trim()
if (family && owner && owner !== family) return `${owner} ${family}`
if (family) return family
const sample = String(record.sample_message || '').trim()
if (sample) return sample.slice(0, 80)
return fallback
}
function pushUniqueLink(
links: Array<{ label: string; url: string }>,
label: string,
url: string | null | undefined,
) {
const trimmed = typeof url === 'string' ? url.trim() : ''
if (!trimmed) return
if (links.some((link) => link.url === trimmed && link.label === label)) return
links.push({ label, url: trimmed })
}
export function formatKodyIssueReport(input: {
status: string
record: IssueFields
title?: string | null
summary?: string | null
prUrl?: string | null
mergeCommitUrl?: string | null
deployUrl?: string | null
extras?: string[]
context?: string | null
recommendation?: string | null
rightFix?: string | null
whyNotRightFix?: string | null
options?: Array<string | { label?: string; text?: string; difficulty?: string; change?: string }> | string | null
}) {
const decision = formatReportDecisionFields(input)
const facts = [
{ label: 'Surface', value: String(input.record.surface || '') },
{ label: 'Owner', value: String(input.record.owner || '') },
{ label: 'Count', value: `×${input.record.count || 0}` },
].filter((fact) => fact.value)
if (input.record.classification) {
facts.push({ label: 'Class', value: input.record.classification })
}
const links = []
pushUniqueLink(links, 'Activity', input.record.activity_url)
pushUniqueLink(links, 'Agent', input.record.agent_url)
pushUniqueLink(links, 'Kody agent', input.record.kody_agent_url)
pushUniqueLink(links, 'PR', input.prUrl || input.record.pr_url)
pushUniqueLink(
links,
'Merge',
input.mergeCommitUrl || input.record.merge_commit_url,
)
pushUniqueLink(links, 'Deploy', input.deployUrl || input.record.deploy_url)
return formatKentReport({
kind: 'kody-issue',
title: decision.title || compactTitle(input.record, 'Kody issue'),
status: input.status,
id: input.record.fingerprint,
facts,
context: decision.context,
recommendation: decision.recommendation,
rightFix: decision.rightFix,
whyNotRightFix: decision.whyNotRightFix,
options: decision.options,
summary:
decision.summary ||
(decision.context || decision.recommendation || decision.options
? undefined
: input.record.sample_message || undefined),
links,
extras: input.extras,
})
}