cgcardona / muse public
app.py python
206 lines 12.1 KB
d855b718 refactor: strip phase/v2 workflow labels from all source, tests, and docs Gabriel Cardona <cgcardona@gmail.com> 1d ago
1 """Muse CLI — entry point for the ``muse`` console script.
2
3 Core VCS commands::
4
5 init status log commit diff
6 show branch checkout merge reset
7 revert stash cherry-pick tag domains
8
9 Music-domain semantic commands (impossible in Git)::
10
11 notes list every note in a MIDI track as musical notation
12 note-log note-level commit history for a track
13 note-blame per-bar attribution — which commit wrote these notes?
14 harmony chord analysis and key detection
15 piano-roll ASCII piano roll visualization
16 note-hotspots bar-level churn leaderboard
17 velocity-profile dynamic range and velocity histogram
18 transpose transpose all notes by N semitones (agent command)
19 mix combine two MIDI tracks into one (agent command)
20
21 Code-domain semantic commands — symbol graph::
22
23 symbols list every semantic symbol in a snapshot
24 symbol-log track a single symbol through commit history
25 detect-refactor report semantic refactoring operations across commits
26 grep search the symbol graph by name / kind / language
27 blame show which commit last touched a specific symbol
28 hotspots symbol churn leaderboard — which functions change most
29 stable symbol stability leaderboard — your bedrock
30 coupling file co-change analysis — hidden dependencies
31 compare semantic comparison between any two historical snapshots
32 languages language and symbol-type breakdown
33 patch surgical semantic patch — modify exactly one symbol (all-language validation)
34 query symbol graph predicate DSL — OR, NOT, grouping, --all-commits temporal search
35 query-history temporal symbol search across a commit range
36 deps import graph + Python call-graph with --reverse
37 find-symbol cross-commit, cross-branch content_id / name search
38
39 Code-domain semantic commands — call-graph tier::
40
41 impact transitive blast-radius — what breaks if this function changes?
42 dead dead code detection — symbols with no callers and no importers
43 coverage class interface call-coverage — which methods are actually used?
44
45 Code-domain semantic commands — provenance & topology::
46
47 lineage full provenance chain of a symbol through commit history
48 api-surface public API surface and how it changed between commits
49 codemap semantic topology — cycles, centrality, boundary files
50 clones find exact and near-duplicate symbols across the snapshot
51 checkout-symbol restore a historical version of a specific symbol
52 semantic-cherry-pick cherry-pick named symbols from a historical commit
53
54 Code-domain semantic commands — index acceleration::
55
56 index manage local indexes: status, rebuild symbol_history / hash_occurrence
57
58 Multi-agent coordination commands::
59
60 reserve advisory symbol reservation — announce intent before editing
61 intent declare a specific operation before executing it
62 forecast predict merge conflicts from active reservations and intents
63 plan-merge dry-run semantic merge plan — classify conflicts without writing
64 shard partition the codebase into N low-coupling work zones
65 reconcile recommend merge ordering and integration strategy
66 """
67 from __future__ import annotations
68
69 import typer
70
71 from muse.cli.commands import (
72 api_surface,
73 attributes,
74 blame,
75 branch,
76 cherry_pick,
77 checkout,
78 checkout_symbol,
79 clones,
80 codemap,
81 commit,
82 compare,
83 coupling,
84 coverage,
85 dead,
86 deps,
87 detect_refactor,
88 diff,
89 domains,
90 find_symbol,
91 forecast,
92 grep,
93 harmony,
94 hotspots,
95 impact,
96 index_rebuild,
97 init,
98 intent,
99 languages,
100 lineage,
101 log,
102 merge,
103 mix,
104 note_blame,
105 note_hotspots,
106 note_log,
107 notes,
108 patch,
109 piano_roll,
110 plan_merge,
111 query,
112 query_history,
113 reconcile,
114 reserve,
115 reset,
116 revert,
117 semantic_cherry_pick,
118 shard,
119 show,
120 stable,
121 stash,
122 status,
123 symbol_log,
124 symbols,
125 tag,
126 breakage,
127 invariants,
128 transpose,
129 velocity_profile,
130 )
131
132 cli = typer.Typer(
133 name="muse",
134 help="Muse — domain-agnostic version control for multidimensional state.",
135 no_args_is_help=True,
136 )
137
138 # Core VCS
139 cli.add_typer(attributes.app, name="attributes", help="Display .museattributes merge-strategy rules.")
140 cli.add_typer(init.app, name="init", help="Initialise a new Muse repository.")
141 cli.add_typer(commit.app, name="commit", help="Record the current working tree as a new version.")
142 cli.add_typer(status.app, name="status", help="Show working-tree drift against HEAD.")
143 cli.add_typer(log.app, name="log", help="Display commit history.")
144 cli.add_typer(diff.app, name="diff", help="Compare working tree against HEAD, or two commits.")
145 cli.add_typer(show.app, name="show", help="Inspect a commit: metadata, diff, files.")
146 cli.add_typer(branch.app, name="branch", help="List, create, or delete branches.")
147 cli.add_typer(checkout.app, name="checkout", help="Switch branches or restore working tree from a commit.")
148 cli.add_typer(merge.app, name="merge", help="Three-way merge a branch into the current branch.")
149 cli.add_typer(reset.app, name="reset", help="Move HEAD to a prior commit.")
150 cli.add_typer(revert.app, name="revert", help="Create a new commit that undoes a prior commit.")
151 cli.add_typer(cherry_pick.app, name="cherry-pick", help="Apply a specific commit's changes on top of HEAD.")
152 cli.add_typer(stash.app, name="stash", help="Shelve and restore uncommitted changes.")
153 cli.add_typer(tag.app, name="tag", help="Attach and query semantic tags on commits.")
154 cli.add_typer(domains.app, name="domains", help="Domain plugin dashboard — list capabilities and scaffold new domains.")
155
156 # Music-domain commands
157 cli.add_typer(notes.app, name="notes", help="[music] List every note in a MIDI track as musical notation.")
158 cli.add_typer(note_log.app, name="note-log", help="[music] Note-level commit history — which notes were added or removed in each commit.")
159 cli.add_typer(note_blame.app, name="note-blame", help="[music] Per-bar attribution — which commit introduced the notes in this bar?")
160 cli.add_typer(harmony.app, name="harmony", help="[music] Chord analysis and key detection from MIDI note content.")
161 cli.add_typer(piano_roll.app, name="piano-roll", help="[music] ASCII piano roll visualization of a MIDI track.")
162 cli.add_typer(note_hotspots.app, name="note-hotspots", help="[music] Bar-level churn leaderboard — which bars change most across commits.")
163 cli.add_typer(velocity_profile.app, name="velocity-profile", help="[music] Dynamic range and velocity histogram for a MIDI track.")
164 cli.add_typer(transpose.app, name="transpose", help="[music] Transpose all notes in a MIDI track by N semitones.")
165 cli.add_typer(mix.app, name="mix", help="[music] Combine notes from two MIDI tracks into a single output track.")
166
167 # Code-domain commands
168 cli.add_typer(symbols.app, name="symbols", help="[code] List every semantic symbol (function, class, method…) in a snapshot.")
169 cli.add_typer(symbol_log.app, name="symbol-log", help="[code] Track a single symbol through the full commit history.")
170 cli.add_typer(detect_refactor.app, name="detect-refactor", help="[code] Detect semantic refactoring operations (renames, moves, extractions) across commits.")
171 cli.add_typer(grep.app, name="grep", help="[code] Search the symbol graph by name, kind, or language — not file text.")
172 cli.add_typer(blame.app, name="blame", help="[code] Show which commit last touched a specific symbol (function, class, method).")
173 cli.add_typer(hotspots.app, name="hotspots", help="[code] Symbol churn leaderboard — which functions change most often.")
174 cli.add_typer(stable.app, name="stable", help="[code] Symbol stability leaderboard — the bedrock of your codebase.")
175 cli.add_typer(coupling.app, name="coupling", help="[code] File co-change analysis — discover hidden semantic dependencies.")
176 cli.add_typer(compare.app, name="compare", help="[code] Deep semantic comparison between any two historical snapshots.")
177 cli.add_typer(languages.app, name="languages", help="[code] Language and symbol-type breakdown of a snapshot.")
178 cli.add_typer(patch.app, name="patch", help="[code] Surgical semantic patch — modify exactly one named symbol (all-language syntax validation).")
179 cli.add_typer(query.app, name="query", help="[code] Symbol graph predicate DSL — OR/NOT/grouping, --all-commits temporal search.")
180 cli.add_typer(query_history.app, name="query-history", help="[code] Temporal symbol search — first seen, last seen, change count across a commit range.")
181 cli.add_typer(deps.app, name="deps", help="[code] Import graph + Python call-graph; --reverse for callers/importers.")
182 cli.add_typer(find_symbol.app, name="find-symbol", help="[code] Cross-commit, cross-branch symbol search by hash, name, or kind.")
183 cli.add_typer(impact.app, name="impact", help="[code] Transitive blast-radius — every caller affected if this symbol changes.")
184 cli.add_typer(dead.app, name="dead", help="[code] Dead code candidates — symbols with no callers and no importers.")
185 cli.add_typer(coverage.app, name="coverage", help="[code] Class interface call-coverage — which methods are actually called?")
186 cli.add_typer(lineage.app, name="lineage", help="[code] Full provenance chain of a symbol — created, renamed, moved, copied, deleted.")
187 cli.add_typer(api_surface.app, name="api-surface", help="[code] Public API surface at a commit; --diff to show added/removed/changed symbols.")
188 cli.add_typer(codemap.app, name="codemap", help="[code] Semantic topology — module sizes, import cycles, centrality, boundary files.")
189 cli.add_typer(clones.app, name="clones", help="[code] Find exact and near-duplicate symbols (body_hash / signature_id clusters).")
190 cli.add_typer(checkout_symbol.app, name="checkout-symbol", help="[code] Restore a historical version of one symbol into the working tree.")
191 cli.add_typer(semantic_cherry_pick.app, name="semantic-cherry-pick", help="[code] Cherry-pick named symbols from a historical commit into the working tree.")
192 cli.add_typer(index_rebuild.app, name="index", help="[code] Manage local indexes: status, rebuild symbol_history / hash_occurrence.")
193 cli.add_typer(breakage.app, name="breakage", help="[code] Detect symbol-level structural breakage in the working tree vs HEAD.")
194 cli.add_typer(invariants.app, name="invariants", help="[code] Enforce architectural rules from .muse/invariants.toml.")
195
196 # Multi-agent coordination commands
197 cli.add_typer(reserve.app, name="reserve", help="[coord] Advisory symbol reservation — announce intent before editing.")
198 cli.add_typer(intent.app, name="intent", help="[coord] Declare a specific operation before executing it.")
199 cli.add_typer(forecast.app, name="forecast", help="[coord] Predict merge conflicts from active reservations and intents.")
200 cli.add_typer(plan_merge.app, name="plan-merge", help="[coord] Dry-run semantic merge plan — classify conflicts without writing.")
201 cli.add_typer(shard.app, name="shard", help="[coord] Partition the codebase into N low-coupling work zones for parallel agents.")
202 cli.add_typer(reconcile.app, name="reconcile", help="[coord] Recommend merge ordering and integration strategy from coordination state.")
203
204
205 if __name__ == "__main__":
206 cli()