driver_tob.sh
1 #!/bin/bash 2 # 6 toB daily-task scenarios — READ-ONLY / draft-free. 3 set -u 4 SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" 5 REPO_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)" 6 cd "$REPO_ROOT" 7 RESULTS="${BENCHMARK_RESULTS_DIR:-/tmp/maxiter_tests/results_tob}" 8 mkdir -p "$RESULTS" 9 10 session_set() { 11 ls ~/.shannon/sessions/*.json 2>/dev/null | xargs -I{} basename {} .json | sort 12 } 13 14 run_task() { 15 local num=$1; local desc=$2; local prompt=$3 16 echo "=== Task $num: $desc ===" | tee -a "$RESULTS/driver.log" 17 date +"%Y-%m-%d %H:%M:%S" | tee -a "$RESULTS/driver.log" 18 19 local stdout_file="$RESULTS/task${num}.stdout" 20 local before_file="$RESULTS/task${num}.sessions.before" 21 local after_file="$RESULTS/task${num}.sessions.after" 22 session_set > "$before_file" 23 24 perl -e 'alarm shift; exec @ARGV' 480 shan -y "$prompt" >"$stdout_file" 2>&1 25 local rc=$? 26 27 # New session attributable to this run = set-after minus set-before. 28 # Most-recent-by-mtime among the new ones avoids losing track under 29 # concurrent `shan` usage on the same machine. 30 session_set > "$after_file" 31 local sid 32 sid=$(comm -13 "$before_file" "$after_file" | while read -r s; do 33 printf '%s\t%s\n' "$(stat -f '%m' "$HOME/.shannon/sessions/$s.json" 2>/dev/null || echo 0)" "$s" 34 done | sort -n | tail -1 | awk '{print $2}') 35 if [ -z "$sid" ]; then 36 sid="NO_NEW_SESSION" 37 fi 38 echo "session_id=$sid (exit=$rc)" | tee -a "$RESULTS/driver.log" 39 echo "$sid" > "$RESULTS/task${num}.session_id" 40 tail -5 "$stdout_file" | sed 's/^/ /' | tee -a "$RESULTS/driver.log" 41 echo "" | tee -a "$RESULTS/driver.log" 42 sleep 2 43 } 44 45 run_task 1 "meeting prep" \ 46 "我明天(2026-04-21)日历上第一个会议是什么?看会议描述、参会人、相关邀请邮件,告诉我应该准备什么材料。只分析,不要创建或回复任何东西" 47 48 run_task 2 "inbox triage" \ 49 "过去 3 天(2026-04-17 到 2026-04-20)Gmail 收件箱里,哪些邮件需要我本周内回复?按优先级排序,每封 3 句:发件人、主题、我该做什么。不要起草回复,不要发送任何邮件" 50 51 run_task 3 "meetings audit" \ 52 "看我未来 7 天(2026-04-20 到 2026-04-27)的日历,哪些会议从标题和参会人数判断,可能是'可删除'或'改为异步'的?给一个表,每条标明判断依据(例如:纯 standup、1:1 且无固定议程、参会人超过 15 人等)。不要修改日历" 53 54 run_task 4 "drive doc dedupe" \ 55 "我 Drive 上有没有文件名含'年度计划' '年度规划' 'annual plan' 'yearly plan' 之类的文档?有多个版本就告诉我最新那个是哪个、最后修改时间、最后编辑人。只列出,不要打开或修改" 56 57 run_task 5 "calendar ↔ notion matching" \ 58 "看我未来 7 天的日历,每个会议在 Notion 里有没有对应的项目页面或客户页面(标题近似或关键词匹配)?匹配到的给 Notion 链接,没匹配的也明确指出。不要在 Notion 创建任何新页面" 59 60 run_task 6 "notion database health" \ 61 "我的 Notion workspace 里有哪些数据库?每个数据库用一句话说用途、大致多少行、最近更新时间。按'活跃度'(最近更新+条目数)排序。只读取" 62 63 echo "=== ALL DONE ===" 64 date +"%Y-%m-%d %H:%M:%S" | tee -a "$RESULTS/driver.log"