eagle-mem 1.3.0 → 1.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/common.sh CHANGED
@@ -18,7 +18,13 @@ eagle_log() {
18
18
 
19
19
  eagle_project_from_cwd() {
20
20
  local cwd="${1:-$(pwd)}"
21
- basename "$cwd"
21
+ local git_root
22
+ git_root=$(git -C "$cwd" rev-parse --show-toplevel 2>/dev/null)
23
+ if [ -n "$git_root" ]; then
24
+ basename "$git_root"
25
+ else
26
+ basename "$cwd"
27
+ fi
22
28
  }
23
29
 
24
30
  eagle_sql_escape() {
package/lib/db.sh CHANGED
@@ -505,6 +505,59 @@ eagle_search_claude_tasks() {
505
505
  LIMIT $limit;"
506
506
  }
507
507
 
508
+ eagle_build_session_project_map() {
509
+ local claude_projects_dir="$HOME/.claude/projects"
510
+ [ ! -d "$claude_projects_dir" ] && return 0
511
+
512
+ for proj_dir in "$claude_projects_dir"/*/; do
513
+ [ ! -d "$proj_dir" ] && continue
514
+
515
+ local project=""
516
+ local sample_jsonl
517
+ sample_jsonl=$(ls "$proj_dir"*.jsonl 2>/dev/null | head -1)
518
+ if [ -n "$sample_jsonl" ] && [ -f "$sample_jsonl" ]; then
519
+ local cwd
520
+ cwd=$(head -10 "$sample_jsonl" | jq -r 'select(.cwd != null) | .cwd' 2>/dev/null | head -1)
521
+ if [ -n "$cwd" ]; then
522
+ project=$(eagle_project_from_cwd "$cwd")
523
+ fi
524
+ fi
525
+ [ -z "$project" ] && continue
526
+
527
+ for jsonl in "$proj_dir"*.jsonl; do
528
+ [ ! -f "$jsonl" ] && continue
529
+ local sid
530
+ sid=$(basename "$jsonl" .jsonl)
531
+ echo "$sid|$project"
532
+ done
533
+ done
534
+ }
535
+
536
+ eagle_backfill_projects() {
537
+ local updated=0
538
+ local map
539
+ map=$(eagle_build_session_project_map)
540
+ [ -z "$map" ] && echo "0" && return 0
541
+
542
+ while IFS='|' read -r sid project; do
543
+ [ -z "$sid" ] || [ -z "$project" ] && continue
544
+ local sid_sql proj_sql
545
+ sid_sql=$(eagle_sql_escape "$sid")
546
+ proj_sql=$(eagle_sql_escape "$project")
547
+
548
+ local changed
549
+ changed=$(eagle_db "UPDATE sessions SET project = '$proj_sql' WHERE id = '$sid_sql' AND (project = '' OR project != '$proj_sql');
550
+ SELECT changes();")
551
+ changed=$(eagle_db "UPDATE claude_tasks SET project = '$proj_sql' WHERE source_session_id = '$sid_sql' AND (project = '' OR project != '$proj_sql');
552
+ SELECT changes();")
553
+ [ "${changed:-0}" -gt 0 ] && updated=$((updated + changed))
554
+ eagle_db "UPDATE claude_memories SET project = '$proj_sql' WHERE origin_session_id = '$sid_sql' AND (project = '' OR project != '$proj_sql');"
555
+ eagle_db "UPDATE claude_plans SET project = '$proj_sql' WHERE origin_session_id = '$sid_sql' AND (project = '' OR project != '$proj_sql');"
556
+ done <<< "$map"
557
+
558
+ echo "$updated"
559
+ }
560
+
508
561
  eagle_prune_orphan_chunks() {
509
562
  local project; project=$(eagle_sql_escape "$1")
510
563
  local target_dir="$2"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "eagle-mem",
3
- "version": "1.3.0",
3
+ "version": "1.3.1",
4
4
  "description": "Lightweight persistent memory for Claude Code — SQLite + FTS5, no daemon, no bloat",
5
5
  "bin": {
6
6
  "eagle-mem": "bin/eagle-mem"
@@ -448,10 +448,6 @@ memories_sync() {
448
448
  base=$(basename "$memfile")
449
449
  [ "$base" = "MEMORY.md" ] && continue
450
450
 
451
- local proj_slug proj_name
452
- proj_slug=$(echo "$memfile" | sed "s|$claude_mem_root/||" | cut -d'/' -f1)
453
- proj_name=$(echo "$proj_slug" | rev | cut -d'-' -f1 | rev)
454
-
455
451
  local existing_hash
456
452
  existing_hash=$(eagle_db "SELECT content_hash FROM claude_memories WHERE file_path = '$(eagle_sql_escape "$memfile")';")
457
453
  local new_hash
@@ -462,9 +458,9 @@ memories_sync() {
462
458
  continue
463
459
  fi
464
460
 
465
- eagle_capture_claude_memory "$memfile" "" "$proj_name"
461
+ eagle_capture_claude_memory "$memfile" "" ""
466
462
  mem_synced=$((mem_synced + 1))
467
- eagle_ok "Memory: $base → $proj_name"
463
+ eagle_ok "Memory: $base"
468
464
  done < <(find "$claude_mem_root" -path "*/memory/*.md" -print0 2>/dev/null)
469
465
  fi
470
466
 
@@ -541,6 +537,19 @@ memories_sync() {
541
537
  fi
542
538
 
543
539
  eagle_kv "Tasks:" "$task_synced synced, $task_skipped unchanged"
540
+ echo ""
541
+
542
+ # ─── Backfill project names ──────────────────────────
543
+ eagle_info "Resolving project names from Claude Code transcripts..."
544
+
545
+ local backfilled
546
+ backfilled=$(eagle_backfill_projects)
547
+ if [ "${backfilled:-0}" -gt 0 ]; then
548
+ eagle_ok "$backfilled rows updated with correct project names"
549
+ else
550
+ eagle_ok "All project names up to date"
551
+ fi
552
+
544
553
  eagle_footer "Sync complete."
545
554
  }
546
555
 
package/scripts/update.sh CHANGED
@@ -11,6 +11,7 @@ LIB_DIR="$SCRIPTS_DIR/../lib"
11
11
 
12
12
  . "$SCRIPTS_DIR/style.sh"
13
13
  . "$LIB_DIR/common.sh"
14
+ . "$LIB_DIR/db.sh"
14
15
 
15
16
  SETTINGS="$EAGLE_SETTINGS"
16
17
 
@@ -105,6 +106,15 @@ if [ -d "$PACKAGE_DIR/skills" ]; then
105
106
  eagle_ok "Skills updated"
106
107
  fi
107
108
 
109
+ # ─── Backfill project names ───────────────────────────────
110
+
111
+ backfilled=$(eagle_backfill_projects 2>/dev/null)
112
+ if [ "${backfilled:-0}" -gt 0 ]; then
113
+ eagle_ok "Project names: $backfilled rows corrected"
114
+ else
115
+ eagle_ok "Project names up to date"
116
+ fi
117
+
108
118
  # ─── Summary ───────────────────────────────────────────────
109
119
 
110
120
  version=$(node -e "console.log(require('$PACKAGE_DIR/package.json').version)" 2>/dev/null || echo "unknown")