claude-mpm 4.0.31__py3-none-any.whl → 4.0.32__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/agents/BASE_AGENT_TEMPLATE.md +33 -25
- claude_mpm/agents/INSTRUCTIONS.md +14 -10
- claude_mpm/core/framework_loader.py +99 -29
- claude_mpm/services/agents/deployment/agent_deployment.py +65 -2
- claude_mpm/services/agents/deployment/system_instructions_deployer.py +72 -0
- claude_mpm/services/agents/memory/agent_memory_manager.py +141 -184
- claude_mpm/services/agents/memory/content_manager.py +83 -126
- claude_mpm/services/agents/memory/template_generator.py +4 -40
- {claude_mpm-4.0.31.dist-info → claude_mpm-4.0.32.dist-info}/METADATA +1 -1
- {claude_mpm-4.0.31.dist-info → claude_mpm-4.0.32.dist-info}/RECORD +14 -14
- {claude_mpm-4.0.31.dist-info → claude_mpm-4.0.32.dist-info}/WHEEL +0 -0
- {claude_mpm-4.0.31.dist-info → claude_mpm-4.0.32.dist-info}/entry_points.txt +0 -0
- {claude_mpm-4.0.31.dist-info → claude_mpm-4.0.32.dist-info}/licenses/LICENSE +0 -0
- {claude_mpm-4.0.31.dist-info → claude_mpm-4.0.32.dist-info}/top_level.txt +0 -0
|
@@ -24,16 +24,9 @@ class MemoryContentManager:
|
|
|
24
24
|
|
|
25
25
|
WHY: Memory content requires careful manipulation to maintain structure,
|
|
26
26
|
enforce limits, and ensure consistency. This class centralizes all content
|
|
27
|
-
manipulation logic.
|
|
27
|
+
manipulation logic for simple list-based memories.
|
|
28
28
|
"""
|
|
29
29
|
|
|
30
|
-
REQUIRED_SECTIONS = [
|
|
31
|
-
"Project Architecture",
|
|
32
|
-
"Implementation Guidelines",
|
|
33
|
-
"Common Mistakes to Avoid",
|
|
34
|
-
"Current Technical Context",
|
|
35
|
-
]
|
|
36
|
-
|
|
37
30
|
def __init__(self, memory_limits: Dict[str, Any]):
|
|
38
31
|
"""Initialize the content manager.
|
|
39
32
|
|
|
@@ -43,41 +36,21 @@ class MemoryContentManager:
|
|
|
43
36
|
self.memory_limits = memory_limits
|
|
44
37
|
self.logger = logging.getLogger(f"{__name__}.{self.__class__.__name__}")
|
|
45
38
|
|
|
46
|
-
def
|
|
47
|
-
"""Add item to
|
|
39
|
+
def add_item_to_list(self, content: str, new_item: str) -> str:
|
|
40
|
+
"""Add item to memory list with deduplication.
|
|
48
41
|
|
|
49
|
-
WHY:
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
When similar items are found (>80% similarity), the newer item replaces the
|
|
53
|
-
older one to maintain recency while avoiding redundancy.
|
|
42
|
+
WHY: Simplified memory system uses a simple list format. We still use
|
|
43
|
+
NLP-based similarity detection to prevent duplicate or highly similar
|
|
44
|
+
items from cluttering the memory.
|
|
54
45
|
|
|
55
46
|
Args:
|
|
56
47
|
content: Current memory file content
|
|
57
|
-
section: Section name to add item to
|
|
58
48
|
new_item: Item to add
|
|
59
49
|
|
|
60
50
|
Returns:
|
|
61
51
|
str: Updated content with new item added and duplicates removed
|
|
62
52
|
"""
|
|
63
53
|
lines = content.split("\n")
|
|
64
|
-
section_start = None
|
|
65
|
-
section_end = None
|
|
66
|
-
|
|
67
|
-
# Find section boundaries
|
|
68
|
-
for i, line in enumerate(lines):
|
|
69
|
-
if line.startswith(f"## {section}"):
|
|
70
|
-
section_start = i
|
|
71
|
-
elif section_start is not None and line.startswith("## "):
|
|
72
|
-
section_end = i
|
|
73
|
-
break
|
|
74
|
-
|
|
75
|
-
if section_start is None:
|
|
76
|
-
# Section doesn't exist, add it
|
|
77
|
-
return self._add_new_section(content, section, new_item)
|
|
78
|
-
|
|
79
|
-
if section_end is None:
|
|
80
|
-
section_end = len(lines)
|
|
81
54
|
|
|
82
55
|
# Ensure line length limit (account for "- " prefix)
|
|
83
56
|
max_item_length = (
|
|
@@ -86,11 +59,13 @@ class MemoryContentManager:
|
|
|
86
59
|
if len(new_item) > max_item_length:
|
|
87
60
|
new_item = new_item[: max_item_length - 3] + "..."
|
|
88
61
|
|
|
89
|
-
#
|
|
62
|
+
# Find existing items and check for duplicates
|
|
90
63
|
items_to_remove = []
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
64
|
+
item_indices = []
|
|
65
|
+
for i, line in enumerate(lines):
|
|
66
|
+
if line.strip().startswith("- "):
|
|
67
|
+
item_indices.append(i)
|
|
68
|
+
existing_item = line.strip()[2:] # Remove "- " prefix
|
|
94
69
|
similarity = self._calculate_similarity(existing_item, new_item)
|
|
95
70
|
|
|
96
71
|
# If highly similar (>80%), mark for removal
|
|
@@ -104,77 +79,45 @@ class MemoryContentManager:
|
|
|
104
79
|
# Remove similar items (in reverse order to maintain indices)
|
|
105
80
|
for idx in reversed(items_to_remove):
|
|
106
81
|
lines.pop(idx)
|
|
107
|
-
section_end -= 1
|
|
108
82
|
|
|
109
|
-
# Count remaining items
|
|
110
|
-
item_count =
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
# Remove oldest item (first one) to make room
|
|
121
|
-
if first_item_index is not None:
|
|
122
|
-
lines.pop(first_item_index)
|
|
123
|
-
section_end -= 1 # Adjust section end after removal
|
|
124
|
-
|
|
125
|
-
# Add new item (find insertion point after any comments)
|
|
126
|
-
insert_point = section_start + 1
|
|
127
|
-
while insert_point < section_end and (
|
|
128
|
-
not lines[insert_point].strip()
|
|
129
|
-
or lines[insert_point].strip().startswith("<!--")
|
|
130
|
-
):
|
|
131
|
-
insert_point += 1
|
|
83
|
+
# Count remaining items
|
|
84
|
+
item_count = sum(1 for line in lines if line.strip().startswith("- "))
|
|
85
|
+
|
|
86
|
+
# Check if we need to remove oldest item due to limits
|
|
87
|
+
max_items = self.memory_limits.get("max_items", 100)
|
|
88
|
+
if item_count >= max_items:
|
|
89
|
+
# Find and remove the first item (oldest)
|
|
90
|
+
for i, line in enumerate(lines):
|
|
91
|
+
if line.strip().startswith("- "):
|
|
92
|
+
lines.pop(i)
|
|
93
|
+
break
|
|
132
94
|
|
|
95
|
+
# Add new item at the end of the list
|
|
96
|
+
# Find the insertion point (after header and metadata, before any trailing empty lines)
|
|
97
|
+
insert_point = len(lines)
|
|
98
|
+
for i in range(len(lines) - 1, -1, -1):
|
|
99
|
+
if lines[i].strip():
|
|
100
|
+
insert_point = i + 1
|
|
101
|
+
break
|
|
102
|
+
|
|
133
103
|
lines.insert(insert_point, f"- {new_item}")
|
|
134
104
|
|
|
135
105
|
# Update timestamp
|
|
136
106
|
updated_content = "\n".join(lines)
|
|
137
107
|
return self.update_timestamp(updated_content)
|
|
138
108
|
|
|
139
|
-
def
|
|
140
|
-
"""
|
|
141
|
-
|
|
142
|
-
WHY: When agents discover learnings that don't fit existing sections,
|
|
143
|
-
we need to create new sections dynamically while respecting the maximum
|
|
144
|
-
section limit.
|
|
145
|
-
|
|
109
|
+
def add_item_to_section(self, content: str, section: str, new_item: str) -> str:
|
|
110
|
+
"""Legacy method for backward compatibility - delegates to add_item_to_list.
|
|
111
|
+
|
|
146
112
|
Args:
|
|
147
|
-
content: Current memory content
|
|
148
|
-
section:
|
|
149
|
-
new_item:
|
|
150
|
-
|
|
113
|
+
content: Current memory file content
|
|
114
|
+
section: Section name (ignored in simple list format)
|
|
115
|
+
new_item: Item to add
|
|
116
|
+
|
|
151
117
|
Returns:
|
|
152
|
-
str: Updated content with new
|
|
118
|
+
str: Updated content with new item added
|
|
153
119
|
"""
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
# Count existing sections
|
|
157
|
-
section_count = sum(1 for line in lines if line.startswith("## "))
|
|
158
|
-
|
|
159
|
-
if section_count >= self.memory_limits["max_sections"]:
|
|
160
|
-
self.logger.warning(f"Maximum sections reached, cannot add '{section}'")
|
|
161
|
-
# Try to add to Recent Learnings instead
|
|
162
|
-
return self.add_item_to_section(content, "Recent Learnings", new_item)
|
|
163
|
-
|
|
164
|
-
# Find insertion point (before Recent Learnings or at end)
|
|
165
|
-
insert_point = len(lines)
|
|
166
|
-
for i, line in enumerate(lines):
|
|
167
|
-
if line.startswith("## Recent Learnings"):
|
|
168
|
-
insert_point = i
|
|
169
|
-
break
|
|
170
|
-
|
|
171
|
-
# Insert new section
|
|
172
|
-
new_section = ["", f"## {section}", f"- {new_item}", ""]
|
|
173
|
-
|
|
174
|
-
for j, line in enumerate(new_section):
|
|
175
|
-
lines.insert(insert_point + j, line)
|
|
176
|
-
|
|
177
|
-
return "\n".join(lines)
|
|
120
|
+
return self.add_item_to_list(content, new_item)
|
|
178
121
|
|
|
179
122
|
def exceeds_limits(
|
|
180
123
|
self, content: str, agent_limits: Optional[Dict[str, Any]] = None
|
|
@@ -193,15 +136,13 @@ class MemoryContentManager:
|
|
|
193
136
|
size_kb = len(content.encode("utf-8")) / 1024
|
|
194
137
|
return size_kb > limits["max_file_size_kb"]
|
|
195
138
|
|
|
196
|
-
def
|
|
139
|
+
def truncate_simple_list(
|
|
197
140
|
self, content: str, agent_limits: Optional[Dict[str, Any]] = None
|
|
198
141
|
) -> str:
|
|
199
|
-
"""Truncate content to fit within limits.
|
|
142
|
+
"""Truncate simple list content to fit within limits.
|
|
200
143
|
|
|
201
|
-
WHY: When memory files exceed size limits, we
|
|
202
|
-
|
|
203
|
-
removes items from "Recent Learnings" first as they're typically less
|
|
204
|
-
consolidated than other sections.
|
|
144
|
+
WHY: When memory files exceed size limits, we remove oldest items
|
|
145
|
+
(from the beginning of the list) to maintain the most recent learnings.
|
|
205
146
|
|
|
206
147
|
Args:
|
|
207
148
|
content: Content to truncate
|
|
@@ -213,37 +154,45 @@ class MemoryContentManager:
|
|
|
213
154
|
lines = content.split("\n")
|
|
214
155
|
limits = agent_limits or self.memory_limits
|
|
215
156
|
|
|
216
|
-
# Strategy: Remove items from
|
|
157
|
+
# Strategy: Remove oldest items (from beginning) to keep recent ones
|
|
217
158
|
while self.exceeds_limits("\n".join(lines), agent_limits):
|
|
218
159
|
removed = False
|
|
219
160
|
|
|
220
|
-
#
|
|
161
|
+
# Find and remove the first item (oldest)
|
|
221
162
|
for i, line in enumerate(lines):
|
|
222
|
-
if line.startswith("
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
if lines[j].strip().startswith("- "):
|
|
226
|
-
lines.pop(j)
|
|
227
|
-
removed = True
|
|
228
|
-
break
|
|
229
|
-
elif lines[j].startswith("## "):
|
|
230
|
-
break
|
|
163
|
+
if line.strip().startswith("- "):
|
|
164
|
+
lines.pop(i)
|
|
165
|
+
removed = True
|
|
231
166
|
break
|
|
232
167
|
|
|
233
|
-
# If no Recent Learnings items, remove from other sections
|
|
234
|
-
if not removed:
|
|
235
|
-
# Remove from sections in reverse order (bottom up)
|
|
236
|
-
for i in range(len(lines) - 1, -1, -1):
|
|
237
|
-
if lines[i].strip().startswith("- "):
|
|
238
|
-
lines.pop(i)
|
|
239
|
-
removed = True
|
|
240
|
-
break
|
|
241
|
-
|
|
242
168
|
# Safety: If nothing removed, truncate from end
|
|
243
169
|
if not removed:
|
|
244
170
|
lines = lines[:-10]
|
|
245
171
|
|
|
172
|
+
# Also check max_items limit
|
|
173
|
+
max_items = limits.get("max_items", 100)
|
|
174
|
+
item_count = sum(1 for line in lines if line.strip().startswith("- "))
|
|
175
|
+
|
|
176
|
+
if item_count > max_items:
|
|
177
|
+
# Remove oldest items to fit within max_items
|
|
178
|
+
items_removed = 0
|
|
179
|
+
target_removals = item_count - max_items
|
|
180
|
+
|
|
181
|
+
i = 0
|
|
182
|
+
while i < len(lines) and items_removed < target_removals:
|
|
183
|
+
if lines[i].strip().startswith("- "):
|
|
184
|
+
lines.pop(i)
|
|
185
|
+
items_removed += 1
|
|
186
|
+
else:
|
|
187
|
+
i += 1
|
|
188
|
+
|
|
246
189
|
return "\n".join(lines)
|
|
190
|
+
|
|
191
|
+
def truncate_to_limits(
|
|
192
|
+
self, content: str, agent_limits: Optional[Dict[str, Any]] = None
|
|
193
|
+
) -> str:
|
|
194
|
+
"""Legacy method for backward compatibility - delegates to truncate_simple_list."""
|
|
195
|
+
return self.truncate_simple_list(content, agent_limits)
|
|
247
196
|
|
|
248
197
|
def update_timestamp(self, content: str) -> str:
|
|
249
198
|
"""Update the timestamp in the file header.
|
|
@@ -254,12 +203,20 @@ class MemoryContentManager:
|
|
|
254
203
|
Returns:
|
|
255
204
|
str: Content with updated timestamp
|
|
256
205
|
"""
|
|
257
|
-
timestamp = datetime.now().
|
|
258
|
-
|
|
206
|
+
timestamp = datetime.now().isoformat() + "Z"
|
|
207
|
+
# Handle both old and new timestamp formats
|
|
208
|
+
content = re.sub(
|
|
209
|
+
r"<!-- Last Updated: .+? -->",
|
|
210
|
+
f"<!-- Last Updated: {timestamp} -->",
|
|
211
|
+
content,
|
|
212
|
+
)
|
|
213
|
+
# Also handle legacy format
|
|
214
|
+
content = re.sub(
|
|
259
215
|
r"<!-- Last Updated: .+ \| Auto-updated by: .+ -->",
|
|
260
|
-
f"<!-- Last Updated: {timestamp}
|
|
216
|
+
f"<!-- Last Updated: {timestamp} -->",
|
|
261
217
|
content,
|
|
262
218
|
)
|
|
219
|
+
return content
|
|
263
220
|
|
|
264
221
|
def validate_and_repair(self, content: str, agent_id: str) -> str:
|
|
265
222
|
"""Validate memory file and repair if needed.
|
|
@@ -68,7 +68,7 @@ class MemoryTemplateGenerator:
|
|
|
68
68
|
def _create_basic_memory_template(
|
|
69
69
|
self, agent_id: str, limits: Dict[str, Any]
|
|
70
70
|
) -> str:
|
|
71
|
-
"""Create basic memory template
|
|
71
|
+
"""Create basic memory template as a simple list.
|
|
72
72
|
|
|
73
73
|
Args:
|
|
74
74
|
agent_id: The agent identifier
|
|
@@ -77,45 +77,9 @@ class MemoryTemplateGenerator:
|
|
|
77
77
|
Returns:
|
|
78
78
|
str: Basic memory template
|
|
79
79
|
"""
|
|
80
|
-
|
|
81
|
-
project_name = self.working_directory.name
|
|
82
|
-
timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
|
83
|
-
|
|
84
|
-
return f"""# {agent_name} Agent Memory - {project_name}
|
|
85
|
-
|
|
86
|
-
<!-- MEMORY LIMITS: {limits['max_file_size_kb']}KB max | {limits['max_sections']} sections max | {limits['max_items_per_section']} items per section -->
|
|
87
|
-
<!-- Last Updated: {timestamp} | Auto-updated by: {agent_id} -->
|
|
88
|
-
|
|
89
|
-
## Project Context
|
|
90
|
-
{project_name}: Software project requiring analysis
|
|
91
|
-
|
|
92
|
-
## Project Architecture
|
|
93
|
-
- Analyze project structure to understand architecture patterns
|
|
94
|
-
|
|
95
|
-
## Coding Patterns Learned
|
|
96
|
-
- Observe codebase patterns and conventions during tasks
|
|
97
|
-
|
|
98
|
-
## Implementation Guidelines
|
|
99
|
-
- Extract implementation guidelines from project documentation
|
|
100
|
-
|
|
101
|
-
## Domain-Specific Knowledge
|
|
102
|
-
<!-- Agent-specific knowledge accumulates here -->
|
|
103
|
-
|
|
104
|
-
## Effective Strategies
|
|
105
|
-
<!-- Successful approaches discovered through experience -->
|
|
106
|
-
|
|
107
|
-
## Common Mistakes to Avoid
|
|
108
|
-
- Learn from errors encountered during project work
|
|
109
|
-
|
|
110
|
-
## Integration Points
|
|
111
|
-
<!-- Key interfaces and integration patterns -->
|
|
112
|
-
|
|
113
|
-
## Performance Considerations
|
|
114
|
-
<!-- Performance insights and optimization patterns -->
|
|
80
|
+
timestamp = datetime.now().isoformat() + "Z"
|
|
115
81
|
|
|
116
|
-
|
|
117
|
-
|
|
82
|
+
return f"""# Agent Memory: {agent_id}
|
|
83
|
+
<!-- Last Updated: {timestamp} -->
|
|
118
84
|
|
|
119
|
-
## Recent Learnings
|
|
120
|
-
<!-- Most recent discoveries and insights -->
|
|
121
85
|
"""
|
|
@@ -5,9 +5,9 @@ claude_mpm/__main__.py,sha256=_kaecmtouDenx_-wueUULnTxu8LirJEerzXIHiKMgew,723
|
|
|
5
5
|
claude_mpm/constants.py,sha256=zwu1-qg-FAWyViUIKiTvYHGtgz6ABLDDrhmLiMMhOyc,5677
|
|
6
6
|
claude_mpm/init.py,sha256=n2W1sBtGUOod2XSMbiYZsqucvQUMuxf0ZudzeQjFv7E,15209
|
|
7
7
|
claude_mpm/ticket_wrapper.py,sha256=qe5xY579t7_7fK5nyeAfHN_fr7CXdeOD3jfXEc8-7yo,828
|
|
8
|
-
claude_mpm/agents/BASE_AGENT_TEMPLATE.md,sha256
|
|
8
|
+
claude_mpm/agents/BASE_AGENT_TEMPLATE.md,sha256=r3EZA186PH7IAPaHsLc3aF3WmB5nwkz207lbAOVwRTA,5965
|
|
9
9
|
claude_mpm/agents/BASE_PM.md,sha256=SxItl7GEYhrp-rTXi3todB-vcMCpiBchfzieBlFI0w8,8479
|
|
10
|
-
claude_mpm/agents/INSTRUCTIONS.md,sha256=
|
|
10
|
+
claude_mpm/agents/INSTRUCTIONS.md,sha256=AvpRqSJZiFhZDKx2bJVvYgeG4gdUDRgO8sqNJNnoHjI,13917
|
|
11
11
|
claude_mpm/agents/MEMORY.md,sha256=zzwq4ytOrRaj64iq1q7brC6WOCQ4PDDC75TTRT8QudA,3493
|
|
12
12
|
claude_mpm/agents/OUTPUT_STYLE.md,sha256=iX1vX81PnCq8N92v95hWbvaUfg3JZ2qpGJYfCG97r0c,2854
|
|
13
13
|
claude_mpm/agents/WORKFLOW.md,sha256=pZPdOzmu4jEredvA4MC_rcEoW4zo5kvOT2174i0Pmzs,18527
|
|
@@ -118,7 +118,7 @@ claude_mpm/core/constants.py,sha256=ElBw5FVC2EDce7y1Qcrux75y3ZlCb9HwyJLfePYEO7s,
|
|
|
118
118
|
claude_mpm/core/container.py,sha256=3FsdjUXTpQgOZV2BuxvH8sZHg_459EslMw_rO65Ch0E,32327
|
|
119
119
|
claude_mpm/core/exceptions.py,sha256=lNVLqVuRjygHe89NJg1rPAyevVdzpLOKgHFMQtGSxdA,19654
|
|
120
120
|
claude_mpm/core/factories.py,sha256=A7WcjYWjhkc-tzUnef0YaW0Jj8oxMP-7_g2jIj1XYa8,7265
|
|
121
|
-
claude_mpm/core/framework_loader.py,sha256=
|
|
121
|
+
claude_mpm/core/framework_loader.py,sha256=t8gzs4NZBM3Q7G83uS8Dh60M_HHxah4eGyD-uFNMtIM,76510
|
|
122
122
|
claude_mpm/core/hook_manager.py,sha256=N-54QwNsyrUZSrH533HAo6hlJKPFbgMeDirg92H8en8,11014
|
|
123
123
|
claude_mpm/core/hook_performance_config.py,sha256=Cqf-89mjiLlFJ-v4PhxfzsaOVovYYQa5pa-RMm42Ki8,5748
|
|
124
124
|
claude_mpm/core/injectable_service.py,sha256=HXuviYX-h0sNxOFzgZiYjf-gLDUnQIeG-0-KuWdfCzk,7397
|
|
@@ -251,7 +251,7 @@ claude_mpm/services/agents/deployment/__init__.py,sha256=d9l1uaf-G7v_mCxcz8OUQMF
|
|
|
251
251
|
claude_mpm/services/agents/deployment/agent_config_provider.py,sha256=iH_N4Qi7gq_Pc4OYqsnaaX5KPVMlJ2dYkQS_PEVmLtY,13312
|
|
252
252
|
claude_mpm/services/agents/deployment/agent_configuration_manager.py,sha256=VhwSYX1wYYnSQqfqmCpy9goPJ9f2eEA2_DFrdwtO7j4,12180
|
|
253
253
|
claude_mpm/services/agents/deployment/agent_definition_factory.py,sha256=izcjZGLznts8khXD8wLViUbk_kPhnrqucLHFdfap_8c,2754
|
|
254
|
-
claude_mpm/services/agents/deployment/agent_deployment.py,sha256=
|
|
254
|
+
claude_mpm/services/agents/deployment/agent_deployment.py,sha256=7yeap4GN6DB3yUGamSG-RZG7Zh2--Td4I8-LvIK3yUo,51888
|
|
255
255
|
claude_mpm/services/agents/deployment/agent_discovery_service.py,sha256=0z1y1OXZUt2vJEmY0RCD0KSvSiG7KkpqT68wVVfNEDY,13438
|
|
256
256
|
claude_mpm/services/agents/deployment/agent_environment_manager.py,sha256=Tx-fqnRmd-XV8goqUv3M6dtfthc98hrh7-Xcvs3QKYU,9936
|
|
257
257
|
claude_mpm/services/agents/deployment/agent_filesystem_manager.py,sha256=dKDsweubspi-x0X97ah_Ffw1LRPWttD2JKtryrwhjhw,13004
|
|
@@ -274,7 +274,7 @@ claude_mpm/services/agents/deployment/lifecycle_health_checker.py,sha256=2dphAvY
|
|
|
274
274
|
claude_mpm/services/agents/deployment/lifecycle_performance_tracker.py,sha256=lK_yg0uRL55opUoecOJBL83Tjj6Pu_z4-4EYWPeN6tM,4336
|
|
275
275
|
claude_mpm/services/agents/deployment/multi_source_deployment_service.py,sha256=UD27Ry1NUXpQIMb2VqVMtbLLvcc1WOHqtKhtaN093vg,22294
|
|
276
276
|
claude_mpm/services/agents/deployment/refactored_agent_deployment_service.py,sha256=3EUb6rDe7FooDLM8TxMgefM0UE90MGhy0PmhKQXvTSA,11892
|
|
277
|
-
claude_mpm/services/agents/deployment/system_instructions_deployer.py,sha256=
|
|
277
|
+
claude_mpm/services/agents/deployment/system_instructions_deployer.py,sha256=wpXPl0XhWmpoOOlFPz_I8vlWiwqMNrdeot0PpScR3zA,7318
|
|
278
278
|
claude_mpm/services/agents/deployment/config/__init__.py,sha256=dpyC_WlQWlaOne9VVF0KXzoEO0Davt02bjfk1AJv2jk,397
|
|
279
279
|
claude_mpm/services/agents/deployment/config/deployment_config.py,sha256=UXWWjzVD6SFVgHxH0mku3oOnhvoTbpqVUuyc_TjvMOo,6429
|
|
280
280
|
claude_mpm/services/agents/deployment/config/deployment_config_manager.py,sha256=XjW8tlEIxOT0t5qoR6ddL4zWMvcD_ckVLmCT8AvxMhU,7255
|
|
@@ -319,10 +319,10 @@ claude_mpm/services/agents/management/__init__.py,sha256=dZcFI9EBajH2KbCoNQWAFQ0
|
|
|
319
319
|
claude_mpm/services/agents/management/agent_capabilities_generator.py,sha256=2j5yoyCXhsK41Bpr8gDAS6jXKhTI_lyYPkTa2djPls4,7002
|
|
320
320
|
claude_mpm/services/agents/management/agent_management_service.py,sha256=ek8qGMHqyAb2kks4GG0GpS123dl-zyhRas9pnn6fUy8,23027
|
|
321
321
|
claude_mpm/services/agents/memory/__init__.py,sha256=V7Sgx3ISF--XN2pJzk_XduOHxWNxZ0I2H9xOTsV46K8,608
|
|
322
|
-
claude_mpm/services/agents/memory/agent_memory_manager.py,sha256=
|
|
322
|
+
claude_mpm/services/agents/memory/agent_memory_manager.py,sha256=Bs6_-pKDu_Ju29JJi5mHSuvDZLBxNEPiQO0_z69ppxo,46697
|
|
323
323
|
claude_mpm/services/agents/memory/agent_persistence_service.py,sha256=mx67hEZtpMG-fom_qUvOL0U8HSWam1F55LJj4g4k3nw,2783
|
|
324
|
-
claude_mpm/services/agents/memory/content_manager.py,sha256=
|
|
325
|
-
claude_mpm/services/agents/memory/template_generator.py,sha256=
|
|
324
|
+
claude_mpm/services/agents/memory/content_manager.py,sha256=NoCpUJT4yOx6T6d4ksUo94nX1BvdrnZ0WBwOPKiThZc,16926
|
|
325
|
+
claude_mpm/services/agents/memory/template_generator.py,sha256=ZeXA6r2P4srQb2Frl7HX9Ifgza0OU3im2q4yNMmhXcU,2592
|
|
326
326
|
claude_mpm/services/agents/registry/__init__.py,sha256=88IdNug1aq52Vc-Uc2zQsbuOOvPawN-zFzQqoPmEVVQ,710
|
|
327
327
|
claude_mpm/services/agents/registry/deployed_agent_discovery.py,sha256=XKN0A6MxW8NhILRt8dSPFVkNDkrAJDhmhumB_-5Dy0I,10274
|
|
328
328
|
claude_mpm/services/agents/registry/modification_tracker.py,sha256=iSzt92HpXkkwigrM6yuq7J1wer43fhfWsnabFGB10e4,34053
|
|
@@ -460,9 +460,9 @@ claude_mpm/utils/subprocess_utils.py,sha256=e74VlIPozCljZss_0SwLO3J1ZuIKRT9FrrFi
|
|
|
460
460
|
claude_mpm/validation/__init__.py,sha256=YZhwE3mhit-lslvRLuwfX82xJ_k4haZeKmh4IWaVwtk,156
|
|
461
461
|
claude_mpm/validation/agent_validator.py,sha256=szbK9d29v_T6xE_KvW845WLKXbS_yYpXQscrSrSeldI,20937
|
|
462
462
|
claude_mpm/validation/frontmatter_validator.py,sha256=hFhKnSvlYuYT91lPDxX9V6ICm05MBJw85coZpkL1o1g,7033
|
|
463
|
-
claude_mpm-4.0.
|
|
464
|
-
claude_mpm-4.0.
|
|
465
|
-
claude_mpm-4.0.
|
|
466
|
-
claude_mpm-4.0.
|
|
467
|
-
claude_mpm-4.0.
|
|
468
|
-
claude_mpm-4.0.
|
|
463
|
+
claude_mpm-4.0.32.dist-info/licenses/LICENSE,sha256=lpaivOlPuBZW1ds05uQLJJswy8Rp_HMNieJEbFlqvLk,1072
|
|
464
|
+
claude_mpm-4.0.32.dist-info/METADATA,sha256=h7icJvuwGLeCtfSME71RrTVPP7TsFjMIjuNHaja7XGk,12360
|
|
465
|
+
claude_mpm-4.0.32.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
466
|
+
claude_mpm-4.0.32.dist-info/entry_points.txt,sha256=FDPZgz8JOvD-6iuXY2l9Zbo9zYVRuE4uz4Qr0vLeGOk,471
|
|
467
|
+
claude_mpm-4.0.32.dist-info/top_level.txt,sha256=1nUg3FEaBySgm8t-s54jK5zoPnu3_eY6EP6IOlekyHA,11
|
|
468
|
+
claude_mpm-4.0.32.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|