import type {WorldType} from './core'; import type {CustomWorldProfile} from './customWorld'; import type {InventoryItem} from './items'; import type {Encounter, NpcPersistentState, ScenePresetInfo} from './scene'; import type { ActorNarrativeProfile, CarrierStoryFingerprint, } from './storyEngine'; export type RuntimeItemGenerationChannel = | 'treasure' | 'npc_trade' | 'npc_reward' | 'monster_drop' | 'quest_reward' | 'discovery'; export type RuntimeItemOrigin = 'catalog' | 'procedural' | 'ai_compiled'; export type RuntimeItemKind = 'equipment' | 'consumable' | 'material' | 'relic' | 'quest'; export type RuntimeItemPermanence = 'permanent' | 'timed' | 'resource'; export type RuntimeNarrativeWeight = 'light' | 'medium' | 'heavy'; export type RuntimeItemPlanSlot = 'primary' | 'secondary' | 'support'; export type RuntimeRelationAnchor = | {type: 'npc'; npcId?: string; npcName: string; roleText?: string} | {type: 'scene'; sceneId?: string; sceneName: string} | {type: 'landmark'; landmarkName: string} | {type: 'monster'; monsterId?: string; monsterName: string} | {type: 'faction'; factionName: string} | {type: 'quest'; questId?: string; questName: string}; export interface RuntimeItemMetadata { origin: RuntimeItemOrigin; generationChannel: RuntimeItemGenerationChannel; seedKey: string; relationAnchor?: RuntimeRelationAnchor; sourceReason: string; recentEventHook?: string; storyFingerprint?: CarrierStoryFingerprint | null; } export interface RuntimeItemGenerationContext { worldType: WorldType | null; customWorldProfile: CustomWorldProfile | null; sceneId: string | null; sceneName: string | null; sceneDescription: string | null; sceneTags: string[]; treasureHints: string[]; encounter: Encounter | null; encounterNpcId: string | null; encounterNpcName: string | null; encounterContextText: string | null; relatedNpcState: NpcPersistentState | null; relatedNpcNarrativeProfile?: ActorNarrativeProfile | null; relatedScene: Pick | null; recentStorySummary: string; recentActions: string[]; activeThreadIds?: string[] | null; playerCharacterId: string; playerBuildTags: string[]; playerBuildGaps: string[]; playerEquipmentTags: string[]; generationChannel: RuntimeItemGenerationChannel; } export interface RuntimeItemPlan { slot: RuntimeItemPlanSlot; itemKind: RuntimeItemKind; permanence: RuntimeItemPermanence; narrativeWeight: RuntimeNarrativeWeight; targetBuildDirection: string[]; relationAnchor: RuntimeRelationAnchor; } export interface RuntimeItemAiPromptInput { worldSummary: string; sceneSummary: string; encounterSummary: string; relatedNpcSummary: string; recentStorySummary: string; activeThreadSummary?: string; generationChannel: RuntimeItemGenerationChannel; playerBuildDirection: string[]; playerBuildGaps: string[]; desiredItemKind: string; permanence: string; } export interface RuntimeItemAiIntent { shortNameSeed: string; sourcePhrase: string; reasonToAppear: string; relationHooks: string[]; desiredBuildTags: string[]; desiredFunctionalBias: Array<'heal' | 'mana' | 'cooldown' | 'guard' | 'damage'>; tone: 'grim' | 'mysterious' | 'martial' | 'ritual' | 'survival'; visibleClue?: string; witnessMark?: string; unfinishedBusiness?: string; hiddenHook?: string; reactionHooks?: string[]; namingPattern?: string; } export interface RuntimeItemCompileBudget { rarity: InventoryItem['rarity']; buildTagLimit: number; timedBuffTagLimit: number; timedBuffDuration: number; statBudgetTier: number; } export interface DirectedRuntimeReward { primaryItem?: InventoryItem | null; supportItems: InventoryItem[]; hp?: number; mana?: number; currency?: number; storyHint?: string; }