elesync 1.1.2__tar.gz → 1.2.0__tar.gz
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.
- {elesync-1.1.2 → elesync-1.2.0}/PKG-INFO +60 -5
- {elesync-1.1.2 → elesync-1.2.0}/README.md +59 -4
- {elesync-1.1.2 → elesync-1.2.0}/elesync/__init__.py +12 -12
- {elesync-1.1.2 → elesync-1.2.0}/elesync/cli.py +804 -642
- {elesync-1.1.2 → elesync-1.2.0}/elesync/summary.py +4 -1
- elesync-1.2.0/elesync/usb.py +620 -0
- {elesync-1.1.2 → elesync-1.2.0}/elesync/watch.py +48 -35
- {elesync-1.1.2 → elesync-1.2.0}/elesync.egg-info/PKG-INFO +60 -5
- {elesync-1.1.2 → elesync-1.2.0}/elesync.egg-info/SOURCES.txt +2 -0
- {elesync-1.1.2 → elesync-1.2.0}/pyproject.toml +63 -63
- elesync-1.2.0/tests/test_usb.py +386 -0
- {elesync-1.1.2 → elesync-1.2.0}/LICENSE +0 -0
- {elesync-1.1.2 → elesync-1.2.0}/elesync/conflicts.py +0 -0
- {elesync-1.1.2 → elesync-1.2.0}/elesync/crypto.py +0 -0
- {elesync-1.1.2 → elesync-1.2.0}/elesync/embeddings.py +0 -0
- {elesync-1.1.2 → elesync-1.2.0}/elesync/mcp_server.py +0 -0
- {elesync-1.1.2 → elesync-1.2.0}/elesync/models.py +0 -0
- {elesync-1.1.2 → elesync-1.2.0}/elesync/normalize.py +0 -0
- {elesync-1.1.2 → elesync-1.2.0}/elesync/onboarding.py +0 -0
- {elesync-1.1.2 → elesync-1.2.0}/elesync/scopes.py +0 -0
- {elesync-1.1.2 → elesync-1.2.0}/elesync/service.py +0 -0
- {elesync-1.1.2 → elesync-1.2.0}/elesync/store.py +0 -0
- {elesync-1.1.2 → elesync-1.2.0}/elesync.egg-info/dependency_links.txt +0 -0
- {elesync-1.1.2 → elesync-1.2.0}/elesync.egg-info/entry_points.txt +0 -0
- {elesync-1.1.2 → elesync-1.2.0}/elesync.egg-info/requires.txt +0 -0
- {elesync-1.1.2 → elesync-1.2.0}/elesync.egg-info/top_level.txt +0 -0
- {elesync-1.1.2 → elesync-1.2.0}/setup.cfg +0 -0
- {elesync-1.1.2 → elesync-1.2.0}/tests/test_conflicts.py +0 -0
- {elesync-1.1.2 → elesync-1.2.0}/tests/test_encryption.py +0 -0
- {elesync-1.1.2 → elesync-1.2.0}/tests/test_scopes.py +0 -0
- {elesync-1.1.2 → elesync-1.2.0}/tests/test_semantic.py +0 -0
- {elesync-1.1.2 → elesync-1.2.0}/tests/test_service.py +0 -0
- {elesync-1.1.2 → elesync-1.2.0}/tests/test_summary.py +0 -0
- {elesync-1.1.2 → elesync-1.2.0}/tests/test_vault.py +0 -0
- {elesync-1.1.2 → elesync-1.2.0}/tests/test_watch.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: elesync
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.2.0
|
|
4
4
|
Summary: Local-first, MCP-native unified memory vault — your AI memory as files you own, shared across every model.
|
|
5
5
|
Author: Alphanymous
|
|
6
6
|
License: MIT
|
|
@@ -44,9 +44,9 @@ Dynamic: license-file
|
|
|
44
44
|
|
|
45
45
|
# 🐘 EleSync
|
|
46
46
|
|
|
47
|
-
###
|
|
47
|
+
### Tired of re-explaining yourself to every AI? I bet you are, that's why we created EleSync, a One command setup memory vault, nicely encrypted, accessible to continue your conversations without repeating yourself to every model.
|
|
48
48
|
|
|
49
|
-
🔰 **
|
|
49
|
+
🔰 **You're not a developer?** Perfect — EleSync is designed for regular people first. Read the **[plain-English setup guide](SETUP.md)** — covers everything from first install to USB vault, step by step. ~10 minutes, no coding knowledge needed.
|
|
50
50
|
|
|
51
51
|
<p align="center">
|
|
52
52
|
<img src="Elesyncdemo.gif" alt="EleSync demo" width="640">
|
|
@@ -84,7 +84,7 @@ pip install "elesync[watch]"
|
|
|
84
84
|
ele watch --autostart # runs in the background from now on
|
|
85
85
|
```
|
|
86
86
|
|
|
87
|
-
**Stable at v1.
|
|
87
|
+
**Stable at v1.2** — a 134-test suite, CI across Python 3.10–3.14 (including a dev-extras job
|
|
88
88
|
covering encryption and real-model semantic recall) plus ruff lint/format and mypy type-checking,
|
|
89
89
|
and a public surface (CLI commands, MCP tools, vault layout, export format) you can build on
|
|
90
90
|
without breakage inside 1.x. See the [CHANGELOG](CHANGELOG.md) for the full history.
|
|
@@ -128,7 +128,7 @@ leave open is the wedge here:
|
|
|
128
128
|
| Live read **+ write back** | within app | ✗ static file | ✓ |
|
|
129
129
|
| Infrastructure | crypto/wallet | browser only | ✓ zero — files + SQLite |
|
|
130
130
|
|
|
131
|
-
"Eco-friendly and easy" = no server, no database to run, no
|
|
131
|
+
"Eco-friendly and easy" = no server, no database to run, no blockchain/wallet. Markdown + SQLite.
|
|
132
132
|
|
|
133
133
|
## Architecture
|
|
134
134
|
|
|
@@ -388,6 +388,59 @@ ele conflicts
|
|
|
388
388
|
`fact`s that look like they're about the same thing but differ — so treat results as *candidates to
|
|
389
389
|
review*, not verdicts. EleSync only ever **surfaces**; you resolve with `ele forget <id>`.
|
|
390
390
|
|
|
391
|
+
## Portable USB vault (carry your memory anywhere)
|
|
392
|
+
|
|
393
|
+
Plug in a USB drive, run one command, and your encrypted AI memory goes with you everywhere.
|
|
394
|
+
On any machine with Python, `python RUN_ME.py` installs EleSync and connects it to Claude — no
|
|
395
|
+
prior knowledge needed.
|
|
396
|
+
|
|
397
|
+
```bash
|
|
398
|
+
pip install "elesync[mcp,encryption]"
|
|
399
|
+
|
|
400
|
+
# One-time setup on your USB drive
|
|
401
|
+
ele usb install /Volumes/MyUSB # macOS
|
|
402
|
+
ele usb install E:\\ # Windows
|
|
403
|
+
ele usb install /media/myusb # Linux
|
|
404
|
+
# Enter a passphrase when prompted — this encrypts everything on the drive
|
|
405
|
+
|
|
406
|
+
# Later: import your AI memories onto the drive
|
|
407
|
+
ele --vault /Volumes/MyUSB/EleSyncVault import chatgpt_memory.json --source chatgpt
|
|
408
|
+
ele --vault /Volumes/MyUSB/EleSyncVault import claude_export.json --source claude
|
|
409
|
+
ele --vault /Volumes/MyUSB/EleSyncVault import gemini_memory.json --source gemini
|
|
410
|
+
|
|
411
|
+
# Connect to Claude Desktop (on any machine)
|
|
412
|
+
ele usb attach /Volumes/MyUSB # prompts for passphrase, wires Claude Desktop
|
|
413
|
+
# → Fully quit and reopen Claude Desktop
|
|
414
|
+
|
|
415
|
+
# Before unplugging
|
|
416
|
+
ele usb detach /Volumes/MyUSB # removes Claude Desktop entry
|
|
417
|
+
ele usb eject /Volumes/MyUSB # safe-eject
|
|
418
|
+
|
|
419
|
+
# Other commands
|
|
420
|
+
ele usb list # see all removable drives
|
|
421
|
+
ele usb status /Volumes/MyUSB # check vault health & memory count
|
|
422
|
+
```
|
|
423
|
+
|
|
424
|
+
**On a new machine** — plug in the drive and run:
|
|
425
|
+
|
|
426
|
+
```bash
|
|
427
|
+
python /Volumes/MyUSB/RUN_ME.py
|
|
428
|
+
```
|
|
429
|
+
|
|
430
|
+
That's it. `RUN_ME.py` is a self-contained script the drive carries with it: it installs
|
|
431
|
+
EleSync via pip (if needed) and wires the USB vault into Claude Desktop — no prior knowledge
|
|
432
|
+
of pip or MCP required.
|
|
433
|
+
|
|
434
|
+
**Security model** — USB vaults are *always* encrypted (unlike the main vault where encryption
|
|
435
|
+
is opt-in). Your passphrase is the only thing that unlocks the vault; a lost or stolen drive
|
|
436
|
+
exposed nothing without it. The same XSalsa20-Poly1305 + argon2id encryption used by
|
|
437
|
+
`ele encrypt` is applied automatically at install time.
|
|
438
|
+
|
|
439
|
+
> The USB vault is a standard EleSync vault at `<drive>/EleSyncVault`. You can run any normal
|
|
440
|
+
> `ele` command against it by passing `--vault <drive>/EleSyncVault`. Nothing is synced
|
|
441
|
+
> automatically between the USB vault and your main vault — use `ele export` + `ele import` to
|
|
442
|
+
> move memories between them.
|
|
443
|
+
|
|
391
444
|
## Sync across devices
|
|
392
445
|
|
|
393
446
|
Your vault is **just a folder** (`notes/*.md` + a small `vault.json`), so sync it however you
|
|
@@ -508,6 +561,8 @@ file into your own vault sidesteps that entirely.
|
|
|
508
561
|
|
|
509
562
|
## Roadmap (the honest next 20%)
|
|
510
563
|
|
|
564
|
+
<!-- NOTE: USB portable vault landed in v1.2.0 — removed from roadmap -->
|
|
565
|
+
|
|
511
566
|
1. **Semantic recall** — ✅ landed (optional `[semantic]` extra: local ONNX embeddings,
|
|
512
567
|
hybrid keyword+vector ranking — see above). Next: semantic *dedup* (near-duplicate
|
|
513
568
|
detection), and pgvector/sqlite-vec if a vault ever outgrows brute-force cosine.
|
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
|
|
5
5
|
# 🐘 EleSync
|
|
6
6
|
|
|
7
|
-
###
|
|
7
|
+
### Tired of re-explaining yourself to every AI? I bet you are, that's why we created EleSync, a One command setup memory vault, nicely encrypted, accessible to continue your conversations without repeating yourself to every model.
|
|
8
8
|
|
|
9
|
-
🔰 **
|
|
9
|
+
🔰 **You're not a developer?** Perfect — EleSync is designed for regular people first. Read the **[plain-English setup guide](SETUP.md)** — covers everything from first install to USB vault, step by step. ~10 minutes, no coding knowledge needed.
|
|
10
10
|
|
|
11
11
|
<p align="center">
|
|
12
12
|
<img src="Elesyncdemo.gif" alt="EleSync demo" width="640">
|
|
@@ -44,7 +44,7 @@ pip install "elesync[watch]"
|
|
|
44
44
|
ele watch --autostart # runs in the background from now on
|
|
45
45
|
```
|
|
46
46
|
|
|
47
|
-
**Stable at v1.
|
|
47
|
+
**Stable at v1.2** — a 134-test suite, CI across Python 3.10–3.14 (including a dev-extras job
|
|
48
48
|
covering encryption and real-model semantic recall) plus ruff lint/format and mypy type-checking,
|
|
49
49
|
and a public surface (CLI commands, MCP tools, vault layout, export format) you can build on
|
|
50
50
|
without breakage inside 1.x. See the [CHANGELOG](CHANGELOG.md) for the full history.
|
|
@@ -88,7 +88,7 @@ leave open is the wedge here:
|
|
|
88
88
|
| Live read **+ write back** | within app | ✗ static file | ✓ |
|
|
89
89
|
| Infrastructure | crypto/wallet | browser only | ✓ zero — files + SQLite |
|
|
90
90
|
|
|
91
|
-
"Eco-friendly and easy" = no server, no database to run, no
|
|
91
|
+
"Eco-friendly and easy" = no server, no database to run, no blockchain/wallet. Markdown + SQLite.
|
|
92
92
|
|
|
93
93
|
## Architecture
|
|
94
94
|
|
|
@@ -348,6 +348,59 @@ ele conflicts
|
|
|
348
348
|
`fact`s that look like they're about the same thing but differ — so treat results as *candidates to
|
|
349
349
|
review*, not verdicts. EleSync only ever **surfaces**; you resolve with `ele forget <id>`.
|
|
350
350
|
|
|
351
|
+
## Portable USB vault (carry your memory anywhere)
|
|
352
|
+
|
|
353
|
+
Plug in a USB drive, run one command, and your encrypted AI memory goes with you everywhere.
|
|
354
|
+
On any machine with Python, `python RUN_ME.py` installs EleSync and connects it to Claude — no
|
|
355
|
+
prior knowledge needed.
|
|
356
|
+
|
|
357
|
+
```bash
|
|
358
|
+
pip install "elesync[mcp,encryption]"
|
|
359
|
+
|
|
360
|
+
# One-time setup on your USB drive
|
|
361
|
+
ele usb install /Volumes/MyUSB # macOS
|
|
362
|
+
ele usb install E:\\ # Windows
|
|
363
|
+
ele usb install /media/myusb # Linux
|
|
364
|
+
# Enter a passphrase when prompted — this encrypts everything on the drive
|
|
365
|
+
|
|
366
|
+
# Later: import your AI memories onto the drive
|
|
367
|
+
ele --vault /Volumes/MyUSB/EleSyncVault import chatgpt_memory.json --source chatgpt
|
|
368
|
+
ele --vault /Volumes/MyUSB/EleSyncVault import claude_export.json --source claude
|
|
369
|
+
ele --vault /Volumes/MyUSB/EleSyncVault import gemini_memory.json --source gemini
|
|
370
|
+
|
|
371
|
+
# Connect to Claude Desktop (on any machine)
|
|
372
|
+
ele usb attach /Volumes/MyUSB # prompts for passphrase, wires Claude Desktop
|
|
373
|
+
# → Fully quit and reopen Claude Desktop
|
|
374
|
+
|
|
375
|
+
# Before unplugging
|
|
376
|
+
ele usb detach /Volumes/MyUSB # removes Claude Desktop entry
|
|
377
|
+
ele usb eject /Volumes/MyUSB # safe-eject
|
|
378
|
+
|
|
379
|
+
# Other commands
|
|
380
|
+
ele usb list # see all removable drives
|
|
381
|
+
ele usb status /Volumes/MyUSB # check vault health & memory count
|
|
382
|
+
```
|
|
383
|
+
|
|
384
|
+
**On a new machine** — plug in the drive and run:
|
|
385
|
+
|
|
386
|
+
```bash
|
|
387
|
+
python /Volumes/MyUSB/RUN_ME.py
|
|
388
|
+
```
|
|
389
|
+
|
|
390
|
+
That's it. `RUN_ME.py` is a self-contained script the drive carries with it: it installs
|
|
391
|
+
EleSync via pip (if needed) and wires the USB vault into Claude Desktop — no prior knowledge
|
|
392
|
+
of pip or MCP required.
|
|
393
|
+
|
|
394
|
+
**Security model** — USB vaults are *always* encrypted (unlike the main vault where encryption
|
|
395
|
+
is opt-in). Your passphrase is the only thing that unlocks the vault; a lost or stolen drive
|
|
396
|
+
exposed nothing without it. The same XSalsa20-Poly1305 + argon2id encryption used by
|
|
397
|
+
`ele encrypt` is applied automatically at install time.
|
|
398
|
+
|
|
399
|
+
> The USB vault is a standard EleSync vault at `<drive>/EleSyncVault`. You can run any normal
|
|
400
|
+
> `ele` command against it by passing `--vault <drive>/EleSyncVault`. Nothing is synced
|
|
401
|
+
> automatically between the USB vault and your main vault — use `ele export` + `ele import` to
|
|
402
|
+
> move memories between them.
|
|
403
|
+
|
|
351
404
|
## Sync across devices
|
|
352
405
|
|
|
353
406
|
Your vault is **just a folder** (`notes/*.md` + a small `vault.json`), so sync it however you
|
|
@@ -468,6 +521,8 @@ file into your own vault sidesteps that entirely.
|
|
|
468
521
|
|
|
469
522
|
## Roadmap (the honest next 20%)
|
|
470
523
|
|
|
524
|
+
<!-- NOTE: USB portable vault landed in v1.2.0 — removed from roadmap -->
|
|
525
|
+
|
|
471
526
|
1. **Semantic recall** — ✅ landed (optional `[semantic]` extra: local ONNX embeddings,
|
|
472
527
|
hybrid keyword+vector ranking — see above). Next: semantic *dedup* (near-duplicate
|
|
473
528
|
detection), and pgvector/sqlite-vec if a vault ever outgrows brute-force cosine.
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
"""elesync — a local-first, MCP-native unified elesync.
|
|
2
|
-
|
|
3
|
-
One vault on your disk. Every AI reads from and writes to it over MCP.
|
|
4
|
-
"""
|
|
5
|
-
|
|
6
|
-
from . import normalize
|
|
7
|
-
from .models import MEMORY_TYPES, MemoryItem
|
|
8
|
-
from .service import MemoryService
|
|
9
|
-
from .store import MemoryStore
|
|
10
|
-
|
|
11
|
-
__all__ = ["MemoryItem", "MEMORY_TYPES", "MemoryStore", "MemoryService", "normalize"]
|
|
12
|
-
__version__ = "1.
|
|
1
|
+
"""elesync — a local-first, MCP-native unified elesync.
|
|
2
|
+
|
|
3
|
+
One vault on your disk. Every AI reads from and writes to it over MCP.
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
from . import normalize
|
|
7
|
+
from .models import MEMORY_TYPES, MemoryItem
|
|
8
|
+
from .service import MemoryService
|
|
9
|
+
from .store import MemoryStore
|
|
10
|
+
|
|
11
|
+
__all__ = ["MemoryItem", "MEMORY_TYPES", "MemoryStore", "MemoryService", "normalize"]
|
|
12
|
+
__version__ = "1.2.0"
|