工作階段開始時把助理的未讀提醒帶到前景 #89

Merged
admin merged 1 commits from feat/session-start-reminders into develop 2026-09-07 04:14:13 +00:00
Member

這一批做什麼

新增第十支 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.json SessionStart 加一條
hooks/codex-hooks.json 同一條(那份是從 hooks.json 推導的,一起帶上)
kiro 的 agentSpawn 加一條
claude 的 status 逐支列舉 加一項
冒煙測試 加一條,預期條數 17 → 18
執行期錯誤掃描的 jsc 判定 加一支腳本名
文件與回報字串裡的「九支 hook」 十處全部改成十支

實測

測什麼 結果
smoke claude status=ok,hook 模式 18 條,自報行數 140 對得上
status claude 回 unwired、item session-reminder … missing
有提醒的工作階段 逾期排前面、到期在後,另加一行連續失敗筆數
同一階段第二次觸發 一個字都沒印
peek 照印,不記記號
心跳不新鮮 先印一行「這批是多久以前算的、心跳現在什麼狀態」
佇列不存在 印一行說明,並講明「這裡沒有提醒不代表沒有事要做」
檢核 lint-scripts 21 支、check-behaviors、ste100-lint 全 0

status claude 回 unwired 是對的:那一項比對的是目前部署到快取的那一版,部署過去才會變 present。

邊界

copilot 與 antigravity 沒有工作階段開始事件,這一支對那兩支接不上——與 session-timer.sh 的處境相同,那兩支的計時本來就靠包裝別名補。這一批沒有為它們新增管道。

## 這一批做什麼 新增第十支 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.json` | SessionStart 加一條 | | `hooks/codex-hooks.json` | 同一條(那份是從 hooks.json 推導的,一起帶上) | | kiro 的 `agentSpawn` | 加一條 | | claude 的 `status` 逐支列舉 | 加一項 | | 冒煙測試 | 加一條,預期條數 17 → 18 | | 執行期錯誤掃描的 jsc 判定 | 加一支腳本名 | | 文件與回報字串裡的「九支 hook」 | 十處全部改成十支 | ## 實測 | 測什麼 | 結果 | | --- | --- | | `smoke claude` | `status=ok`,hook 模式 18 條,自報行數 140 對得上 | | `status claude` | 回 `unwired`、`item session-reminder … missing` | | 有提醒的工作階段 | 逾期排前面、到期在後,另加一行連續失敗筆數 | | 同一階段第二次觸發 | 一個字都沒印 | | `peek` | 照印,不記記號 | | 心跳不新鮮 | 先印一行「這批是多久以前算的、心跳現在什麼狀態」 | | 佇列不存在 | 印一行說明,並講明「這裡沒有提醒不代表沒有事要做」 | | 檢核 | `lint-scripts` 21 支、`check-behaviors`、`ste100-lint` 全 0 | `status claude` 回 `unwired` **是對的**:那一項比對的是目前部署到快取的那一版,部署過去才會變 `present`。 ## 邊界 copilot 與 antigravity 沒有工作階段開始事件,這一支對那兩支接不上——與 `session-timer.sh` 的處境相同,那兩支的計時本來就靠包裝別名補。這一批沒有為它們新增管道。
jiantw83 added 1 commit 2026-09-07 04:12:56 +00:00
助理算得出哪幾筆到期、哪幾筆逾期,但那些結果只寫在監控頁上——人要自己
去翻,或自己跑一次狀態查詢。這一支把它帶到前景。

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>
admin merged commit 6948593316 into develop 2026-09-07 04:14:13 +00:00
admin deleted branch feat/session-start-reminders 2026-09-07 04:14:13 +00:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: plugins/hooks#89