Merge pull request '釋出:排程條目不再寫死工作階段代號,CLI 判定跟上共用函式' (#25) from develop into master
Reviewed-on: #25 Reviewed-by: 系統管理員 <1+admin@noreply.localhost>
This commit was merged in pull request #25.
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "jsc-assist",
|
||||
"version": "0.2.1",
|
||||
"version": "0.2.2",
|
||||
"description": "助理:事件收攏、健康巡檢與待辦簿(MONITOR_{HASH} wiki 頁)",
|
||||
"skills": "./skills",
|
||||
"author": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "jsc-assist",
|
||||
"version": "0.2.1",
|
||||
"version": "0.2.2",
|
||||
"description": "助理:事件收攏、健康巡檢與待辦簿(MONITOR_{HASH} wiki 頁)",
|
||||
"skills": "./skills",
|
||||
"jsc": {
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "jsc-assist",
|
||||
"version": "0.2.1",
|
||||
"version": "0.2.2",
|
||||
"description": "助理:事件收攏、健康巡檢與待辦簿(MONITOR_{HASH} wiki 頁)",
|
||||
"skills": "./skills/",
|
||||
"jsc": {
|
||||
|
||||
File diff suppressed because one or more lines are too long
+18
-4
@@ -303,7 +303,15 @@ patrol_command() {
|
||||
[ -n "$PATROL_CMD" ] && { printf '%s' "$PATROL_CMD"; return 0; }
|
||||
_cli="$CLI"
|
||||
[ -n "$_cli" ] || _cli="${JSC_CLI:-}"
|
||||
[ -n "$_cli" ] || { [ -n "${CLAUDE_PLUGIN_ROOT:-}" ] && _cli=claude; }
|
||||
# 認得出 claude 的三個標記要跟 jsc-hooks 的 cli_name() 一模一樣。這裡本來只認第一個,
|
||||
# 而工具腳本被叫用時那一個不會設,於是每一次不帶 --cli 的安裝都回用法錯誤——技能本文
|
||||
# 的啟動步驟叫的正是不帶 --cli 那一種。同一個判斷寫兩份就是這樣漂走的:共用函式後來
|
||||
# 補了兩個標記,這一份沒跟上,而漂移的代價是一個看起來像「這台機器沒裝 CLI」的錯誤。
|
||||
# 共用函式加新標記時,這裡要一起加。
|
||||
if [ -z "$_cli" ] && { [ -n "${CLAUDE_PLUGIN_ROOT:-}" ] || [ -n "${CLAUDECODE:-}" ] \
|
||||
|| [ -n "${CLAUDE_CODE_SESSION_ID:-}" ]; }; then
|
||||
_cli=claude
|
||||
fi
|
||||
case "$_cli" in
|
||||
claude) _bin='claude'; _args="-p \"/jsc-assist:assistant 跑一輪巡檢 $ROOT_TOKEN\"" ;;
|
||||
codex) _bin='codex'; _args="exec '\$assistant 跑一輪巡檢 $ROOT_TOKEN'" ;;
|
||||
@@ -342,8 +350,14 @@ shq() { printf "'%s'" "$(printf '%s' "$1" | sed "s/'/'\\\\''/g")"; }
|
||||
# 寫 NAME='' 進去,讀的人分不出是「刻意設成空」還是「安裝時忘了設」。
|
||||
# JSC_GITEA_CONFIRM=yes 是必要的:寫入確認只認 tty,排程那一輪沒有 tty,不帶這個旗標監控頁
|
||||
# 一定寫不成,而頁寫不成就不寫心跳,排程等於永遠空轉。
|
||||
# 刻意不寫死工作階段代號。寫死的話那一輪的兩半會落在不同的值上:start 由 hook 寫,它從 hook
|
||||
# 的標準輸入 JSON 讀得到 CLI 真正的代號;end 由工具腳本寫,沒有那份 JSON,只能讀環境變數,
|
||||
# 於是讀到寫死的那個字串。兩半的代號不同就永遠配不起來,每一輪都被算成一支中止的技能,
|
||||
# 而那個數字只增不減,最後把真的中止蓋掉——那一節存在的理由正是「只有 start 沒有 end 是
|
||||
# 中止的唯一證據」。不設這個變數,兩半就都落在 CLI 自己給的代號上。
|
||||
# 2026-09-04 實測:一台機器累積了 91 筆假中止,其中 90 筆是同一支被每輪叫用的技能。
|
||||
env_prefix() { # 順便把快照到的變數名稱寫進 $1,供輸出列出名稱(只有名稱,不含值)
|
||||
_p='JSC_CLI=cron JSC_SESSION_ID=schedule JSC_GITEA_CONFIRM=yes'
|
||||
_p='JSC_CLI=cron JSC_GITEA_CONFIRM=yes'
|
||||
_names=''
|
||||
for _n in $(snapshot_names); do
|
||||
eval "_v=\${$_n:-}"
|
||||
@@ -364,7 +378,7 @@ mask_secret() { sed "s/GITEA_TOKEN=[^ ]*/GITEA_TOKEN='***'/g"; }
|
||||
cron_entry() { # $1=工作代號
|
||||
_spec=$(spec_of "$1")
|
||||
case "$1" in
|
||||
heartbeat) _cmd="JSC_CLI=cron JSC_SESSION_ID=schedule '$HEARTBEAT' write" ;;
|
||||
heartbeat) _cmd="JSC_CLI=cron '$HEARTBEAT' write" ;;
|
||||
patrol) _cmd="$ENV_PREFIX $PATROL_RESOLVED" ;;
|
||||
esac
|
||||
printf '%s %s </dev/null >>%s 2>&1 %s' \
|
||||
@@ -445,7 +459,7 @@ trap 'rm -rf "$TMPD"' EXIT
|
||||
# 巡檢指令與環境快照在這裡就解出來。放進 cron_entry 再解的話,那支是在命令替換的子行程裡
|
||||
# 跑,判不出 CLI 時 die 只結束子行程,主流程會帶著空指令繼續往下裝。
|
||||
PATROL_RESOLVED=''
|
||||
ENV_PREFIX='JSC_CLI=cron JSC_SESSION_ID=schedule JSC_GITEA_CONFIRM=yes'
|
||||
ENV_PREFIX='JSC_CLI=cron JSC_GITEA_CONFIRM=yes'
|
||||
SNAPSHOT_NAMES=''
|
||||
case "$CMD:$JOBS" in
|
||||
install:*patrol*)
|
||||
|
||||
Reference in New Issue
Block a user