-
Notifications
You must be signed in to change notification settings - Fork 45
Expand file tree
/
Copy pathpyproject.toml
More file actions
103 lines (96 loc) · 5.56 KB
/
Copy pathpyproject.toml
File metadata and controls
103 lines (96 loc) · 5.56 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
[project]
name = "iai-mcp"
version = "2.3.0"
description = "MCP server giving Claude persistent autistic-style memory + learning"
requires-python = ">=3.11,<3.13"
dependencies = [
"pyarrow>=16.0.0,<20.0", # kept as direct dep — used by hippo.py Arrow IPC path. Ruled out as a replacement target: Arrow C++ is already the optimized SIMD columnar engine.
"numpy>=1.26.0,<2.3.0",
# networkx evicted from main deps. The σ assembly and the
# graph-algorithm consumer surface route through the native Rust
# ``iai_mcp_native.graph`` namespace + the pure-Python rich-club
# helper. The legacy MemoryGraph storage backend lazy-imports
# networkx inside ``__init__``; it remains an internal
# implementation detail and is pinned exactly to ``networkx==3.3``
# in ``[project.optional-dependencies.dev]`` to double-duty as the
# σ-baseline oracle and the MemoryGraph test backend.
"scipy>=1.13.0", # CSR build glue for the σ assembly helpers.
"numba>=0.59", # Numba JIT for custom MIT Leiden kernels. BSD-2 license, MIT-compatible. Ruled out as a replacement target: numba already JITs to LLVM machine code.
# `python-igraph` and `leidenalg` were REMOVED in full. They cannot be
# installed via this package (not even as an optional extra). The sole
# community-detection backend is now MOSAIC (`src/iai_mcp/mosaic.py`,
# pure-MIT). See the README MOSAIC section.
# anthropic SDK not required: subscription-billed `claude -p`
# subprocess replaces api.anthropic.com direct calls. Bench harness uses
# the tiktoken cl100k proxy for token counting where needed.
"tiktoken>=0.7.0", # offline tokeniser fallback for bench/tokens.py + 3 tests
"cryptography>=42.0.0", # AES-256-GCM at rest (pyca/cryptography, audited primitive)
"keyring>=24.0.0", # OS keychain (macOS / Linux Secret Service / Windows Credential Manager)
"cachetools>=5.3.0", # TTLCache for HIPPEA activation-cascade LRU warmer
"hnswlib>=0.8.0,<1.0", # ANN cosine index for Hippo backend
"psutil>=5.9.0", # self-process CPU sampling for daemon CPU watchdog. Already used 4x in doctor.py via transitive resolution; this declaration makes a clean `pip install -e .` reach psutil without [compress] extra.
"pandas>=2.0,<3.0", # DataFrame is the Hippo query-result format on the .to_pandas() read path; required at runtime by hippo/store/events/core.
"zstandard>=0.22,<1.0", # python-zstandard codec inside the AES-GCM envelope on the 4 text/JSON content columns (literal_surface, provenance_json, profile_modulation_gain_json, events.data_json); critical synchronous at-rest path — NOT an optional extra.
"pypdf>=4.0", # pure-Python PDF text extraction for the `iai upload <file>.pdf` ingestion path; lazy-imported inside the .pdf branch of iai_mcp.ingest._parsers so .txt/.md/.csv uploads work without pypdf at runtime.
"setproctitle==1.3.7", # daemon process title (cosmetic, fail-soft)
# Removed dependencies (superseded):
# - torch-hd: superseded by in-tree `iai_mcp.lilli` (BSC/FHRR/sparse VSA tiers)
# - pydantic: declared but zero imports anywhere in `src/`
# - structlog: declared but zero references anywhere (stdlib `logging` is the actual logger)
# - langdetect: dropped 2026-05-28; the English-Only Brain invariant makes
# language guessing on stored text unnecessary (the surface translates
# inbound on the way in). All call sites now write language='en' directly.
]
[project.optional-dependencies]
dev = [
"pytest>=8.0",
"pytest-cov>=5.0",
"pytest-xdist>=3.5",
"pytest-timeout>=2.3",
"reportlab>=4.0", # builds a 1-page PDF fixture on demand inside the ingestion test suite; never imported at runtime by the production package.
"ruff>=0.5.0",
# networkx is the σ-baseline oracle in tests/fixtures/sigma_baseline.json
# (the locked SHA-pinned fixture was generated via networkx 3.3); it also
# backs MemoryGraph's lazy-imported internal storage. Exact pin so the
# baseline reproducibility check stays stable.
"networkx==3.3",
# Differential property-based harness for the σ baseline oracle.
"hypothesis-networkx>=0.3",
# sklearn.metrics oracle for the mosaic LFR gauntlet (was previously a
# transitive dep of the old embedder stack; now declared directly).
"scikit-learn>=1.3",
]
# One-time migration from legacy LanceDB store to Hippo (SQLite + hnswlib).
# Install with: pip install iai-mcp[migration]
# Then run: python scripts/migrate_lance_to_hippo.py
migration = ["lancedb>=0.11.0,<1.0"]
[project.scripts]
iai-mcp-core = "iai_mcp.core:main"
iai-mcp = "iai_mcp.cli:main"
iai = "iai_mcp.iai_cli:main"
[build-system]
requires = ["setuptools>=68", "setuptools-rust>=1.10"]
build-backend = "setuptools.build_meta"
[tool.setuptools.packages.find]
where = ["src"]
[tool.setuptools.package-data]
iai_mcp = [
"_deploy/launchd/*.plist",
"_deploy/systemd/*.service",
"_deploy/hooks/*.sh",
"_deploy/brainview/*.html",
"_wrapper/*.js",
]
# The iai_mcp_native Rust extension is declared in setup.py, not here:
# its feature set is platform-conditional (Apple Accelerate BLAS on macOS),
# and pyproject ext-modules entries are static.
[tool.pytest.ini_options]
testpaths = ["tests"]
pythonpath = ["src"]
norecursedirs = ["_manual", ".*", "build", "dist", "node_modules", "*.egg"]
markers = [
"slow: opt-in via --runslow (subprocess-heavy bench-shim resolution tests)",
"perf: opt-in via --perf (wall-clock latency benches, out of the default correctness gate)",
"live: opt-in via --live (real daemon-subprocess E2E gate, out of the default correctness gate)",
"literature: cross-check against published reference values",
]