feat: companion 作息、主動發話、適應度與外部素材

- 作息與疲勞、想念累積與時間感,主動發話沿用 care.ts 的冷卻、日限、靜音
- 想家與適應度(9.13)
- 獨立腳本 fetch-materials.mjs 由系統排程寫入快取,hook 只讀、不連網
- 新增 /jsc-mod-companion:materials 與 setup location=、feeds=
- 天氣微調心情基準,新聞依適應度每天最多 2 則並寫入情節記憶
- 版本 0.0.5

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-14 09:29:46 +00:00
co-authored by Claude Sonnet 5.5
parent eeed12741e
commit 7e6e323473
15 changed files with 1237 additions and 20 deletions
@@ -78,3 +78,70 @@ export function regexTag(text: string): Tag | null {
export function classify(text: string, modelTag?: string | null): Tag | null {
return regexTag(text) ?? (isTag(modelTag) ? modelTag : null)
}
// 作息與疲勞(第 9.12 章的簡化):只動精力基準,隨讀取計算、不寫回
export const SCHEDULE = {
/** 醒著超過這麼多小時後,每小時精力基準 −perHour,最多 −awakeMax */
awakeFreeH: 12,
perHour: 0.02,
awakeMax: 0.15,
/** 連續工作超過這麼多小時後,每小時 −workPerHour,最多 −workMax */
workFreeH: 1,
workPerHour: 0.03,
workMax: 0.15,
/** 使用者的睡眠時段內仍在線上(熬夜):精力基準再 −lateShift */
lateShift: 0.1,
/** 起床後這麼多小時內的「剛起床」微幅回復 */
wakeBoostH: 2,
wakeBoost: 0.03,
} as const
// 想念累積與時間感:想念 = 速度 × max(0, 離開小時 − graceH),上限 max;速度隨「想念累積速度」參數調整
export const MISSING = {
graceH: 2,
perHour: 0.03,
max: 0.8,
/** 想念達此值,回來時主動說出口 */
speakAt: 0.5,
/** 離開這麼久以上再回來,才算「回來」事件 */
returnH: 6,
} as const
// 適應度(第 9.13 章):每日 ΔA = k × (1 − A/100),k = 1.5 + 1.5 × (主動度 + 想像力)/2;本地第一次事件 +2
export const ADAPT = {
kBase: 1.5,
kSpan: 1.5,
first: 2,
/** 想家基準 = homesickMax × (1 − A/100) */
homesickMax: 0.25,
/** 想家達此值,主動說出口 */
homesickSpeakAt: 0.4,
/** 適應度達此值才聊本地新聞;達 newsTwo 時每天最多 2 則,否則 1 則 */
newsMin: 40,
newsTwo: 70,
} as const
// 外部素材:hook 不連網,只讀由排程腳本寫入的快取;過期或缺失當作沒查
export const MATERIALS = {
weatherTtlMs: 6 * 3_600_000,
newsTtlMs: 24 * 3_600_000,
/** 讀取快取的間隔,避免 band 每次重繪都讀檔 */
readEveryMs: 60_000,
newsPerDay: 2,
/** 記住已經提過的新聞連結上限 */
seenMax: 50,
/** 天氣只微調心情基準,上限 */
weatherCap: 0.06,
} as const
/** 天氣狀況(快取的標題)→ 心情基準微調 */
export const WEATHER_MOOD: Record<string, number> = {
晴: 0.04,
多雲: 0.01,
陰: -0.01,
霧: -0.02,
毛毛雨: -0.02,
雨: -0.04,
雪: 0.01,
雷雨: -0.06,
}