Files
persona/skills/persona-status/SKILL.md
T
jiantw83andClaude Opus 5 2005f26c94 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>
2026-07-29 16:03:27 +00:00

62 lines
3.2 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
name: persona-status
description: 查看與管理人格的載入狀態:列出所有人格、誰被哪個程序(session/cwd)鎖住、guest 租約、情緒與記憶量,並處理釋放鎖、接手死鎖、清理過期租約。當使用者問哪些人格可用、為什麼載入失敗、人格被誰佔用、想釋放或切換人格、或要清理殘留鎖時觸發。不適用於:建立人格(persona-create)、對話(persona-chat)。
---
# 🔐 persona-status — 載入狀態與鎖管理
**CLI**`node "${CLAUDE_PLUGIN_ROOT}/scripts/persona.mjs"`
---
## 鎖的規則(設計上的硬約束)
1. **一個人格同時只能被一個程序 exclusive 載入**(鎖 = `state/lock.json`,以 `session_id` 為主鍵)。
2. **sub agent 不受限**:同一個 session 的 sub agent 沿用同一把鎖;
受邀人格(`jsc-persona:persona-guest`)走 guest 唯讀租約,不佔 exclusive 鎖。
3. 鎖有 **15 分鐘租約**`heartbeat_at`),每輪對話由 hook 自動續租;程序被 kill 後租約到期 → 可被接手。
鎖的擁有者是 session 而不是 process:CLI 跑完就結束,所以判定只看心跳,不看 pid。
4. 一個 session 也**只能載入一個** host 人格(要換人先 release)。
## 常用指令
```bash
# 全部人格 + 鎖狀態 + 記憶量
node "${CLAUDE_PLUGIN_ROOT}/scripts/persona.mjs" list
# 單一人格的鎖細節(owner session/cwd/心跳、guest 名單、情緒)
node "${CLAUDE_PLUGIN_ROOT}/scripts/persona.mjs" status --persona <slug>
# 本 session 載入了什麼
node "${CLAUDE_PLUGIN_ROOT}/scripts/persona.mjs" status --session <PERSONA_SESSION>
# 釋放(含所有 guest 租約)
node "${CLAUDE_PLUGIN_ROOT}/scripts/persona.mjs" release --session <PERSONA_SESSION>
# 清理死鎖與過期 guest 租約
node "${CLAUDE_PLUGIN_ROOT}/scripts/persona.mjs" gc
```
## 載入失敗怎麼判斷
| 訊息 | 意義 | 處理 |
| --- | --- | --- |
| `已被另一個程序載入` + 心跳在 15 分鐘內 | 真的有人在用 | **不要 takeover**。回報 owner 的 session/cwd 與最後心跳,請使用者決定 |
| 租約已過期(心跳超過 15 分) | 程序異常結束 | `load` 會**自動接手**並回報 `⚠ 這把鎖是接手來的`;請把這句話轉達使用者 |
| 想強行接手心跳還活著的鎖 | 兩邊會互相覆蓋記憶 | 只有使用者明確要求才加 `--takeover`,並先說明風險 |
| `正以 guest 身分參與另一個 session` | 它正在別人的聊天室裡當客人 | 請那邊先 `leave`,或等 30 分鐘租約過期 |
| `本 session 已載入人格 X` | 一程序一人格 | 先 `release` 再載入 |
| `CLI 的 --session 與本 session 不符` | 帶錯 session_id | 用上下文 `<persona-runtime>` 裡的 `PERSONA_SESSION=` 值 |
| `禁止跨人格操作` / `跨人格資料隔離` | 想碰別的人格 | 改用 `/jsc-persona:persona-invite` |
## 回報格式
```
人格倉庫:~/.claude/personas
- 🔒 `lumi` Lumisession 4f2a…, cwd ~/work,心跳 12 秒前)|長期記憶 34|短期 12
- 🔓 `shen` Shen 平靜 50/信任 38|長期記憶 8
- ⚠ `nox` 死鎖可接手(最後心跳 42 分鐘前)
```
所有面向使用者的輸出使用**繁體中文(台灣用語)**、UTF-8 無亂碼。