claude-mpm 4.14.6__py3-none-any.whl → 4.14.7__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/core/output_style_manager.py +12 -192
- {claude_mpm-4.14.6.dist-info → claude_mpm-4.14.7.dist-info}/METADATA +1 -1
- {claude_mpm-4.14.6.dist-info → claude_mpm-4.14.7.dist-info}/RECORD +8 -8
- {claude_mpm-4.14.6.dist-info → claude_mpm-4.14.7.dist-info}/WHEEL +0 -0
- {claude_mpm-4.14.6.dist-info → claude_mpm-4.14.7.dist-info}/entry_points.txt +0 -0
- {claude_mpm-4.14.6.dist-info → claude_mpm-4.14.7.dist-info}/licenses/LICENSE +0 -0
- {claude_mpm-4.14.6.dist-info → claude_mpm-4.14.7.dist-info}/top_level.txt +0 -0
claude_mpm/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
4.14.
|
|
1
|
+
4.14.7
|
|
@@ -160,203 +160,23 @@ class OutputStyleManager:
|
|
|
160
160
|
|
|
161
161
|
def extract_output_style_content(self, framework_loader=None) -> str:
|
|
162
162
|
"""
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
This extracts PM delegation behavior, tone, communication standards,
|
|
166
|
-
response formats, TodoWrite requirements, and workflow rules from:
|
|
167
|
-
- INSTRUCTIONS.md
|
|
168
|
-
- BASE_PM.md
|
|
163
|
+
Read output style content from OUTPUT_STYLE.md.
|
|
169
164
|
|
|
170
165
|
Args:
|
|
171
|
-
framework_loader: Optional
|
|
166
|
+
framework_loader: Optional framework loader (kept for compatibility, not used)
|
|
172
167
|
|
|
173
168
|
Returns:
|
|
174
|
-
|
|
169
|
+
Complete output style content from file
|
|
175
170
|
"""
|
|
176
|
-
#
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
)
|
|
185
|
-
sections.append("---")
|
|
186
|
-
sections.append("")
|
|
187
|
-
|
|
188
|
-
# Header
|
|
189
|
-
sections.append(
|
|
190
|
-
"You are Claude Multi-Agent PM, a PROJECT MANAGER whose SOLE PURPOSE is to delegate work to specialized agents."
|
|
191
|
-
)
|
|
192
|
-
sections.append("")
|
|
193
|
-
|
|
194
|
-
# Extract from INSTRUCTIONS.md
|
|
195
|
-
if framework_loader and framework_loader.framework_content.get(
|
|
196
|
-
"framework_instructions"
|
|
197
|
-
):
|
|
198
|
-
instructions = framework_loader.framework_content["framework_instructions"]
|
|
199
|
-
sections.extend(self._extract_instructions_sections(instructions))
|
|
200
|
-
else:
|
|
201
|
-
# Load from file if no framework_loader provided
|
|
202
|
-
instructions_path = (
|
|
203
|
-
Path(__file__).parent.parent / "agents" / "INSTRUCTIONS.md"
|
|
204
|
-
)
|
|
205
|
-
if instructions_path.exists():
|
|
206
|
-
instructions = instructions_path.read_text()
|
|
207
|
-
sections.extend(self._extract_instructions_sections(instructions))
|
|
208
|
-
|
|
209
|
-
# Extract from BASE_PM.md
|
|
210
|
-
if framework_loader and framework_loader.framework_content.get(
|
|
211
|
-
"base_pm_instructions"
|
|
212
|
-
):
|
|
213
|
-
base_pm = framework_loader.framework_content["base_pm_instructions"]
|
|
214
|
-
sections.extend(self._extract_base_pm_sections(base_pm))
|
|
215
|
-
else:
|
|
216
|
-
# Load from file if no framework_loader provided
|
|
217
|
-
base_pm_path = Path(__file__).parent.parent / "agents" / "BASE_PM.md"
|
|
218
|
-
if base_pm_path.exists():
|
|
219
|
-
base_pm = base_pm_path.read_text()
|
|
220
|
-
sections.extend(self._extract_base_pm_sections(base_pm))
|
|
221
|
-
|
|
222
|
-
return "\n".join(sections)
|
|
223
|
-
|
|
224
|
-
def _extract_instructions_sections(self, content: str) -> list:
|
|
225
|
-
"""Extract relevant sections from INSTRUCTIONS.md."""
|
|
226
|
-
sections = []
|
|
227
|
-
|
|
228
|
-
# Extract Primary Directive
|
|
229
|
-
if "## 🔴 PRIMARY DIRECTIVE" in content:
|
|
230
|
-
sections.append("## 🔴 PRIMARY DIRECTIVE - MANDATORY DELEGATION 🔴")
|
|
231
|
-
sections.append("")
|
|
232
|
-
sections.append(
|
|
233
|
-
"**YOU ARE STRICTLY FORBIDDEN FROM DOING ANY WORK DIRECTLY.**"
|
|
234
|
-
)
|
|
235
|
-
sections.append("")
|
|
236
|
-
sections.append(
|
|
237
|
-
"Direct implementation is ABSOLUTELY PROHIBITED unless the user EXPLICITLY overrides with phrases like:"
|
|
238
|
-
)
|
|
239
|
-
sections.append('- "do this yourself"')
|
|
240
|
-
sections.append('- "don\'t delegate"')
|
|
241
|
-
sections.append('- "implement directly"')
|
|
242
|
-
sections.append('- "you do it"')
|
|
243
|
-
sections.append('- "no delegation"')
|
|
244
|
-
sections.append("")
|
|
245
|
-
|
|
246
|
-
# Extract Core Identity and Rules
|
|
247
|
-
if "## Core Identity" in content:
|
|
248
|
-
sections.append("## Core Operating Rules")
|
|
249
|
-
sections.append("")
|
|
250
|
-
sections.append("**DEFAULT BEHAVIOR - ALWAYS DELEGATE**:")
|
|
251
|
-
sections.append(
|
|
252
|
-
"- 🔴 You MUST delegate 100% of ALL work to specialized agents by default"
|
|
253
|
-
)
|
|
254
|
-
sections.append(
|
|
255
|
-
"- 🔴 Direct action is STRICTLY FORBIDDEN without explicit user override"
|
|
256
|
-
)
|
|
257
|
-
sections.append(
|
|
258
|
-
"- 🔴 Even the simplest tasks MUST be delegated - NO EXCEPTIONS"
|
|
259
|
-
)
|
|
260
|
-
sections.append("- 🔴 When in doubt, ALWAYS DELEGATE - never act directly")
|
|
261
|
-
sections.append("")
|
|
262
|
-
sections.append("**Allowed Tools**:")
|
|
263
|
-
sections.append("- **Task** for delegation (YOUR PRIMARY FUNCTION)")
|
|
264
|
-
sections.append("- **TodoWrite** for tracking delegation progress ONLY")
|
|
265
|
-
sections.append(
|
|
266
|
-
"- **WebSearch/WebFetch** for gathering context BEFORE delegation"
|
|
267
|
-
)
|
|
268
|
-
sections.append(
|
|
269
|
-
"- **Direct answers** ONLY for questions about PM capabilities"
|
|
270
|
-
)
|
|
271
|
-
sections.append("")
|
|
272
|
-
|
|
273
|
-
# Extract Communication Standards
|
|
274
|
-
if "## Communication Standards" in content:
|
|
275
|
-
sections.append("## Communication Standards")
|
|
276
|
-
sections.append("")
|
|
277
|
-
sections.append("- **Tone**: Professional, neutral by default")
|
|
278
|
-
sections.append('- **Use**: "Understood", "Confirmed", "Noted"')
|
|
279
|
-
sections.append("- **No simplification** without explicit user request")
|
|
280
|
-
sections.append("- **No mocks** outside test environments")
|
|
281
|
-
sections.append("- **Complete implementations** only - no placeholders")
|
|
282
|
-
sections.append(
|
|
283
|
-
'- **FORBIDDEN**: Overeager enthusiasm ("Excellent!", "Perfect!", "Amazing!")'
|
|
284
|
-
)
|
|
285
|
-
sections.append("")
|
|
286
|
-
|
|
287
|
-
# Extract Error Handling
|
|
288
|
-
if "## Error Handling Protocol" in content:
|
|
289
|
-
sections.append("## Error Handling Protocol")
|
|
290
|
-
sections.append("")
|
|
291
|
-
sections.append("**3-Attempt Process**:")
|
|
292
|
-
sections.append("1. **First Failure**: Re-delegate with enhanced context")
|
|
293
|
-
sections.append(
|
|
294
|
-
'2. **Second Failure**: Mark "ERROR - Attempt 2/3", escalate if needed'
|
|
295
|
-
)
|
|
296
|
-
sections.append(
|
|
297
|
-
"3. **Third Failure**: TodoWrite escalation with user decision required"
|
|
298
|
-
)
|
|
299
|
-
sections.append("")
|
|
300
|
-
|
|
301
|
-
# Extract Standard Operating Procedure
|
|
302
|
-
if "## Standard Operating Procedure" in content:
|
|
303
|
-
sections.append("## Standard Operating Procedure")
|
|
304
|
-
sections.append("")
|
|
305
|
-
sections.append("1. **Analysis**: Parse request, assess context (NO TOOLS)")
|
|
306
|
-
sections.append(
|
|
307
|
-
"2. **Planning**: Agent selection, task breakdown, priority assignment"
|
|
308
|
-
)
|
|
309
|
-
sections.append("3. **Delegation**: Task Tool with enhanced format")
|
|
310
|
-
sections.append("4. **Monitoring**: Track progress via TodoWrite")
|
|
311
|
-
sections.append("5. **Integration**: Synthesize results, validate, report")
|
|
312
|
-
sections.append("")
|
|
313
|
-
|
|
314
|
-
return sections
|
|
315
|
-
|
|
316
|
-
def _extract_base_pm_sections(self, content: str) -> list:
|
|
317
|
-
"""Extract relevant sections from BASE_PM.md."""
|
|
318
|
-
sections = []
|
|
319
|
-
|
|
320
|
-
# Extract TodoWrite Requirements
|
|
321
|
-
if "## TodoWrite Framework Requirements" in content:
|
|
322
|
-
sections.append("## TodoWrite Requirements")
|
|
323
|
-
sections.append("")
|
|
324
|
-
sections.append("### Mandatory [Agent] Prefix Rules")
|
|
325
|
-
sections.append("")
|
|
326
|
-
sections.append("**ALWAYS use [Agent] prefix for delegated tasks**:")
|
|
327
|
-
sections.append("- ✅ `[Research] Analyze authentication patterns`")
|
|
328
|
-
sections.append("- ✅ `[Engineer] Implement user registration`")
|
|
329
|
-
sections.append("- ✅ `[QA] Test payment flow`")
|
|
330
|
-
sections.append("- ✅ `[Documentation] Update API docs`")
|
|
331
|
-
sections.append("")
|
|
332
|
-
sections.append("**NEVER use [PM] prefix for implementation tasks**")
|
|
333
|
-
sections.append("")
|
|
334
|
-
sections.append("### Task Status Management")
|
|
335
|
-
sections.append("")
|
|
336
|
-
sections.append("- `pending` - Task not yet started")
|
|
337
|
-
sections.append(
|
|
338
|
-
"- `in_progress` - Currently being worked on (ONE at a time)"
|
|
339
|
-
)
|
|
340
|
-
sections.append("- `completed` - Task finished successfully")
|
|
341
|
-
sections.append("")
|
|
342
|
-
|
|
343
|
-
# Extract PM Response Format
|
|
344
|
-
if "## PM Response Format" in content:
|
|
345
|
-
sections.append("## Response Format")
|
|
346
|
-
sections.append("")
|
|
347
|
-
sections.append(
|
|
348
|
-
"When completing delegations, provide structured summaries including:"
|
|
349
|
-
)
|
|
350
|
-
sections.append("- Request summary")
|
|
351
|
-
sections.append("- Agents used and task counts")
|
|
352
|
-
sections.append("- Tasks completed with [Agent] prefixes")
|
|
353
|
-
sections.append("- Files affected across all agents")
|
|
354
|
-
sections.append("- Blockers encountered and resolutions")
|
|
355
|
-
sections.append("- Next steps for user")
|
|
356
|
-
sections.append("- Key information to remember")
|
|
357
|
-
sections.append("")
|
|
358
|
-
|
|
359
|
-
return sections
|
|
171
|
+
# Always read from the complete OUTPUT_STYLE.md file
|
|
172
|
+
if self.mpm_output_style_path.exists():
|
|
173
|
+
content = self.mpm_output_style_path.read_text()
|
|
174
|
+
self.logger.info(f"Read OUTPUT_STYLE.md directly ({len(content)} chars)")
|
|
175
|
+
return content
|
|
176
|
+
# Fallback error
|
|
177
|
+
error_msg = f"OUTPUT_STYLE.md not found at {self.mpm_output_style_path}"
|
|
178
|
+
self.logger.error(error_msg)
|
|
179
|
+
raise FileNotFoundError(error_msg)
|
|
360
180
|
|
|
361
181
|
def save_output_style(self, content: str) -> Path:
|
|
362
182
|
"""
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
claude_mpm/BUILD_NUMBER,sha256=9JfxhnDtr-8l3kCP2U5TVXSErptHoga8m7XA8zqgGOc,4
|
|
2
|
-
claude_mpm/VERSION,sha256=
|
|
2
|
+
claude_mpm/VERSION,sha256=Dhy0KzLAIl8JiKL3uZ10QqWUidil24LjdoE05jrwCnk,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
|
|
@@ -204,7 +204,7 @@ claude_mpm/core/mixins.py,sha256=vmZ7Nu2ZOnKjbhN07Ixk4noIej9nsJiknrp-Sclfu0A,534
|
|
|
204
204
|
claude_mpm/core/oneshot_session.py,sha256=Dm-KJ4QQkBkRuPLgAje6b9FxftmfALQMF27-OYPpnxg,17697
|
|
205
205
|
claude_mpm/core/optimized_agent_loader.py,sha256=7TIwIF4fhGEEc60pbiI3FlhgZCmEXkWJjqzhJJxXS1o,15854
|
|
206
206
|
claude_mpm/core/optimized_startup.py,sha256=3Gpdc5qrDp803wxZesG696RqGdyFRVEq2hf4xZAssSs,15479
|
|
207
|
-
claude_mpm/core/output_style_manager.py,sha256=
|
|
207
|
+
claude_mpm/core/output_style_manager.py,sha256=PbxteVoy9n8e3vI9H5ApB5_B639j2tDbPlS913dDAU0,12592
|
|
208
208
|
claude_mpm/core/pm_hook_interceptor.py,sha256=92C8TrpK-XVQD8BiXbqs8lSCX72PU0KZG5oAjhf8GOQ,11197
|
|
209
209
|
claude_mpm/core/service_registry.py,sha256=e8DWAXoVLT09vWN5J0av1py7aHT7tDZzmskcaUgsh3s,11602
|
|
210
210
|
claude_mpm/core/session_manager.py,sha256=iEDZWKBYHSu001nFX8vFvH33RvQOW0eIgomWhFM53sw,12078
|
|
@@ -854,9 +854,9 @@ claude_mpm/utils/subprocess_utils.py,sha256=D0izRT8anjiUb_JG72zlJR_JAw1cDkb7kalN
|
|
|
854
854
|
claude_mpm/validation/__init__.py,sha256=YZhwE3mhit-lslvRLuwfX82xJ_k4haZeKmh4IWaVwtk,156
|
|
855
855
|
claude_mpm/validation/agent_validator.py,sha256=GprtAvu80VyMXcKGsK_VhYiXWA6BjKHv7O6HKx0AB9w,20917
|
|
856
856
|
claude_mpm/validation/frontmatter_validator.py,sha256=YpJlYNNYcV8u6hIOi3_jaRsDnzhbcQpjCBE6eyBKaFY,7076
|
|
857
|
-
claude_mpm-4.14.
|
|
858
|
-
claude_mpm-4.14.
|
|
859
|
-
claude_mpm-4.14.
|
|
860
|
-
claude_mpm-4.14.
|
|
861
|
-
claude_mpm-4.14.
|
|
862
|
-
claude_mpm-4.14.
|
|
857
|
+
claude_mpm-4.14.7.dist-info/licenses/LICENSE,sha256=lpaivOlPuBZW1ds05uQLJJswy8Rp_HMNieJEbFlqvLk,1072
|
|
858
|
+
claude_mpm-4.14.7.dist-info/METADATA,sha256=_MsgmAbfUpWk8_bvvMMx-djUu5iYcWMqgOiljcSv2ac,17967
|
|
859
|
+
claude_mpm-4.14.7.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
860
|
+
claude_mpm-4.14.7.dist-info/entry_points.txt,sha256=Vlw3GNi-OtTpKSrez04iNrPmxNxYDpIWxmJCxiZ5Tx8,526
|
|
861
|
+
claude_mpm-4.14.7.dist-info/top_level.txt,sha256=1nUg3FEaBySgm8t-s54jK5zoPnu3_eY6EP6IOlekyHA,11
|
|
862
|
+
claude_mpm-4.14.7.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|