8mem 0.1.1__py3-none-any.whl
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.
- 8mem-0.1.1.dist-info/METADATA +559 -0
- 8mem-0.1.1.dist-info/RECORD +61 -0
- 8mem-0.1.1.dist-info/WHEEL +5 -0
- 8mem-0.1.1.dist-info/entry_points.txt +2 -0
- 8mem-0.1.1.dist-info/licenses/LICENSE +21 -0
- 8mem-0.1.1.dist-info/top_level.txt +1 -0
- eightmem/__init__.py +4 -0
- eightmem/analyzers/__init__.py +0 -0
- eightmem/analyzers/extractor.py +258 -0
- eightmem/channels/__init__.py +25 -0
- eightmem/channels/telegram_adapter.py +339 -0
- eightmem/cli/__init__.py +0 -0
- eightmem/cli/main.py +4665 -0
- eightmem/core/__init__.py +0 -0
- eightmem/core/constants.py +19 -0
- eightmem/core/context_export.py +32 -0
- eightmem/core/env.py +122 -0
- eightmem/core/governance.py +404 -0
- eightmem/core/heartbeat.py +83 -0
- eightmem/core/import_cache.py +41 -0
- eightmem/core/ingestion.py +215 -0
- eightmem/core/memory_store.py +55 -0
- eightmem/core/models.py +55 -0
- eightmem/core/notification_decision.py +37 -0
- eightmem/core/paths.py +55 -0
- eightmem/core/pipeline.py +13 -0
- eightmem/core/signal_connectors.py +76 -0
- eightmem/core/sqlite_facts.py +487 -0
- eightmem/core/templates.py +22 -0
- eightmem/importers/__init__.py +0 -0
- eightmem/importers/parser.py +68 -0
- eightmem/llm/__init__.py +3 -0
- eightmem/llm/ollama.py +143 -0
- eightmem/mirror/__init__.py +0 -0
- eightmem/mirror/summary.py +98 -0
- eightmem/resources/__init__.py +1 -0
- eightmem/resources/memory_templates/BELIEFS.md +7 -0
- eightmem/resources/memory_templates/CORRECTIONS.md +7 -0
- eightmem/resources/memory_templates/DECISIONS.md +7 -0
- eightmem/resources/memory_templates/EVOLUTION.md +7 -0
- eightmem/resources/memory_templates/IDENTITY.md +7 -0
- eightmem/resources/memory_templates/PREFERENCES.md +7 -0
- eightmem/services/__init__.py +43 -0
- eightmem/services/compare_card.py +574 -0
- eightmem/services/memory_service.py +3362 -0
- eightmem/services/telegram_service.py +1770 -0
- eightmem/services/webhook_service.py +221 -0
- eightmem/ui/__init__.py +0 -0
- eightmem/ui/app.py +1443 -0
- eightmem/ui/static/styles.css +22 -0
- eightmem/ui/templates/base.html +45 -0
- eightmem/ui/templates/chat.html +70 -0
- eightmem/ui/templates/dashboard.html +124 -0
- eightmem/ui/templates/edit.html +35 -0
- eightmem/ui/templates/everywhere.html +22 -0
- eightmem/ui/templates/export.html +31 -0
- eightmem/ui/templates/files.html +30 -0
- eightmem/ui/templates/import.html +53 -0
- eightmem/ui/templates/inbox.html +97 -0
- eightmem/ui/templates/mirror.html +128 -0
- eightmem/ui/templates/overview.html +35 -0
|
@@ -0,0 +1,559 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: 8mem
|
|
3
|
+
Version: 0.1.1
|
|
4
|
+
Summary: 8mem: local-first memory layer for AI chats
|
|
5
|
+
Author: 8mem Contributors
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/tempomesh/8mem
|
|
8
|
+
Project-URL: Repository, https://github.com/tempomesh/8mem
|
|
9
|
+
Project-URL: Issues, https://github.com/tempomesh/8mem/issues
|
|
10
|
+
Keywords: ai,memory,telegram,local-first,ollama
|
|
11
|
+
Classifier: Programming Language :: Python :: 3
|
|
12
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
15
|
+
Requires-Python: >=3.11
|
|
16
|
+
Description-Content-Type: text/markdown
|
|
17
|
+
License-File: LICENSE
|
|
18
|
+
Requires-Dist: typer>=0.12.0
|
|
19
|
+
Requires-Dist: fastapi>=0.115.0
|
|
20
|
+
Requires-Dist: uvicorn>=0.30.0
|
|
21
|
+
Requires-Dist: jinja2>=3.1.0
|
|
22
|
+
Requires-Dist: python-multipart>=0.0.9
|
|
23
|
+
Requires-Dist: pillow>=10.0.0
|
|
24
|
+
Requires-Dist: ruamel.yaml>=0.18.0
|
|
25
|
+
Provides-Extra: dev
|
|
26
|
+
Requires-Dist: pytest>=8.2.0; extra == "dev"
|
|
27
|
+
Requires-Dist: httpx>=0.27.0; extra == "dev"
|
|
28
|
+
Provides-Extra: semantic
|
|
29
|
+
Requires-Dist: sqlite-vec>=0.1.9; extra == "semantic"
|
|
30
|
+
Dynamic: license-file
|
|
31
|
+
|
|
32
|
+
# 8mem
|
|
33
|
+
|
|
34
|
+

