feat(role): SessionEnd 立即釋放角色鎖,不必等閒置逾時
關掉 CLI 後立刻重開新階段時,角色會被自己上一個階段的殘留鎖擋住: 原本只有「持有者 transcript 閒置超過 30 分鐘」與手動 --unlock 兩條釋放 路徑,而剛關閉的 transcript mtime 還很新,機制無法區分「已關閉」與 「正在別的視窗打字」,因此最久要等 30 分鐘才叫得回角色。 新增 SessionEnd hook(role_unload.sh)作為快速路徑,工作階段正常結束時 立即刪鎖。mtime 閒置逾時後援保留不動 —— SessionEnd 不保證觸發 (kill -9、直接關終端機、WSL 關機、當機都不會跑),少了後援會在異常 結束時把角色鎖死到下次手動解鎖,兩條路徑缺一不可。 只在鎖檔登記的 transcript 等於自己時才釋放:被鎖擋下的第二個階段結束時 同樣會觸發 SessionEnd,若無條件刪鎖會把仍在使用中的第一個階段的鎖一起 刪掉,等於讓單一實例限制形同虛設。無法取得 transcript、sub agent (ROLE_SKIP_INSTANCE_LOCK=1)、限制已停用(ROLE_SINGLE_INSTANCE=0) 一律不動鎖。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -36,7 +36,7 @@ generic/
|
||||
│ └── marketplace.json # Codex marketplace(name: "generic",url source 指向本 repo)
|
||||
├── plugin.json # Antigravity 外掛定義(name: "jsc-generic",skills: "./skills/")
|
||||
├── hooks/
|
||||
│ └── hooks.json # hook 定義(SessionStart 載入角色並提示問候、Stop 記錄記憶)
|
||||
│ └── hooks.json # hook 定義(SessionStart 載入角色並提示問候、Stop 記錄記憶、SessionEnd 釋放角色鎖)
|
||||
├── scripts/
|
||||
│ └── role/ # role skill 的可執行元件(腳本一律不放進 skills/)
|
||||
├── skills/ # ★ 唯一真實來源:所有 skills
|
||||
@@ -232,6 +232,7 @@ copilot plugin marketplace remove generic
|
||||
| `skills/role` 的手動模式 | ✅ | ⚠️ 需保留 `scripts/` | ⚠️ 同左 | ❌ 只複製 `skills/` | ⚠️ 同左 |
|
||||
| `hooks/hooks.json`:`SessionStart` 載入角色 | ✅ | ⚠️ 需該版本支援 | ❌ | ❌ | ❌ |
|
||||
| `hooks/hooks.json`:`Stop` 記錄記憶 | ✅ | ✅ | ❌ | ❌ | ❌ |
|
||||
| `hooks/hooks.json`:`SessionEnd` 釋放角色鎖 | ✅ | ⚠️ 需該版本支援 | ❌ | ❌ | ❌ |
|
||||
| cron 睡眠整理(系統排程) | ✅ | ✅ | ✅ | ✅ | ✅ |
|
||||
|
||||
> **OpenCode 以複製 `skills/` 目錄安裝**,不會帶入 `scripts/` 與 `hooks/`,凡依賴腳本的 skill 一律不可用。
|
||||
|
||||
Reference in New Issue
Block a user