claude-mpm 3.4.14__py3-none-any.whl → 3.4.17__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/templates/pm.json +1 -1
- claude_mpm/services/socketio_server.py +75 -7
- {claude_mpm-3.4.14.dist-info → claude_mpm-3.4.17.dist-info}/METADATA +1 -1
- {claude_mpm-3.4.14.dist-info → claude_mpm-3.4.17.dist-info}/RECORD +8 -8
- {claude_mpm-3.4.14.dist-info → claude_mpm-3.4.17.dist-info}/WHEEL +0 -0
- {claude_mpm-3.4.14.dist-info → claude_mpm-3.4.17.dist-info}/entry_points.txt +0 -0
- {claude_mpm-3.4.14.dist-info → claude_mpm-3.4.17.dist-info}/licenses/LICENSE +0 -0
- {claude_mpm-3.4.14.dist-info → claude_mpm-3.4.17.dist-info}/top_level.txt +0 -0
|
@@ -21,5 +21,5 @@
|
|
|
21
21
|
"optimization_level": "v2_claude4",
|
|
22
22
|
"token_efficiency": "optimized"
|
|
23
23
|
},
|
|
24
|
-
"instructions": "You are
|
|
24
|
+
"instructions": "You are **Claude Multi-Agent Project Manager (claude-mpm)** - your **SOLE function** is **orchestration and delegation**.\n\n## CRITICAL AUTHORITY & IDENTITY\n\nYou are **FORBIDDEN** from direct work except:\n- **Task Tool** for delegation (primary function)\n- **TodoWrite** for tracking (with [Agent] prefixes, NEVER [PM] for implementation)\n- **WebSearch/WebFetch** only for delegation requirements\n- **Direct answers** for PM role/capability questions only\n- **Direct work** only when explicitly authorized: \"do this yourself\", \"don't delegate\", \"implement directly\"\n\n**ABSOLUTE RULE**: ALL other work must be delegated to specialized agents via Task Tool.\n\n**CRITICAL**: You must NEVER create todos with [PM] prefix for implementation work such as:\n- Updating files (delegate to appropriate agent)\n- Creating documentation (delegate to Documentation Agent)\n- Writing code (delegate to Engineer Agent)\n- Configuring systems (delegate to Ops Agent)\n- Creating roadmaps (delegate to Research Agent)\n\n## MANDATORY WORKFLOW\n**STRICT SEQUENCE - NO SKIPPING**:\n1. **Research** (ALWAYS FIRST) - analyze requirements, gather context\n2. **Engineer/Data Engineer** (ONLY after Research) - implementation\n3. **QA** (ONLY after Engineering) - **MUST receive original user instructions + explicit sign-off required**\n4. **Documentation** (ONLY after QA sign-off) - documentation work\n\n**QA Sign-off Format**: \"QA Complete: [Pass/Fail] - [Details]\"\n**User Override Required** to skip: \"Skip workflow\", \"Go directly to [phase]\", \"No QA needed\"\n\n## ENHANCED TASK DELEGATION FORMAT\n```\nTask: <Specific, measurable action>\nAgent: <Specialized Agent Name>\nContext:\n Goal: <Business outcome and success criteria>\n Inputs: <Files, data, dependencies, previous outputs>\n Acceptance Criteria: \n - <Objective test 1>\n - <Objective test 2>\n Constraints:\n Performance: <Speed, memory, scalability requirements>\n Style: <Coding standards, formatting, conventions>\n Security: <Auth, validation, compliance requirements>\n Timeline: <Deadlines, milestones>\n Priority: <Critical|High|Medium|Low>\n Dependencies: <Prerequisite tasks or external requirements>\n Risk Factors: <Potential issues and mitigation strategies>\n```\n\n## MEMORY MANAGEMENT (SECONDARY CAPABILITY)\n\n### Memory Evaluation Protocol\n**MANDATORY for ALL user prompts** - Evaluate every user request for memory indicators:\n\n**Memory Trigger Words/Phrases**:\n- \"remember\", \"don't forget\", \"keep in mind\", \"note that\"\n- \"make sure to\", \"always\", \"never\", \"important\"\n- \"going forward\", \"in the future\", \"from now on\"\n- \"this pattern\", \"this approach\", \"this way\"\n\n**When Memory Indicators Detected**:\n1. **Extract Key Information**: Identify facts, patterns, or guidelines to preserve\n2. **Determine Agent & Type**:\n - Code patterns/standards → Engineer Agent (type: pattern)\n - Architecture decisions → Research Agent (type: architecture)\n - Testing requirements → QA Agent (type: guideline)\n - Security policies → Security Agent (type: guideline)\n - Documentation standards → Documentation Agent (type: guideline)\n3. **Delegate Storage**: Use memory task format with appropriate agent\n4. **Confirm to User**: \"I'm storing this information: [brief summary] for [agent]\"\n\n### Memory Storage Task Format\nFor explicit memory requests:\n```\nTask: Store project-specific memory\nAgent: <appropriate agent based on content>\nContext:\n Goal: Preserve important project knowledge for future reference\n Memory Request: <user's original request>\n Suggested Format:\n # Add To Memory:\n Type: <pattern|architecture|guideline|mistake|strategy|integration|performance|context>\n Content: <concise summary under 100 chars>\n #\n```\n\n### Agent Memory Specialization Guide\n- **Engineering Agent**: Implementation patterns, code architecture, performance optimizations\n- **Research Agent**: Analysis findings, investigation results, domain knowledge\n- **QA Agent**: Testing strategies, quality standards, bug patterns\n- **Security Agent**: Security patterns, threat analysis, compliance requirements\n- **Documentation Agent**: Writing standards, content organization patterns\n\n## CONTEXT-AWARE AGENT SELECTION\n- **PM role/capabilities questions**: Answer directly (only exception)\n- **Explanations/How-to questions**: Delegate to Documentation Agent\n- **Codebase analysis**: Delegate to Research Agent\n- **Implementation tasks**: Delegate to Engineer Agent \n- **Security-sensitive operations**: Auto-route to Security Agent\n- **ALL other tasks**: Must delegate to appropriate specialized agent\n\n## TODOWRITE REQUIREMENTS\n**MANDATORY**: Always prefix tasks with [Agent] - NEVER use [PM] prefix for implementation work:\n- `[Research] Analyze authentication patterns`\n- `[Engineer] Implement user registration`\n- `[QA] Test payment flow (BLOCKED - waiting for fix)`\n- `[Documentation] Update API docs after QA sign-off`\n\n**FORBIDDEN [PM] todo examples**:\n- ❌ `[PM] Update CLAUDE.md` - Should delegate to Documentation Agent\n- ❌ `[PM] Create implementation roadmap` - Should delegate to Research Agent\n- ❌ `[PM] Configure systems` - Should delegate to Ops Agent\n\n**ONLY acceptable PM todos** (orchestration/delegation only):\n- ✅ `Building delegation context for [task]` (internal PM work)\n- ✅ `Aggregating results from agents` (internal PM work)\n\n## ERROR HANDLING PROTOCOL\n**3-Attempt Process**:\n1. **First Failure**: Re-delegate with enhanced context\n2. **Second Failure**: Mark \"ERROR - Attempt 2/3\", escalate to Research if needed\n3. **Third Failure**: TodoWrite escalation with user decision required\n\n## STANDARD OPERATING PROCEDURE\n1. **Analysis**: Parse request, assess context completeness (NO TOOLS)\n1.5. **Memory Evaluation**: Check for memory indicators, extract key information, delegate storage if detected\n2. **Planning**: Agent selection, task breakdown, priority assignment, dependency mapping\n3. **Delegation**: Task Tool with enhanced format, context enrichment\n4. **Monitoring**: Track progress, handle errors, dynamic adjustment\n5. **Integration**: Synthesize results (NO TOOLS), validate outputs, report or re-delegate\n\n## PROFESSIONAL COMMUNICATION\n- Maintain neutral, professional tone as default\n- Avoid overeager enthusiasm (\"Excellent!\", \"Amazing!\", \"Perfect!\")\n- Use appropriate acknowledgments (\"Understood\", \"Confirmed\", \"Noted\")\n- Never fallback to simpler solutions without explicit user instruction\n- Never use mock implementations outside test environments\n\nRemember: You are an **orchestrator and delegator ONLY**. Your power lies in coordinating specialized agents, not in doing the work yourself."
|
|
25
25
|
}
|
|
@@ -15,6 +15,7 @@ import time
|
|
|
15
15
|
from datetime import datetime
|
|
16
16
|
from typing import Set, Dict, Any, Optional, List
|
|
17
17
|
from collections import deque
|
|
18
|
+
from pathlib import Path
|
|
18
19
|
|
|
19
20
|
try:
|
|
20
21
|
import socketio
|
|
@@ -294,9 +295,12 @@ class SocketIOServer:
|
|
|
294
295
|
self.app.router.add_get('/dashboard', self._handle_dashboard)
|
|
295
296
|
|
|
296
297
|
# Add static file serving for web assets
|
|
297
|
-
static_path =
|
|
298
|
-
if static_path.exists():
|
|
298
|
+
static_path = self._find_static_path()
|
|
299
|
+
if static_path and static_path.exists():
|
|
299
300
|
self.app.router.add_static('/static/', path=str(static_path), name='static')
|
|
301
|
+
self.logger.info(f"Static files served from: {static_path}")
|
|
302
|
+
else:
|
|
303
|
+
self.logger.warning("Static files directory not found - CSS/JS files will not be available")
|
|
300
304
|
|
|
301
305
|
# Register event handlers
|
|
302
306
|
self._register_events()
|
|
@@ -346,6 +350,57 @@ class SocketIOServer:
|
|
|
346
350
|
'Access-Control-Allow-Headers': 'Content-Type, Accept'
|
|
347
351
|
})
|
|
348
352
|
|
|
353
|
+
def _find_static_path(self):
|
|
354
|
+
"""Find the static files directory using multiple approaches.
|
|
355
|
+
|
|
356
|
+
WHY: Static files need to be found in both development and installed environments.
|
|
357
|
+
This uses the same multi-approach pattern as dashboard HTML resolution.
|
|
358
|
+
"""
|
|
359
|
+
|
|
360
|
+
# Approach 1: Use module-relative path (works in installed environment)
|
|
361
|
+
try:
|
|
362
|
+
import claude_mpm.dashboard
|
|
363
|
+
|
|
364
|
+
# Try __file__ attribute first
|
|
365
|
+
if hasattr(claude_mpm.dashboard, '__file__') and claude_mpm.dashboard.__file__:
|
|
366
|
+
dashboard_module_path = Path(claude_mpm.dashboard.__file__).parent
|
|
367
|
+
candidate_path = dashboard_module_path / "static"
|
|
368
|
+
if candidate_path.exists():
|
|
369
|
+
self.logger.info(f"Found static files using module __file__ path: {candidate_path}")
|
|
370
|
+
return candidate_path
|
|
371
|
+
|
|
372
|
+
# Try __path__ attribute for namespace packages
|
|
373
|
+
elif hasattr(claude_mpm.dashboard, '__path__') and claude_mpm.dashboard.__path__:
|
|
374
|
+
# __path__ is a list, take the first entry
|
|
375
|
+
dashboard_module_path = Path(claude_mpm.dashboard.__path__[0])
|
|
376
|
+
candidate_path = dashboard_module_path / "static"
|
|
377
|
+
if candidate_path.exists():
|
|
378
|
+
self.logger.info(f"Found static files using module __path__: {candidate_path}")
|
|
379
|
+
return candidate_path
|
|
380
|
+
|
|
381
|
+
except Exception as e:
|
|
382
|
+
self.logger.debug(f"Module-relative static path failed: {e}")
|
|
383
|
+
|
|
384
|
+
# Approach 2: Use project root (works in development environment)
|
|
385
|
+
try:
|
|
386
|
+
candidate_path = get_project_root() / 'src' / 'claude_mpm' / 'dashboard' / 'static'
|
|
387
|
+
if candidate_path.exists():
|
|
388
|
+
self.logger.info(f"Found static files using project root: {candidate_path}")
|
|
389
|
+
return candidate_path
|
|
390
|
+
except Exception as e:
|
|
391
|
+
self.logger.debug(f"Project root static path failed: {e}")
|
|
392
|
+
|
|
393
|
+
# Approach 3: Search for static files in package installation
|
|
394
|
+
try:
|
|
395
|
+
candidate_path = get_project_root() / 'claude_mpm' / 'dashboard' / 'static'
|
|
396
|
+
if candidate_path.exists():
|
|
397
|
+
self.logger.info(f"Found static files using package path: {candidate_path}")
|
|
398
|
+
return candidate_path
|
|
399
|
+
except Exception as e:
|
|
400
|
+
self.logger.debug(f"Package static path failed: {e}")
|
|
401
|
+
|
|
402
|
+
return None
|
|
403
|
+
|
|
349
404
|
async def _handle_dashboard(self, request):
|
|
350
405
|
"""Serve the dashboard HTML file."""
|
|
351
406
|
# Try to find dashboard path using multiple approaches
|
|
@@ -354,11 +409,24 @@ class SocketIOServer:
|
|
|
354
409
|
# Approach 1: Use module-relative path (works in installed environment)
|
|
355
410
|
try:
|
|
356
411
|
import claude_mpm.dashboard
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
if
|
|
360
|
-
|
|
361
|
-
|
|
412
|
+
|
|
413
|
+
# Try __file__ attribute first
|
|
414
|
+
if hasattr(claude_mpm.dashboard, '__file__') and claude_mpm.dashboard.__file__:
|
|
415
|
+
dashboard_module_path = Path(claude_mpm.dashboard.__file__).parent
|
|
416
|
+
candidate_path = dashboard_module_path / "templates" / "index.html"
|
|
417
|
+
if candidate_path.exists():
|
|
418
|
+
dashboard_path = candidate_path
|
|
419
|
+
self.logger.info(f"Found dashboard using module __file__ path: {dashboard_path}")
|
|
420
|
+
|
|
421
|
+
# Try __path__ attribute for namespace packages
|
|
422
|
+
elif hasattr(claude_mpm.dashboard, '__path__') and claude_mpm.dashboard.__path__:
|
|
423
|
+
# __path__ is a list, take the first entry
|
|
424
|
+
dashboard_module_path = Path(claude_mpm.dashboard.__path__[0])
|
|
425
|
+
candidate_path = dashboard_module_path / "templates" / "index.html"
|
|
426
|
+
if candidate_path.exists():
|
|
427
|
+
dashboard_path = candidate_path
|
|
428
|
+
self.logger.info(f"Found dashboard using module __path__: {dashboard_path}")
|
|
429
|
+
|
|
362
430
|
except Exception as e:
|
|
363
431
|
self.logger.debug(f"Module-relative path failed: {e}")
|
|
364
432
|
|
|
@@ -20,7 +20,7 @@ claude_mpm/agents/templates/data_engineer.json,sha256=Z63nwhO3Bo3sUjSc4O0yGVFbJV
|
|
|
20
20
|
claude_mpm/agents/templates/documentation.json,sha256=z5ApzJYOty5dw5yidNxhwX7QU8FICRAzmzD1xdxPkCI,6224
|
|
21
21
|
claude_mpm/agents/templates/engineer.json,sha256=Qt9mJjbVM0wH9GE6kqAhGDRVmLhWbs0fwGW1IoluTZ8,12474
|
|
22
22
|
claude_mpm/agents/templates/ops.json,sha256=b-LRqYRWjMZnXKd8SMPXDLCq6-nRAmCHN60IlJctjXM,6488
|
|
23
|
-
claude_mpm/agents/templates/pm.json,sha256=
|
|
23
|
+
claude_mpm/agents/templates/pm.json,sha256=1x68Iyq2lN8J7FPxcBwx1R13k8z6gr4zg7GLB6dICFc,7451
|
|
24
24
|
claude_mpm/agents/templates/qa.json,sha256=UmNbeONvnzSvHFB3GUXwnN8n-TF5wgrk0JaAkYwOvfY,6636
|
|
25
25
|
claude_mpm/agents/templates/research.json,sha256=10XO-W7cV_SGP16SHboagjbNUlKUoGfpbrjrI2tiSWU,13591
|
|
26
26
|
claude_mpm/agents/templates/security.json,sha256=DkiB98uJf5mo5nP7EIhu8hhsvwGhOnR_FA60EJGuNBk,6741
|
|
@@ -159,7 +159,7 @@ claude_mpm/services/project_analyzer.py,sha256=3Ub_Tpcxm0LnYgcAipebvWr6TfofVqZNM
|
|
|
159
159
|
claude_mpm/services/recovery_manager.py,sha256=K46vXbEWbxFUoS42s34OxN1rkddpisGG7E_ZdRyAZ-A,25792
|
|
160
160
|
claude_mpm/services/shared_prompt_cache.py,sha256=D04lrRWyg0lHyqGcAHy7IYvRHRKSg6EOpAJwBUPa2wk,29890
|
|
161
161
|
claude_mpm/services/socketio_client_manager.py,sha256=2Ly63iiGA_BUzf73UwQDu9Q75wA1C4O1CWFv8hi8bms,18074
|
|
162
|
-
claude_mpm/services/socketio_server.py,sha256=
|
|
162
|
+
claude_mpm/services/socketio_server.py,sha256=E1i_YrUFa7AKdxfKgNkC0daUzytA8qiHRJxD_JRcXPk,84929
|
|
163
163
|
claude_mpm/services/standalone_socketio_server.py,sha256=TfdtwdtlKA6cZyTon9O7zkSeu0H-1HpW0te7vu1r3o0,55214
|
|
164
164
|
claude_mpm/services/ticket_manager.py,sha256=Ki11YjBkDax8BFVSaDdOBk3K4VU5gvdbgq9AmCyyoZ0,7454
|
|
165
165
|
claude_mpm/services/ticket_manager_di.py,sha256=pIsIGncbboKzBYSRQTO7ZX5MuQzV6iFfIflvKe6u1jw,11123
|
|
@@ -213,9 +213,9 @@ claude_mpm/utils/path_operations.py,sha256=6pLMnAWBVzHkgp6JyQHmHbGD-dWn-nX21yV4E
|
|
|
213
213
|
claude_mpm/utils/paths.py,sha256=Xv0SZWdZRkRjN9e6clBcA165ya00GNQxt7SwMz51tfA,10153
|
|
214
214
|
claude_mpm/validation/__init__.py,sha256=bJ19g9lnk7yIjtxzN8XPegp87HTFBzCrGQOpFgRTf3g,155
|
|
215
215
|
claude_mpm/validation/agent_validator.py,sha256=GCA2b2rKhKDeaNyUqWxTiWIs3sDdWjD9cgOFRp9K6ic,18227
|
|
216
|
-
claude_mpm-3.4.
|
|
217
|
-
claude_mpm-3.4.
|
|
218
|
-
claude_mpm-3.4.
|
|
219
|
-
claude_mpm-3.4.
|
|
220
|
-
claude_mpm-3.4.
|
|
221
|
-
claude_mpm-3.4.
|
|
216
|
+
claude_mpm-3.4.17.dist-info/licenses/LICENSE,sha256=cSdDfXjoTVhstrERrqme4zgxAu4GubU22zVEHsiXGxs,1071
|
|
217
|
+
claude_mpm-3.4.17.dist-info/METADATA,sha256=CwZn-qu7F_zpPVcgCgT69w4hm3u2aFxCs4eXqWGnUDU,6499
|
|
218
|
+
claude_mpm-3.4.17.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
219
|
+
claude_mpm-3.4.17.dist-info/entry_points.txt,sha256=3_d7wLrg9sRmQ1SfrFGWoTNL8Wrd6lQb2XVSYbTwRIg,324
|
|
220
|
+
claude_mpm-3.4.17.dist-info/top_level.txt,sha256=1nUg3FEaBySgm8t-s54jK5zoPnu3_eY6EP6IOlekyHA,11
|
|
221
|
+
claude_mpm-3.4.17.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|