ememdev 0.0.9__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.
- ememdev-0.0.9/.gitignore +83 -0
- ememdev-0.0.9/PKG-INFO +110 -0
- ememdev-0.0.9/README.md +84 -0
- ememdev-0.0.9/pyproject.toml +50 -0
ememdev-0.0.9/.gitignore
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
# Rust build artefacts
|
|
2
|
+
/target/
|
|
3
|
+
**/target/
|
|
4
|
+
|
|
5
|
+
# Local persisted data + secrets
|
|
6
|
+
/var/
|
|
7
|
+
**/var/emem/
|
|
8
|
+
**/var/demos/
|
|
9
|
+
*.secret.b32
|
|
10
|
+
identity.secret.b32
|
|
11
|
+
.cloudflared/
|
|
12
|
+
acme.cache/
|
|
13
|
+
tls/
|
|
14
|
+
# Runtime cruft — when EMEM_DATA=:memory: is misinterpreted as a path
|
|
15
|
+
# string, a literal :memory: directory is created. Untracked but
|
|
16
|
+
# silenced from `git status` so it doesn't read as repo state.
|
|
17
|
+
/:memory:/
|
|
18
|
+
**/:memory:/
|
|
19
|
+
|
|
20
|
+
# Editor / OS
|
|
21
|
+
.DS_Store
|
|
22
|
+
.idea/
|
|
23
|
+
.vscode/
|
|
24
|
+
*.swp
|
|
25
|
+
*.swo
|
|
26
|
+
|
|
27
|
+
# Node / Vite — the old TS/Vite SPA at repo root was retired in 0.0.6;
|
|
28
|
+
# the live https://emem.dev is served by the Rust `emem-server` binary.
|
|
29
|
+
# These patterns prevent the scaffolding from sneaking back in at root.
|
|
30
|
+
# sdks/emem-ts/ has its own legitimate package.json / tsconfig.json /
|
|
31
|
+
# src/ — those are NOT matched here because patterns are anchored to /.
|
|
32
|
+
node_modules/
|
|
33
|
+
dist/
|
|
34
|
+
dist-server/
|
|
35
|
+
.parcel-cache/
|
|
36
|
+
/index.html
|
|
37
|
+
/package.json
|
|
38
|
+
/package-lock.json
|
|
39
|
+
/vite.config.ts
|
|
40
|
+
/tsconfig.json
|
|
41
|
+
/tsconfig.server.json
|
|
42
|
+
/src/
|
|
43
|
+
/server/
|
|
44
|
+
/tests/*.test.ts
|
|
45
|
+
|
|
46
|
+
# Artifacts (screenshots, generated images) — keep folder, ignore contents
|
|
47
|
+
artifacts/*
|
|
48
|
+
!artifacts/.gitkeep
|
|
49
|
+
|
|
50
|
+
# Python ad-hoc tools
|
|
51
|
+
__pycache__/
|
|
52
|
+
*.pyc
|
|
53
|
+
.venv/
|
|
54
|
+
|
|
55
|
+
# Local Claude / IDE state
|
|
56
|
+
.claude/
|
|
57
|
+
CLAUDE.md
|
|
58
|
+
registry_claude.md
|
|
59
|
+
|
|
60
|
+
# Env files
|
|
61
|
+
.env
|
|
62
|
+
.env.*
|
|
63
|
+
!.env.example
|
|
64
|
+
|
|
65
|
+
# Logs + coverage
|
|
66
|
+
*.log
|
|
67
|
+
npm-debug.log*
|
|
68
|
+
yarn-debug.log*
|
|
69
|
+
yarn-error.log*
|
|
70
|
+
coverage/
|
|
71
|
+
.nyc_output/
|
|
72
|
+
notes/
|
|
73
|
+
|
|
74
|
+
# fastembed-rs ONNX model cache (HF hub mirror, ~400 MB)
|
|
75
|
+
.fastembed_cache/
|
|
76
|
+
scripts/eval/results/q*.json
|
|
77
|
+
|
|
78
|
+
# mdbook output for the /docs/ site. The book is built at deploy/CI time
|
|
79
|
+
# (see scripts/redeploy.sh and .github/workflows/ci.yml) and baked into
|
|
80
|
+
# the binary via `include_dir!("docs/book")`. Committing it would churn the
|
|
81
|
+
# repo every docs edit (hashed asset filenames) and add ~5 MB; build it
|
|
82
|
+
# fresh on each CI run instead.
|
|
83
|
+
docs/book/
|
ememdev-0.0.9/PKG-INFO
ADDED
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: ememdev
|
|
3
|
+
Version: 0.0.9
|
|
4
|
+
Summary: Python client for emem.dev, the agent-native Earth memory protocol
|
|
5
|
+
Project-URL: Homepage, https://emem.dev
|
|
6
|
+
Project-URL: Repository, https://github.com/Vortx-AI/emem
|
|
7
|
+
Project-URL: Documentation, https://emem.dev/agents.md
|
|
8
|
+
Project-URL: Issues, https://github.com/Vortx-AI/emem/issues
|
|
9
|
+
Author-email: Vortx AI Private Limited <avijeet@vortx.ai>
|
|
10
|
+
License: Apache-2.0
|
|
11
|
+
Keywords: content-addressed,earth-observation,ed25519,geospatial,mcp,satellite
|
|
12
|
+
Classifier: Development Status :: 3 - Alpha
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: Intended Audience :: Science/Research
|
|
15
|
+
Classifier: License :: OSI Approved :: Apache Software License
|
|
16
|
+
Classifier: Programming Language :: Python :: 3
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
22
|
+
Classifier: Topic :: Scientific/Engineering :: GIS
|
|
23
|
+
Requires-Python: >=3.9
|
|
24
|
+
Requires-Dist: httpx<1.0,>=0.27
|
|
25
|
+
Description-Content-Type: text/markdown
|
|
26
|
+
|
|
27
|
+
# ememdev: Python client for emem.dev
|
|
28
|
+
|
|
29
|
+
<!-- mcp-name: io.github.Vortx-AI/emem -->
|
|
30
|
+
|
|
31
|
+
Thin, typed Python client for the [emem.dev](https://emem.dev) Earth memory
|
|
32
|
+
protocol. Wraps the public REST surface (96 documented paths, 93 under
|
|
33
|
+
`/v1/*`) in a single `Client` class that returns parsed JSON verbatim. Every
|
|
34
|
+
ed25519-signed receipt and content-addressed CID is preserved for
|
|
35
|
+
citation and offline verification.
|
|
36
|
+
|
|
37
|
+
## Install
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
pip install ememdev
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
The distribution is named `ememdev`; the import package is `emem` (so
|
|
44
|
+
`pip install ememdev`, then `from emem import Client`). To work from a
|
|
45
|
+
checkout instead:
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
pip install -e sdks/emem-py
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Requires Python 3.9+. The only runtime dependency is
|
|
52
|
+
[`httpx`](https://www.python-httpx.org/).
|
|
53
|
+
|
|
54
|
+
## Quick start
|
|
55
|
+
|
|
56
|
+
```python
|
|
57
|
+
from emem import Client
|
|
58
|
+
|
|
59
|
+
with Client() as em:
|
|
60
|
+
cell = em.locate("Mount Fuji")["cell64"]
|
|
61
|
+
facts = em.recall(cell, bands=["copdem30m.elevation_mean"])
|
|
62
|
+
print(facts["facts"][0]["value"])
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## Async
|
|
66
|
+
|
|
67
|
+
```python
|
|
68
|
+
import asyncio
|
|
69
|
+
from emem import AsyncClient
|
|
70
|
+
|
|
71
|
+
async def main() -> None:
|
|
72
|
+
async with AsyncClient() as em:
|
|
73
|
+
out = await em.ask("How tall is Mount Everest?")
|
|
74
|
+
print(out["answer"])
|
|
75
|
+
|
|
76
|
+
asyncio.run(main())
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
## Configuration
|
|
80
|
+
|
|
81
|
+
| Env var | Default | Effect |
|
|
82
|
+
|-----------------------|----------------------|---------------------------------------------|
|
|
83
|
+
| `EMEM_BASE_URL` | `https://emem.dev` | Responder root; point at a self-hosted node |
|
|
84
|
+
| `EMEM_TIMEOUT_SECS` | `180` | HTTP timeout (matches gateway timeout) |
|
|
85
|
+
|
|
86
|
+
You can also pass `base_url=` and `timeout=` directly to the constructor.
|
|
87
|
+
|
|
88
|
+
## Surface coverage
|
|
89
|
+
|
|
90
|
+
Geocoder + read primitives, physics solvers, boring lat/lng shortcuts, and
|
|
91
|
+
introspection — see the inline docstring on `emem.client` for the full
|
|
92
|
+
endpoint → method mapping.
|
|
93
|
+
|
|
94
|
+
## Receipts
|
|
95
|
+
|
|
96
|
+
Every non-introspection response carries a `receipt` block with:
|
|
97
|
+
|
|
98
|
+
- `responder_pubkey` (ed25519 base32-nopad-lowercase)
|
|
99
|
+
- `signature_b32` (ed25519 over the canonical CBOR preimage)
|
|
100
|
+
- `merkle_root` (BLAKE3 over the fact CIDs)
|
|
101
|
+
- `fact_cids[]` (the BLAKE3 CIDs of every fact returned)
|
|
102
|
+
|
|
103
|
+
To cite an answer: quote `receipt.fact_cids[0]` and the responder pubkey.
|
|
104
|
+
The signature can be verified offline against the public key at
|
|
105
|
+
`https://emem.dev/.well-known/emem.json`; no callback to the responder is
|
|
106
|
+
required.
|
|
107
|
+
|
|
108
|
+
## License
|
|
109
|
+
|
|
110
|
+
Apache-2.0. Same as the upstream protocol.
|
ememdev-0.0.9/README.md
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
# ememdev: Python client for emem.dev
|
|
2
|
+
|
|
3
|
+
<!-- mcp-name: io.github.Vortx-AI/emem -->
|
|
4
|
+
|
|
5
|
+
Thin, typed Python client for the [emem.dev](https://emem.dev) Earth memory
|
|
6
|
+
protocol. Wraps the public REST surface (96 documented paths, 93 under
|
|
7
|
+
`/v1/*`) in a single `Client` class that returns parsed JSON verbatim. Every
|
|
8
|
+
ed25519-signed receipt and content-addressed CID is preserved for
|
|
9
|
+
citation and offline verification.
|
|
10
|
+
|
|
11
|
+
## Install
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
pip install ememdev
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
The distribution is named `ememdev`; the import package is `emem` (so
|
|
18
|
+
`pip install ememdev`, then `from emem import Client`). To work from a
|
|
19
|
+
checkout instead:
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
pip install -e sdks/emem-py
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
Requires Python 3.9+. The only runtime dependency is
|
|
26
|
+
[`httpx`](https://www.python-httpx.org/).
|
|
27
|
+
|
|
28
|
+
## Quick start
|
|
29
|
+
|
|
30
|
+
```python
|
|
31
|
+
from emem import Client
|
|
32
|
+
|
|
33
|
+
with Client() as em:
|
|
34
|
+
cell = em.locate("Mount Fuji")["cell64"]
|
|
35
|
+
facts = em.recall(cell, bands=["copdem30m.elevation_mean"])
|
|
36
|
+
print(facts["facts"][0]["value"])
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Async
|
|
40
|
+
|
|
41
|
+
```python
|
|
42
|
+
import asyncio
|
|
43
|
+
from emem import AsyncClient
|
|
44
|
+
|
|
45
|
+
async def main() -> None:
|
|
46
|
+
async with AsyncClient() as em:
|
|
47
|
+
out = await em.ask("How tall is Mount Everest?")
|
|
48
|
+
print(out["answer"])
|
|
49
|
+
|
|
50
|
+
asyncio.run(main())
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## Configuration
|
|
54
|
+
|
|
55
|
+
| Env var | Default | Effect |
|
|
56
|
+
|-----------------------|----------------------|---------------------------------------------|
|
|
57
|
+
| `EMEM_BASE_URL` | `https://emem.dev` | Responder root; point at a self-hosted node |
|
|
58
|
+
| `EMEM_TIMEOUT_SECS` | `180` | HTTP timeout (matches gateway timeout) |
|
|
59
|
+
|
|
60
|
+
You can also pass `base_url=` and `timeout=` directly to the constructor.
|
|
61
|
+
|
|
62
|
+
## Surface coverage
|
|
63
|
+
|
|
64
|
+
Geocoder + read primitives, physics solvers, boring lat/lng shortcuts, and
|
|
65
|
+
introspection — see the inline docstring on `emem.client` for the full
|
|
66
|
+
endpoint → method mapping.
|
|
67
|
+
|
|
68
|
+
## Receipts
|
|
69
|
+
|
|
70
|
+
Every non-introspection response carries a `receipt` block with:
|
|
71
|
+
|
|
72
|
+
- `responder_pubkey` (ed25519 base32-nopad-lowercase)
|
|
73
|
+
- `signature_b32` (ed25519 over the canonical CBOR preimage)
|
|
74
|
+
- `merkle_root` (BLAKE3 over the fact CIDs)
|
|
75
|
+
- `fact_cids[]` (the BLAKE3 CIDs of every fact returned)
|
|
76
|
+
|
|
77
|
+
To cite an answer: quote `receipt.fact_cids[0]` and the responder pubkey.
|
|
78
|
+
The signature can be verified offline against the public key at
|
|
79
|
+
`https://emem.dev/.well-known/emem.json`; no callback to the responder is
|
|
80
|
+
required.
|
|
81
|
+
|
|
82
|
+
## License
|
|
83
|
+
|
|
84
|
+
Apache-2.0. Same as the upstream protocol.
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["hatchling>=1.18"]
|
|
3
|
+
build-backend = "hatchling.build"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "ememdev"
|
|
7
|
+
version = "0.0.9"
|
|
8
|
+
description = "Python client for emem.dev, the agent-native Earth memory protocol"
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
requires-python = ">=3.9"
|
|
11
|
+
license = { text = "Apache-2.0" }
|
|
12
|
+
authors = [
|
|
13
|
+
{ name = "Vortx AI Private Limited", email = "avijeet@vortx.ai" },
|
|
14
|
+
]
|
|
15
|
+
keywords = [
|
|
16
|
+
"earth-observation",
|
|
17
|
+
"geospatial",
|
|
18
|
+
"satellite",
|
|
19
|
+
"mcp",
|
|
20
|
+
"ed25519",
|
|
21
|
+
"content-addressed",
|
|
22
|
+
]
|
|
23
|
+
classifiers = [
|
|
24
|
+
"Development Status :: 3 - Alpha",
|
|
25
|
+
"Intended Audience :: Developers",
|
|
26
|
+
"Intended Audience :: Science/Research",
|
|
27
|
+
"License :: OSI Approved :: Apache Software License",
|
|
28
|
+
"Programming Language :: Python :: 3",
|
|
29
|
+
"Programming Language :: Python :: 3.9",
|
|
30
|
+
"Programming Language :: Python :: 3.10",
|
|
31
|
+
"Programming Language :: Python :: 3.11",
|
|
32
|
+
"Programming Language :: Python :: 3.12",
|
|
33
|
+
"Programming Language :: Python :: 3.13",
|
|
34
|
+
"Topic :: Scientific/Engineering :: GIS",
|
|
35
|
+
]
|
|
36
|
+
dependencies = [
|
|
37
|
+
"httpx>=0.27,<1.0",
|
|
38
|
+
]
|
|
39
|
+
|
|
40
|
+
[project.urls]
|
|
41
|
+
Homepage = "https://emem.dev"
|
|
42
|
+
Repository = "https://github.com/Vortx-AI/emem"
|
|
43
|
+
Documentation = "https://emem.dev/agents.md"
|
|
44
|
+
Issues = "https://github.com/Vortx-AI/emem/issues"
|
|
45
|
+
|
|
46
|
+
[tool.hatch.build.targets.wheel]
|
|
47
|
+
packages = ["src/emem"]
|
|
48
|
+
|
|
49
|
+
[tool.hatch.build.targets.sdist]
|
|
50
|
+
include = ["src/emem", "README.md", "LICENSE"]
|