claude-mpm 5.1.9__py3-none-any.whl → 5.4.22__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of claude-mpm might be problematic. Click here for more details.
- claude_mpm/VERSION +1 -1
- claude_mpm/__init__.py +4 -0
- claude_mpm/agents/CLAUDE_MPM_TEACHER_OUTPUT_STYLE.md +1 -1
- claude_mpm/agents/PM_INSTRUCTIONS.md +290 -34
- claude_mpm/agents/agent_loader.py +13 -44
- claude_mpm/agents/templates/circuit-breakers.md +138 -1
- claude_mpm/cli/__main__.py +4 -0
- claude_mpm/cli/chrome_devtools_installer.py +175 -0
- claude_mpm/cli/commands/agent_state_manager.py +8 -17
- claude_mpm/cli/commands/agents.py +0 -31
- claude_mpm/cli/commands/auto_configure.py +210 -25
- claude_mpm/cli/commands/config.py +88 -2
- claude_mpm/cli/commands/configure.py +1097 -158
- claude_mpm/cli/commands/configure_agent_display.py +15 -6
- claude_mpm/cli/commands/mpm_init/core.py +160 -46
- claude_mpm/cli/commands/mpm_init/knowledge_extractor.py +481 -0
- claude_mpm/cli/commands/mpm_init/prompts.py +280 -0
- claude_mpm/cli/commands/skills.py +214 -189
- claude_mpm/cli/commands/summarize.py +413 -0
- claude_mpm/cli/executor.py +11 -3
- claude_mpm/cli/parsers/agents_parser.py +0 -9
- claude_mpm/cli/parsers/auto_configure_parser.py +0 -138
- claude_mpm/cli/parsers/base_parser.py +5 -0
- claude_mpm/cli/parsers/config_parser.py +153 -83
- claude_mpm/cli/parsers/skills_parser.py +3 -2
- claude_mpm/cli/startup.py +550 -94
- claude_mpm/commands/mpm-config.md +265 -0
- claude_mpm/commands/mpm-help.md +14 -95
- claude_mpm/commands/mpm-organize.md +500 -0
- claude_mpm/config/agent_sources.py +27 -0
- claude_mpm/core/framework/formatters/content_formatter.py +3 -13
- claude_mpm/core/framework/loaders/agent_loader.py +8 -5
- claude_mpm/core/framework_loader.py +4 -2
- claude_mpm/core/logger.py +13 -0
- claude_mpm/core/socketio_pool.py +3 -3
- claude_mpm/core/unified_agent_registry.py +5 -15
- claude_mpm/hooks/claude_hooks/correlation_manager.py +60 -0
- claude_mpm/hooks/claude_hooks/event_handlers.py +211 -78
- claude_mpm/hooks/claude_hooks/hook_handler.py +6 -0
- claude_mpm/hooks/claude_hooks/installer.py +33 -10
- claude_mpm/hooks/claude_hooks/memory_integration.py +26 -9
- claude_mpm/hooks/claude_hooks/response_tracking.py +2 -3
- claude_mpm/hooks/claude_hooks/services/connection_manager.py +4 -0
- claude_mpm/hooks/memory_integration_hook.py +46 -1
- claude_mpm/init.py +0 -19
- claude_mpm/scripts/claude-hook-handler.sh +58 -18
- claude_mpm/scripts/launch_monitor.py +93 -13
- claude_mpm/scripts/start_activity_logging.py +0 -0
- claude_mpm/services/agents/agent_recommendation_service.py +278 -0
- claude_mpm/services/agents/agent_review_service.py +280 -0
- claude_mpm/services/agents/deployment/agent_discovery_service.py +2 -3
- claude_mpm/services/agents/deployment/agent_template_builder.py +4 -2
- claude_mpm/services/agents/deployment/multi_source_deployment_service.py +78 -9
- claude_mpm/services/agents/deployment/remote_agent_discovery_service.py +335 -53
- claude_mpm/services/agents/git_source_manager.py +34 -0
- claude_mpm/services/agents/loading/base_agent_manager.py +1 -13
- claude_mpm/services/agents/sources/git_source_sync_service.py +8 -1
- claude_mpm/services/agents/toolchain_detector.py +10 -6
- claude_mpm/services/analysis/__init__.py +11 -1
- claude_mpm/services/analysis/clone_detector.py +1030 -0
- claude_mpm/services/command_deployment_service.py +81 -10
- claude_mpm/services/event_bus/config.py +3 -1
- claude_mpm/services/git/git_operations_service.py +93 -8
- claude_mpm/services/monitor/daemon.py +9 -2
- claude_mpm/services/monitor/daemon_manager.py +39 -3
- claude_mpm/services/monitor/server.py +225 -19
- claude_mpm/services/self_upgrade_service.py +120 -12
- claude_mpm/services/skills/__init__.py +3 -0
- claude_mpm/services/skills/git_skill_source_manager.py +32 -2
- claude_mpm/services/skills/selective_skill_deployer.py +704 -0
- claude_mpm/services/skills/skill_to_agent_mapper.py +406 -0
- claude_mpm/services/skills_deployer.py +126 -9
- claude_mpm/services/socketio/event_normalizer.py +15 -1
- claude_mpm/services/socketio/server/core.py +160 -21
- claude_mpm/services/version_control/git_operations.py +103 -0
- claude_mpm/utils/agent_filters.py +17 -44
- {claude_mpm-5.1.9.dist-info → claude_mpm-5.4.22.dist-info}/METADATA +47 -84
- {claude_mpm-5.1.9.dist-info → claude_mpm-5.4.22.dist-info}/RECORD +82 -161
- claude_mpm-5.4.22.dist-info/entry_points.txt +5 -0
- claude_mpm-5.4.22.dist-info/licenses/LICENSE +94 -0
- claude_mpm-5.4.22.dist-info/licenses/LICENSE-FAQ.md +153 -0
- claude_mpm/agents/BASE_AGENT_TEMPLATE.md +0 -292
- claude_mpm/agents/BASE_DOCUMENTATION.md +0 -53
- claude_mpm/agents/BASE_ENGINEER.md +0 -658
- claude_mpm/agents/BASE_OPS.md +0 -219
- claude_mpm/agents/BASE_PM.md +0 -480
- claude_mpm/agents/BASE_PROMPT_ENGINEER.md +0 -787
- claude_mpm/agents/BASE_QA.md +0 -167
- claude_mpm/agents/BASE_RESEARCH.md +0 -53
- claude_mpm/agents/base_agent.json +0 -31
- claude_mpm/agents/base_agent_loader.py +0 -601
- claude_mpm/cli/commands/agents_detect.py +0 -380
- claude_mpm/cli/commands/agents_recommend.py +0 -309
- claude_mpm/cli/ticket_cli.py +0 -35
- claude_mpm/commands/mpm-agents-auto-configure.md +0 -278
- claude_mpm/commands/mpm-agents-detect.md +0 -177
- claude_mpm/commands/mpm-agents-list.md +0 -131
- claude_mpm/commands/mpm-agents-recommend.md +0 -223
- claude_mpm/commands/mpm-config-view.md +0 -150
- claude_mpm/commands/mpm-ticket-organize.md +0 -304
- claude_mpm/dashboard/analysis_runner.py +0 -455
- claude_mpm/dashboard/index.html +0 -13
- claude_mpm/dashboard/open_dashboard.py +0 -66
- claude_mpm/dashboard/static/css/activity.css +0 -1958
- claude_mpm/dashboard/static/css/connection-status.css +0 -370
- claude_mpm/dashboard/static/css/dashboard.css +0 -4701
- claude_mpm/dashboard/static/js/components/activity-tree.js +0 -1871
- claude_mpm/dashboard/static/js/components/agent-hierarchy.js +0 -777
- claude_mpm/dashboard/static/js/components/agent-inference.js +0 -956
- claude_mpm/dashboard/static/js/components/build-tracker.js +0 -333
- claude_mpm/dashboard/static/js/components/code-simple.js +0 -857
- claude_mpm/dashboard/static/js/components/connection-debug.js +0 -654
- claude_mpm/dashboard/static/js/components/diff-viewer.js +0 -891
- claude_mpm/dashboard/static/js/components/event-processor.js +0 -542
- claude_mpm/dashboard/static/js/components/event-viewer.js +0 -1155
- claude_mpm/dashboard/static/js/components/export-manager.js +0 -368
- claude_mpm/dashboard/static/js/components/file-change-tracker.js +0 -443
- claude_mpm/dashboard/static/js/components/file-change-viewer.js +0 -690
- claude_mpm/dashboard/static/js/components/file-tool-tracker.js +0 -724
- claude_mpm/dashboard/static/js/components/file-viewer.js +0 -580
- claude_mpm/dashboard/static/js/components/hud-library-loader.js +0 -211
- claude_mpm/dashboard/static/js/components/hud-manager.js +0 -671
- claude_mpm/dashboard/static/js/components/hud-visualizer.js +0 -1718
- claude_mpm/dashboard/static/js/components/module-viewer.js +0 -2764
- claude_mpm/dashboard/static/js/components/session-manager.js +0 -579
- claude_mpm/dashboard/static/js/components/socket-manager.js +0 -368
- claude_mpm/dashboard/static/js/components/ui-state-manager.js +0 -749
- claude_mpm/dashboard/static/js/components/unified-data-viewer.js +0 -1824
- claude_mpm/dashboard/static/js/components/working-directory.js +0 -920
- claude_mpm/dashboard/static/js/connection-manager.js +0 -536
- claude_mpm/dashboard/static/js/dashboard.js +0 -1914
- claude_mpm/dashboard/static/js/extension-error-handler.js +0 -164
- claude_mpm/dashboard/static/js/socket-client.js +0 -1474
- claude_mpm/dashboard/static/js/tab-isolation-fix.js +0 -185
- claude_mpm/dashboard/static/socket.io.min.js +0 -7
- claude_mpm/dashboard/static/socket.io.v4.8.1.backup.js +0 -7
- claude_mpm/dashboard/templates/code_simple.html +0 -153
- claude_mpm/dashboard/templates/index.html +0 -606
- claude_mpm/dashboard/test_dashboard.html +0 -372
- claude_mpm/scripts/mcp_server.py +0 -75
- claude_mpm/scripts/mcp_wrapper.py +0 -39
- claude_mpm/services/mcp_gateway/__init__.py +0 -159
- claude_mpm/services/mcp_gateway/auto_configure.py +0 -369
- claude_mpm/services/mcp_gateway/config/__init__.py +0 -17
- claude_mpm/services/mcp_gateway/config/config_loader.py +0 -296
- claude_mpm/services/mcp_gateway/config/config_schema.py +0 -243
- claude_mpm/services/mcp_gateway/config/configuration.py +0 -429
- claude_mpm/services/mcp_gateway/core/__init__.py +0 -43
- claude_mpm/services/mcp_gateway/core/base.py +0 -312
- claude_mpm/services/mcp_gateway/core/exceptions.py +0 -253
- claude_mpm/services/mcp_gateway/core/interfaces.py +0 -443
- claude_mpm/services/mcp_gateway/core/process_pool.py +0 -977
- claude_mpm/services/mcp_gateway/core/singleton_manager.py +0 -315
- claude_mpm/services/mcp_gateway/core/startup_verification.py +0 -316
- claude_mpm/services/mcp_gateway/main.py +0 -589
- claude_mpm/services/mcp_gateway/registry/__init__.py +0 -12
- claude_mpm/services/mcp_gateway/registry/service_registry.py +0 -412
- claude_mpm/services/mcp_gateway/registry/tool_registry.py +0 -489
- claude_mpm/services/mcp_gateway/server/__init__.py +0 -15
- claude_mpm/services/mcp_gateway/server/mcp_gateway.py +0 -414
- claude_mpm/services/mcp_gateway/server/stdio_handler.py +0 -372
- claude_mpm/services/mcp_gateway/server/stdio_server.py +0 -712
- claude_mpm/services/mcp_gateway/tools/__init__.py +0 -36
- claude_mpm/services/mcp_gateway/tools/base_adapter.py +0 -485
- claude_mpm/services/mcp_gateway/tools/document_summarizer.py +0 -789
- claude_mpm/services/mcp_gateway/tools/external_mcp_services.py +0 -654
- claude_mpm/services/mcp_gateway/tools/health_check_tool.py +0 -456
- claude_mpm/services/mcp_gateway/tools/hello_world.py +0 -551
- claude_mpm/services/mcp_gateway/tools/kuzu_memory_service.py +0 -555
- claude_mpm/services/mcp_gateway/utils/__init__.py +0 -14
- claude_mpm/services/mcp_gateway/utils/package_version_checker.py +0 -160
- claude_mpm/services/mcp_gateway/utils/update_preferences.py +0 -170
- claude_mpm-5.1.9.dist-info/entry_points.txt +0 -10
- claude_mpm-5.1.9.dist-info/licenses/LICENSE +0 -21
- {claude_mpm-5.1.9.dist-info → claude_mpm-5.4.22.dist-info}/WHEEL +0 -0
- {claude_mpm-5.1.9.dist-info → claude_mpm-5.4.22.dist-info}/top_level.txt +0 -0
|
@@ -1,160 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
Package Version Checker
|
|
3
|
-
=======================
|
|
4
|
-
|
|
5
|
-
Checks PyPI packages for updates with caching and timeout support.
|
|
6
|
-
Provides non-blocking version checking for MCP tools like kuzu-memory.
|
|
7
|
-
"""
|
|
8
|
-
|
|
9
|
-
import asyncio
|
|
10
|
-
import json
|
|
11
|
-
from datetime import datetime, timedelta, timezone
|
|
12
|
-
from pathlib import Path
|
|
13
|
-
from typing import Any, Dict, Optional
|
|
14
|
-
|
|
15
|
-
import aiohttp
|
|
16
|
-
from packaging import version
|
|
17
|
-
|
|
18
|
-
from ....core.logger import get_logger
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
class PackageVersionChecker:
|
|
22
|
-
"""
|
|
23
|
-
Check PyPI packages for updates with caching and timeout.
|
|
24
|
-
|
|
25
|
-
WHY: Automatically detect when newer versions of critical packages
|
|
26
|
-
(like kuzu-memory) are available to help users stay up-to-date.
|
|
27
|
-
|
|
28
|
-
DESIGN DECISIONS:
|
|
29
|
-
- Cache results to avoid excessive PyPI API calls
|
|
30
|
-
- Non-blocking with timeout to prevent startup delays
|
|
31
|
-
- Graceful failure handling (never block system operation)
|
|
32
|
-
"""
|
|
33
|
-
|
|
34
|
-
CACHE_DIR = Path.home() / ".cache" / "claude-mpm" / "version-checks"
|
|
35
|
-
DEFAULT_CACHE_TTL = 86400 # 24 hours
|
|
36
|
-
PYPI_TIMEOUT = 5 # seconds
|
|
37
|
-
|
|
38
|
-
def __init__(self):
|
|
39
|
-
"""Initialize the version checker with cache directory."""
|
|
40
|
-
self.logger = get_logger("PackageVersionChecker")
|
|
41
|
-
self.cache_dir = self.CACHE_DIR
|
|
42
|
-
self.cache_dir.mkdir(parents=True, exist_ok=True)
|
|
43
|
-
|
|
44
|
-
async def check_for_update(
|
|
45
|
-
self, package_name: str, current_version: str, cache_ttl: Optional[int] = None
|
|
46
|
-
) -> Optional[Dict[str, Any]]:
|
|
47
|
-
"""
|
|
48
|
-
Check if a package has updates available.
|
|
49
|
-
|
|
50
|
-
Args:
|
|
51
|
-
package_name: Name of the package on PyPI
|
|
52
|
-
current_version: Currently installed version
|
|
53
|
-
cache_ttl: Cache time-to-live in seconds (optional)
|
|
54
|
-
|
|
55
|
-
Returns:
|
|
56
|
-
Dict with update information or None if check fails:
|
|
57
|
-
{
|
|
58
|
-
"current": "1.0.0",
|
|
59
|
-
"latest": "1.1.0",
|
|
60
|
-
"update_available": True,
|
|
61
|
-
"checked_at": "2025-01-29T12:00:00"
|
|
62
|
-
}
|
|
63
|
-
"""
|
|
64
|
-
cache_ttl = cache_ttl or self.DEFAULT_CACHE_TTL
|
|
65
|
-
|
|
66
|
-
# Check cache first
|
|
67
|
-
cache_file = self.cache_dir / f"{package_name}.json"
|
|
68
|
-
cached = self._read_cache(cache_file, cache_ttl)
|
|
69
|
-
if cached:
|
|
70
|
-
# Update current version in cached data
|
|
71
|
-
cached["current"] = current_version
|
|
72
|
-
cached["update_available"] = version.parse(
|
|
73
|
-
cached["latest"]
|
|
74
|
-
) > version.parse(current_version)
|
|
75
|
-
return cached
|
|
76
|
-
|
|
77
|
-
# Fetch from PyPI with timeout
|
|
78
|
-
try:
|
|
79
|
-
latest = await self._fetch_pypi_version(package_name)
|
|
80
|
-
if latest:
|
|
81
|
-
result = {
|
|
82
|
-
"current": current_version,
|
|
83
|
-
"latest": latest,
|
|
84
|
-
"update_available": version.parse(latest)
|
|
85
|
-
> version.parse(current_version),
|
|
86
|
-
"checked_at": datetime.now(timezone.utc).isoformat(),
|
|
87
|
-
}
|
|
88
|
-
self._write_cache(cache_file, result)
|
|
89
|
-
return result
|
|
90
|
-
except Exception as e:
|
|
91
|
-
self.logger.debug(f"Version check failed for {package_name}: {e}")
|
|
92
|
-
|
|
93
|
-
return None
|
|
94
|
-
|
|
95
|
-
async def _fetch_pypi_version(self, package_name: str) -> Optional[str]:
|
|
96
|
-
"""
|
|
97
|
-
Fetch the latest version from PyPI.
|
|
98
|
-
|
|
99
|
-
Args:
|
|
100
|
-
package_name: Package name to query
|
|
101
|
-
|
|
102
|
-
Returns:
|
|
103
|
-
Latest version string or None if fetch fails
|
|
104
|
-
"""
|
|
105
|
-
url = f"https://pypi.org/pypi/{package_name}/json"
|
|
106
|
-
|
|
107
|
-
try:
|
|
108
|
-
timeout = aiohttp.ClientTimeout(total=self.PYPI_TIMEOUT)
|
|
109
|
-
async with aiohttp.ClientSession(timeout=timeout) as session:
|
|
110
|
-
async with session.get(url) as response:
|
|
111
|
-
if response.status == 200:
|
|
112
|
-
data = await response.json()
|
|
113
|
-
return data["info"]["version"]
|
|
114
|
-
except asyncio.TimeoutError:
|
|
115
|
-
self.logger.debug(f"PyPI request timed out for {package_name}")
|
|
116
|
-
except Exception as e:
|
|
117
|
-
self.logger.debug(f"PyPI request failed: {e}")
|
|
118
|
-
|
|
119
|
-
return None
|
|
120
|
-
|
|
121
|
-
def _read_cache(self, cache_file: Path, ttl: int) -> Optional[Dict[str, Any]]:
|
|
122
|
-
"""
|
|
123
|
-
Read from cache if valid.
|
|
124
|
-
|
|
125
|
-
Args:
|
|
126
|
-
cache_file: Path to cache file
|
|
127
|
-
ttl: Time-to-live in seconds
|
|
128
|
-
|
|
129
|
-
Returns:
|
|
130
|
-
Cached data if valid, None otherwise
|
|
131
|
-
"""
|
|
132
|
-
if not cache_file.exists():
|
|
133
|
-
return None
|
|
134
|
-
|
|
135
|
-
try:
|
|
136
|
-
with cache_file.open() as f:
|
|
137
|
-
data = json.load(f)
|
|
138
|
-
|
|
139
|
-
# Check TTL
|
|
140
|
-
checked_at = datetime.fromisoformat(data["checked_at"])
|
|
141
|
-
if datetime.now(timezone.utc) - checked_at < timedelta(seconds=ttl):
|
|
142
|
-
return data
|
|
143
|
-
except Exception as e:
|
|
144
|
-
self.logger.debug(f"Cache read error: {e}")
|
|
145
|
-
|
|
146
|
-
return None
|
|
147
|
-
|
|
148
|
-
def _write_cache(self, cache_file: Path, data: Dict[str, Any]) -> None:
|
|
149
|
-
"""
|
|
150
|
-
Write data to cache file.
|
|
151
|
-
|
|
152
|
-
Args:
|
|
153
|
-
cache_file: Path to cache file
|
|
154
|
-
data: Data to cache
|
|
155
|
-
"""
|
|
156
|
-
try:
|
|
157
|
-
with cache_file.open("w") as f:
|
|
158
|
-
json.dump(data, f, indent=2)
|
|
159
|
-
except Exception as e:
|
|
160
|
-
self.logger.debug(f"Cache write failed: {e}")
|
|
@@ -1,170 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
Update Preferences Manager
|
|
3
|
-
===========================
|
|
4
|
-
|
|
5
|
-
Manages user preferences for package update checking.
|
|
6
|
-
Allows users to skip specific versions or disable update checks entirely.
|
|
7
|
-
"""
|
|
8
|
-
|
|
9
|
-
import json
|
|
10
|
-
from pathlib import Path
|
|
11
|
-
from typing import Any, Dict
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
class UpdatePreferences:
|
|
15
|
-
"""
|
|
16
|
-
Manage update checking preferences.
|
|
17
|
-
|
|
18
|
-
WHY: Respect user preferences about update notifications to avoid
|
|
19
|
-
annoying users who want to stay on specific versions or disable checks.
|
|
20
|
-
|
|
21
|
-
DESIGN DECISIONS:
|
|
22
|
-
- Store preferences in user's home directory
|
|
23
|
-
- Simple JSON format for easy manual editing
|
|
24
|
-
- Per-package preferences for granular control
|
|
25
|
-
"""
|
|
26
|
-
|
|
27
|
-
PREFS_FILE = Path.home() / ".claude-mpm" / "mcp_updates.json"
|
|
28
|
-
|
|
29
|
-
@classmethod
|
|
30
|
-
def load(cls) -> Dict[str, Any]:
|
|
31
|
-
"""
|
|
32
|
-
Load preferences from disk.
|
|
33
|
-
|
|
34
|
-
Returns:
|
|
35
|
-
Dictionary of preferences, empty dict if file doesn't exist
|
|
36
|
-
"""
|
|
37
|
-
if cls.PREFS_FILE.exists():
|
|
38
|
-
try:
|
|
39
|
-
with cls.PREFS_FILE.open() as f:
|
|
40
|
-
return json.load(f)
|
|
41
|
-
except (OSError, json.JSONDecodeError):
|
|
42
|
-
# Return empty dict if file is corrupted or unreadable
|
|
43
|
-
pass
|
|
44
|
-
return {}
|
|
45
|
-
|
|
46
|
-
@classmethod
|
|
47
|
-
def save(cls, prefs: Dict[str, Any]) -> None:
|
|
48
|
-
"""
|
|
49
|
-
Save preferences to disk.
|
|
50
|
-
|
|
51
|
-
Args:
|
|
52
|
-
prefs: Preferences dictionary to save
|
|
53
|
-
"""
|
|
54
|
-
cls.PREFS_FILE.parent.mkdir(parents=True, exist_ok=True)
|
|
55
|
-
try:
|
|
56
|
-
with cls.PREFS_FILE.open("w") as f:
|
|
57
|
-
json.dump(prefs, f, indent=2)
|
|
58
|
-
except OSError:
|
|
59
|
-
# Silently fail if we can't write preferences
|
|
60
|
-
pass
|
|
61
|
-
|
|
62
|
-
@classmethod
|
|
63
|
-
def should_check_package(cls, package: str) -> bool:
|
|
64
|
-
"""
|
|
65
|
-
Check if updates should be checked for a specific package.
|
|
66
|
-
|
|
67
|
-
Args:
|
|
68
|
-
package: Package name to check
|
|
69
|
-
|
|
70
|
-
Returns:
|
|
71
|
-
True if updates should be checked, False otherwise
|
|
72
|
-
"""
|
|
73
|
-
prefs = cls.load()
|
|
74
|
-
|
|
75
|
-
# Global preference takes precedence
|
|
76
|
-
if not prefs.get("global_check_enabled", True):
|
|
77
|
-
return False
|
|
78
|
-
|
|
79
|
-
# Package-specific preference
|
|
80
|
-
pkg_prefs = prefs.get("packages", {}).get(package, {})
|
|
81
|
-
return pkg_prefs.get("check_enabled", True)
|
|
82
|
-
|
|
83
|
-
@classmethod
|
|
84
|
-
def should_skip_version(cls, package: str, version: str) -> bool:
|
|
85
|
-
"""
|
|
86
|
-
Check if a specific version should be skipped for a package.
|
|
87
|
-
|
|
88
|
-
Args:
|
|
89
|
-
package: Package name
|
|
90
|
-
version: Version to check
|
|
91
|
-
|
|
92
|
-
Returns:
|
|
93
|
-
True if this version should be skipped, False otherwise
|
|
94
|
-
"""
|
|
95
|
-
prefs = cls.load()
|
|
96
|
-
pkg_prefs = prefs.get("packages", {}).get(package, {})
|
|
97
|
-
skip_version = pkg_prefs.get("skip_version")
|
|
98
|
-
return skip_version == version
|
|
99
|
-
|
|
100
|
-
@classmethod
|
|
101
|
-
def set_skip_version(cls, package: str, version: str) -> None:
|
|
102
|
-
"""
|
|
103
|
-
Remember to skip a specific version for a package.
|
|
104
|
-
|
|
105
|
-
Args:
|
|
106
|
-
package: Package name
|
|
107
|
-
version: Version to skip
|
|
108
|
-
"""
|
|
109
|
-
prefs = cls.load()
|
|
110
|
-
|
|
111
|
-
# Ensure packages dict exists
|
|
112
|
-
if "packages" not in prefs:
|
|
113
|
-
prefs["packages"] = {}
|
|
114
|
-
if package not in prefs["packages"]:
|
|
115
|
-
prefs["packages"][package] = {}
|
|
116
|
-
|
|
117
|
-
prefs["packages"][package]["skip_version"] = version
|
|
118
|
-
cls.save(prefs)
|
|
119
|
-
|
|
120
|
-
@classmethod
|
|
121
|
-
def disable_package_checks(cls, package: str) -> None:
|
|
122
|
-
"""
|
|
123
|
-
Disable update checks for a specific package.
|
|
124
|
-
|
|
125
|
-
Args:
|
|
126
|
-
package: Package name to disable checks for
|
|
127
|
-
"""
|
|
128
|
-
prefs = cls.load()
|
|
129
|
-
|
|
130
|
-
# Ensure packages dict exists
|
|
131
|
-
if "packages" not in prefs:
|
|
132
|
-
prefs["packages"] = {}
|
|
133
|
-
if package not in prefs["packages"]:
|
|
134
|
-
prefs["packages"][package] = {}
|
|
135
|
-
|
|
136
|
-
prefs["packages"][package]["check_enabled"] = False
|
|
137
|
-
cls.save(prefs)
|
|
138
|
-
|
|
139
|
-
@classmethod
|
|
140
|
-
def enable_package_checks(cls, package: str) -> None:
|
|
141
|
-
"""
|
|
142
|
-
Enable update checks for a specific package.
|
|
143
|
-
|
|
144
|
-
Args:
|
|
145
|
-
package: Package name to enable checks for
|
|
146
|
-
"""
|
|
147
|
-
prefs = cls.load()
|
|
148
|
-
|
|
149
|
-
# Ensure packages dict exists
|
|
150
|
-
if "packages" not in prefs:
|
|
151
|
-
prefs["packages"] = {}
|
|
152
|
-
if package not in prefs["packages"]:
|
|
153
|
-
prefs["packages"][package] = {}
|
|
154
|
-
|
|
155
|
-
prefs["packages"][package]["check_enabled"] = True
|
|
156
|
-
cls.save(prefs)
|
|
157
|
-
|
|
158
|
-
@classmethod
|
|
159
|
-
def disable_all_checks(cls) -> None:
|
|
160
|
-
"""Disable all update checks globally."""
|
|
161
|
-
prefs = cls.load()
|
|
162
|
-
prefs["global_check_enabled"] = False
|
|
163
|
-
cls.save(prefs)
|
|
164
|
-
|
|
165
|
-
@classmethod
|
|
166
|
-
def enable_all_checks(cls) -> None:
|
|
167
|
-
"""Enable all update checks globally."""
|
|
168
|
-
prefs = cls.load()
|
|
169
|
-
prefs["global_check_enabled"] = True
|
|
170
|
-
cls.save(prefs)
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
[console_scripts]
|
|
2
|
-
claude-mpm = claude_mpm.cli:main
|
|
3
|
-
claude-mpm-doctor = claude_mpm.scripts.mpm_doctor:main
|
|
4
|
-
claude-mpm-mcp = claude_mpm.services.mcp_gateway.server.stdio_server:main_sync
|
|
5
|
-
claude-mpm-mcp-wrapper = claude_mpm.scripts.mcp_wrapper:entry_point
|
|
6
|
-
claude-mpm-monitor = claude_mpm.scripts.launch_monitor:main
|
|
7
|
-
claude-mpm-socketio = claude_mpm.scripts.socketio_daemon:main
|
|
8
|
-
claude-mpm-ticket = claude_mpm.cli.ticket_cli:main
|
|
9
|
-
claude-mpm-version = claude_mpm.scripts.manage_version:main
|
|
10
|
-
ticket = claude_mpm.cli.ticket_cli:main
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
MIT License
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2025 Claude MPM Team
|
|
4
|
-
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
-
in the Software without restriction, including without limitation the rights
|
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
-
furnished to do so, subject to the following conditions:
|
|
11
|
-
|
|
12
|
-
The above copyright notice and this permission notice shall be included in all
|
|
13
|
-
copies or substantial portions of the Software.
|
|
14
|
-
|
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
-
SOFTWARE.
|
|
File without changes
|
|
File without changes
|