forked from BasedHardware/omi
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmemory_collections.py
More file actions
216 lines (169 loc) · 7.11 KB
/
Copy pathmemory_collections.py
File metadata and controls
216 lines (169 loc) · 7.11 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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
"""Canonical Firestore collection path helpers for memory storage (WS-G7).
Neutral ``MemoryCollections`` is the source of truth. Legacy ``MemoryCollections`` remains
an importable alias. Collection path strings are frozen — only Python symbol names change.
"""
from dataclasses import dataclass
@dataclass(frozen=True)
class MemoryCollections:
uid: str
@property
def user_root(self) -> str:
return f"users/{self.uid}"
@property
def memory_items(self) -> str:
return f"{self.user_root}/memory_items"
@property
def memory_operations(self) -> str:
return f"{self.user_root}/memory_operations"
@property
def memory_deletion_receipts(self) -> str:
"""Content-free, 30-day anti-resurrection receipts."""
return f"{self.user_root}/memory_deletion_receipts"
@property
def memory_source_replacements(self) -> str:
return f"{self.user_root}/memory_source_replacements"
@property
def memory_ledger_reopens(self) -> str:
"""Immutable source-to-tail receipts for standalone ledger reopening."""
return f"{self.user_root}/memory_ledger_reopens"
@property
def jit_trigger_feedback(self) -> str:
"""Content-free idempotency receipts for explicit trigger feedback."""
return f"{self.user_root}/jit_trigger_feedback"
@property
def jit_proactivity_events(self) -> str:
return f"{self.user_root}/jit_proactivity_events"
@property
def jit_proactivity_daily_budgets(self) -> str:
return f"{self.user_root}/jit_proactivity_daily_budgets"
@property
def jit_proactivity_candidate_turns(self) -> str:
return f"{self.user_root}/jit_proactivity_candidate_turns"
@property
def memory_outbox(self) -> str:
return f"{self.user_root}/memory_outbox"
@property
def memory_control_state(self) -> str:
return f"{self.user_root}/memory_control/state"
@property
def legacy_canonical_backfill_checkpoint(self) -> str:
return f"{self.user_root}/memory_control/legacy_canonical_backfill"
@property
def knowledge_ledger_migration_state(self) -> str:
"""Per-user cutover proof; never a second memory authority."""
return f"{self.user_root}/memory_control/knowledge_ledger_migration"
@property
def knowledge_ledger_prompt_projection(self) -> str:
"""Bounded prompt receipt produced by the canonical migration sweep."""
return f"{self.user_root}/memory_control/knowledge_ledger_prompt_projection"
@property
def knowledge_ledger_writer_transition_receipt(self) -> str:
"""Content-free proof for the latest writer-mode transition."""
return f"{self.user_root}/memory_control/knowledge_ledger_writer_transition_receipt"
@property
def historical_graph_enrichment_cursor(self) -> str:
return f"{self.user_root}/memory_control/historical_graph_enrichment"
@property
def memory_apply_control_state(self) -> str:
return f"{self.user_root}/memory_state/apply_control"
@property
def memory_lineage(self) -> str:
return f"{self.user_root}/memory_lineage"
@property
def memory_historical_overrides(self) -> str:
"""Canonical suppression records for legacy public memory identities."""
return f"{self.user_root}/memory_historical_overrides"
@property
def memory_evidence(self) -> str:
return f"{self.user_root}/memory_evidence"
@property
def memory_graph_assertions(self) -> str:
return f"{self.user_root}/memory_graph_assertions"
@property
def memory_review_queue(self) -> str:
return f"{self.user_root}/memory_review_queue"
@property
def memory_runs(self) -> str:
return f"{self.user_root}/memory_runs"
@property
def memory_import_runs(self) -> str:
return f"{self.user_root}/memory_import_runs"
@property
def memory_import_artifacts(self) -> str:
return f"{self.user_root}/memory_import_artifacts"
@property
def memory_import_candidates(self) -> str:
return f"{self.user_root}/memory_import_candidates"
@property
def daily_memory_sweep_receipts(self) -> str:
"""Content-free per-source receipts for the dark daily memory sweep."""
return f"{self.user_root}/daily_memory_sweep_receipts"
@property
def daily_memory_sweep_sources(self) -> str:
"""Backend-produced, deletion-scoped daily sweep staging packets."""
return f"{self.user_root}/daily_memory_sweep_sources"
@property
def daily_memory_sweep_onboarding_sources(self) -> str:
return f"{self.user_root}/daily_memory_sweep_onboarding_sources"
@property
def daily_memory_sweep_daily_summary_staged(self) -> str:
return f"{self.user_root}/daily_memory_sweep_daily_summary_staged"
@property
def daily_memory_sweep_onboarding_staged(self) -> str:
return f"{self.user_root}/daily_memory_sweep_onboarding_staged"
@property
def daily_memory_sweep_model_invocations(self) -> str:
return f"{self.user_root}/daily_memory_sweep_model_invocations"
@property
def non_active_memory_routes(self) -> str:
return f"{self.user_root}/non_active_memory_routes"
@property
def short_term_lifecycle_transitions(self) -> str:
return f"{self.user_root}/short_term_lifecycle_transitions"
@property
def legacy_fallback(self) -> str:
return f"{self.user_root}/memory_legacy_fallback"
@property
def memory_commits(self) -> str:
return f"{self.user_root}/memory_commits"
@property
def memory_state(self) -> str:
return f"{self.user_root}/memory_state"
@property
def memory_state_head(self) -> str:
return f"{self.user_root}/memory_state/head"
def all_collection_paths(self) -> list[str]:
return [
self.memory_items,
self.memory_operations,
self.memory_deletion_receipts,
self.memory_source_replacements,
self.memory_ledger_reopens,
self.jit_trigger_feedback,
self.jit_proactivity_events,
self.jit_proactivity_daily_budgets,
self.jit_proactivity_candidate_turns,
self.memory_outbox,
self.memory_lineage,
self.memory_historical_overrides,
self.memory_evidence,
self.memory_graph_assertions,
self.memory_review_queue,
self.memory_runs,
self.memory_import_runs,
self.memory_import_artifacts,
self.memory_import_candidates,
self.daily_memory_sweep_receipts,
self.daily_memory_sweep_sources,
self.daily_memory_sweep_onboarding_sources,
self.daily_memory_sweep_daily_summary_staged,
self.daily_memory_sweep_onboarding_staged,
self.daily_memory_sweep_model_invocations,
self.non_active_memory_routes,
self.short_term_lifecycle_transitions,
self.legacy_fallback,
self.memory_commits,
self.memory_state,
]
MemoryCollections = MemoryCollections
__all__ = ["MemoryCollections", "MemoryCollections"]