claude-mpm 5.4.87__py3-none-any.whl → 5.4.89__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 +43 -4
- claude_mpm/services/cli/session_resume_helper.py +10 -2
- {claude_mpm-5.4.87.dist-info → claude_mpm-5.4.89.dist-info}/METADATA +1 -1
- {claude_mpm-5.4.87.dist-info → claude_mpm-5.4.89.dist-info}/RECORD +10 -12
- claude_mpm/hooks/claude_hooks/__pycache__/installer.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/connection_manager.cpython-311.pyc +0 -0
- {claude_mpm-5.4.87.dist-info → claude_mpm-5.4.89.dist-info}/WHEEL +0 -0
- {claude_mpm-5.4.87.dist-info → claude_mpm-5.4.89.dist-info}/entry_points.txt +0 -0
- {claude_mpm-5.4.87.dist-info → claude_mpm-5.4.89.dist-info}/licenses/LICENSE +0 -0
- {claude_mpm-5.4.87.dist-info → claude_mpm-5.4.89.dist-info}/licenses/LICENSE-FAQ.md +0 -0
- {claude_mpm-5.4.87.dist-info → claude_mpm-5.4.89.dist-info}/top_level.txt +0 -0
claude_mpm/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
5.4.
|
|
1
|
+
5.4.89
|
|
@@ -648,6 +648,42 @@ Task:
|
|
|
648
648
|
|
|
649
649
|
See [Circuit Breaker #6](#circuit-breaker-6-forbidden-tool-usage) for enforcement on browser state claims without evidence.
|
|
650
650
|
|
|
651
|
+
### Localhost Deployment Verification (CRITICAL)
|
|
652
|
+
|
|
653
|
+
**ABSOLUTE RULE**: PM NEVER tells user to "go to", "open", "check", or "navigate to" a localhost URL.
|
|
654
|
+
|
|
655
|
+
**Anti-Pattern Examples (CIRCUIT BREAKER VIOLATION)**:
|
|
656
|
+
```
|
|
657
|
+
❌ "Go to http://localhost:3000/dashboard"
|
|
658
|
+
❌ "Open http://localhost:3300 in your browser"
|
|
659
|
+
❌ "Make sure you're accessing via http://localhost:3300"
|
|
660
|
+
❌ "Navigate to the dashboard at localhost:8080"
|
|
661
|
+
❌ "Check the page at http://localhost:5000"
|
|
662
|
+
```
|
|
663
|
+
|
|
664
|
+
**Correct Pattern - Always Delegate to web-qa**:
|
|
665
|
+
```
|
|
666
|
+
Task:
|
|
667
|
+
agent: "web-qa"
|
|
668
|
+
task: "Verify localhost deployment at http://localhost:3300/dashboard"
|
|
669
|
+
acceptance_criteria:
|
|
670
|
+
- Navigate to URL (mcp__chrome-devtools__navigate_page)
|
|
671
|
+
- Take snapshot to verify content loads (mcp__chrome-devtools__take_snapshot)
|
|
672
|
+
- Take screenshot as evidence (mcp__chrome-devtools__take_screenshot)
|
|
673
|
+
- Check console for JavaScript errors (mcp__chrome-devtools__list_console_messages)
|
|
674
|
+
- Report actual page content, not assumptions
|
|
675
|
+
```
|
|
676
|
+
|
|
677
|
+
**Evidence Required Before Claiming Deployment Success**:
|
|
678
|
+
- Actual page snapshot content (not "it should work")
|
|
679
|
+
- Screenshot showing rendered UI
|
|
680
|
+
- Console error check results
|
|
681
|
+
- HTTP response status codes
|
|
682
|
+
|
|
683
|
+
**Violation Consequences**:
|
|
684
|
+
- Telling user to check localhost = Circuit Breaker #9 violation
|
|
685
|
+
- Claiming deployment works without web-qa evidence = Circuit Breaker #3 violation (Unverified Assertions)
|
|
686
|
+
|
|
651
687
|
## Ops Agent Routing (MANDATORY)
|
|
652
688
|
|
|
653
689
|
PM MUST route ops tasks to the correct specialized agent:
|
|
@@ -770,10 +806,10 @@ Report Results with Evidence
|
|
|
770
806
|
|
|
771
807
|
**4. Deployment & Verification** (if deployment needed)
|
|
772
808
|
- Deploy using appropriate ops agent
|
|
773
|
-
- **MANDATORY**:
|
|
774
|
-
-
|
|
775
|
-
-
|
|
776
|
-
-
|
|
809
|
+
- **MANDATORY**: Verify deployment with appropriate agents:
|
|
810
|
+
- **Backend/API**: local-ops verifies (lsof, curl, logs, health checks)
|
|
811
|
+
- **Web UI**: DELEGATE to web-qa for browser verification (Chrome DevTools MCP)
|
|
812
|
+
- **NEVER** tell user to open localhost URL - PM verifies via agents
|
|
777
813
|
- Track any deployment configs created immediately
|
|
778
814
|
- **FAILURE TO VERIFY = DEPLOYMENT INCOMPLETE**
|
|
779
815
|
|
|
@@ -1284,6 +1320,9 @@ PM: TodoWrite([{status: "completed"}]) # ✅ CORRECT: Full chain executed
|
|
|
1284
1320
|
- "You'll need to...", "Please run...", "You can..."
|
|
1285
1321
|
- "Start the server by...", "Run the following..."
|
|
1286
1322
|
- Terminal commands in the context of "you should run"
|
|
1323
|
+
- **"Go to http://localhost:..."**, **"Open http://localhost:..."**
|
|
1324
|
+
- **"Make sure you're using localhost:XXXX"**
|
|
1325
|
+
- **"Check the browser at..."**, **"Navigate to..."** (when telling USER to do it)
|
|
1287
1326
|
**Action**: BLOCK - Delegate to local-ops or appropriate agent instead
|
|
1288
1327
|
|
|
1289
1328
|
### Circuit Breaker #10: Vector Search First
|
|
@@ -14,7 +14,7 @@ DESIGN DECISIONS:
|
|
|
14
14
|
"""
|
|
15
15
|
|
|
16
16
|
import json
|
|
17
|
-
import subprocess
|
|
17
|
+
import subprocess # nosec B404 - subprocess needed for git commands
|
|
18
18
|
from datetime import datetime, timezone
|
|
19
19
|
from pathlib import Path
|
|
20
20
|
from typing import Any, Dict, List, Optional, Tuple
|
|
@@ -50,9 +50,11 @@ class SessionResumeHelper:
|
|
|
50
50
|
|
|
51
51
|
if self.pause_dir.exists():
|
|
52
52
|
session_files.extend(list(self.pause_dir.glob("session-*.json")))
|
|
53
|
+
session_files.extend(list(self.pause_dir.glob("session-*.md")))
|
|
53
54
|
|
|
54
55
|
if self.legacy_pause_dir.exists():
|
|
55
56
|
session_files.extend(list(self.legacy_pause_dir.glob("session-*.json")))
|
|
57
|
+
session_files.extend(list(self.legacy_pause_dir.glob("session-*.md")))
|
|
56
58
|
|
|
57
59
|
return len(session_files) > 0
|
|
58
60
|
|
|
@@ -67,9 +69,11 @@ class SessionResumeHelper:
|
|
|
67
69
|
|
|
68
70
|
if self.pause_dir.exists():
|
|
69
71
|
session_files.extend(list(self.pause_dir.glob("session-*.json")))
|
|
72
|
+
session_files.extend(list(self.pause_dir.glob("session-*.md")))
|
|
70
73
|
|
|
71
74
|
if self.legacy_pause_dir.exists():
|
|
72
75
|
session_files.extend(list(self.legacy_pause_dir.glob("session-*.json")))
|
|
76
|
+
session_files.extend(list(self.legacy_pause_dir.glob("session-*.md")))
|
|
73
77
|
|
|
74
78
|
if not session_files:
|
|
75
79
|
return None
|
|
@@ -112,7 +116,7 @@ class SessionResumeHelper:
|
|
|
112
116
|
"--all",
|
|
113
117
|
]
|
|
114
118
|
|
|
115
|
-
result = subprocess.run(
|
|
119
|
+
result = subprocess.run( # nosec B603 - git command with safe args
|
|
116
120
|
cmd,
|
|
117
121
|
cwd=self.project_path,
|
|
118
122
|
capture_output=True,
|
|
@@ -332,9 +336,11 @@ class SessionResumeHelper:
|
|
|
332
336
|
|
|
333
337
|
if self.pause_dir.exists():
|
|
334
338
|
session_files.extend(list(self.pause_dir.glob("session-*.json")))
|
|
339
|
+
session_files.extend(list(self.pause_dir.glob("session-*.md")))
|
|
335
340
|
|
|
336
341
|
if self.legacy_pause_dir.exists():
|
|
337
342
|
session_files.extend(list(self.legacy_pause_dir.glob("session-*.json")))
|
|
343
|
+
session_files.extend(list(self.legacy_pause_dir.glob("session-*.md")))
|
|
338
344
|
|
|
339
345
|
return len(session_files)
|
|
340
346
|
|
|
@@ -348,9 +354,11 @@ class SessionResumeHelper:
|
|
|
348
354
|
|
|
349
355
|
if self.pause_dir.exists():
|
|
350
356
|
session_files.extend(list(self.pause_dir.glob("session-*.json")))
|
|
357
|
+
session_files.extend(list(self.pause_dir.glob("session-*.md")))
|
|
351
358
|
|
|
352
359
|
if self.legacy_pause_dir.exists():
|
|
353
360
|
session_files.extend(list(self.legacy_pause_dir.glob("session-*.json")))
|
|
361
|
+
session_files.extend(list(self.legacy_pause_dir.glob("session-*.md")))
|
|
354
362
|
|
|
355
363
|
if not session_files:
|
|
356
364
|
return []
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
claude_mpm/BUILD_NUMBER,sha256=9JfxhnDtr-8l3kCP2U5TVXSErptHoga8m7XA8zqgGOc,4
|
|
2
|
-
claude_mpm/VERSION,sha256=
|
|
2
|
+
claude_mpm/VERSION,sha256=5LqRA4XAd3A96RyBZwrK_LuyzayE-uwJOHE8bNh179s,7
|
|
3
3
|
claude_mpm/__init__.py,sha256=AGfh00BHKvLYD-UVFw7qbKtl7NMRIzRXOWw7vEuZ-h4,2214
|
|
4
4
|
claude_mpm/__main__.py,sha256=Ro5UBWBoQaSAIoSqWAr7zkbLyvi4sSy28WShqAhKJG0,723
|
|
5
5
|
claude_mpm/constants.py,sha256=pz3lTrZZR5HhV3eZzYtIbtBwWo7iM6pkBHP_ixxmI6Y,6827
|
|
@@ -11,7 +11,7 @@ claude_mpm/agents/CLAUDE_MPM_FOUNDERS_OUTPUT_STYLE.md,sha256=d4hZRc2wG2XzLaIxl2e
|
|
|
11
11
|
claude_mpm/agents/CLAUDE_MPM_OUTPUT_STYLE.md,sha256=PmiEOcAcDVOPtCwiCPhNGWb8GVDnniftQO7MIi8yBWU,4174
|
|
12
12
|
claude_mpm/agents/CLAUDE_MPM_TEACHER_OUTPUT_STYLE.md,sha256=vneNW5vHjfKsRIukkuGbAnvnyp_-EC3qpFzHDdsMOwc,4796
|
|
13
13
|
claude_mpm/agents/MEMORY.md,sha256=V1mGx5oEaLdN9AYLX3Xetslmr2Ja6vnLPATeEoR6bvw,3303
|
|
14
|
-
claude_mpm/agents/PM_INSTRUCTIONS.md,sha256=
|
|
14
|
+
claude_mpm/agents/PM_INSTRUCTIONS.md,sha256=ilGzir8bMYCy1veDnPLR0kAIhU1EjpoeKrn380h9AJU,61344
|
|
15
15
|
claude_mpm/agents/WORKFLOW.md,sha256=BD5V5wNgz4C2gHPn4ekRmj4i7nn56s1ZF8YnhWBPkFw,3331
|
|
16
16
|
claude_mpm/agents/__init__.py,sha256=3cCQh2Hf_-2F9XDT5In533Bw7oKuGIqZvOdBW7af6dY,3403
|
|
17
17
|
claude_mpm/agents/agent-template.yaml,sha256=mRlz5Yd0SmknTeoJWgFkZXzEF5T7OmGBJGs2-KPT93k,1969
|
|
@@ -347,7 +347,6 @@ claude_mpm/hooks/claude_hooks/__pycache__/auto_pause_handler.cpython-311.pyc,sha
|
|
|
347
347
|
claude_mpm/hooks/claude_hooks/__pycache__/correlation_manager.cpython-311.pyc,sha256=SQX5iiP9bQZkLL-cj_2tlGH7lpAzarO0mYal7btj3tc,3521
|
|
348
348
|
claude_mpm/hooks/claude_hooks/__pycache__/event_handlers.cpython-311.pyc,sha256=xS_cl5CFEHT4U_Za1vGhTTjKRayLvLoBvRfekvK-1gk,38986
|
|
349
349
|
claude_mpm/hooks/claude_hooks/__pycache__/hook_handler.cpython-311.pyc,sha256=pA793fTKMsdmyho-jURwvJjHXfIy8AnC0Tjw3x9toro,30559
|
|
350
|
-
claude_mpm/hooks/claude_hooks/__pycache__/installer.cpython-311.pyc,sha256=9mpAKY4gNcbU5VvZ5tGbf2UM0uIEWdreKSUvVr_BKcM,33917
|
|
351
350
|
claude_mpm/hooks/claude_hooks/__pycache__/memory_integration.cpython-311.pyc,sha256=YbwauQDKSGvXkT1972faalJLuxwyvq328DYQhkCnel0,10513
|
|
352
351
|
claude_mpm/hooks/claude_hooks/__pycache__/response_tracking.cpython-311.pyc,sha256=YV5iCKSXtrON611Rp3S8PQGPz0H3RIBO6K_n1BAfGWw,17523
|
|
353
352
|
claude_mpm/hooks/claude_hooks/__pycache__/tool_analysis.cpython-311.pyc,sha256=ZjcNfNY5Ht6FhalPeh7M7OzMffcey5iF4AVjDDg9kak,10694
|
|
@@ -358,7 +357,6 @@ claude_mpm/hooks/claude_hooks/services/duplicate_detector.py,sha256=Fh9LmEMsVmQM
|
|
|
358
357
|
claude_mpm/hooks/claude_hooks/services/state_manager.py,sha256=QB0JPJQThTVg0TGRO3Dc_3y3bac-hkulgMqqzo_71ng,11189
|
|
359
358
|
claude_mpm/hooks/claude_hooks/services/subagent_processor.py,sha256=nJw1ERCMxq23ioZ5DKwprmwO0fuvuqpdFHJ03XaMiDo,16052
|
|
360
359
|
claude_mpm/hooks/claude_hooks/services/__pycache__/__init__.cpython-311.pyc,sha256=xBfLBSqnpcKfcQBWfh7xUm454g1lq1LvbO7SxGvcOPc,644
|
|
361
|
-
claude_mpm/hooks/claude_hooks/services/__pycache__/connection_manager.cpython-311.pyc,sha256=Q40QpUbg9q_QHgv8kuYdQmRVjqcjewzYUC5BoaHinFo,10152
|
|
362
360
|
claude_mpm/hooks/claude_hooks/services/__pycache__/connection_manager_http.cpython-311.pyc,sha256=bvZ_QcuI0j125Ebv8RzeWUh1BkuRTUfufGi0NV7HjuY,12359
|
|
363
361
|
claude_mpm/hooks/claude_hooks/services/__pycache__/duplicate_detector.cpython-311.pyc,sha256=Yy_REAUhJCiFjOhxeDb4v0qyEvEbUtCmXD9PAz40dhw,5321
|
|
364
362
|
claude_mpm/hooks/claude_hooks/services/__pycache__/state_manager.cpython-311.pyc,sha256=TPkEc-Zi3oNS5dCXBpGbSZwg_8RQvzNzd4pVx9B3WeM,12364
|
|
@@ -544,7 +542,7 @@ claude_mpm/services/cli/memory_output_formatter.py,sha256=iNXMSu-K24rkgVhJURS-B6
|
|
|
544
542
|
claude_mpm/services/cli/resume_service.py,sha256=ENlx5ynuw1bBuPX6XOinOizLqWGNAlSUOu--oV_hrRs,21758
|
|
545
543
|
claude_mpm/services/cli/session_manager.py,sha256=-zG0osFnDYyta9iPCwmL5Dxu6Z-4_LHylFfqQAnIEvY,20126
|
|
546
544
|
claude_mpm/services/cli/session_pause_manager.py,sha256=neCXcZC5b-OLkKNBHtr0PqE4VQg_n2S3PYzhuIt-6v0,17178
|
|
547
|
-
claude_mpm/services/cli/session_resume_helper.py,sha256=
|
|
545
|
+
claude_mpm/services/cli/session_resume_helper.py,sha256=CwQ5EtDH8p2OREkOpPl4FuS1nzBMBSsxFus_7KgXDtA,13747
|
|
548
546
|
claude_mpm/services/cli/startup_checker.py,sha256=MmztJ7yAnk5O5shArGDzRzwBDmx1WikhtE5s9P4IU9M,12251
|
|
549
547
|
claude_mpm/services/cli/unified_dashboard_manager.py,sha256=wX3PLys0XKZncUwMysvYDfzMzNFjkhCdu62hi2qZUF0,15608
|
|
550
548
|
claude_mpm/services/communication/__init__.py,sha256=b4qc7_Rqy4DE9q7BAUlfUZjoYG4uimAyUnE0irPcXyU,560
|
|
@@ -991,10 +989,10 @@ claude_mpm/utils/subprocess_utils.py,sha256=D0izRT8anjiUb_JG72zlJR_JAw1cDkb7kalN
|
|
|
991
989
|
claude_mpm/validation/__init__.py,sha256=YZhwE3mhit-lslvRLuwfX82xJ_k4haZeKmh4IWaVwtk,156
|
|
992
990
|
claude_mpm/validation/agent_validator.py,sha256=GprtAvu80VyMXcKGsK_VhYiXWA6BjKHv7O6HKx0AB9w,20917
|
|
993
991
|
claude_mpm/validation/frontmatter_validator.py,sha256=YpJlYNNYcV8u6hIOi3_jaRsDnzhbcQpjCBE6eyBKaFY,7076
|
|
994
|
-
claude_mpm-5.4.
|
|
995
|
-
claude_mpm-5.4.
|
|
996
|
-
claude_mpm-5.4.
|
|
997
|
-
claude_mpm-5.4.
|
|
998
|
-
claude_mpm-5.4.
|
|
999
|
-
claude_mpm-5.4.
|
|
1000
|
-
claude_mpm-5.4.
|
|
992
|
+
claude_mpm-5.4.89.dist-info/licenses/LICENSE,sha256=ca3y_Rk4aPrbF6f62z8Ht5MJM9OAvbGlHvEDcj9vUQ4,3867
|
|
993
|
+
claude_mpm-5.4.89.dist-info/licenses/LICENSE-FAQ.md,sha256=TxfEkXVCK98RzDOer09puc7JVCP_q_bN4dHtZKHCMcM,5104
|
|
994
|
+
claude_mpm-5.4.89.dist-info/METADATA,sha256=lXq6s1lVYMcQ1r9OMQx8BiW_pkQbVHI48tJ7M27ckCE,39072
|
|
995
|
+
claude_mpm-5.4.89.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
996
|
+
claude_mpm-5.4.89.dist-info/entry_points.txt,sha256=n-Uk4vwHPpuvu-g_I7-GHORzTnN_m6iyOsoLveKKD0E,228
|
|
997
|
+
claude_mpm-5.4.89.dist-info/top_level.txt,sha256=1nUg3FEaBySgm8t-s54jK5zoPnu3_eY6EP6IOlekyHA,11
|
|
998
|
+
claude_mpm-5.4.89.dist-info/RECORD,,
|
|
Binary file
|
|
Binary file
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|