claude-mpm 4.16.3__py3-none-any.whl → 4.17.1__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.
Potentially problematic release.
This version of claude-mpm might be problematic. Click here for more details.
- claude_mpm/VERSION +1 -1
- claude_mpm/commands/mpm-help.md +3 -0
- claude_mpm/commands/mpm-version.md +113 -0
- claude_mpm/commands/mpm.md +1 -0
- claude_mpm/services/version_service.py +104 -1
- claude_mpm/skills/bundled/api-documentation.md +393 -0
- claude_mpm/skills/bundled/async-testing.md +571 -0
- claude_mpm/skills/bundled/code-review.md +143 -0
- claude_mpm/skills/bundled/database-migration.md +199 -0
- claude_mpm/skills/bundled/docker-containerization.md +194 -0
- claude_mpm/skills/bundled/express-local-dev.md +1429 -0
- claude_mpm/skills/bundled/fastapi-local-dev.md +1199 -0
- claude_mpm/skills/bundled/git-workflow.md +414 -0
- claude_mpm/skills/bundled/imagemagick.md +204 -0
- claude_mpm/skills/bundled/json-data-handling.md +223 -0
- claude_mpm/skills/bundled/nextjs-local-dev.md +807 -0
- claude_mpm/skills/bundled/pdf.md +141 -0
- claude_mpm/skills/bundled/performance-profiling.md +567 -0
- claude_mpm/skills/bundled/refactoring-patterns.md +180 -0
- claude_mpm/skills/bundled/security-scanning.md +327 -0
- claude_mpm/skills/bundled/systematic-debugging.md +473 -0
- claude_mpm/skills/bundled/test-driven-development.md +378 -0
- claude_mpm/skills/bundled/vite-local-dev.md +1061 -0
- claude_mpm/skills/bundled/web-performance-optimization.md +2305 -0
- claude_mpm/skills/bundled/xlsx.md +157 -0
- claude_mpm/skills/registry.py +97 -9
- {claude_mpm-4.16.3.dist-info → claude_mpm-4.17.1.dist-info}/METADATA +7 -2
- {claude_mpm-4.16.3.dist-info → claude_mpm-4.17.1.dist-info}/RECORD +32 -11
- {claude_mpm-4.16.3.dist-info → claude_mpm-4.17.1.dist-info}/WHEEL +0 -0
- {claude_mpm-4.16.3.dist-info → claude_mpm-4.17.1.dist-info}/entry_points.txt +0 -0
- {claude_mpm-4.16.3.dist-info → claude_mpm-4.17.1.dist-info}/licenses/LICENSE +0 -0
- {claude_mpm-4.16.3.dist-info → claude_mpm-4.17.1.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
---
|
|
2
|
+
skill_id: xlsx
|
|
3
|
+
skill_version: 0.1.0
|
|
4
|
+
description: Working with Excel files programmatically.
|
|
5
|
+
updated_at: 2025-10-30T17:00:00Z
|
|
6
|
+
tags: [excel, xlsx, spreadsheet, data]
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Excel/XLSX Manipulation
|
|
10
|
+
|
|
11
|
+
Working with Excel files programmatically.
|
|
12
|
+
|
|
13
|
+
## Python (openpyxl)
|
|
14
|
+
|
|
15
|
+
### Reading Excel
|
|
16
|
+
```python
|
|
17
|
+
from openpyxl import load_workbook
|
|
18
|
+
|
|
19
|
+
wb = load_workbook('data.xlsx')
|
|
20
|
+
ws = wb.active # Get active sheet
|
|
21
|
+
|
|
22
|
+
# Read cell
|
|
23
|
+
value = ws['A1'].value
|
|
24
|
+
|
|
25
|
+
# Iterate rows
|
|
26
|
+
for row in ws.iter_rows(min_row=2, values_only=True):
|
|
27
|
+
print(row)
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
### Writing Excel
|
|
31
|
+
```python
|
|
32
|
+
from openpyxl import Workbook
|
|
33
|
+
|
|
34
|
+
wb = Workbook()
|
|
35
|
+
ws = wb.active
|
|
36
|
+
ws.title = "Data"
|
|
37
|
+
|
|
38
|
+
# Write data
|
|
39
|
+
ws['A1'] = 'Name'
|
|
40
|
+
ws['B1'] = 'Age'
|
|
41
|
+
ws.append(['John', 30])
|
|
42
|
+
ws.append(['Jane', 25])
|
|
43
|
+
|
|
44
|
+
wb.save('output.xlsx')
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### Formatting
|
|
48
|
+
```python
|
|
49
|
+
from openpyxl.styles import Font, PatternFill
|
|
50
|
+
|
|
51
|
+
# Bold header
|
|
52
|
+
ws['A1'].font = Font(bold=True)
|
|
53
|
+
|
|
54
|
+
# Background color
|
|
55
|
+
ws['A1'].fill = PatternFill(start_color="FFFF00", fill_type="solid")
|
|
56
|
+
|
|
57
|
+
# Number format
|
|
58
|
+
ws['B2'].number_format = '0.00' # Two decimals
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### Formulas
|
|
62
|
+
```python
|
|
63
|
+
# Add formula
|
|
64
|
+
ws['C2'] = '=A2+B2'
|
|
65
|
+
|
|
66
|
+
# Sum column
|
|
67
|
+
ws['D10'] = '=SUM(D2:D9)'
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## Python (pandas)
|
|
71
|
+
|
|
72
|
+
### Reading Excel
|
|
73
|
+
```python
|
|
74
|
+
import pandas as pd
|
|
75
|
+
|
|
76
|
+
# Read sheet
|
|
77
|
+
df = pd.read_excel('data.xlsx', sheet_name='Sheet1')
|
|
78
|
+
|
|
79
|
+
# Read multiple sheets
|
|
80
|
+
dfs = pd.read_excel('data.xlsx', sheet_name=None)
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### Writing Excel
|
|
84
|
+
```python
|
|
85
|
+
# Write DataFrame
|
|
86
|
+
df.to_excel('output.xlsx', index=False)
|
|
87
|
+
|
|
88
|
+
# Multiple sheets
|
|
89
|
+
with pd.ExcelWriter('output.xlsx') as writer:
|
|
90
|
+
df1.to_excel(writer, sheet_name='Sheet1')
|
|
91
|
+
df2.to_excel(writer, sheet_name='Sheet2')
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
### Data Transformation
|
|
95
|
+
```python
|
|
96
|
+
# Filter
|
|
97
|
+
filtered = df[df['Age'] > 25]
|
|
98
|
+
|
|
99
|
+
# Group by
|
|
100
|
+
grouped = df.groupby('Department')['Salary'].mean()
|
|
101
|
+
|
|
102
|
+
# Pivot
|
|
103
|
+
pivot = df.pivot_table(values='Sales', index='Region', columns='Product')
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
## JavaScript (xlsx)
|
|
107
|
+
|
|
108
|
+
```javascript
|
|
109
|
+
import XLSX from 'xlsx';
|
|
110
|
+
|
|
111
|
+
// Read file
|
|
112
|
+
const workbook = XLSX.readFile('data.xlsx');
|
|
113
|
+
const sheetName = workbook.SheetNames[0];
|
|
114
|
+
const worksheet = workbook.Sheets[sheetName];
|
|
115
|
+
|
|
116
|
+
// Convert to JSON
|
|
117
|
+
const data = XLSX.utils.sheet_to_json(worksheet);
|
|
118
|
+
|
|
119
|
+
// Write file
|
|
120
|
+
const newWorksheet = XLSX.utils.json_to_sheet(data);
|
|
121
|
+
const newWorkbook = XLSX.utils.book_new();
|
|
122
|
+
XLSX.utils.book_append_sheet(newWorkbook, newWorksheet, 'Data');
|
|
123
|
+
XLSX.writeFile(newWorkbook, 'output.xlsx');
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
## Common Operations
|
|
127
|
+
|
|
128
|
+
### CSV to Excel
|
|
129
|
+
```python
|
|
130
|
+
import pandas as pd
|
|
131
|
+
|
|
132
|
+
df = pd.read_csv('data.csv')
|
|
133
|
+
df.to_excel('data.xlsx', index=False)
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
### Excel to CSV
|
|
137
|
+
```python
|
|
138
|
+
df = pd.read_excel('data.xlsx')
|
|
139
|
+
df.to_csv('data.csv', index=False)
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
### Merging Excel Files
|
|
143
|
+
```python
|
|
144
|
+
dfs = []
|
|
145
|
+
for file in ['file1.xlsx', 'file2.xlsx', 'file3.xlsx']:
|
|
146
|
+
df = pd.read_excel(file)
|
|
147
|
+
dfs.append(df)
|
|
148
|
+
|
|
149
|
+
combined = pd.concat(dfs, ignore_index=True)
|
|
150
|
+
combined.to_excel('merged.xlsx', index=False)
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
## Remember
|
|
154
|
+
- Close workbooks after use
|
|
155
|
+
- Handle large files in chunks
|
|
156
|
+
- Validate data before writing
|
|
157
|
+
- Use pandas for data analysis, openpyxl for formatting
|
claude_mpm/skills/registry.py
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
"""Skills registry - manages bundled and discovered skills."""
|
|
2
2
|
|
|
3
|
+
import re
|
|
3
4
|
from dataclasses import dataclass
|
|
4
5
|
from pathlib import Path
|
|
5
|
-
from typing import Dict, List, Optional
|
|
6
|
+
from typing import Any, Dict, List, Optional
|
|
7
|
+
|
|
8
|
+
import yaml
|
|
6
9
|
|
|
7
10
|
from claude_mpm.core.logging_utils import get_logger
|
|
8
11
|
|
|
@@ -17,13 +20,27 @@ class Skill:
|
|
|
17
20
|
path: Path
|
|
18
21
|
content: str
|
|
19
22
|
source: str # 'bundled', 'user', or 'project'
|
|
23
|
+
|
|
24
|
+
# Version tracking fields
|
|
25
|
+
version: str = "0.1.0"
|
|
26
|
+
skill_id: str = "" # defaults to name if not provided
|
|
27
|
+
|
|
28
|
+
# Existing fields
|
|
20
29
|
description: str = ""
|
|
21
30
|
agent_types: List[str] = None # Which agent types can use this skill
|
|
22
31
|
|
|
32
|
+
# Optional metadata
|
|
33
|
+
updated_at: Optional[str] = None
|
|
34
|
+
tags: List[str] = None
|
|
35
|
+
|
|
23
36
|
def __post_init__(self):
|
|
24
|
-
"""Initialize
|
|
37
|
+
"""Initialize default values if not provided."""
|
|
25
38
|
if self.agent_types is None:
|
|
26
39
|
self.agent_types = []
|
|
40
|
+
if self.tags is None:
|
|
41
|
+
self.tags = []
|
|
42
|
+
if not self.skill_id:
|
|
43
|
+
self.skill_id = self.name
|
|
27
44
|
|
|
28
45
|
|
|
29
46
|
class SkillsRegistry:
|
|
@@ -36,6 +53,28 @@ class SkillsRegistry:
|
|
|
36
53
|
self._load_user_skills()
|
|
37
54
|
self._load_project_skills()
|
|
38
55
|
|
|
56
|
+
def _parse_skill_frontmatter(self, content: str) -> Dict[str, Any]:
|
|
57
|
+
"""Parse YAML frontmatter from skill markdown file.
|
|
58
|
+
|
|
59
|
+
Returns:
|
|
60
|
+
Dict with frontmatter fields or empty dict if no frontmatter
|
|
61
|
+
"""
|
|
62
|
+
# Check for YAML frontmatter
|
|
63
|
+
if not content.startswith("---"):
|
|
64
|
+
return {}
|
|
65
|
+
|
|
66
|
+
# Extract frontmatter (match: ---\n...yaml...\n---\nrest)
|
|
67
|
+
match = re.match(r"^---\n(.*?)\n---\n(.*)$", content, re.DOTALL)
|
|
68
|
+
if not match:
|
|
69
|
+
return {}
|
|
70
|
+
|
|
71
|
+
try:
|
|
72
|
+
frontmatter = yaml.safe_load(match.group(1))
|
|
73
|
+
return frontmatter or {}
|
|
74
|
+
except yaml.YAMLError as e:
|
|
75
|
+
logger.warning(f"Failed to parse skill frontmatter: {e}")
|
|
76
|
+
return {}
|
|
77
|
+
|
|
39
78
|
def _load_bundled_skills(self):
|
|
40
79
|
"""Load skills bundled with MPM."""
|
|
41
80
|
bundled_dir = Path(__file__).parent / "bundled"
|
|
@@ -49,21 +88,36 @@ class SkillsRegistry:
|
|
|
49
88
|
skill_name = skill_file.stem
|
|
50
89
|
content = skill_file.read_text(encoding="utf-8")
|
|
51
90
|
|
|
52
|
-
#
|
|
53
|
-
|
|
91
|
+
# Parse frontmatter
|
|
92
|
+
frontmatter = self._parse_skill_frontmatter(content)
|
|
93
|
+
|
|
94
|
+
# Extract version fields from frontmatter
|
|
95
|
+
version = frontmatter.get("skill_version", "0.1.0")
|
|
96
|
+
skill_id = frontmatter.get("skill_id", skill_name)
|
|
97
|
+
updated_at = frontmatter.get("updated_at")
|
|
98
|
+
tags = frontmatter.get("tags", [])
|
|
99
|
+
|
|
100
|
+
# Extract description (from frontmatter or fallback to content parsing)
|
|
101
|
+
description = frontmatter.get("description", "")
|
|
102
|
+
if not description:
|
|
103
|
+
description = self._extract_description(content)
|
|
54
104
|
|
|
55
105
|
self.skills[skill_name] = Skill(
|
|
56
106
|
name=skill_name,
|
|
57
107
|
path=skill_file,
|
|
58
108
|
content=content,
|
|
59
109
|
source="bundled",
|
|
110
|
+
version=version,
|
|
111
|
+
skill_id=skill_id,
|
|
60
112
|
description=description,
|
|
113
|
+
updated_at=updated_at,
|
|
114
|
+
tags=tags,
|
|
61
115
|
)
|
|
62
116
|
skill_count += 1
|
|
63
117
|
except Exception as e:
|
|
64
118
|
logger.error(f"Error loading bundled skill {skill_file}: {e}")
|
|
65
119
|
|
|
66
|
-
logger.
|
|
120
|
+
logger.debug(f"Loaded {skill_count} bundled skills")
|
|
67
121
|
|
|
68
122
|
def _load_user_skills(self):
|
|
69
123
|
"""Load user-installed skills from ~/.claude/skills/"""
|
|
@@ -78,14 +132,31 @@ class SkillsRegistry:
|
|
|
78
132
|
skill_name = skill_file.stem
|
|
79
133
|
# User skills override bundled skills
|
|
80
134
|
content = skill_file.read_text(encoding="utf-8")
|
|
81
|
-
|
|
135
|
+
|
|
136
|
+
# Parse frontmatter
|
|
137
|
+
frontmatter = self._parse_skill_frontmatter(content)
|
|
138
|
+
|
|
139
|
+
# Extract version fields from frontmatter
|
|
140
|
+
version = frontmatter.get("skill_version", "0.1.0")
|
|
141
|
+
skill_id = frontmatter.get("skill_id", skill_name)
|
|
142
|
+
updated_at = frontmatter.get("updated_at")
|
|
143
|
+
tags = frontmatter.get("tags", [])
|
|
144
|
+
|
|
145
|
+
# Extract description (from frontmatter or fallback to content parsing)
|
|
146
|
+
description = frontmatter.get("description", "")
|
|
147
|
+
if not description:
|
|
148
|
+
description = self._extract_description(content)
|
|
82
149
|
|
|
83
150
|
self.skills[skill_name] = Skill(
|
|
84
151
|
name=skill_name,
|
|
85
152
|
path=skill_file,
|
|
86
153
|
content=content,
|
|
87
154
|
source="user",
|
|
155
|
+
version=version,
|
|
156
|
+
skill_id=skill_id,
|
|
88
157
|
description=description,
|
|
158
|
+
updated_at=updated_at,
|
|
159
|
+
tags=tags,
|
|
89
160
|
)
|
|
90
161
|
skill_count += 1
|
|
91
162
|
logger.debug(f"User skill '{skill_name}' overrides bundled version")
|
|
@@ -93,7 +164,7 @@ class SkillsRegistry:
|
|
|
93
164
|
logger.error(f"Error loading user skill {skill_file}: {e}")
|
|
94
165
|
|
|
95
166
|
if skill_count > 0:
|
|
96
|
-
logger.
|
|
167
|
+
logger.debug(f"Loaded {skill_count} user skills")
|
|
97
168
|
|
|
98
169
|
def _load_project_skills(self):
|
|
99
170
|
"""Load project-specific skills from .claude/skills/"""
|
|
@@ -108,14 +179,31 @@ class SkillsRegistry:
|
|
|
108
179
|
skill_name = skill_file.stem
|
|
109
180
|
# Project skills override both user and bundled skills
|
|
110
181
|
content = skill_file.read_text(encoding="utf-8")
|
|
111
|
-
|
|
182
|
+
|
|
183
|
+
# Parse frontmatter
|
|
184
|
+
frontmatter = self._parse_skill_frontmatter(content)
|
|
185
|
+
|
|
186
|
+
# Extract version fields from frontmatter
|
|
187
|
+
version = frontmatter.get("skill_version", "0.1.0")
|
|
188
|
+
skill_id = frontmatter.get("skill_id", skill_name)
|
|
189
|
+
updated_at = frontmatter.get("updated_at")
|
|
190
|
+
tags = frontmatter.get("tags", [])
|
|
191
|
+
|
|
192
|
+
# Extract description (from frontmatter or fallback to content parsing)
|
|
193
|
+
description = frontmatter.get("description", "")
|
|
194
|
+
if not description:
|
|
195
|
+
description = self._extract_description(content)
|
|
112
196
|
|
|
113
197
|
self.skills[skill_name] = Skill(
|
|
114
198
|
name=skill_name,
|
|
115
199
|
path=skill_file,
|
|
116
200
|
content=content,
|
|
117
201
|
source="project",
|
|
202
|
+
version=version,
|
|
203
|
+
skill_id=skill_id,
|
|
118
204
|
description=description,
|
|
205
|
+
updated_at=updated_at,
|
|
206
|
+
tags=tags,
|
|
119
207
|
)
|
|
120
208
|
skill_count += 1
|
|
121
209
|
logger.debug(f"Project skill '{skill_name}' overrides other versions")
|
|
@@ -123,7 +211,7 @@ class SkillsRegistry:
|
|
|
123
211
|
logger.error(f"Error loading project skill {skill_file}: {e}")
|
|
124
212
|
|
|
125
213
|
if skill_count > 0:
|
|
126
|
-
logger.
|
|
214
|
+
logger.debug(f"Loaded {skill_count} project skills")
|
|
127
215
|
|
|
128
216
|
def _extract_description(self, content: str) -> str:
|
|
129
217
|
"""Extract description from skill content (first paragraph or summary)."""
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: claude-mpm
|
|
3
|
-
Version: 4.
|
|
3
|
+
Version: 4.17.1
|
|
4
4
|
Summary: Claude Multi-Agent Project Manager - Orchestrate Claude with agent delegation and ticket tracking
|
|
5
5
|
Author-email: Bob Matsuoka <bob@matsuoka.com>
|
|
6
6
|
Maintainer: Claude MPM Team
|
|
@@ -310,7 +310,7 @@ Agents learn project-specific patterns using a simple list format and can update
|
|
|
310
310
|
|
|
311
311
|
Claude MPM includes a powerful skills system that eliminates redundant agent guidance through reusable skill modules:
|
|
312
312
|
|
|
313
|
-
**20 Bundled Skills** covering essential development workflows:
|
|
313
|
+
**20 Bundled Skills** covering essential development workflows (all versioned starting at 0.1.0):
|
|
314
314
|
- Git workflow, TDD, code review, systematic debugging
|
|
315
315
|
- API documentation, refactoring patterns, performance profiling
|
|
316
316
|
- Docker containerization, database migrations, security scanning
|
|
@@ -323,6 +323,11 @@ Claude MPM includes a powerful skills system that eliminates redundant agent gui
|
|
|
323
323
|
- **User**: Custom skills in `~/.config/claude-mpm/skills/`
|
|
324
324
|
- **Project**: Project-specific skills in `.claude-mpm/skills/`
|
|
325
325
|
|
|
326
|
+
**Version Tracking:**
|
|
327
|
+
- All skills support semantic versioning (MAJOR.MINOR.PATCH)
|
|
328
|
+
- Check versions with `/mpm-version` command in Claude Code
|
|
329
|
+
- See [Skills Versioning Guide](docs/user/skills-versioning.md) for details
|
|
330
|
+
|
|
326
331
|
**Quick Access:**
|
|
327
332
|
```bash
|
|
328
333
|
# Interactive skills management
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
claude_mpm/BUILD_NUMBER,sha256=9JfxhnDtr-8l3kCP2U5TVXSErptHoga8m7XA8zqgGOc,4
|
|
2
|
-
claude_mpm/VERSION,sha256=
|
|
2
|
+
claude_mpm/VERSION,sha256=RB2gUKMx5VBa3nbppW0YC1fQBvNMIBg7TEJB0kbNlyk,7
|
|
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=sLjJF6Kw7H4V9WWeaEYltM-77TgXqzEMX5vx4ukM5-0,5977
|
|
@@ -172,13 +172,14 @@ claude_mpm/commands/mpm-agents.md,sha256=Mq1BOVP6ejRLYZCHE-K1fZ2HaiND_BaYEfc9SO5
|
|
|
172
172
|
claude_mpm/commands/mpm-auto-configure.md,sha256=vJtXiaEiujmozhKhqU8GsO95gHLs0QQAzkyYfqPkgzQ,5130
|
|
173
173
|
claude_mpm/commands/mpm-config.md,sha256=79Eb-srRpEVV3HCHDHZc8SKec6_LVP6HbXDEVkZKLgw,2929
|
|
174
174
|
claude_mpm/commands/mpm-doctor.md,sha256=ut5LhFKVRw-2ecjMSPsnaTiRuFXa6Q9t-Wgl3CCnQvk,590
|
|
175
|
-
claude_mpm/commands/mpm-help.md,sha256=
|
|
175
|
+
claude_mpm/commands/mpm-help.md,sha256=8lo0mvhAjFI124hAGX4G8iwkz1k3xDv2QT2Jbyqeg_8,6891
|
|
176
176
|
claude_mpm/commands/mpm-init.md,sha256=wwYHkToq8U5ALdhu8bDPygqAsKZ77aMaai7ZJC3oBqU,16054
|
|
177
177
|
claude_mpm/commands/mpm-monitor.md,sha256=onTHf9Yac1KkdZdENtY2Q5jyw0A-vZLYgoKkPCtZLUY,12193
|
|
178
178
|
claude_mpm/commands/mpm-organize.md,sha256=T-ysjhwgfW9irjUj02vuY_1jeMdabO_zxcShyjmqsiM,10153
|
|
179
179
|
claude_mpm/commands/mpm-status.md,sha256=oaM4ybL4ffp55nkT9F0mp_5H4tF-wX9mbqK-LEKEqUU,1919
|
|
180
180
|
claude_mpm/commands/mpm-tickets.md,sha256=a2_mW56QDhw7-jMU92ycGaxvSSYpNoQFGhkWbr3MJ88,2356
|
|
181
|
-
claude_mpm/commands/mpm.md,sha256=
|
|
181
|
+
claude_mpm/commands/mpm-version.md,sha256=lwI2QiRYKfA6L5y_FGL8Nkb-4GtO2Z4iuNBbMvfx6Hs,2648
|
|
182
|
+
claude_mpm/commands/mpm.md,sha256=_VwGAZPYruPW9Rdh0_xOZWDxVrE3KOT00G7FvPkq_T4,636
|
|
182
183
|
claude_mpm/config/__init__.py,sha256=V2dyJQ8_gVCpNiCg8zYTQqE1RSeON5Zm8n5Ndkqhp1g,916
|
|
183
184
|
claude_mpm/config/agent_config.py,sha256=sICpvJoOuJGRzdSIMWvC9ECzKTKF-3Psi-ATSaZQ9LU,14860
|
|
184
185
|
claude_mpm/config/experimental_features.py,sha256=cH95HqMUEQL-_Hs833dAAC33GHMUE5e26qpOyiEtBWI,7546
|
|
@@ -469,7 +470,7 @@ claude_mpm/services/subprocess_launcher_service.py,sha256=lYSlg2G_oDAv1dHrOdHaOE
|
|
|
469
470
|
claude_mpm/services/system_instructions_service.py,sha256=eub7WjM1g1hda-k6n6VvKnHehOAAPGDNtGEO7SNTZZ8,10016
|
|
470
471
|
claude_mpm/services/ticket_manager.py,sha256=LpmbUFo7OkG48leZscHIvNoHY_thLWh2wquFxSfDg-o,785
|
|
471
472
|
claude_mpm/services/utility_service.py,sha256=bFxDiQTisdAL3dOU9lucHdDW9T8sW1_9u6o7wKp0n1o,8435
|
|
472
|
-
claude_mpm/services/version_service.py,sha256=
|
|
473
|
+
claude_mpm/services/version_service.py,sha256=QSCEVZ1yrbT2OrqjiFaGhT0oPJSMCX9Z84KMwwt6dNs,13986
|
|
473
474
|
claude_mpm/services/agents/__init__.py,sha256=ZkES34SfCrTzWjdoCZExRccPHXXWEBzech6dNEb3T9g,2547
|
|
474
475
|
claude_mpm/services/agents/agent_builder.py,sha256=vXXz7GbCoBidNs7VfyQVwB4fTslD_joAw5HP6Ac8_kM,14950
|
|
475
476
|
claude_mpm/services/agents/auto_config_manager.py,sha256=Eq3u0Zvc8nqDgp-aHYpVFv44UrEG-gPKQSr6hrM5GHA,30705
|
|
@@ -826,9 +827,29 @@ claude_mpm/services/version_control/version_parser.py,sha256=DbNncYZKKy9--ZUCO9g
|
|
|
826
827
|
claude_mpm/services/visualization/__init__.py,sha256=cTtWxRi07rSLXQKVZa7SKZsYfj6nRouw7HVO85Towfg,401
|
|
827
828
|
claude_mpm/services/visualization/mermaid_generator.py,sha256=6QGgXtMg_N9rKeRn8wYs3IxuWGKdDVAwFMFWKfIw9s4,34277
|
|
828
829
|
claude_mpm/skills/__init__.py,sha256=Z_QNFaW2t_Um5q4icqs9xSgoNKhAPbs5Ny7rMKizBsM,497
|
|
829
|
-
claude_mpm/skills/registry.py,sha256=
|
|
830
|
+
claude_mpm/skills/registry.py,sha256=P4CsN7FylbxIrxuMD8LKVjOv6SLrMJunwvDHPvYqS7U,10233
|
|
830
831
|
claude_mpm/skills/skill_manager.py,sha256=6QaC0B3e8hVVj7FWV6fCr8-SGbnguoXmErUujnXGWCo,10445
|
|
831
832
|
claude_mpm/skills/bundled/__init__.py,sha256=rGZR4FYam6sN_fCzP7l1OpEn4pIJI8UYI_89ErnwSRU,152
|
|
833
|
+
claude_mpm/skills/bundled/api-documentation.md,sha256=lPPvsgtyiPSIT8WeiJtm9g8TRaBtYu5Z9HX3caGi_ME,9492
|
|
834
|
+
claude_mpm/skills/bundled/async-testing.md,sha256=KOdBa6Pa1EPEIljmH1v2tukrsu9NW3c-RiXaee0rJfQ,13010
|
|
835
|
+
claude_mpm/skills/bundled/code-review.md,sha256=QFO0tzyLPDkhva1aLu4xh5Dsen0S4wVQTC9eFXkstTQ,2870
|
|
836
|
+
claude_mpm/skills/bundled/database-migration.md,sha256=oJ6F18Keax74gw5TINhQp127OrCuzB05w4hLX0REdRk,4149
|
|
837
|
+
claude_mpm/skills/bundled/docker-containerization.md,sha256=7jEcuakGM7YWNLUGZhPq09ot_sUqkS3k8sgCpwmx6WQ,3097
|
|
838
|
+
claude_mpm/skills/bundled/express-local-dev.md,sha256=GsMLgxNy4LQsqswsS5JMrjLgLIN50pc7xX6KH89a_rA,31300
|
|
839
|
+
claude_mpm/skills/bundled/fastapi-local-dev.md,sha256=RTU7AdNYPM_N1or1yq7H7p4OQknqMpxKZAE8-OytC-s,25453
|
|
840
|
+
claude_mpm/skills/bundled/git-workflow.md,sha256=M6KyCxykf6_B1d0HQ428MCBJiSkIW0nvTguoHho9lCg,7452
|
|
841
|
+
claude_mpm/skills/bundled/imagemagick.md,sha256=RBybqF7JUsJTCBE4gmJmdOe-fzXvmUlAdXXEZmOX3GA,4135
|
|
842
|
+
claude_mpm/skills/bundled/json-data-handling.md,sha256=_mmNaFakJswbCpaqGy-BHwLNkdPaFEGb93nRi5Ajzao,4550
|
|
843
|
+
claude_mpm/skills/bundled/nextjs-local-dev.md,sha256=a0QvHw7tokJDD4NudvOjR38vsMbSU5pQbOXihfjgWrQ,16468
|
|
844
|
+
claude_mpm/skills/bundled/pdf.md,sha256=xYDfklEGIzc7liMMAYVnkuwb6KEKHPd3YGMq9NCGWcg,2857
|
|
845
|
+
claude_mpm/skills/bundled/performance-profiling.md,sha256=n_ZcgY1YVwUnWioYkTnAU5X5F8gwG6B9r1BTj7Ai_oo,12264
|
|
846
|
+
claude_mpm/skills/bundled/refactoring-patterns.md,sha256=JSZDm7w0kpxP-GCpK9bevEMFxEKfTu4vl7QJNrhl0E0,3809
|
|
847
|
+
claude_mpm/skills/bundled/security-scanning.md,sha256=9j-AdA9IcpIxe-rThajBxk05OXL_uCxLjXPtlLZ7PzI,7577
|
|
848
|
+
claude_mpm/skills/bundled/systematic-debugging.md,sha256=-HeIPw3n13YmkF2Kr07CmA64HWbBFFhtkXxUw9vNM_c,11773
|
|
849
|
+
claude_mpm/skills/bundled/test-driven-development.md,sha256=UqZvDyGzyjsxHBuryI0J5gvbeAeP5itQOyV87sanJpU,8913
|
|
850
|
+
claude_mpm/skills/bundled/vite-local-dev.md,sha256=Ypc3RMAiUXTUzmrvTx4v5LERsz8BaYDyJUJXi3jzkq4,21063
|
|
851
|
+
claude_mpm/skills/bundled/web-performance-optimization.md,sha256=bG1sm1VxrZgetwuTAQjCZp-oT_2lMh6OUgyGvkFiPDw,52937
|
|
852
|
+
claude_mpm/skills/bundled/xlsx.md,sha256=OwcXT9ADlBtySqzO529HTPpEH_xn6Ue6caQbjYQ_GIc,2969
|
|
832
853
|
claude_mpm/storage/__init__.py,sha256=DXnmee6iGqC6ctFLW7_Ty1cVCjYDFuCMkwO4EV0i25k,274
|
|
833
854
|
claude_mpm/storage/state_storage.py,sha256=6jEZ4z35MjtAuTTUdqETTy4_dbMMK8EN_C2kVa62PjY,16811
|
|
834
855
|
claude_mpm/tools/__init__.py,sha256=T3GuCYNAHtjVcKCeivY674PaDm48WX96AriQfTKUknY,347
|
|
@@ -862,9 +883,9 @@ claude_mpm/utils/subprocess_utils.py,sha256=D0izRT8anjiUb_JG72zlJR_JAw1cDkb7kalN
|
|
|
862
883
|
claude_mpm/validation/__init__.py,sha256=YZhwE3mhit-lslvRLuwfX82xJ_k4haZeKmh4IWaVwtk,156
|
|
863
884
|
claude_mpm/validation/agent_validator.py,sha256=GprtAvu80VyMXcKGsK_VhYiXWA6BjKHv7O6HKx0AB9w,20917
|
|
864
885
|
claude_mpm/validation/frontmatter_validator.py,sha256=YpJlYNNYcV8u6hIOi3_jaRsDnzhbcQpjCBE6eyBKaFY,7076
|
|
865
|
-
claude_mpm-4.
|
|
866
|
-
claude_mpm-4.
|
|
867
|
-
claude_mpm-4.
|
|
868
|
-
claude_mpm-4.
|
|
869
|
-
claude_mpm-4.
|
|
870
|
-
claude_mpm-4.
|
|
886
|
+
claude_mpm-4.17.1.dist-info/licenses/LICENSE,sha256=lpaivOlPuBZW1ds05uQLJJswy8Rp_HMNieJEbFlqvLk,1072
|
|
887
|
+
claude_mpm-4.17.1.dist-info/METADATA,sha256=6V6ppc5htwPwVyXbIR4_iMxieQN8v45c-n5LBHDGH4I,20218
|
|
888
|
+
claude_mpm-4.17.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
889
|
+
claude_mpm-4.17.1.dist-info/entry_points.txt,sha256=Vlw3GNi-OtTpKSrez04iNrPmxNxYDpIWxmJCxiZ5Tx8,526
|
|
890
|
+
claude_mpm-4.17.1.dist-info/top_level.txt,sha256=1nUg3FEaBySgm8t-s54jK5zoPnu3_eY6EP6IOlekyHA,11
|
|
891
|
+
claude_mpm-4.17.1.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|