gabriel / muse public
pyproject.toml toml
184 lines 5.4 KB
Raw
sha256:1c4b3e3a9a1f300774c3ee662b572a698d5fd405bf765a71e6011a2e9c3eaaaa feat: Muse — version control for the agent era Human 157 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 1 commit
sha256:1c4b3e3a9a1f300774c3ee662b572a698d5fd405bf765a71e6011a2e9c3eaaaa feat: Muse — version control for the agent era Human 157 days ago