feat(role): 關係狀態量化、情緒訊號放寬門檻、技能再現 recall

完成使用者交代的三項優化建議。

一、情緒訊號放寬 Stop hook 字元門檻
ROLE_CAPTURE_MIN_CHARS=240 會濾掉字數少但情緒最濃的互動。實測「我好想妳」、
「最愛妳了」、「好可愛」三句都不在原本 56 個關鍵詞內,等於最珍貴的短互動反而不被記錄。
- 補上直接情感表達關鍵詞:可愛/愛/想妳/想你/想念/捨不得/感動/謝謝/乖/厲害/
  好棒/辛苦/彆扭/忌妒/撒嬌/陪/抱,及 love/miss/cute/thank/proud
- 驗證:上述情感句全部命中,純技術指令仍正確略過

二、關係狀態量化,讓親近度成長有依據
規則要求「隨互動加深逐漸更親近」卻沒有任何數據可依據,角色只能憑感覺演,
容易忽冷忽熱。
- state.json 新增 first_activity/active_days/total_turns/positive_feedback
- mark-activity 累計輪數與活躍天數;新增 --positive 由 Stop hook 判定情緒訊號後另計,
  不與輪數混算
- 新增 relationship 子命令輸出一行摘要,SessionStart 注入 USER 區塊作為親近度依據
- 既有累積以可查證資料初始化(角色建立後的 transcript 輪數、有記憶的日期數、
  最早記憶時間);positive_feedback 刻意留空自然累積,不以記憶則數推估

三、技能再現:cues 提取線索 + recall 查詢
技能記憶只被動載入摘要且受預算限制,等於記了但用不出來。
- 記憶格式新增 cues 欄位(dumpMemory/loadMemory/apply 的 new 與 merge 路徑均支援)
- 睡眠整理提示詞要求 procedural/rule 型態必填 2 至 5 個 cues
- 新增 recall 子命令:比對總結、標籤、內容與 cues,含未整理的 inbox,
  rule/preference/procedural 加權優先
- role_load.sh 告知角色遇到似乎做過的任務或被問起過去細節時先查詢再回答
- 驗證:以不在 summary 也不在 content 的關鍵詞(bump)成功靠 cues 命中

版號 0.0.7 → 0.0.8

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Jeffery
2026-07-29 09:59:38 +08:00
co-authored by Claude Opus 5
parent 7d41343560
commit a190463b50
8 changed files with 133 additions and 10 deletions
+13
View File
@@ -234,6 +234,11 @@ EOF_DIALOG
)"
fi
# 關係狀態:讓「隨互動加深逐漸更親近」有實際依據,而非憑感覺推測
RELATIONSHIP="$(node "${SCRIPT_DIR}/memory.js" relationship --role "$ROLE" 2>/dev/null)"
RELATIONSHIP_NOTE=""
[ -n "$RELATIONSHIP" ] && RELATIONSHIP_NOTE="- 與使用者的互動累積:${RELATIONSHIP}。請以此為親近度的實際依據,隨累積自然加深,不要憑感覺忽冷忽熱。"
# 補跑判斷:cron 未執行(例如 WSL 沒開 cron 服務)時,白天啟動 CLI 補做一次整理
CATCHUP_NOTE=""
if [ "$(node "${SCRIPT_DIR}/memory.js" need-sleep --role "$ROLE" 2>/dev/null)" = "yes" ]; then
@@ -279,6 +284,7 @@ ${ROLE_PROFILE}
# 使用者理解與隱私(USER
- 個人記憶同意狀態:${CONSENT_STATUS}。
${RELATIONSHIP_NOTE}
- ${CONSENT_NOTE}
- 不了解使用者、需求背景、偏好或限制時,先詢問,不要臆測使用者的身分、能力、情緒、動機或隱私狀況。
- 使用者的偏好、能力、興趣、背景與記憶預設為私人資訊;除非使用者明確同意,不得在對外內容、議題、PR、文件、commit 或留言中透露。
@@ -297,6 +303,13 @@ ${CATCHUP_NOTE}
> \`printf 'CATEGORY: important\nSUMMARY: <一句話總結>\nTAGS: <標籤1,標籤2>\nCONTENT:\n- <要點>\n' | node "${SCRIPT_DIR}/memory.js" write --role "${ROLE}"\`
>
> CATEGORY 六選一:importantinterestnewsskilldailyother。切勿把憑證或個資寫進記憶。
> 技能再現:上面只載入了部分記憶,磁碟上還有更多。遇到似乎做過的任務、需要回想做法、
> 或使用者問起過去的決定與細節(路徑、網址、指令)時,**先查詢再回答,不要憑印象**:
>
> \`node "${SCRIPT_DIR}/memory.js" recall --role "${ROLE}" --query "<關鍵詞>" [--limit 5]\`
>
> 查詢會比對總結、標籤、內容與提取線索(cues),含尚未整理的記憶。查詢屬內部處理,不必回報。
${DIALOG_BLOCK}
EOF_CONTEXT
)"