gabriel / muse public
pyproject.toml toml
218 lines 6.4 KB
Raw
sha256:88ac91129873e6a496e9189515aa690eb893ae25d69c8f72af141a2be5068eb3 docs: docstring sprint contract→find-symbol — idiomatic run… Sonnet 4.6 patch 139 days ago
1 [project]
2 name = "muse"
3 version = "0.2.0rc4"
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 + secp256k1 key operations (CFFI + OpenSSL bindings, FIPS-validated).
13 "cryptography>=44.0",
14 # keccak256 for EVM/AVAX address derivation. pycryptodome is the standard
15 # Python crypto library with FIPS-grade hash primitives including Keccak.
16 "pycryptodome>=3.20",
17 # secp256k1 signing, recovery, and EVM address derivation — Ethereum Foundation.
18 # Wraps cryptography/coincurve under the hood; no hand-written EC math anywhere.
19 "eth-keys>=0.6.0",
20 "mido>=1.3.3",
21 "defusedxml>=0.7.1",
22 # tree-sitter engine — always required; grammars are optional extras below.
23 # Used by GitHub Copilot, VS Code, Neovim, and Zed — the industry standard.
24 "tree-sitter>=0.25.0",
25 # OS keychain integration — mnemonics stored in Keychain / SecretService / encrypted file.
26 # Never in plaintext TOML. Set MUSE_KEYCHAIN_BACKEND=disabled for CI/test environments.
27 "keyring>=25.0",
28 "keyrings.alt>=5.0",
29 ]
30
31 [project.scripts]
32 muse = "muse.cli.app:main"
33
34 [project.optional-dependencies]
35 # ── Language bundles ─────────────────────────────────────────────────────────
36 # Install only the grammars you need. Every adapter degrades gracefully to
37 # file-level tracking when its grammar is absent — nothing breaks, you just
38 # lose symbol-level diffs for that language.
39 #
40 # pip install muse[web] # JS, TS, CSS, HTML
41 # pip install muse[go] # Go
42 # pip install muse[rust] # Rust
43 # pip install muse[jvm] # Java, Kotlin
44 # pip install muse[systems] # C, C++, C#
45 # pip install muse[ruby] # Ruby
46 # pip install muse[prose] # Markdown
47 # pip install muse[shell] # Bash, sh, zsh (via tree-sitter-bash)
48 # pip install muse[all] # every grammar above
49 #
50 # Swift is intentionally excluded from [all] — py-tree-sitter-swift must be
51 # built from source and requires Xcode CLT. Install it manually if needed:
52 # pip install py-tree-sitter-swift
53
54 web = [
55 "tree-sitter-javascript>=0.25.0",
56 "tree-sitter-typescript>=0.23.2",
57 "tree-sitter-css>=0.25.0",
58 "tree-sitter-html>=0.23.2",
59 ]
60 go = [
61 "tree-sitter-go>=0.25.0",
62 ]
63 rust = [
64 "tree-sitter-rust>=0.24.0",
65 ]
66 jvm = [
67 "tree-sitter-java>=0.23.5",
68 "tree-sitter-kotlin>=1.1.0",
69 ]
70 systems = [
71 "tree-sitter-c>=0.24.1",
72 "tree-sitter-cpp>=0.23.4",
73 "tree-sitter-c-sharp>=0.23.1",
74 ]
75 ruby = [
76 "tree-sitter-ruby>=0.23.1",
77 ]
78 prose = [
79 "tree-sitter-markdown>=0.5.1",
80 ]
81 shell = [
82 # Covers bash, sh, and zsh (zsh is a strict superset of bash at the AST level).
83 "tree-sitter-bash>=0.23.3",
84 ]
85 all = [
86 "muse[web]",
87 "muse[go]",
88 "muse[rust]",
89 "muse[jvm]",
90 "muse[systems]",
91 "muse[ruby]",
92 "muse[prose]",
93 "muse[shell]",
94 ]
95
96 dev = [
97 "pytest>=9.0.2",
98 "pytest-asyncio>=1.3.0",
99 "pytest-cov>=7.0.0",
100 # Structured per-test JSON report consumed by muse code test's summary.
101 # Without this, muse code test --all shows 0/0/0/0 because stream mode
102 # cannot capture pytest's stdout — the JSON report is written to a file
103 # and read after the subprocess exits, independent of streaming.
104 "pytest-json-report>=1.5.0",
105 "anyio>=4.12.0",
106 "mypy>=1.19.1",
107 "hypothesis>=6.100.0",
108 "types-defusedxml>=0.7.0.20240218",
109 ]
110
111 [build-system]
112 requires = ["hatchling>=1.29.0"]
113 build-backend = "hatchling.build"
114
115 [tool.pytest.ini_options]
116 asyncio_mode = "auto"
117 testpaths = ["tests"]
118 cache_dir = "/tmp/pytest_cache"
119 addopts = "-v --tb=short -m 'not midi'"
120 markers = [
121 "slow: marks tests as slow (stress / large-repo scenarios)",
122 "perf: marks tests as performance benchmarks with timing budgets",
123 "midi: marks tests for the midi domain (disabled until midi rollout)",
124 ]
125
126 [tool.coverage.run]
127 source = ["muse"]
128 omit = [
129 # Hub/remote authentication — future feature, requires network fixtures
130 "muse/cli/config.py",
131 # MIDI binary parser — requires MIDI fixture files to test meaningfully
132 "muse/cli/midi_parser.py",
133 # Backward-compat re-export shim — trivially thin wrapper
134 "muse/cli/models.py",
135 ]
136
137 [tool.coverage.report]
138 exclude_lines = [
139 "pragma: no cover",
140 "if TYPE_CHECKING:",
141 "raise NotImplementedError",
142 ]
143
144 [tool.mypy]
145 python_version = "3.14"
146 strict = true
147 explicit_package_bases = true
148 namespace_packages = true
149 warn_unreachable = true
150 show_error_codes = true
151 # Exclude deferred files not yet ported to the strict typed surface.
152 exclude = [
153 "muse/plugins/music/services/",
154 "muse/cli/commands/emotion_diff\\.py",
155 "muse/cli/commands/groove_check\\.py",
156 ]
157
158 [[tool.mypy.overrides]]
159 module = ["tests.*"]
160 disallow_untyped_decorators = false
161 disallow_untyped_defs = false
162 disallow_incomplete_defs = false
163
164 [[tool.mypy.overrides]]
165 module = ["mido"]
166 ignore_missing_imports = true
167
168 [[tool.mypy.overrides]]
169 module = ["msgpack"]
170 ignore_missing_imports = true
171
172 [[tool.mypy.overrides]]
173 # tree-sitter and its grammar packages ship compiled C extensions. The core
174 # package (tree_sitter) provides py.typed stubs when run via `python -m mypy`
175 # from the project venv, but a globally-installed mypy cannot resolve them.
176 # Grammar packages never ship stubs. Marking all of them ignore_missing_imports
177 # keeps both invocation styles green; the venv mypy still validates our usage
178 # against the stubs when they are findable (CI).
179 module = [
180 "tree_sitter",
181 "tree_sitter_javascript",
182 "tree_sitter_typescript",
183 "tree_sitter_java",
184 "tree_sitter_go",
185 "tree_sitter_rust",
186 "tree_sitter_c",
187 "tree_sitter_cpp",
188 "tree_sitter_c_sharp",
189 "tree_sitter_ruby",
190 "tree_sitter_kotlin",
191 "tree_sitter_markdown",
192 "tree_sitter_html",
193 "tree_sitter_css",
194 "py_tree_sitter_swift",
195 ]
196 ignore_missing_imports = true
197
198 [tool.hatch.build.targets.wheel]
199 packages = ["muse"]
200
201 [tool.hatch.build.targets.sdist]
202 exclude = [
203 ".muse/",
204 ".hypothesis/",
205 ".pytest_cache/",
206 ".mypy_cache/",
207 ".ruff_cache/",
208 "tests/",
209 "tools/",
210 "docs/",
211 "completions/",
212 "out/",
213 "*.tar.gz",
214 "AGENTS.md",
215 "CLAUDE.md",
216 ".cursorrules",
217 "EXTREME_STRESS_PLAN.md",
218 ]
File History 2 commits
sha256:88ac91129873e6a496e9189515aa690eb893ae25d69c8f72af141a2be5068eb3 docs: docstring sprint contract→find-symbol — idiomatic run… Sonnet 4.6 patch 139 days ago
sha256:a09b1b4f6838754495547f200aa0ce88e2f56ffc5b20b900f6f0cff2c3cdede9 fix(cursorignore): remove git-ism (.git/worktrees) Human minor 141 days ago