pyproject.toml
toml
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