/ test / benchmarks / driver_tob.sh
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"