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.
- claude_mpm/VERSION +1 -1
- claude_mpm/agents/PM_INSTRUCTIONS.md +47 -5
- claude_mpm/dashboard/static/svelte-build/_app/immutable/assets/0.B7S5qgOx.css +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/assets/2.D3t4z6uz.css +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{DmxopI1J.js → 14Ru8gxt.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{CDuw-vjf.js → 7ZAeO_Uj.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/AeivYILh.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{DaimHw_p.js → B06ALsCS.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{bTOqqlTd.js → BCWDw8BF.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{Cs_tUR18.js → BS0ej2w8.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{DwBR2MJi.js → BVFqgd56.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{CzeYkLYB.js → BXs4CVzO.js} +2 -2
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{BovzEFCE.js → B_fnSNFx.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{iEWssX7S.js → BfMC7wDI.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{CyWMqx4W.js → BfXd4Xj4.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{CBBdVcY8.js → BnFPFynJ.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{B0uc0UOD.js → BwpSELyW.js} +3 -3
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{BPYeabCQ.js → C5Dg_JxJ.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{DLVjFsZ3.js → C7i47te_.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{CnA0NrzZ.js → C86quetY.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{ZGh7QtNv.js → CDNOxKrg.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{BIF9m_hv.js → CDi5wzaD.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{Be7GpZd6.js → CQ94FMOU.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{CzZX-COe.js → CT5eAo1x.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{GYwsonyD.js → C_l0vq62.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Cn4nXAfg.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{DI7hHRFL.js → CvWciI1W.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{sQeU3Y1z.js → CyrTH56Q.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{Bh0LDWpI.js → CzkNB1Vu.js} +2 -2
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{DUrLdbGD.js → D0Fj1OdD.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{Dle-35c7.js → D1ARDjz0.js} +2 -2
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{C4B-KCzX.js → D2nGpDRe.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{BofRWZRR.js → DJN4AVXS.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{B7RN905-.js → DJuK4-OP.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{C30mlcqg.js → DLeM8wSV.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{uuIeMWc-.js → DNI1jw9S.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{C4JcI4KD.js → DOViuQX_.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{D3k0OPJN.js → DOeJfApz.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{Cfqx1Qun.js → DTgfNBV9.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{CiIAseT4.js → DWDi9IaK.js} +5 -5
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/D_vpdI7l.js +325 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{Dhb8PKl3.js → DdIDcQsD.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DnL7ky1O.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{DGkLK5U1.js → Dqtg3hb8.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{eNVUfhuA.js → EKp_wsKE.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{D9lljYKQ.js → MJf6AOIJ.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{B7xVLGWV.js → NsEh4Ivo.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/URSAF6IJ.js +24 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{DZX00Y4g.js → WiqB4NUY.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{bT1r9zLR.js → s04HIjWg.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{C_Usid8X.js → vJiSSdpk.js} +2 -2
- claude_mpm/dashboard/static/svelte-build/_app/immutable/entry/{app.D6-I5TpK.js → app.CnXU_fEX.js} +2 -2
- claude_mpm/dashboard/static/svelte-build/_app/immutable/entry/start.CUaAfoQJ.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/{1.CgNOuw-d.js → 1.znyTz9u3.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/2.CLVHDDxl.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/version.json +1 -1
- claude_mpm/dashboard/static/svelte-build/index.html +7 -7
- claude_mpm/hooks/claude_hooks/INTEGRATION_EXAMPLE.md +243 -0
- claude_mpm/hooks/claude_hooks/README_AUTO_PAUSE.md +403 -0
- claude_mpm/hooks/claude_hooks/__pycache__/__init__.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/auto_pause_handler.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/correlation_manager.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/event_handlers.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/hook_handler.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/installer.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/memory_integration.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/response_tracking.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/tool_analysis.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/auto_pause_handler.py +486 -0
- claude_mpm/hooks/claude_hooks/event_handlers.py +74 -1
- claude_mpm/hooks/claude_hooks/hook_handler.py +25 -3
- claude_mpm/hooks/claude_hooks/response_tracking.py +17 -1
- claude_mpm/hooks/claude_hooks/services/__pycache__/__init__.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/connection_manager.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/connection_manager_http.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/duplicate_detector.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/state_manager.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/subagent_processor.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/subagent_processor.py +30 -6
- claude_mpm/hooks/session_resume_hook.py +85 -1
- claude_mpm/services/cli/__init__.py +3 -0
- claude_mpm/services/cli/incremental_pause_manager.py +561 -0
- claude_mpm/services/infrastructure/__init__.py +4 -0
- claude_mpm/services/infrastructure/context_usage_tracker.py +291 -0
- claude_mpm/services/infrastructure/resume_log_generator.py +24 -5
- {claude_mpm-5.4.85.dist-info → claude_mpm-5.4.87.dist-info}/METADATA +1 -1
- {claude_mpm-5.4.85.dist-info → claude_mpm-5.4.87.dist-info}/RECORD +93 -73
- claude_mpm/dashboard/static/svelte-build/_app/immutable/assets/0.DWzvg0-y.css +0 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/assets/2.ThTw9_ym.css +0 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/5shd3_w0.js +0 -24
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BKjSRqUr.js +0 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Da0KfYnO.js +0 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Dfy6j1xT.js +0 -323
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/RJiighC3.js +0 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/entry/start.NWzMBYRp.js +0 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/2.C0GcWctS.js +0 -1
- /claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/{0.m1gL8KXf.js → 0.BuxSUm_s.js} +0 -0
- {claude_mpm-5.4.85.dist-info → claude_mpm-5.4.87.dist-info}/WHEEL +0 -0
- {claude_mpm-5.4.85.dist-info → claude_mpm-5.4.87.dist-info}/entry_points.txt +0 -0
- {claude_mpm-5.4.85.dist-info → claude_mpm-5.4.87.dist-info}/licenses/LICENSE +0 -0
- {claude_mpm-5.4.85.dist-info → claude_mpm-5.4.87.dist-info}/licenses/LICENSE-FAQ.md +0 -0
- {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, #
|
|
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,5 +1,5 @@
|
|
|
1
1
|
claude_mpm/BUILD_NUMBER,sha256=9JfxhnDtr-8l3kCP2U5TVXSErptHoga8m7XA8zqgGOc,4
|
|
2
|
-
claude_mpm/VERSION,sha256=
|
|
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=
|
|
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=
|
|
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=
|
|
249
|
-
claude_mpm/dashboard/static/svelte-build/_app/immutable/assets/0.
|
|
250
|
-
claude_mpm/dashboard/static/svelte-build/_app/immutable/assets/2.
|
|
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/
|
|
253
|
-
claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/
|
|
254
|
-
claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/
|
|
255
|
-
claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/
|
|
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/
|
|
262
|
-
claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/
|
|
263
|
-
claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/
|
|
264
|
-
claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/
|
|
265
|
-
claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/
|
|
266
|
-
claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/
|
|
267
|
-
claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/
|
|
268
|
-
claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/
|
|
269
|
-
claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/
|
|
270
|
-
claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/
|
|
271
|
-
claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/
|
|
272
|
-
claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/
|
|
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/
|
|
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/
|
|
278
|
-
claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/
|
|
279
|
-
claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/
|
|
280
|
-
claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/
|
|
281
|
-
claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/
|
|
282
|
-
claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/
|
|
283
|
-
claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/
|
|
284
|
-
claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/
|
|
285
|
-
claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/
|
|
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/
|
|
289
|
-
claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/
|
|
290
|
-
claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/
|
|
291
|
-
claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/
|
|
292
|
-
claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/
|
|
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/
|
|
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/
|
|
302
|
-
claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/
|
|
303
|
-
claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/
|
|
304
|
-
claude_mpm/dashboard/static/svelte-build/_app/immutable/
|
|
305
|
-
claude_mpm/dashboard/static/svelte-build/_app/immutable/
|
|
306
|
-
claude_mpm/dashboard/static/svelte-build/_app/immutable/
|
|
307
|
-
claude_mpm/dashboard/static/svelte-build/_app/immutable/
|
|
308
|
-
claude_mpm/dashboard/static/svelte-build/_app/immutable/
|
|
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=
|
|
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=
|
|
336
|
-
claude_mpm/hooks/claude_hooks/hook_handler.py,sha256=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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.
|
|
975
|
-
claude_mpm-5.4.
|
|
976
|
-
claude_mpm-5.4.
|
|
977
|
-
claude_mpm-5.4.
|
|
978
|
-
claude_mpm-5.4.
|
|
979
|
-
claude_mpm-5.4.
|
|
980
|
-
claude_mpm-5.4.
|
|
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,,
|