claude-mpm 5.4.36__py3-none-any.whl → 5.4.59__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.

Files changed (137) hide show
  1. claude_mpm/VERSION +1 -1
  2. claude_mpm/agents/PM_INSTRUCTIONS.md +489 -177
  3. claude_mpm/agents/base_agent.json +1 -1
  4. claude_mpm/agents/frontmatter_validator.py +2 -2
  5. claude_mpm/cli/commands/configure_agent_display.py +12 -0
  6. claude_mpm/cli/commands/mpm_init/core.py +72 -0
  7. claude_mpm/cli/commands/profile.py +276 -0
  8. claude_mpm/cli/commands/skills.py +14 -18
  9. claude_mpm/cli/executor.py +10 -0
  10. claude_mpm/cli/parsers/base_parser.py +7 -0
  11. claude_mpm/cli/parsers/profile_parser.py +147 -0
  12. claude_mpm/cli/parsers/skills_parser.py +0 -6
  13. claude_mpm/cli/startup.py +433 -147
  14. claude_mpm/commands/mpm-config.md +13 -250
  15. claude_mpm/commands/mpm-doctor.md +9 -22
  16. claude_mpm/commands/mpm-help.md +5 -206
  17. claude_mpm/commands/mpm-init.md +81 -507
  18. claude_mpm/commands/mpm-monitor.md +15 -402
  19. claude_mpm/commands/mpm-organize.md +61 -441
  20. claude_mpm/commands/mpm-postmortem.md +6 -108
  21. claude_mpm/commands/mpm-session-resume.md +12 -363
  22. claude_mpm/commands/mpm-status.md +5 -69
  23. claude_mpm/commands/mpm-ticket-view.md +52 -495
  24. claude_mpm/commands/mpm-version.md +5 -107
  25. claude_mpm/core/optimized_startup.py +61 -0
  26. claude_mpm/core/shared/config_loader.py +3 -1
  27. claude_mpm/dashboard/static/svelte-build/_app/immutable/assets/0.DWzvg0-y.css +1 -0
  28. claude_mpm/dashboard/static/svelte-build/_app/immutable/assets/2.ThTw9_ym.css +1 -0
  29. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{CWc5urbQ.js → 4TdZjIqw.js} +1 -1
  30. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/5shd3_w0.js +24 -0
  31. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/B0uc0UOD.js +36 -0
  32. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/B7RN905-.js +1 -0
  33. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/B7xVLGWV.js +2 -0
  34. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BIF9m_hv.js +61 -0
  35. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BKjSRqUr.js +1 -0
  36. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BPYeabCQ.js +1 -0
  37. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BQaXIfA_.js +331 -0
  38. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{uj46x2Wr.js → BSNlmTZj.js} +1 -1
  39. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Be7GpZd6.js +7 -0
  40. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Bh0LDWpI.js +145 -0
  41. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BofRWZRR.js +10 -0
  42. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BovzEFCE.js +30 -0
  43. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/C30mlcqg.js +165 -0
  44. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/C4B-KCzX.js +1 -0
  45. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/C4JcI4KD.js +122 -0
  46. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CBBdVcY8.js +1 -0
  47. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CDuw-vjf.js +1 -0
  48. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/C_Usid8X.js +15 -0
  49. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Cfqx1Qun.js +10 -0
  50. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CiIAseT4.js +128 -0
  51. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CmKTTxBW.js +1 -0
  52. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CnA0NrzZ.js +1 -0
  53. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Cs_tUR18.js +24 -0
  54. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Cu_Erd72.js +261 -0
  55. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CyWMqx4W.js +43 -0
  56. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CzZX-COe.js +220 -0
  57. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CzeYkLYB.js +65 -0
  58. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/D3k0OPJN.js +4 -0
  59. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/D9lljYKQ.js +1 -0
  60. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DGkLK5U1.js +267 -0
  61. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DI7hHRFL.js +1 -0
  62. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DLVjFsZ3.js +139 -0
  63. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DUrLdbGD.js +89 -0
  64. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DVp1hx9R.js +1 -0
  65. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DY1XQ8fi.js +2 -0
  66. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DZX00Y4g.js +1 -0
  67. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Da0KfYnO.js +1 -0
  68. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DaimHw_p.js +68 -0
  69. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Dfy6j1xT.js +323 -0
  70. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Dhb8PKl3.js +1 -0
  71. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Dle-35c7.js +64 -0
  72. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DmxopI1J.js +1 -0
  73. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DwBR2MJi.js +60 -0
  74. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/GYwsonyD.js +1 -0
  75. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Gi6I4Gst.js +1 -0
  76. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{DjhvlsAc.js → NqQ1dWOy.js} +1 -1
  77. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/RJiighC3.js +1 -0
  78. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{N4qtv3Hx.js → Vzk33B_K.js} +1 -1
  79. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/ZGh7QtNv.js +7 -0
  80. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/bT1r9zLR.js +1 -0
  81. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/bTOqqlTd.js +1 -0
  82. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/eNVUfhuA.js +1 -0
  83. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/iEWssX7S.js +162 -0
  84. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/sQeU3Y1z.js +1 -0
  85. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/uuIeMWc-.js +1 -0
  86. claude_mpm/dashboard/static/svelte-build/_app/immutable/entry/app.D6-I5TpK.js +2 -0
  87. claude_mpm/dashboard/static/svelte-build/_app/immutable/entry/start.NWzMBYRp.js +1 -0
  88. claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/{0.CAGBuiOw.js → 0.m1gL8KXf.js} +1 -1
  89. claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/1.CgNOuw-d.js +1 -0
  90. claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/2.C0GcWctS.js +1 -0
  91. claude_mpm/dashboard/static/svelte-build/_app/version.json +1 -1
  92. claude_mpm/dashboard/static/svelte-build/index.html +10 -10
  93. claude_mpm/dashboard-svelte/node_modules/katex/src/fonts/generate_fonts.py +58 -0
  94. claude_mpm/dashboard-svelte/node_modules/katex/src/metrics/extract_tfms.py +114 -0
  95. claude_mpm/dashboard-svelte/node_modules/katex/src/metrics/extract_ttfs.py +122 -0
  96. claude_mpm/dashboard-svelte/node_modules/katex/src/metrics/format_json.py +28 -0
  97. claude_mpm/dashboard-svelte/node_modules/katex/src/metrics/parse_tfm.py +211 -0
  98. claude_mpm/hooks/kuzu_memory_hook.py +5 -5
  99. claude_mpm/init.py +276 -0
  100. claude_mpm/scripts/start_activity_logging.py +0 -0
  101. claude_mpm/services/agents/agent_builder.py +3 -3
  102. claude_mpm/services/agents/deployment/agent_deployment.py +22 -0
  103. claude_mpm/services/agents/deployment/agent_discovery_service.py +3 -1
  104. claude_mpm/services/agents/deployment/agent_format_converter.py +25 -13
  105. claude_mpm/services/agents/deployment/agent_template_builder.py +29 -17
  106. claude_mpm/services/agents/deployment/async_agent_deployment.py +31 -27
  107. claude_mpm/services/agents/deployment/local_template_deployment.py +3 -1
  108. claude_mpm/services/agents/deployment/multi_source_deployment_service.py +149 -4
  109. claude_mpm/services/agents/deployment/remote_agent_discovery_service.py +47 -26
  110. claude_mpm/services/agents/git_source_manager.py +21 -2
  111. claude_mpm/services/agents/sources/git_source_sync_service.py +116 -5
  112. claude_mpm/services/monitor/management/lifecycle.py +7 -1
  113. claude_mpm/services/pm_skills_deployer.py +711 -0
  114. claude_mpm/services/profile_manager.py +337 -0
  115. claude_mpm/services/skills/git_skill_source_manager.py +148 -11
  116. claude_mpm/services/skills/selective_skill_deployer.py +97 -48
  117. claude_mpm/services/skills_deployer.py +161 -65
  118. claude_mpm/skills/bundled/security-scanning.md +112 -0
  119. claude_mpm/skills/skill_manager.py +98 -3
  120. claude_mpm/templates/.pre-commit-config.yaml +112 -0
  121. {claude_mpm-5.4.36.dist-info → claude_mpm-5.4.59.dist-info}/METADATA +3 -2
  122. {claude_mpm-5.4.36.dist-info → claude_mpm-5.4.59.dist-info}/RECORD +126 -67
  123. claude_mpm/dashboard/static/svelte-build/_app/immutable/assets/0.B_FtCwCQ.css +0 -1
  124. claude_mpm/dashboard/static/svelte-build/_app/immutable/assets/2.Cl_eSA4x.css +0 -1
  125. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BgChzWQ1.js +0 -1
  126. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CIXEwuWe.js +0 -1
  127. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DMkZpdF2.js +0 -2
  128. claude_mpm/dashboard/static/svelte-build/_app/immutable/entry/app.DTL5mJO-.js +0 -2
  129. claude_mpm/dashboard/static/svelte-build/_app/immutable/entry/start.DzuEhzqh.js +0 -1
  130. claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/1.DFLC8jdE.js +0 -1
  131. claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/2.DPvEihJJ.js +0 -10
  132. claude_mpm/hooks/claude_hooks/services/__pycache__/connection_manager.cpython-311.pyc +0 -0
  133. {claude_mpm-5.4.36.dist-info → claude_mpm-5.4.59.dist-info}/WHEEL +0 -0
  134. {claude_mpm-5.4.36.dist-info → claude_mpm-5.4.59.dist-info}/entry_points.txt +0 -0
  135. {claude_mpm-5.4.36.dist-info → claude_mpm-5.4.59.dist-info}/licenses/LICENSE +0 -0
  136. {claude_mpm-5.4.36.dist-info → claude_mpm-5.4.59.dist-info}/licenses/LICENSE-FAQ.md +0 -0
  137. {claude_mpm-5.4.36.dist-info → claude_mpm-5.4.59.dist-info}/top_level.txt +0 -0
