Files
agent-radar 2ed3415fb7
Publish Claude Code Binaries / Stage and publish binaries (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-arm64 (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build linux-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build windows-amd64 (push) Canceled after 0s
Sync Tutti Agent Skills / sync (push) Canceled after 0s
Windows Agent Adapters / Test Windows agent adapters (push) Canceled after 0s
Windows Daemon Adapters / Test Windows daemon adapters (push) Canceled after 0s
Publish Tutti App Runtime / Publish runtime catalog (push) Canceled after 0s
源码快照 @ 2026-09-01 (source-only, 剔除非源码素材)
2026-09-01 20:17:27 +08:00

51 lines
1.3 KiB
TypeScript

import type { AgentPromptContentBlock } from "../../../shared/contracts/dto";
import type {
AgentComposerDraft,
AgentComposerDraftContent,
AgentComposerQuoteBlock,
AgentComposerSupplementaryBlock
} from "./agentGuiNodeTypes";
export function agentComposerDraftQuotes(
draft: AgentComposerDraftContent
): AgentComposerQuoteBlock[] {
return draft
.filter((block): block is AgentComposerQuoteBlock => block.type === "quote")
.map((quote) => ({ ...quote }));
}
export function appendAgentComposerDraftQuote(
draft: AgentComposerDraft,
quote: AgentComposerQuoteBlock
): AgentComposerDraft {
const text = quote.text.trim();
if (
!text ||
agentComposerDraftQuotes(draft).some((item) => item.text === text)
) {
return draft;
}
const supplementaryBlocks = draft.slice(
1
) as AgentComposerSupplementaryBlock[];
return [draft[0], ...supplementaryBlocks, { ...quote, text }];
}
export function agentComposerQuotePromptContent(
quotes: readonly AgentComposerQuoteBlock[]
): AgentPromptContentBlock[] {
return quotes.flatMap((quote) => {
const text = quote.text.trim();
if (!text) return [];
return [
{
type: "text" as const,
text: text
.split(/\r?\n/u)
.map((line) => `> ${line}`)
.join("\n")
}
];
});
}