#!/bin/sh # investigate-first-stamp.sh — PostToolUse(Agent|Task|SendMessage): # 記下「這個 session 真的**派人去查過那張票**了」。 # # 配 diagnosis-evidence-guard.sh 使用(形狀抄自 subagent-first-stamp.sh/kbdb-asked-stamp.sh # ——inkstone/ISEP#87 票上就是指定照那個形狀做)。只留時戳,不擋任何東西。 # # 🔴 為什麼按「session + 票號」分開存,不是只按 session: # subagent-first-stamp 回答的是「這一輪有沒有派過工」(一個 session 一個答案)。 # 本支要回答的是「**這件事**有沒有派人查過」——那是**每張票各自**的問題。 # 只按 session 存的話,早上派過一次去查 A 票,下午就等於解鎖了 B 票的診斷, # 這道閘會在第二次派工之後完全失效。 set -eu INPUT=$(cat 2>/dev/null || echo '{}') HERE=$(cd "$(dirname "$0")" && pwd) printf '%s' "$INPUT" | STAMP_LIB="$HERE/lib" python3 -c ' import json, os, re, sys, time sys.path.insert(0, os.environ.get("STAMP_LIB", "")) try: import dispatch_parse except Exception: raise SystemExit try: d = json.load(sys.stdin) except Exception: raise SystemExit sid = re.sub(r"[^A-Za-z0-9_.-]", "_", str(d.get("session_id") or "nosid"))[:64] channel, text = dispatch_parse.tool_channel(d) if not channel: raise SystemExit for ref in dispatch_parse.parse_dispatch(text)["refs"]: # ISEP_STAMP_DIR 只給測試用(不碰 /tmp 的正式戳記)—— # 與 diagnosis-evidence-guard.sh 讀的是同一個變數,兩支要一起改。 stamp_dir = os.environ.get("ISEP_STAMP_DIR", "/tmp") path = os.path.join(stamp_dir, ".investigated-%s-%s_%s_%s" % (sid, ref["owner"], ref["repo"], ref["num"])) try: with open(path, "w") as f: f.write(str(int(time.time()))) except Exception: pass ' 2>/dev/null || true exit 0