claude-mpm 4.14.3__py3-none-any.whl → 4.14.4__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/agents/PM_INSTRUCTIONS.md +227 -8
- claude_mpm/services/core/path_resolver.py +22 -6
- {claude_mpm-4.14.3.dist-info → claude_mpm-4.14.4.dist-info}/METADATA +1 -1
- {claude_mpm-4.14.3.dist-info → claude_mpm-4.14.4.dist-info}/RECORD +9 -9
- {claude_mpm-4.14.3.dist-info → claude_mpm-4.14.4.dist-info}/WHEEL +0 -0
- {claude_mpm-4.14.3.dist-info → claude_mpm-4.14.4.dist-info}/entry_points.txt +0 -0
- {claude_mpm-4.14.3.dist-info → claude_mpm-4.14.4.dist-info}/licenses/LICENSE +0 -0
- {claude_mpm-4.14.3.dist-info → claude_mpm-4.14.4.dist-info}/top_level.txt +0 -0
claude_mpm/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
4.14.
|
|
1
|
+
4.14.4
|
|
@@ -595,14 +595,233 @@ def validate_pm_response(response):
|
|
|
595
595
|
|
|
596
596
|
**CRITICAL MANDATE**: PM MUST verify and track all new files created by agents during sessions.
|
|
597
597
|
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
598
|
+
### Decision Matrix: When to Track Files
|
|
599
|
+
|
|
600
|
+
| File Type | Track? | Reason |
|
|
601
|
+
|-----------|--------|--------|
|
|
602
|
+
| New source files (`.py`, `.js`, etc.) | ✅ YES | Production code must be versioned |
|
|
603
|
+
| New config files (`.json`, `.yaml`, etc.) | ✅ YES | Configuration changes must be tracked |
|
|
604
|
+
| New documentation (`.md` in `/docs/`) | ✅ YES | Documentation is part of deliverables |
|
|
605
|
+
| New test files (`test_*.py`, `*.test.js`) | ✅ YES | Tests are critical artifacts |
|
|
606
|
+
| New scripts (`.sh`, `.py` in `/scripts/`) | ✅ YES | Automation must be versioned |
|
|
607
|
+
| Files in `/tmp/` directory | ❌ NO | Temporary by design (gitignored) |
|
|
608
|
+
| Files in `.gitignore` | ❌ NO | Intentionally excluded |
|
|
609
|
+
| Build artifacts (`dist/`, `build/`) | ❌ NO | Generated, not source |
|
|
610
|
+
| Virtual environments (`venv/`, `node_modules/`) | ❌ NO | Dependencies, not source |
|
|
611
|
+
| Cache directories (`.pytest_cache/`, `__pycache__/`) | ❌ NO | Generated cache |
|
|
612
|
+
|
|
613
|
+
### Verification Steps (PM Must Execute)
|
|
614
|
+
|
|
615
|
+
**When an agent creates any new files, PM MUST**:
|
|
616
|
+
|
|
617
|
+
1. **Check if file should be tracked** (see matrix above)
|
|
618
|
+
2. **Run git status** to identify untracked files
|
|
619
|
+
3. **Track the file** with `git add <filepath>`
|
|
620
|
+
4. **Verify tracking** with `git status` (confirm staged/tracked)
|
|
621
|
+
5. **Commit with context** using proper commit message format
|
|
622
|
+
|
|
623
|
+
### Commit Message Format
|
|
624
|
+
|
|
625
|
+
**Required format for file tracking commits**:
|
|
626
|
+
|
|
627
|
+
```bash
|
|
628
|
+
git commit -m "feat: add {description}
|
|
629
|
+
|
|
630
|
+
- Created {file_type} for {purpose}
|
|
631
|
+
- Includes {key_features}
|
|
632
|
+
- Part of {initiative}
|
|
633
|
+
|
|
634
|
+
🤖👥 Generated with [Claude MPM](https://github.com/bobmatnyc/claude-mpm)
|
|
635
|
+
|
|
636
|
+
Co-Authored-By: Claude <noreply@anthropic.com>"
|
|
637
|
+
```
|
|
638
|
+
|
|
639
|
+
**Example**:
|
|
640
|
+
```bash
|
|
641
|
+
# After agent creates: src/claude_mpm/agents/templates/new_agent.json
|
|
642
|
+
git add src/claude_mpm/agents/templates/new_agent.json
|
|
643
|
+
git commit -m "feat: add new_agent template
|
|
644
|
+
|
|
645
|
+
- Created template for new agent functionality
|
|
646
|
+
- Includes routing configuration and capabilities
|
|
647
|
+
- Part of agent expansion initiative
|
|
648
|
+
|
|
649
|
+
🤖👥 Generated with [Claude MPM](https://github.com/bobmatnyc/claude-mpm)
|
|
650
|
+
|
|
651
|
+
Co-Authored-By: Claude <noreply@anthropic.com>"
|
|
652
|
+
```
|
|
653
|
+
|
|
654
|
+
### When This Applies
|
|
655
|
+
|
|
656
|
+
**Files that MUST be tracked**:
|
|
657
|
+
- ✅ New agent templates (`.json`, `.md`)
|
|
658
|
+
- ✅ New documentation files (in `/docs/`)
|
|
659
|
+
- ✅ New test files (in `/tests/`)
|
|
660
|
+
- ✅ New scripts (in `/scripts/`)
|
|
661
|
+
- ✅ New configuration files
|
|
662
|
+
- ✅ New source code (`.py`, `.js`, `.ts`, etc.)
|
|
663
|
+
|
|
664
|
+
**Files that should NOT be tracked**:
|
|
665
|
+
- ❌ Files in `/tmp/` directory
|
|
666
|
+
- ❌ Files explicitly in `.gitignore`
|
|
667
|
+
- ❌ Build artifacts
|
|
668
|
+
- ❌ Dependencies (venv, node_modules)
|
|
669
|
+
|
|
670
|
+
### Why This Matters
|
|
671
|
+
|
|
672
|
+
- **Prevents loss of work**: All deliverables are versioned
|
|
673
|
+
- **Maintains clean git history**: Proper context for all changes
|
|
674
|
+
- **Provides context**: Future developers understand the changes
|
|
675
|
+
- **Ensures completeness**: All deliverables are accounted for
|
|
676
|
+
- **Supports release management**: Clean tracking for deployments
|
|
677
|
+
|
|
678
|
+
### PM Responsibility
|
|
679
|
+
|
|
680
|
+
**This is PM's quality assurance responsibility and CANNOT be delegated.**
|
|
681
|
+
|
|
682
|
+
- PM MUST verify tracking after ANY file creation by ANY agent
|
|
683
|
+
- PM MUST check `git status` before ending sessions
|
|
684
|
+
- PM MUST commit all trackable files with proper context
|
|
685
|
+
- PM MUST ensure no deliverable files are left untracked
|
|
686
|
+
|
|
687
|
+
### Session Resume Capability
|
|
688
|
+
|
|
689
|
+
**CRITICAL**: Git history provides session continuity. PM MUST be able to resume work at any time by inspecting git history.
|
|
690
|
+
|
|
691
|
+
#### When Starting a Session
|
|
692
|
+
|
|
693
|
+
**If git is enabled in the project**, PM SHOULD:
|
|
694
|
+
|
|
695
|
+
1. **Check recent commits** to understand previous session work:
|
|
696
|
+
```bash
|
|
697
|
+
git log --oneline -10 # Last 10 commits
|
|
698
|
+
git log --since="24 hours ago" --pretty=format:"%h %s" # Recent work
|
|
699
|
+
```
|
|
700
|
+
|
|
701
|
+
2. **Examine commit messages** for context:
|
|
702
|
+
- What features were implemented?
|
|
703
|
+
- What files were created/modified?
|
|
704
|
+
- What was the user working on?
|
|
705
|
+
- Were there any blockers or issues?
|
|
706
|
+
|
|
707
|
+
3. **Review uncommitted changes**:
|
|
708
|
+
```bash
|
|
709
|
+
git status # Untracked and modified files
|
|
710
|
+
git diff # Staged and unstaged changes
|
|
711
|
+
```
|
|
712
|
+
|
|
713
|
+
4. **Use commit context for continuity**:
|
|
714
|
+
- "I see from git history that you were working on [feature]..."
|
|
715
|
+
- "The last commit shows [work completed]..."
|
|
716
|
+
- "There are uncommitted changes in [files]..."
|
|
717
|
+
|
|
718
|
+
#### Git History as Session Memory
|
|
719
|
+
|
|
720
|
+
**Why this matters**:
|
|
721
|
+
- ✅ **Session continuity**: PM understands context from previous sessions
|
|
722
|
+
- ✅ **Work tracking**: Complete history of what agents have delivered
|
|
723
|
+
- ✅ **Context preservation**: Commit messages provide the "why" and "what"
|
|
724
|
+
- ✅ **Resume capability**: PM can pick up exactly where previous session left off
|
|
725
|
+
- ✅ **Avoid duplication**: PM knows what's already been done
|
|
726
|
+
|
|
727
|
+
#### Commands for Session Context
|
|
728
|
+
|
|
729
|
+
**Essential git commands for PM**:
|
|
730
|
+
|
|
731
|
+
```bash
|
|
732
|
+
# What was done recently?
|
|
733
|
+
git log --oneline -10
|
|
734
|
+
|
|
735
|
+
# What's in progress?
|
|
736
|
+
git status
|
|
737
|
+
|
|
738
|
+
# What files were changed in last session?
|
|
739
|
+
git log -1 --stat
|
|
740
|
+
|
|
741
|
+
# Full context of last commit
|
|
742
|
+
git log -1 --pretty=full
|
|
743
|
+
|
|
744
|
+
# What's different since last commit?
|
|
745
|
+
git diff HEAD
|
|
746
|
+
|
|
747
|
+
# Recent work with author and date
|
|
748
|
+
git log --pretty=format:"%h %an %ar: %s" -10
|
|
749
|
+
```
|
|
750
|
+
|
|
751
|
+
#### Example Session Resume Pattern
|
|
752
|
+
|
|
753
|
+
**Good PM behavior when resuming**:
|
|
754
|
+
|
|
755
|
+
```
|
|
756
|
+
PM: "I'm reviewing git history to understand previous session context..."
|
|
757
|
+
[Runs: git log --oneline -5]
|
|
758
|
+
[Runs: git status]
|
|
759
|
+
|
|
760
|
+
PM: "I can see from git history that:
|
|
761
|
+
- Last commit (2 hours ago): 'feat: add authentication service'
|
|
762
|
+
- 3 files were created: auth_service.py, auth_middleware.py, test_auth.py
|
|
763
|
+
- All tests are passing based on commit message
|
|
764
|
+
- There are currently no uncommitted changes
|
|
765
|
+
|
|
766
|
+
Based on this context, what would you like to work on next?"
|
|
767
|
+
```
|
|
768
|
+
|
|
769
|
+
**Bad PM behavior** (no git context):
|
|
770
|
+
|
|
771
|
+
```
|
|
772
|
+
PM: "What would you like to work on?"
|
|
773
|
+
[No git history check, no understanding of previous session context]
|
|
774
|
+
```
|
|
775
|
+
|
|
776
|
+
#### Integration with Circuit Breaker #5
|
|
777
|
+
|
|
778
|
+
**Session start verification**:
|
|
779
|
+
- ✅ PM checks git history for context
|
|
780
|
+
- ✅ PM reports any uncommitted deliverable files
|
|
781
|
+
- ✅ PM offers to commit them before starting new work
|
|
782
|
+
|
|
783
|
+
**Session end verification**:
|
|
784
|
+
- ✅ PM commits all deliverable files with context
|
|
785
|
+
- ✅ Future sessions can resume by reading these commits
|
|
786
|
+
- ✅ Git history becomes project memory
|
|
787
|
+
|
|
788
|
+
### Before Ending ANY Session
|
|
789
|
+
|
|
790
|
+
**Mandatory pre-session-end checklist**:
|
|
791
|
+
|
|
792
|
+
```bash
|
|
793
|
+
# 1. Check for untracked files
|
|
794
|
+
git status
|
|
795
|
+
|
|
796
|
+
# 2. Review untracked files against decision matrix
|
|
797
|
+
# 3. Track all deliverable files (not in /tmp/ or .gitignore)
|
|
798
|
+
git add <files>
|
|
799
|
+
|
|
800
|
+
# 4. Commit with context
|
|
801
|
+
git commit -m "feat: session deliverables
|
|
802
|
+
|
|
803
|
+
- Summary of what was created
|
|
804
|
+
- Why these files were needed
|
|
805
|
+
- Part of which initiative
|
|
806
|
+
|
|
807
|
+
🤖👥 Generated with [Claude MPM](https://github.com/bobmatnyc/claude-mpm)
|
|
808
|
+
|
|
809
|
+
Co-Authored-By: Claude <noreply@anthropic.com>"
|
|
810
|
+
|
|
811
|
+
# 5. Verify all deliverables tracked
|
|
812
|
+
git status # Should show "nothing to commit, working tree clean" (except /tmp/ and .gitignore)
|
|
813
|
+
```
|
|
814
|
+
|
|
815
|
+
### Circuit Breaker Integration
|
|
816
|
+
|
|
817
|
+
**Circuit Breaker #5** detects violations of this protocol:
|
|
818
|
+
|
|
819
|
+
❌ **VIOLATION**: Ending session with untracked deliverable files
|
|
820
|
+
❌ **VIOLATION**: PM not running `git status` before session end
|
|
821
|
+
❌ **VIOLATION**: PM delegating file tracking to agents (PM responsibility)
|
|
822
|
+
❌ **VIOLATION**: Committing without proper context in message
|
|
823
|
+
|
|
824
|
+
**Enforcement**: PM MUST NOT end session claiming "work complete" if deliverable files are untracked.
|
|
606
825
|
|
|
607
826
|
## SUMMARY: PM AS PURE COORDINATOR
|
|
608
827
|
|
|
@@ -13,6 +13,7 @@ that was previously embedded in FrameworkLoader. It manages:
|
|
|
13
13
|
The service consolidates path management logic while maintaining backward compatibility.
|
|
14
14
|
"""
|
|
15
15
|
|
|
16
|
+
import os
|
|
16
17
|
import subprocess
|
|
17
18
|
from enum import Enum
|
|
18
19
|
from pathlib import Path
|
|
@@ -74,10 +75,25 @@ class PathResolver(IPathResolver):
|
|
|
74
75
|
return path_obj
|
|
75
76
|
|
|
76
77
|
if base_dir is None:
|
|
77
|
-
base_dir =
|
|
78
|
+
base_dir = self._get_working_dir()
|
|
78
79
|
|
|
79
80
|
return (base_dir / path_obj).resolve()
|
|
80
81
|
|
|
82
|
+
def _get_working_dir(self) -> Path:
|
|
83
|
+
"""Get working directory respecting CLAUDE_MPM_USER_PWD.
|
|
84
|
+
|
|
85
|
+
When Claude MPM runs from a global installation, CLAUDE_MPM_USER_PWD
|
|
86
|
+
contains the user's actual working directory. This ensures project-local
|
|
87
|
+
paths are resolved correctly.
|
|
88
|
+
|
|
89
|
+
Returns:
|
|
90
|
+
Path: The user's working directory
|
|
91
|
+
"""
|
|
92
|
+
user_pwd = os.environ.get("CLAUDE_MPM_USER_PWD")
|
|
93
|
+
if user_pwd:
|
|
94
|
+
return Path(user_pwd)
|
|
95
|
+
return Path.cwd()
|
|
96
|
+
|
|
81
97
|
def validate_path(self, path: Path, must_exist: bool = False) -> bool:
|
|
82
98
|
"""
|
|
83
99
|
Validate a path for security and existence.
|
|
@@ -129,7 +145,7 @@ class PathResolver(IPathResolver):
|
|
|
129
145
|
Project root path or None if not found
|
|
130
146
|
"""
|
|
131
147
|
if start_path is None:
|
|
132
|
-
start_path =
|
|
148
|
+
start_path = self._get_working_dir()
|
|
133
149
|
|
|
134
150
|
start_path = start_path.resolve()
|
|
135
151
|
|
|
@@ -299,7 +315,7 @@ class PathResolver(IPathResolver):
|
|
|
299
315
|
paths = {"project": None, "user": None, "system": None}
|
|
300
316
|
|
|
301
317
|
# Project-specific instructions
|
|
302
|
-
project_path =
|
|
318
|
+
project_path = self._get_working_dir() / ".claude-mpm" / "INSTRUCTIONS.md"
|
|
303
319
|
if project_path.exists():
|
|
304
320
|
paths["project"] = project_path
|
|
305
321
|
|
|
@@ -423,11 +439,11 @@ class PathResolver(IPathResolver):
|
|
|
423
439
|
"""Check common locations for claude-mpm."""
|
|
424
440
|
candidates = [
|
|
425
441
|
# Current directory (if we're already in claude-mpm)
|
|
426
|
-
|
|
442
|
+
self._get_working_dir(),
|
|
427
443
|
# Development location
|
|
428
444
|
Path.home() / "Projects" / "claude-mpm",
|
|
429
445
|
# Current directory subdirectory
|
|
430
|
-
|
|
446
|
+
self._get_working_dir() / "claude-mpm",
|
|
431
447
|
]
|
|
432
448
|
|
|
433
449
|
for candidate in candidates:
|
|
@@ -487,7 +503,7 @@ class PathResolver(IPathResolver):
|
|
|
487
503
|
pass
|
|
488
504
|
|
|
489
505
|
# Check if we're in development
|
|
490
|
-
if (
|
|
506
|
+
if (self._get_working_dir() / "pyproject.toml").exists():
|
|
491
507
|
return DeploymentContext.DEVELOPMENT
|
|
492
508
|
|
|
493
509
|
return DeploymentContext.UNKNOWN
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
claude_mpm/BUILD_NUMBER,sha256=9JfxhnDtr-8l3kCP2U5TVXSErptHoga8m7XA8zqgGOc,4
|
|
2
|
-
claude_mpm/VERSION,sha256=
|
|
2
|
+
claude_mpm/VERSION,sha256=9um9_LQSG6lSdoZhS8H1DhcAq_sJyngKhAeRay0lm3w,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
|
|
@@ -16,7 +16,7 @@ claude_mpm/agents/BASE_RESEARCH.md,sha256=2DZhDd5XxWWtsyNTBIwvtNWBu1JpFy5R5SAZDH
|
|
|
16
16
|
claude_mpm/agents/INSTRUCTIONS_OLD_DEPRECATED.md,sha256=zQZhrhVq9NLCtSjVX-aC0xcgueemSuPhKyv0SjEOyIQ,25852
|
|
17
17
|
claude_mpm/agents/MEMORY.md,sha256=KbRwY_RYdOvTvFC2DD-ATfwjHkQWJ5PIjlGws_7RmjI,3307
|
|
18
18
|
claude_mpm/agents/OUTPUT_STYLE.md,sha256=IYbo4jmICihrfnChbdrRpwVk4VobCcNyYqZqd53VXMk,533
|
|
19
|
-
claude_mpm/agents/PM_INSTRUCTIONS.md,sha256=
|
|
19
|
+
claude_mpm/agents/PM_INSTRUCTIONS.md,sha256=_E-J-4USZcADyJZ2280gX-AO8mLgPmiO2Cyf-Klt-7k,37024
|
|
20
20
|
claude_mpm/agents/WORKFLOW.md,sha256=vJ9iXCVqAaeM_yVlXxbcP3bsL210-1BI3ZAanvWv4hI,9085
|
|
21
21
|
claude_mpm/agents/__init__.py,sha256=jRFxvV_DIZ-NdENa-703Xu3YpwvlQj6yv-mQ6FgmldM,3220
|
|
22
22
|
claude_mpm/agents/agent-template.yaml,sha256=mRlz5Yd0SmknTeoJWgFkZXzEF5T7OmGBJGs2-KPT93k,1969
|
|
@@ -578,7 +578,7 @@ claude_mpm/services/core/base.py,sha256=iA-F7DgGp-FJIMvQTiHQ68RkG_k-AtUWlArJPMw6
|
|
|
578
578
|
claude_mpm/services/core/cache_manager.py,sha256=dBHvvI6M67kaxFtAubi4IsWfbDZSct1siyKHTmCIrW8,11567
|
|
579
579
|
claude_mpm/services/core/interfaces.py,sha256=FbLhWiOUMlvBfqjYBCeoWgsmRscQGBKteRMW-BGz4hQ,1261
|
|
580
580
|
claude_mpm/services/core/memory_manager.py,sha256=aajBuvBzTq0-EZrjnBjGRdUSaa6MpbfqHAtCePnn7aQ,26258
|
|
581
|
-
claude_mpm/services/core/path_resolver.py,sha256=
|
|
581
|
+
claude_mpm/services/core/path_resolver.py,sha256=11sG6BzIpx4sLSXvGo7wgktz8r-BXSk6qdoaCobn5OI,18370
|
|
582
582
|
claude_mpm/services/core/service_container.py,sha256=3hDwFUahxFZnokPzwgXqBP9swvZhLztKQqwe9xEHgsw,18497
|
|
583
583
|
claude_mpm/services/core/service_interfaces.py,sha256=dlNp0K4gaMcLiNSZxXjsL-kto6vipYw87pBuFK7oVNo,10770
|
|
584
584
|
claude_mpm/services/core/interfaces/__init__.py,sha256=WsJ2ptrqGfLAJhwpmkwJ3GmaIuAalDNcI1IbZEP8E00,9080
|
|
@@ -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.4.dist-info/licenses/LICENSE,sha256=lpaivOlPuBZW1ds05uQLJJswy8Rp_HMNieJEbFlqvLk,1072
|
|
858
|
+
claude_mpm-4.14.4.dist-info/METADATA,sha256=Fw1ZSnYw5oxm0Y1cldnnAtvhSiY12ljdNca59-LwdzM,17967
|
|
859
|
+
claude_mpm-4.14.4.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
860
|
+
claude_mpm-4.14.4.dist-info/entry_points.txt,sha256=Vlw3GNi-OtTpKSrez04iNrPmxNxYDpIWxmJCxiZ5Tx8,526
|
|
861
|
+
claude_mpm-4.14.4.dist-info/top_level.txt,sha256=1nUg3FEaBySgm8t-s54jK5zoPnu3_eY6EP6IOlekyHA,11
|
|
862
|
+
claude_mpm-4.14.4.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|