claude-mpm 5.4.85__py3-none-any.whl → 5.4.87__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 (102) hide show
  1. claude_mpm/VERSION +1 -1
  2. claude_mpm/agents/PM_INSTRUCTIONS.md +47 -5
  3. claude_mpm/dashboard/static/svelte-build/_app/immutable/assets/0.B7S5qgOx.css +1 -0
  4. claude_mpm/dashboard/static/svelte-build/_app/immutable/assets/2.D3t4z6uz.css +1 -0
  5. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{DmxopI1J.js → 14Ru8gxt.js} +1 -1
  6. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{CDuw-vjf.js → 7ZAeO_Uj.js} +1 -1
  7. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/AeivYILh.js +1 -0
  8. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{DaimHw_p.js → B06ALsCS.js} +1 -1
  9. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{bTOqqlTd.js → BCWDw8BF.js} +1 -1
  10. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{Cs_tUR18.js → BS0ej2w8.js} +1 -1
  11. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{DwBR2MJi.js → BVFqgd56.js} +1 -1
  12. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{CzeYkLYB.js → BXs4CVzO.js} +2 -2
  13. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{BovzEFCE.js → B_fnSNFx.js} +1 -1
  14. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{iEWssX7S.js → BfMC7wDI.js} +1 -1
  15. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{CyWMqx4W.js → BfXd4Xj4.js} +1 -1
  16. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{CBBdVcY8.js → BnFPFynJ.js} +1 -1
  17. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{B0uc0UOD.js → BwpSELyW.js} +3 -3
  18. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{BPYeabCQ.js → C5Dg_JxJ.js} +1 -1
  19. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{DLVjFsZ3.js → C7i47te_.js} +1 -1
  20. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{CnA0NrzZ.js → C86quetY.js} +1 -1
  21. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{ZGh7QtNv.js → CDNOxKrg.js} +1 -1
  22. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{BIF9m_hv.js → CDi5wzaD.js} +1 -1
  23. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{Be7GpZd6.js → CQ94FMOU.js} +1 -1
  24. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{CzZX-COe.js → CT5eAo1x.js} +1 -1
  25. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{GYwsonyD.js → C_l0vq62.js} +1 -1
  26. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Cn4nXAfg.js +1 -0
  27. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{DI7hHRFL.js → CvWciI1W.js} +1 -1
  28. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{sQeU3Y1z.js → CyrTH56Q.js} +1 -1
  29. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{Bh0LDWpI.js → CzkNB1Vu.js} +2 -2
  30. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{DUrLdbGD.js → D0Fj1OdD.js} +1 -1
  31. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{Dle-35c7.js → D1ARDjz0.js} +2 -2
  32. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{C4B-KCzX.js → D2nGpDRe.js} +1 -1
  33. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{BofRWZRR.js → DJN4AVXS.js} +1 -1
  34. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{B7RN905-.js → DJuK4-OP.js} +1 -1
  35. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{C30mlcqg.js → DLeM8wSV.js} +1 -1
  36. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{uuIeMWc-.js → DNI1jw9S.js} +1 -1
  37. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{C4JcI4KD.js → DOViuQX_.js} +1 -1
  38. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{D3k0OPJN.js → DOeJfApz.js} +1 -1
  39. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{Cfqx1Qun.js → DTgfNBV9.js} +1 -1
  40. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{CiIAseT4.js → DWDi9IaK.js} +5 -5
  41. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/D_vpdI7l.js +325 -0
  42. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{Dhb8PKl3.js → DdIDcQsD.js} +1 -1
  43. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DnL7ky1O.js +1 -0
  44. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{DGkLK5U1.js → Dqtg3hb8.js} +1 -1
  45. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{eNVUfhuA.js → EKp_wsKE.js} +1 -1
  46. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{D9lljYKQ.js → MJf6AOIJ.js} +1 -1
  47. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{B7xVLGWV.js → NsEh4Ivo.js} +1 -1
  48. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/URSAF6IJ.js +24 -0
  49. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{DZX00Y4g.js → WiqB4NUY.js} +1 -1
  50. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{bT1r9zLR.js → s04HIjWg.js} +1 -1
  51. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{C_Usid8X.js → vJiSSdpk.js} +2 -2
  52. claude_mpm/dashboard/static/svelte-build/_app/immutable/entry/{app.D6-I5TpK.js → app.CnXU_fEX.js} +2 -2
  53. claude_mpm/dashboard/static/svelte-build/_app/immutable/entry/start.CUaAfoQJ.js +1 -0
  54. claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/{1.CgNOuw-d.js → 1.znyTz9u3.js} +1 -1
  55. claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/2.CLVHDDxl.js +1 -0
  56. claude_mpm/dashboard/static/svelte-build/_app/version.json +1 -1
  57. claude_mpm/dashboard/static/svelte-build/index.html +7 -7
  58. claude_mpm/hooks/claude_hooks/INTEGRATION_EXAMPLE.md +243 -0
  59. claude_mpm/hooks/claude_hooks/README_AUTO_PAUSE.md +403 -0
  60. claude_mpm/hooks/claude_hooks/__pycache__/__init__.cpython-311.pyc +0 -0
  61. claude_mpm/hooks/claude_hooks/__pycache__/auto_pause_handler.cpython-311.pyc +0 -0
  62. claude_mpm/hooks/claude_hooks/__pycache__/correlation_manager.cpython-311.pyc +0 -0
  63. claude_mpm/hooks/claude_hooks/__pycache__/event_handlers.cpython-311.pyc +0 -0
  64. claude_mpm/hooks/claude_hooks/__pycache__/hook_handler.cpython-311.pyc +0 -0
  65. claude_mpm/hooks/claude_hooks/__pycache__/installer.cpython-311.pyc +0 -0
  66. claude_mpm/hooks/claude_hooks/__pycache__/memory_integration.cpython-311.pyc +0 -0
  67. claude_mpm/hooks/claude_hooks/__pycache__/response_tracking.cpython-311.pyc +0 -0
  68. claude_mpm/hooks/claude_hooks/__pycache__/tool_analysis.cpython-311.pyc +0 -0
  69. claude_mpm/hooks/claude_hooks/auto_pause_handler.py +486 -0
  70. claude_mpm/hooks/claude_hooks/event_handlers.py +74 -1
  71. claude_mpm/hooks/claude_hooks/hook_handler.py +25 -3
  72. claude_mpm/hooks/claude_hooks/response_tracking.py +17 -1
  73. claude_mpm/hooks/claude_hooks/services/__pycache__/__init__.cpython-311.pyc +0 -0
  74. claude_mpm/hooks/claude_hooks/services/__pycache__/connection_manager.cpython-311.pyc +0 -0
  75. claude_mpm/hooks/claude_hooks/services/__pycache__/connection_manager_http.cpython-311.pyc +0 -0
  76. claude_mpm/hooks/claude_hooks/services/__pycache__/duplicate_detector.cpython-311.pyc +0 -0
  77. claude_mpm/hooks/claude_hooks/services/__pycache__/state_manager.cpython-311.pyc +0 -0
  78. claude_mpm/hooks/claude_hooks/services/__pycache__/subagent_processor.cpython-311.pyc +0 -0
  79. claude_mpm/hooks/claude_hooks/services/subagent_processor.py +30 -6
  80. claude_mpm/hooks/session_resume_hook.py +85 -1
  81. claude_mpm/services/cli/__init__.py +3 -0
  82. claude_mpm/services/cli/incremental_pause_manager.py +561 -0
  83. claude_mpm/services/infrastructure/__init__.py +4 -0
  84. claude_mpm/services/infrastructure/context_usage_tracker.py +291 -0
  85. claude_mpm/services/infrastructure/resume_log_generator.py +24 -5
  86. {claude_mpm-5.4.85.dist-info → claude_mpm-5.4.87.dist-info}/METADATA +1 -1
  87. {claude_mpm-5.4.85.dist-info → claude_mpm-5.4.87.dist-info}/RECORD +93 -73
  88. claude_mpm/dashboard/static/svelte-build/_app/immutable/assets/0.DWzvg0-y.css +0 -1
  89. claude_mpm/dashboard/static/svelte-build/_app/immutable/assets/2.ThTw9_ym.css +0 -1
  90. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/5shd3_w0.js +0 -24
  91. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BKjSRqUr.js +0 -1
  92. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Da0KfYnO.js +0 -1
  93. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Dfy6j1xT.js +0 -323
  94. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/RJiighC3.js +0 -1
  95. claude_mpm/dashboard/static/svelte-build/_app/immutable/entry/start.NWzMBYRp.js +0 -1
  96. claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/2.C0GcWctS.js +0 -1
  97. /claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/{0.m1gL8KXf.js → 0.BuxSUm_s.js} +0 -0
  98. {claude_mpm-5.4.85.dist-info → claude_mpm-5.4.87.dist-info}/WHEEL +0 -0
  99. {claude_mpm-5.4.85.dist-info → claude_mpm-5.4.87.dist-info}/entry_points.txt +0 -0
  100. {claude_mpm-5.4.85.dist-info → claude_mpm-5.4.87.dist-info}/licenses/LICENSE +0 -0
  101. {claude_mpm-5.4.85.dist-info → claude_mpm-5.4.87.dist-info}/licenses/LICENSE-FAQ.md +0 -0
  102. {claude_mpm-5.4.85.dist-info → claude_mpm-5.4.87.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,291 @@
1
+ """Context Usage Tracker Service.
2
+
3
+ WHY: Track cumulative token usage across Claude Code hook invocations to prevent
4
+ context window exhaustion and enable intelligent auto-pause behavior.
5
+
6
+ DESIGN DECISIONS:
7
+ - File-based persistence (hooks run in separate processes)
8
+ - Atomic file operations using StateStorage
9
+ - Threshold detection at 70% (caution), 85% (warning), 90% (auto_pause), 95% (critical)
10
+ - Session-scoped tracking with reset capability
11
+ - Compatible with 200k context budget for Claude Sonnet 4.5
12
+
13
+ USAGE:
14
+ tracker = ContextUsageTracker()
15
+ state = tracker.update_usage(input_tokens=15000, output_tokens=2000)
16
+ if tracker.should_auto_pause():
17
+ # Trigger auto-pause workflow
18
+ pass
19
+ """
20
+
21
+ from dataclasses import asdict, dataclass, field
22
+ from datetime import datetime, timezone
23
+ from pathlib import Path
24
+ from typing import Optional
25
+
26
+ from claude_mpm.core.logger import get_logger
27
+ from claude_mpm.storage.state_storage import StateStorage
28
+
29
+ logger = get_logger(__name__)
30
+
31
+
32
+ @dataclass
33
+ class ContextUsageState:
34
+ """State tracking for cumulative context/token usage.
35
+
36
+ Attributes:
37
+ session_id: Unique session identifier
38
+ cumulative_input_tokens: Total input tokens across all hook invocations
39
+ cumulative_output_tokens: Total output tokens across all hook invocations
40
+ cache_creation_tokens: Total tokens spent creating prompt cache
41
+ cache_read_tokens: Total tokens read from prompt cache
42
+ percentage_used: Percentage of 200k context budget used (0.0-100.0)
43
+ threshold_reached: Highest threshold crossed ('caution', 'warning', 'auto_pause', 'critical')
44
+ auto_pause_active: Whether auto-pause has been triggered
45
+ last_updated: ISO timestamp of last update
46
+ """
47
+
48
+ session_id: str
49
+ cumulative_input_tokens: int = 0
50
+ cumulative_output_tokens: int = 0
51
+ cache_creation_tokens: int = 0
52
+ cache_read_tokens: int = 0
53
+ percentage_used: float = 0.0
54
+ threshold_reached: Optional[str] = None
55
+ auto_pause_active: bool = False
56
+ last_updated: str = field(
57
+ default_factory=lambda: datetime.now(timezone.utc).isoformat()
58
+ )
59
+
60
+
61
+ class ContextUsageTracker:
62
+ """Track cumulative context/token usage across hook invocations.
63
+
64
+ Features:
65
+ - Cumulative tracking across multiple API calls
66
+ - File-based persistence for cross-process state sharing
67
+ - Atomic file operations for concurrent safety
68
+ - Threshold detection (70%, 85%, 90%, 95%)
69
+ - Auto-pause triggering at 90%+ usage
70
+ - Session management with reset capability
71
+ """
72
+
73
+ # Claude Sonnet 4.5 context window
74
+ CONTEXT_BUDGET = 200000
75
+
76
+ # Threshold levels for warnings and auto-pause
77
+ THRESHOLDS = {
78
+ "caution": 0.70, # Yellow warning
79
+ "warning": 0.85, # Orange warning
80
+ "auto_pause": 0.90, # Trigger auto-pause
81
+ "critical": 0.95, # Red critical alert
82
+ }
83
+
84
+ def __init__(self, project_path: Optional[Path] = None):
85
+ """Initialize context usage tracker.
86
+
87
+ Args:
88
+ project_path: Project root path (default: current directory)
89
+ """
90
+ self.project_path = (project_path or Path.cwd()).resolve()
91
+ self.state_dir = self.project_path / ".claude-mpm" / "state"
92
+ self.state_dir.mkdir(parents=True, exist_ok=True)
93
+ self.state_file = self.state_dir / "context-usage.json"
94
+
95
+ # Use StateStorage for atomic operations
96
+ self.storage = StateStorage(self.state_dir)
97
+
98
+ logger.debug(f"ContextUsageTracker initialized: {self.state_file}")
99
+
100
+ def update_usage(
101
+ self,
102
+ input_tokens: int,
103
+ output_tokens: int,
104
+ cache_creation: int = 0,
105
+ cache_read: int = 0,
106
+ ) -> ContextUsageState:
107
+ """Update cumulative usage from API response.
108
+
109
+ Args:
110
+ input_tokens: Input tokens from this API call
111
+ output_tokens: Output tokens from this API call
112
+ cache_creation: Cache creation tokens (optional)
113
+ cache_read: Cache read tokens (optional)
114
+
115
+ Returns:
116
+ Updated context usage state
117
+
118
+ Raises:
119
+ ValueError: If token counts are negative
120
+ """
121
+ if any(
122
+ t < 0 for t in [input_tokens, output_tokens, cache_creation, cache_read]
123
+ ):
124
+ raise ValueError("Token counts cannot be negative")
125
+
126
+ # Load current state
127
+ state = self._load_state()
128
+
129
+ # Update cumulative counters
130
+ state.cumulative_input_tokens += input_tokens
131
+ state.cumulative_output_tokens += output_tokens
132
+ state.cache_creation_tokens += cache_creation
133
+ state.cache_read_tokens += cache_read
134
+
135
+ # Calculate total effective tokens (input + output, cache read is "free")
136
+ total_tokens = state.cumulative_input_tokens + state.cumulative_output_tokens
137
+ state.percentage_used = (total_tokens / self.CONTEXT_BUDGET) * 100
138
+
139
+ # Check thresholds
140
+ state.threshold_reached = self.check_thresholds(state)
141
+
142
+ # Activate auto-pause if threshold reached
143
+ if state.threshold_reached in {"auto_pause", "critical"}:
144
+ state.auto_pause_active = True
145
+
146
+ # Update timestamp
147
+ state.last_updated = datetime.now(timezone.utc).isoformat()
148
+
149
+ # Persist state atomically
150
+ self._save_state(state)
151
+
152
+ logger.debug(
153
+ f"Usage updated: {total_tokens}/{self.CONTEXT_BUDGET} tokens "
154
+ f"({state.percentage_used:.1f}%), threshold: {state.threshold_reached}"
155
+ )
156
+
157
+ return state
158
+
159
+ def check_thresholds(
160
+ self, state: Optional[ContextUsageState] = None
161
+ ) -> Optional[str]:
162
+ """Check which threshold (if any) has been exceeded.
163
+
164
+ Args:
165
+ state: Optional state to check (uses current state if None)
166
+
167
+ Returns:
168
+ Highest threshold exceeded ('caution', 'warning', 'auto_pause', 'critical')
169
+ or None if no thresholds exceeded
170
+ """
171
+ if state is None:
172
+ state = self.get_current_state()
173
+
174
+ percentage = state.percentage_used / 100 # Convert to 0.0-1.0
175
+
176
+ # Check thresholds in descending order (highest first)
177
+ for threshold_name in ["critical", "auto_pause", "warning", "caution"]:
178
+ if percentage >= self.THRESHOLDS[threshold_name]:
179
+ return threshold_name
180
+
181
+ return None
182
+
183
+ def should_auto_pause(self) -> bool:
184
+ """Check if auto-pause should be triggered.
185
+
186
+ Returns:
187
+ True if 90%+ context budget used
188
+ """
189
+ state = self.get_current_state()
190
+ return state.percentage_used >= (self.THRESHOLDS["auto_pause"] * 100)
191
+
192
+ def get_current_state(self) -> ContextUsageState:
193
+ """Get current usage state without modifying.
194
+
195
+ Returns:
196
+ Current context usage state
197
+ """
198
+ return self._load_state()
199
+
200
+ def reset_session(self, new_session_id: str) -> None:
201
+ """Reset tracking for a new session.
202
+
203
+ Args:
204
+ new_session_id: New session identifier
205
+ """
206
+ state = ContextUsageState(session_id=new_session_id)
207
+ self._save_state(state)
208
+ logger.info(f"Context usage reset for new session: {new_session_id}")
209
+
210
+ def _load_state(self) -> ContextUsageState:
211
+ """Load state from persistence file.
212
+
213
+ Returns:
214
+ Loaded state or default state if file doesn't exist/is corrupted
215
+ """
216
+ try:
217
+ if not self.state_file.exists():
218
+ # Generate initial session ID
219
+ session_id = (
220
+ f"session-{datetime.now(timezone.utc).strftime('%Y%m%d-%H%M%S')}"
221
+ )
222
+ logger.debug("No state file found, creating default state")
223
+ return ContextUsageState(session_id=session_id)
224
+
225
+ # Load JSON state
226
+ data = self.storage.read_json(self.state_file)
227
+
228
+ if data is None:
229
+ logger.warning("Failed to read state file, using default state")
230
+ session_id = (
231
+ f"session-{datetime.now(timezone.utc).strftime('%Y%m%d-%H%M%S')}"
232
+ )
233
+ return ContextUsageState(session_id=session_id)
234
+
235
+ # Reconstruct ContextUsageState from dict
236
+ return ContextUsageState(**data)
237
+
238
+ except Exception as e:
239
+ logger.error(f"Error loading state, using default: {e}")
240
+ session_id = (
241
+ f"session-{datetime.now(timezone.utc).strftime('%Y%m%d-%H%M%S')}"
242
+ )
243
+ return ContextUsageState(session_id=session_id)
244
+
245
+ def _save_state(self, state: ContextUsageState) -> None:
246
+ """Save state to persistence file atomically.
247
+
248
+ Args:
249
+ state: Context usage state to persist
250
+
251
+ Raises:
252
+ RuntimeError: If atomic write fails
253
+ """
254
+ try:
255
+ # Convert dataclass to dict
256
+ state_dict = asdict(state)
257
+
258
+ # Atomic write using StateStorage
259
+ if not self.storage.write_json(state_dict, self.state_file, atomic=True):
260
+ raise RuntimeError(f"Failed to write state to {self.state_file}")
261
+
262
+ logger.debug(f"State saved: {self.state_file}")
263
+
264
+ except Exception as e:
265
+ logger.error(f"Error saving state: {e}")
266
+ raise RuntimeError(f"Failed to persist context usage state: {e}") from e
267
+
268
+ def get_usage_summary(self) -> dict:
269
+ """Get human-readable usage summary.
270
+
271
+ Returns:
272
+ Dictionary with usage statistics
273
+ """
274
+ state = self.get_current_state()
275
+ total_tokens = state.cumulative_input_tokens + state.cumulative_output_tokens
276
+
277
+ return {
278
+ "session_id": state.session_id,
279
+ "total_tokens": total_tokens,
280
+ "budget": self.CONTEXT_BUDGET,
281
+ "percentage_used": round(state.percentage_used, 2),
282
+ "threshold_reached": state.threshold_reached,
283
+ "auto_pause_active": state.auto_pause_active,
284
+ "breakdown": {
285
+ "input_tokens": state.cumulative_input_tokens,
286
+ "output_tokens": state.cumulative_output_tokens,
287
+ "cache_creation_tokens": state.cache_creation_tokens,
288
+ "cache_read_tokens": state.cache_read_tokens,
289
+ },
290
+ "last_updated": state.last_updated,
291
+ }
@@ -6,7 +6,8 @@ Integrates with session management and response tracking infrastructure.
6
6
  Triggers:
7
7
  - model_context_window_exceeded (stop_reason)
8
8
  - Manual pause command
9
- - 95% token threshold reached
9
+ - 95% token threshold reached (critical)
10
+ - 90% token threshold reached (auto-pause)
10
11
  - Session end with high token usage (>85%)
11
12
 
12
13
  Design Principles:
@@ -71,6 +72,7 @@ class ResumeLogGenerator:
71
72
  thresholds = self.config.get("context_management", {}).get("thresholds", {})
72
73
  self.threshold_caution = thresholds.get("caution", 0.70)
73
74
  self.threshold_warning = thresholds.get("warning", 0.85)
75
+ self.threshold_auto_pause = thresholds.get("auto_pause", 0.90)
74
76
  self.threshold_critical = thresholds.get("critical", 0.95)
75
77
 
76
78
  logger.info(
@@ -96,14 +98,14 @@ class ResumeLogGenerator:
96
98
  if not self.enabled or not self.auto_generate:
97
99
  return manual_trigger # Only generate on manual trigger if auto is disabled
98
100
 
99
- # Trigger conditions
101
+ # Trigger conditions (ordered by severity)
100
102
  triggers = [
101
103
  stop_reason == "max_tokens",
102
104
  stop_reason == "model_context_window_exceeded",
103
105
  manual_trigger,
104
- token_usage_pct and token_usage_pct >= self.threshold_critical,
105
- token_usage_pct
106
- and token_usage_pct >= self.threshold_warning, # Generate at 85% too
106
+ token_usage_pct and token_usage_pct >= self.threshold_critical, # 95%
107
+ token_usage_pct and token_usage_pct >= self.threshold_auto_pause, # 90%
108
+ token_usage_pct and token_usage_pct >= self.threshold_warning, # 85%
107
109
  ]
108
110
 
109
111
  should_gen = any(triggers)
@@ -121,6 +123,22 @@ class ResumeLogGenerator:
121
123
 
122
124
  return should_gen
123
125
 
126
+ def should_auto_pause(self, token_usage_pct: Optional[float]) -> bool:
127
+ """Check if auto-pause threshold (90%) has been reached.
128
+
129
+ This is a convenience method to check specifically for the 90% threshold
130
+ which triggers automatic session pausing.
131
+
132
+ Args:
133
+ token_usage_pct: Current token usage percentage (0.0-1.0)
134
+
135
+ Returns:
136
+ True if auto-pause threshold has been reached
137
+ """
138
+ if token_usage_pct is None:
139
+ return False
140
+ return token_usage_pct >= self.threshold_auto_pause
141
+
124
142
  def generate_from_session_state(
125
143
  self,
126
144
  session_id: str,
@@ -427,6 +445,7 @@ class ResumeLogGenerator:
427
445
  "thresholds": {
428
446
  "caution": f"{self.threshold_caution:.0%}",
429
447
  "warning": f"{self.threshold_warning:.0%}",
448
+ "auto_pause": f"{self.threshold_auto_pause:.0%}",
430
449
  "critical": f"{self.threshold_critical:.0%}",
431
450
  },
432
451
  }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: claude-mpm
3
- Version: 5.4.85
3
+ Version: 5.4.87
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=aCYXlRa_sgd8PYy8Om582uXMHQ_Lpx4tS0LW0bSNIl8,7
2
+ claude_mpm/VERSION,sha256=5bR4JweQYaQL4XiCK_aOYT_K8YKGl-Kn46B-xKX3tFE,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=VZo7U_3m2MFjQOlk_xdB-uIy9q2zo6nOT3KsiN2_xJc,58162
14
+ claude_mpm/agents/PM_INSTRUCTIONS.md,sha256=WyFXajyQU1ww6_wiG21pSOQxfJYTrrG5hYoDkbSuE_E,59593
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
@@ -243,73 +243,73 @@ claude_mpm/core/shared/singleton_manager.py,sha256=ykPOUJxtxmD1_GyY8DDxDjUomfCnz
243
243
  claude_mpm/dashboard/__init__.py,sha256=b5QKcz0kt_ZMCFkac7caRzA8DlMiICG9VzmunmxHtco,466
244
244
  claude_mpm/dashboard/api/simple_directory.py,sha256=b-ExWd9wutYIYa4dTYBW0y1s0hsElPn4_LLJglahUEY,7140
245
245
  claude_mpm/dashboard/static/svelte-build/favicon.svg,sha256=8WC8JPrjCWsajGxiyBr7WA7Sj896PtUZbYkVjNwd2K0,395
246
- claude_mpm/dashboard/static/svelte-build/index.html,sha256=rMaGlSFuSYvHph4GVGQ2IubaW21FlSPMy8FI6hYBjuI,1175
246
+ claude_mpm/dashboard/static/svelte-build/index.html,sha256=evnlSuVr-QFWAqHEnmc06glZ5Fh_WEAIU9wxYvVr2-A,1174
247
247
  claude_mpm/dashboard/static/svelte-build/_app/env.js,sha256=PFiLdc3lIpkAIqcK3hezpttwaPaFrEy4sxoQT34lhwY,19
248
- claude_mpm/dashboard/static/svelte-build/_app/version.json,sha256=lMZX_1LjAPAb7vlDh1azVuxauz1tkTLw6CRchYj9ASA,27
249
- claude_mpm/dashboard/static/svelte-build/_app/immutable/assets/0.DWzvg0-y.css,sha256=mTsxHvIK5ipuM20Xd_Uh09qWIt5S8a7LnZ-VqhMY6w8,24937
250
- claude_mpm/dashboard/static/svelte-build/_app/immutable/assets/2.ThTw9_ym.css,sha256=aJoIpAGY5jck9vbelRn2VqQJ6LkVlHjOEI-JSw5qNzw,15617
248
+ claude_mpm/dashboard/static/svelte-build/_app/version.json,sha256=8PtCoP390ulxYwG8RU5anCx2x8__941rUkfoHI4ah6w,28
249
+ claude_mpm/dashboard/static/svelte-build/_app/immutable/assets/0.B7S5qgOx.css,sha256=S7UuKxXkzq8xvivhBkQAE8rfehHdnI2n9d3FP7leOrM,26779
250
+ claude_mpm/dashboard/static/svelte-build/_app/immutable/assets/2.D3t4z6uz.css,sha256=9wOee-HO6XJsENpUPKp-VDfB5kje4zaW2Ff-QIYieH8,15715
251
+ claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/14Ru8gxt.js,sha256=QYGsO7MbIMRDeFaCCBU6Q_yDHdY8AUOVd7poXsZlqCk,5629
251
252
  claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/4TdZjIqw.js,sha256=1bEu762_ZkXLEvuwKC8tecNXJiR-8bpAlp_7Eyyrj7Y,1328
252
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/5shd3_w0.js,sha256=LxqG9HNBJfT28Xzm7U68DBar6vPz_QlCxpOWLdrC0Yc,15753
253
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/B0uc0UOD.js,sha256=isplXMAYl2cXlUpFEbWV2hRErvIIlcohdr93rs2GbIc,148781
254
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/B7RN905-.js,sha256=U88SRClqP8wr1_1P_V9tzsxxDGsH5Ma74peqKbFgbno,10177
255
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/B7xVLGWV.js,sha256=myCbCvY3l-2RAWfzX70bh26TQ76mLETb8Q0chdEfuGs,534
256
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BIF9m_hv.js,sha256=QKi3bGFrRX-rRjyiVPn43C1zhiAqFLaH9NUeXuAVYl0,23666
257
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BKjSRqUr.js,sha256=YKPzpt9t-o0WZoEAks4Y7KJRdliobviqrHTogkaBR-Y,86
258
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BPYeabCQ.js,sha256=iiFVTk45Xg-Bbf4a8Eo19L5xNXf3TY_M-N2uvpJ6-6w,519
253
+ claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/7ZAeO_Uj.js,sha256=fZVo-3JVzdqoagHnHtUXVJRrrr_oEpzhWgTTYO7bmGc,263
254
+ claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/AeivYILh.js,sha256=dIj2KWlGX6bt6nFvdeqR3zdsJ3V6OFK0POTEpuBZSxU,27502
255
+ claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/B06ALsCS.js,sha256=2T5bR7bQoLu5-WuexBoCO46K-TDHQZKZ5KmkKOMC7Yg,20970
256
+ claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BCWDw8BF.js,sha256=v8iEdeAvx1HokOKxLTA2J6KieiHCW_ynqj6-gX-As6M,81658
259
257
  claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BQaXIfA_.js,sha256=3VAewprLyc27yeOkKh16A3YpviIhZ_ZQr2pw0Kfs7Rs,442442
258
+ claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BS0ej2w8.js,sha256=azFkwU1EIQ3eWPLJO--bUr4psM14yjxIm5_FBRnc5e8,4171
260
259
  claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BSNlmTZj.js,sha256=Pcz47MBoSVumz-ilxfVzQOSz67t1FtEb0lADSpVoad0,523
261
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Be7GpZd6.js,sha256=gdGptz5VresDE0H12tDz29cC3UxQ4g0gEjcjlcJAEtM,34213
262
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Bh0LDWpI.js,sha256=F3hcS-y5b7lsFkHTvkXi-Hu1LFzJPDPceY0hsiZutW4,98061
263
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BofRWZRR.js,sha256=3hqg1FR4E5EpkwqkDvDcvjmi3BoVmsA3FzAFeN3xKDI,22161
264
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BovzEFCE.js,sha256=9C9gLHUk4rluUOCpQ8bS1vz63gbZrjN53fprSxnqHB0,5057
265
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/C30mlcqg.js,sha256=uUoZIwcdVrnh9u0ytHiZ0t90wjDiIoxltbJHAo4QPe4,45350
266
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/C4B-KCzX.js,sha256=REVWWWi7AfCyEBxFyVEFAVSG7-l9pD-nsJGOoLfb1zA,4547
267
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/C4JcI4KD.js,sha256=xdDC566hQg1YdBLmmYtV0tK3FA5W8eq1fGRLYTJsWiM,73048
268
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CBBdVcY8.js,sha256=vk54fAyEHo1OkRnSmm20gzs10dehJPdXg8RMjrRFtUE,3428
269
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CDuw-vjf.js,sha256=0jqf47CRCxd6UJhYe-eqZeiwqAQ5EahvWgwM_sKR0oA,263
270
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/C_Usid8X.js,sha256=pNCGtUMwturV4Cmc6QuSBehPvX1f3wpYCOvf6nVpqi8,353
271
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Cfqx1Qun.js,sha256=LzRAX1XtW6MTRYdMEXUfQppKs70lQmC7R5cDh8Pg9dM,70106
272
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CiIAseT4.js,sha256=ww-nDwXNvQQATH7_KVikoSlp83-hrJ34YM-0ar8uFII,375543
260
+ claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BVFqgd56.js,sha256=NyrPwN1QOLtoJv_R7m2r_82DIeMfO6BnWEG_Y5uJVNs,25263
261
+ claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BXs4CVzO.js,sha256=cRaHksycWeKfgduBCtRSxXbDaFlCG3kQ44aGlSHbJD4,24545
262
+ claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/B_fnSNFx.js,sha256=mwLuN2Clbymgal3MNTliOjvvE5SCk6FXh44WbvLM78s,5057
263
+ claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BfMC7wDI.js,sha256=CcXrB9dSNBEiXrNSgm4ua-VedEnkJyeXy75PR5UtNnY,61020
264
+ claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BfXd4Xj4.js,sha256=zlUWi8JwAL11eBnjozmkh1Elk0a_o4hVH8vJc-dzRuE,5891
265
+ claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BnFPFynJ.js,sha256=1clJqkBTX6Vmt6qHlixXNXiKEunP4C-fZBUJX17s8hQ,3428
266
+ claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BwpSELyW.js,sha256=tp7a5PAxsEz2OHHH-l9Wk0ZvD0Hfw0K4mHoC0R6VYQA,148778
267
+ claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/C5Dg_JxJ.js,sha256=sWupwl81Zw52A-PXcQuT8WZzPEcjHUMHax59kBQhLwA,519
268
+ claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/C7i47te_.js,sha256=IPKmUgdSIaJ5hsQwXK26LsKEQvLh-Csa0C12jAcJ0z4,23466
269
+ claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/C86quetY.js,sha256=Hp8P-CtenYjNsLb0QIr7Sjqrwcdm2iMJ0rvTbEaSwnc,222
270
+ claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CDNOxKrg.js,sha256=3j_hveZ26m4kMy3S9rvgUW9_fPfI7foUlJbBddnYHmk,40113
271
+ claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CDi5wzaD.js,sha256=ExjQMaQxXJIkrDvNNG2VmVvFKAuVsA2Ry8DG6WvJapQ,23666
272
+ claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CQ94FMOU.js,sha256=tC8dH_m3O3Id2YUiVrffKeCMrhMrqeQ2Z4A4uodQX3s,34213
273
+ claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CT5eAo1x.js,sha256=oOTK-J1KPYr-Xy5zbRFHHmT22tudUsMIXgkt1O2iEVM,36759
274
+ claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/C_l0vq62.js,sha256=cUVVL3T80M37GRgM0kCVxd1I_LTIYXDuTRwREaC0ya4,8484
273
275
  claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CmKTTxBW.js,sha256=SjwMYSsU3UAJF7r1Zst9XNnJTf-2Q54nEjsMJGK3-DI,1184
274
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CnA0NrzZ.js,sha256=CS6ajDS0sYRZ4kmRsAJ9Ze9D7aCLtWA1hdrdNhfm2Dc,222
275
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Cs_tUR18.js,sha256=m4O0faCvbKLNxWuobVdoab6HTaWUZzPtWQ9SLAX-fXk,4171
276
+ claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Cn4nXAfg.js,sha256=ikpjAXLchuWunMWxjJLmPdmeREf1iI2WIng1Ky_hIPU,102
276
277
  claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Cu_Erd72.js,sha256=pB6xyyShx_ur5Pb3k3JJ8lczwK0GE9NArmmOKIv3hxs,265433
277
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CyWMqx4W.js,sha256=eZmLh9RHhe2qU5imLDGScYl-ndedWNSKTF0DroZsl08,5891
278
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CzZX-COe.js,sha256=ysxVvRcsgF_x5Y9HsH2xlFgUGMhyFxsJOvCXRtlSFK0,36759
279
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CzeYkLYB.js,sha256=7VFb8pU4AuDqoP2TwUI4DSX9k8Su2tyB3HdMLpeB56Q,24547
280
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/D3k0OPJN.js,sha256=tqKGTfIEpUQATvfriHBIr720ZHPkDj4xEiNXXmyTCDk,11160
281
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/D9lljYKQ.js,sha256=N4nBgL-taeH4aoDCfhUEdrzQ-lAJKVFoua7J16zic7c,29257
282
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DGkLK5U1.js,sha256=jMP0ZzLPRcimSjri97Humb48VkVvVx4XZifOEzO71l8,68216
283
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DI7hHRFL.js,sha256=5XqxGxSdmHvfhfm9PXgSsF2Yu7MrC2NtfhLAvCSynGg,284
284
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DLVjFsZ3.js,sha256=d4xXD6Y_NKT_NBYphoIf2JlVSZXrg-30BiD4vjY5gPI,23466
285
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DUrLdbGD.js,sha256=sK_LBzIqb2OAZKpUM7ZgEthcJ_MMIPm0THfnO0EDuCU,20547
278
+ claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CvWciI1W.js,sha256=PUNYe_YFaO43NL_kKfQfcAb2OSLl-YqFgch5h0pC3RE,284
279
+ claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CyrTH56Q.js,sha256=AFc7WBpN3J-HmB1GVXXBE7OWDc-dYoNExZNDGPQK0jo,9347
280
+ claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CzkNB1Vu.js,sha256=IRNg2j98hH6llkEZ7BU84LI36d_Ep37oaEQ9JaqGrEo,98059
281
+ claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/D0Fj1OdD.js,sha256=9zBDOOj0J4DeGNfg7fIzUQvmh-P5eowt6jP7noYDUsc,20547
282
+ claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/D1ARDjz0.js,sha256=nKbcwPQV9HfrbvkSmq3D8EX2wGunybapPok-rBJ8N_s,30194
283
+ claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/D2nGpDRe.js,sha256=gDlDNTwUUVy_60D_rBwS1VH3_eJj3vncFyc_US2jfNg,4547
284
+ claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DJN4AVXS.js,sha256=Uh8spnfhfV2NgvTKdKMxpLXNui2oEIC7inP6X2_hRtA,22161
285
+ claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DJuK4-OP.js,sha256=XOu7q-0_STmx68Mm7twJInChbnZ10kxzkdLcxb8qtUg,10177
286
+ claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DLeM8wSV.js,sha256=gETYYNH3fh6l88EE6zxyWvJxCjIFimFhcggUI7xEuCY,45350
287
+ claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DNI1jw9S.js,sha256=P2Njk2dR5DidsZaXbh-sg4C6blhGLigL2w7rQ3AxaJY,571
288
+ claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DOViuQX_.js,sha256=hgkzJ4T2pTN47H97TLkC4MkgARZwWp0rzj1y_5lHycU,73048
289
+ claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DOeJfApz.js,sha256=Yd7_J5U4-6f9_qNhBoCmNSSvdFdu1Vv9jDFJksIXp-g,11160
290
+ claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DTgfNBV9.js,sha256=WoHdEcfXl2o4kryrXaLOKII6-SCzg5z03uPp7fAXOec,70106
286
291
  claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DVp1hx9R.js,sha256=_71cEJ377ADBbKCFUA_NhtW49iouryLRMH4CXbup0GU,7284
292
+ claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DWDi9IaK.js,sha256=ZMbQBoZlr1JLbCAAS-0J8mB_Mw6qBjo0hkcMFjlYbU0,375522
287
293
  claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DY1XQ8fi.js,sha256=gAeU1x5HqLnuulvl2jqcFf_ui-4J1F2W3nd1M-26rpk,8273
288
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DZX00Y4g.js,sha256=0jqf47CRCxd6UJhYe-eqZeiwqAQ5EahvWgwM_sKR0oA,263
289
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Da0KfYnO.js,sha256=nczVfVg__wvDarL1HaS6nKFY2jMmyTbSe7be1uwK0MY,102
290
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DaimHw_p.js,sha256=uWegzDr6Qzd4720CecOtlGBt06ZyO5ueQy32A6-TAbQ,20970
291
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Dfy6j1xT.js,sha256=8H7g7QRBBbcuBzEF4c5kY8_H4zsgXKhblNZsEb6fSfc,723142
292
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Dhb8PKl3.js,sha256=IVGdVk-F_k-lUE4y2ea3UEFrh8qIKY2stqsbuuCiAQY,266
293
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Dle-35c7.js,sha256=ZnAHBrhPt1Ppp9CpJmiZ1eWbKU0Oi1a8qjva-RqyKgE,30196
294
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DmxopI1J.js,sha256=oavpIAySL3CEzfD4NDhV8mY7g1IiiJd9pMGBRTSqv1M,5629
295
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DwBR2MJi.js,sha256=5P0waenawPZAs_RPPf7I5wRxZpP0TOLEe1B0FDt5ZsQ,25263
296
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/GYwsonyD.js,sha256=MvViPbRWcPWoPUVcAzHzNBvaXv6JP3kFqPcI-h6CZO0,8484
294
+ claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/D_vpdI7l.js,sha256=qlyh2jaPiHZHmFy41vp2UJdzY3X-uE-dm3hOHGCyhPI,737534
295
+ claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DdIDcQsD.js,sha256=cVwzsbrNlQFohH397r_rv7_nzbUkL7JJJPG82IirQl8,266
296
+ claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DnL7ky1O.js,sha256=p7mN_7h6PR4RPWJtK-Gd1eAj0Ndin6JNFcEUAnW5J4I,86
297
+ claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Dqtg3hb8.js,sha256=9dfIZ7b_OODwMIFna88g17Fe6dQaKB5N8JssXG3b0Ro,68216
298
+ claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/EKp_wsKE.js,sha256=NKSMCFti6uNABL3wdcB46tbLP0WdxqP3jgcquDuuRLM,180
297
299
  claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Gi6I4Gst.js,sha256=N5-ogMFK1I9DsMI_9WswsrgI6EYP2fnK2L98snjFuBQ,147
300
+ claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/MJf6AOIJ.js,sha256=XIO2XVIIVWlcL5CJe3hu1Bn__0hpJoKBmKPAZL9zls0,29257
298
301
  claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/NqQ1dWOy.js,sha256=jSP9bD9syhQTvU25CpFbDR-3LlgJaQPOx_QBIaU2pE4,26707
299
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/RJiighC3.js,sha256=2kLxTVLyjVqTOYoUjpj-HW4gqstZScnFbz8mVdgj7ck,27498
302
+ claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/NsEh4Ivo.js,sha256=2ad9PyM_emGjebMqhZJ9DJdmo71kvs-aKEBoHnWSShY,534
303
+ claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/URSAF6IJ.js,sha256=Z3j6tekBUpXM7_DOT6R02k83ZaP6mskwgymLI8-WpmA,13363
300
304
  claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Vzk33B_K.js,sha256=QZJIN0_5QqfYi6MzteBUh2Q0aWDTUmED_aNfyNTHeIg,50161
301
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/ZGh7QtNv.js,sha256=dV1dJlZMNNVy-1RdvSi0BF9Rh89zaDUXBk6o9Q-5Qh0,40113
302
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/bT1r9zLR.js,sha256=FfivKzZZ40EGYelbr8XAgBdsEvZAy1gVg9eSr9C9xYY,1424
303
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/bTOqqlTd.js,sha256=_G-rX8DH5J3hG82MIoL8vThXOCYMTiuu4Q8565xmxJg,81658
304
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/eNVUfhuA.js,sha256=GVCz76FJWwqcv4ch6zw6HCKR9NPRZtXGKxKNSe0fgB8,180
305
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/iEWssX7S.js,sha256=6PM57OhdvtVHLYk44vqyu21Fs2igGtr5tIehBLcpiKA,61020
306
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/sQeU3Y1z.js,sha256=hbi42YhTDV3R3rhCwv0RKPRrLrfa4LHpSZhore-3m6s,9347
307
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/uuIeMWc-.js,sha256=B1x3x-nglIUU3AS3yhgltNbSmOoxyr4xOZjznuo_3z4,571
308
- claude_mpm/dashboard/static/svelte-build/_app/immutable/entry/app.D6-I5TpK.js,sha256=Shel8wqKdXVvVSAwNkfPgOIPaJ3VFBoHNSOubYOAV-M,4743
309
- claude_mpm/dashboard/static/svelte-build/_app/immutable/entry/start.NWzMBYRp.js,sha256=-m76qBXocW6uEeukFfef_ih9_WQS2TRC-dsSvlsYw4U,83
310
- claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/0.m1gL8KXf.js,sha256=CKE1C3Zas6P117vXUadV6hV_uHH3h-F_XY2N-CVuq0I,715
311
- claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/1.CgNOuw-d.js,sha256=qTpqH4xNZRshE0KzyfEoCWLQ5Ww1bxuoEaNYDXcbo8I,585
312
- claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/2.C0GcWctS.js,sha256=erg_aVRSYFsc-Wi4V61o_6D4Ym4ilxoKWIxPJaQ6ztY,67
305
+ claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/WiqB4NUY.js,sha256=fZVo-3JVzdqoagHnHtUXVJRrrr_oEpzhWgTTYO7bmGc,263
306
+ claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/s04HIjWg.js,sha256=Rviu1IuDw8vSRiozuOPgzMqvOzTGRDaTUtZGOPDh0RI,1424
307
+ claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/vJiSSdpk.js,sha256=7U2oOPnNi1WlRba8gcIW6EiWbQxL2wOUfhMNkDWDq6w,351
308
+ claude_mpm/dashboard/static/svelte-build/_app/immutable/entry/app.CnXU_fEX.js,sha256=TsyW3qZyO9kXF55ZENPZylISiz4FJexko6EDUiKfK5U,4743
309
+ claude_mpm/dashboard/static/svelte-build/_app/immutable/entry/start.CUaAfoQJ.js,sha256=hk6hHGmMyoA8HCXSSRxRK2zgXamazy6uxy72rcZPSdk,83
310
+ claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/0.BuxSUm_s.js,sha256=CKE1C3Zas6P117vXUadV6hV_uHH3h-F_XY2N-CVuq0I,715
311
+ claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/1.znyTz9u3.js,sha256=Iyc3j2eez3nU5ieCT2cSegoWm-scRbjakUOl1lvp0BA,585
312
+ claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/2.CLVHDDxl.js,sha256=VkRGnvZ02CHlK0D_nBiOBmW36aNpIGIaAeNLg7n3GBI,67
313
313
  claude_mpm/dashboard-svelte/node_modules/katex/src/fonts/generate_fonts.py,sha256=BqZzWU-n22LypRvQ6sV7Uvkv853QJa3rz543de0V9hI,1559
314
314
  claude_mpm/dashboard-svelte/node_modules/katex/src/metrics/extract_tfms.py,sha256=kuCyCirv4JZeZgBOBIge_OPi627676DS6DJ4vo5_Yi4,3329
315
315
  claude_mpm/dashboard-svelte/node_modules/katex/src/metrics/extract_ttfs.py,sha256=iaxWwZxr4fgUyQfO2qEBJGGTvREBHjKHfnm8RWIyFLA,4278
@@ -326,25 +326,43 @@ claude_mpm/hooks/kuzu_enrichment_hook.py,sha256=jghoEZX8fA6HZ1kM_5l93cuCyy-AMBjW
326
326
  claude_mpm/hooks/kuzu_memory_hook.py,sha256=PK7AABvk5SHqmLyjIBEGl5nrsExJK1IVQvcXG8xeorM,12639
327
327
  claude_mpm/hooks/kuzu_response_hook.py,sha256=1eJ4WjME5eRN-7TdFD3nNsXm7nE16BjkhlvycaYvngM,6119
328
328
  claude_mpm/hooks/memory_integration_hook.py,sha256=MWy2NjbovTnBleTt-6JO6EqkYDP3PGai1HUK4pHLL0o,18517
329
- claude_mpm/hooks/session_resume_hook.py,sha256=0D0Yn30IYXqYPLzHitqiZ3i3hwUIFQGJk6bxXfYb67E,3784
329
+ claude_mpm/hooks/session_resume_hook.py,sha256=GTxH4LBl_bjPfxyf4nLZiyVsMmK63g9nBQp1QqVQCkM,7386
330
330
  claude_mpm/hooks/tool_call_interceptor.py,sha256=tYUBJHjbtaI5-HSWcz0aeUW0CaiQPypuDOTULQ0BCNI,7506
331
331
  claude_mpm/hooks/validation_hooks.py,sha256=i5uOaXifItwJfIdjjLCxAwrkKdkmo2Qa4qMc5-dwsKw,6465
332
+ claude_mpm/hooks/claude_hooks/INTEGRATION_EXAMPLE.md,sha256=w21pg7JRuOLdg28f1A7EcyPxkRH_SXLgbQTKdfBCNsU,7484
333
+ claude_mpm/hooks/claude_hooks/README_AUTO_PAUSE.md,sha256=l7A6f-yi-Z1s1t3vlNmjgZjcGVxwSUt1ZDNuUuF4cJ0,12449
332
334
  claude_mpm/hooks/claude_hooks/__init__.py,sha256=b4mud_g3S-3itHY_Dzpbb_SmdMEcJwtUU8fTcqpLqqs,130
335
+ claude_mpm/hooks/claude_hooks/auto_pause_handler.py,sha256=xDAQZ33I5OhGvtWvA9mxwVSoir9tM-aCvrWkSRdnVmU,17465
333
336
  claude_mpm/hooks/claude_hooks/connection_pool.py,sha256=vpi-XbVf61GWhh85tHBzubbOgbJly_I-5-QmsleND2M,8658
334
337
  claude_mpm/hooks/claude_hooks/correlation_manager.py,sha256=3n-RxzqE8egG4max_NcpJgL9gzrBY6Ti529LrjleI1g,2033
335
- claude_mpm/hooks/claude_hooks/event_handlers.py,sha256=4w1CDdKtLQwuyjillq8M1RdE2r9P7RGq1yRIMmjIY-Y,36273
336
- claude_mpm/hooks/claude_hooks/hook_handler.py,sha256=e-fkbp_Y2p0P9ihvWj-X-3q5YV_P3mwAxFJH_iAWjTI,27075
338
+ claude_mpm/hooks/claude_hooks/event_handlers.py,sha256=ec9arG0gOH5fc-2D2JE-MBqD8DbJ7sYYyx3pevRGPvw,39480
339
+ claude_mpm/hooks/claude_hooks/hook_handler.py,sha256=6PUlnglaV6wlR3TrAcmVUf5CpoSLaBw-tKEKpZGHxo8,28185
337
340
  claude_mpm/hooks/claude_hooks/hook_wrapper.sh,sha256=4lG3TlLVoVfTJipPj1X_ICUlS-KpnkbUp1U3oSq80Bw,2476
338
341
  claude_mpm/hooks/claude_hooks/installer.py,sha256=VbvVGMcrmCXQB3Pf9zOdjeGET2AFqbUDMHDy5KXuvz0,30463
339
342
  claude_mpm/hooks/claude_hooks/memory_integration.py,sha256=73w7A5-3s5i1oYdkbEgw7qhgalQvSuJjfx6OFqfaw64,9963
340
- claude_mpm/hooks/claude_hooks/response_tracking.py,sha256=bz_8csYxxUZ3k_SI6q9uvtE7wfH-T15v_jpP2nq45nk,16896
343
+ claude_mpm/hooks/claude_hooks/response_tracking.py,sha256=jz8TblGlajmnweUOdtWtIfPM04blOrczJEqJUmEbwXE,17728
341
344
  claude_mpm/hooks/claude_hooks/tool_analysis.py,sha256=3_o2PP9D7wEMwLriCtIBOw0cj2fSZfepN7lI4P1meSQ,7862
345
+ claude_mpm/hooks/claude_hooks/__pycache__/__init__.cpython-311.pyc,sha256=EGpgXqhPM0iRRZtCqHaLVQ6wDH42OH_M7Gt5GiFLyro,346
346
+ claude_mpm/hooks/claude_hooks/__pycache__/auto_pause_handler.cpython-311.pyc,sha256=X7A8O4KPXkuDaLDFbF7Izi1qVDyS0tQjHVo1xy_HzNQ,21172
347
+ claude_mpm/hooks/claude_hooks/__pycache__/correlation_manager.cpython-311.pyc,sha256=SQX5iiP9bQZkLL-cj_2tlGH7lpAzarO0mYal7btj3tc,3521
348
+ claude_mpm/hooks/claude_hooks/__pycache__/event_handlers.cpython-311.pyc,sha256=xS_cl5CFEHT4U_Za1vGhTTjKRayLvLoBvRfekvK-1gk,38986
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
+ claude_mpm/hooks/claude_hooks/__pycache__/memory_integration.cpython-311.pyc,sha256=YbwauQDKSGvXkT1972faalJLuxwyvq328DYQhkCnel0,10513
352
+ claude_mpm/hooks/claude_hooks/__pycache__/response_tracking.cpython-311.pyc,sha256=YV5iCKSXtrON611Rp3S8PQGPz0H3RIBO6K_n1BAfGWw,17523
353
+ claude_mpm/hooks/claude_hooks/__pycache__/tool_analysis.cpython-311.pyc,sha256=ZjcNfNY5Ht6FhalPeh7M7OzMffcey5iF4AVjDDg9kak,10694
342
354
  claude_mpm/hooks/claude_hooks/services/__init__.py,sha256=OIYOKsUNw1BHYawOCp-KFK5kmQKuj92cCqCEPO0nwo0,585
343
355
  claude_mpm/hooks/claude_hooks/services/connection_manager.py,sha256=l-aKzxwK-PWKL3TO1Iiu0sfSbj6Y9JMBOm3pgAiUYZc,9378
344
356
  claude_mpm/hooks/claude_hooks/services/connection_manager_http.py,sha256=n14k1byOBbviu0nFab3q0gb7p6eMqGO8hS0b7Gt2JRg,10262
345
357
  claude_mpm/hooks/claude_hooks/services/duplicate_detector.py,sha256=Fh9LmEMsVmQM9t0U1v2l_fuBwvNpVkl_0EF8Wu5KLHQ,3882
346
358
  claude_mpm/hooks/claude_hooks/services/state_manager.py,sha256=QB0JPJQThTVg0TGRO3Dc_3y3bac-hkulgMqqzo_71ng,11189
347
- claude_mpm/hooks/claude_hooks/services/subagent_processor.py,sha256=f7a_vgo_kuG9MalDTka2UPXwDyCkqNgCvG8i1hp0oRo,15263
359
+ claude_mpm/hooks/claude_hooks/services/subagent_processor.py,sha256=nJw1ERCMxq23ioZ5DKwprmwO0fuvuqpdFHJ03XaMiDo,16052
360
+ 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
+ claude_mpm/hooks/claude_hooks/services/__pycache__/connection_manager_http.cpython-311.pyc,sha256=bvZ_QcuI0j125Ebv8RzeWUh1BkuRTUfufGi0NV7HjuY,12359
363
+ claude_mpm/hooks/claude_hooks/services/__pycache__/duplicate_detector.cpython-311.pyc,sha256=Yy_REAUhJCiFjOhxeDb4v0qyEvEbUtCmXD9PAz40dhw,5321
364
+ claude_mpm/hooks/claude_hooks/services/__pycache__/state_manager.cpython-311.pyc,sha256=TPkEc-Zi3oNS5dCXBpGbSZwg_8RQvzNzd4pVx9B3WeM,12364
365
+ claude_mpm/hooks/claude_hooks/services/__pycache__/subagent_processor.cpython-311.pyc,sha256=WffRFbZrgwiOypPUMgcm_LT18AtyGckgDny5IXhkogg,15554
348
366
  claude_mpm/hooks/failure_learning/__init__.py,sha256=iJ80AKFHiT8DjIH2a72DQVJvL6nAFrizNA2yTKwZ4rw,1805
349
367
  claude_mpm/hooks/failure_learning/failure_detection_hook.py,sha256=KENoB5N-dBm5hb0SxeIZtCvNKbmG2BKHOJSrSO-3Z_I,7500
350
368
  claude_mpm/hooks/failure_learning/fix_detection_hook.py,sha256=XUk1bnBVLdfhQ9AMQSvGsTSeFQsKsVud2wbWX-Jjor8,7164
@@ -514,12 +532,13 @@ claude_mpm/services/analysis/__init__.py,sha256=6kMVBje1bM4ThBjhbjkK3HyjQDzSjToR
514
532
  claude_mpm/services/analysis/clone_detector.py,sha256=4v9ymXnmsDSIxXLuq1JMD8A6qHSsdfCgjFcCwUFrOq4,35719
515
533
  claude_mpm/services/analysis/postmortem_reporter.py,sha256=K7jeVvqwDRoNZBEpLEPDvSGLvXRPVC3wqOkAcDbAbCQ,15699
516
534
  claude_mpm/services/analysis/postmortem_service.py,sha256=WE1frGvvlZPthA-Vl-OgT17mNCW0zWIux-pAObu9BpE,24690
517
- claude_mpm/services/cli/__init__.py,sha256=6yavdruQywt9k39RBOrPxUTz6dEEJ6mHzjY4pl_Q3Do,559
535
+ claude_mpm/services/cli/__init__.py,sha256=CnAKYgP3fSEfiHPmx9JGJKgIUKLXjOkuuY72uNx0hys,685
518
536
  claude_mpm/services/cli/agent_cleanup_service.py,sha256=7wzbnoASqyEpeUgFMQZkzT8fCF7se23wPJ5feYbFD0E,14288
519
537
  claude_mpm/services/cli/agent_dependency_service.py,sha256=mu6RJIjEe_NrMzil3Wm6CvhQUIZ4pYn8tYpyXDBu2NI,13701
520
538
  claude_mpm/services/cli/agent_listing_service.py,sha256=wnOlSwG7YpXyX1GCUIGjOox5UUzg0wMnt0NwkfIwVNQ,15970
521
539
  claude_mpm/services/cli/agent_output_formatter.py,sha256=FcJ18m3CyeFr_wotJfEmIURHeZ71eomqO_vK7wsPWsM,20521
522
540
  claude_mpm/services/cli/agent_validation_service.py,sha256=QtpP9GOwCD2wW40winh5NDrYXXLiFd_CXFUBWeYiMCk,21746
541
+ claude_mpm/services/cli/incremental_pause_manager.py,sha256=dI0TTE9as4alHRRTri8g5lbj6vAARAiVV5fwGmtIcmA,20200
523
542
  claude_mpm/services/cli/memory_crud_service.py,sha256=tU0zegxba5lhpOCGqLijN2NfEMLwnEoYyjaF5cZ1A90,22863
524
543
  claude_mpm/services/cli/memory_output_formatter.py,sha256=iNXMSu-K24rkgVhJURS-B6GqUBxR1XEZg8ZewOll0SU,24796
525
544
  claude_mpm/services/cli/resume_service.py,sha256=ENlx5ynuw1bBuPX6XOinOizLqWGNAlSUOu--oV_hrRs,21758
@@ -613,12 +632,13 @@ claude_mpm/services/git/__init__.py,sha256=dSPR19N6fb7KdR_VqT0B72Q0iCdAMaGgxww9E
613
632
  claude_mpm/services/git/git_operations_service.py,sha256=Q233zPpNkuBPO3mzkOTVL8s_Uh-P01w8WmjaXizdtoc,17952
614
633
  claude_mpm/services/github/__init__.py,sha256=hH1Fi7FllM0SFDXX4Jic0f2qZGeCOr7l7AILdgs_Ado,462
615
634
  claude_mpm/services/github/github_cli_service.py,sha256=HmtqDazIrnZchllk8SLxYBr_k_zvhpYEso_II0w-s98,11197
616
- claude_mpm/services/infrastructure/__init__.py,sha256=dKXYEeDbAHMImXmefgcHrlTdcg3E7OlWvyC3mEE2DLg,1361
635
+ claude_mpm/services/infrastructure/__init__.py,sha256=07CQ7A58Feud3CayLLvU4s9aUFJXmzVk8_sCshM8UZY,1555
617
636
  claude_mpm/services/infrastructure/context_preservation.py,sha256=gvIRHzuhQpO5BdG_HZCoAcVG9ylxgiPgUkPTCW5_5zc,21131
637
+ claude_mpm/services/infrastructure/context_usage_tracker.py,sha256=d9zVjuhIhqwEGzp0XaqatyeSYkR-E7JgZKzeMmYvx4w,10329
618
638
  claude_mpm/services/infrastructure/daemon_manager.py,sha256=sfDxzEy5ZMFy6Gf5ZKgzioejU95ud7LF_LklvjRAIuI,8607
619
639
  claude_mpm/services/infrastructure/logging.py,sha256=4JVEigdBZYVqtHr_SVIuG-g8pxkZxkfhlCEXQ1SoE-o,6492
620
640
  claude_mpm/services/infrastructure/monitoring.py,sha256=XkcTMRj9R4gST77Yoxg2OyAYWWeF9iF9brw8aGeU2GA,2129
621
- claude_mpm/services/infrastructure/resume_log_generator.py,sha256=d65v1qYjaNKKEoszfKRv4NhY5StdSLbgXlN3qXCCUjc,15611
641
+ claude_mpm/services/infrastructure/resume_log_generator.py,sha256=NewwYONOdxqtzvtsXGfNVk_nPDB0i8PsgOcc9ZLrrXY,16459
622
642
  claude_mpm/services/infrastructure/monitoring/__init__.py,sha256=A6hRZzHJOAz00FmmUS3dsSSSO1THCfBOLho0Ann0H2E,1071
623
643
  claude_mpm/services/infrastructure/monitoring/aggregator.py,sha256=t_XURoo7qeBEtRj-tAZriNl38Fups0zvIfQ2wwazpjM,15216
624
644
  claude_mpm/services/infrastructure/monitoring/base.py,sha256=0eZik3od0GNIQLQASjfamVt8-A8uKiJTmNQsb6fGTVM,3713
@@ -971,10 +991,10 @@ claude_mpm/utils/subprocess_utils.py,sha256=D0izRT8anjiUb_JG72zlJR_JAw1cDkb7kalN
971
991
  claude_mpm/validation/__init__.py,sha256=YZhwE3mhit-lslvRLuwfX82xJ_k4haZeKmh4IWaVwtk,156
972
992
  claude_mpm/validation/agent_validator.py,sha256=GprtAvu80VyMXcKGsK_VhYiXWA6BjKHv7O6HKx0AB9w,20917
973
993
  claude_mpm/validation/frontmatter_validator.py,sha256=YpJlYNNYcV8u6hIOi3_jaRsDnzhbcQpjCBE6eyBKaFY,7076
974
- claude_mpm-5.4.85.dist-info/licenses/LICENSE,sha256=ca3y_Rk4aPrbF6f62z8Ht5MJM9OAvbGlHvEDcj9vUQ4,3867
975
- claude_mpm-5.4.85.dist-info/licenses/LICENSE-FAQ.md,sha256=TxfEkXVCK98RzDOer09puc7JVCP_q_bN4dHtZKHCMcM,5104
976
- claude_mpm-5.4.85.dist-info/METADATA,sha256=1_QsI3SOtm1JIkmsnWHAHxGiKGE2IGtnwkNfVvHXHIE,39072
977
- claude_mpm-5.4.85.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
978
- claude_mpm-5.4.85.dist-info/entry_points.txt,sha256=n-Uk4vwHPpuvu-g_I7-GHORzTnN_m6iyOsoLveKKD0E,228
979
- claude_mpm-5.4.85.dist-info/top_level.txt,sha256=1nUg3FEaBySgm8t-s54jK5zoPnu3_eY6EP6IOlekyHA,11
980
- claude_mpm-5.4.85.dist-info/RECORD,,
994
+ claude_mpm-5.4.87.dist-info/licenses/LICENSE,sha256=ca3y_Rk4aPrbF6f62z8Ht5MJM9OAvbGlHvEDcj9vUQ4,3867
995
+ claude_mpm-5.4.87.dist-info/licenses/LICENSE-FAQ.md,sha256=TxfEkXVCK98RzDOer09puc7JVCP_q_bN4dHtZKHCMcM,5104
996
+ claude_mpm-5.4.87.dist-info/METADATA,sha256=ACtei1MhMEjkwDeaTUB_cczLAVU2NF5TO4fPxYU6ma0,39072
997
+ claude_mpm-5.4.87.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
998
+ claude_mpm-5.4.87.dist-info/entry_points.txt,sha256=n-Uk4vwHPpuvu-g_I7-GHORzTnN_m6iyOsoLveKKD0E,228
999
+ claude_mpm-5.4.87.dist-info/top_level.txt,sha256=1nUg3FEaBySgm8t-s54jK5zoPnu3_eY6EP6IOlekyHA,11
1000
+ claude_mpm-5.4.87.dist-info/RECORD,,