58 lines
2.1 KiB
TypeScript
58 lines
2.1 KiB
TypeScript
import type { InventoryItem, ThreadContract } from '../../types';
|
|
|
|
export function buildNarrativeDocument(params: {
|
|
contract: ThreadContract;
|
|
titleSeed?: string;
|
|
}) {
|
|
const title = params.titleSeed || `${params.contract.threadId}调查简札`;
|
|
const currentStep = params.contract.steps[params.contract.visibleStage] ?? params.contract.steps[0];
|
|
const relatedThreadIds = [params.contract.threadId];
|
|
|
|
return {
|
|
id: `document:${params.contract.id}`,
|
|
category: '文书',
|
|
name: title,
|
|
quantity: 1,
|
|
rarity: 'rare',
|
|
tags: ['document', 'relic'],
|
|
description: `${title} 里记着当前线程的阶段性摘要与下一步线索。`,
|
|
runtimeMetadata: {
|
|
origin: 'ai_compiled',
|
|
generationChannel: 'quest_reward',
|
|
seedKey: `document:${params.contract.id}`,
|
|
sourceReason: `${params.contract.threadId} 当前进入了新的阶段。`,
|
|
storyFingerprint: {
|
|
visibleClue: currentStep?.revealText ?? `${title} 里写着当前线程的进展。`,
|
|
witnessMark: `${title} 记录着 ${params.contract.threadId} 这一线被谁、在何处继续推了下去。`,
|
|
unresolvedQuestion:
|
|
currentStep?.title
|
|
?? `${params.contract.threadId} 接下来还要如何继续推进?`,
|
|
currentAppearanceReason: `${params.contract.threadId} 当前进入了新的阶段。`,
|
|
relatedThreadIds,
|
|
relatedScarIds: [],
|
|
reactionHooks: [params.contract.threadId],
|
|
},
|
|
},
|
|
} satisfies InventoryItem;
|
|
}
|
|
|
|
export function compileDocumentKnowledgeFacts(params: {
|
|
document: InventoryItem;
|
|
contract: ThreadContract;
|
|
}) {
|
|
return [
|
|
{
|
|
id: `document-fact:${params.document.id}`,
|
|
title: `${params.document.name}的记录`,
|
|
content: params.contract.steps[params.contract.visibleStage]?.revealText ?? params.contract.threadId,
|
|
ownerActorIds: [],
|
|
relatedThreadIds: [params.contract.threadId],
|
|
relatedScarIds: [],
|
|
sourceType: 'document',
|
|
visibility: 'discoverable',
|
|
sayability: 'direct',
|
|
aliases: [params.document.name],
|
|
},
|
|
];
|
|
}
|