feat(persona): 時區改為+08:00等值轉換、補機密遮蔽,並接上shared共用規範
依 todo.md 執行的規範治理專案: - persona-lib.mjs 的 iso()/nowIso() 改為輸出 +08:00 offset(等值瞬間轉換, 非加8小時),新增 nowDisplay()(人讀顯示格式)與 todayTaipei()(台北曆日 日期鍵),修正 11 處原本用 UTC 字串切片產生日期鍵的錯誤用法;新增 redactSecrets() 並套用到 persona-gitea.mjs 的 Gitea 錯誤路徑,避免機密 外洩。 - 新增一次性遷移腳本 scripts/migrate-tz.mjs(備份/dry-run/冪等/衝突偵測 中止),供之後有真實人格資料需要轉換時使用。 - persona 13 個 skill 與 AGENTS.md 接上 /jsc-shared 共用規範(spec-output、 spec-script-path、spec-subagent、spec-gitea、spec-git-safety、 spec-skill-invocation 等),不再各自重抄,且完全未變動人格行為本身的規範 (情緒模型、記憶衰減、劇場模式、鎖與隔離機制等逐字保留)。 - selftest 全數通過(788/788,含本次新增的時區邊界/冪等性測試)。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -10,6 +10,14 @@ description: 讓人格睡覺:把一天的活狀態收成能留下來的形狀
|
||||
|
||||
---
|
||||
|
||||
## 共用規範(必要前置)
|
||||
|
||||
先載入 `/jsc-shared:spec-preflight` 並依其流程處理;載入不到即代表 shared plugin 未安裝,
|
||||
依該 spec 詢問使用者是否安裝 `https://gitea.jsc.idv.tw/plugins/shared.git`,不安裝則中斷本 skill。
|
||||
本 skill 需要的規範:spec-output、spec-execution、spec-time-log、spec-script-path、spec-subagent、spec-gitea、spec-git-safety
|
||||
|
||||
---
|
||||
|
||||
## 睡眠是什麼
|
||||
|
||||
不是關機,是**把一天的活狀態收成能留下來的形狀**。分成兩半:
|
||||
@@ -59,17 +67,20 @@ node "${CLAUDE_PLUGIN_ROOT}/scripts/persona.mjs" sleep --session <PERSONA_SESSIO
|
||||
|
||||
## 情況二:主人格請其他人格去睡(不碰它們的檔案)
|
||||
|
||||
使用者說「叫大家去睡」時,**對每一個要睡的人格**各開一個 sub agent:
|
||||
派工基本規則(一個目標一個 sub agent、回傳結構化結果供主 agent 判讀而非直接面向使用者)
|
||||
詳見 `/jsc-shared:spec-subagent`。套用到睡眠情境:使用者說「叫大家去睡」時,
|
||||
**對每一個要睡的人格**各開一個 sub agent:
|
||||
|
||||
- `subagent_type`:`jsc-persona:persona-sleeper`
|
||||
- prompt 內帶:`persona=<slug> session=<PERSONA_SESSION> plugin_root=<CLAUDE_PLUGIN_ROOT>`
|
||||
|
||||
那個 sub agent 就是**那個人格本人**在睡:它自己判斷要記住什麼,寫的是自己的檔案。
|
||||
那個 sub agent 就是**那個人格本人**在睡——它被 pin 在自己的人格上,只能動自己的資料:
|
||||
它自己判斷要記住什麼,寫的是自己的檔案。
|
||||
它手上是 5 分鐘的 sleeper 租約(不是 exclusive 鎖),所以它的每個指令都會帶 `--as-sleeper`——
|
||||
那個旗標只有 persona-sleeper 型的 sub agent 能用,主人格自己帶會被 hook 擋下。
|
||||
帶了它,讀(`brief`/`show`/`recall`)與寫(`consolidate` 等)都算它自己的資料;
|
||||
**回報說「判斷式那半被隔離擋下」十之八九就是漏了這個旗標**,不是它沒有權限。
|
||||
主人格全程不會讀到對方的任何資料——**你只會拿到一份 JSON**:
|
||||
主人格全程不會讀到對方的任何資料——**回傳值只能是 `sleep --json` 的原文**:
|
||||
|
||||
```json
|
||||
{ "persona": "YUI-01", "ok": true, "slept_at": "...", "steps": [ ... ], "sync": { ... }, "kept_lock": true }
|
||||
@@ -122,5 +133,3 @@ node "${CLAUDE_PLUGIN_ROOT}/scripts/persona.mjs" sleep --session <PERSONA_SESSIO
|
||||
`sync` 遇到殘留的 `.git/index.lock`(上一次跑到一半被中斷留下的)會自己清掉重試,
|
||||
不用請使用者手動刪,也不要自己對人格目錄下 `rm`——sleeper 的 shell 寫入本來就被 hook 擋著。
|
||||
細節見 `/jsc-persona:persona-sync`。
|
||||
|
||||
所有面向使用者的輸出使用**繁體中文(台灣用語)**、UTF-8 無亂碼。
|
||||
|
||||
Reference in New Issue
Block a user