@@ -2,7 +2,9 @@
2
2
 
3
3
  import json
4
4
  from pathlib import Path
5
- from typing import Dict, List, Optional
5
+ from typing import Any, Dict, List, Optional
6
+
7
+ import yaml
6
8
 
7
9
  from claude_mpm.core.logging_utils import get_logger
8
10
 
@@ -56,12 +58,81 @@ class SkillManager:
56
58
  if mapping_count > 0:
57
59
  logger.info(f"Loaded skill mappings for {mapping_count} agents")
58
60
 
61
+ def _get_pm_skills(
62
+ self, project_dir: Optional[Path] = None
63
+ ) -> List[Dict[str, Any]]:
64
+ """Load PM skills from project's .claude-mpm/skills/pm/ directory.
65
+
66
+ PM skills are special required skills deployed per-project,
67
+ NOT fetched from the skills repository.
68
+
69
+ Args:
70
+ project_dir: Project directory. Defaults to current working directory.
71
+
72
+ Returns:
73
+ List of PM skill dictionaries with metadata
74
+ """
75
+ if project_dir is None:
76
+ project_dir = Path.cwd()
77
+
78
+ pm_skills_dir = project_dir / ".claude-mpm" / "skills" / "pm"
79
+
80
+ if not pm_skills_dir.exists():
81
+ logger.debug("PM skills directory not found")
82
+ return []
83
+
84
+ skills = []
85
+ for skill_dir in pm_skills_dir.iterdir():
86
+ if skill_dir.is_dir():
87
+ skill_file = skill_dir / "SKILL.md"
88
+ if skill_file.exists():
89
+ skill = self._load_pm_skill(skill_file)
90
+ if skill:
91
+ skills.append(skill)
92
+
93
+ if skills:
94
+ logger.debug(f"Loaded {len(skills)} PM skills from {pm_skills_dir}")
95
+
96
+ return skills
97
+
98
+ def _load_pm_skill(self, skill_file: Path) -> Optional[Dict[str, Any]]:
99
+ """Load a single PM skill from SKILL.md file.
100
+
101
+ Args:
102
+ skill_file: Path to SKILL.md file
103
+
104
+ Returns:
105
+ Dictionary with skill metadata and content, or None if failed
106
+ """
107
+ try:
108
+ content = skill_file.read_text(encoding="utf-8")
109
+
110
+ # Parse YAML frontmatter
111
+ if content.startswith("---"):
112
+ parts = content.split("---", 2)
113
+ if len(parts) >= 3:
114
+ metadata = yaml.safe_load(parts[1])
115
+ body = parts[2].strip()
116
+
117
+ return {
118
+ "name": metadata.get("name", skill_file.parent.name),
119
+ "version": metadata.get("version", "1.0.0"),
120
+ "description": metadata.get("description", ""),
121
+ "when_to_use": metadata.get("when_to_use", ""),
122
+ "content": body,
123
+ "is_pm_skill": True,
124
+ }
125
+ except Exception as e:
126
+ logger.warning(f"Failed to load PM skill {skill_file}: {e}")
127
+
128
+ return None
129
+
59
130
  def get_agent_skills(self, agent_type: str) -> List[Skill]:
