eagle-mem 3.1.0 → 3.1.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.
@@ -0,0 +1,15 @@
1
+ -- Fix: UNIQUE(key, project) fails with NULL project (each NULL is unique in SQL).
2
+ -- Change project to NOT NULL DEFAULT '' so ON CONFLICT works for global keys.
3
+ CREATE TABLE IF NOT EXISTS eagle_meta_new (
4
+ key TEXT NOT NULL,
5
+ project TEXT NOT NULL DEFAULT '',
6
+ value TEXT NOT NULL,
7
+ updated_at TEXT DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
8
+ UNIQUE(key, project)
9
+ );
10
+
11
+ INSERT OR REPLACE INTO eagle_meta_new (key, project, value, updated_at)
12
+ SELECT key, COALESCE(project, ''), value, updated_at FROM eagle_meta;
13
+
14
+ DROP TABLE eagle_meta;
15
+ ALTER TABLE eagle_meta_new RENAME TO eagle_meta;
@@ -29,6 +29,8 @@ project=$(eagle_project_from_cwd "$cwd")
29
29
  # Skip ephemeral directories (tmp, Downloads, etc.) — no tracking
30
30
  [ -z "$project" ] && exit 0
31
31
 
32
+ p_esc=$(eagle_sql_escape "$project")
33
+
32
34
  eagle_log "INFO" "SessionStart: session=$session_id project=$project source=$source_type"
33
35
 
34
36
  eagle_upsert_session "$session_id" "$project" "$cwd" "$model" "$source_type"
