gabriel / muse public
pyproject.toml toml
228 lines 7.0 KB
Raw
sha256:0008ab6695e3e064b3e236b24fd19e538fef6a588eb0d211622f4466d919c0b1 merge: pull staging/dev — advance to 0.2.0rc12 Sonnet 4.6 patch 1 day ago
1 [project]
2 name = "muse"
3 version = "0.2.0rc12"
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[prose] # Markdown
55 # pip install muse[shell] # Bash, sh, zsh (via tree-sitter-bash)
56 # pip install muse[all] # every grammar above
57 #
58 # Swift is intentionally excluded from [all] — py-tree-sitter-swift must be
59 # built from source and requires Xcode CLT. Install it manually if needed:
60 # pip install py-tree-sitter-swift
61
62 web = [
63 "tree-sitter-javascript>=0.25.0",
64 "tree-sitter-typescript>=0.23.2",
65 "tree-sitter-css>=0.25.0",
66 "tree-sitter-scss>=1.0.0",
67 "tree-sitter-html>=0.23.2",
68 ]
69 go = [
70 "tree-sitter-go>=0.25.0",
71 ]
72 rust = [
73 "tree-sitter-rust>=0.24.0",
74 ]
75 jvm = [
76 "tree-sitter-java>=0.23.5",
77 "tree-sitter-kotlin>=1.1.0",
78 ]
79 systems = [
80 "tree-sitter-c>=0.24.1",
81 "tree-sitter-cpp>=0.23.4",
82 "tree-sitter-c-sharp>=0.23.1",
83 ]
84 ruby = [
85 "tree-sitter-ruby>=0.23.1",
86 ]
87 prose = [
88 "tree-sitter-markdown>=0.5.1",
89 ]
90 shell = [
91 # Covers bash, sh, and zsh (zsh is a strict superset of bash at the AST level).
92 "tree-sitter-bash>=0.23.3",
93 ]
94 all = [
95 "muse[web]",
96 "muse[go]",
97 "muse[rust]",
98 "muse[jvm]",
99 "muse[systems]",
100 "muse[ruby]",
101 "muse[prose]",
102 "muse[shell]",
103 ]
104
105 dev = [
106 "pytest>=9.0.3",
107 "pytest-asyncio>=1.3.0",
108 "pytest-cov>=7.1.0",
109 # Structured per-test JSON report consumed by muse code test's summary.
110 # Without this, muse code test --all shows 0/0/0/0 because stream mode
111 # cannot capture pytest's stdout — the JSON report is written to a file
112 # and read after the subprocess exits, independent of streaming.
113 "pytest-json-report>=1.5.0",
114 "anyio>=4.13.0",
115 "mypy>=1.20.0",
116 "hypothesis>=6.152.0",
117 "types-defusedxml>=0.7.0.20260504",
118 ]
119
120 [build-system]
121 requires = ["hatchling>=1.29.0"]
122 build-backend = "hatchling.build"
123
124 [tool.pytest.ini_options]
125 asyncio_mode = "auto"
126 testpaths = ["tests"]
127 cache_dir = "/tmp/pytest_cache"
128 addopts = "-v --tb=short -m 'not midi'"
129 markers = [
130 "slow: marks tests as slow (stress / large-repo scenarios)",
131 "perf: marks tests as performance benchmarks with timing budgets",
132 "midi: marks tests for the midi domain (disabled until midi rollout)",
133 "timeout: per-test wall-clock timeout in seconds",
134 ]
135
136 [tool.coverage.run]
137 source = ["muse"]
138 omit = [
139 # Hub/remote authentication — future feature, requires network fixtures
140 "muse/cli/config.py",
141 # MIDI binary parser — requires MIDI fixture files to test meaningfully
142 "muse/cli/midi_parser.py",
143 # Backward-compat re-export shim — trivially thin wrapper
144 "muse/cli/models.py",
145 ]
146
147 [tool.coverage.report]
148 exclude_lines = [
149 "pragma: no cover",
150 "if TYPE_CHECKING:",
151 "raise NotImplementedError",
152 ]
153
154 [tool.mypy]
155 python_version = "3.14"
156 strict = true
157 explicit_package_bases = true
158 namespace_packages = true
159 warn_unreachable = true
160 show_error_codes = true
161 # Exclude deferred files not yet ported to the strict typed surface.
162 exclude = [
163 "muse/plugins/music/services/",
164 "muse/cli/commands/emotion_diff\\.py",
165 "muse/cli/commands/groove_check\\.py",
166 ]
167
168 [[tool.mypy.overrides]]
169 module = ["tests.*"]
170 disallow_untyped_decorators = false
171 disallow_untyped_defs = false
172 disallow_incomplete_defs = false
173
174 [[tool.mypy.overrides]]
175 module = ["mido"]
176 ignore_missing_imports = true
177
178 [[tool.mypy.overrides]]
179 module = ["msgpack"]
180 ignore_missing_imports = true
181
182 [[tool.mypy.overrides]]
183 # tree-sitter and its grammar packages ship compiled C extensions. The core
184 # package (tree_sitter) provides py.typed stubs when run via `python -m mypy`
185 # from the project venv, but a globally-installed mypy cannot resolve them.
186 # Grammar packages never ship stubs. Marking all of them ignore_missing_imports
187 # keeps both invocation styles green; the venv mypy still validates our usage
188 # against the stubs when they are findable (CI).
189 module = [
190 "tree_sitter",
191 "tree_sitter_javascript",
192 "tree_sitter_typescript",
193 "tree_sitter_java",
194 "tree_sitter_go",
195 "tree_sitter_rust",
196 "tree_sitter_c",
197 "tree_sitter_cpp",
198 "tree_sitter_c_sharp",
199 "tree_sitter_ruby",
200 "tree_sitter_kotlin",
201 "tree_sitter_markdown",
202 "tree_sitter_html",
203 "tree_sitter_css",
204 "py_tree_sitter_swift",
205 ]
206 ignore_missing_imports = true
207
208 [tool.hatch.build.targets.wheel]
209 packages = ["muse"]
210
211 [tool.hatch.build.targets.sdist]
212 exclude = [
213 ".muse/",
214 ".hypothesis/",
215 ".pytest_cache/",
216 ".mypy_cache/",
217 ".ruff_cache/",
218 "tests/",
219 "tools/",
220 "docs/",
221 "completions/",
222 "out/",
223 "*.tar.gz",
224 "AGENTS.md",
225 "CLAUDE.md",
226 ".cursorrules",
227 "EXTREME_STRESS_PLAN.md",
228 ]
File History 7 commits
sha256:0008ab6695e3e064b3e236b24fd19e538fef6a588eb0d211622f4466d919c0b1 merge: pull staging/dev — advance to 0.2.0rc12 Sonnet 4.6 patch 1 day ago
sha256:1b0efeadb884cbfd793c5ca471b630f19daacff94a4f73958d8f5edc934b1357 bump version to v0.2.0rc12 Human patch 1 day ago
sha256:35855b7bbce81b93612c655e23587bdebbb5fc09856ff5cbf5cd5b195d0547d4 merge: dev → main (rc11, urllib migration, object store inv… Sonnet 4.6 patch 12 days ago
sha256:0bea7600d1eee83e87950be49933b1006fa9dc2c71e7c4ee748d324f61138156 chore: bump version to 0.2.0rc11; fix typing audit violatio… Sonnet 4.6 minor 12 days ago
sha256:c1b4002d372e55e3db9b16dd3e6214aebde414885bbe28d5acad8ee1b012a12e chore: bump to 0.2.0rc10 Sonnet 4.6 patch 13 days ago
sha256:78c1b9e061a38619d6ad6146286a57bfd8aa7e878b4cd1dc934334b3bde840ce merge: dev → main Sonnet 4.6 patch 13 days ago
sha256:36feadff042271a531e2d926e06007d6f907275d549f7c806bb635484d0c9320 chore: bump version to 0.2.0rc10 Sonnet 4.6 patch 14 days ago