claude-mpm 5.6.1__py3-none-any.whl → 5.6.2__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/core/logging_utils.py +35 -13
- claude_mpm/core/unified_paths.py +68 -80
- claude_mpm/hooks/claude_hooks/installer.py +6 -3
- claude_mpm/hooks/claude_hooks/memory_integration.py +22 -11
- {claude_mpm-5.6.1.dist-info → claude_mpm-5.6.2.dist-info}/METADATA +1 -1
- {claude_mpm-5.6.1.dist-info → claude_mpm-5.6.2.dist-info}/RECORD +12 -12
- {claude_mpm-5.6.1.dist-info → claude_mpm-5.6.2.dist-info}/WHEEL +0 -0
- {claude_mpm-5.6.1.dist-info → claude_mpm-5.6.2.dist-info}/entry_points.txt +0 -0
- {claude_mpm-5.6.1.dist-info → claude_mpm-5.6.2.dist-info}/licenses/LICENSE +0 -0
- {claude_mpm-5.6.1.dist-info → claude_mpm-5.6.2.dist-info}/licenses/LICENSE-FAQ.md +0 -0
- {claude_mpm-5.6.1.dist-info → claude_mpm-5.6.2.dist-info}/top_level.txt +0 -0
claude_mpm/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
5.6.
|
|
1
|
+
5.6.2
|
claude_mpm/core/logging_utils.py
CHANGED
|
@@ -103,23 +103,45 @@ class LoggerFactory:
|
|
|
103
103
|
|
|
104
104
|
# Set up root logger
|
|
105
105
|
root_logger = logging.getLogger()
|
|
106
|
-
|
|
106
|
+
|
|
107
|
+
# CRITICAL FIX: Respect existing root logger suppression
|
|
108
|
+
# If root logger is already set to CRITICAL+1 (suppressed by startup.py),
|
|
109
|
+
# don't override it. This prevents logging from appearing during startup
|
|
110
|
+
# before the CLI's setup_logging() runs.
|
|
111
|
+
current_level = root_logger.level
|
|
112
|
+
desired_level = LoggingConfig.LEVELS.get(cls._log_level, logging.INFO)
|
|
113
|
+
|
|
114
|
+
# Only set level if current is unset (0) or lower than desired
|
|
115
|
+
# CRITICAL+1 is 51, so this check preserves suppression
|
|
116
|
+
should_configure_logging = current_level == 0 or (
|
|
117
|
+
current_level < desired_level and current_level <= logging.CRITICAL
|
|
118
|
+
)
|
|
119
|
+
|
|
120
|
+
if should_configure_logging:
|
|
121
|
+
root_logger.setLevel(desired_level)
|
|
122
|
+
# else: root logger is suppressed (CRITICAL+1), keep it suppressed
|
|
107
123
|
|
|
108
124
|
# Remove existing handlers
|
|
109
125
|
root_logger.handlers = []
|
|
110
126
|
|
|
111
|
-
#
|
|
112
|
-
#
|
|
113
|
-
#
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
127
|
+
# CRITICAL FIX: Don't add handlers if logging is suppressed
|
|
128
|
+
# If root logger is at CRITICAL+1 (startup suppression), don't add any handlers
|
|
129
|
+
# This prevents early imports from logging before CLI setup_logging() runs
|
|
130
|
+
if should_configure_logging:
|
|
131
|
+
# Console handler - MUST use stderr to avoid corrupting hook JSON output
|
|
132
|
+
# WHY stderr: Hook handlers output JSON to stdout. Logging to stdout
|
|
133
|
+
# corrupts this JSON and causes "hook error" messages from Claude Code.
|
|
134
|
+
console_handler = logging.StreamHandler(sys.stderr)
|
|
135
|
+
console_handler.setLevel(
|
|
136
|
+
LoggingConfig.LEVELS.get(cls._log_level, logging.INFO)
|
|
137
|
+
)
|
|
138
|
+
console_formatter = logging.Formatter(
|
|
139
|
+
log_format or LoggingConfig.DEFAULT_FORMAT,
|
|
140
|
+
date_format or LoggingConfig.DATE_FORMAT,
|
|
141
|
+
)
|
|
142
|
+
console_handler.setFormatter(console_formatter)
|
|
143
|
+
root_logger.addHandler(console_handler)
|
|
144
|
+
cls._handlers["console"] = console_handler
|
|
123
145
|
|
|
124
146
|
# File handler (optional)
|
|
125
147
|
if log_to_file and cls._log_dir:
|
claude_mpm/core/unified_paths.py
CHANGED
|
@@ -76,6 +76,7 @@ class DeploymentContext(Enum):
|
|
|
76
76
|
EDITABLE_INSTALL = "editable_install"
|
|
77
77
|
PIP_INSTALL = "pip_install"
|
|
78
78
|
PIPX_INSTALL = "pipx_install"
|
|
79
|
+
UV_TOOLS = "uv_tools"
|
|
79
80
|
SYSTEM_PACKAGE = "system_package"
|
|
80
81
|
|
|
81
82
|
|
|
@@ -190,113 +191,100 @@ class PathContext:
|
|
|
190
191
|
|
|
191
192
|
Priority order:
|
|
192
193
|
1. Environment variable override (CLAUDE_MPM_DEV_MODE)
|
|
193
|
-
2.
|
|
194
|
-
3.
|
|
195
|
-
|
|
194
|
+
2. Package installation path (uv tools, pipx, site-packages, editable)
|
|
195
|
+
3. Current working directory (opt-in with CLAUDE_MPM_PREFER_LOCAL_SOURCE)
|
|
196
|
+
|
|
197
|
+
This ensures installed packages use their installation paths rather than
|
|
198
|
+
accidentally picking up development paths from CWD.
|
|
196
199
|
"""
|
|
197
|
-
#
|
|
200
|
+
# 1. Explicit environment variable override
|
|
198
201
|
if os.environ.get("CLAUDE_MPM_DEV_MODE", "").lower() in ("1", "true", "yes"):
|
|
199
202
|
logger.debug(
|
|
200
203
|
"Development mode forced via CLAUDE_MPM_DEV_MODE environment variable"
|
|
201
204
|
)
|
|
202
205
|
return DeploymentContext.DEVELOPMENT
|
|
203
206
|
|
|
204
|
-
# Check
|
|
205
|
-
# This handles the case where pipx claude-mpm is run from within the dev directory
|
|
206
|
-
cwd = _safe_cwd()
|
|
207
|
-
current = cwd
|
|
208
|
-
for _ in range(5): # Check up to 5 levels up from current directory
|
|
209
|
-
if (current / "pyproject.toml").exists() and (
|
|
210
|
-
current / "src" / "claude_mpm"
|
|
211
|
-
).exists():
|
|
212
|
-
# Check if this is the claude-mpm project
|
|
213
|
-
try:
|
|
214
|
-
pyproject_content = (current / "pyproject.toml").read_text()
|
|
215
|
-
if (
|
|
216
|
-
'name = "claude-mpm"' in pyproject_content
|
|
217
|
-
or '"claude-mpm"' in pyproject_content
|
|
218
|
-
):
|
|
219
|
-
logger.debug(
|
|
220
|
-
f"Detected claude-mpm development directory at {current}"
|
|
221
|
-
)
|
|
222
|
-
logger.debug(
|
|
223
|
-
"Using development mode for local source preference"
|
|
224
|
-
)
|
|
225
|
-
return DeploymentContext.DEVELOPMENT
|
|
226
|
-
except Exception: # nosec B110
|
|
227
|
-
pass
|
|
228
|
-
if current == current.parent:
|
|
229
|
-
break
|
|
230
|
-
current = current.parent
|
|
231
|
-
|
|
207
|
+
# 2. Check where the actual package is installed
|
|
232
208
|
try:
|
|
233
209
|
import claude_mpm
|
|
234
210
|
|
|
235
211
|
module_path = Path(claude_mpm.__file__).parent
|
|
212
|
+
package_str = str(module_path)
|
|
236
213
|
|
|
237
|
-
#
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
# Check if we should use development paths
|
|
242
|
-
# This could be because we're in a src/ directory or running from dev directory
|
|
243
|
-
if module_path.parent.name == "src":
|
|
244
|
-
return DeploymentContext.DEVELOPMENT
|
|
245
|
-
if "pipx" in str(module_path):
|
|
246
|
-
# Running via pipx but from within a development directory
|
|
247
|
-
# Use development mode to prefer local source over pipx installation
|
|
248
|
-
cwd = _safe_cwd()
|
|
249
|
-
current = cwd
|
|
250
|
-
for _ in range(5):
|
|
251
|
-
if (current / "src" / "claude_mpm").exists() and (
|
|
252
|
-
current / "pyproject.toml"
|
|
253
|
-
).exists():
|
|
254
|
-
logger.debug(
|
|
255
|
-
"Running pipx from development directory, using development mode"
|
|
256
|
-
)
|
|
257
|
-
return DeploymentContext.DEVELOPMENT
|
|
258
|
-
if current == current.parent:
|
|
259
|
-
break
|
|
260
|
-
current = current.parent
|
|
261
|
-
return DeploymentContext.EDITABLE_INSTALL
|
|
262
|
-
return DeploymentContext.EDITABLE_INSTALL
|
|
214
|
+
# UV tools installation (~/.local/share/uv/tools/)
|
|
215
|
+
if "/.local/share/uv/tools/" in package_str:
|
|
216
|
+
logger.debug(f"Detected uv tools installation at {module_path}")
|
|
217
|
+
return DeploymentContext.UV_TOOLS
|
|
263
218
|
|
|
264
|
-
#
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
)
|
|
219
|
+
# pipx installation (~/.local/pipx/venvs/)
|
|
220
|
+
if "/.local/pipx/venvs/" in package_str or "/pipx/" in package_str:
|
|
221
|
+
logger.debug(f"Detected pipx installation at {module_path}")
|
|
222
|
+
return DeploymentContext.PIPX_INSTALL
|
|
223
|
+
|
|
224
|
+
# site-packages (pip install) - but not editable
|
|
225
|
+
if "/site-packages/" in package_str and "/src/" not in package_str:
|
|
226
|
+
logger.debug(f"Detected pip installation at {module_path}")
|
|
227
|
+
return DeploymentContext.PIP_INSTALL
|
|
228
|
+
|
|
229
|
+
# Editable install (pip install -e) - module in src/
|
|
230
|
+
if module_path.parent.name == "src":
|
|
231
|
+
# Check if this is truly an editable install
|
|
232
|
+
if PathContext._is_editable_install():
|
|
233
|
+
logger.debug(f"Detected editable installation at {module_path}")
|
|
234
|
+
return DeploymentContext.EDITABLE_INSTALL
|
|
235
|
+
# Module in src/ but not editable - development mode
|
|
270
236
|
logger.debug(
|
|
271
237
|
f"Detected development mode via directory structure at {module_path}"
|
|
272
238
|
)
|
|
273
239
|
return DeploymentContext.DEVELOPMENT
|
|
274
240
|
|
|
275
|
-
#
|
|
276
|
-
if "
|
|
277
|
-
logger.debug(f"Detected pipx installation at {module_path}")
|
|
278
|
-
return DeploymentContext.PIPX_INSTALL
|
|
279
|
-
|
|
280
|
-
# Check for system package
|
|
281
|
-
if "dist-packages" in str(module_path):
|
|
241
|
+
# dist-packages (system package manager)
|
|
242
|
+
if "dist-packages" in package_str:
|
|
282
243
|
logger.debug(f"Detected system package installation at {module_path}")
|
|
283
244
|
return DeploymentContext.SYSTEM_PACKAGE
|
|
284
245
|
|
|
285
|
-
#
|
|
286
|
-
if "site-packages" in str(module_path):
|
|
287
|
-
# Already checked for editable above, so this is a regular pip install
|
|
288
|
-
logger.debug(f"Detected pip installation at {module_path}")
|
|
289
|
-
return DeploymentContext.PIP_INSTALL
|
|
290
|
-
|
|
291
|
-
# Default to pip install
|
|
246
|
+
# Default to pip install for any other installation
|
|
292
247
|
logger.debug(f"Defaulting to pip installation for {module_path}")
|
|
293
248
|
return DeploymentContext.PIP_INSTALL
|
|
294
249
|
|
|
295
250
|
except ImportError:
|
|
296
251
|
logger.debug(
|
|
297
|
-
"ImportError during
|
|
252
|
+
"ImportError during module path detection, checking CWD as fallback"
|
|
298
253
|
)
|
|
299
|
-
|
|
254
|
+
|
|
255
|
+
# 3. CWD-based detection (OPT-IN ONLY for explicit development work)
|
|
256
|
+
# Only use CWD if explicitly requested or no package installation found
|
|
257
|
+
if os.environ.get("CLAUDE_MPM_PREFER_LOCAL_SOURCE", "").lower() in (
|
|
258
|
+
"1",
|
|
259
|
+
"true",
|
|
260
|
+
"yes",
|
|
261
|
+
):
|
|
262
|
+
cwd = _safe_cwd()
|
|
263
|
+
current = cwd
|
|
264
|
+
for _ in range(5): # Check up to 5 levels up from current directory
|
|
265
|
+
if (current / "pyproject.toml").exists() and (
|
|
266
|
+
current / "src" / "claude_mpm"
|
|
267
|
+
).exists():
|
|
268
|
+
# Check if this is the claude-mpm project
|
|
269
|
+
try:
|
|
270
|
+
pyproject_content = (current / "pyproject.toml").read_text()
|
|
271
|
+
if (
|
|
272
|
+
'name = "claude-mpm"' in pyproject_content
|
|
273
|
+
or '"claude-mpm"' in pyproject_content
|
|
274
|
+
):
|
|
275
|
+
logger.debug(
|
|
276
|
+
f"CLAUDE_MPM_PREFER_LOCAL_SOURCE: Using development directory at {current}"
|
|
277
|
+
)
|
|
278
|
+
return DeploymentContext.DEVELOPMENT
|
|
279
|
+
except Exception: # nosec B110
|
|
280
|
+
pass
|
|
281
|
+
if current == current.parent:
|
|
282
|
+
break
|
|
283
|
+
current = current.parent
|
|
284
|
+
|
|
285
|
+
# Final fallback: assume development mode
|
|
286
|
+
logger.debug("No installation detected, defaulting to development mode")
|
|
287
|
+
return DeploymentContext.DEVELOPMENT
|
|
300
288
|
|
|
301
289
|
|
|
302
290
|
class UnifiedPathManager:
|
|
@@ -14,8 +14,6 @@ import subprocess # nosec B404 - Safe: only uses hardcoded 'claude' CLI command
|
|
|
14
14
|
from pathlib import Path
|
|
15
15
|
from typing import Dict, List, Optional, Tuple
|
|
16
16
|
|
|
17
|
-
from ...core.logger import get_logger
|
|
18
|
-
|
|
19
17
|
|
|
20
18
|
class HookInstaller:
|
|
21
19
|
"""Manages installation and configuration of Claude MPM hooks."""
|
|
@@ -199,7 +197,12 @@ main "$@"
|
|
|
199
197
|
|
|
200
198
|
def __init__(self):
|
|
201
199
|
"""Initialize the hook installer."""
|
|
202
|
-
|
|
200
|
+
# Use __name__ directly to avoid double prefix
|
|
201
|
+
# __name__ is already 'claude_mpm.hooks.claude_hooks.installer'
|
|
202
|
+
# get_logger() adds 'claude_mpm.' prefix, causing duplicate
|
|
203
|
+
import logging
|
|
204
|
+
|
|
205
|
+
self.logger = logging.getLogger(__name__)
|
|
203
206
|
self.claude_dir = Path.home() / ".claude"
|
|
204
207
|
self.hooks_dir = self.claude_dir / "hooks" # Kept for backward compatibility
|
|
205
208
|
# Use settings.json for hooks (Claude Code reads from this file)
|
|
@@ -11,15 +11,23 @@ import sys
|
|
|
11
11
|
|
|
12
12
|
# Install-type-aware logging configuration BEFORE kuzu-memory imports
|
|
13
13
|
# This overrides kuzu-memory's WARNING-level basicConfig (fixes 1M-445)
|
|
14
|
-
# but respects production install silence
|
|
14
|
+
# but respects production install silence AND startup suppression
|
|
15
15
|
try:
|
|
16
16
|
from claude_mpm.core.unified_paths import DeploymentContext, PathContext
|
|
17
17
|
|
|
18
18
|
context = PathContext.detect_deployment_context()
|
|
19
19
|
|
|
20
|
+
# CRITICAL: Check if root logger is already suppressed (CRITICAL+1 from startup.py)
|
|
21
|
+
# If so, don't call basicConfig as it will reset the level to INFO
|
|
22
|
+
root_logger = logging.getLogger()
|
|
23
|
+
is_suppressed = root_logger.level > logging.CRITICAL # CRITICAL+1 = 51
|
|
24
|
+
|
|
20
25
|
# Only configure verbose logging for development/editable installs
|
|
21
|
-
#
|
|
22
|
-
if context in (
|
|
26
|
+
# AND if logging isn't already suppressed by startup.py
|
|
27
|
+
if not is_suppressed and context in (
|
|
28
|
+
DeploymentContext.DEVELOPMENT,
|
|
29
|
+
DeploymentContext.EDITABLE_INSTALL,
|
|
30
|
+
):
|
|
23
31
|
logging.basicConfig(
|
|
24
32
|
level=logging.INFO,
|
|
25
33
|
format="%(asctime)s - %(name)s - %(levelname)s - %(message)s",
|
|
@@ -27,14 +35,17 @@ try:
|
|
|
27
35
|
stream=sys.stderr,
|
|
28
36
|
)
|
|
29
37
|
except ImportError:
|
|
30
|
-
# Fallback: if unified_paths not available,
|
|
31
|
-
|
|
32
|
-
logging.
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
+
# Fallback: if unified_paths not available, check suppression before configuring
|
|
39
|
+
root_logger = logging.getLogger()
|
|
40
|
+
is_suppressed = root_logger.level > logging.CRITICAL
|
|
41
|
+
|
|
42
|
+
if not is_suppressed:
|
|
43
|
+
logging.basicConfig(
|
|
44
|
+
level=logging.INFO,
|
|
45
|
+
format="%(asctime)s - %(name)s - %(levelname)s - %(message)s",
|
|
46
|
+
force=True,
|
|
47
|
+
stream=sys.stderr,
|
|
48
|
+
)
|
|
38
49
|
from datetime import datetime, timezone
|
|
39
50
|
from typing import Optional
|
|
40
51
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
claude_mpm/BUILD_NUMBER,sha256=9JfxhnDtr-8l3kCP2U5TVXSErptHoga8m7XA8zqgGOc,4
|
|
2
|
-
claude_mpm/VERSION,sha256=
|
|
2
|
+
claude_mpm/VERSION,sha256=h30O3O6JDu7O14VoCq1YqQo9Js3uwcNMmIJOFIdWD74,6
|
|
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
|
|
@@ -277,7 +277,7 @@ claude_mpm/core/lazy.py,sha256=pyCfEqGHyLz18yXTu_uG52-II-9nCaBcpzwwQGBrQro,14808
|
|
|
277
277
|
claude_mpm/core/log_manager.py,sha256=yf82AKC-DYLtl7h0ka5IEoVC8aC0_II-zCjHOwD3RxQ,24661
|
|
278
278
|
claude_mpm/core/logger.py,sha256=9HDM9MOHzQXvI6rV35S9AQgZS5kTx5r-tNbKUZVZ7u0,21931
|
|
279
279
|
claude_mpm/core/logging_config.py,sha256=h6beZ1QQTOSM8RM_dq-LC-pnfA3iRxIcTtuGv9zusyI,14724
|
|
280
|
-
claude_mpm/core/logging_utils.py,sha256=
|
|
280
|
+
claude_mpm/core/logging_utils.py,sha256=RrHi4mt4h8Aq9igMos3ZyeAB2_Xfmcx_XPLRSGKTtzQ,17333
|
|
281
281
|
claude_mpm/core/minimal_framework_loader.py,sha256=vmDEjL3MjnV7W4WIR-ymaL8QgsGsgxJJ0KdiQqAtudM,3640
|
|
282
282
|
claude_mpm/core/mixins.py,sha256=vmZ7Nu2ZOnKjbhN07Ixk4noIej9nsJiknrp-Sclfu0A,5344
|
|
283
283
|
claude_mpm/core/oneshot_session.py,sha256=nA86Zk7W3Rh_yIhPuegFL7Xgc9S63vQ_MqfLk52doV0,21994
|
|
@@ -294,7 +294,7 @@ claude_mpm/core/types.py,sha256=Sv62QhMYvfxbt7oIGoAhhN_jxonFTeLRf-BuhxZ4vYw,7719
|
|
|
294
294
|
claude_mpm/core/typing_utils.py,sha256=qny3rA9mAeXqdLgUj9DZg642shw4LmLbkPqADN-765s,13314
|
|
295
295
|
claude_mpm/core/unified_agent_registry.py,sha256=YbL-oWeHU85zdf1mF7tyMHBYKtFBupsMeH9BCdzD6ZI,34161
|
|
296
296
|
claude_mpm/core/unified_config.py,sha256=iKJc8fSACrVWr5bWXwg9D3TF9EhwLUvCI52u4kOFo-c,22178
|
|
297
|
-
claude_mpm/core/unified_paths.py,sha256=
|
|
297
|
+
claude_mpm/core/unified_paths.py,sha256=DJOI7JAoN-Mnw7lRwqGo9BCAZKALOfjpaNJ6GFxaREc,36042
|
|
298
298
|
claude_mpm/core/framework/__init__.py,sha256=IJCp6-MQO8gW31uG8aMWHdNg54NgGvXb4GvOuwZF6Iw,736
|
|
299
299
|
claude_mpm/core/framework/formatters/__init__.py,sha256=OKkLN2x21rcbg3d3feZLixIS-UjHPlxl768uGmQy7Qc,307
|
|
300
300
|
claude_mpm/core/framework/formatters/capability_generator.py,sha256=mZpnuKiNhGtE7R39VftWiHaSCabnpUDnUbH3FKKTMUk,14649
|
|
@@ -414,8 +414,8 @@ claude_mpm/hooks/claude_hooks/correlation_manager.py,sha256=3n-RxzqE8egG4max_Ncp
|
|
|
414
414
|
claude_mpm/hooks/claude_hooks/event_handlers.py,sha256=_GUOe9urO9RVIaOWSNXv2F_di4D7SaePjxONyd37das,47019
|
|
415
415
|
claude_mpm/hooks/claude_hooks/hook_handler.py,sha256=UOl5IVvz0Ro8Z0Owx4sKUWCxoIhvQpt7VTJ8lRC7Y8o,28266
|
|
416
416
|
claude_mpm/hooks/claude_hooks/hook_wrapper.sh,sha256=XYkdYtcM0nfnwYvMdyIFCasr80ry3uI5-fLYsLtDGw4,2214
|
|
417
|
-
claude_mpm/hooks/claude_hooks/installer.py,sha256=
|
|
418
|
-
claude_mpm/hooks/claude_hooks/memory_integration.py,sha256=
|
|
417
|
+
claude_mpm/hooks/claude_hooks/installer.py,sha256=X6m0CQ9mjaESqUu9RF00uOopZx1u5VOeR0-ilyaP6Xg,33275
|
|
418
|
+
claude_mpm/hooks/claude_hooks/memory_integration.py,sha256=ggPUpSLOp1fUu8cfHR7oyeGZINoeh_eKx85iKeNmnIQ,10436
|
|
419
419
|
claude_mpm/hooks/claude_hooks/response_tracking.py,sha256=bgX4iVQqmX0L3_GHyKs1q4CSIjnavdxYnJZT0GaT4gs,17148
|
|
420
420
|
claude_mpm/hooks/claude_hooks/tool_analysis.py,sha256=3_o2PP9D7wEMwLriCtIBOw0cj2fSZfepN7lI4P1meSQ,7862
|
|
421
421
|
claude_mpm/hooks/claude_hooks/services/__init__.py,sha256=OIYOKsUNw1BHYawOCp-KFK5kmQKuj92cCqCEPO0nwo0,585
|
|
@@ -1070,10 +1070,10 @@ claude_mpm/utils/subprocess_utils.py,sha256=D0izRT8anjiUb_JG72zlJR_JAw1cDkb7kalN
|
|
|
1070
1070
|
claude_mpm/validation/__init__.py,sha256=YZhwE3mhit-lslvRLuwfX82xJ_k4haZeKmh4IWaVwtk,156
|
|
1071
1071
|
claude_mpm/validation/agent_validator.py,sha256=GprtAvu80VyMXcKGsK_VhYiXWA6BjKHv7O6HKx0AB9w,20917
|
|
1072
1072
|
claude_mpm/validation/frontmatter_validator.py,sha256=YpJlYNNYcV8u6hIOi3_jaRsDnzhbcQpjCBE6eyBKaFY,7076
|
|
1073
|
-
claude_mpm-5.6.
|
|
1074
|
-
claude_mpm-5.6.
|
|
1075
|
-
claude_mpm-5.6.
|
|
1076
|
-
claude_mpm-5.6.
|
|
1077
|
-
claude_mpm-5.6.
|
|
1078
|
-
claude_mpm-5.6.
|
|
1079
|
-
claude_mpm-5.6.
|
|
1073
|
+
claude_mpm-5.6.2.dist-info/licenses/LICENSE,sha256=ca3y_Rk4aPrbF6f62z8Ht5MJM9OAvbGlHvEDcj9vUQ4,3867
|
|
1074
|
+
claude_mpm-5.6.2.dist-info/licenses/LICENSE-FAQ.md,sha256=TxfEkXVCK98RzDOer09puc7JVCP_q_bN4dHtZKHCMcM,5104
|
|
1075
|
+
claude_mpm-5.6.2.dist-info/METADATA,sha256=0UjXWxh6ZxAAd23Fz65DKfaJx-h0QSoP3bXNIw1TLxA,14983
|
|
1076
|
+
claude_mpm-5.6.2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
1077
|
+
claude_mpm-5.6.2.dist-info/entry_points.txt,sha256=n-Uk4vwHPpuvu-g_I7-GHORzTnN_m6iyOsoLveKKD0E,228
|
|
1078
|
+
claude_mpm-5.6.2.dist-info/top_level.txt,sha256=1nUg3FEaBySgm8t-s54jK5zoPnu3_eY6EP6IOlekyHA,11
|
|
1079
|
+
claude_mpm-5.6.2.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|