@@ -69,27 +69,16 @@ eagle_count_session_summaries() {
69
69
 
70
70
  eagle_meta_get() {
71
71
  local key; key=$(eagle_sql_escape "$1")
72
- local project="${2:-}"
73
- if [ -n "$project" ]; then
74
- local p_esc; p_esc=$(eagle_sql_escape "$project")
75
- eagle_db "SELECT value FROM eagle_meta WHERE key = '$key' AND project = '$p_esc' LIMIT 1;"
76
- else
77
- eagle_db "SELECT value FROM eagle_meta WHERE key = '$key' AND project IS NULL LIMIT 1;"
78
- fi
72
+ local p_esc; p_esc=$(eagle_sql_escape "${2:-}")
73
+ eagle_db "SELECT value FROM eagle_meta WHERE key = '$key' AND project = '$p_esc' LIMIT 1;"
79
74
  }
80
75
 
81
76
  eagle_meta_set() {
82
77
  local key; key=$(eagle_sql_escape "$1")
83
78
  local value; value=$(eagle_sql_escape "$2")
84
- local project="${3:-}"
85
- if [ -n "$project" ]; then
86
- local p_esc; p_esc=$(eagle_sql_escape "$project")
87
- eagle_db "INSERT INTO eagle_meta (key, project, value) VALUES ('$key', '$p_esc', '$value')
88
- ON CONFLICT(key, project) DO UPDATE SET value = excluded.value, updated_at = strftime('%Y-%m-%dT%H:%M:%fZ', 'now');"
89
- else
90
- eagle_db "INSERT INTO eagle_meta (key, project, value) VALUES ('$key', NULL, '$value')
91
- ON CONFLICT(key, project) DO UPDATE SET value = excluded.value, updated_at = strftime('%Y-%m-%dT%H:%M:%fZ', 'now');"
92
- fi
79
+ local p_esc; p_esc=$(eagle_sql_escape "${3:-}")
80
+ eagle_db "INSERT INTO eagle_meta (key, project, value) VALUES ('$key', '$p_esc', '$value')
81
+ ON CONFLICT(key, project) DO UPDATE SET value = excluded.value, updated_at = strftime('%Y-%m-%dT%H:%M:%fZ', 'now');"
93
82
  }
94
83
 
95
84
  eagle_count_sessions_since() {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "eagle-mem",
3
- "version": "3.1.0",
3
+ "version": "3.1.1",
4
4
  "description": "Persistent memory for Claude Code — SQLite + FTS5, no daemon, no bloat",
5
5
  "bin": {
6
6
  "eagle-mem": "bin/eagle-mem"
package/scripts/health.sh CHANGED
@@ -13,8 +13,6 @@ LIB_DIR="$SCRIPT_DIR/../lib"
13
13
  . "$LIB_DIR/db.sh"
14
14
  . "$LIB_DIR/provider.sh"
15
15
 
16
- eagle_header "Health Check"
17
-
18
16
  project=""
19
17
  JSON_OUT=0
20
18
 
@@ -26,6 +24,13 @@ while [ $# -gt 0 ]; do
26
24
  esac
27
25
  done
28
26
 
27
+ # In JSON mode, redirect all text output to stderr so stdout is clean JSON
28
+ if [ "$JSON_OUT" -eq 1 ]; then
29
+ exec 3>&1 1>&2
30
+ fi
31
+
32
+ eagle_header "Health Check"
33
+
29
34
  if [ -z "$project" ]; then
30
35
  project=$(eagle_project_from_cwd "$(pwd)")
31
36
  fi
@@ -214,5 +219,5 @@ if [ "$JSON_OUT" -eq 1 ]; then
214
219
  '{project:$project, score:$score, max:$max_score, pct:$pct, grade:$grade,
215
220
  enrichment:{total:$total_summaries, enriched:$enriched_summaries},
216
221
  features:$features, command_rules:$command_rules,
217
- provider:$provider, noise_pct:$noise_pct}'
222
+ provider:$provider, noise_pct:$noise_pct}' >&3
218
223
  fi
@@ -142,7 +142,7 @@ cp "$PACKAGE_DIR"/hooks/*.sh "$EAGLE_MEM_DIR/hooks/"
142
142
  cp "$PACKAGE_DIR"/lib/*.sh "$EAGLE_MEM_DIR/lib/"
143
143
  cp "$PACKAGE_DIR"/db/*.sh "$EAGLE_MEM_DIR/db/"
144
144
  cp "$PACKAGE_DIR"/db/*.sql "$EAGLE_MEM_DIR/db/"
145
- cp "$PACKAGE_DIR"/scripts/statusline-em.sh "$EAGLE_MEM_DIR/scripts/" 2>/dev/null
145
+ cp "$PACKAGE_DIR"/scripts/*.sh "$EAGLE_MEM_DIR/scripts/" 2>/dev/null
146
146
 
147
147
  chmod +x "$EAGLE_MEM_DIR"/hooks/*.sh
148
148
  chmod +x "$EAGLE_MEM_DIR"/db/migrate.sh
package/scripts/update.sh CHANGED
@@ -32,15 +32,17 @@ fi
32
32
 
33
33
  # ─── Update files ──────────────────────────────────────────
34
34
 
35
- mkdir -p "$EAGLE_MEM_DIR"/{hooks,lib,db}
35
+ mkdir -p "$EAGLE_MEM_DIR"/{hooks,lib,db,scripts}
36
36
 
37
37
  cp "$PACKAGE_DIR"/hooks/*.sh "$EAGLE_MEM_DIR/hooks/"
38
38
  cp "$PACKAGE_DIR"/lib/*.sh "$EAGLE_MEM_DIR/lib/"
39
39
  cp "$PACKAGE_DIR"/db/*.sh "$EAGLE_MEM_DIR/db/"
40
40
  cp "$PACKAGE_DIR"/db/*.sql "$EAGLE_MEM_DIR/db/"
41
+ cp "$PACKAGE_DIR"/scripts/*.sh "$EAGLE_MEM_DIR/scripts/" 2>/dev/null
41
42
 
42
43
  chmod +x "$EAGLE_MEM_DIR"/hooks/*.sh
43
44
  chmod +x "$EAGLE_MEM_DIR"/db/migrate.sh
45
+ chmod +x "$EAGLE_MEM_DIR"/scripts/*.sh 2>/dev/null
44
46
 
45
47
  eagle_ok "Files updated"
46
48