feat: 心裡話與不重複發言、劇場模式同規則、人格匯出匯入 (v0.0.2) #2

Merged
admin merged 1 commits from develop into master 2026-07-30 01:01:19 +00:00
Member

讓人格講話更像正常人,並讓人格可以搬家。

1. 心裡話(inner voice)

新增 think 子指令:推導、比對、盤算寫進 state/inner.jsonl只印「💭 心想 N 句」,內容永不回顯——就算不小心把輸出貼出來也不會破梗。下一輪 <persona-context> 帶回最近三句,推論因此有連續性。

2. 短時間內不重複

  • 說出口的話由 Stop hook 自動記進 state/said.jsonl(不用手動登記)。
  • 新增 said check|list:出口前確認這句是不是又要說一次。
  • 相似度 = 字元 bigram Jaccard(0.4) + 字集合 Jaccard(0.6),門檻 0.72。字集合權重較高,才分得開這兩種很像但意義不同的情況:
「我等一下把報告寄給你」vs「等一下我會把報告寄給你」→ 0.779 擋(換句話說同一件事)
「你今天看起來很累」  vs「你今天看起來很開心」  → 0.687 放行(換關鍵詞=新資訊)

3. 回話一到三句,劇場模式同樣適用

規則注入 turnContextUserPromptSubmit hint。劇場模式的 CLI 都帶 --quiet,警告會被丟掉,所以 room post 對近似重複與超過三句的發言直接拒收並回傳可執行的錯誤訊息;host 與 guest 走同一支 CLI,一視同仁(例外:--allow-repeat / --force)。

4. 人格匯出匯入(新 skill persona-transfer

單一 JSON bundle + sha256 checksum,無外部依賴(--gzip 可壓縮)。不帶載入鎖與 guest 租約,journal/ 需明確 --with-journal 才帶走。匯出只能匯出本 session 已載入的人格,否則等於開了跨人格讀取的後門;bundle 內的 ../ 逃逸路徑一律拒收。換名匯入(--persona <新 slug>)可讓同一個人格並存兩份,config.json 會記下來歷。

順帶修正

agents/persona-guest.md 的 CLI 範例都少了 --as-guest,照著跑會被 requireMember 擋下——guest 根本無法認識自己或發言。

驗證

node scripts/selftest.mjs102 項全綠(新增 ⑪ 說話節制、⑫ 匯出匯入,含重複判定的校準對照表,之後改門檻改壞會被測出來)。

版本號 0.0.1 → 0.0.2(三份 manifest)。

讓人格講話更像正常人,並讓人格可以搬家。 ## 1. 心裡話(inner voice) 新增 `think` 子指令:推導、比對、盤算寫進 `state/inner.jsonl`,**只印「💭 心想 N 句」,內容永不回顯**——就算不小心把輸出貼出來也不會破梗。下一輪 `<persona-context>` 帶回最近三句,推論因此有連續性。 ## 2. 短時間內不重複 - 說出口的話由 `Stop` hook 自動記進 `state/said.jsonl`(不用手動登記)。 - 新增 `said check|list`:出口前確認這句是不是又要說一次。 - 相似度 = 字元 bigram Jaccard(0.4) + 字集合 Jaccard(0.6),門檻 0.72。字集合權重較高,才分得開這兩種很像但意義不同的情況: ``` 「我等一下把報告寄給你」vs「等一下我會把報告寄給你」→ 0.779 擋(換句話說同一件事) 「你今天看起來很累」  vs「你今天看起來很開心」  → 0.687 放行(換關鍵詞=新資訊) ``` ## 3. 回話一到三句,劇場模式同樣適用 規則注入 `turnContext` 與 `UserPromptSubmit` hint。劇場模式的 CLI 都帶 `--quiet`,警告會被丟掉,所以 `room post` 對近似重複與超過三句的發言**直接拒收**並回傳可執行的錯誤訊息;host 與 guest 走同一支 CLI,一視同仁(例外:`--allow-repeat` / `--force`)。 ## 4. 人格匯出匯入(新 skill `persona-transfer`) 單一 JSON bundle + sha256 checksum,無外部依賴(`--gzip` 可壓縮)。不帶載入鎖與 guest 租約,`journal/` 需明確 `--with-journal` 才帶走。**匯出只能匯出本 session 已載入的人格**,否則等於開了跨人格讀取的後門;bundle 內的 `../` 逃逸路徑一律拒收。換名匯入(`--persona <新 slug>`)可讓同一個人格並存兩份,`config.json` 會記下來歷。 ## 順帶修正 `agents/persona-guest.md` 的 CLI 範例都少了 `--as-guest`,照著跑會被 `requireMember` 擋下——guest 根本無法認識自己或發言。 ## 驗證 `node scripts/selftest.mjs` → **102 項全綠**(新增 ⑪ 說話節制、⑫ 匯出匯入,含重複判定的校準對照表,之後改門檻改壞會被測出來)。 版本號 0.0.1 → 0.0.2(三份 manifest)。
jiantw83 added 1 commit 2026-07-30 01:00:39 +00:00
讓人格講話更像正常人,並讓人格可以搬家。

1. 心裡話(inner voice)
   - 新增 `think` 子指令:推導/盤算寫進 state/inner.jsonl,
     只印「💭 心想 N 句」,內容永不回顯給使用者。
   - <persona-context> 每輪帶回最近三句,推論因此有連續性。

2. 短時間內不重複
   - 說出口的話由 Stop hook 自動記進 state/said.jsonl。
   - 新增 `said check|list`:事前確認這句是不是又要說一次。
   - 相似度 = 字元 bigram Jaccard(0.4) + 字集合 Jaccard(0.6),
     門檻 0.72;字集合權重較高才分得開「重排語序」(要擋)
     與「換掉關鍵詞」(是新資訊,放行)。

3. 回話一到三句 + 劇場模式同樣適用
   - 規則注入 turnContext 與 UserPromptSubmit hint。
   - 劇場模式的 CLI 都帶 --quiet,警告會被丟掉,所以 `room post`
     對近似重複與超過三句的發言直接拒收(--allow-repeat / --force 例外),
     host 與 guest 走同一支 CLI,一視同仁。

4. 人格匯出匯入(新 skill persona-transfer)
   - `export` / `import`:單一 JSON bundle(可 gzip)+ sha256 checksum,
     無外部依賴。不帶載入鎖與 guest 租約,journal/ 需明確 --with-journal。
   - 匯出只能匯出本 session 已載入的人格,否則等於跨人格讀取的後門;
     bundle 內的 ../ 逃逸路徑一律拒收。

順帶修正:agents/persona-guest.md 的 CLI 範例都少了 --as-guest,
照著跑會被 requireMember 擋下,guest 根本無法認識自己或發言。

selftest 102 項全綠(新增 ⑪ 說話節制、⑫ 匯出匯入,含重複判定校準對照表)。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
admin approved these changes 2026-07-30 01:01:17 +00:00
admin merged commit 6b40c23738 into master 2026-07-30 01:01:19 +00:00
Sign in to join this conversation.
No Reviewers
No labels
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: plugins/persona#2