























@@ -8,6 +8,7 @@ export type MeetingNotesSummary = {
88title: string;
99generatedAt: string;
1010overview: string;
11+transcript: string[];
1112decisions: string[];
1213actionItems: string[];
1314risks: string[];
@@ -36,14 +37,24 @@ function firstSentences(utterances: MeetingNotesUtterance[], limit: number): str
3637function collectMatches(utterances: MeetingNotesUtterance[], pattern: RegExp): string[] {
3738return utterances
3839.filter((utterance) => pattern.test(utterance.text))
39-.map((utterance) => {
40-const speaker = utterance.speaker?.label ? `${utterance.speaker.label}: ` : "";
41-return `${speaker}${utterance.text.trim()}`;
42-})
40+.map(formatSpeakerLine)
4341.filter(Boolean)
4442.slice(0, 12);
4543}
464445+function formatSpeakerLine(utterance: MeetingNotesUtterance): string {
46+const text = utterance.text.trim();
47+if (!text) {
48+return "";
49+}
50+const speaker = utterance.speaker?.label?.trim();
51+return speaker ? `${speaker}: ${text}` : text;
52+}
53+54+function formatTranscript(utterances: MeetingNotesUtterance[]): string[] {
55+return utterances.map(formatSpeakerLine).filter(Boolean);
56+}
57+4758export function summarizeMeetingNotes(params: {
4859session: MeetingNotesSessionDescriptor;
4960utterances: MeetingNotesUtterance[];
@@ -55,6 +66,7 @@ export function summarizeMeetingNotes(params: {
5566 title,
5667generatedAt: new Date().toISOString(),
5768 overview,
69+transcript: formatTranscript(params.utterances),
5870decisions: collectMatches(params.utterances, DECISION_PATTERNS),
5971actionItems: collectMatches(params.utterances, ACTION_PATTERNS),
6072risks: collectMatches(params.utterances, RISK_PATTERNS),
@@ -76,6 +88,9 @@ export function renderMeetingNotesMarkdown(summary: MeetingNotesSummary): string
7688"## Overview",
7789summary.overview,
7890"",
91+"## Transcript",
92+renderList(summary.transcript),
93+"",
7994"## Decisions",
8095renderList(summary.decisions),
8196"",
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。