claude-mpm 4.7.3__py3-none-any.whl → 4.7.5__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- claude_mpm/VERSION +1 -1
- claude_mpm/agents/PM_INSTRUCTIONS.md +0 -1
- claude_mpm/agents/templates/project_organizer.json +3 -3
- claude_mpm/cli/commands/mpm_init.py +494 -88
- claude_mpm/cli/commands/mpm_init_handler.py +4 -0
- claude_mpm/cli/parsers/mpm_init_parser.py +37 -7
- claude_mpm/commands/mpm-help.md +4 -1
- claude_mpm/commands/mpm-init.md +47 -3
- claude_mpm/commands/mpm-monitor.md +409 -0
- claude_mpm/commands/mpm-organize.md +23 -10
- claude_mpm/dashboard/static/built/shared/page-structure.js +0 -2
- claude_mpm/dashboard/static/index.html +529 -607
- claude_mpm/dashboard/static/production/main.html +0 -17
- claude_mpm/dashboard/templates/index.html +0 -17
- claude_mpm/services/project/enhanced_analyzer.py +31 -4
- claude_mpm/utils/display_helper.py +260 -0
- {claude_mpm-4.7.3.dist-info → claude_mpm-4.7.5.dist-info}/METADATA +1 -1
- {claude_mpm-4.7.3.dist-info → claude_mpm-4.7.5.dist-info}/RECORD +22 -21
- claude_mpm/dashboard/static/monitors-index.html +0 -218
- {claude_mpm-4.7.3.dist-info → claude_mpm-4.7.5.dist-info}/WHEEL +0 -0
- {claude_mpm-4.7.3.dist-info → claude_mpm-4.7.5.dist-info}/entry_points.txt +0 -0
- {claude_mpm-4.7.3.dist-info → claude_mpm-4.7.5.dist-info}/licenses/LICENSE +0 -0
- {claude_mpm-4.7.3.dist-info → claude_mpm-4.7.5.dist-info}/top_level.txt +0 -0
@@ -204,23 +204,6 @@
|
|
204
204
|
<div class="header-row">
|
205
205
|
<div class="header-title">
|
206
206
|
<h1>🚀 Claude MPM Monitor</h1>
|
207
|
-
<a href="/static/monitors-index.html" style="
|
208
|
-
display: inline-block;
|
209
|
-
margin-left: 20px;
|
210
|
-
padding: 8px 16px;
|
211
|
-
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
212
|
-
color: white;
|
213
|
-
text-decoration: none;
|
214
|
-
border-radius: 8px;
|
215
|
-
font-size: 14px;
|
216
|
-
font-weight: 500;
|
217
|
-
transition: transform 0.2s, box-shadow 0.2s;
|
218
|
-
vertical-align: middle;
|
219
|
-
"
|
220
|
-
onmouseover="this.style.transform='translateY(-2px)'; this.style.boxShadow='0 5px 15px rgba(102, 126, 234, 0.4)';"
|
221
|
-
onmouseout="this.style.transform=''; this.style.boxShadow='';">
|
222
|
-
Try New Dashboard →
|
223
|
-
</a>
|
224
207
|
<div id="connection-status" class="status-badge status-disconnected">
|
225
208
|
<span>●</span> Disconnected
|
226
209
|
</div>
|
@@ -150,23 +150,6 @@
|
|
150
150
|
<div class="header-row">
|
151
151
|
<div class="header-title">
|
152
152
|
<h1>🚀 Claude MPM Monitor</h1>
|
153
|
-
<a href="/static/monitors-index.html" style="
|
154
|
-
display: inline-block;
|
155
|
-
margin-left: 20px;
|
156
|
-
padding: 8px 16px;
|
157
|
-
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
158
|
-
color: white;
|
159
|
-
text-decoration: none;
|
160
|
-
border-radius: 8px;
|
161
|
-
font-size: 14px;
|
162
|
-
font-weight: 500;
|
163
|
-
transition: transform 0.2s, box-shadow 0.2s;
|
164
|
-
vertical-align: middle;
|
165
|
-
"
|
166
|
-
onmouseover="this.style.transform='translateY(-2px)'; this.style.boxShadow='0 5px 15px rgba(102, 126, 234, 0.4)';"
|
167
|
-
onmouseout="this.style.transform=''; this.style.boxShadow='';">
|
168
|
-
Try New Dashboard →
|
169
|
-
</a>
|
170
153
|
<div id="connection-status" class="status-badge status-disconnected">
|
171
154
|
<span>●</span> Disconnected
|
172
155
|
</div>
|
@@ -16,6 +16,7 @@ Author: Claude MPM Development Team
|
|
16
16
|
Created: 2025-01-26
|
17
17
|
"""
|
18
18
|
|
19
|
+
import os
|
19
20
|
import subprocess
|
20
21
|
from datetime import datetime, timedelta, timezone
|
21
22
|
from pathlib import Path
|
@@ -32,10 +33,36 @@ console = Console()
|
|
32
33
|
class EnhancedProjectAnalyzer:
|
33
34
|
"""Enhanced project analyzer with git history support."""
|
34
35
|
|
35
|
-
def __init__(self, project_path: Path):
|
36
|
-
"""
|
37
|
-
|
38
|
-
|
36
|
+
def __init__(self, project_path: Optional[Path] = None):
|
37
|
+
"""
|
38
|
+
Initialize the enhanced analyzer.
|
39
|
+
|
40
|
+
Args:
|
41
|
+
project_path: Path to the project. If None, uses CLAUDE_MPM_USER_PWD
|
42
|
+
environment variable or current working directory.
|
43
|
+
"""
|
44
|
+
# Determine project path with proper priority
|
45
|
+
if project_path is None:
|
46
|
+
# Try environment variable first (user's project, not framework)
|
47
|
+
env_path = os.getenv("CLAUDE_MPM_USER_PWD")
|
48
|
+
if env_path:
|
49
|
+
self.project_path = Path(env_path)
|
50
|
+
else:
|
51
|
+
self.project_path = Path.cwd()
|
52
|
+
else:
|
53
|
+
self.project_path = project_path
|
54
|
+
|
55
|
+
# Ensure path is absolute
|
56
|
+
if not self.project_path.is_absolute():
|
57
|
+
self.project_path = self.project_path.resolve()
|
58
|
+
|
59
|
+
# Check if it's a git repository
|
60
|
+
git_dir = self.project_path / ".git"
|
61
|
+
self.is_git_repo = git_dir.exists() and git_dir.is_dir()
|
62
|
+
|
63
|
+
# Log warning if not a git repository
|
64
|
+
if not self.is_git_repo:
|
65
|
+
logger.debug(f"Directory is not a git repository: {self.project_path}")
|
39
66
|
|
40
67
|
def analyze_git_history(self, days_back: int = 30) -> Dict:
|
41
68
|
"""Analyze git history for recent changes and patterns."""
|
@@ -0,0 +1,260 @@
|
|
1
|
+
"""
|
2
|
+
Display Helper for Rich Console Output.
|
3
|
+
|
4
|
+
WHY: Centralizes display formatting logic to reduce code duplication
|
5
|
+
across CLI commands. Provides reusable components for tables, panels,
|
6
|
+
reports, and structured output.
|
7
|
+
"""
|
8
|
+
|
9
|
+
from typing import Any, Dict, List, Tuple
|
10
|
+
|
11
|
+
from rich.console import Console
|
12
|
+
from rich.panel import Panel
|
13
|
+
from rich.table import Table
|
14
|
+
|
15
|
+
|
16
|
+
class DisplayHelper:
|
17
|
+
"""Centralized display formatting for Rich console output."""
|
18
|
+
|
19
|
+
def __init__(self, console: Console):
|
20
|
+
"""Initialize display helper with console instance."""
|
21
|
+
self.console = console
|
22
|
+
|
23
|
+
def display_separator(self, char: str = "=", width: int = 60) -> None:
|
24
|
+
"""Display a separator line."""
|
25
|
+
self.console.print(char * width)
|
26
|
+
|
27
|
+
def display_header(self, title: str, width: int = 60) -> None:
|
28
|
+
"""Display a formatted header with separators."""
|
29
|
+
self.display_separator(width=width)
|
30
|
+
self.console.print(f"[bold]{title}[/bold]")
|
31
|
+
self.display_separator(width=width)
|
32
|
+
self.console.print()
|
33
|
+
|
34
|
+
def display_section_title(self, title: str, emoji: str = "") -> None:
|
35
|
+
"""Display a section title with optional emoji."""
|
36
|
+
if emoji:
|
37
|
+
self.console.print(f"[bold cyan]{emoji} {title}[/bold cyan]")
|
38
|
+
else:
|
39
|
+
self.console.print(f"[bold cyan]{title}[/bold cyan]")
|
40
|
+
|
41
|
+
def display_key_value_table(
|
42
|
+
self,
|
43
|
+
title: str,
|
44
|
+
data: Dict[str, Any],
|
45
|
+
key_style: str = "cyan",
|
46
|
+
value_style: str = "white",
|
47
|
+
) -> None:
|
48
|
+
"""Display a two-column key-value table."""
|
49
|
+
table = Table(title=title, show_header=True)
|
50
|
+
table.add_column("Property", style=key_style)
|
51
|
+
table.add_column("Value", style=value_style)
|
52
|
+
|
53
|
+
for key, value in data.items():
|
54
|
+
# Handle various value types
|
55
|
+
if isinstance(value, bool):
|
56
|
+
display_value = "✓" if value else "✗"
|
57
|
+
elif isinstance(value, int) and key.lower().find("size") >= 0:
|
58
|
+
display_value = f"{value:,} characters"
|
59
|
+
else:
|
60
|
+
display_value = str(value)
|
61
|
+
table.add_row(key, display_value)
|
62
|
+
|
63
|
+
self.console.print(table)
|
64
|
+
|
65
|
+
def display_list_section(
|
66
|
+
self, title: str, items: List[str], max_items: int = 10, color: str = "white"
|
67
|
+
) -> None:
|
68
|
+
"""Display a titled list of items."""
|
69
|
+
self.console.print(f"\n[bold cyan]{title}[/bold cyan]")
|
70
|
+
for item in items[:max_items]:
|
71
|
+
self.console.print(f" [{color}]{item}[/{color}]")
|
72
|
+
|
73
|
+
def display_warning_list(self, title: str, items: List[str]) -> None:
|
74
|
+
"""Display a list of warning items."""
|
75
|
+
self.console.print(f"\n[yellow]{title}[/yellow]")
|
76
|
+
for item in items:
|
77
|
+
self.console.print(f" • {item}")
|
78
|
+
|
79
|
+
def display_info_list(self, title: str, items: List[str]) -> None:
|
80
|
+
"""Display a list of info items."""
|
81
|
+
self.console.print(f"\n[blue]{title}[/blue]")
|
82
|
+
for item in items[:5]:
|
83
|
+
self.console.print(f" • {item}")
|
84
|
+
|
85
|
+
def display_metric_row(
|
86
|
+
self, label: str, value: Any, indent: int = 2, warning: bool = False
|
87
|
+
) -> None:
|
88
|
+
"""Display a single metric row with label and value."""
|
89
|
+
indent_str = " " * indent
|
90
|
+
if warning:
|
91
|
+
self.console.print(f"{indent_str}[yellow]{label}: {value}[/yellow]")
|
92
|
+
else:
|
93
|
+
self.console.print(f"{indent_str}{label}: {value}")
|
94
|
+
|
95
|
+
def display_metrics_section(
|
96
|
+
self, title: str, metrics: Dict[str, Any], emoji: str = ""
|
97
|
+
) -> None:
|
98
|
+
"""Display a section with multiple metrics."""
|
99
|
+
self.display_section_title(title, emoji)
|
100
|
+
for label, value in metrics.items():
|
101
|
+
self.display_metric_row(label, value)
|
102
|
+
|
103
|
+
def display_report_section(
|
104
|
+
self,
|
105
|
+
title: str,
|
106
|
+
data: Dict[str, Any],
|
107
|
+
emoji: str = "",
|
108
|
+
show_warnings: bool = True,
|
109
|
+
) -> None:
|
110
|
+
"""Display a generic report section with data and optional warnings."""
|
111
|
+
self.display_section_title(title, emoji)
|
112
|
+
|
113
|
+
for key, value in data.items():
|
114
|
+
if isinstance(value, dict):
|
115
|
+
# Handle nested dictionaries
|
116
|
+
self.console.print(f" {key}:")
|
117
|
+
for sub_key, sub_value in value.items():
|
118
|
+
self.console.print(f" {sub_key}: {sub_value}")
|
119
|
+
elif isinstance(value, list):
|
120
|
+
# Handle lists
|
121
|
+
self.console.print(f" {key}:")
|
122
|
+
for item in value[:5]: # Limit to first 5 items
|
123
|
+
if isinstance(item, dict):
|
124
|
+
# Handle dict items in list
|
125
|
+
desc = item.get("description") or str(item)
|
126
|
+
prefix = "⚠️ " if show_warnings else "•"
|
127
|
+
self.console.print(f" {prefix} {desc}")
|
128
|
+
else:
|
129
|
+
self.console.print(f" • {item}")
|
130
|
+
else:
|
131
|
+
# Simple key-value
|
132
|
+
self.console.print(f" {key}: {value}")
|
133
|
+
|
134
|
+
def display_recommendations(self, recommendations: List[str]) -> None:
|
135
|
+
"""Display a recommendations section."""
|
136
|
+
if recommendations:
|
137
|
+
self.display_section_title("💡 Recommendations")
|
138
|
+
for rec in recommendations[:5]:
|
139
|
+
self.console.print(f" → {rec}")
|
140
|
+
|
141
|
+
def display_documentation_status(
|
142
|
+
self, analysis: Dict, title: str = "Current CLAUDE.md Status"
|
143
|
+
) -> None:
|
144
|
+
"""Display documentation status table."""
|
145
|
+
data = {
|
146
|
+
"Size": analysis.get("size", 0),
|
147
|
+
"Lines": analysis.get("lines", 0),
|
148
|
+
"Sections": len(analysis.get("sections", [])),
|
149
|
+
"Has Priority Index": analysis.get("has_priority_index", False),
|
150
|
+
"Has Priority Markers": analysis.get("has_priority_markers", False),
|
151
|
+
}
|
152
|
+
|
153
|
+
if analysis.get("last_modified"):
|
154
|
+
data["Last Modified"] = analysis["last_modified"]
|
155
|
+
|
156
|
+
self.display_key_value_table(title, data)
|
157
|
+
|
158
|
+
# Display warnings if present
|
159
|
+
if analysis.get("outdated_patterns"):
|
160
|
+
self.display_warning_list(
|
161
|
+
"⚠️ Outdated patterns detected:", analysis["outdated_patterns"]
|
162
|
+
)
|
163
|
+
|
164
|
+
# Display custom sections if present
|
165
|
+
if analysis.get("custom_sections"):
|
166
|
+
self.display_info_list(
|
167
|
+
"[INFO]️ Custom sections found:", analysis["custom_sections"]
|
168
|
+
)
|
169
|
+
|
170
|
+
def display_activity_summary(
|
171
|
+
self, summary: Dict, period: str = "Last 30 days"
|
172
|
+
) -> None:
|
173
|
+
"""Display activity summary metrics."""
|
174
|
+
metrics = {
|
175
|
+
"Total commits": summary.get("total_commits", 0),
|
176
|
+
"Active contributors": summary.get("total_authors", 0),
|
177
|
+
"Files modified": summary.get("files_changed", 0),
|
178
|
+
"Current branch": summary.get("current_branch", "unknown"),
|
179
|
+
}
|
180
|
+
|
181
|
+
self.display_metrics_section(
|
182
|
+
f"📊 Activity Overview ({period.lower()})", metrics
|
183
|
+
)
|
184
|
+
|
185
|
+
if summary.get("has_uncommitted"):
|
186
|
+
self.display_metric_row(
|
187
|
+
"⚠️ Uncommitted changes",
|
188
|
+
f"{summary.get('uncommitted_count', 0)} files",
|
189
|
+
warning=True,
|
190
|
+
)
|
191
|
+
|
192
|
+
def display_commit_list(
|
193
|
+
self, commits: List[Dict], title: str = "📝 Recent Commits (last 10)"
|
194
|
+
) -> None:
|
195
|
+
"""Display a list of commits."""
|
196
|
+
if commits:
|
197
|
+
self.display_section_title(title)
|
198
|
+
for commit in commits[:10]:
|
199
|
+
msg = commit.get("message", "")[:60]
|
200
|
+
hash_val = commit.get("hash", "")
|
201
|
+
author = commit.get("author", "")
|
202
|
+
self.console.print(f" [{hash_val}] {msg} - {author}")
|
203
|
+
|
204
|
+
def display_file_change_list(
|
205
|
+
self, files: List[Tuple[str, int]], title: str = "🔥 Most Changed Files"
|
206
|
+
) -> None:
|
207
|
+
"""Display a list of changed files with change counts."""
|
208
|
+
if files:
|
209
|
+
self.display_section_title(title)
|
210
|
+
for file_path, changes in files[:10]:
|
211
|
+
self.console.print(f" {file_path}: {changes} changes")
|
212
|
+
|
213
|
+
def display_branch_list(
|
214
|
+
self,
|
215
|
+
branches: List[str],
|
216
|
+
current_branch: str,
|
217
|
+
title: str = "🌿 Active Branches",
|
218
|
+
) -> None:
|
219
|
+
"""Display a list of branches with current branch marked."""
|
220
|
+
if branches:
|
221
|
+
self.display_section_title(title)
|
222
|
+
for branch in branches:
|
223
|
+
marker = "→" if branch == current_branch else " "
|
224
|
+
self.console.print(f" {marker} {branch}")
|
225
|
+
|
226
|
+
def display_success_panel(
|
227
|
+
self,
|
228
|
+
title: str,
|
229
|
+
content: str,
|
230
|
+
border_style: str = "green",
|
231
|
+
) -> None:
|
232
|
+
"""Display a success panel with content."""
|
233
|
+
self.console.print(Panel(content, title=title, border_style=border_style))
|
234
|
+
|
235
|
+
def display_info_panel(
|
236
|
+
self,
|
237
|
+
title: str,
|
238
|
+
content: str,
|
239
|
+
border_style: str = "cyan",
|
240
|
+
) -> None:
|
241
|
+
"""Display an info panel with content."""
|
242
|
+
self.console.print(Panel(content, title=title, border_style=border_style))
|
243
|
+
|
244
|
+
def display_files_list(
|
245
|
+
self, title: str, files: List[str], prefix: str = "•"
|
246
|
+
) -> None:
|
247
|
+
"""Display a list of files."""
|
248
|
+
if files:
|
249
|
+
self.console.print(f"[bold]{title}[/bold]")
|
250
|
+
for file in files:
|
251
|
+
self.console.print(f" {prefix} {file}")
|
252
|
+
self.console.print()
|
253
|
+
|
254
|
+
def display_next_steps(self, steps: List[str]) -> None:
|
255
|
+
"""Display next steps list."""
|
256
|
+
if steps:
|
257
|
+
self.console.print("[bold]Next Steps:[/bold]")
|
258
|
+
for step in steps:
|
259
|
+
self.console.print(f" → {step}")
|
260
|
+
self.console.print()
|
@@ -1,5 +1,5 @@
|
|
1
1
|
claude_mpm/BUILD_NUMBER,sha256=9JfxhnDtr-8l3kCP2U5TVXSErptHoga8m7XA8zqgGOc,4
|
2
|
-
claude_mpm/VERSION,sha256=
|
2
|
+
claude_mpm/VERSION,sha256=S1_5LwX4BqRmj3UoBp6ODrFMvkFt5xvcn9wfpuFze9Y,6
|
3
3
|
claude_mpm/__init__.py,sha256=UCw6j9e_tZQ3kJtTqmdfNv7MHyw9nD1jkj80WurwM2g,2064
|
4
4
|
claude_mpm/__main__.py,sha256=Ro5UBWBoQaSAIoSqWAr7zkbLyvi4sSy28WShqAhKJG0,723
|
5
5
|
claude_mpm/constants.py,sha256=cChN3myrAcF3jC-6DvHnBFTEnwlDk-TAsIXPvUZr_yw,5953
|
@@ -16,7 +16,7 @@ claude_mpm/agents/BASE_RESEARCH.md,sha256=2DZhDd5XxWWtsyNTBIwvtNWBu1JpFy5R5SAZDH
|
|
16
16
|
claude_mpm/agents/INSTRUCTIONS_OLD_DEPRECATED.md,sha256=zQZhrhVq9NLCtSjVX-aC0xcgueemSuPhKyv0SjEOyIQ,25852
|
17
17
|
claude_mpm/agents/MEMORY.md,sha256=KbRwY_RYdOvTvFC2DD-ATfwjHkQWJ5PIjlGws_7RmjI,3307
|
18
18
|
claude_mpm/agents/OUTPUT_STYLE.md,sha256=IYbo4jmICihrfnChbdrRpwVk4VobCcNyYqZqd53VXMk,533
|
19
|
-
claude_mpm/agents/PM_INSTRUCTIONS.md,sha256
|
19
|
+
claude_mpm/agents/PM_INSTRUCTIONS.md,sha256=-FWemY4obkXpmuJ9oUPdqenKhAEjnRV-oIyusVGYnOY,41026
|
20
20
|
claude_mpm/agents/WORKFLOW.md,sha256=vJ9iXCVqAaeM_yVlXxbcP3bsL210-1BI3ZAanvWv4hI,9085
|
21
21
|
claude_mpm/agents/__init__.py,sha256=jRFxvV_DIZ-NdENa-703Xu3YpwvlQj6yv-mQ6FgmldM,3220
|
22
22
|
claude_mpm/agents/agent-template.yaml,sha256=mRlz5Yd0SmknTeoJWgFkZXzEF5T7OmGBJGs2-KPT93k,1969
|
@@ -45,7 +45,7 @@ claude_mpm/agents/templates/memory_manager.json,sha256=h1DCAn5Wd8TbTzCGjqZ9I8LgG
|
|
45
45
|
claude_mpm/agents/templates/nextjs_engineer.json,sha256=9m0cT-AKEhMYV0AocRNESrEMg36FIR03RYA1cZOeFTA,19256
|
46
46
|
claude_mpm/agents/templates/ops.json,sha256=z6qQyMOxuMMqL8kL8lsh0BsRa0kLgAozVsz-K6sOmkA,10912
|
47
47
|
claude_mpm/agents/templates/php-engineer.json,sha256=K3VovBySAnUz1yFTU0HHa6ojoPx2ggwAgwNmNdskB7A,20386
|
48
|
-
claude_mpm/agents/templates/project_organizer.json,sha256
|
48
|
+
claude_mpm/agents/templates/project_organizer.json,sha256=-u0JqiEjx9igxFbfHWwW8RLvhtPZld6FS2j6Hys9mA8,7314
|
49
49
|
claude_mpm/agents/templates/prompt-engineer.json,sha256=WWBGnJxQPbixNUyDXDxuhaKfZ9KdB8bYwk2tT8HZ4UM,37300
|
50
50
|
claude_mpm/agents/templates/python_engineer.json,sha256=5I3C2JDd6arZ49k70o35JOQIFflgdUyxK1kWMYZiuEs,17880
|
51
51
|
claude_mpm/agents/templates/qa.json,sha256=B_pWrC78G3lOfxmKweOzbdG9fYOG42w6gSJTCkabDQs,10414
|
@@ -96,8 +96,8 @@ claude_mpm/cli/commands/mcp_setup_external.py,sha256=hfBHkaioNa0JRDhahNEc8agyrUw
|
|
96
96
|
claude_mpm/cli/commands/mcp_tool_commands.py,sha256=q17GzlFT3JiLTrDqwPO2tz1-fKmPO5QU449syTnKTz4,1283
|
97
97
|
claude_mpm/cli/commands/memory.py,sha256=O4T5HGL-Ob_QPt2dZHQvoOrVohnaDKrBjyngq1Mcv1w,26185
|
98
98
|
claude_mpm/cli/commands/monitor.py,sha256=Fjb68hf3dEwTFek2LV8Nh6iU0qEkY7qYlOn32IwNaNg,9566
|
99
|
-
claude_mpm/cli/commands/mpm_init.py,sha256=
|
100
|
-
claude_mpm/cli/commands/mpm_init_handler.py,sha256=
|
99
|
+
claude_mpm/cli/commands/mpm_init.py,sha256=H7op69CaE7VPOViTuEiCTeANe708ZAcJpkpgbfG2baM,60311
|
100
|
+
claude_mpm/cli/commands/mpm_init_handler.py,sha256=b1CSwZYJ89wMorKzPOKS-RVxOKR2kT9yv9KQLvKkd2U,3532
|
101
101
|
claude_mpm/cli/commands/run.py,sha256=PB2H55piOPTy4yo4OBgbUCjMlcz9K79wbwpxQVc9m5Q,48225
|
102
102
|
claude_mpm/cli/commands/search.py,sha256=_0qbUnop8v758MHsB0fAop8FVxwygD59tec_-iN7pLE,9806
|
103
103
|
claude_mpm/cli/commands/tickets.py,sha256=kl2dklTBnG3Y4jUUJ_PcEVsTx4CtVJfkGWboWBx_mQM,21234
|
@@ -118,7 +118,7 @@ claude_mpm/cli/parsers/debug_parser.py,sha256=F7MZdmiXiPfiIPMv21ZUqB2cMT8Ho1LDmp
|
|
118
118
|
claude_mpm/cli/parsers/mcp_parser.py,sha256=2j6ULhdu55Z2k_-Gu2QxIsFoTQFbDCEMSGePXSuPoQQ,6532
|
119
119
|
claude_mpm/cli/parsers/memory_parser.py,sha256=ZwCDxJEgp-w03L-1tZsWTgisiwamP42s424bA5bvDJc,4760
|
120
120
|
claude_mpm/cli/parsers/monitor_parser.py,sha256=PeoznSi_5Bw6THK_Espl8M20o6dKvvBSmFzAbovkaFQ,4920
|
121
|
-
claude_mpm/cli/parsers/mpm_init_parser.py,sha256=
|
121
|
+
claude_mpm/cli/parsers/mpm_init_parser.py,sha256=jMV67caBeC-LV-oOuAGJXvFbiBJQ4nGcl6ggfX0_7jI,7662
|
122
122
|
claude_mpm/cli/parsers/run_parser.py,sha256=cs34qNonFZG8uYxTYEt0rXi2LcPz3pw8D8hxiywih6w,4927
|
123
123
|
claude_mpm/cli/parsers/search_parser.py,sha256=L8-65kndg-zutSKpzj-eCvTNkeySCZ-WlSHdhk7pEak,6916
|
124
124
|
claude_mpm/cli/parsers/tickets_parser.py,sha256=FYl-VNH7PrZzfZUCcjnf6F7g6JXnL8YDxwrmR5svIcg,6966
|
@@ -135,9 +135,10 @@ claude_mpm/commands/__init__.py,sha256=paX5Ub5-UmRgiQ8UgKWIKwU2-RjLu67OmNJND-fVt
|
|
135
135
|
claude_mpm/commands/mpm-agents.md,sha256=JnYPJ-eWvIEEtiCB6iPu182P2xDBRvU3ArVXQ7h32kU,1341
|
136
136
|
claude_mpm/commands/mpm-config.md,sha256=79Eb-srRpEVV3HCHDHZc8SKec6_LVP6HbXDEVkZKLgw,2929
|
137
137
|
claude_mpm/commands/mpm-doctor.md,sha256=ut5LhFKVRw-2ecjMSPsnaTiRuFXa6Q9t-Wgl3CCnQvk,590
|
138
|
-
claude_mpm/commands/mpm-help.md,sha256=
|
139
|
-
claude_mpm/commands/mpm-init.md,sha256=
|
140
|
-
claude_mpm/commands/mpm-
|
138
|
+
claude_mpm/commands/mpm-help.md,sha256=zfhpE0Fd-wW5zWmYYAMRMT-xYK8saqbw-HXRD7csJHI,2850
|
139
|
+
claude_mpm/commands/mpm-init.md,sha256=hVVr71X0w67O08B_x9wP2FRijtkLUVIHWDi-0FSBRPA,10291
|
140
|
+
claude_mpm/commands/mpm-monitor.md,sha256=onTHf9Yac1KkdZdENtY2Q5jyw0A-vZLYgoKkPCtZLUY,12193
|
141
|
+
claude_mpm/commands/mpm-organize.md,sha256=T-ysjhwgfW9irjUj02vuY_1jeMdabO_zxcShyjmqsiM,10153
|
141
142
|
claude_mpm/commands/mpm-status.md,sha256=oaM4ybL4ffp55nkT9F0mp_5H4tF-wX9mbqK-LEKEqUU,1919
|
142
143
|
claude_mpm/commands/mpm-tickets.md,sha256=a2_mW56QDhw7-jMU92ycGaxvSSYpNoQFGhkWbr3MJ88,2356
|
143
144
|
claude_mpm/commands/mpm.md,sha256=tv_Mr6p2olRKIltKui4ljfCNG69VokkyIg951CeMBas,559
|
@@ -221,8 +222,7 @@ claude_mpm/dashboard/react/components/EventViewer/EventViewer.module.css,sha256=
|
|
221
222
|
claude_mpm/dashboard/react/components/shared/ConnectionStatus.module.css,sha256=v6uB3hr2dU7aGodvQVxu1y-bM-pN-jeOD_-iwGG7mIc,603
|
222
223
|
claude_mpm/dashboard/react/components/shared/FilterBar.module.css,sha256=Ea-dpAlKoY7WobxLESQsNvLUVjFhJlQvLygCY8-47Vk,1690
|
223
224
|
claude_mpm/dashboard/static/events.html,sha256=iKBH2gqxhU6JTmSglAVyNJkWA9c11L4Dxn40otAfnAU,17952
|
224
|
-
claude_mpm/dashboard/static/index.html,sha256=
|
225
|
-
claude_mpm/dashboard/static/monitors-index.html,sha256=T_mVVqXm5STLaFZWH7rFJaiYeG57WKnlNdVYII9nrY0,7232
|
225
|
+
claude_mpm/dashboard/static/index.html,sha256=F971Wwl0opHFb-SKD3fi0tvZmrzMPLh7MkJsJzR9tAc,31192
|
226
226
|
claude_mpm/dashboard/static/monitors.html,sha256=waNCJiIGWBvve7nbzvihnVDjaP49FPfFSNqOpkwiIaM,14229
|
227
227
|
claude_mpm/dashboard/static/socket.io.min.js,sha256=c-uha8iV_fpFTifsuA3vMe3o2GH5nhdf-TsRDqvsBE8,49993
|
228
228
|
claude_mpm/dashboard/static/socket.io.v4.8.1.backup.js,sha256=sOc1gU-Nz-zWzbinzpWil6fh5fJyeinm9ZAYAdUvoMU,46831
|
@@ -283,7 +283,7 @@ claude_mpm/dashboard/static/built/shared/dom-helpers.js,sha256=PXY8iLBJqsWP_NNyF
|
|
283
283
|
claude_mpm/dashboard/static/built/shared/event-bus.js,sha256=aV2QMt8Ris1BFxuFUYoOvMYXb3M4AmPHsppaBDbbxXo,9906
|
284
284
|
claude_mpm/dashboard/static/built/shared/event-filter-service.js,sha256=DY1rRjGxFcUyAXSPj7hUrQVJ7UpgcGkc6NRZNpFwlq4,16149
|
285
285
|
claude_mpm/dashboard/static/built/shared/logger.js,sha256=nQE-6b8pAAhWsafgon6UT-ueyOmhukrNFaGkcT77RS0,10431
|
286
|
-
claude_mpm/dashboard/static/built/shared/page-structure.js,sha256=
|
286
|
+
claude_mpm/dashboard/static/built/shared/page-structure.js,sha256=yRGt_ZWMbDHM2sy_mTW5AhrfH1bPn1GngjALzdakK3g,8515
|
287
287
|
claude_mpm/dashboard/static/built/shared/tooltip-service.js,sha256=T0_0koY2SNHTlctzU4Z5VBH0EWRXmO-ODo9WvO2HUto,7588
|
288
288
|
claude_mpm/dashboard/static/css/activity.css,sha256=0SJUwGB6fr4OlVqMwhvVKrPndg2R3QTZPnN6DkAo4aU,37987
|
289
289
|
claude_mpm/dashboard/static/css/code-tree.css,sha256=Sx74ilt7exGOdxCBEtjP9gZ74lB5e8QWr3_SIcl_0hw,30708
|
@@ -355,7 +355,7 @@ claude_mpm/dashboard/static/legacy/agents.html,sha256=9o1BfJSwSett1adw4ljJ704Pd8
|
|
355
355
|
claude_mpm/dashboard/static/legacy/files.html,sha256=9lopC78Ah5Ott47N-fU_HRMWdSbWIVto3xvQnLNqxfs,24916
|
356
356
|
claude_mpm/dashboard/static/legacy/tools.html,sha256=6YuAJ3Ggmtp4ysKDxhSbqk1D4ayIHc5o-GgF1o0YFP8,28401
|
357
357
|
claude_mpm/dashboard/static/production/events.html,sha256=lEcviOUjOhgaY0znGpjdKJjNyVrriWEJ3GNO-GANpn8,19457
|
358
|
-
claude_mpm/dashboard/static/production/main.html,sha256=
|
358
|
+
claude_mpm/dashboard/static/production/main.html,sha256=p2nS9r8nky3ngh-zutqQxsktJEbF2NnlIrI7UKU8bUc,33367
|
359
359
|
claude_mpm/dashboard/static/production/monitors.html,sha256=9FA-cNbS1-eKsPwvInq3SjpVRWKatXUar-VUnfSXTRo,15732
|
360
360
|
claude_mpm/dashboard/static/test-archive/dashboard.html,sha256=F971Wwl0opHFb-SKD3fi0tvZmrzMPLh7MkJsJzR9tAc,31192
|
361
361
|
claude_mpm/dashboard/static/test-archive/debug-events.html,sha256=fpAKX6vnSzxefP0y0SkwHaEnve04-rZy2HfxstJslNA,4755
|
@@ -363,7 +363,7 @@ claude_mpm/dashboard/static/test-archive/test-navigation.html,sha256=vVdEjz_EGhN
|
|
363
363
|
claude_mpm/dashboard/static/test-archive/test-react-exports.html,sha256=lqMHNjEce0Ddgt7LPuVyCiqLUYCvPwAgu6oVCqf3sek,6464
|
364
364
|
claude_mpm/dashboard/static/test-archive/test_debug.html,sha256=XZ0tcKA57VnlE_OLGusb0UWh8Hs4SgeD-wsc4neh8Zw,815
|
365
365
|
claude_mpm/dashboard/templates/code_simple.html,sha256=xrmTLFow0M5NWFlk4ci1eLWML-IHr35i5pqIVaEg2TU,4329
|
366
|
-
claude_mpm/dashboard/templates/index.html,sha256=
|
366
|
+
claude_mpm/dashboard/templates/index.html,sha256=0YjuhXGrqs4yz5ZPwsNQ1sKRUp4l3dChm6ejMLGw5Vk,31809
|
367
367
|
claude_mpm/experimental/__init__.py,sha256=R_aclOvWpvSTHWAx9QXyg9OIPVK2dXT5tQJhxLQN11Y,369
|
368
368
|
claude_mpm/experimental/cli_enhancements.py,sha256=PfAt-SI-crBoE0Dtx1JecpS5_6OT_0apJbo28KS6HUI,11541
|
369
369
|
claude_mpm/generators/__init__.py,sha256=rG8vwF_BjPmeMKvyMXpUA8uJ-7mtW2HTNfalZzgRlNk,153
|
@@ -678,7 +678,7 @@ claude_mpm/services/project/architecture_analyzer.py,sha256=YpGDIk_yGM-vkGcnBo27
|
|
678
678
|
claude_mpm/services/project/archive_manager.py,sha256=jksVgx7q7V675QEs3GzECYeb0lTphvtP2UeEZuubVMQ,39236
|
679
679
|
claude_mpm/services/project/dependency_analyzer.py,sha256=CQGQgFSdozSE7gl2DD0Q9MLLtyzA99ntKRrCGywZhuQ,15621
|
680
680
|
claude_mpm/services/project/documentation_manager.py,sha256=d50_vnG2Q8F2Bld5nivdPSm5zXVFKebHfTASHL1hevI,19118
|
681
|
-
claude_mpm/services/project/enhanced_analyzer.py,sha256=
|
681
|
+
claude_mpm/services/project/enhanced_analyzer.py,sha256=IE12g4ykXLkanyROOcztBs8gGq5UMNkI0yAolCkAhtA,19759
|
682
682
|
claude_mpm/services/project/language_analyzer.py,sha256=KnbwHLtUcnzdMY6bseZk90bMo0yI9n_pXP5Mj4tLDgg,9209
|
683
683
|
claude_mpm/services/project/metrics_collector.py,sha256=ctXgu-qWVZoKAJ2IC0tZ0lSuS7nfN0beZgTvcEomN70,12929
|
684
684
|
claude_mpm/services/project/project_organizer.py,sha256=9uAHI5MISum7YKNibRwH2jxbFmUUUEAbzR5YxX60Gyo,37611
|
@@ -769,6 +769,7 @@ claude_mpm/utils/database_connector.py,sha256=7Fa9gzr19Y-5eJuvCGfBYJRjMfI6s-EIB6
|
|
769
769
|
claude_mpm/utils/dependency_cache.py,sha256=GmdSYmV6YSmvtaoeAR2vGZpD3ormFsHpooKJqYgOZa0,11780
|
770
770
|
claude_mpm/utils/dependency_manager.py,sha256=g9iYA_uyZ4XE8cY-VfhKYd1NA3aqr9ZYT3IBTv_abmY,7356
|
771
771
|
claude_mpm/utils/dependency_strategies.py,sha256=m-VyZP0KF8z1mCcd_dEPNZ8WbU8z0GyBpvw210yCNvM,12149
|
772
|
+
claude_mpm/utils/display_helper.py,sha256=Ce2TGGOqMLq3o7L5ax9YtxNaFuNisLb97Cdoe4Y5Gjs,9783
|
772
773
|
claude_mpm/utils/environment_context.py,sha256=mCnRJqQLTyaAv-7M4bp9N9WqVgfSQb5xbbfgvFxGHJA,10141
|
773
774
|
claude_mpm/utils/error_handler.py,sha256=RWL7DnXttJKCgYhevUm9XlMC33rEhX2CXo1IiCtwV4g,7969
|
774
775
|
claude_mpm/utils/file_utils.py,sha256=pv3MEKLsn4WIOra5JoHnCm_FaJbNcKMuS3EKuXAWyLc,7859
|
@@ -783,9 +784,9 @@ claude_mpm/utils/subprocess_utils.py,sha256=D0izRT8anjiUb_JG72zlJR_JAw1cDkb7kalN
|
|
783
784
|
claude_mpm/validation/__init__.py,sha256=YZhwE3mhit-lslvRLuwfX82xJ_k4haZeKmh4IWaVwtk,156
|
784
785
|
claude_mpm/validation/agent_validator.py,sha256=GprtAvu80VyMXcKGsK_VhYiXWA6BjKHv7O6HKx0AB9w,20917
|
785
786
|
claude_mpm/validation/frontmatter_validator.py,sha256=YpJlYNNYcV8u6hIOi3_jaRsDnzhbcQpjCBE6eyBKaFY,7076
|
786
|
-
claude_mpm-4.7.
|
787
|
-
claude_mpm-4.7.
|
788
|
-
claude_mpm-4.7.
|
789
|
-
claude_mpm-4.7.
|
790
|
-
claude_mpm-4.7.
|
791
|
-
claude_mpm-4.7.
|
787
|
+
claude_mpm-4.7.5.dist-info/licenses/LICENSE,sha256=lpaivOlPuBZW1ds05uQLJJswy8Rp_HMNieJEbFlqvLk,1072
|
788
|
+
claude_mpm-4.7.5.dist-info/METADATA,sha256=hq04JsKoSrZIIOVtawIlwapyPzZOkFxDl2BhsNcOFR0,17517
|
789
|
+
claude_mpm-4.7.5.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
790
|
+
claude_mpm-4.7.5.dist-info/entry_points.txt,sha256=Vlw3GNi-OtTpKSrez04iNrPmxNxYDpIWxmJCxiZ5Tx8,526
|
791
|
+
claude_mpm-4.7.5.dist-info/top_level.txt,sha256=1nUg3FEaBySgm8t-s54jK5zoPnu3_eY6EP6IOlekyHA,11
|
792
|
+
claude_mpm-4.7.5.dist-info/RECORD,,
|