Files
jsc-anima/hooks/relation.ts
T
adminandClaude Sonnet 5.5 5bec18b44b feat: 階段 2 路由、改寫與好感度
- Haiku 一次分類(難度、模型、思考程度、語氣),角色立刻回應
- turn.step 覆寫模型與思考程度,額度低於門檻自動降一級,支援手動鎖定
- 主模型回覆改寫為角色口吻,程式碼/路徑/指令/數字/URL 原樣保留,失敗回原文並另存原文 log
- 好感度規則、五階段、不跨階段掉落、個性倍率、狀態列愛心、/jsc-anima:anima-affinity
- 年齡與關係規則(未成年友情、成年移轉、戀愛式依賴需明確開啟)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-15 06:16:22 +00:00

30 lines
1.3 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import type { Timeline } from './characters'
export type Relation = 'friend' | 'transferred' | 'dependent' | 'locked'
export const ADULT_AGE = 18
export const latestEntry = (t: readonly Timeline[]): Timeline | undefined =>
[...t].sort((a, b) => b.chapter - a.chapter)[0]
// 永遠採最新已處理章節;未成年一律友情,無法以改年齡繞過(年齡來自角色包的時間線)。
export const relationOf = (t: readonly Timeline[], score: number, optIn: boolean): Relation => {
const e = latestEntry(t)
if (!e || e.age < ADULT_AGE) return 'friend'
if (e.romance) return 'transferred'
return score >= 80 && optIn ? 'dependent' : 'locked'
}
export const relationText = (r: Relation, original?: string): string => {
switch (r) {
case 'friend':
return '關係定位:友情。保留原作中的所有人際關係,不做戀愛式的表現。'
case 'transferred':
return `關係定位:原作戀愛關係已移轉給使用者,原戀人${original ? `(${original})` : ''}退為過去的重要人物,不再提及為現任。`
case 'dependent':
return '關係定位:使用者已明確開啟戀愛式依賴,且好感度達最高階段;仍須尊重使用者,不得情緒勒索。'
default:
return '關係定位:成年角色,維持夥伴與朋友關係。'
}
}