eagle-mem 4.6.2 → 4.7.0

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/scripts/search.sh CHANGED
@@ -93,7 +93,7 @@ search_keyword() {
93
93
  fi
94
94
 
95
95
  if [ "$json_output" = true ]; then
96
- eagle_db_json "SELECT s.id, s.project, s.request, s.completed, s.learned, s.created_at
96
+ eagle_db_json "SELECT s.id, s.project, s.agent, s.request, s.completed, s.learned, s.created_at
97
97
  FROM summaries s
98
98
  JOIN summaries_fts f ON f.rowid = s.id
99
99
  WHERE summaries_fts MATCH '$q'
@@ -104,7 +104,7 @@ search_keyword() {
104
104
  fi
105
105
 
106
106
  local results
107
- results=$(eagle_db "SELECT s.id, s.project, s.request, s.completed, s.learned, s.created_at
107
+ results=$(eagle_db "SELECT s.id, s.project, s.agent, s.request, s.completed, s.learned, s.created_at
108
108
  FROM summaries s
109
109
  JOIN summaries_fts f ON f.rowid = s.id
110
110
  WHERE summaries_fts MATCH '$q'
@@ -118,12 +118,13 @@ search_keyword() {
118
118
  fi
119
119
 
120
120
  echo ""
121
- while IFS='|' read -r sid sproj req completed learned created_at; do
121
+ while IFS='|' read -r sid sproj sagent req completed learned created_at; do
122
122
  [ -z "$sid" ] && continue
123
123
  echo -e " ${BOLD}#$sid${RESET} ${DIM}$created_at${RESET}"
124
124
  if [ "$cross_project" = true ]; then
125
125
  echo -e " ${DIM}project:${RESET} $sproj"
126
126
  fi
127
+ echo -e " ${DIM}source:${RESET} $(eagle_agent_label "$sagent")"
127
128
  [ -n "$req" ] && echo -e " ${CYAN}Request:${RESET} $req"
128
129
  [ -n "$completed" ] && echo -e " ${GREEN}Done:${RESET} $completed"
129
130
  [ -n "$learned" ] && echo -e " ${YELLOW}Learned:${RESET} $learned"
@@ -137,7 +138,7 @@ search_timeline() {
137
138
  local p; p=$(eagle_sql_escape "$project")
138
139
 
139
140
  if [ "$json_output" = true ]; then
140
- eagle_db_json "SELECT s.id, s.request, s.completed, s.learned, s.next_steps, s.created_at
141
+ eagle_db_json "SELECT s.id, s.agent, s.request, s.completed, s.learned, s.next_steps, s.created_at
141
142
  FROM summaries s
142
143
  WHERE s.project = '$p'
143
144
  ORDER BY s.created_at DESC
@@ -146,7 +147,7 @@ search_timeline() {
146
147
  fi
147
148
 
148
149
  local results
149
- results=$(eagle_db "SELECT s.id, s.request, s.completed, s.learned, s.next_steps, s.created_at
150
+ results=$(eagle_db "SELECT s.id, s.agent, s.request, s.completed, s.learned, s.next_steps, s.created_at
150
151
  FROM summaries s
151
152
  WHERE s.project = '$p'
152
153
  ORDER BY s.created_at DESC
@@ -162,9 +163,10 @@ search_timeline() {
162
163
  echo -e " ${DIM}─────────────────────────────────────${RESET}"
163
164
  echo ""
164
165
 
165
- while IFS='|' read -r sid req completed learned next_steps created_at; do
166
+ while IFS='|' read -r sid sagent req completed learned next_steps created_at; do
166
167
  [ -z "$sid" ] && continue
167
168
  echo -e " ${BOLD}#$sid${RESET} ${DIM}$created_at${RESET}"
169
+ echo -e " ${DIM}source:${RESET} $(eagle_agent_label "$sagent")"
168
170
  [ -n "$req" ] && echo -e " ${CYAN}Request:${RESET} $req"
169
171
  [ -n "$completed" ] && echo -e " ${GREEN}Done:${RESET} $completed"
170
172
  [ -n "$learned" ] && echo -e " ${YELLOW}Learned:${RESET} $learned"
@@ -179,7 +181,7 @@ search_session() {
179
181
  local sid_sql; sid_sql=$(eagle_sql_escape "$session_id")
180
182
 
181
183
  if [ "$json_output" = true ]; then
182
- eagle_db_json "SELECT o.tool_name, o.tool_input_summary, o.files_read, o.files_modified, o.created_at
184
+ eagle_db_json "SELECT o.agent, o.tool_name, o.tool_input_summary, o.files_read, o.files_modified, o.created_at
183
185
  FROM observations o
184
186
  WHERE o.session_id = '$sid_sql'
185
187
  ORDER BY o.created_at ASC;"
@@ -187,7 +189,7 @@ search_session() {
187
189
  fi
188
190
 
189
191
  local results
190
- results=$(eagle_db "SELECT o.tool_name, o.tool_input_summary, o.files_read, o.files_modified, o.created_at
192
+ results=$(eagle_db "SELECT o.agent, o.tool_name, o.tool_input_summary, o.files_read, o.files_modified, o.created_at
191
193
  FROM observations o
192
194
  WHERE o.session_id = '$sid_sql'
193
195
  ORDER BY o.created_at ASC;")
@@ -202,7 +204,7 @@ search_session() {
202
204
  echo -e " ${DIM}─────────────────────────────────────${RESET}"
203
205
  echo ""
204
206
 
205
- while IFS='|' read -r tool_name summary files_r files_m created_at; do
207
+ while IFS='|' read -r oagent tool_name summary files_r files_m created_at; do
206
208
  [ -z "$tool_name" ] && continue
207
209
  local icon="$DOT"
208
210
  case "$tool_name" in
@@ -211,7 +213,7 @@ search_session() {
211
213
  Edit) icon="${YELLOW}E${RESET}" ;;
212
214
  Bash) icon="${BLUE}\$${RESET}" ;;
213
215
  esac
214
- echo -e " ${icon} ${DIM}$created_at${RESET} $summary"
216
+ echo -e " ${icon} ${DIM}$created_at $(eagle_agent_label "$oagent")${RESET} $summary"
215
217
  done <<< "$results"
216
218
  echo ""
217
219
  }
@@ -261,8 +263,10 @@ search_files() {
261
263
  search_stats() {
262
264
  local p; p=$(eagle_sql_escape "$project")
263
265
 
264
- local sessions summaries observations tasks
266
+ local sessions sessions_claude sessions_codex summaries observations tasks
265
267
  sessions=$(eagle_db "SELECT COUNT(*) FROM sessions WHERE project = '$p';")
268
+ sessions_claude=$(eagle_db "SELECT COUNT(*) FROM sessions WHERE project = '$p' AND agent = 'claude-code';")
269
+ sessions_codex=$(eagle_db "SELECT COUNT(*) FROM sessions WHERE project = '$p' AND agent = 'codex';")
266
270
  summaries=$(eagle_db "SELECT COUNT(*) FROM summaries WHERE project = '$p';")
267
271
  observations=$(eagle_db "SELECT COUNT(*) FROM observations o JOIN sessions s ON s.id = o.session_id WHERE s.project = '$p';")
268
272
  tasks=$(eagle_db "SELECT COUNT(*) FROM claude_tasks WHERE project = '$p';")
@@ -272,11 +276,13 @@ search_stats() {
272
276
  if [ "$json_output" = true ]; then
273
277
  jq -nc --arg project "$project" \
274
278
  --argjson sessions "${sessions:-0}" \
279
+ --argjson sessions_claude "${sessions_claude:-0}" \
280
+ --argjson sessions_codex "${sessions_codex:-0}" \
275
281
  --argjson summaries "${summaries:-0}" \
276
282
  --argjson observations "${observations:-0}" \
277
283
  --argjson tasks "${tasks:-0}" \
278
284
  --argjson code_chunks "${chunks:-0}" \
279
- '{project: $project, sessions: $sessions, summaries: $summaries, observations: $observations, tasks: $tasks, code_chunks: $code_chunks}'
285
+ '{project: $project, sessions: $sessions, sessions_claude: $sessions_claude, sessions_codex: $sessions_codex, summaries: $summaries, observations: $observations, tasks: $tasks, code_chunks: $code_chunks}'
280
286
  return
281
287
  fi
282
288
 
@@ -285,6 +291,8 @@ search_stats() {
285
291
  echo -e " ${DIM}─────────────────────────────────────${RESET}"
286
292
  echo ""
287
293
  eagle_kv "Sessions:" "${sessions:-0}"
294
+ eagle_kv "Claude Code:" "${sessions_claude:-0}"
295
+ eagle_kv "Codex:" "${sessions_codex:-0}"
288
296
  eagle_kv "Summaries:" "${summaries:-0}"
289
297
  eagle_kv "Observations:" "${observations:-0}"
290
298
  eagle_kv "Tasks:" "${tasks:-0}"
@@ -347,7 +355,7 @@ search_memories() {
347
355
  fi
348
356
 
349
357
  if [ "$json_output" = true ]; then
350
- eagle_db_json "SELECT m.memory_name, m.memory_type, m.description, m.project, m.updated_at
358
+ eagle_db_json "SELECT m.memory_name, m.memory_type, m.description, m.project, m.updated_at, m.origin_agent
351
359
  FROM claude_memories m
352
360
  JOIN claude_memories_fts f ON f.rowid = m.id
353
361
  $where_match
@@ -357,7 +365,7 @@ search_memories() {
357
365
  fi
358
366
 
359
367
  local results
360
- results=$(eagle_db "SELECT m.memory_name, m.memory_type, m.description, m.project, m.updated_at
368
+ results=$(eagle_db "SELECT m.memory_name, m.memory_type, m.description, m.project, m.updated_at, m.origin_agent
361
369
  FROM claude_memories m
362
370
  JOIN claude_memories_fts f ON f.rowid = m.id
363
371
  $where_match
@@ -370,9 +378,9 @@ search_memories() {
370
378
  fi
371
379
 
372
380
  echo ""
373
- while IFS='|' read -r mname mtype mdesc mproj mupdated; do
381
+ while IFS='|' read -r mname mtype mdesc mproj mupdated morigin; do
374
382
  [ -z "$mname" ] && continue
375
- echo -e " ${BOLD}$mname${RESET} ${DIM}[$mtype]${RESET}"
383
+ echo -e " ${BOLD}$mname${RESET} ${DIM}[$mtype][$(eagle_agent_label "$morigin")]${RESET}"
376
384
  [ "$cross_project" = true ] && echo -e " ${DIM}project:${RESET} $mproj"
377
385
  [ -n "$mdesc" ] && echo -e " $mdesc"
378
386
  echo ""
@@ -381,14 +389,14 @@ search_memories() {
381
389
  fi
382
390
 
383
391
  if [ "$json_output" = true ]; then
384
- eagle_db_json "SELECT memory_name, memory_type, description, project, updated_at
392
+ eagle_db_json "SELECT memory_name, memory_type, description, project, updated_at, origin_agent
385
393
  FROM claude_memories $where_project
386
394
  ORDER BY updated_at DESC LIMIT $limit;"
387
395
  return
388
396
  fi
389
397
 
390
398
  local results
391
- results=$(eagle_db "SELECT memory_name, memory_type, description, updated_at
399
+ results=$(eagle_db "SELECT memory_name, memory_type, description, updated_at, origin_agent
392
400
  FROM claude_memories $where_project
393
401
  ORDER BY updated_at DESC LIMIT $limit;")
394
402
 
@@ -402,9 +410,9 @@ search_memories() {
402
410
  echo -e " ${DIM}─────────────────────────────────────${RESET}"
403
411
  echo ""
404
412
 
405
- while IFS='|' read -r mname mtype mdesc mupdated; do
413
+ while IFS='|' read -r mname mtype mdesc mupdated morigin; do
406
414
  [ -z "$mname" ] && continue
407
- echo -e " ${CYAN}[$mtype]${RESET} ${BOLD}$mname${RESET}"
415
+ echo -e " ${CYAN}[$mtype][$(eagle_agent_label "$morigin")]${RESET} ${BOLD}$mname${RESET}"
408
416
  [ -n "$mdesc" ] && echo -e " ${DIM}$mdesc${RESET}"
409
417
  done <<< "$results"
410
418
  echo ""
@@ -430,7 +438,7 @@ search_tasks() {
430
438
  local q; q=$(eagle_sql_escape "$sanitized_tq")
431
439
 
432
440
  if [ "$json_output" = true ]; then
433
- eagle_db_json "SELECT t.subject, t.status, t.project, t.updated_at
441
+ eagle_db_json "SELECT t.subject, t.status, t.project, t.updated_at, t.origin_agent
434
442
  FROM claude_tasks t
435
443
  JOIN claude_tasks_fts f ON f.rowid = t.id
436
444
  WHERE claude_tasks_fts MATCH '$q'
@@ -441,7 +449,7 @@ search_tasks() {
441
449
  fi
442
450
 
443
451
  local results
444
- results=$(eagle_db "SELECT t.subject, t.status, t.project, t.updated_at
452
+ results=$(eagle_db "SELECT t.subject, t.status, t.project, t.updated_at, t.origin_agent
445
453
  FROM claude_tasks t
446
454
  JOIN claude_tasks_fts f ON f.rowid = t.id
447
455
  WHERE claude_tasks_fts MATCH '$q'
@@ -455,7 +463,7 @@ search_tasks() {
455
463
  fi
456
464
 
457
465
  echo ""
458
- while IFS='|' read -r tsubject tstatus tproj tupdated; do
466
+ while IFS='|' read -r tsubject tstatus tproj tupdated torigin; do
459
467
  [ -z "$tsubject" ] && continue
460
468
  local color="$DIM"
461
469
  case "$tstatus" in
@@ -463,14 +471,14 @@ search_tasks() {
463
471
  completed) color="$GREEN" ;;
464
472
  pending) color="$CYAN" ;;
465
473
  esac
466
- echo -e " ${color}[$tstatus]${RESET} $tsubject"
474
+ echo -e " ${color}[$tstatus][$(eagle_agent_label "$torigin")]${RESET} $tsubject"
467
475
  done <<< "$results"
468
476
  echo ""
469
477
  return
470
478
  fi
471
479
 
472
480
  if [ "$json_output" = true ]; then
473
- eagle_db_json "SELECT subject, status, project, updated_at
481
+ eagle_db_json "SELECT subject, status, project, updated_at, origin_agent
474
482
  FROM claude_tasks
475
483
  WHERE status IN ('in_progress', 'pending')
476
484
  $where_project
@@ -480,7 +488,7 @@ search_tasks() {
480
488
  fi
481
489
 
482
490
  local results
483
- results=$(eagle_db "SELECT subject, status, updated_at
491
+ results=$(eagle_db "SELECT subject, status, updated_at, origin_agent
484
492
  FROM claude_tasks
485
493
  WHERE status IN ('in_progress', 'pending')
486
494
  $where_project
@@ -497,14 +505,14 @@ search_tasks() {
497
505
  echo -e " ${DIM}─────────────────────────────────────${RESET}"
498
506
  echo ""
499
507
 
500
- while IFS='|' read -r tsubject tstatus tupdated; do
508
+ while IFS='|' read -r tsubject tstatus tupdated torigin; do
501
509
  [ -z "$tsubject" ] && continue
502
510
  local color="$DIM"
503
511
  case "$tstatus" in
504
512
  in_progress) color="$YELLOW" ;;
505
513
  pending) color="$CYAN" ;;
506
514
  esac
507
- echo -e " ${color}[$tstatus]${RESET} $tsubject"
515
+ echo -e " ${color}[$tstatus][$(eagle_agent_label "$torigin")]${RESET} $tsubject"
508
516
  done <<< "$results"
509
517
  echo ""
510
518
  }
@@ -10,6 +10,7 @@ LIB_DIR="$SCRIPTS_DIR/../lib"
10
10
 
11
11
  . "$SCRIPTS_DIR/style.sh"
12
12
  . "$LIB_DIR/common.sh"
13
+ . "$LIB_DIR/codex-hooks.sh"
13
14
 
14
15
  SETTINGS="$EAGLE_SETTINGS"
15
16
 
@@ -33,6 +34,12 @@ else
33
34
  eagle_warn "Could not patch settings.json (jq not found or file missing)"
34
35
  fi
35
36
 
37
+ if eagle_remove_codex_hooks; then
38
+ eagle_ok "Hooks removed from Codex hooks.json"
39
+ else
40
+ eagle_warn "Could not patch Codex hooks.json (jq not found or file missing)"
41
+ fi
42
+
36
43
  # ─── Remove skill symlinks ────────────────────────────────
37
44
 
38
45
  if [ -d "$EAGLE_SKILLS_DIR" ]; then
package/scripts/update.sh CHANGED
@@ -13,8 +13,11 @@ LIB_DIR="$SCRIPTS_DIR/../lib"
13
13
  . "$LIB_DIR/common.sh"
14
14
  . "$LIB_DIR/db.sh"
15
15
  . "$LIB_DIR/hooks.sh"
16
+ . "$LIB_DIR/codex-hooks.sh"
16
17
 
17
18
  SETTINGS="$EAGLE_SETTINGS"
19
+ claude_found=false
20
+ codex_found=false
18
21
 
19
22
  eagle_header "Update"
20
23
 
@@ -30,6 +33,11 @@ if [ ! -f "$EAGLE_MEM_DIR/memory.db" ]; then
30
33
  eagle_warn "Database not found — will be created"
31
34
  fi
32
35
 
36
+ [ -d "$HOME/.claude" ] && claude_found=true
37
+ if [ -d "$EAGLE_CODEX_DIR" ] || command -v codex &>/dev/null; then
38
+ codex_found=true
39
+ fi
40
+
33
41
  # ─── Update files ──────────────────────────────────────────
34
42
 
35
43
  mkdir -p "$EAGLE_MEM_DIR"/{hooks,lib,db,scripts}
@@ -63,7 +71,7 @@ fi
63
71
 
64
72
  # ─── Re-register hooks (idempotent) ───────────────────────
65
73
 
66
- if [ -f "$SETTINGS" ] && command -v jq &>/dev/null; then
74
+ if [ "$claude_found" = true ] && [ -f "$SETTINGS" ] && command -v jq &>/dev/null; then
67
75
  # Update PostToolUse matcher if it has the old value (pre-v1.3.0)
68
76
  if jq -e '.hooks.PostToolUse[]? | select(.matcher == "Read|Write|Edit|Bash")' "$SETTINGS" &>/dev/null; then
69
77
  _tmp=$(mktemp)
@@ -85,9 +93,16 @@ if [ -f "$SETTINGS" ] && command -v jq &>/dev/null; then
85
93
  eagle_ok "Hooks registered"
86
94
  fi
87
95
 
96
+ if [ "$codex_found" = true ] && command -v jq &>/dev/null; then
97
+ eagle_register_codex_hooks
98
+ eagle_ok "Codex hooks registered"
99
+ elif [ "$codex_found" = false ]; then
100
+ eagle_info "Codex hooks skipped ${DIM}(Codex not detected)${RESET}"
101
+ fi
102
+
88
103
  # ─── Update skill symlinks ────────────────────────────────
89
104
 
90
- if [ -d "$PACKAGE_DIR/skills" ]; then
105
+ if [ "$claude_found" = true ] && [ -d "$PACKAGE_DIR/skills" ]; then
91
106
  mkdir -p "$EAGLE_SKILLS_DIR"
92
107
  # Remove stale symlinks for deleted skills (find catches broken symlinks; glob doesn't)
93
108
  find "$EAGLE_SKILLS_DIR" -maxdepth 1 -name "eagle-mem-*" -type l 2>/dev/null | while read -r existing; do
@@ -118,10 +133,20 @@ fi
118
133
 
119
134
  # ─── Patch CLAUDE.md with Eagle Mem instructions ─────────
120
135
 
121
- if eagle_patch_claude_md; then
122
- eagle_ok "CLAUDE.md updated ${DIM}(eagle-summary instructions added)${RESET}"
123
- else
124
- eagle_ok "CLAUDE.md up to date"
136
+ if [ "$claude_found" = true ]; then
137
+ if eagle_patch_claude_md; then
138
+ eagle_ok "CLAUDE.md updated ${DIM}(eagle-summary instructions added)${RESET}"
139
+ else
140
+ eagle_ok "CLAUDE.md up to date"
141
+ fi
142
+ fi
143
+
144
+ if [ "$codex_found" = true ]; then
145
+ if eagle_patch_codex_agents_md; then
146
+ eagle_ok "AGENTS.md updated ${DIM}(Codex eagle-summary instructions added)${RESET}"
147
+ else
148
+ eagle_ok "AGENTS.md up to date"
149
+ fi
125
150
  fi
126
151
 
127
152
  # ─── Save installed version ───────────────────────────────