feat(role): 多角色協作 —— 同伴清單、協作規則與 --agent 匯出
使用者要求「多人對話是所有角色都能做到的事」,因此做成通用能力而非特定角色專屬。 一、SessionStart 注入可協作的角色清單 角色若不知道有哪些同伴存在,就不會想到派他們協助 —— 這是協作能運作的前提。 - role_lib.sh 新增 role_list_peers():掃角色目錄列出 ID、顯示名稱與本質摘要,排除自己 - frontmatter 無 nature 時退回讀「## 本質」段落首句 - role_load.sh 注入清單與派工方式;只有一個角色時不輸出該區塊 二、共用行為新增協作規則與邊界(三處同步) - 任何角色都可派其他角色作為 sub agent 協助,完成後由自己向使用者轉述 - 邊界:派工須有實際需要,不可為演出多人對話而派;不可再往下派第三層避免遞迴; 不可代替對方發言或編造回覆;結果須誠實轉述,包含失敗與不確定 三、新增 --agent <角色 ID> [輸出目錄] 把角色的 SOUL 匯出成 sub agent 定義,任何角色都能被匯出。 - 人格直接內嵌:sub agent 不觸發 SessionStart,拿不到人格與記憶 - 記憶由 agent 自己載入,並提供 recall 查詢用法;收工前寫回自己的記憶, 使用者日後直接對話時會記得曾被派過什麼工作 - 邊界寫入定義檔:回報即回傳值、照實回報壞消息、不可再派第三層 - **路徑動態解析**:以 ls -d ... | sort -V | tail -n 1 取最新版本, 避免寫死版本目錄(同一類錯誤曾造成 cron 排程長期空轉),並保留匯出時路徑作後援 驗證:以測試角色目錄匯出詩乃定義,確認人格、記憶載入、recall、收工寫記憶、 不遞迴邊界齊備,且無寫死版本目錄;抄出解析片段實跑確認 load 與 recall 均可執行。 版號沿用 0.0.5(master 為 0.0.4,同一 PR 不再累加) Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -333,6 +333,26 @@ role_instance_acquire() {
|
||||
return 1
|
||||
}
|
||||
|
||||
# 列出可協作的其他角色(排除自己),每行「ID<TAB>顯示名稱<TAB>本質摘要」。
|
||||
# 角色若不知道有哪些同伴存在,就不會想到派他們協助 —— 這是多人協作能運作的前提。
|
||||
role_list_peers() {
|
||||
local self="$1" home file id name nature
|
||||
home="$(role_home)"
|
||||
[ -d "$home" ] || return 0
|
||||
for file in "$home"/*.md; do
|
||||
[ -f "$file" ] || continue
|
||||
id="$(basename "$file" .md)"
|
||||
[ "$id" = "$self" ] && continue
|
||||
name="$(sed -n 's/^name:[[:space:]]*//p' "$file" 2>/dev/null | head -n 1)"
|
||||
nature="$(sed -n 's/^nature:[[:space:]]*//p' "$file" 2>/dev/null | head -n 1)"
|
||||
# frontmatter 沒有 nature 時退回讀「## 本質」段落的第一句
|
||||
if [ -z "$nature" ]; then
|
||||
nature="$(sed -n '/^## 本質/,/^## /p' "$file" 2>/dev/null | sed '1d;/^##/d;/^[[:space:]]*$/d' | head -n 1 | cut -c1-60)"
|
||||
fi
|
||||
printf '%s\t%s\t%s\n' "$id" "${name:-$id}" "${nature:-(未設定)}"
|
||||
done
|
||||
}
|
||||
|
||||
role_instance_release() {
|
||||
rm -f "$(role_instance_lock_path "$1")" 2>/dev/null
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user