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