feat(故事匯入): voice 語氣層與 novel 機械指令,記憶不再被劇情日期洗掉

小說匯入分兩半(使用者拍板):機械的進 CLI,判斷的留給 skill。這批是機械那半。

voice/ 新一層:samples.md 收他自己講過的原句(附對象與場合)、reactions.md 收
「事件 → 他做了什麼」。匯入流程可以直接寫這一層,SOUL.md 維持只有使用者能改——
權限界線要有實體隔離,不靠自律。每輪最多注入 3 條,全注入會變成照抄舊台詞。
歸 Wiki 區(低頻設定,跟 IDENTITY/SOUL 同一區)。

novel 子指令:init/scan/name/skip/candidate/merge/write/report/baseline。
工作區在 memory/import/<work-slug>/,歸檔案區——收斂中換一台機器要接得下去。

正名表不請使用者手打:scan 從章節抽人名候選(對話歸屬、敬稱、片假名、高頻詞),
附出現次數與上下文,猜關係節點並分 exact/alias/fuzzy/unknown 四種信心度。
names.json 分 map 與 ignore 兩塊,已確認或已 ignore 的下次掃不再列。

視角界線擋在候選驗證:know_level 除了 canon 之外必填(did/saw/told/later/none),
none 是「他不在場也沒人告訴他」,只能配 canon。**擋下來而不是自動改成 canon**——
自動改會讓抽錯的人永遠不知道自己抽錯。這是整條流程唯一沒有第二道防線的錯。

劇情時間與記憶新鮮度分成兩組欄位(踩過一次才發現):first_seen/last_seen 是
記憶的新鮮度時鐘(memoryStrength 拿 last_seen 算衰減),happened_at/happened_until
才是劇情時間。混在一起的話 2024 年劇情的記憶匯進來的那一秒就是模糊 0%,而且掉到
0% 之後 touchRecall 不再更新它,永遠回不來——實測 40 到 79 分的 event 全部出生即死。

其他:情緒只固化進欄位,一次都不呼叫 applyEmotion(逐則重放等於讓最後一章決定他的
性格);他的原句接在內文後面而不是另開 front matter 欄位,這樣它跟細節一起衰減;
writeLongTermMemory 抽出來給 consolidate 與 novel write 共用,欄位順序與預設值只有一份。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-08-03 06:20:06 +00:00
co-authored by Claude Opus 5
parent 59bbd2bc32
commit 66ecd036ea
3 changed files with 1481 additions and 49 deletions
+6 -1
View File
@@ -110,6 +110,9 @@ export const AREAS = {
"state/probe.jsonl",
"memory/short-term.jsonl",
"memory/inbox/",
// 故事匯入的工作區:一章一批 append 的候選、跳過紀錄、正名表。
// 收斂完就沒用了,但收斂中換一台機器要接得下去,所以跟著高頻區走。
"memory/import/",
"mindmap/threads/",
"journal/",
],
@@ -129,6 +132,8 @@ export const AREAS = {
"icon/",
"memory/INDEX.md",
"memory/long-term/",
// 語氣層跟 IDENTITY/SOUL 同一區:它是低頻的設定,不是每輪都在變的活狀態
"voice/",
"mindmap/semantic.mmd",
"relations/graph.json",
"relations/graph.mmd",
@@ -465,7 +470,7 @@ function statusPaths(dir) {
export const WIKI_MANIFEST = "_paths.json";
const WIKI_RESERVED = new Set(["Home.md", "Icon.md", WIKI_MANIFEST]);
const WIKI_PREFIX = { memory: "Memory", mindmap: "Mindmap", relations: "Relations" };
const WIKI_PREFIX = { memory: "Memory", mindmap: "Mindmap", relations: "Relations", voice: "Voice" };
/**
* Gitea 的 wiki **只有根目錄的 .md 會變成頁面**(1.27 實測:子目錄頁面連結 404),