init: first commit to Gitea mirror, update README with Docker quick start and new repo URL

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
P0lar1s
2026-04-15 15:44:25 +08:00
commit 0d695f71cb
27 changed files with 6049 additions and 0 deletions

101
write_memory.py Normal file
View File

@@ -0,0 +1,101 @@
#!/usr/bin/env python3
"""
Ombre Brain 手动记忆写入工具
用途:在 Copilot 端直接写入记忆文件,绕过 MCP 和 API 调用
用法:
python3 write_memory.py --name "记忆名" --content "内容" --domain "情感" --tags "标签1,标签2"
或交互模式python3 write_memory.py
"""
import os
import uuid
import argparse
from datetime import datetime
VAULT_DIR = os.path.expanduser("~/Documents/Obsidian Vault/Ombre Brain/dynamic")
def gen_id():
return uuid.uuid4().hex[:12]
def write_memory(
name: str,
content: str,
domain: list[str],
tags: list[str],
importance: int = 7,
valence: float = 0.5,
arousal: float = 0.3,
):
mid = gen_id()
now = datetime.now().strftime("%Y-%m-%dT%H:%M:%S")
# YAML frontmatter
domain_yaml = "\n".join(f"- {d}" for d in domain)
tags_yaml = "\n".join(f"- {t}" for t in tags)
md = f"""---
activation_count: 1
arousal: {arousal}
created: '{now}'
domain:
{domain_yaml}
id: {mid}
importance: {importance}
last_active: '{now}'
name: {name}
tags:
{tags_yaml}
type: dynamic
valence: {valence}
---
{content}
"""
path = os.path.join(VAULT_DIR, f"{mid}.md")
os.makedirs(VAULT_DIR, exist_ok=True)
with open(path, "w", encoding="utf-8") as f:
f.write(md)
print(f"✓ 已写入: {path}")
print(f" ID: {mid} | 名称: {name}")
return mid
def interactive():
print("=== Ombre Brain 手动写入 ===")
name = input("记忆名称: ").strip()
content = input("内容: ").strip()
domain = [d.strip() for d in input("主题域(逗号分隔): ").split(",") if d.strip()]
tags = [t.strip() for t in input("标签(逗号分隔): ").split(",") if t.strip()]
importance = int(input("重要性(1-10, 默认7): ").strip() or "7")
valence = float(input("效价(0-1, 默认0.5): ").strip() or "0.5")
arousal = float(input("唤醒(0-1, 默认0.3): ").strip() or "0.3")
write_memory(name, content, domain, tags, importance, valence, arousal)
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="手动写入 Ombre Brain 记忆")
parser.add_argument("--name", help="记忆名称")
parser.add_argument("--content", help="记忆内容")
parser.add_argument("--domain", help="主题域,逗号分隔")
parser.add_argument("--tags", help="标签,逗号分隔")
parser.add_argument("--importance", type=int, default=7)
parser.add_argument("--valence", type=float, default=0.5)
parser.add_argument("--arousal", type=float, default=0.3)
args = parser.parse_args()
if args.name and args.content and args.domain:
write_memory(
name=args.name,
content=args.content,
domain=[d.strip() for d in args.domain.split(",")],
tags=[t.strip() for t in (args.tags or "").split(",") if t.strip()],
importance=args.importance,
valence=args.valence,
arousal=args.arousal,
)
else:
interactive()