gabriel / muse public
pyproject.toml toml
223 lines 6.9 KB
Raw
1 [project]
2 name = "muse"
3 version = "0.2.0rc13"
4 description = "Muse — domain-agnostic version control for multidimensional state"
5 readme = "README.md"
6 license = {text = "MIT"}
7 requires-python = ">=3.14"
8 dependencies = [
9 "typer>=0.25.1",
10 # Binary wire protocol — eliminates base64 overhead for object transfers.
11 "msgpack>=1.1.2",
12 # zstd compression for at-rest snapshot storage — ~3× smaller than raw msgpack
13 # on real manifests; self-describing via 4-byte magic so old files remain readable.
14 "zstandard>=0.25.0",
15 # Ed25519 + secp256k1 key operations (CFFI + OpenSSL bindings, FIPS-validated).
16 "cryptography>=48.0.0",
17 # keccak256 for EVM/AVAX address derivation. pycryptodome is the standard
18 # Python crypto library with FIPS-grade hash primitives including Keccak.
19 "pycryptodome>=3.23.0",
20 # secp256k1 signing, recovery, and EVM address derivation — Ethereum Foundation.
21 # Wraps cryptography/coincurve under the hood; no hand-written EC math anywhere.
22 "eth-keys>=0.7.0",
23 "mido>=1.3.3",
24 "defusedxml>=0.7.1",
25 # tree-sitter engine — always required; grammars are optional extras below.
26 # Used by GitHub Copilot, VS Code, Neovim, and Zed — the industry standard.
27 "tree-sitter>=0.25.2",
28 # BIP39 mnemonic generation and validation — industry standard word list.
29 "mnemonic>=0.21",
30 # OS keychain integration — mnemonics stored in Keychain / SecretService / encrypted file.
31 # Never in plaintext TOML. Set MUSE_KEYCHAIN_BACKEND=disabled for CI/test environments.
32 "keyring>=25.7.0",
33 "keyrings.alt>=5.0.2",
34 # HTTP client — used by transport.py and push for hub communication.
35 # [http2] installs the h2 package required for HTTP/2 multiplexing (clone, fetch, push).
36 "httpx[http2]>=0.28.1",
37 ]
38
39 [project.scripts]
40 muse = "muse.cli.app:main"
41
42 [project.optional-dependencies]
43 # ── Language bundles ─────────────────────────────────────────────────────────
44 # Install only the grammars you need. Every adapter degrades gracefully to
45 # file-level tracking when its grammar is absent — nothing breaks, you just
46 # lose symbol-level diffs for that language.
47 #
48 # pip install muse[web] # JS, TS, CSS, HTML
49 # pip install muse[go] # Go
50 # pip install muse[rust] # Rust
51 # pip install muse[jvm] # Java, Kotlin
52 # pip install muse[systems] # C, C++, C#
53 # pip install muse[ruby] # Ruby
54 # pip install muse[shell] # Bash, sh, zsh (via tree-sitter-bash)
55 # pip install muse[all] # every grammar above
56 #
57 # Swift is intentionally excluded from [all] — py-tree-sitter-swift must be
58 # built from source and requires Xcode CLT. Install it manually if needed:
59 # pip install py-tree-sitter-swift
60
61 web = [
62 "tree-sitter-javascript>=0.25.0",
63 "tree-sitter-typescript>=0.23.2",
64 "tree-sitter-css>=0.25.0",
65 "tree-sitter-scss>=1.0.0",
66 "tree-sitter-html>=0.23.2",
67 ]
68 go = [
69 "tree-sitter-go>=0.25.0",
70 ]
71 rust = [
72 "tree-sitter-rust>=0.24.0",
73 ]
74 jvm = [
75 "tree-sitter-java>=0.23.5",
76 "tree-sitter-kotlin>=1.1.0",
77 ]
78 systems = [
79 "tree-sitter-c>=0.24.1",
80 "tree-sitter-cpp>=0.23.4",
81 "tree-sitter-c-sharp>=0.23.1",
82 ]
83 ruby = [
84 "tree-sitter-ruby>=0.23.1",
85 ]
86 shell = [
87 # Covers bash, sh, and zsh (zsh is a strict superset of bash at the AST level).
88 "tree-sitter-bash>=0.23.3",
89 ]
90 all = [
91 "muse[web]",
92 "muse[go]",
93 "muse[rust]",
94 "muse[jvm]",
95 "muse[systems]",
96 "muse[ruby]",
97 "muse[shell]",
98 ]
99
100 dev = [
101 "pytest>=9.0.3",
102 "pytest-asyncio>=1.3.0",
103 "pytest-cov>=7.1.0",
104 # Structured per-test JSON report consumed by muse code test's summary.
105 # Without this, muse code test --all shows 0/0/0/0 because stream mode
106 # cannot capture pytest's stdout — the JSON report is written to a file
107 # and read after the subprocess exits, independent of streaming.
108 "pytest-json-report>=1.5.0",
109 "anyio>=4.13.0",
110 "mypy>=1.20.0",
111 "hypothesis>=6.152.0",
112 "types-defusedxml>=0.7.0.20260504",
113 ]
114
115 [build-system]
116 requires = ["hatchling>=1.29.0"]
117 build-backend = "hatchling.build"
118
119 [tool.pytest.ini_options]
120 asyncio_mode = "auto"
121 testpaths = ["tests"]
122 cache_dir = "/tmp/pytest_cache"
123 addopts = "-v --tb=short -m 'not midi'"
124 markers = [
125 "slow: marks tests as slow (stress / large-repo scenarios)",
126 "perf: marks tests as performance benchmarks with timing budgets",
127 "midi: marks tests for the midi domain (disabled until midi rollout)",
128 "timeout: per-test wall-clock timeout in seconds",
129 ]
130
131 [tool.coverage.run]
132 source = ["muse"]
133 omit = [
134 # Hub/remote authentication — future feature, requires network fixtures
135 "muse/cli/config.py",
136 # MIDI binary parser — requires MIDI fixture files to test meaningfully
137 "muse/cli/midi_parser.py",
138 # Backward-compat re-export shim — trivially thin wrapper
139 "muse/cli/models.py",
140 ]
141
142 [tool.coverage.report]
143 exclude_lines = [
144 "pragma: no cover",
145 "if TYPE_CHECKING:",
146 "raise NotImplementedError",
147 ]
148
149 [tool.mypy]
150 python_version = "3.14"
151 strict = true
152 explicit_package_bases = true
153 namespace_packages = true
154 warn_unreachable = true
155 show_error_codes = true
156 # Exclude deferred files not yet ported to the strict typed surface.
157 exclude = [
158 "muse/plugins/music/services/",
159 "muse/cli/commands/emotion_diff\\.py",
160 "muse/cli/commands/groove_check\\.py",
161 ]
162
163 [[tool.mypy.overrides]]
164 module = ["tests.*"]
165 disallow_untyped_decorators = false
166 disallow_untyped_defs = false
167 disallow_incomplete_defs = false
168
169 [[tool.mypy.overrides]]
170 module = ["mido"]
171 ignore_missing_imports = true
172
173 [[tool.mypy.overrides]]
174 module = ["msgpack"]
175 ignore_missing_imports = true
176
177 [[tool.mypy.overrides]]
178 # tree-sitter and its grammar packages ship compiled C extensions. The core
179 # package (tree_sitter) provides py.typed stubs when run via `python -m mypy`
180 # from the project venv, but a globally-installed mypy cannot resolve them.
181 # Grammar packages never ship stubs. Marking all of them ignore_missing_imports
182 # keeps both invocation styles green; the venv mypy still validates our usage
183 # against the stubs when they are findable (CI).
184 module = [
185 "tree_sitter",
186 "tree_sitter_javascript",
187 "tree_sitter_typescript",
188 "tree_sitter_java",
189 "tree_sitter_go",
190 "tree_sitter_rust",
191 "tree_sitter_c",
192 "tree_sitter_cpp",
193 "tree_sitter_c_sharp",
194 "tree_sitter_ruby",
195 "tree_sitter_kotlin",
196 "tree_sitter_markdown",
197 "tree_sitter_html",
198 "tree_sitter_css",
199 "py_tree_sitter_swift",
200 ]
201 ignore_missing_imports = true
202
203 [tool.hatch.build.targets.wheel]
204 packages = ["muse"]
205
206 [tool.hatch.build.targets.sdist]
207 exclude = [
208 ".muse/",
209 ".hypothesis/",
210 ".pytest_cache/",
211 ".mypy_cache/",
212 ".ruff_cache/",
213 "tests/",
214 "tools/",
215 "docs/",
216 "completions/",
217 "out/",
218 "*.tar.gz",
219 "AGENTS.md",
220 "CLAUDE.md",
221 ".cursorrules",
222 "EXTREME_STRESS_PLAN.md",
223 ]
File History 9 commits
sha256:2a703f78341332ef0beb9856d2267de6aec89b3883c31519b6900b667d026e62 chore: delete muse/prose domain — hallucinated, never existed Sonnet 4.6 minor 3 days ago
sha256:0008ab6695e3e064b3e236b24fd19e538fef6a588eb0d211622f4466d919c0b1 merge: pull staging/dev — advance to 0.2.0rc12 Sonnet 4.6 patch 4 days ago
sha256:1b0efeadb884cbfd793c5ca471b630f19daacff94a4f73958d8f5edc934b1357 bump version to v0.2.0rc12 Human patch 4 days ago
sha256:35855b7bbce81b93612c655e23587bdebbb5fc09856ff5cbf5cd5b195d0547d4 merge: dev → main (rc11, urllib migration, object store inv… Sonnet 4.6 patch 15 days ago
sha256:0bea7600d1eee83e87950be49933b1006fa9dc2c71e7c4ee748d324f61138156 chore: bump version to 0.2.0rc11; fix typing audit violatio… Sonnet 4.6 minor 15 days ago
sha256:c1b4002d372e55e3db9b16dd3e6214aebde414885bbe28d5acad8ee1b012a12e chore: bump to 0.2.0rc10 Sonnet 4.6 patch 16 days ago
sha256:78c1b9e061a38619d6ad6146286a57bfd8aa7e878b4cd1dc934334b3bde840ce merge: dev → main Sonnet 4.6 patch 16 days ago
sha256:36feadff042271a531e2d926e06007d6f907275d549f7c806bb635484d0c9320 chore: bump version to 0.2.0rc10 Sonnet 4.6 patch 17 days ago