forked from Yinglianchun/Ombre-Brain
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathwrite_memory.py
More file actions
101 lines (85 loc) · 2.93 KB
/
Copy pathwrite_memory.py
File metadata and controls
101 lines (85 loc) · 2.93 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
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()