|
|
35
|
+
|
|
36
|
+
**Personal memory for AI — local-first, readable, portable.**
|
|
37
|
+
|
|
38
|
+
8mem is a Telegram-first personal memory system that remembers how you like replies, shows what it is using, and lets you correct it when it gets something wrong.
|
|
39
|
+
|
|
40
|
+
It is built for a simple but painful reality: every AI starts from scratch, and people repeat the same context, tone, preferences, and corrections every day.
|
|
41
|
+
|
|
42
|
+
8mem fixes that with a lightweight local stack:
|
|
43
|
+
- Markdown memory files
|
|
44
|
+
- JSONL event history
|
|
45
|
+
- SQLite structured facts
|
|
46
|
+
- optional `sqlite-vec` semantic retrieval
|
|
47
|
+
- Python memory logic
|
|
48
|
+
|
|
49
|
+
## 5-minute local quickstart
|
|
50
|
+
|
|
51
|
+
This is the fastest way to try 8mem locally. No cloud API key is required.
|
|
52
|
+
|
|
53
|
+
Today, the real supported runtime path is Ollama local.
|
|
54
|
+
|
|
55
|
+
### One-line install
|
|
56
|
+
|
|
57
|
+
The Type 1 public beta installer is:
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
curl -fsSL https://8mem.com/install.sh | bash
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
This public script contains no secrets and does not require GitHub authentication. It downloads a pinned 8mem wheel from `https://8mem.com/app/install/`, verifies its SHA256 checksum, installs it into a local virtual environment, runs setup, then runs `8mem doctor`.
|
|
64
|
+
|
|
65
|
+
When a terminal is available, the installer asks for the Telegram BotFather token, lets the user skip the public HTTPS webhook URL, and then detects OpenClaw. If `~/.openclaw/openclaw.json` is present, it wires the user's OpenClaw agent automatically and prints a receipt of the files changed. If OpenClaw is not present, 8mem remains usable as a standalone Telegram memory bot after `8mem start`.
|
|
66
|
+
|
|
67
|
+
When no terminal is available, such as CI or a strictly non-interactive shell, setup stays safe: it does not prompt, does not mutate OpenClaw files, and prints the follow-up command.
|
|
68
|
+
|
|
69
|
+
For source installs with repo access, use:
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
git clone https://github.com/tempomesh/8mem.git
|
|
73
|
+
cd 8mem
|
|
74
|
+
bash ./install.sh
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
The installer creates a local 8mem environment, installs the CLI, runs `8mem setup`, runs `8mem doctor`, and prints the exact next command to start the product.
|
|
78
|
+
|
|
79
|
+
If you do not want to run the installer and already have GitHub access configured, source install still works:
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
pip install git+https://github.com/tempomesh/8mem.git
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
When 8mem is published to PyPI, the intended install command is:
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
pip install 8mem
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
More install paths:
|
|
92
|
+
- [INSTALL.md](INSTALL.md)
|
|
93
|
+
|
|
94
|
+
Privacy details:
|
|
95
|
+
- [PRIVACY.md](PRIVACY.md)
|
|
96
|
+
|
|
97
|
+
### 1. Clone and install
|
|
98
|
+
|
|
99
|
+
```bash
|
|
100
|
+
git clone https://github.com/tempomesh/8mem.git
|
|
101
|
+
cd 8mem
|
|
102
|
+
python3 -m venv .venv
|
|
103
|
+
source .venv/bin/activate
|
|
104
|
+
pip install -e .
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
### 2. Start Ollama and pull one model
|
|
108
|
+
|
|
109
|
+
If Ollama is not installed yet, install it from [ollama.com](https://ollama.com).
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
ollama serve
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
In another terminal:
|
|
116
|
+
|
|
117
|
+
```bash
|
|
118
|
+
ollama pull qwen2.5:14b
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
### 3. Run guided setup
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
8mem setup --llm-model qwen2.5:14b
|
|
125
|
+
8mem doctor
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
`8mem setup` writes local runtime config under `~/.8mem/.env`, creates memory templates, and avoids manual file editing. During setup, users can set up Telegram now, skip Telegram and use the local UI first, or run setup later when they have a BotFather token and public URL. `8mem doctor` verifies runtime files, Telegram config/webhook if present, local model access, and `/v1/context` readiness.
|
|
129
|
+
|
|
130
|
+
### Optional: semantic retrieval
|
|
131
|
+
|
|
132
|
+
8mem's truth path does not depend on vector search. Markdown remains user-readable memory, SQLite facts remain active truth, JSONL remains audit truth, and Engram remains runtime export.
|
|
133
|
+
|
|
134
|
+
For larger memory sets, imports, and better related-memory recall, install the optional semantic layer:
|
|
135
|
+
|
|
136
|
+
```bash
|
|
137
|
+
pip install "8mem[semantic]"
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
When installed, `sqlite-vec` is used as a local retrieval helper. If it is missing, 8mem keeps working through exact SQLite/Markdown memory.
|
|
141
|
+
|
|
142
|
+
### Optional: Wire OpenClaw Agent
|
|
143
|
+
|
|
144
|
+
For Type 1 OpenClaw users, this command is also available if you installed non-interactively or want to re-apply the managed OpenClaw block:
|
|
145
|
+
|
|
146
|
+
```bash
|
|
147
|
+
8mem setup --mode openclaw
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
This reads the OpenClaw workspace from `openclaw.json` when available, appends managed 8mem blocks to OpenClaw `AGENTS.md` and `HEARTBEAT.md`, patches `openclaw.json` so Telegram inline buttons are enabled, and restarts `openclaw-gateway` when systemd is available.
|
|
151
|
+
|
|
152
|
+
For a remote primary 8mem runtime, pass the API URL and bearer key:
|
|
153
|
+
|
|
154
|
+
```bash
|
|
155
|
+
8mem setup --mode openclaw \
|
|
156
|
+
--eightmem-api-url http://your-8mem-host:8787 \
|
|
157
|
+
--eightmem-api-key your-remote-8mem-key
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
The setup does not hardcode your bearer key into OpenClaw files. The connected OpenClaw agent reads `EIGHTMEM_OPENCLAW_API_KEY` from `~/.8mem/.env` for remote primary memory, or `EIGHTMEM_LOCAL_API_KEY` for single-machine local installs.
|
|
161
|
+
|
|
162
|
+
To undo the OpenClaw wiring:
|
|
163
|
+
|
|
164
|
+
```bash
|
|
165
|
+
8mem uninstall --mode openclaw
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
### 4. Initialize and verify the model path
|
|
169
|
+
|
|
170
|
+
```bash
|
|
171
|
+
8mem test-ollama --model qwen2.5:14b --no-memory
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
### 5. Try the first real memory flow
|
|
175
|
+
|
|
176
|
+
```bash
|
|
177
|
+
8mem analyze examples/chat_export_sample.json
|
|
178
|
+
8mem ask-ollama "What do you know about how I like responses?" --model qwen2.5:14b
|
|
179
|
+
8mem start
|
|
180
|
+
8mem status
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
Then open:
|
|
184
|
+
- `http://127.0.0.1:8787`
|
|
185
|
+
- `http://127.0.0.1:8787/chat`
|
|
186
|
+
|
|
187
|
+
Use `8mem stop` to stop the background server. Use `8mem start --foreground` for foreground debugging.
|
|
188
|
+
|
|
189
|
+
If you installed 8mem as a user systemd service, update with:
|
|
190
|
+
|
|
191
|
+
```bash
|
|
192
|
+
git pull
|
|
193
|
+
bash ./install.sh
|
|
194
|
+
systemctl --user restart 8mem.service
|
|
195
|
+
8mem status
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
Without systemd, update with:
|
|
199
|
+
|
|
200
|
+
```bash
|
|
201
|
+
git pull
|
|
202
|
+
bash ./install.sh
|
|
203
|
+
8mem stop
|
|
204
|
+
8mem start
|
|
205
|
+
8mem status
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
If you want the full Telegram-style product flow, keep reading below.
|
|
209
|
+
|
|
210
|
+
## Why 8mem
|
|
211
|
+
|
|
212
|
+
Most AI memory products have the same problem:
|
|
213
|
+
- you cannot see what the AI knows about you
|
|
214
|
+
- you cannot correct it safely
|
|
215
|
+
- you cannot move that memory between tools
|
|
216
|
+
|
|
217
|
+
8mem is designed around the opposite principles:
|
|
218
|
+
- **visible**: memory is readable in plain files
|
|
219
|
+
- **correctable**: contradictions are surfaced, not hidden
|
|
220
|
+
- **portable**: memory can be reused across tools
|
|
221
|
+
- **local-first**: your memory stays on your machine
|
|
222
|
+
|
|
223
|
+
## What 8mem does
|
|
224
|
+
|
|
225
|
+
You talk normally in Telegram. 8mem picks up what matters, stores it, and uses it later.
|
|
226
|
+
|
|
227
|
+
Example:
|
|
228
|
+
|
|
229
|
+
```text
|
|
230
|
+
You: Keep my work replies concise
|
|
231
|
+
8mem: I'll keep my work replies concise.
|
|
232
|
+
Saved to memory: Keep my work replies concise.
|
|
233
|
+
|
|
234
|
+
You: Don't use emojis in client messages
|
|
235
|
+
8mem: I won't use emojis in client messages.
|
|
236
|
+
Saved to memory: Don't use emojis in client messages.
|
|
237
|
+
|
|
238
|
+
You: Reply like me: can we move tomorrow's meeting
|
|
239
|
+
8mem: Can we move tomorrow's meeting? Share a time that works for you.
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
You can also ask:
|
|
243
|
+
- `What do you remember about me?`
|
|
244
|
+
- `What are you using right now?`
|
|
245
|
+
- `What changed about me?`
|
|
246
|
+
- `Show me the normal version vs mine`
|
|
247
|
+
|
|
248
|
+
## Demo
|
|
249
|
+
|
|
250
|
+
### Passport
|
|
251
|
+
|
|
252
|
+
The clearest artifact in 8mem is `/passport`: a visible summary of the memory it is actively using for you.
|
|
253
|
+
|
|
254
|
+

|
|
255
|
+
|
|
256
|
+
### Telegram flow
|
|
257
|
+
|
|
258
|
+

|
|
259
|
+
|
|
260
|
+
## The best product surfaces
|
|
261
|
+
|
|
262
|
+
### `/passport`
|
|
263
|
+
Shows the memory 8mem is actively using for you.
|
|
264
|
+
|
|
265
|
+

|
|
266
|
+
|
|
267
|
+
### `/compare`
|
|
268
|
+
Shows a standard answer next to a memory-shaped answer so you can see whether memory is actually improving output.
|
|
269
|
+
|
|
270
|
+
### `What changed about me?`
|
|
271
|
+
Shows recent memory changes in a human-readable way.
|
|
272
|
+
|
|
273
|
+
These three surfaces make memory visible instead of hidden.
|
|
274
|
+
|
|
275
|
+
## Product shape today
|
|
276
|
+
|
|
277
|
+
### Telegram-first
|
|
278
|
+
- natural memory capture
|
|
279
|
+
- memory-aware replies and drafts
|
|
280
|
+
- recall, compare, passport, recent changes
|
|
281
|
+
- contradiction resolution with inline choices
|
|
282
|
+
- undo and reset
|
|
283
|
+
|
|
284
|
+
### Web UI
|
|
285
|
+
- dashboard
|
|
286
|
+
- mirror
|
|
287
|
+
- files
|
|
288
|
+
- editor
|
|
289
|
+
- inbox
|
|
290
|
+
- export
|
|
291
|
+
|
|
292
|
+
### Storage and logic
|
|
293
|
+
- `Markdown` for human-readable memory
|
|
294
|
+
- `JSONL` for append-only event history
|
|
295
|
+
- `SQLite` for structured facts and mirrored events
|
|
296
|
+
- optional `sqlite-vec` for local semantic search
|
|
297
|
+
- Python rules for contradiction and trust logic
|
|
298
|
+
|
|
299
|
+
## Features
|
|
300
|
+
|
|
301
|
+
### Natural memory capture
|
|
302
|
+
- save obvious preferences without requiring `Remember:`
|
|
303
|
+
- save obvious corrections without requiring `Correct:`
|
|
304
|
+
- still support explicit power-user commands
|
|
305
|
+
- ignore ambiguous statements instead of saving them aggressively
|
|
306
|
+
|
|
307
|
+
### Memory visibility
|
|
308
|
+
- `What do you remember about me?`
|
|
309
|
+
- `What are you using right now?`
|
|
310
|
+
- `/passport`
|
|
311
|
+
- `What changed about me?`
|
|
312
|
+
- `8mem forget <text>` to remove a saved memory with confirmation
|
|
313
|
+
|
|
314
|
+
### Memory-aware output
|
|
315
|
+
- `Reply like me: ...`
|
|
316
|
+
- `Draft: ...`
|
|
317
|
+
- `/compare ...`
|
|
318
|
+
|
|
319
|
+
### Trust and control
|
|
320
|
+
- contradiction detection
|
|
321
|
+
- contradiction resolution
|
|
322
|
+
- undo last memory change
|
|
323
|
+
- reset memory
|
|
324
|
+
|
|
325
|
+
### Natural routing
|
|
326
|
+
- typo-tolerant recall
|
|
327
|
+
- natural aliases for compare, recall, draft, and memory view
|
|
328
|
+
- onboarding with `/start`, `help`, and `what can you do`
|
|
329
|
+
|
|
330
|
+
## How it works
|
|
331
|
+
|
|
332
|
+
Short flow:
|
|
333
|
+
|
|
334
|
+
```text
|
|
335
|
+
User
|
|
336
|
+
-> Telegram
|
|
337
|
+
-> ui/app.py webhook
|
|
338
|
+
-> telegram_service
|
|
339
|
+
-> exact / fuzzy / LLM intent router
|
|
340
|
+
-> memory_service
|
|
341
|
+
-> Markdown + JSONL + SQLite + optional sqlite-vec
|
|
342
|
+
-> response assembly
|
|
343
|
+
-> ui/app.py sender
|
|
344
|
+
-> Telegram
|
|
345
|
+
-> User
|
|
346
|
+
```
|
|
347
|
+
|
|
348
|
+
### The architecture
|
|
349
|
+
|
|
350
|
+
| Layer | Component | Responsibility |
|
|
351
|
+
|---|---|---|
|
|
352
|
+
| Interface | Telegram + web UI | Receive input, present output |
|
|
353
|
+
| Routing | `telegram_service.py` | Intent routing, UX shaping |
|
|
354
|
+
| Memory logic | `memory_service.py` | Normalization, recall, compare, trust logic |
|
|
355
|
+
| Storage | Markdown + JSONL + SQLite | Readable memory, event history, structured facts |
|
|
356
|
+
| Retrieval | optional `sqlite-vec` | Semantic memory lookup when installed |
|
|
357
|
+
| Ingestion | `ingestion.py` + `import_cache.py` | Chunking, candidate fact extraction, apply-to-memory flow |
|
|
358
|
+
|
|
359
|
+
## Install
|
|
360
|
+
|
|
361
|
+
### Local-only path
|
|
362
|
+
|
|
363
|
+
```bash
|
|
364
|
+
git clone https://github.com/tempomesh/8mem.git
|
|
365
|
+
cd 8mem
|
|
366
|
+
python3 -m venv .venv
|
|
367
|
+
source .venv/bin/activate
|
|
368
|
+
pip install -e .
|
|
369
|
+
cp .env.example .env
|
|
370
|
+
```
|
|
371
|
+
|
|
372
|
+
For the supported local setup, you only need:
|
|
373
|
+
- `OLLAMA_BASE_URL`
|
|
374
|
+
- `DEFAULT_LLM_FALLBACK_MODEL`
|
|
375
|
+
|
|
376
|
+
Preferred path:
|
|
377
|
+
|
|
378
|
+
```bash
|
|
379
|
+
8mem setup --llm-model qwen2.5:14b
|
|
380
|
+
8mem doctor
|
|
381
|
+
```
|
|
382
|
+
|
|
383
|
+
Ignore the cloud-provider placeholders in `.env.example` for now. They are future-facing, not the current public runtime path.
|
|
384
|
+
|
|
385
|
+
## Quickstart
|
|
386
|
+
|
|
387
|
+
### Fastest first success
|
|
388
|
+
|
|
389
|
+
```bash
|
|
390
|
+
8mem setup --llm-model qwen2.5:14b
|
|
391
|
+
8mem doctor
|
|
392
|
+
8mem test-ollama --model qwen2.5:14b --no-memory
|
|
393
|
+
8mem analyze examples/chat_export_sample.json
|
|
394
|
+
8mem ask-ollama "What do you know about how I like responses?" --model qwen2.5:14b
|
|
395
|
+
8mem start
|
|
396
|
+
8mem status
|
|
397
|
+
```
|
|
398
|
+
|
|
399
|
+
Open:
|
|
400
|
+
- `http://127.0.0.1:8787`
|
|
401
|
+
- `http://127.0.0.1:8787/chat`
|
|
402
|
+
|
|
403
|
+
### Import and mirror flow
|
|
404
|
+
|
|
405
|
+
```bash
|
|
406
|
+
8mem analyze examples/chat_export_sample.json
|
|
407
|
+
8mem mirror
|
|
408
|
+
8mem export-context -o context.txt
|
|
409
|
+
```
|
|
410
|
+
|
|
411
|
+
## Telegram examples
|
|
412
|
+
|
|
413
|
+
### Save a preference
|
|
414
|
+
```text
|
|
415
|
+
Keep my work replies concise
|
|
416
|
+
```
|
|
417
|
+
|
|
418
|
+
### Save a correction
|
|
419
|
+
```text
|
|
420
|
+
Don't use emojis in client messages
|
|
421
|
+
```
|
|
422
|
+
|
|
423
|
+
### Recall
|
|
424
|
+
```text
|
|
425
|
+
What do you remember about me?
|
|
426
|
+
```
|
|
427
|
+
|
|
428
|
+
### Memory view
|
|
429
|
+
```text
|
|
430
|
+
What are you using right now?
|
|
431
|
+
```
|
|
432
|
+
|
|
433
|
+
### Compare
|
|
434
|
+
```text
|
|
435
|
+
Compare the normal version with mine: answer this client: Can we move the meeting to Friday?
|
|
436
|
+
```
|
|
437
|
+
|
|
438
|
+
### Draft in my style
|
|
439
|
+
```text
|
|
440
|
+
Reply like me: can we move tomorrow's meeting
|
|
441
|
+
```
|
|
442
|
+
|
|
443
|
+
### Recent changes
|
|
444
|
+
```text
|
|
445
|
+
What changed about me?
|
|
446
|
+
```
|
|
447
|
+
|
|
448
|
+
## Power-user commands
|
|
449
|
+
|
|
450
|
+
Core commands:
|
|
451
|
+
- `Remember: keep answers concise`
|
|
452
|
+
- `Correct: do not use emojis`
|
|
453
|
+
- `What do you know about me`
|
|
454
|
+
- `Draft: write a founder update in my style`
|
|
455
|
+
- `reset memory`
|
|
456
|
+
- `undo last memory change`
|
|
457
|
+
|
|
458
|
+
Profile and comparison:
|
|
459
|
+
- `/passport`
|
|
460
|
+
- `/compare Draft: write a founder update in my style`
|
|
461
|
+
- `/compare Draft: recommend a laptop in my style`
|
|
462
|
+
- `/compare Reply: answer this client in my style: <paste client message>`
|
|
463
|
+
- `/compare Summarize: summarize this update in my style`
|
|
464
|
+
|
|
465
|
+
## Memory files
|
|
466
|
+
|
|
467
|
+
Stored in `~/.8mem/memory/`:
|
|
468
|
+
|
|
469
|
+
- `IDENTITY.md`
|
|
470
|
+
- `BELIEFS.md`
|
|
471
|
+
- `PREFERENCES.md`
|
|
472
|
+
- `CORRECTIONS.md`
|
|
473
|
+
- `EVOLUTION.md`
|
|
474
|
+
- `DECISIONS.md`
|
|
475
|
+
- `.memory_events.jsonl`
|
|
476
|
+
|
|
477
|
+
Markdown files remain the readable source of truth.
|
|
478
|
+
|
|
479
|
+
## Repo structure
|
|
480
|
+
|
|
481
|
+
```text
|
|
482
|
+
src/eightmem/
|
|
483
|
+
cli/
|
|
484
|
+
core/
|
|
485
|
+
analyzers/
|
|
486
|
+
importers/
|
|
487
|
+
mirror/
|
|
488
|
+
services/
|
|
489
|
+
ui/
|
|
490
|
+
examples/
|
|
491
|
+
tests/
|
|
492
|
+
docs/
|
|
493
|
+
```
|
|
494
|
+
|
|
495
|
+
## Screenshots
|
|
496
|
+
|
|
497
|
+
Dashboard
|
|
498
|
+
|
|
499
|
+

