🎉 init: 小龙的工作空间

This commit is contained in:
大海
2026-06-06 10:40:48 +08:00
commit a188ee1426
3201 changed files with 231817 additions and 0 deletions
+196
View File
@@ -0,0 +1,196 @@
#!/usr/bin/env bash
# memory-auto.sh — 记忆自动触发器(Phase 4)
#
# 让记忆系统"自己动起来":
# 1. 会话开始时自动加载 Core Memory
# 2. 对话中自动判断是否需要记忆操作
# 3. 会话结束时自动 flush
# 4. 定期自动维护
#
# 用法:
# bash scripts/memory-auto.sh on-start # 会话开始时调用
# bash scripts/memory-auto.sh on-message # 收到消息时调用(传入消息)
# bash scripts/memory-auto.sh on-end # 会话结束时调用
# bash scripts/memory-auto.sh on-idle # 空闲时调用(维护)
# bash scripts/memory-auto.sh status # 查看自动触发状态
set -euo pipefail
WORKSPACE="$(cd "$(dirname "$0")/.." && pwd)"
MEMORY_DIR="$WORKSPACE/memory"
CORE_DIR="$MEMORY_DIR/core"
LOG="$MEMORY_DIR/.memory-auto.log"
# 加载 API Key
if [ -z "${DEEPSEEK_API_KEY:-}" ] && [ -f ~/.zshrc ]; then
eval "$(grep '^export DEEPSEEK_API_KEY=' ~/.zshrc 2>/dev/null || true)"
fi
export DEEPSEEK_API_KEY
log() {
echo "$(date '+%Y-%m-%d %H:%M') | $1" >> "$LOG"
}
# ── 1. 会话开始 ──────────────────────────────────────
on_start() {
echo "🚀 记忆系统: 会话开始"
echo ""
# 加载 Core Memory
echo "🧠 加载 Core Memory Blocks:"
for f in "$CORE_DIR"/*.md; do
[ -f "$f" ] || continue
local name=$(basename "$f" .md)
local size=$(wc -c < "$f" | tr -d ' ')
echo "$name ($size bytes)"
done
echo ""
# 检查今天是否已有 daily
local today="$MEMORY_DIR/daily/$(date +%Y-%m-%d).md"
if [ ! -f "$today" ]; then
echo "📅 创建今天的 daily: $(date +%Y-%m-%d)"
echo "# $(date +%Y-%m-%d)" > "$today"
echo "" >> "$today"
fi
# 检查 open-loops
if [ -f "$MEMORY_DIR/registers/open-loops.md" ]; then
open=$(grep -c '^\- \[ \]' "$MEMORY_DIR/registers/open-loops.md" 2>/dev/null || true)
open=${open:-0}
[ "$open" -gt 0 ] && echo "📋 有 $open 个未完成的待办"
fi
log "session_start"
echo ""
echo "✅ 记忆系统就绪"
}
# ── 2. 消息处理 ──────────────────────────────────────
on_message() {
local message="${1:-}"
[ -z "$message" ] && return
# 快速判断:这条消息是否值得记忆操作
local should_process=false
# 长消息可能包含重要信息
[ ${#message} -gt 50 ] && should_process=true
# 包含关键词
if echo "$message" | grep -qE '(记住|忘掉|偏好|纠正|决定|配置|部署|修复)'; then
should_process=true
fi
# 包含问句(可能需要搜索)
if echo "$message" | grep -qE '(记得|之前|上次|以前|什么|哪个|怎么|为什么)'; then
should_process=true
fi
$should_process || return
# 静默调用 Write Gate(后台)
if [ -f "$WORKSPACE/scripts/memory-write-gate.sh" ]; then
echo "$message" | bash "$WORKSPACE/scripts/memory-write-gate.sh" > /dev/null 2>&1 &
fi
log "message_processed: ${message:0:50}"
}
# ── 3. 会话结束 ──────────────────────────────────────
on_end() {
echo "💾 记忆系统: 会话结束"
echo ""
# 触发 session-compact pre-compact
if [ -f "$WORKSPACE/scripts/session-compact.sh" ]; then
echo "📦 执行会话压缩..."
bash "$WORKSPACE/scripts/session-compact.sh" pre-compact 2>&1 | sed 's/^/ /'
fi
# 检查是否有未保存的记忆
local today="$MEMORY_DIR/daily/$(date +%Y-%m-%d).md"
if [ -f "$today" ]; then
local today_size=$(wc -c < "$today" | tr -d ' ')
echo " 今天的 daily: $today_size bytes"
fi
log "session_end"
echo ""
echo "✅ 会话记忆已保存"
}
# ── 4. 空闲维护 ──────────────────────────────────────
on_idle() {
echo "🔧 记忆系统: 空闲维护"
echo ""
# 1. 实体提取
if [ -f "$WORKSPACE/scripts/memory-entity.sh" ]; then
echo "🧬 实体提取..."
bash "$WORKSPACE/scripts/memory-entity.sh" extract 2>&1 | sed 's/^/ /'
fi
# 2. 健康检查
if [ -f "$WORKSPACE/scripts/memory-health.sh" ]; then
echo ""
echo "🏥 健康检查..."
bash "$WORKSPACE/scripts/memory-health.sh" score 2>&1 | tail -5 | sed 's/^/ /'
fi
log "idle_maintenance"
echo ""
echo "✅ 维护完成"
}
# ── 5. 状态查看 ──────────────────────────────────────
status() {
echo "📊 记忆自动触发状态"
echo ""
# Core Memory 状态
echo "🧠 Core Memory:"
for f in "$CORE_DIR"/*.md; do
[ -f "$f" ] || continue
local name=$(basename "$f" .md)
local mtime=$(stat -f "%Sm" -t "%Y-%m-%d %H:%M" "$f" 2>/dev/null || echo "unknown")
local size=$(wc -c < "$f" | tr -d ' ')
echo " $name: $size bytes ($mtime)"
done
echo ""
echo "📋 日志 (最近 5 条):"
[ -f "$LOG" ] && tail -5 "$LOG" || echo " (无)"
echo ""
echo "🔧 可用脚本:"
for script in write-gate recall entity compressor llm-router behavior health search; do
local path="$WORKSPACE/scripts/memory-${script}.sh"
[ -f "$path" ] && echo " ✅ memory-${script}.sh" || echo " ❌ memory-${script}.sh"
done
}
# ── 入口 ─────────────────────────────────────────────
case "${1:-help}" in
on-start) on_start ;;
on-message) on_message "${2:-}" ;;
on-end) on_end ;;
on-idle) on_idle ;;
status) status ;;
help|*)
echo "用法: bash scripts/memory-auto.sh <命令>"
echo ""
echo "命令:"
echo " on-start 会话开始时调用(加载 Core Memory"
echo " on-message 收到消息时调用(传入消息内容)"
echo " on-end 会话结束时调用(flush + 压缩)"
echo " on-idle 空闲时调用(维护)"
echo " status 查看状态"
;;
esac