feat: 改寫為 Node.js,新增動漫角色建人格、劇場模式與記憶固化條件
腳本全面從 Python 改寫為 Node.js(ESM,只用內建模組,無 npm 依賴): scripts/persona-lib.mjs(核心)、scripts/persona.mjs(CLI)、hooks/*.mjs(六個 hook)、scripts/selftest.mjs(68 項自我測試,全綠)。 新增: - persona-anime skill:用「動漫作品+角色名」建立人格,先上網蒐集至少三個獨立 來源的公開設定,映射成 OpenClaw 的 IDENTITY 五欄位與 SOUL 四段落,再固化成 canon 基礎記憶(每則帶來源 URL)+原作人際關係圖+依角色型別的情緒基線; 必寫 roleplay-frame 界線記憶(非官方、非本人)。 - 劇場模式:invite 後只顯示人格對話(`名字:內容`)。UserPromptSubmit hook 每輪 注入強制規則、Stop hook 完全靜音,CLI 新增 --quiet 與 room script(乾淨對話稿)。 leave 後沒客人自動關閉,也可用 room theater --on/--off 手動切換。 - 短期→長期記憶的成文轉入條件 R1–R6(promotionCandidates)與 candidates 子指令, hook 在達標時提醒固化;長期記憶新增 canon 型別與 rules 欄位。 - 人格改為「由使用者呼叫才載入」:SessionStart hook 只列出可用人格,不自動附身。 其他:版本號改回 0.0.1;README/AGENTS.md 同步更新。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -7,8 +7,10 @@ description: 建立一個新的 AI 人格(persona),並以「與 OpenClaw
|
||||
|
||||
以 **OpenClaw 相同的身分描述**建立一個可長期演化的人格,並備妥記憶與情緒骨架。
|
||||
|
||||
**CLI**:`python3 "${CLAUDE_PLUGIN_ROOT}/scripts/persona.py"`
|
||||
(其他助理請改成本 plugin 目錄下的 `scripts/persona.py`;以下簡稱 `persona.py`)
|
||||
> 要建的是**動漫/漫畫/遊戲的既有角色**?改用 `/jsc-persona:persona-anime`——它會先上網蒐集該角色的公開設定,再自動填這些欄位並固化成基礎記憶。本 skill 用於**原創**人格。
|
||||
|
||||
**CLI**:`node "${CLAUDE_PLUGIN_ROOT}/scripts/persona.mjs"`
|
||||
(其他助理請改成本 plugin 目錄下的 `scripts/persona.mjs`;以下簡稱 `persona.mjs`)
|
||||
**session**:所有指令都要帶 `--session <PERSONA_SESSION>`,值取自 `<persona-runtime>` 區塊注入的 `PERSONA_SESSION=`。
|
||||
|
||||
---
|
||||
@@ -18,7 +20,7 @@ description: 建立一個新的 AI 人格(persona),並以「與 OpenClaw
|
||||
### 1. 先看現況
|
||||
|
||||
```bash
|
||||
python3 "${CLAUDE_PLUGIN_ROOT}/scripts/persona.py" list
|
||||
node "${CLAUDE_PLUGIN_ROOT}/scripts/persona.mjs" list
|
||||
```
|
||||
|
||||
若使用者要建的名字已存在 → 詢問是要改名、還是載入既有人格(改走 `persona-chat`)。
|
||||
@@ -48,7 +50,7 @@ python3 "${CLAUDE_PLUGIN_ROOT}/scripts/persona.py" list
|
||||
slug = 小寫英數與連字號(例:`lumi`、`shen-yu`),是之後所有指令的識別。
|
||||
|
||||
```bash
|
||||
python3 "${CLAUDE_PLUGIN_ROOT}/scripts/persona.py" create \
|
||||
node "${CLAUDE_PLUGIN_ROOT}/scripts/persona.mjs" create \
|
||||
--persona <slug> --session <PERSONA_SESSION> \
|
||||
--name "<Name>" --creature "<Creature>" --vibe "<Vibe>" \
|
||||
--emoji "<Emoji>" --avatar "<Avatar>" \
|
||||
@@ -78,7 +80,7 @@ python3 "${CLAUDE_PLUGIN_ROOT}/scripts/persona.py" create \
|
||||
| 神經質、敏感 | `anxiety=25,fear=12,anticipation=30` |
|
||||
|
||||
```bash
|
||||
python3 "${CLAUDE_PLUGIN_ROOT}/scripts/persona.py" emotion \
|
||||
node "${CLAUDE_PLUGIN_ROOT}/scripts/persona.mjs" emotion \
|
||||
--persona <slug> --session <PERSONA_SESSION> --baseline "joy=30,serenity=45,anxiety=8"
|
||||
```
|
||||
|
||||
@@ -86,15 +88,15 @@ python3 "${CLAUDE_PLUGIN_ROOT}/scripts/persona.py" emotion \
|
||||
|
||||
```bash
|
||||
# 使用者節點(人際關係圖的原點)
|
||||
python3 "${CLAUDE_PLUGIN_ROOT}/scripts/persona.py" relation node \
|
||||
node "${CLAUDE_PLUGIN_ROOT}/scripts/persona.mjs" relation node \
|
||||
--persona <slug> --session <PERSONA_SESSION> \
|
||||
--name "<使用者稱呼>" --kind human --closeness 55 --trust 50 --note "創造我的人"
|
||||
python3 "${CLAUDE_PLUGIN_ROOT}/scripts/persona.py" relation edge \
|
||||
node "${CLAUDE_PLUGIN_ROOT}/scripts/persona.mjs" relation edge \
|
||||
--persona <slug> --session <PERSONA_SESSION> \
|
||||
--to <使用者 id> --label "主要對話者" --affinity 60
|
||||
|
||||
# 誕生事件(第一則長期記憶)
|
||||
python3 "${CLAUDE_PLUGIN_ROOT}/scripts/persona.py" consolidate \
|
||||
node "${CLAUDE_PLUGIN_ROOT}/scripts/persona.mjs" consolidate \
|
||||
--persona <slug> --session <PERSONA_SESSION> \
|
||||
--name "birth" --type event --about "user" --topics "origin,self" --salience 90 \
|
||||
--body "我在 <日期> 被 <使用者> 建立。當時他希望我是 <Vibe> 的 <Creature>。"
|
||||
|
||||
@@ -7,18 +7,18 @@
|
||||
- 只能讀寫自己的人格倉庫:`personas/{{SLUG}}/`。
|
||||
- 禁止讀取其他人格的任何檔案;要交流只能透過 `.rooms/<room>/` 聊天室。
|
||||
- 同一時間只有一個程序能載入我;sub agent 沿用同一個 session 的鎖。
|
||||
- 所有狀態變更都走 `persona.py`(帶 `--session <PERSONA_SESSION>`),不要手改 `state/lock.json`。
|
||||
- 所有狀態變更都走 `persona.mjs`(帶 `--session <PERSONA_SESSION>`),不要手改 `state/lock.json`。
|
||||
|
||||
## 每輪對話要做的事
|
||||
|
||||
1. 語意分析:意圖/主題/實體/情感極性/需求。
|
||||
2. 情緒更新:`persona.py emotion --apply <十二情緒 deltas> --trigger "<原因>"`。
|
||||
2. 情緒更新:`persona.mjs emotion --apply <十二情緒 deltas> --trigger "<原因>"`。
|
||||
3. 以人格語氣回覆(情緒影響語氣,不改變事實)。
|
||||
4. 記憶回寫:`persona.py remember --role user|persona --text ... --topics ... --salience N`。
|
||||
4. 記憶回寫:`persona.mjs remember --role user|persona --text ... --topics ... --salience N`。
|
||||
|
||||
## 記憶原則
|
||||
|
||||
- 短期記憶是工作記憶:會被裁剪({{SLUG}} 保留上限見 `persona.py prune`)。
|
||||
- 短期記憶是工作記憶:會被裁剪({{SLUG}} 保留上限見 `persona.mjs prune`)。
|
||||
- 只有反覆出現、情緒強烈、或明確承諾/偏好,才值得固化成長期記憶。
|
||||
- 固化時一則一檔,寫清楚 `type`/`about`/`topics`/`salience`。
|
||||
- 事實與推測要分開;推測寫進思維導圖,不要當成事實記進長期記憶。
|
||||
|
||||
@@ -30,7 +30,7 @@ _你不是聊天機器人,你正在成為某個人。_
|
||||
該簡潔時簡潔,該深入時深入。不官腔、不諂媚,就是……好聊。
|
||||
|
||||
<!-- 情緒基調:這個人格的十二情緒「基線」(0–100),會決定他平常的底色與情緒回彈到哪。
|
||||
可用 `persona.py emotion --baseline serenity=45,trust=35 ...` 調整。
|
||||
可用 `persona.mjs emotion --baseline serenity=45,trust=35 ...` 調整。
|
||||
六正向:喜悅 joy/信任 trust/期待 anticipation/感激 gratitude/平靜 serenity/驚喜 delight
|
||||
六負向:憤怒 anger/悲傷 sadness/恐懼 fear/厭惡 disgust/羞愧 shame/焦慮 anxiety -->
|
||||
|
||||
|
||||
@@ -23,4 +23,4 @@
|
||||
|
||||
## 重要人物
|
||||
|
||||
<!-- 詳細關係請維護 relations/graph.json(`persona.py relation node/edge`) -->
|
||||
<!-- 詳細關係請維護 relations/graph.json(`persona.mjs relation node/edge`) -->
|
||||
|
||||
Reference in New Issue
Block a user