53 lines
1.8 KiB
Bash
Executable File
53 lines
1.8 KiB
Bash
Executable File
#!/bin/zsh
|
|
set -euo pipefail
|
|
|
|
PROJECT_ROOT="/Users/karuo/Documents/开发/2、私域银行/工作手机"
|
|
SESSION_ROOT="$HOME/.codex/sessions"
|
|
ARCHIVE_ROOT="$HOME/.codex/archived_sessions"
|
|
OUTPUT_DIR="${1:-$PROJECT_ROOT/开发文档/10、项目管理/02、专项调研/20260728_项目效率优化}"
|
|
SESSION_LIST="$(mktemp)"
|
|
EVENTS_FILE="$(mktemp)"
|
|
trap 'rm -f "$SESSION_LIST" "$EVENTS_FILE"' EXIT
|
|
|
|
python3 - "$PROJECT_ROOT" "$SESSION_ROOT" "$ARCHIVE_ROOT" > "$SESSION_LIST" <<'PY'
|
|
import json
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
project = Path(sys.argv[1]).resolve()
|
|
roots = [Path(item) for item in sys.argv[2:]]
|
|
for root in roots:
|
|
if not root.exists():
|
|
continue
|
|
for path in root.rglob("*.jsonl"):
|
|
if ".bak." in path.name:
|
|
continue
|
|
meta = {}
|
|
try:
|
|
with path.open("r", encoding="utf-8", errors="replace") as handle:
|
|
for _ in range(20):
|
|
line = handle.readline()
|
|
if not line:
|
|
break
|
|
record = json.loads(line)
|
|
if record.get("type") == "session_meta":
|
|
meta = record.get("payload") or {}
|
|
break
|
|
cwd = Path(str(meta.get("cwd") or "")).resolve()
|
|
except (OSError, ValueError, json.JSONDecodeError):
|
|
continue
|
|
if cwd == project or project in cwd.parents:
|
|
print(path)
|
|
PY
|
|
sort -o "$SESSION_LIST" "$SESSION_LIST"
|
|
: > "$EVENTS_FILE"
|
|
while IFS= read -r session; do
|
|
rg -a -N -H \
|
|
'"type":"event_msg","payload":\{"type":"(user_message|task_complete)"' \
|
|
"$session" >> "$EVENTS_FILE" || true
|
|
done < "$SESSION_LIST"
|
|
|
|
python3 "$PROJECT_ROOT/开发文档/10、项目管理/scripts/analyze_workphone_conversations.py" \
|
|
--events "$EVENTS_FILE" \
|
|
--output-dir "$OUTPUT_DIR"
|