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/README.md +40 -8
- package/db/023_guardrails.sql +3 -2
- package/db/024_guardrails_unique.sql +46 -0
- package/db/025_pending_feature_verifications.sql +30 -0
- package/db/026_agent_source.sql +18 -0
- package/db/027_feature_verification_fingerprints.sql +9 -0
- package/hooks/post-tool-use.sh +41 -13
- package/hooks/pre-tool-use.sh +106 -14
- package/hooks/session-end.sh +2 -1
- package/hooks/session-start.sh +54 -13
- package/hooks/stop.sh +114 -21
- package/hooks/user-prompt-submit.sh +13 -5
- package/lib/codex-hooks.sh +194 -0
- package/lib/common.sh +341 -0
- package/lib/db-features.sh +222 -0
- package/lib/db-guardrails.sh +2 -1
- package/lib/db-mirrors.sh +24 -15
- package/lib/db-observations.sh +3 -2
- package/lib/db-sessions.sh +6 -2
- package/lib/db-summaries.sh +6 -3
- package/lib/hooks-posttool.sh +8 -6
- package/package.json +7 -3
- package/scripts/feature.sh +70 -2
- package/scripts/guard.sh +4 -1
- package/scripts/help.sh +7 -2
- package/scripts/install.sh +118 -76
- package/scripts/memories.sh +21 -18
- package/scripts/search.sh +36 -28
- package/scripts/uninstall.sh +7 -0
- package/scripts/update.sh +31 -6
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
|
}
|
package/scripts/uninstall.sh
CHANGED
|
@@ -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
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
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 ───────────────────────────────
|