openclaw-plugin-people-memory 0.0.0-stage → 0.0.2

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.
@@ -0,0 +1,153 @@
1
+ export const SCHEMA_VERSION = 2;
2
+ export const SCHEMA_SQL = `
3
+ CREATE TABLE IF NOT EXISTS meta (
4
+ key TEXT PRIMARY KEY,
5
+ value TEXT NOT NULL
6
+ );
7
+
8
+ CREATE TABLE IF NOT EXISTS accounts (
9
+ account_id TEXT PRIMARY KEY,
10
+ platform TEXT NOT NULL,
11
+ platform_key TEXT NOT NULL,
12
+ sender_id TEXT NOT NULL,
13
+ display_name TEXT,
14
+ confirmed_name TEXT,
15
+ call_name TEXT,
16
+ current_role TEXT,
17
+ bound_person_id TEXT,
18
+ first_seen TEXT NOT NULL,
19
+ last_interaction TEXT NOT NULL,
20
+ updated_at TEXT NOT NULL,
21
+ UNIQUE(platform_key, sender_id)
22
+ );
23
+ CREATE INDEX IF NOT EXISTS idx_accounts_person ON accounts(bound_person_id);
24
+ CREATE INDEX IF NOT EXISTS idx_accounts_name ON accounts(display_name);
25
+
26
+ CREATE TABLE IF NOT EXISTS persons (
27
+ person_id TEXT PRIMARY KEY,
28
+ name TEXT,
29
+ call_name TEXT,
30
+ notes TEXT,
31
+ created_at TEXT NOT NULL,
32
+ updated_at TEXT NOT NULL
33
+ );
34
+
35
+ CREATE TABLE IF NOT EXISTS person_accounts (
36
+ account_id TEXT PRIMARY KEY REFERENCES accounts(account_id) ON DELETE CASCADE,
37
+ person_id TEXT NOT NULL REFERENCES persons(person_id) ON DELETE CASCADE,
38
+ bind_method TEXT NOT NULL DEFAULT 'manual',
39
+ confidence TEXT NOT NULL DEFAULT 'confirmed',
40
+ bound_at TEXT NOT NULL
41
+ );
42
+ CREATE INDEX IF NOT EXISTS idx_person_accounts_person ON person_accounts(person_id);
43
+
44
+ CREATE TABLE IF NOT EXISTS impressions (
45
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
46
+ owner_type TEXT NOT NULL CHECK(owner_type IN ('account','person')),
47
+ owner_id TEXT NOT NULL,
48
+ content TEXT NOT NULL,
49
+ dedupe_key TEXT NOT NULL,
50
+ source TEXT,
51
+ agent_id TEXT,
52
+ created_at TEXT NOT NULL,
53
+ UNIQUE(owner_type, owner_id, dedupe_key)
54
+ );
55
+ CREATE INDEX IF NOT EXISTS idx_impressions_owner ON impressions(owner_type, owner_id, created_at);
56
+
57
+ CREATE TABLE IF NOT EXISTS traits (
58
+ owner_type TEXT NOT NULL CHECK(owner_type IN ('account','person')),
59
+ owner_id TEXT NOT NULL,
60
+ dimension TEXT NOT NULL,
61
+ value TEXT NOT NULL,
62
+ confidence TEXT,
63
+ updated_at TEXT NOT NULL,
64
+ PRIMARY KEY(owner_type, owner_id, dimension)
65
+ );
66
+
67
+ CREATE TABLE IF NOT EXISTS groups (
68
+ group_id TEXT PRIMARY KEY,
69
+ platform TEXT NOT NULL,
70
+ platform_key TEXT NOT NULL,
71
+ chat_id TEXT NOT NULL,
72
+ display_name TEXT,
73
+ group_subject TEXT,
74
+ bot_names TEXT NOT NULL DEFAULT '[]',
75
+ first_seen TEXT NOT NULL,
76
+ updated_at TEXT NOT NULL,
77
+ UNIQUE(platform_key, chat_id)
78
+ );
79
+ CREATE INDEX IF NOT EXISTS idx_groups_chat ON groups(chat_id);
80
+
81
+ CREATE TABLE IF NOT EXISTS group_members (
82
+ group_id TEXT NOT NULL REFERENCES groups(group_id) ON DELETE CASCADE,
83
+ account_id TEXT NOT NULL,
84
+ display_name TEXT,
85
+ classification TEXT NOT NULL DEFAULT 'pending',
86
+ confidence TEXT NOT NULL DEFAULT 'tentative',
87
+ role_in_group TEXT,
88
+ first_seen TEXT NOT NULL,
89
+ last_seen TEXT NOT NULL,
90
+ PRIMARY KEY(group_id, account_id)
91
+ );
92
+
93
+ CREATE TABLE IF NOT EXISTS group_events (
94
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
95
+ group_id TEXT NOT NULL REFERENCES groups(group_id) ON DELETE CASCADE,
96
+ occurred_at TEXT NOT NULL,
97
+ category TEXT NOT NULL DEFAULT 'observation',
98
+ summary TEXT NOT NULL,
99
+ tags TEXT NOT NULL DEFAULT '[]',
100
+ agent_id TEXT,
101
+ dedupe_key TEXT NOT NULL,
102
+ created_at TEXT NOT NULL,
103
+ UNIQUE(group_id, dedupe_key)
104
+ );
105
+ CREATE INDEX IF NOT EXISTS idx_group_events_group ON group_events(group_id, occurred_at);
106
+
107
+ CREATE TABLE IF NOT EXISTS group_observations (
108
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
109
+ group_id TEXT NOT NULL REFERENCES groups(group_id) ON DELETE CASCADE,
110
+ content TEXT NOT NULL,
111
+ dedupe_key TEXT NOT NULL,
112
+ created_at TEXT NOT NULL,
113
+ UNIQUE(group_id, dedupe_key)
114
+ );
115
+
116
+ CREATE TABLE IF NOT EXISTS dimensions (
117
+ key TEXT PRIMARY KEY,
118
+ label TEXT NOT NULL,
119
+ active INTEGER NOT NULL DEFAULT 1,
120
+ sort INTEGER NOT NULL DEFAULT 0
121
+ );
122
+
123
+ CREATE TABLE IF NOT EXISTS scan_channels (
124
+ workspace_key TEXT NOT NULL,
125
+ channel_key TEXT NOT NULL,
126
+ session_key TEXT,
127
+ display_name TEXT,
128
+ kind TEXT,
129
+ platform TEXT,
130
+ group_id TEXT,
131
+ last_scan_at TEXT,
132
+ PRIMARY KEY(workspace_key, channel_key)
133
+ );
134
+
135
+ CREATE TABLE IF NOT EXISTS scan_meta (
136
+ workspace_key TEXT PRIMARY KEY,
137
+ last_full_scan_at TEXT,
138
+ updated_at TEXT
139
+ );
140
+ `;
141
+ export const DEFAULT_DIMENSIONS = [
142
+ { key: "basic_name", label: "称呼", sort: 10 },
143
+ { key: "basic_origin", label: "所在地", sort: 20 },
144
+ { key: "basic_role", label: "身份", sort: 30 },
145
+ { key: "good_at", label: "擅长", sort: 40 },
146
+ { key: "dislike", label: "反感", sort: 50 },
147
+ { key: "personality", label: "性格", sort: 60 },
148
+ { key: "communicate_style", label: "沟通风格", sort: 70 },
149
+ { key: "preference", label: "偏好", sort: 80 },
150
+ { key: "values", label: "价值观", sort: 90 },
151
+ { key: "relationship", label: "关系", sort: 100 },
152
+ { key: "active_pattern", label: "活跃模式", sort: 110 },
153
+ ];