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], }, ]; }