gabriel / muse public
pyproject.toml toml
184 lines 5.4 KB
Raw
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: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