develop
master
第十支 hook session-reminder.sh:工作階段開始時,把助理算好的未讀提醒帶到前景。
session-reminder.sh
要人自己去翻的提醒,不算提醒。 助理算得出哪幾筆到期、哪幾筆逾期,但那些結果本來只寫在監控頁上。
佇列由 jsc-assist 的巡檢每一輪重寫,這一支只讀、只印。自己拿 due 欄跟現在比就是第二套到期判定,跟助理那一套遲早對不上,而對不上的那一天兩邊都說自己是對的。
jsc-assist
due
代價正面處理:助理停了佇列就不更新,而舊佇列讀起來跟新的一模一樣。所以檔頭帶時間戳與 epoch,這一支算得出年紀;超過心跳門檻或心跳不新鮮就先說一句。門檻與狀態都取 heartbeat.sh 印的那一行。
heartbeat.sh
空又過期時分兩路:待辦簿有東西才說話,零筆就安靜——人自己按停也算零筆那一種。
記號是 sessions/{代號}.reminded。接不到 session id 的 CLI 全部共用 default,所以 session-timer.sh restart 順手清掉它——不清的話那支 CLI 從第二個工作階段起再也收不到提醒。
sessions/{代號}.reminded
default
session-timer.sh restart
兩份 hook 設定、kiro 的 agentSpawn、claude 的 status 逐支列舉、冒煙測試(17 → 18 條)、錯誤掃描的 jsc 判定,還有散在文件與回報字串裡的「九支 hook」十處。不留一支沒人驗的 hook。
agentSpawn
status
0.4.7 → 0.4.8。
wire-cli.sh status claude 現在會回 wired。部署之前它回 unwired 並點名 session-reminder … missing,那是對的——那一項比對的是已部署的那一版。
wire-cli.sh status claude
wired
unwired
session-reminder … missing
copilot 與 antigravity 沒有工作階段開始事件,這一支對那兩支接不上,與 session-timer.sh 的處境相同。
session-timer.sh
助理算得出哪幾筆到期、哪幾筆逾期,但那些結果只寫在監控頁上——人要自己 去翻,或自己跑一次狀態查詢。這一支把它帶到前景。 session-reminder.sh 只讀助理那一輪寫好的提醒佇列,一個判定都不做。 自己拿 due 欄與 next_run 去跟現在比就是第二套到期判定,跟助理那一套遲早 對不上,而對不上的那一天兩邊都說自己是對的。它也要快:這一支跑在每一個 工作階段的開頭。 只印佇列換來一個新的失效模式,正面處理:助理停了,佇列就不再更新,而一份 舊佇列讀起來跟新的一模一樣。所以佇列檔頭帶那一輪的時間戳與 epoch,這裡 算出它多舊;超過心跳門檻或心跳不新鮮,就明說這批提醒是多久以前算的、 助理現在的心跳是什麼狀態。門檻與狀態都取 heartbeat.sh 印的那一行。 佇列空又過期的那一種分兩路:待辦簿有東西才說話,零筆就安靜——人自己按停 也算零筆那一種,對著一個刻意的決定每個工作階段催一次是噪音不是提醒。 助理狀態目錄根本不存在時整支安靜退出,那台機器從沒啟動過助理。 一個工作階段只提一次,記號是 sessions/{代號}.reminded。接不到 session id 的 CLI 全部共用 default,所以 session-timer.sh 的 restart 分支順手清掉那個 記號——不清的話那支 CLI 從第二個工作階段起再也收不到提醒。清除掛在那裡 不掛在這裡:「這是不是新的工作階段」的判準只有那一支知道。 接線與檢核一起改,不留一支沒人驗的 hook:hooks.json 與推導出來的 codex-hooks.json 各加一條、kiro 的 agentSpawn 加一條、claude 的 status 逐支列舉加一項、冒煙測試加一條並把預期條數從 17 改成 18、執行期錯誤掃描 的 jsc 判定加一支腳本名,還有散在文件與回報字串裡的「九支 hook」十處 全部改成十支。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Reviewed-on: #89
No dependencies set.
The note is not visible to the blocked user.
這一批釋出一件事
第十支 hook
session-reminder.sh:工作階段開始時,把助理算好的未讀提醒帶到前景。要人自己去翻的提醒,不算提醒。 助理算得出哪幾筆到期、哪幾筆逾期,但那些結果本來只寫在監控頁上。
這一支一個判定都不做
佇列由
jsc-assist的巡檢每一輪重寫,這一支只讀、只印。自己拿due欄跟現在比就是第二套到期判定,跟助理那一套遲早對不上,而對不上的那一天兩邊都說自己是對的。代價正面處理:助理停了佇列就不更新,而舊佇列讀起來跟新的一模一樣。所以檔頭帶時間戳與 epoch,這一支算得出年紀;超過心跳門檻或心跳不新鮮就先說一句。門檻與狀態都取
heartbeat.sh印的那一行。空又過期時分兩路:待辦簿有東西才說話,零筆就安靜——人自己按停也算零筆那一種。
一個工作階段只提一次
記號是
sessions/{代號}.reminded。接不到 session id 的 CLI 全部共用default,所以session-timer.sh restart順手清掉它——不清的話那支 CLI 從第二個工作階段起再也收不到提醒。接線與檢核一起改
兩份 hook 設定、kiro 的
agentSpawn、claude 的status逐支列舉、冒煙測試(17 → 18 條)、錯誤掃描的 jsc 判定,還有散在文件與回報字串裡的「九支 hook」十處。不留一支沒人驗的 hook。版本
0.4.7 → 0.4.8。
部署後的預期
wire-cli.sh status claude現在會回wired。部署之前它回unwired並點名session-reminder … missing,那是對的——那一項比對的是已部署的那一版。copilot 與 antigravity 沒有工作階段開始事件,這一支對那兩支接不上,與
session-timer.sh的處境相同。助理算得出哪幾筆到期、哪幾筆逾期,但那些結果只寫在監控頁上——人要自己 去翻,或自己跑一次狀態查詢。這一支把它帶到前景。 session-reminder.sh 只讀助理那一輪寫好的提醒佇列,一個判定都不做。 自己拿 due 欄與 next_run 去跟現在比就是第二套到期判定,跟助理那一套遲早 對不上,而對不上的那一天兩邊都說自己是對的。它也要快:這一支跑在每一個 工作階段的開頭。 只印佇列換來一個新的失效模式,正面處理:助理停了,佇列就不再更新,而一份 舊佇列讀起來跟新的一模一樣。所以佇列檔頭帶那一輪的時間戳與 epoch,這裡 算出它多舊;超過心跳門檻或心跳不新鮮,就明說這批提醒是多久以前算的、 助理現在的心跳是什麼狀態。門檻與狀態都取 heartbeat.sh 印的那一行。 佇列空又過期的那一種分兩路:待辦簿有東西才說話,零筆就安靜——人自己按停 也算零筆那一種,對著一個刻意的決定每個工作階段催一次是噪音不是提醒。 助理狀態目錄根本不存在時整支安靜退出,那台機器從沒啟動過助理。 一個工作階段只提一次,記號是 sessions/{代號}.reminded。接不到 session id 的 CLI 全部共用 default,所以 session-timer.sh 的 restart 分支順手清掉那個 記號——不清的話那支 CLI 從第二個工作階段起再也收不到提醒。清除掛在那裡 不掛在這裡:「這是不是新的工作階段」的判準只有那一支知道。 接線與檢核一起改,不留一支沒人驗的 hook:hooks.json 與推導出來的 codex-hooks.json 各加一條、kiro 的 agentSpawn 加一條、claude 的 status 逐支列舉加一項、冒煙測試加一條並把預期條數從 17 改成 18、執行期錯誤掃描 的 jsc 判定加一支腳本名,還有散在文件與回報字串裡的「九支 hook」十處 全部改成十支。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>