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 CHANGED
@@ -1 +1 @@
1
- 4.14.3
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
- See **[Git File Tracking Protocol](templates/git_file_tracking.md)** for complete file tracking requirements, including:
599
- - Decision matrix for tracking vs skipping files
600
- - Step-by-step verification checklist
601
- - Commit message templates with examples
602
- - Edge cases and special considerations
603
- - Circuit breaker integration (violation detection)
604
-
605
- **Quick Summary**: Any file created during a session MUST be tracked in git with proper context (unless in .gitignore or /tmp/). This is PM's quality assurance responsibility and CANNOT be delegated. PM must run `git status` before ending sessions and commit all trackable files with contextual messages using Claude MPM branding.
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 = Path.cwd()
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 = Path.cwd()
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 = Path.cwd() / ".claude-mpm" / "INSTRUCTIONS.md"
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
- Path.cwd(),
442
+ self._get_working_dir(),
427
443
  # Development location
428
444
  Path.home() / "Projects" / "claude-mpm",
429
445
  # Current directory subdirectory
430
- Path.cwd() / "claude-mpm",
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 (Path.cwd() / "pyproject.toml").exists():
506
+ if (self._get_working_dir() / "pyproject.toml").exists():
491
507
  return DeploymentContext.DEVELOPMENT
492
508
 
493
509
  return DeploymentContext.UNKNOWN
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: claude-mpm
3
- Version: 4.14.3
3
+ Version: 4.14.4
4
4
  Summary: Claude Multi-Agent Project Manager - Orchestrate Claude with agent delegation and ticket tracking
5
5
  Author-email: Bob Matsuoka <bob@matsuoka.com>
6
6
  Maintainer: Claude MPM Team
@@ -1,5 +1,5 @@
1
1
  claude_mpm/BUILD_NUMBER,sha256=9JfxhnDtr-8l3kCP2U5TVXSErptHoga8m7XA8zqgGOc,4
2
- claude_mpm/VERSION,sha256=7oWlBGWd7V4lGnco4r7qGl9xG9jxdiZYnWOZLOTq-W8,7
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=sL-SJVMidqhQudyLW6ANKgwNmCdYtWyeUtuU4i34cBg,30363
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=VtqiOEUlskAr9nRsaS9uXQSSjDD8dIrYfNML0zLY2zo,17764
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.3.dist-info/licenses/LICENSE,sha256=lpaivOlPuBZW1ds05uQLJJswy8Rp_HMNieJEbFlqvLk,1072
858
- claude_mpm-4.14.3.dist-info/METADATA,sha256=k0U40o3Amwo591JVys273VyI_mUHl0wqwcTLcnm29Zw,17967
859
- claude_mpm-4.14.3.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
860
- claude_mpm-4.14.3.dist-info/entry_points.txt,sha256=Vlw3GNi-OtTpKSrez04iNrPmxNxYDpIWxmJCxiZ5Tx8,526
861
- claude_mpm-4.14.3.dist-info/top_level.txt,sha256=1nUg3FEaBySgm8t-s54jK5zoPnu3_eY6EP6IOlekyHA,11
862
- claude_mpm-4.14.3.dist-info/RECORD,,
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,,