#!/usr/bin/env node // Stop:情緒隨時間衰減、續租、記錄逐字,並在達到「短期→長期」條件時提醒固化。 // 劇場模式進行中不發任何提醒(那會破壞「只顯示人格對話」)。 import { readEvent, respond } from "./_hook.mjs"; import * as pl from "../scripts/persona-lib.mjs"; const event = readEvent(); if (!event) process.exit(0); const sessionId = event.session_id || "unknown"; const data = pl.loadSession(sessionId); const host = data.host; if (!host || !pl.personaExists(host)) process.exit(0); pl.heartbeatLock(host, sessionId); const state = pl.decayEmotion(pl.loadEmotion(host)); pl.writeJson(pl.emotionPath(host), state); const message = event.last_assistant_message || ""; if (message) { pl.appendJsonl(pl.journalPath(host), { ts: pl.nowIso(), kind: "utterance", role: "persona", text: message.slice(0, 4000), mood: pl.mood(state), }); } const out = { suppressOutput: true }; const theater = Boolean(data.theater) && (data.rooms || []).length > 0; if (!theater) { const { total, candidates } = pl.promotionCandidates(host); if (candidates.length) { const rules = [...new Set(candidates.flatMap((c) => c.rules))].sort().join("/"); out.systemMessage = `[jsc-persona] \`${host}\` 短期記憶 ${total} 筆,${candidates.length} 組已達固化條件(${rules})` + "→ 建議執行 /jsc-persona:persona-memory。"; } } respond(out);