feat/session-start-reminders
develop
新增第十支 hook session-reminder.sh:工作階段開始時,把助理算好的未讀提醒帶到前景。
session-reminder.sh
助理算得出哪幾筆到期、哪幾筆逾期,但那些結果只寫在監控頁上。要人自己去翻的提醒,不算提醒。
佇列由 jsc-assist 那一邊的巡檢寫(那張 PR 是 plugins/assist 的 feat/reminder-queue)。這一支只讀。
jsc-assist
plugins/assist
feat/reminder-queue
due
next_run
助理停了,佇列就不再更新,而一份舊佇列讀起來跟新的一模一樣。
所以佇列檔頭帶那一輪的時間戳與 epoch,這一支算出它多舊;超過心跳門檻或心跳不新鮮,就明說這批提醒是多久以前算的、助理現在的心跳是什麼狀態。門檻與狀態都取 heartbeat.sh 印的那一行,不自己定一套。
heartbeat.sh
佇列空又過期的那一種分兩路:
助理狀態目錄根本不存在時整支安靜退出:那台機器從沒啟動過助理。
記號是 $JSC_HOME/sessions/{代號}.reminded。
$JSC_HOME/sessions/{代號}.reminded
接不到 session id 的 CLI 全部共用 default,所以 session-timer.sh 的 restart 分支順手清掉那個記號——不清的話那支 CLI 從第二個工作階段起再也收不到任何提醒。清除掛在那一支不掛在這一支:「這是不是新的工作階段」的判準只有那一支知道。
default
session-timer.sh
restart
hooks/hooks.json
hooks/codex-hooks.json
agentSpawn
status
smoke claude
status=ok
status claude
unwired
item session-reminder … missing
peek
lint-scripts
check-behaviors
ste100-lint
status claude 回 unwired 是對的:那一項比對的是目前部署到快取的那一版,部署過去才會變 present。
present
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>
No dependencies set.
The note is not visible to the blocked user.
這一批做什麼
新增第十支 hook
session-reminder.sh:工作階段開始時,把助理算好的未讀提醒帶到前景。助理算得出哪幾筆到期、哪幾筆逾期,但那些結果只寫在監控頁上。要人自己去翻的提醒,不算提醒。
佇列由
jsc-assist那一邊的巡檢寫(那張 PR 是plugins/assist的feat/reminder-queue)。這一支只讀。這一支一個判定都不做
due欄與next_run去跟現在比就是第二套到期判定,跟助理那一套遲早對不上,而對不上的那一天兩邊都說自己是對的只印佇列,換來一個新的失效模式
助理停了,佇列就不再更新,而一份舊佇列讀起來跟新的一模一樣。
所以佇列檔頭帶那一輪的時間戳與 epoch,這一支算出它多舊;超過心跳門檻或心跳不新鮮,就明說這批提醒是多久以前算的、助理現在的心跳是什麼狀態。門檻與狀態都取
heartbeat.sh印的那一行,不自己定一套。佇列空又過期的那一種分兩路:
助理狀態目錄根本不存在時整支安靜退出:那台機器從沒啟動過助理。
一個工作階段只提一次
記號是
$JSC_HOME/sessions/{代號}.reminded。接不到 session id 的 CLI 全部共用
default,所以session-timer.sh的restart分支順手清掉那個記號——不清的話那支 CLI 從第二個工作階段起再也收不到任何提醒。清除掛在那一支不掛在這一支:「這是不是新的工作階段」的判準只有那一支知道。接線與檢核一起改,不留一支沒人驗的 hook
hooks/hooks.jsonhooks/codex-hooks.jsonagentSpawnstatus逐支列舉實測
smoke claudestatus=ok,hook 模式 18 條,自報行數 140 對得上status claudeunwired、item session-reminder … missingpeeklint-scripts21 支、check-behaviors、ste100-lint全 0status claude回unwired是對的:那一項比對的是目前部署到快取的那一版,部署過去才會變present。邊界
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>