pyproject.toml
toml
sha256:d11a87833d5fad6059b7662844bf5448a8911a17cce7a51811f71ad394f248eb
bump to v0.2.0rc13
Human
patch
6 days ago
| 1 | [project] |
| 2 | name = "muse" |
| 3 | version = "0.2.0" |
| 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.24.0", |
| 10 | # Binary wire protocol — eliminates base64 overhead for object transfers. |
| 11 | "msgpack>=1.1", |
| 12 | # Ed25519 key generation and signature operations for muse auth keygen/register. |
| 13 | # cryptography is the gold-standard Python crypto library (CFFI + OpenSSL bindings). |
| 14 | "cryptography>=44.0", |
| 15 | "mido>=1.3.3", |
| 16 | "defusedxml>=0.7.1", |
| 17 | # tree-sitter engine — always required; grammars are optional extras below. |
| 18 | # Used by GitHub Copilot, VS Code, Neovim, and Zed — the industry standard. |
| 19 | "tree-sitter>=0.25.0", |
| 20 | ] |
| 21 | |
| 22 | [project.scripts] |
| 23 | muse = "muse.cli.app:main" |
| 24 | |
| 25 | [project.optional-dependencies] |
| 26 | # ── Language bundles ───────────────────────────────────────────────────────── |
| 27 | # Install only the grammars you need. Every adapter degrades gracefully to |
| 28 | # file-level tracking when its grammar is absent — nothing breaks, you just |
| 29 | # lose symbol-level diffs for that language. |
| 30 | # |
| 31 | # pip install muse[web] # JS, TS, CSS, HTML |
| 32 | # pip install muse[go] # Go |
| 33 | # pip install muse[rust] # Rust |
| 34 | # pip install muse[jvm] # Java, Kotlin |
| 35 | # pip install muse[systems] # C, C++, C# |
| 36 | # pip install muse[ruby] # Ruby |
| 37 | # pip install muse[prose] # Markdown |
| 38 | # pip install muse[all] # every grammar above |
| 39 | # |
| 40 | # Swift is intentionally excluded from [all] — py-tree-sitter-swift must be |
| 41 | # built from source and requires Xcode CLT. Install it manually if needed: |
| 42 | # pip install py-tree-sitter-swift |
| 43 | |
| 44 | web = [ |
| 45 | "tree-sitter-javascript>=0.25.0", |
| 46 | "tree-sitter-typescript>=0.23.2", |
| 47 | "tree-sitter-css>=0.25.0", |
| 48 | "tree-sitter-html>=0.23.2", |
| 49 | ] |
| 50 | go = [ |
| 51 | "tree-sitter-go>=0.25.0", |
| 52 | ] |
| 53 | rust = [ |
| 54 | "tree-sitter-rust>=0.24.0", |
| 55 | ] |
| 56 | jvm = [ |
| 57 | "tree-sitter-java>=0.23.5", |
| 58 | "tree-sitter-kotlin>=1.1.0", |
| 59 | ] |
| 60 | systems = [ |
| 61 | "tree-sitter-c>=0.24.1", |
| 62 | "tree-sitter-cpp>=0.23.4", |
| 63 | "tree-sitter-c-sharp>=0.23.1", |
| 64 | ] |
| 65 | ruby = [ |
| 66 | "tree-sitter-ruby>=0.23.1", |
| 67 | ] |
| 68 | prose = [ |
| 69 | "tree-sitter-markdown>=0.5.1", |
| 70 | ] |
| 71 | all = [ |
| 72 | "muse[web]", |
| 73 | "muse[go]", |
| 74 | "muse[rust]", |
| 75 | "muse[jvm]", |
| 76 | "muse[systems]", |
| 77 | "muse[ruby]", |
| 78 | "muse[prose]", |
| 79 | ] |
| 80 | |
| 81 | dev = [ |
| 82 | "pytest>=9.0.2", |
| 83 | "pytest-asyncio>=1.3.0", |
| 84 | "pytest-cov>=7.0.0", |
| 85 | # Structured per-test JSON report consumed by muse code test's summary. |
| 86 | # Without this, muse code test --all shows 0/0/0/0 because stream mode |
| 87 | # cannot capture pytest's stdout — the JSON report is written to a file |
| 88 | # and read after the subprocess exits, independent of streaming. |
| 89 | "pytest-json-report>=1.5.0", |
| 90 | "anyio>=4.12.0", |
| 91 | "mypy>=1.19.1", |
| 92 | "hypothesis>=6.100.0", |
| 93 | "types-defusedxml>=0.7.0.20240218", |
| 94 | ] |
| 95 | |
| 96 | [build-system] |
| 97 | requires = ["hatchling>=1.29.0"] |
| 98 | build-backend = "hatchling.build" |
| 99 | |
| 100 | [tool.pytest.ini_options] |
| 101 | asyncio_mode = "auto" |
| 102 | testpaths = ["tests"] |
| 103 | cache_dir = "/tmp/pytest_cache" |
| 104 | addopts = "-v --tb=short -m 'not midi'" |
| 105 | markers = [ |
| 106 | "slow: marks tests as slow (stress / large-repo scenarios)", |
| 107 | "perf: marks tests as performance benchmarks with timing budgets", |
| 108 | "midi: marks tests for the midi domain (disabled until midi rollout)", |
| 109 | ] |
| 110 | |
| 111 | [tool.coverage.run] |
| 112 | source = ["muse"] |
| 113 | omit = [ |
| 114 | # Hub/remote authentication — future feature, requires network fixtures |
| 115 | "muse/cli/config.py", |
| 116 | # MIDI binary parser — requires MIDI fixture files to test meaningfully |
| 117 | "muse/cli/midi_parser.py", |
| 118 | # Backward-compat re-export shim — trivially thin wrapper |
| 119 | "muse/cli/models.py", |
| 120 | ] |
| 121 | |
| 122 | [tool.coverage.report] |
| 123 | exclude_lines = [ |
| 124 | "pragma: no cover", |
| 125 | "if TYPE_CHECKING:", |
| 126 | "raise NotImplementedError", |
| 127 | ] |
| 128 | |
| 129 | [tool.mypy] |
| 130 | python_version = "3.14" |
| 131 | strict = true |
| 132 | explicit_package_bases = true |
| 133 | namespace_packages = true |
| 134 | warn_unreachable = true |
| 135 | show_error_codes = true |
| 136 | # Exclude deferred files not yet ported to the strict typed surface. |
| 137 | exclude = [ |
| 138 | "muse/plugins/music/services/", |
| 139 | "muse/cli/commands/emotion_diff\\.py", |
| 140 | "muse/cli/commands/groove_check\\.py", |
| 141 | ] |
| 142 | |
| 143 | [[tool.mypy.overrides]] |
| 144 | module = ["tests.*"] |
| 145 | disallow_untyped_decorators = false |
| 146 | disallow_untyped_defs = false |
| 147 | disallow_incomplete_defs = false |
| 148 | |
| 149 | [[tool.mypy.overrides]] |
| 150 | module = ["mido"] |
| 151 | ignore_missing_imports = true |
| 152 | |
| 153 | [[tool.mypy.overrides]] |
| 154 | module = ["msgpack"] |
| 155 | ignore_missing_imports = true |
| 156 | |
| 157 | [[tool.mypy.overrides]] |
| 158 | # tree-sitter and its grammar packages ship compiled C extensions. The core |
| 159 | # package (tree_sitter) provides py.typed stubs when run via `python -m mypy` |
| 160 | # from the project venv, but a globally-installed mypy cannot resolve them. |
| 161 | # Grammar packages never ship stubs. Marking all of them ignore_missing_imports |
| 162 | # keeps both invocation styles green; the venv mypy still validates our usage |
| 163 | # against the stubs when they are findable (CI). |
| 164 | module = [ |
| 165 | "tree_sitter", |
| 166 | "tree_sitter_javascript", |
| 167 | "tree_sitter_typescript", |
| 168 | "tree_sitter_java", |
| 169 | "tree_sitter_go", |
| 170 | "tree_sitter_rust", |
| 171 | "tree_sitter_c", |
| 172 | "tree_sitter_cpp", |
| 173 | "tree_sitter_c_sharp", |
| 174 | "tree_sitter_ruby", |
| 175 | "tree_sitter_kotlin", |
| 176 | "tree_sitter_markdown", |
| 177 | "tree_sitter_html", |
| 178 | "tree_sitter_css", |
| 179 | "py_tree_sitter_swift", |
| 180 | ] |
| 181 | ignore_missing_imports = true |
| 182 | |
| 183 | [tool.hatch.build.targets.wheel] |
| 184 | packages = ["muse"] |
File History
9 commits
sha256:d11a87833d5fad6059b7662844bf5448a8911a17cce7a51811f71ad394f248eb
bump to v0.2.0rc13
Human
patch
6 days ago
sha256:2a703f78341332ef0beb9856d2267de6aec89b3883c31519b6900b667d026e62
chore: delete muse/prose domain — hallucinated, never existed
Sonnet 4.6
minor
⚠
7 days ago
sha256:0008ab6695e3e064b3e236b24fd19e538fef6a588eb0d211622f4466d919c0b1
merge: pull staging/dev — advance to 0.2.0rc12
Sonnet 4.6
patch
8 days ago
sha256:1b0efeadb884cbfd793c5ca471b630f19daacff94a4f73958d8f5edc934b1357
bump version to v0.2.0rc12
Human
patch
8 days ago
sha256:35855b7bbce81b93612c655e23587bdebbb5fc09856ff5cbf5cd5b195d0547d4
merge: dev → main (rc11, urllib migration, object store inv…
Sonnet 4.6
patch
19 days ago
sha256:0bea7600d1eee83e87950be49933b1006fa9dc2c71e7c4ee748d324f61138156
chore: bump version to 0.2.0rc11; fix typing audit violatio…
Sonnet 4.6
minor
⚠
19 days ago
sha256:c1b4002d372e55e3db9b16dd3e6214aebde414885bbe28d5acad8ee1b012a12e
chore: bump to 0.2.0rc10
Sonnet 4.6
patch
20 days ago
sha256:78c1b9e061a38619d6ad6146286a57bfd8aa7e878b4cd1dc934334b3bde840ce
merge: dev → main
Sonnet 4.6
patch
20 days ago
sha256:36feadff042271a531e2d926e06007d6f907275d549f7c806bb635484d0c9320
chore: bump version to 0.2.0rc10
Sonnet 4.6
patch
21 days ago