60
131
  """
61
- Get all skills for an agent (bundled + discovered).
132
+ Get all skills for an agent (bundled + discovered + PM skills if PM agent).
62
133
 
63
134
  Args:
64
- agent_type: Agent type/ID (e.g., 'engineer', 'python_engineer')
135
+ agent_type: Agent type/ID (e.g., 'engineer', 'python_engineer', 'pm')
65
136
 
66
137
  Returns:
67
138
  List of Skill objects for this agent
@@ -86,6 +157,30 @@ class SkillManager:
86
157
  if skill not in skills:
87
158
  skills.append(skill)
88
159
 
160
+ # Add PM skills for PM agent only
161
+ if agent_type.lower() in ("pm", "project-manager", "project_manager"):
162
+ pm_skill_dicts = self._get_pm_skills()
163
+ for pm_skill_dict in pm_skill_dicts:
164
+ # Convert PM skill dict to Skill object
165
+ pm_skill = Skill(
166
+ name=pm_skill_dict["name"],
167
+ path=Path.cwd()
168
+ / ".claude-mpm"
169
+ / "skills"
170
+ / "pm"
171
+ / pm_skill_dict["name"],
172
+ content=pm_skill_dict["content"],
173
+ source="pm", # Special source type for PM skills
174
+ version=pm_skill_dict["version"],
175
+ skill_id=pm_skill_dict["name"],
176
+ description=pm_skill_dict["description"],
177
+ agent_types=["pm", "project-manager", "project_manager"],
178
+ )
179
+ skills.append(pm_skill)
180
+
181
+ if pm_skill_dicts:
182
+ logger.debug(f"Added {len(pm_skill_dicts)} PM skills for PM agent")
183
+
89
184
  return skills
90
185
 
91
186
  def enhance_agent_prompt(
@@ -0,0 +1,112 @@
1
+ # Pre-commit hooks configuration for claude-mpm
2
+ # See https://pre-commit.com for more information
3
+ # See https://pre-commit.com/hooks.html for more hooks
4
+
5
+ repos:
6
+ # Standard pre-commit hooks
7
+ - repo: https://github.com/pre-commit/pre-commit-hooks
8
+ rev: v4.5.0
9
+ hooks:
10
+ - id: trailing-whitespace
11
+ exclude: ^(.*\.md|.*\.txt)$
12
+ - id: end-of-file-fixer
13
+ exclude: ^(.*\.md|.*\.txt)$
14
+ - id: check-yaml
15
+ args: ['--unsafe'] # Allow custom YAML tags
16
+ - id: check-json
17
+ - id: check-toml
18
+ - id: check-merge-conflict
19
+ - id: check-added-large-files
20
+ args: ['--maxkb=1000']
21
+ - id: check-case-conflict
22
+ - id: check-executables-have-shebangs
23
+ - id: check-shebang-scripts-are-executable
24
+ - id: mixed-line-ending
25
+ args: ['--fix=lf']
26
+
27
+ # Ruff - replaces black, isort, flake8, pyupgrade (10-200x faster)
28
+ - repo: https://github.com/astral-sh/ruff-pre-commit
29
+ rev: v0.8.4 # Use latest version
30
+ hooks:
31
+ # Run the linter
32
+ - id: ruff
33
+ args: [--fix]
34
+ # Run the formatter
35
+ - id: ruff-format
36
+
37
+ # Type checking with mypy
38
+ - repo: https://github.com/pre-commit/mirrors-mypy
39
+ rev: v1.8.0
40
+ hooks:
41
+ - id: mypy
42
+ additional_dependencies: [types-PyYAML, types-requests]
43
+ args: ['--config-file=mypy.ini']
44
+ exclude: ^(venv/|\.venv/|env/|\.env/|build/|dist/|\.git/|tests/.*\.py|scripts/.*\.py)
45
+
46
+ # Security scanning with bandit
47
+ - repo: https://github.com/pycqa/bandit
48
+ rev: 1.7.5
49
+ hooks:
50
+ - id: bandit
51
+ args: ['-r', '-f', 'json']
52
+ exclude: ^(venv/|\.venv/|env/|\.env/|build/|dist/|\.git/|tests/.*\.py)
53
+
54
+ # Secret detection with detect-secrets
55
+ - repo: https://github.com/Yelp/detect-secrets
56
+ rev: v1.5.0
57
+ hooks:
58
+ - id: detect-secrets
59
+ args: ['--baseline', '.secrets.baseline']
60
+ exclude: |
61
+ (?x)^(
62
+ venv/.*|
63
+ \.venv/.*|
64
+ node_modules/.*|
65
+ \.git/.*|
66
+ __pycache__/.*|
67
+ .*\.lock|
68
+ .*package-lock\.json|
69
+ .*\.pyc
70
+ )$
71
+
72
+ # Documentation linting
73
+ - repo: https://github.com/pycqa/doc8
74
+ rev: v1.1.1
75
+ hooks:
76
+ - id: doc8
77
+ args: ['--max-line-length=88']
78
+ files: \.rst$
79
+
80
+ # Commitizen for conventional commits
81
+ - repo: https://github.com/commitizen-tools/commitizen
82
+ rev: v3.13.0
83
+ hooks:
84
+ - id: commitizen
85
+ stages: [commit-msg]
86
+
87
+ # Configuration for specific file types
88
+ exclude: |
89
+ (?x)^(
90
+ venv/.*|
91
+ \.venv/.*|
92
+ env/.*|
93
+ \.env/.*|
94
+ build/.*|
95
+ dist/.*|
96
+ \.git/.*|
97
+ __pycache__/.*|
98
+ .*\.pyc|
99
+ .*\.pyo|
100
+ .*\.egg-info/.*|
101
+ \.coverage|
102
+ \.pytest_cache/.*|
103
+ \.mypy_cache/.*|
104
+ node_modules/.*|
105
+ \.DS_Store|
106
+ \.vscode/.*|
107
+ \.idea/.*
108
+ )$
109
+
110
+ # Global settings
111
+ default_stages: [pre-commit]
112
+ fail_fast: false
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: claude-mpm
3
- Version: 5.4.36
3
+ Version: 5.4.59
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
@@ -49,7 +49,6 @@ Requires-Dist: rich>=13.0.0
49
49
  Requires-Dist: questionary>=2.0.0
50
50
  Requires-Dist: pyee>=13.0.0
51
51
  Requires-Dist: pathspec>=0.11.0
52
- Requires-Dist: kuzu-memory>=1.1.5
53
52
  Provides-Extra: mcp
54
53
  Requires-Dist: mcp>=0.1.0; extra == "mcp"
55
54
  Requires-Dist: mcp-vector-search>=0.1.0; extra == "mcp"
@@ -101,6 +100,8 @@ Requires-Dist: pymongo>=4.5.0; extra == "data-processing"
101
100
  Requires-Dist: redis>=5.0.0; extra == "data-processing"
102
101
  Requires-Dist: beautifulsoup4>=4.12.0; extra == "data-processing"
103
102
  Requires-Dist: jsonschema>=4.19.0; extra == "data-processing"
103
+ Provides-Extra: memory
104
+ Requires-Dist: kuzu-memory>=1.1.5; extra == "memory"
104
105
  Dynamic: license-file
105
106
 
106
107
  # Claude MPM - Multi-Agent Project Manager