claude-mpm 4.1.4__py3-none-any.whl → 4.1.5__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.
Files changed (41) hide show
  1. claude_mpm/VERSION +1 -1
  2. claude_mpm/cli/commands/tickets.py +365 -784
  3. claude_mpm/core/output_style_manager.py +24 -0
  4. claude_mpm/core/unified_agent_registry.py +46 -15
  5. claude_mpm/services/agents/deployment/agent_discovery_service.py +12 -3
  6. claude_mpm/services/agents/deployment/agent_lifecycle_manager.py +172 -233
  7. claude_mpm/services/agents/deployment/agent_lifecycle_manager_refactored.py +575 -0
  8. claude_mpm/services/agents/deployment/agent_operation_service.py +573 -0
  9. claude_mpm/services/agents/deployment/agent_record_service.py +419 -0
  10. claude_mpm/services/agents/deployment/agent_state_service.py +381 -0
  11. claude_mpm/services/agents/deployment/multi_source_deployment_service.py +4 -2
  12. claude_mpm/services/infrastructure/__init__.py +31 -5
  13. claude_mpm/services/infrastructure/monitoring/__init__.py +43 -0
  14. claude_mpm/services/infrastructure/monitoring/aggregator.py +437 -0
  15. claude_mpm/services/infrastructure/monitoring/base.py +130 -0
  16. claude_mpm/services/infrastructure/monitoring/legacy.py +203 -0
  17. claude_mpm/services/infrastructure/monitoring/network.py +218 -0
  18. claude_mpm/services/infrastructure/monitoring/process.py +342 -0
  19. claude_mpm/services/infrastructure/monitoring/resources.py +243 -0
  20. claude_mpm/services/infrastructure/monitoring/service.py +367 -0
  21. claude_mpm/services/infrastructure/monitoring.py +67 -1030
  22. claude_mpm/services/project/analyzer.py +13 -4
  23. claude_mpm/services/project/analyzer_refactored.py +450 -0
  24. claude_mpm/services/project/analyzer_v2.py +566 -0
  25. claude_mpm/services/project/architecture_analyzer.py +461 -0
  26. claude_mpm/services/project/dependency_analyzer.py +462 -0
  27. claude_mpm/services/project/language_analyzer.py +265 -0
  28. claude_mpm/services/project/metrics_collector.py +410 -0
  29. claude_mpm/services/ticket_manager.py +5 -1
  30. claude_mpm/services/ticket_services/__init__.py +26 -0
  31. claude_mpm/services/ticket_services/crud_service.py +328 -0
  32. claude_mpm/services/ticket_services/formatter_service.py +290 -0
  33. claude_mpm/services/ticket_services/search_service.py +324 -0
  34. claude_mpm/services/ticket_services/validation_service.py +303 -0
  35. claude_mpm/services/ticket_services/workflow_service.py +244 -0
  36. {claude_mpm-4.1.4.dist-info → claude_mpm-4.1.5.dist-info}/METADATA +1 -1
  37. {claude_mpm-4.1.4.dist-info → claude_mpm-4.1.5.dist-info}/RECORD +41 -17
  38. {claude_mpm-4.1.4.dist-info → claude_mpm-4.1.5.dist-info}/WHEEL +0 -0
  39. {claude_mpm-4.1.4.dist-info → claude_mpm-4.1.5.dist-info}/entry_points.txt +0 -0
  40. {claude_mpm-4.1.4.dist-info → claude_mpm-4.1.5.dist-info}/licenses/LICENSE +0 -0
  41. {claude_mpm-4.1.4.dist-info → claude_mpm-4.1.5.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,244 @@
1
+ """
2
+ Workflow service for ticket state transitions.
3
+
4
+ WHY: Manages ticket workflow states and transitions, ensuring valid
5
+ state changes and maintaining workflow integrity.
6
+
7
+ DESIGN DECISIONS:
8
+ - Enforces valid state transitions
9
+ - Handles workflow-specific operations (comments, notifications)
10
+ - Provides workflow history tracking
11
+ - Abstracts aitrackdown workflow commands
12
+ """
13
+
14
+ import subprocess
15
+ from typing import Any, Dict, List, Optional, Tuple
16
+
17
+ from ...core.logger import get_logger
18
+
19
+
20
+ class TicketWorkflowService:
21
+ """Service for managing ticket workflow states."""
22
+
23
+ # Valid workflow transitions
24
+ WORKFLOW_TRANSITIONS = {
25
+ "todo": ["in_progress", "blocked"],
26
+ "in_progress": ["ready", "blocked", "todo"],
27
+ "ready": ["tested", "in_progress", "blocked"],
28
+ "tested": ["done", "ready", "blocked"],
29
+ "done": ["tested", "ready"], # Can reopen
30
+ "blocked": ["todo", "in_progress", "ready"],
31
+ }
32
+
33
+ # Status to workflow state mapping
34
+ STATUS_TO_WORKFLOW = {
35
+ "open": "todo",
36
+ "in_progress": "in_progress",
37
+ "ready": "ready",
38
+ "tested": "tested",
39
+ "done": "done",
40
+ "closed": "done",
41
+ "blocked": "blocked",
42
+ "waiting": "blocked",
43
+ }
44
+
45
+ def __init__(self):
46
+ """Initialize the workflow service."""
47
+ self.logger = get_logger("services.ticket_workflow")
48
+
49
+ def transition_ticket(
50
+ self,
51
+ ticket_id: str,
52
+ new_state: str,
53
+ comment: Optional[str] = None,
54
+ force: bool = False,
55
+ ) -> Dict[str, Any]:
56
+ """
57
+ Transition a ticket to a new workflow state.
58
+
59
+ Args:
60
+ ticket_id: ID of the ticket
61
+ new_state: Target workflow state
62
+ comment: Optional comment for the transition
63
+ force: Force transition even if not normally allowed
64
+
65
+ Returns:
66
+ Dict with success status and message
67
+ """
68
+ try:
69
+ # Validate the transition if not forced
70
+ if not force:
71
+ valid, error = self.validate_transition(ticket_id, new_state)
72
+ if not valid:
73
+ return {"success": False, "error": error}
74
+
75
+ # Use aitrackdown CLI for the transition
76
+ result = self._transition_via_aitrackdown(ticket_id, new_state, comment)
77
+
78
+ if result["success"]:
79
+ # Log successful transition
80
+ self.logger.info(f"Transitioned {ticket_id} to {new_state}")
81
+
82
+ return result
83
+
84
+ except Exception as e:
85
+ self.logger.error(f"Error transitioning ticket {ticket_id}: {e}")
86
+ return {"success": False, "error": str(e)}
87
+
88
+ def _transition_via_aitrackdown(
89
+ self, ticket_id: str, state: str, comment: Optional[str]
90
+ ) -> Dict[str, Any]:
91
+ """Transition ticket using aitrackdown CLI."""
92
+ try:
93
+ cmd = ["aitrackdown", "transition", ticket_id, state]
94
+
95
+ if comment:
96
+ cmd.extend(["--comment", comment])
97
+
98
+ subprocess.run(cmd, check=True, capture_output=True, text=True)
99
+
100
+ return {
101
+ "success": True,
102
+ "message": f"Updated workflow state for {ticket_id} to: {state}",
103
+ }
104
+ except subprocess.CalledProcessError as e:
105
+ self.logger.error(f"Failed to transition via CLI: {e}")
106
+ return {
107
+ "success": False,
108
+ "error": f"Failed to update workflow state for ticket: {ticket_id}",
109
+ }
110
+
111
+ def validate_transition(
112
+ self, ticket_id: str, new_state: str
113
+ ) -> Tuple[bool, Optional[str]]:
114
+ """
115
+ Validate if a workflow transition is allowed.
116
+
117
+ Returns:
118
+ Tuple of (is_valid, error_message)
119
+ """
120
+ # For now, we assume all transitions are valid since we don't
121
+ # have access to current state without fetching the ticket
122
+ # In a real implementation, this would check current state
123
+
124
+ if new_state not in self.WORKFLOW_TRANSITIONS:
125
+ return False, f"Invalid workflow state: {new_state}"
126
+
127
+ # TODO: Fetch current state and validate transition
128
+ # current_state = self._get_current_state(ticket_id)
129
+ # if new_state not in self.WORKFLOW_TRANSITIONS.get(current_state, []):
130
+ # return False, f"Cannot transition from {current_state} to {new_state}"
131
+
132
+ return True, None
133
+
134
+ def add_comment(self, ticket_id: str, comment: str) -> Dict[str, Any]:
135
+ """
136
+ Add a comment to a ticket.
137
+
138
+ Args:
139
+ ticket_id: ID of the ticket
140
+ comment: Comment text
141
+
142
+ Returns:
143
+ Dict with success status and message
144
+ """
145
+ try:
146
+ cmd = ["aitrackdown", "comment", ticket_id, comment]
147
+
148
+ subprocess.run(cmd, check=True, capture_output=True, text=True)
149
+
150
+ return {"success": True, "message": f"Added comment to ticket: {ticket_id}"}
151
+ except subprocess.CalledProcessError as e:
152
+ self.logger.error(f"Failed to add comment: {e}")
153
+ return {
154
+ "success": False,
155
+ "error": f"Failed to add comment to ticket: {ticket_id}",
156
+ }
157
+
158
+ def get_workflow_states(self) -> List[str]:
159
+ """
160
+ Get list of all valid workflow states.
161
+
162
+ Returns:
163
+ List of workflow state names
164
+ """
165
+ return list(self.WORKFLOW_TRANSITIONS.keys())
166
+
167
+ def get_valid_transitions(self, current_state: str) -> List[str]:
168
+ """
169
+ Get valid transitions from a given state.
170
+
171
+ Args:
172
+ current_state: Current workflow state
173
+
174
+ Returns:
175
+ List of valid target states
176
+ """
177
+ return self.WORKFLOW_TRANSITIONS.get(current_state, [])
178
+
179
+ def map_status_to_workflow(self, status: str) -> str:
180
+ """
181
+ Map a ticket status to a workflow state.
182
+
183
+ Args:
184
+ status: Ticket status
185
+
186
+ Returns:
187
+ Corresponding workflow state
188
+ """
189
+ return self.STATUS_TO_WORKFLOW.get(status, "todo")
190
+
191
+ def bulk_transition(
192
+ self, ticket_ids: List[str], new_state: str, comment: Optional[str] = None
193
+ ) -> Dict[str, Any]:
194
+ """
195
+ Transition multiple tickets to a new state.
196
+
197
+ Args:
198
+ ticket_ids: List of ticket IDs
199
+ new_state: Target workflow state
200
+ comment: Optional comment for all transitions
201
+
202
+ Returns:
203
+ Dict with results for each ticket
204
+ """
205
+ results = {"succeeded": [], "failed": [], "total": len(ticket_ids)}
206
+
207
+ for ticket_id in ticket_ids:
208
+ result = self.transition_ticket(ticket_id, new_state, comment)
209
+
210
+ if result["success"]:
211
+ results["succeeded"].append(ticket_id)
212
+ else:
213
+ results["failed"].append(
214
+ {
215
+ "ticket_id": ticket_id,
216
+ "error": result.get("error", "Unknown error"),
217
+ }
218
+ )
219
+
220
+ return {"success": len(results["failed"]) == 0, "results": results}
221
+
222
+ def get_workflow_summary(self, tickets: List[Dict[str, Any]]) -> Dict[str, int]:
223
+ """
224
+ Get summary of tickets by workflow state.
225
+
226
+ Args:
227
+ tickets: List of ticket dictionaries
228
+
229
+ Returns:
230
+ Dict mapping workflow states to counts
231
+ """
232
+ summary = dict.fromkeys(self.WORKFLOW_TRANSITIONS.keys(), 0)
233
+ summary["unknown"] = 0
234
+
235
+ for ticket in tickets:
236
+ status = ticket.get("status", "unknown")
237
+ workflow_state = self.map_status_to_workflow(status)
238
+
239
+ if workflow_state in summary:
240
+ summary[workflow_state] += 1
241
+ else:
242
+ summary["unknown"] += 1
243
+
244
+ return summary
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: claude-mpm
3
- Version: 4.1.4
3
+ Version: 4.1.5
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=toytnNjkIKPgQaGwDqQdC1rpNTAdSEc6Vja50d7Ovug,4
2
- claude_mpm/VERSION,sha256=o5FP181BUxf8Ay2o_LTaCIABFLB3K9OJ0P32IWJvxhw,6
2
+ claude_mpm/VERSION,sha256=czjCYBagmbs_O-Ak6fxF_2zjRM56SKuPyTJA1i1M2lw,6
3
3
  claude_mpm/__init__.py,sha256=lyTZAYGH4DTaFGLRNWJKk5Q5oTjzN5I6AXmfVX-Jff0,1512
4
4
  claude_mpm/__main__.py,sha256=Ro5UBWBoQaSAIoSqWAr7zkbLyvi4sSy28WShqAhKJG0,723
5
5
  claude_mpm/constants.py,sha256=8iLwOogyO85tq8hnBIlX2JfOoAL_eu8_9hDEEtNS394,5650
@@ -82,7 +82,7 @@ claude_mpm/cli/commands/memory.py,sha256=Yzfs3_oiKciv3sfOoDm2lJL4M9idG7ARV3-sNw1
82
82
  claude_mpm/cli/commands/monitor.py,sha256=F4HY3x1A6hJgtHJlLssIWJFgND1xFGfzZSLU0ylwHpM,27308
83
83
  claude_mpm/cli/commands/run.py,sha256=7jvKy4emK8szoHR9nEigXnOrkugx4MduLmUadfWnUv0,43113
84
84
  claude_mpm/cli/commands/socketio_monitor.py,sha256=GHHY5pKg0XCffoqLoO0l0Nxa9HQY4gdrpYebLVahzl4,9540
85
- claude_mpm/cli/commands/tickets.py,sha256=gK8IL4IRZmLQTqJh3eEWU4TU_kbdo-Z9BE1QtFaF9dI,33514
85
+ claude_mpm/cli/commands/tickets.py,sha256=kl2dklTBnG3Y4jUUJ_PcEVsTx4CtVJfkGWboWBx_mQM,21234
86
86
  claude_mpm/cli/parsers/__init__.py,sha256=f0Fm1DDXorlVOZPLxUpjC-GIvLh01G-FZOK7TEV1L3I,1005
87
87
  claude_mpm/cli/parsers/agent_manager_parser.py,sha256=8HuGpTnHSOnTOqOHriBTzi8EzKLMSfqH2eFHs0dEuu4,8009
88
88
  claude_mpm/cli/parsers/agents_parser.py,sha256=DxAZMotptyaJbROqbRbTipOKLLJ96ATrXhwiFK6Dbm0,5450
@@ -136,7 +136,7 @@ claude_mpm/core/mixins.py,sha256=vmZ7Nu2ZOnKjbhN07Ixk4noIej9nsJiknrp-Sclfu0A,534
136
136
  claude_mpm/core/oneshot_session.py,sha256=QkSw-gs7tTQkdKQiZh7mbia5hc5PMt_xaMoDY-9_bZk,17693
137
137
  claude_mpm/core/optimized_agent_loader.py,sha256=Suwu3jXf3g8s6Y_HMK8ruPH7mkUQzTIAUQsUKy5HfIk,15788
138
138
  claude_mpm/core/optimized_startup.py,sha256=bvCLSmUstzObl5XxA252EWXzcmwFSYvKHazKgttMhmo,15478
139
- claude_mpm/core/output_style_manager.py,sha256=pahnCOzCuEAur6ZMNnDcjYuxkvWprOVOvR_E-o-UgOY,19790
139
+ claude_mpm/core/output_style_manager.py,sha256=LjEADIvCZr8iGL1RGwh15EDDVdkOCgTepIN2TDY50ho,20729
140
140
  claude_mpm/core/pm_hook_interceptor.py,sha256=vidXG7BSrsMH4eORrBrBGpiZZJGlJ8DjhK1JHqJrhlo,7099
141
141
  claude_mpm/core/service_registry.py,sha256=l0vnKNsxZVlKH-_g-WXRAIoQRqyqsKdTyo5_EAwYW1c,11580
142
142
  claude_mpm/core/session_manager.py,sha256=wlrPnoFJMDbFz1_J_FNTHmCL0WQwgA4jkdUYI3LWkBo,11943
@@ -144,7 +144,7 @@ claude_mpm/core/socketio_pool.py,sha256=10OdPPhnUJUJSVS8-nUYmHEfylYvOuTdmTUeaQGU
144
144
  claude_mpm/core/tool_access_control.py,sha256=9PiLGhe7bN9yMIqDPqIVIPUmxKsPwb5PUgcOFSl1QBk,6396
145
145
  claude_mpm/core/types.py,sha256=RQ6MQlV_G3ohLPSdQRRAlQkoCt1BuLK-vnl2JbuFQYA,7835
146
146
  claude_mpm/core/typing_utils.py,sha256=MXPPuTYT6uY-a2T-G8gouoDXn7rRPAqE3xNQ0vP1Lfo,13244
147
- claude_mpm/core/unified_agent_registry.py,sha256=fy4TgMiVfD0b_C6vjRSSml4542_h349e_Pnu4ySF6r4,24442
147
+ claude_mpm/core/unified_agent_registry.py,sha256=wAJp7mI9s1t14IseL1nwzsTd4BecVJz3Tuz0_4sBn34,25656
148
148
  claude_mpm/core/unified_config.py,sha256=MptDUDXv0scgo1zxrGQYg19A0xDHDzPFJPlYeVJPZWA,19659
149
149
  claude_mpm/core/unified_paths.py,sha256=tBb-1QCHDpmXYn1gdget8y-5fVE-vEtS1HWABVBN-J4,35958
150
150
  claude_mpm/core/shared/__init__.py,sha256=1mPHE8qCOAgJPgUZ6bYNO27xhnPN0h9ChHiMcqF1vQc,401
@@ -259,7 +259,7 @@ claude_mpm/services/socketio_client_manager.py,sha256=9TDSdiaScEbWdJpmdVUbiwzlcu
259
259
  claude_mpm/services/socketio_server.py,sha256=yE14_4pHERXBC5L1WQCpIBHuy0tpklsUY_icyl-nLkg,3033
260
260
  claude_mpm/services/subprocess_launcher_service.py,sha256=b8FeO0kh6AblWqnFX4XtSxEw93tENCczVvK0OjbYvpk,10999
261
261
  claude_mpm/services/system_instructions_service.py,sha256=Lk4SWNVfMZ0XaN-2OTGdWu3hCkaHwy98vuFOBpiZQGA,9994
262
- claude_mpm/services/ticket_manager.py,sha256=VOBlFNlhrm1qYtKklstALpl_JopNU8uD-ACZmpbTVw0,596
262
+ claude_mpm/services/ticket_manager.py,sha256=LpmbUFo7OkG48leZscHIvNoHY_thLWh2wquFxSfDg-o,785
263
263
  claude_mpm/services/utility_service.py,sha256=Cp9od5ggkElK6S-8cKxgXPOu5B17o3zfte6iiTL6HL8,8367
264
264
  claude_mpm/services/version_service.py,sha256=Ql2HKB9OoHGdqkfWyFFLSSVBwShap0dFIjbmTXrf6dE,10163
265
265
  claude_mpm/services/agents/__init__.py,sha256=8cRLDOXq_CGH3uVl6Uk816wsx7VY8HSDOYms2MPaFBA,2175
@@ -269,14 +269,18 @@ claude_mpm/services/agents/deployment/agent_config_provider.py,sha256=_voUMuk_6I
269
269
  claude_mpm/services/agents/deployment/agent_configuration_manager.py,sha256=5nf69hfo7lUa3_55sDcU5WfpzBtOZCMSTPYGr2dlIdY,12173
270
270
  claude_mpm/services/agents/deployment/agent_definition_factory.py,sha256=DaJ__b3-ADinfd-qNnW6LKWfclOaZbkBBcfuHgqlUic,2697
271
271
  claude_mpm/services/agents/deployment/agent_deployment.py,sha256=6YFg1ZcAMI_cb7xGhSm0e3qdPOrVNoQ_-o1qoc_PM2k,35514
272
- claude_mpm/services/agents/deployment/agent_discovery_service.py,sha256=VxTm-jq51nDlGek_srK5BRTAQk2XH5OxGjEgazL1e6o,13443
272
+ claude_mpm/services/agents/deployment/agent_discovery_service.py,sha256=931oHXx6mlXw-ZJ1xKofl8gsJmdJ5cuOzmAcdzik4Sw,13919
273
273
  claude_mpm/services/agents/deployment/agent_environment_manager.py,sha256=kjMiLyZYHs-s9pVdtj4av4hJW0gNXnD7lZz2CJpxmZI,9863
274
274
  claude_mpm/services/agents/deployment/agent_filesystem_manager.py,sha256=kstcGvufqF3cmmkJ_hDIHutPbIrMo_ZsGCKlIKmNbMA,12904
275
275
  claude_mpm/services/agents/deployment/agent_format_converter.py,sha256=iR-uciEkUiFQ4nR3ciEbS1uodfqTszdjjLzOyJs4KG4,15640
276
276
  claude_mpm/services/agents/deployment/agent_frontmatter_validator.py,sha256=H0yhsLbjVpwKNTUdGOgXBE-2gypT8-zFHqOBdv2XLPQ,7119
277
- claude_mpm/services/agents/deployment/agent_lifecycle_manager.py,sha256=Dn-P1QB_IBxWbkd9PjWl7c5jThydGa25WXKwTDQVXqs,40157
277
+ claude_mpm/services/agents/deployment/agent_lifecycle_manager.py,sha256=JcFYvLPz2Mp3q9th5_9DUVyZucHGUE6cHlubNzw8BgM,37833
278
+ claude_mpm/services/agents/deployment/agent_lifecycle_manager_refactored.py,sha256=VfzhWm1MzcmmC0avwSWUSaylZxUN72oSH2FCOE6aLn0,21027
278
279
  claude_mpm/services/agents/deployment/agent_metrics_collector.py,sha256=LUCvBve2_6qmixEJvsVRbDMsIJ_qlsS7_crJxMuqtlA,10024
280
+ claude_mpm/services/agents/deployment/agent_operation_service.py,sha256=wPoGYf3FU6OS0aaIgotsKGVRwiic1X4_20G2gC1RwGU,20390
281
+ claude_mpm/services/agents/deployment/agent_record_service.py,sha256=nYpfIuyDhLnzG3EUywDHgwpUerFWPyjgvsjIiSWUiEI,14064
279
282
  claude_mpm/services/agents/deployment/agent_restore_handler.py,sha256=YDPVY4m_4l5wSFq9fxsTqm0ixX8AeTyzERh-PtabuUY,3101
283
+ claude_mpm/services/agents/deployment/agent_state_service.py,sha256=yjuVG-rwyXBS0T8yKfrx1QTOSmfB_Ejvm-0QLjBNDDI,11772
280
284
  claude_mpm/services/agents/deployment/agent_template_builder.py,sha256=sUBUQ0pjSPM_C6iEthdA8uVBvLBXxXKhaBPZdibIjXg,15513
281
285
  claude_mpm/services/agents/deployment/agent_validator.py,sha256=kXzOmkUzMdr_m4Feys5FfNLKvaIttFeOqZ_KaBlIhwY,12562
282
286
  claude_mpm/services/agents/deployment/agent_version_manager.py,sha256=RtU3zrz9VJmQdNoPHQ1FA3ewhOlUmbqGAxqMel-7YcY,10910
@@ -291,7 +295,7 @@ claude_mpm/services/agents/deployment/deployment_wrapper.py,sha256=qu2U43LBmAGhG
291
295
  claude_mpm/services/agents/deployment/interface_adapter.py,sha256=mOsQ5IJHLEezq8vCoGSY5OarxolDw1B6Yr0dAYUMMVE,8078
292
296
  claude_mpm/services/agents/deployment/lifecycle_health_checker.py,sha256=2dphAvYRABNlsvi3XfVwS8kvv-YURNEwPBVtCc1g3Zc,3164
293
297
  claude_mpm/services/agents/deployment/lifecycle_performance_tracker.py,sha256=lK_yg0uRL55opUoecOJBL83Tjj6Pu_z4-4EYWPeN6tM,4336
294
- claude_mpm/services/agents/deployment/multi_source_deployment_service.py,sha256=OHiNvdd4qb5gpmXLcHzUsm0OvJHNfyyOZQ8clWTB8No,39184
298
+ claude_mpm/services/agents/deployment/multi_source_deployment_service.py,sha256=Feq2YRGAIjg-6ckFv4Wr0Ugo-mYgsv4iS-zppNJp6eU,39341
295
299
  claude_mpm/services/agents/deployment/refactored_agent_deployment_service.py,sha256=5-StpaZYqVvm-WrmLMsoIp85WFYL2p0VLWQOfZEn8jU,11707
296
300
  claude_mpm/services/agents/deployment/single_agent_deployer.py,sha256=6QtHP-y4T_-UXYXYvdQgdIooOfjnC5NArlbkUo4EPl0,11492
297
301
  claude_mpm/services/agents/deployment/system_instructions_deployer.py,sha256=SCBBXleIn322X_w-swOHjO22J3HCxSHGkd3V-rSbbOs,4060
@@ -425,11 +429,19 @@ claude_mpm/services/framework_claude_md_generator/section_generators/role_design
425
429
  claude_mpm/services/framework_claude_md_generator/section_generators/subprocess_validation.py,sha256=wzqpNwsrjcDobjot71wSa4brtrmOSoNfolHnKAOR9v0,4122
426
430
  claude_mpm/services/framework_claude_md_generator/section_generators/todo_task_tools.py,sha256=qg3tPG8RBtXHXPqmkdmgJaoBWWaYyTEoBPqm7ib4OP8,5765
427
431
  claude_mpm/services/framework_claude_md_generator/section_generators/troubleshooting.py,sha256=Omhcjcvw-sNjxcyqbaN4RaABV4JNKCOplk9pzgi-fmo,1892
428
- claude_mpm/services/infrastructure/__init__.py,sha256=-penAnKLjoOzcWT6FquxCDVkT032XaDtYUeNnNQ_sAk,792
432
+ claude_mpm/services/infrastructure/__init__.py,sha256=dKXYEeDbAHMImXmefgcHrlTdcg3E7OlWvyC3mEE2DLg,1361
429
433
  claude_mpm/services/infrastructure/context_preservation.py,sha256=QzN0SOaFx7PndLZTNn2rO8G6XGnbZvasm7Y-zOU0x-E,21060
430
434
  claude_mpm/services/infrastructure/daemon_manager.py,sha256=ZfEmSSwyP7nYRfdpEl7GdNuFOxPV99XlGnSTg_akEHI,8555
431
435
  claude_mpm/services/infrastructure/logging.py,sha256=3bYMJi-qzpPNgs1-Epfp6EAuRm5iP-hypIluSpgy0Eg,6473
432
- claude_mpm/services/infrastructure/monitoring.py,sha256=52oGk8oJCcrNfb3NJFn_4MfRn8tF4sQibfkzl-pHo6Q,35899
436
+ claude_mpm/services/infrastructure/monitoring.py,sha256=gxM2x3F4uvSlw_9YdHKNHGScWp5f6sHiRjk-bN0Xegk,2205
437
+ claude_mpm/services/infrastructure/monitoring/__init__.py,sha256=LoekELvXE7kYGQZkaBQWEb9PzbhiOOVuSC9mv2ChIu8,1066
438
+ claude_mpm/services/infrastructure/monitoring/aggregator.py,sha256=vvPSDrvJmO2l9QhUajz4ZxBNT1Yk3XOVp-8wZKxv_wc,15201
439
+ claude_mpm/services/infrastructure/monitoring/base.py,sha256=f4sOTWbfH5p9P7n4N2iOVe3GWGxhqlLv6UD1LdKzV70,3864
440
+ claude_mpm/services/infrastructure/monitoring/legacy.py,sha256=Na1nomigLkJ25pdmofQVBWEca7tDxUxfsDmp2Hy9nPc,7171
441
+ claude_mpm/services/infrastructure/monitoring/network.py,sha256=L874kGjryP_R8tDwz4jgN7MGlfGrDJGa2tM8zVbtrEk,6933
442
+ claude_mpm/services/infrastructure/monitoring/process.py,sha256=_gh124mIemvHZE2wV1VWuMf-u7qI3VpXAUSSmuCOIJY,11054
443
+ claude_mpm/services/infrastructure/monitoring/resources.py,sha256=7Mt9zvNAYGf7OTLBUFpGoDQncCuTYkpODRKV42T6wyI,7665
444
+ claude_mpm/services/infrastructure/monitoring/service.py,sha256=guYB6rJtU18T2kPhZbKKg85l96lm2f7XVtPnBt1O3So,12613
433
445
  claude_mpm/services/mcp_gateway/__init__.py,sha256=cRO71-BE1meBbxJgurS9_4NM1cRlcxJ0w0JENFVUW_I,4465
434
446
  claude_mpm/services/mcp_gateway/auto_configure.py,sha256=4Oea5cwzCXMXn216640mEFxZt0FmrbBdvX4DJqdeWek,12040
435
447
  claude_mpm/services/mcp_gateway/main.py,sha256=D7jZ1hSfo8ovq8xu8lhHvdmUYIU8DpvRWZAsqU2H5Xc,15748
@@ -467,7 +479,13 @@ claude_mpm/services/memory/cache/__init__.py,sha256=6M6-P8ParyxX8vOgp_IxHgLMvacr
467
479
  claude_mpm/services/memory/cache/shared_prompt_cache.py,sha256=crnYPUT8zcS7TvoE1vW7pyaf4T77N5rJ1wUf_YQ2vvo,28704
468
480
  claude_mpm/services/memory/cache/simple_cache.py,sha256=qsTjbcsPxj-kNfaod9VN_uE5NioIwpfkUin_mMVUJCg,10218
469
481
  claude_mpm/services/project/__init__.py,sha256=IUclN1L7ChHCNya7PJiVxu4nttxsrj3WRIpwyA1A_hw,512
470
- claude_mpm/services/project/analyzer.py,sha256=iq3J4DKqkdBR-EZUM8X-40bMxpob6lhBqhrGFv9UOIM,38019
482
+ claude_mpm/services/project/analyzer.py,sha256=VHlLrP8-S5gr12w4Yzs7-6d7LWdJKISHPCFSG7SDiQU,38434
483
+ claude_mpm/services/project/analyzer_refactored.py,sha256=USYEdPAhSoGPqZCpaT89Dw6ElFW_L1yXSURheQjAhLA,18243
484
+ claude_mpm/services/project/analyzer_v2.py,sha256=YZ_AZPXST-ZcvnJ1yXDWUm2oXuermpkk3e5E8lHBoGE,24655
485
+ claude_mpm/services/project/architecture_analyzer.py,sha256=X79O_BAARrPLsONknT5RHRrO8iDse6EVVxlile0crX8,16885
486
+ claude_mpm/services/project/dependency_analyzer.py,sha256=ZOwvbiBJvD4WN2UgXO88kvsMSQk7-8Y03ybijSAbCPA,15631
487
+ claude_mpm/services/project/language_analyzer.py,sha256=Zrs0Ru-3-0G2LJ5DhN63fGqub5_tX5VRcV23iExKUr8,9229
488
+ claude_mpm/services/project/metrics_collector.py,sha256=IlBV2hAyv_PNp6zdGmAIEZ4rFQMawWVL_Q-EYyIkqzs,12929
471
489
  claude_mpm/services/project/registry.py,sha256=XhPmkuEz9tKKKnT9Ca1zsUuNgZJQy40WFHJERj09-40,24166
472
490
  claude_mpm/services/shared/__init__.py,sha256=62_AM4liuLAwXtHns0ujePI3L4X5UhzT4ajzUNUMUPw,549
473
491
  claude_mpm/services/shared/async_service_base.py,sha256=46Z-ATX5N0FhugNsF6byJ42frs4Rw5ZWfhw3Paf2788,7010
@@ -493,6 +511,12 @@ claude_mpm/services/socketio/server/broadcaster.py,sha256=mQ_HQdvYPmPz95sRCAn5JQ
493
511
  claude_mpm/services/socketio/server/core.py,sha256=a07XpUQ_TZPPs6dR3vKyPX9OGbrgb8a6z5OPwL_Pv34,18453
494
512
  claude_mpm/services/socketio/server/eventbus_integration.py,sha256=C8XghwK5ZomW4aPkPw7xonIIz-DwpHPwoAhkQPozf0o,7285
495
513
  claude_mpm/services/socketio/server/main.py,sha256=I_n0gFjqMC06HwJY9LMI9Ft7iKAGRjCcnRTx3wVdiec,15288
514
+ claude_mpm/services/ticket_services/__init__.py,sha256=I01W25n-tBWwZ0TD-dPA63nqzCU2KnpOvbqeysmaa2E,798
515
+ claude_mpm/services/ticket_services/crud_service.py,sha256=4Ab1HONY219QSdRaLTgRInm6DNJXIUKiihyAree8y8A,11193
516
+ claude_mpm/services/ticket_services/formatter_service.py,sha256=MQ981yaFuvXWUDLpHHiasc8BIFdeIeMS7Us0CgZHJ0A,9101
517
+ claude_mpm/services/ticket_services/search_service.py,sha256=CHDITcE6Dqu_98LOeb55qxr4yNpA7iBYSlnWXMg8KAI,9918
518
+ claude_mpm/services/ticket_services/validation_service.py,sha256=5Wo4YHLjQmZ1Ey9sYHyTjmtWqidywcV16B1T4zS_d-c,8623
519
+ claude_mpm/services/ticket_services/workflow_service.py,sha256=qbFMHaV3PlZ6J-YD2RVUugJ6WLVzAy_xCT0xMSPx1SY,7803
496
520
  claude_mpm/services/version_control/__init__.py,sha256=U3bFV1upF3FgNrQGFld0GZt0vb3Eunm71mscgTg7zD0,1510
497
521
  claude_mpm/services/version_control/branch_strategy.py,sha256=NtNBeGJfUbBkxUyyXTdFou7JPNSW-V8N0FC-yT-WTKs,23168
498
522
  claude_mpm/services/version_control/conflict_resolution.py,sha256=D7MCcrMifBic-My4CvWPpM0gn84rgYOAhnmpKs7R67Q,26061
@@ -521,9 +545,9 @@ claude_mpm/utils/subprocess_utils.py,sha256=zgiwLqh_17WxHpySvUPH65pb4bzIeUGOAYUJ
521
545
  claude_mpm/validation/__init__.py,sha256=YZhwE3mhit-lslvRLuwfX82xJ_k4haZeKmh4IWaVwtk,156
522
546
  claude_mpm/validation/agent_validator.py,sha256=3Lo6LK-Mw9IdnL_bd3zl_R6FkgSVDYKUUM7EeVVD3jc,20865
523
547
  claude_mpm/validation/frontmatter_validator.py,sha256=u8g4Eyd_9O6ugj7Un47oSGh3kqv4wMkuks2i_CtWRvM,7028
524
- claude_mpm-4.1.4.dist-info/licenses/LICENSE,sha256=lpaivOlPuBZW1ds05uQLJJswy8Rp_HMNieJEbFlqvLk,1072
525
- claude_mpm-4.1.4.dist-info/METADATA,sha256=i1zuYiyiu907sxco_kgZp8Bixd6hM-avOusLxtYaxyM,13327
526
- claude_mpm-4.1.4.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
527
- claude_mpm-4.1.4.dist-info/entry_points.txt,sha256=FDPZgz8JOvD-6iuXY2l9Zbo9zYVRuE4uz4Qr0vLeGOk,471
528
- claude_mpm-4.1.4.dist-info/top_level.txt,sha256=1nUg3FEaBySgm8t-s54jK5zoPnu3_eY6EP6IOlekyHA,11
529
- claude_mpm-4.1.4.dist-info/RECORD,,
548
+ claude_mpm-4.1.5.dist-info/licenses/LICENSE,sha256=lpaivOlPuBZW1ds05uQLJJswy8Rp_HMNieJEbFlqvLk,1072
549
+ claude_mpm-4.1.5.dist-info/METADATA,sha256=bb1YYVA8ne8WRhQuu9NgFQOu7utVnGkL6od9I9w1Tto,13327
550
+ claude_mpm-4.1.5.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
551
+ claude_mpm-4.1.5.dist-info/entry_points.txt,sha256=FDPZgz8JOvD-6iuXY2l9Zbo9zYVRuE4uz4Qr0vLeGOk,471
552
+ claude_mpm-4.1.5.dist-info/top_level.txt,sha256=1nUg3FEaBySgm8t-s54jK5zoPnu3_eY6EP6IOlekyHA,11
553
+ claude_mpm-4.1.5.dist-info/RECORD,,