From dabc679cfe24e07e535dc3d4cbda771170bf48ca Mon Sep 17 00:00:00 2001 From: Harivansh Rathi Date: Thu, 2 Apr 2026 17:04:51 -0400 Subject: [PATCH] sync/search agent history --- justfile | 6 +++ scripts/search-agent-history-remote.sh | 61 ++++++++++++++++++++++++++ scripts/search-agent-history.sh | 12 +++++ scripts/sync-agent-history.sh | 36 +++++++++++++++ 4 files changed, 115 insertions(+) create mode 100755 scripts/search-agent-history-remote.sh create mode 100755 scripts/search-agent-history.sh create mode 100755 scripts/sync-agent-history.sh diff --git a/justfile b/justfile index 6b6b707..d9590da 100644 --- a/justfile +++ b/justfile @@ -31,5 +31,11 @@ secrets-sync: sync-browser-auth: ./scripts/sync-bw-browser-auth.sh +sync-agent-history: + ./scripts/sync-agent-history.sh + +search-agent-history query='': + ./scripts/search-agent-history.sh "{{query}}" + switch-netty: ssh root@netty "nixos-rebuild switch --flake github:harivansh-afk/nix#netty --refresh" diff --git a/scripts/search-agent-history-remote.sh b/scripts/search-agent-history-remote.sh new file mode 100755 index 0000000..5c7e9bf --- /dev/null +++ b/scripts/search-agent-history-remote.sh @@ -0,0 +1,61 @@ +#!/usr/bin/env bash +set -euo pipefail + +root="${AGENT_HISTORY_ROOT:-$HOME/.local/share/agent-history/raw}" +initial_query="${INITIAL_QUERY:-}" + +if [[ ! -d "$root" ]]; then + printf 'Agent history root not found: %s\n' "$root" >&2 + exit 1 +fi + +search_script="$(mktemp)" +cleanup() { + rm -f "$search_script" +} +trap cleanup EXIT + +cat > "$search_script" <<'EOF' +#!/usr/bin/env bash +set -euo pipefail + +root="${AGENT_HISTORY_ROOT:?}" +query="${1:-}" + +if [[ -z "$query" ]]; then + exit 0 +fi + +rg --json --line-number --smart-case --glob '*.jsonl' -- "$query" "$root" 2>/dev/null \ + | jq -r ' + select(.type == "match") + | [ + .data.path.text, + (.data.line_number | tostring), + (.data.lines.text | gsub("[\r\n\t]+"; " ")) + ] + | @tsv + ' +EOF + +chmod +x "$search_script" +export AGENT_HISTORY_ROOT="$root" + +fzf --phony --ansi --disabled \ + --query "$initial_query" \ + --prompt 'history> ' \ + --delimiter $'\t' \ + --with-nth=1,2,3 \ + --preview ' + file=$(printf "%s" {} | cut -f1) + line=$(printf "%s" {} | cut -f2) + [[ -n "$file" ]] || exit 0 + [[ "$line" =~ ^[0-9]+$ ]] || line=1 + start=$(( line > 20 ? line - 20 : 1 )) + end=$(( line + 20 )) + sed -n "${start},${end}p" "$file" + ' \ + --preview-window=right:70%:wrap \ + --header 'Type to search archived Claude and Codex logs on netty' \ + --bind "start:reload:$search_script {q} || true" \ + --bind "change:reload:sleep 0.1; $search_script {q} || true" diff --git a/scripts/search-agent-history.sh b/scripts/search-agent-history.sh new file mode 100755 index 0000000..a3336ba --- /dev/null +++ b/scripts/search-agent-history.sh @@ -0,0 +1,12 @@ +#!/usr/bin/env bash +set -euo pipefail + +remote="${AGENT_HISTORY_REMOTE:-netty}" +remote_root="${AGENT_HISTORY_REMOTE_ROOT:-/home/rathi/.local/share/agent-history/raw}" +initial_query="${1:-}" +script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + +remote_root_q="$(printf '%q' "$remote_root")" +initial_query_q="$(printf '%q' "$initial_query")" + +ssh -t "$remote" "AGENT_HISTORY_ROOT=${remote_root_q} INITIAL_QUERY=${initial_query_q} bash -s" < "${script_dir}/search-agent-history-remote.sh" diff --git a/scripts/sync-agent-history.sh b/scripts/sync-agent-history.sh new file mode 100755 index 0000000..126b396 --- /dev/null +++ b/scripts/sync-agent-history.sh @@ -0,0 +1,36 @@ +#!/usr/bin/env bash +set -euo pipefail + +remote="${AGENT_HISTORY_REMOTE:-netty}" +remote_root="${AGENT_HISTORY_REMOTE_ROOT:-/home/rathi/.local/share/agent-history/raw/darwin}" + +remote_root_q="$(printf '%q' "$remote_root")" + +ssh "$remote" "mkdir -p \ + ${remote_root_q}/claude \ + ${remote_root_q}/claude/transcripts \ + ${remote_root_q}/claude/projects \ + ${remote_root_q}/codex \ + ${remote_root_q}/codex/sessions" + +sync_path() { + local src="$1" + local dest="$2" + + if [[ ! -e "$src" ]]; then + printf 'Skipping missing path: %s\n' "$src" + return + fi + + printf 'Syncing %s -> %s:%s\n' "$src" "$remote" "$dest" + rsync -az "$src" "$remote:$dest" +} + +sync_path "$HOME/.claude/history.jsonl" "${remote_root}/claude/" +sync_path "$HOME/.claude/transcripts/" "${remote_root}/claude/transcripts/" +sync_path "$HOME/.claude/projects/" "${remote_root}/claude/projects/" +sync_path "$HOME/.codex/history.jsonl" "${remote_root}/codex/" +sync_path "$HOME/.codex/session_index.jsonl" "${remote_root}/codex/" +sync_path "$HOME/.codex/sessions/" "${remote_root}/codex/sessions/" + +printf 'Agent history sync complete.\n'