|
|
500
|
+
|
|
501
|
+
Memory editor
|
|
502
|
+
|
|
503
|
+

|
|
504
|
+
|
|
505
|
+
Telegram demo
|
|
506
|
+
|
|
507
|
+

|
|
508
|
+
|
|
509
|
+
## Current status
|
|
510
|
+
|
|
511
|
+
- Phase 4 complete
|
|
512
|
+
- Telegram product loop in place
|
|
513
|
+
- `81` tests passing in the latest verified product pass
|
|
514
|
+
|
|
515
|
+
The core loop now includes:
|
|
516
|
+
- natural memory capture
|
|
517
|
+
- recall
|
|
518
|
+
- passport
|
|
519
|
+
- compare
|
|
520
|
+
- recent changes
|
|
521
|
+
- conflict resolution
|
|
522
|
+
- undo
|
|
523
|
+
- reset
|
|
524
|
+
- memory-aware draft/reply
|
|
525
|
+
|
|
526
|
+
## What makes 8mem different
|
|
527
|
+
|
|
528
|
+
1. **Readable memory**
|
|
529
|
+
Every memory is a file you can open and verify.
|
|
530
|
+
|
|
531
|
+
2. **Visible trust**
|
|
532
|
+
You can see what 8mem knows, what it is using, and what changed.
|
|
533
|
+
|
|
534
|
+
3. **Portable memory**
|
|
535
|
+
Memory is not trapped in one black-box product.
|
|
536
|
+
|
|
537
|
+
4. **Lightweight architecture**
|
|
538
|
+
No heavy graph stack required to get useful memory behavior.
|
|
539
|
+
|
|
540
|
+
## Roadmap
|
|
541
|
+
|
|
542
|
+
Near-term:
|
|
543
|
+
- launch cleanup
|
|
544
|
+
- packaging cleanup
|
|
545
|
+
- public repo polish
|
|
546
|
+
- stronger `/passport` sharing story
|
|
547
|
+
|
|
548
|
+
Longer-term:
|
|
549
|
+
- broader import flows
|
|
550
|
+
- richer memory standard / portability story
|
|
551
|
+
- cross-agent memory propagation story
|
|
552
|
+
|
|
553
|
+
## Contributing
|
|
554
|
+
|
|
555
|
+
PRs are welcome. Keep changes:
|
|
556
|
+
- local-first
|
|
557
|
+
- readable
|
|
558
|
+
- test-backed
|
|
559
|
+
- memory-safe
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
8mem-0.1.1.dist-info/licenses/LICENSE,sha256=ESYyLizI0WWtxMeS7rGVcX3ivMezm-HOd5WdeOh-9oU,1056
|
|
2
|
+
eightmem/__init__.py,sha256=fymSQ8SY86R5lD0yG76ROe-VrsC1MlTOJYrSkn8C--8,100
|
|
3
|
+
eightmem/analyzers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
4
|
+
eightmem/analyzers/extractor.py,sha256=ZZp50qVu00CoQV0OcTL04aZRZGur1zthSiyQVud5dGU,8518
|
|
5
|
+
eightmem/channels/__init__.py,sha256=LE7XNcus7MlFa-DpDfm_XZqghuY-So-umL3OSpObpew,603
|
|
6
|
+
eightmem/channels/telegram_adapter.py,sha256=nhbyB1nBgwVlknIuCZTxYpxkRz8XYxnw7U-64uHj97k,11634
|
|
7
|
+
eightmem/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
8
|
+
eightmem/cli/main.py,sha256=sJMpfvUJ5T4QU2APRIn6OSKpe0MykNSAzbGfJNaahjM,200535
|
|
9
|
+
eightmem/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
10
|
+
eightmem/core/constants.py,sha256=fLh6tY1I79edSO5--rmRhEgdF_ovWbSG9Hv2ewO_EJM,636
|
|
11
|
+
eightmem/core/context_export.py,sha256=mZekgSzffcbNF4_UkUBm62me331I0D2W8qdAstI9JI8,1238
|
|
12
|
+
eightmem/core/env.py,sha256=UjkIZhwytwO-GLNeKrS9JsAwvO1vXQ8UdlBnyrm1LMo,3982
|
|
13
|
+
eightmem/core/governance.py,sha256=eKrNP_daD5puq18555eK9lh82lWyVauIISfrv6EKC0k,14248
|
|
14
|
+
eightmem/core/heartbeat.py,sha256=O0ShUdZonZ2JOY5CE-wIduRDHusyN9JQiNJYio_sU6g,2778
|
|
15
|
+
eightmem/core/import_cache.py,sha256=aPTNvavTapN9rkBgl6e_HfHvC-uLH3UsJDmzwBm-YaM,1224
|
|
16
|
+
eightmem/core/ingestion.py,sha256=kPQ9ZGTXbB-OScrgJk0PxKPbuZIL8ORRyUgZYoBJ5Fg,7001
|
|
17
|
+
eightmem/core/memory_store.py,sha256=NHvu0R1grA0gIMR-67KNVfX3eGUT_W1xa4M5t3NNQ7I,1809
|
|
18
|
+
eightmem/core/models.py,sha256=uS0ThikXAzLeM2MjDuYBC6RQbOQhxLqv2PaL9msdiHM,1345
|
|
19
|
+
eightmem/core/notification_decision.py,sha256=JFZ9JlcmwXSTHCoB9N2viJdyoCpDaAPomqdxizc3rCc,997
|
|
20
|
+
eightmem/core/paths.py,sha256=AhA-uAF6p3wKX4KILTVWxbzbPeTtARXaxQWiLcoklXY,1221
|
|
21
|
+
eightmem/core/pipeline.py,sha256=x-3O_iIWXfSGTFOz7r50W40BqpfFvcIuz1BSDK8GnZY,446
|
|
22
|
+
eightmem/core/signal_connectors.py,sha256=XGemvmYMb-3CI56NPk6DQqjHYdXwagBzziV4-2a1-SU,2202
|
|
23
|
+
eightmem/core/sqlite_facts.py,sha256=G0LgN05OHQoj_fVgUr_7M4RSvC4pmh26FLfOSwze5Ow,16811
|
|
24
|
+
eightmem/core/templates.py,sha256=ANoRXwzYN3WbYHvM2OIgy_DMX8YVV9sczBOlApkX5ZQ,633
|
|
25
|
+
eightmem/importers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
26
|
+
eightmem/importers/parser.py,sha256=5E-GLTwU_Upo-yBZLefY_8uJC1UA312cNHvqHTts8WE,2034
|
|
27
|
+
eightmem/llm/__init__.py,sha256=hDkvnuO3hjuchvmxxwQxIpeemFkYvZXvzPhNQFotAKY,207
|
|
28
|
+
eightmem/llm/ollama.py,sha256=KYKBJcKB-m5MgUgqScn5WTaXsE4vXx3d6iEFMrqbMJs,4190
|
|
29
|
+
eightmem/mirror/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
30
|
+
eightmem/mirror/summary.py,sha256=YUOAqeGGdBxBFlZqIy-J2JWSmzNqvewCpgj1Q67m0S8,3847
|
|
31
|
+
eightmem/resources/__init__.py,sha256=MoE9-eYjk3Ua1r9bWQVs6tuk7XcxfqB90wxKc7o76_M,34
|
|
32
|
+
eightmem/resources/memory_templates/BELIEFS.md,sha256=z7h4PXBEeJYxEYO1bd42rvF_2QSW6DuR6_NFNc80_P4,99
|
|
33
|
+
eightmem/resources/memory_templates/CORRECTIONS.md,sha256=NtVMlkoRpc0IWi-4MkUKcy4rh_QHAVjIcmonMkQYwKs,79
|
|
34
|
+
eightmem/resources/memory_templates/DECISIONS.md,sha256=Yq79DUsutnFDv19A3KKxJkak6-AALjCCpeM21ImbgSU,83
|
|
35
|
+
eightmem/resources/memory_templates/EVOLUTION.md,sha256=F_3zBxsm5dhEQhwSJ6bdSQOsbHpAOmIzihIO49ZljOA,78
|
|
36
|
+
eightmem/resources/memory_templates/IDENTITY.md,sha256=bBYy14uz0eKN-YIrLoUVJofaqucovtJWMm_yB3Sw0rE,81
|
|
37
|
+
eightmem/resources/memory_templates/PREFERENCES.md,sha256=qoCA5X9okvsCVdxpt32G5GTCN6Zh2cIQ0zSki5Q_nX8,82
|
|
38
|
+
eightmem/services/__init__.py,sha256=uD0NDl7PcYCkt9ZFpu3OPQ8yKbf4Ho1EsXAFZRGWaSk,1105
|
|
39
|
+
eightmem/services/compare_card.py,sha256=s0SLZNGqzu2XipMGW0vhs_Yq-umv7l2yygFvjuRxglY,21529
|
|
40
|
+
eightmem/services/memory_service.py,sha256=fegIen1GwfdUBRR1q0b12uFFqsUb0y7fErShSb4BFYU,131164
|
|
41
|
+
eightmem/services/telegram_service.py,sha256=Uxk0mgV9ywDWDNZDAaWyAXD9EtRKgGZkvv7TU11Xpmw,67755
|
|
42
|
+
eightmem/services/webhook_service.py,sha256=zAv2sTyfEIZIiZb1omLqJY7wTEgYeE-p_GIdWvqkI88,6995
|
|
43
|
+
eightmem/ui/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
44
|
+
eightmem/ui/app.py,sha256=EnU88FrCrs5XsAH9VIemWjvCb6FP5kF0k4ANIaoXQeM,59658
|
|
45
|
+
eightmem/ui/static/styles.css,sha256=agOL5WG9x4qwnD7daW8oO40rcjf9Axq4Onkzq_XLFG0,4238
|
|
46
|
+
eightmem/ui/templates/base.html,sha256=q22xv3epP9vnRxtJei_M3Nqpc5tAxGPRPCMAvqs6Kvs,2615
|
|
47
|
+
eightmem/ui/templates/chat.html,sha256=AYJm_cagKY_OylKOGu6BcIqUPWOkEizllxIdUmBIiD0,2468
|
|
48
|
+
eightmem/ui/templates/dashboard.html,sha256=gBx98qeI9ctWgzFre6oj2ydDtAzdtqqb0R7G7S1yc1Y,3759
|
|
49
|
+
eightmem/ui/templates/edit.html,sha256=UWwllNN1t5e1qBRVp8VktlGrJSWsOHuhoispvyR1Cf8,1119
|
|
50
|
+
eightmem/ui/templates/everywhere.html,sha256=G1JUKTHymHmWWmVoIlwBhX6-jxtmdymNdHklQ2170io,1284
|
|
51
|
+
eightmem/ui/templates/export.html,sha256=DXY8so6U9xdxWWIU2i35hdmrSgzcSvY57Z5F9JW1oTs,1164
|
|
52
|
+
eightmem/ui/templates/files.html,sha256=S4SoiPt7E-kj7sUms1wVBI9Gc-rk7gdaX9sybl3WSXw,854
|
|
53
|
+
eightmem/ui/templates/import.html,sha256=Ivj82RLcvb5SmdFlSgYSKPD4i3941MtsFj1ht_VuY20,1927
|
|
54
|
+
eightmem/ui/templates/inbox.html,sha256=5UuriWnxr-hTjmX8UlfBSe4UvqusZTKEC-QPSBuP-PY,5039
|
|
55
|
+
eightmem/ui/templates/mirror.html,sha256=98XnbaxG5JhDmV24zBzWkjid2_bXqMh2afVJy_JjU04,3790
|
|
56
|
+
eightmem/ui/templates/overview.html,sha256=-5-7mu-zxvw2XB63kmU7uHIS1YUSogiYXtXwaO2yKVI,1328
|
|
57
|
+
8mem-0.1.1.dist-info/METADATA,sha256=HDXzmhcMCtqBpWRKDNEv1wvPLfKUKmcMI6yn14Zyoqg,14331
|
|
58
|
+
8mem-0.1.1.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
|
|
59
|
+
8mem-0.1.1.dist-info/entry_points.txt,sha256=70bpUEGDjHicOFMYhf2ACElBlMSAwOtYbP_5kSt3I_Q,47
|
|
60
|
+
8mem-0.1.1.dist-info/top_level.txt,sha256=an0-45UPMb5YeIIsTl2ZXJeHmzZR810xZ9fMbN5_HVU,9
|
|
61
|
+
8mem-0.1.1.dist-info/RECORD,,
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
eightmem
|
eightmem/__init__.py
ADDED
|
File without changes
|