claude-mpm 4.15.0__py3-none-any.whl → 4.15.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.

Potentially problematic release.


This version of claude-mpm might be problematic. Click here for more details.

Files changed (23) hide show
  1. claude_mpm/VERSION +1 -1
  2. claude_mpm/agents/OUTPUT_STYLE.md +48 -3
  3. claude_mpm/services/diagnostics/__init__.py +2 -2
  4. claude_mpm/services/diagnostics/checks/agent_check.py +25 -24
  5. claude_mpm/services/diagnostics/checks/claude_code_check.py +24 -23
  6. claude_mpm/services/diagnostics/checks/common_issues_check.py +25 -24
  7. claude_mpm/services/diagnostics/checks/configuration_check.py +24 -23
  8. claude_mpm/services/diagnostics/checks/filesystem_check.py +18 -17
  9. claude_mpm/services/diagnostics/checks/installation_check.py +28 -28
  10. claude_mpm/services/diagnostics/checks/instructions_check.py +20 -19
  11. claude_mpm/services/diagnostics/checks/mcp_check.py +31 -31
  12. claude_mpm/services/diagnostics/checks/mcp_services_check.py +36 -31
  13. claude_mpm/services/diagnostics/checks/monitor_check.py +23 -22
  14. claude_mpm/services/diagnostics/checks/startup_log_check.py +9 -8
  15. claude_mpm/services/diagnostics/diagnostic_runner.py +6 -5
  16. claude_mpm/services/diagnostics/doctor_reporter.py +28 -25
  17. claude_mpm/services/diagnostics/models.py +19 -24
  18. {claude_mpm-4.15.0.dist-info → claude_mpm-4.15.2.dist-info}/METADATA +1 -1
  19. {claude_mpm-4.15.0.dist-info → claude_mpm-4.15.2.dist-info}/RECORD +23 -23
  20. {claude_mpm-4.15.0.dist-info → claude_mpm-4.15.2.dist-info}/WHEEL +0 -0
  21. {claude_mpm-4.15.0.dist-info → claude_mpm-4.15.2.dist-info}/entry_points.txt +0 -0
  22. {claude_mpm-4.15.0.dist-info → claude_mpm-4.15.2.dist-info}/licenses/LICENSE +0 -0
  23. {claude_mpm-4.15.0.dist-info → claude_mpm-4.15.2.dist-info}/top_level.txt +0 -0
@@ -11,7 +11,8 @@ from typing import Any, Dict
11
11
 
12
12
  import yaml
13
13
 
14
- from ..models import DiagnosticResult, DiagnosticStatus
14
+ from ....core.enums import OperationResult, ValidationSeverity
15
+ from ..models import DiagnosticResult
15
16
  from .base_check import BaseDiagnosticCheck
16
17
 
17
18
 
@@ -52,14 +53,14 @@ class ConfigurationCheck(BaseDiagnosticCheck):
52
53
  sub_results.append(perm_result)
53
54
 
54
55
  # Determine overall status
55
- if any(r.status == DiagnosticStatus.ERROR for r in sub_results):
56
- status = DiagnosticStatus.ERROR
56
+ if any(r.status == ValidationSeverity.ERROR for r in sub_results):
57
+ status = ValidationSeverity.ERROR
57
58
  message = "Configuration has critical issues"
58
- elif any(r.status == DiagnosticStatus.WARNING for r in sub_results):
59
- status = DiagnosticStatus.WARNING
59
+ elif any(r.status == ValidationSeverity.WARNING for r in sub_results):
60
+ status = ValidationSeverity.WARNING
60
61
  message = "Configuration has minor issues"
61
62
  else:
62
- status = DiagnosticStatus.OK
63
+ status = OperationResult.SUCCESS
63
64
  message = "Configuration is valid"
64
65
 
65
66
  return DiagnosticResult(
@@ -73,7 +74,7 @@ class ConfigurationCheck(BaseDiagnosticCheck):
73
74
  except Exception as e:
74
75
  return DiagnosticResult(
75
76
  category=self.category,
76
- status=DiagnosticStatus.ERROR,
77
+ status=ValidationSeverity.ERROR,
77
78
  message=f"Configuration check failed: {e!s}",
78
79
  details={"error": str(e)},
79
80
  )
@@ -85,7 +86,7 @@ class ConfigurationCheck(BaseDiagnosticCheck):
85
86
  if not config_path.exists():
86
87
  return DiagnosticResult(
87
88
  category="User Config",
88
- status=DiagnosticStatus.OK,
89
+ status=OperationResult.SUCCESS,
89
90
  message="No user configuration (using defaults)",
90
91
  details={"path": str(config_path), "exists": False},
91
92
  )
@@ -98,14 +99,14 @@ class ConfigurationCheck(BaseDiagnosticCheck):
98
99
  if issues:
99
100
  return DiagnosticResult(
100
101
  category="User Config",
101
- status=DiagnosticStatus.WARNING,
102
+ status=ValidationSeverity.WARNING,
102
103
  message=f"User config has issues: {', '.join(issues)}",
103
104
  details={"path": str(config_path), "issues": issues},
104
105
  )
105
106
 
106
107
  return DiagnosticResult(
107
108
  category="User Config",
108
- status=DiagnosticStatus.OK,
109
+ status=OperationResult.SUCCESS,
109
110
  message="User configuration valid",
110
111
  details={
111
112
  "path": str(config_path),
@@ -117,7 +118,7 @@ class ConfigurationCheck(BaseDiagnosticCheck):
117
118
  except yaml.YAMLError as e:
118
119
  return DiagnosticResult(
119
120
  category="User Config",
120
- status=DiagnosticStatus.ERROR,
121
+ status=ValidationSeverity.ERROR,
121
122
  message="User config has invalid YAML",
122
123
  details={"path": str(config_path), "error": str(e)},
123
124
  fix_description="Fix YAML syntax errors in the configuration file",
@@ -125,7 +126,7 @@ class ConfigurationCheck(BaseDiagnosticCheck):
125
126
  except Exception as e:
126
127
  return DiagnosticResult(
127
128
  category="User Config",
128
- status=DiagnosticStatus.WARNING,
129
+ status=ValidationSeverity.WARNING,
129
130
  message=f"Could not read user config: {e!s}",
130
131
  details={"path": str(config_path), "error": str(e)},
131
132
  )
@@ -137,7 +138,7 @@ class ConfigurationCheck(BaseDiagnosticCheck):
137
138
  if not config_path.exists():
138
139
  return DiagnosticResult(
139
140
  category="Project Config",
140
- status=DiagnosticStatus.OK,
141
+ status=OperationResult.SUCCESS,
141
142
  message="No project configuration (using defaults)",
142
143
  details={"path": str(config_path), "exists": False},
143
144
  )
@@ -150,7 +151,7 @@ class ConfigurationCheck(BaseDiagnosticCheck):
150
151
  if issues:
151
152
  return DiagnosticResult(
152
153
  category="Project Config",
153
- status=DiagnosticStatus.WARNING,
154
+ status=ValidationSeverity.WARNING,
154
155
  message=f"Project config has issues: {', '.join(issues)}",
155
156
  details={"path": str(config_path), "issues": issues},
156
157
  )
@@ -160,7 +161,7 @@ class ConfigurationCheck(BaseDiagnosticCheck):
160
161
  if deprecated:
161
162
  return DiagnosticResult(
162
163
  category="Project Config",
163
- status=DiagnosticStatus.WARNING,
164
+ status=ValidationSeverity.WARNING,
164
165
  message=f"Using deprecated config keys: {', '.join(deprecated)}",
165
166
  details={"path": str(config_path), "deprecated_keys": deprecated},
166
167
  fix_description="Remove deprecated configuration keys",
@@ -168,7 +169,7 @@ class ConfigurationCheck(BaseDiagnosticCheck):
168
169
 
169
170
  return DiagnosticResult(
170
171
  category="Project Config",
171
- status=DiagnosticStatus.OK,
172
+ status=OperationResult.SUCCESS,
172
173
  message="Project configuration valid",
173
174
  details={
174
175
  "path": str(config_path),
@@ -180,7 +181,7 @@ class ConfigurationCheck(BaseDiagnosticCheck):
180
181
  except yaml.YAMLError as e:
181
182
  return DiagnosticResult(
182
183
  category="Project Config",
183
- status=DiagnosticStatus.ERROR,
184
+ status=ValidationSeverity.ERROR,
184
185
  message="Project config has invalid YAML",
185
186
  details={"path": str(config_path), "error": str(e)},
186
187
  fix_description="Fix YAML syntax errors in the configuration file",
@@ -188,7 +189,7 @@ class ConfigurationCheck(BaseDiagnosticCheck):
188
189
  except Exception as e:
189
190
  return DiagnosticResult(
190
191
  category="Project Config",
191
- status=DiagnosticStatus.WARNING,
192
+ status=ValidationSeverity.WARNING,
192
193
  message=f"Could not read project config: {e!s}",
193
194
  details={"path": str(config_path), "error": str(e)},
194
195
  )
@@ -207,14 +208,14 @@ class ConfigurationCheck(BaseDiagnosticCheck):
207
208
  if not set_vars:
208
209
  return DiagnosticResult(
209
210
  category="Environment Variables",
210
- status=DiagnosticStatus.OK,
211
+ status=OperationResult.SUCCESS,
211
212
  message="No claude-mpm environment variables set",
212
213
  details={"variables": {}},
213
214
  )
214
215
 
215
216
  return DiagnosticResult(
216
217
  category="Environment Variables",
217
- status=DiagnosticStatus.OK,
218
+ status=OperationResult.SUCCESS,
218
219
  message=f"{len(set_vars)} environment variable(s) configured",
219
220
  details={"variables": set_vars},
220
221
  )
@@ -245,7 +246,7 @@ class ConfigurationCheck(BaseDiagnosticCheck):
245
246
  if not paths_checked:
246
247
  return DiagnosticResult(
247
248
  category="Config Permissions",
248
- status=DiagnosticStatus.OK,
249
+ status=OperationResult.SUCCESS,
249
250
  message="No configuration files to check",
250
251
  details={"paths_checked": []},
251
252
  )
@@ -253,7 +254,7 @@ class ConfigurationCheck(BaseDiagnosticCheck):
253
254
  if issues:
254
255
  return DiagnosticResult(
255
256
  category="Config Permissions",
256
- status=DiagnosticStatus.WARNING,
257
+ status=ValidationSeverity.WARNING,
257
258
  message=f"Permission issues: {', '.join(issues)}",
258
259
  details={"issues": issues, "paths_checked": paths_checked},
259
260
  fix_command="chmod 644 ~/.claude/claude-mpm.yaml",
@@ -262,7 +263,7 @@ class ConfigurationCheck(BaseDiagnosticCheck):
262
263
 
263
264
  return DiagnosticResult(
264
265
  category="Config Permissions",
265
- status=DiagnosticStatus.OK,
266
+ status=OperationResult.SUCCESS,
266
267
  message="Configuration file permissions are correct",
267
268
  details={"paths_checked": paths_checked},
268
269
  )
@@ -9,7 +9,8 @@ import os
9
9
  import shutil
10
10
  from pathlib import Path
11
11
 
12
- from ..models import DiagnosticResult, DiagnosticStatus
12
+ from ....core.enums import OperationResult, ValidationSeverity
13
+ from ..models import DiagnosticResult
13
14
  from .base_check import BaseDiagnosticCheck
14
15
 
15
16
 
@@ -46,14 +47,14 @@ class FilesystemCheck(BaseDiagnosticCheck):
46
47
  details["structure"] = structure_result.details
47
48
 
48
49
  # Determine overall status
49
- if any(r.status == DiagnosticStatus.ERROR for r in sub_results):
50
- status = DiagnosticStatus.ERROR
50
+ if any(r.status == ValidationSeverity.ERROR for r in sub_results):
51
+ status = ValidationSeverity.ERROR
51
52
  message = "File system has critical issues"
52
- elif any(r.status == DiagnosticStatus.WARNING for r in sub_results):
53
- status = DiagnosticStatus.WARNING
53
+ elif any(r.status == ValidationSeverity.WARNING for r in sub_results):
54
+ status = ValidationSeverity.WARNING
54
55
  message = "File system has minor issues"
55
56
  else:
56
- status = DiagnosticStatus.OK
57
+ status = OperationResult.SUCCESS
57
58
  message = "File system healthy"
58
59
 
59
60
  return DiagnosticResult(
@@ -67,7 +68,7 @@ class FilesystemCheck(BaseDiagnosticCheck):
67
68
  except Exception as e:
68
69
  return DiagnosticResult(
69
70
  category=self.category,
70
- status=DiagnosticStatus.ERROR,
71
+ status=ValidationSeverity.ERROR,
71
72
  message=f"Filesystem check failed: {e!s}",
72
73
  details={"error": str(e)},
73
74
  )
@@ -106,7 +107,7 @@ class FilesystemCheck(BaseDiagnosticCheck):
106
107
  if issues:
107
108
  return DiagnosticResult(
108
109
  category="Permissions",
109
- status=DiagnosticStatus.ERROR,
110
+ status=ValidationSeverity.ERROR,
110
111
  message=f"{len(issues)} permission issue(s)",
111
112
  details={"issues": issues, "checked": checked},
112
113
  fix_command="chmod -R 755 .claude",
@@ -116,14 +117,14 @@ class FilesystemCheck(BaseDiagnosticCheck):
116
117
  if not checked:
117
118
  return DiagnosticResult(
118
119
  category="Permissions",
119
- status=DiagnosticStatus.WARNING,
120
+ status=ValidationSeverity.WARNING,
120
121
  message="No project .claude directories found",
121
122
  details={"checked": [], "missing": [str(d) for d in critical_dirs]},
122
123
  )
123
124
 
124
125
  return DiagnosticResult(
125
126
  category="Permissions",
126
- status=DiagnosticStatus.OK,
127
+ status=OperationResult.SUCCESS,
127
128
  message="All permissions valid",
128
129
  details={"checked": checked},
129
130
  )
@@ -150,7 +151,7 @@ class FilesystemCheck(BaseDiagnosticCheck):
150
151
  if free_gb < 0.1: # Less than 100MB
151
152
  return DiagnosticResult(
152
153
  category="Disk Space",
153
- status=DiagnosticStatus.ERROR,
154
+ status=ValidationSeverity.ERROR,
154
155
  message=f"Critical: Only {free_gb:.2f}GB free",
155
156
  details=details,
156
157
  fix_description="Free up disk space immediately",
@@ -158,7 +159,7 @@ class FilesystemCheck(BaseDiagnosticCheck):
158
159
  if free_gb < 1: # Less than 1GB
159
160
  return DiagnosticResult(
160
161
  category="Disk Space",
161
- status=DiagnosticStatus.WARNING,
162
+ status=ValidationSeverity.WARNING,
162
163
  message=f"Low disk space: {free_gb:.2f}GB free",
163
164
  details=details,
164
165
  fix_description="Consider freeing up disk space",
@@ -166,7 +167,7 @@ class FilesystemCheck(BaseDiagnosticCheck):
166
167
 
167
168
  return DiagnosticResult(
168
169
  category="Disk Space",
169
- status=DiagnosticStatus.OK,
170
+ status=OperationResult.SUCCESS,
170
171
  message=f"{free_gb:.1f}GB available",
171
172
  details=details,
172
173
  )
@@ -174,7 +175,7 @@ class FilesystemCheck(BaseDiagnosticCheck):
174
175
  except Exception as e:
175
176
  return DiagnosticResult(
176
177
  category="Disk Space",
177
- status=DiagnosticStatus.WARNING,
178
+ status=ValidationSeverity.WARNING,
178
179
  message=f"Could not check disk space: {e!s}",
179
180
  details={"error": str(e)},
180
181
  )
@@ -196,7 +197,7 @@ class FilesystemCheck(BaseDiagnosticCheck):
196
197
  if not base_dir.exists():
197
198
  return DiagnosticResult(
198
199
  category="Directory Structure",
199
- status=DiagnosticStatus.WARNING,
200
+ status=ValidationSeverity.WARNING,
200
201
  message="Project .claude directory missing",
201
202
  details={"base_dir": str(base_dir), "exists": False},
202
203
  fix_command="mkdir -p .claude/{agents,responses,memory,logs}",
@@ -213,7 +214,7 @@ class FilesystemCheck(BaseDiagnosticCheck):
213
214
  if missing:
214
215
  return DiagnosticResult(
215
216
  category="Directory Structure",
216
- status=DiagnosticStatus.WARNING,
217
+ status=ValidationSeverity.WARNING,
217
218
  message=f"Missing {len(missing)} subdirectory(s)",
218
219
  details={
219
220
  "base_dir": str(base_dir),
@@ -226,7 +227,7 @@ class FilesystemCheck(BaseDiagnosticCheck):
226
227
 
227
228
  return DiagnosticResult(
228
229
  category="Directory Structure",
229
- status=DiagnosticStatus.OK,
230
+ status=OperationResult.SUCCESS,
230
231
  message="Directory structure complete",
231
232
  details={"base_dir": str(base_dir), "directories": present},
232
233
  )
@@ -11,8 +11,8 @@ import sys
11
11
  from pathlib import Path
12
12
  from typing import Optional
13
13
 
14
- from ....core.enums import OperationResult
15
- from ..models import DiagnosticResult, DiagnosticStatus
14
+ from ....core.enums import OperationResult, ValidationSeverity
15
+ from ..models import DiagnosticResult
16
16
  from .base_check import BaseDiagnosticCheck
17
17
 
18
18
 
@@ -55,14 +55,14 @@ class InstallationCheck(BaseDiagnosticCheck):
55
55
  details["dependencies"] = deps_result.details.get("status")
56
56
 
57
57
  # Determine overall status
58
- if any(r.status == DiagnosticStatus.ERROR for r in sub_results):
59
- status = DiagnosticStatus.ERROR
58
+ if any(r.status == ValidationSeverity.ERROR for r in sub_results):
59
+ status = ValidationSeverity.ERROR
60
60
  message = "Installation has critical issues"
61
- elif any(r.status == DiagnosticStatus.WARNING for r in sub_results):
62
- status = DiagnosticStatus.WARNING
61
+ elif any(r.status == ValidationSeverity.WARNING for r in sub_results):
62
+ status = ValidationSeverity.WARNING
63
63
  message = "Installation has minor issues"
64
64
  else:
65
- status = DiagnosticStatus.OK
65
+ status = OperationResult.SUCCESS
66
66
  message = "Installation is healthy"
67
67
 
68
68
  return DiagnosticResult(
@@ -76,7 +76,7 @@ class InstallationCheck(BaseDiagnosticCheck):
76
76
  except Exception as e:
77
77
  return DiagnosticResult(
78
78
  category=self.category,
79
- status=DiagnosticStatus.ERROR,
79
+ status=ValidationSeverity.ERROR,
80
80
  message=f"Installation check failed: {e!s}",
81
81
  details={"error": str(e)},
82
82
  )
@@ -92,7 +92,7 @@ class InstallationCheck(BaseDiagnosticCheck):
92
92
  if version_info < min_version:
93
93
  return DiagnosticResult(
94
94
  category="Python Version",
95
- status=DiagnosticStatus.ERROR,
95
+ status=ValidationSeverity.ERROR,
96
96
  message=f"Python {version_info.major}.{version_info.minor} is below minimum required {min_version[0]}.{min_version[1]}",
97
97
  details={"version": version},
98
98
  fix_description="Upgrade Python to 3.9 or higher",
@@ -100,13 +100,13 @@ class InstallationCheck(BaseDiagnosticCheck):
100
100
  if version_info < recommended_version:
101
101
  return DiagnosticResult(
102
102
  category="Python Version",
103
- status=DiagnosticStatus.WARNING,
103
+ status=ValidationSeverity.WARNING,
104
104
  message=f"Python {version_info.major}.{version_info.minor} works but {recommended_version[0]}.{recommended_version[1]}+ is recommended",
105
105
  details={"version": version},
106
106
  )
107
107
  return DiagnosticResult(
108
108
  category="Python Version",
109
- status=DiagnosticStatus.OK,
109
+ status=OperationResult.SUCCESS,
110
110
  message=f"Python {version_info.major}.{version_info.minor}.{version_info.micro}",
111
111
  details={"version": version},
112
112
  )
@@ -123,7 +123,7 @@ class InstallationCheck(BaseDiagnosticCheck):
123
123
 
124
124
  return DiagnosticResult(
125
125
  category="Claude MPM Version",
126
- status=DiagnosticStatus.OK,
126
+ status=OperationResult.SUCCESS,
127
127
  message=f"Version: {version}",
128
128
  details={
129
129
  "version": semantic_version,
@@ -134,7 +134,7 @@ class InstallationCheck(BaseDiagnosticCheck):
134
134
  except Exception as e:
135
135
  return DiagnosticResult(
136
136
  category="Claude MPM Version",
137
- status=DiagnosticStatus.WARNING,
137
+ status=ValidationSeverity.WARNING,
138
138
  message="Could not determine version",
139
139
  details={"error": str(e)},
140
140
  )
@@ -244,7 +244,7 @@ class InstallationCheck(BaseDiagnosticCheck):
244
244
  if not methods_found:
245
245
  return DiagnosticResult(
246
246
  category="Installation Method",
247
- status=DiagnosticStatus.WARNING,
247
+ status=ValidationSeverity.WARNING,
248
248
  message="Installation method unknown",
249
249
  details=details,
250
250
  )
@@ -260,7 +260,7 @@ class InstallationCheck(BaseDiagnosticCheck):
260
260
  container_msg += " with virtual environment"
261
261
  return DiagnosticResult(
262
262
  category="Installation Method",
263
- status=DiagnosticStatus.OK,
263
+ status=OperationResult.SUCCESS,
264
264
  message=container_msg,
265
265
  details=details,
266
266
  )
@@ -269,7 +269,7 @@ class InstallationCheck(BaseDiagnosticCheck):
269
269
  if "pipx" in methods_found:
270
270
  return DiagnosticResult(
271
271
  category="Installation Method",
272
- status=DiagnosticStatus.OK,
272
+ status=OperationResult.SUCCESS,
273
273
  message="Running from pipx environment (recommended)",
274
274
  details=details,
275
275
  )
@@ -279,7 +279,7 @@ class InstallationCheck(BaseDiagnosticCheck):
279
279
  venv_name = Path(sys.prefix).name
280
280
  return DiagnosticResult(
281
281
  category="Installation Method",
282
- status=DiagnosticStatus.OK,
282
+ status=OperationResult.SUCCESS,
283
283
  message=f"Development mode in virtual environment '{venv_name}'",
284
284
  details=details,
285
285
  )
@@ -289,7 +289,7 @@ class InstallationCheck(BaseDiagnosticCheck):
289
289
  venv_name = Path(sys.prefix).name
290
290
  return DiagnosticResult(
291
291
  category="Installation Method",
292
- status=DiagnosticStatus.OK,
292
+ status=OperationResult.SUCCESS,
293
293
  message=f"Virtual environment '{venv_name}'",
294
294
  details=details,
295
295
  )
@@ -298,7 +298,7 @@ class InstallationCheck(BaseDiagnosticCheck):
298
298
  if "development" in methods_found and "homebrew" in methods_found:
299
299
  return DiagnosticResult(
300
300
  category="Installation Method",
301
- status=DiagnosticStatus.OK,
301
+ status=OperationResult.SUCCESS,
302
302
  message="Development mode with Homebrew Python",
303
303
  details=details,
304
304
  )
@@ -306,7 +306,7 @@ class InstallationCheck(BaseDiagnosticCheck):
306
306
  if "development" in methods_found:
307
307
  return DiagnosticResult(
308
308
  category="Installation Method",
309
- status=DiagnosticStatus.OK,
309
+ status=OperationResult.SUCCESS,
310
310
  message="Development mode",
311
311
  details=details,
312
312
  )
@@ -316,9 +316,9 @@ class InstallationCheck(BaseDiagnosticCheck):
316
316
  msg = "Homebrew Python"
317
317
  if details.get("pipx_installed"):
318
318
  msg += " (pipx is installed but not active - consider using 'pipx run claude-mpm')"
319
- status = DiagnosticStatus.WARNING
319
+ status = ValidationSeverity.WARNING
320
320
  else:
321
- status = DiagnosticStatus.OK
321
+ status = OperationResult.SUCCESS
322
322
  return DiagnosticResult(
323
323
  category="Installation Method",
324
324
  status=status,
@@ -330,7 +330,7 @@ class InstallationCheck(BaseDiagnosticCheck):
330
330
  if "pip" in methods_found:
331
331
  return DiagnosticResult(
332
332
  category="Installation Method",
333
- status=DiagnosticStatus.WARNING,
333
+ status=ValidationSeverity.WARNING,
334
334
  message="System pip installation (consider using pipx or venv instead)",
335
335
  details=details,
336
336
  fix_description="Consider reinstalling with pipx for isolated environment",
@@ -340,7 +340,7 @@ class InstallationCheck(BaseDiagnosticCheck):
340
340
  if "system" in methods_found:
341
341
  return DiagnosticResult(
342
342
  category="Installation Method",
343
- status=DiagnosticStatus.WARNING,
343
+ status=ValidationSeverity.WARNING,
344
344
  message="System Python (consider using pipx or venv)",
345
345
  details=details,
346
346
  )
@@ -348,7 +348,7 @@ class InstallationCheck(BaseDiagnosticCheck):
348
348
  # Fallback for any other combination
349
349
  return DiagnosticResult(
350
350
  category="Installation Method",
351
- status=DiagnosticStatus.OK,
351
+ status=OperationResult.SUCCESS,
352
352
  message=f"Installed via {', '.join(methods_found)}",
353
353
  details=details,
354
354
  )
@@ -400,7 +400,7 @@ class InstallationCheck(BaseDiagnosticCheck):
400
400
 
401
401
  return DiagnosticResult(
402
402
  category="Dependencies",
403
- status=DiagnosticStatus.ERROR,
403
+ status=ValidationSeverity.ERROR,
404
404
  message=f"Missing critical dependencies: {', '.join(missing)}",
405
405
  details={
406
406
  "missing": missing,
@@ -415,7 +415,7 @@ class InstallationCheck(BaseDiagnosticCheck):
415
415
  if warnings:
416
416
  return DiagnosticResult(
417
417
  category="Dependencies",
418
- status=DiagnosticStatus.WARNING,
418
+ status=ValidationSeverity.WARNING,
419
419
  message=f"Missing optional dependencies: {', '.join(warnings)}",
420
420
  details={
421
421
  "optional_missing": warnings,
@@ -427,7 +427,7 @@ class InstallationCheck(BaseDiagnosticCheck):
427
427
  )
428
428
  return DiagnosticResult(
429
429
  category="Dependencies",
430
- status=DiagnosticStatus.OK,
430
+ status=OperationResult.SUCCESS,
431
431
  message="All dependencies installed",
432
432
  details={
433
433
  "status": OperationResult.COMPLETED,
@@ -11,7 +11,8 @@ from collections import defaultdict
11
11
  from pathlib import Path
12
12
  from typing import Dict
13
13
 
14
- from ..models import DiagnosticResult, DiagnosticStatus
14
+ from ....core.enums import OperationResult, ValidationSeverity
15
+ from ..models import DiagnosticResult
15
16
  from .base_check import BaseDiagnosticCheck
16
17
 
17
18
 
@@ -77,14 +78,14 @@ class InstructionsCheck(BaseDiagnosticCheck):
77
78
  sub_results.append(separation_result)
78
79
 
79
80
  # Determine overall status
80
- if any(r.status == DiagnosticStatus.ERROR for r in sub_results):
81
- status = DiagnosticStatus.ERROR
81
+ if any(r.status == ValidationSeverity.ERROR for r in sub_results):
82
+ status = ValidationSeverity.ERROR
82
83
  message = "Found critical issues with instruction files"
83
- elif any(r.status == DiagnosticStatus.WARNING for r in sub_results):
84
- status = DiagnosticStatus.WARNING
84
+ elif any(r.status == ValidationSeverity.WARNING for r in sub_results):
85
+ status = ValidationSeverity.WARNING
85
86
  message = "Found minor issues with instruction files"
86
87
  else:
87
- status = DiagnosticStatus.OK
88
+ status = OperationResult.SUCCESS
88
89
  message = "Instruction files are properly configured"
89
90
 
90
91
  return DiagnosticResult(
@@ -98,7 +99,7 @@ class InstructionsCheck(BaseDiagnosticCheck):
98
99
  except Exception as e:
99
100
  return DiagnosticResult(
100
101
  category=self.category,
101
- status=DiagnosticStatus.ERROR,
102
+ status=ValidationSeverity.ERROR,
102
103
  message=f"Instructions check failed: {e!s}",
103
104
  details={"error": str(e)},
104
105
  )
@@ -146,7 +147,7 @@ class InstructionsCheck(BaseDiagnosticCheck):
146
147
  if not claude_files:
147
148
  return DiagnosticResult(
148
149
  category="CLAUDE.md Placement",
149
- status=DiagnosticStatus.OK,
150
+ status=OperationResult.SUCCESS,
150
151
  message="No CLAUDE.md files found",
151
152
  details={},
152
153
  )
@@ -170,7 +171,7 @@ class InstructionsCheck(BaseDiagnosticCheck):
170
171
  if issues:
171
172
  return DiagnosticResult(
172
173
  category="CLAUDE.md Placement",
173
- status=DiagnosticStatus.WARNING,
174
+ status=ValidationSeverity.WARNING,
174
175
  message=f"Found {len(issues)} misplaced CLAUDE.md file(s)",
175
176
  details={"issues": issues},
176
177
  fix_description=(
@@ -181,7 +182,7 @@ class InstructionsCheck(BaseDiagnosticCheck):
181
182
 
182
183
  return DiagnosticResult(
183
184
  category="CLAUDE.md Placement",
184
- status=DiagnosticStatus.OK,
185
+ status=OperationResult.SUCCESS,
185
186
  message="CLAUDE.md properly placed in project root",
186
187
  details={"count": len(claude_files)},
187
188
  )
@@ -191,7 +192,7 @@ class InstructionsCheck(BaseDiagnosticCheck):
191
192
  if len(files) < 2:
192
193
  return DiagnosticResult(
193
194
  category="Duplicate Content",
194
- status=DiagnosticStatus.OK,
195
+ status=OperationResult.SUCCESS,
195
196
  message="No duplicate content detected",
196
197
  details={},
197
198
  )
@@ -226,7 +227,7 @@ class InstructionsCheck(BaseDiagnosticCheck):
226
227
  if duplicates:
227
228
  return DiagnosticResult(
228
229
  category="Duplicate Content",
229
- status=DiagnosticStatus.WARNING,
230
+ status=ValidationSeverity.WARNING,
230
231
  message=f"Found {len(duplicates)} duplicate content block(s)",
231
232
  details={"duplicates": duplicates[:5]}, # Limit to first 5
232
233
  fix_description=(
@@ -238,7 +239,7 @@ class InstructionsCheck(BaseDiagnosticCheck):
238
239
 
239
240
  return DiagnosticResult(
240
241
  category="Duplicate Content",
241
- status=DiagnosticStatus.OK,
242
+ status=OperationResult.SUCCESS,
242
243
  message="No significant duplicate content found",
243
244
  details={},
244
245
  )
@@ -280,7 +281,7 @@ class InstructionsCheck(BaseDiagnosticCheck):
280
281
  if conflicts:
281
282
  return DiagnosticResult(
282
283
  category="Conflicting Directives",
283
- status=DiagnosticStatus.ERROR,
284
+ status=ValidationSeverity.ERROR,
284
285
  message=f"Found {len(conflicts)} potential conflict(s)",
285
286
  details={"conflicts": conflicts},
286
287
  fix_description=(
@@ -292,7 +293,7 @@ class InstructionsCheck(BaseDiagnosticCheck):
292
293
 
293
294
  return DiagnosticResult(
294
295
  category="Conflicting Directives",
295
- status=DiagnosticStatus.OK,
296
+ status=OperationResult.SUCCESS,
296
297
  message="No conflicting directives detected",
297
298
  details={},
298
299
  )
@@ -330,7 +331,7 @@ class InstructionsCheck(BaseDiagnosticCheck):
330
331
  if duplicates:
331
332
  return DiagnosticResult(
332
333
  category="Agent Definitions",
333
- status=DiagnosticStatus.WARNING,
334
+ status=ValidationSeverity.WARNING,
334
335
  message=f"Found {len(duplicates)} duplicate agent definition(s)",
335
336
  details={"duplicates": duplicates},
336
337
  fix_description=(
@@ -341,7 +342,7 @@ class InstructionsCheck(BaseDiagnosticCheck):
341
342
 
342
343
  return DiagnosticResult(
343
344
  category="Agent Definitions",
344
- status=DiagnosticStatus.OK,
345
+ status=OperationResult.SUCCESS,
345
346
  message="Agent definitions are unique",
346
347
  details={"total_agents": len(agent_definitions)},
347
348
  )
@@ -396,7 +397,7 @@ class InstructionsCheck(BaseDiagnosticCheck):
396
397
  if issues:
397
398
  return DiagnosticResult(
398
399
  category="Separation of Concerns",
399
- status=DiagnosticStatus.WARNING,
400
+ status=ValidationSeverity.WARNING,
400
401
  message=f"Found {len(issues)} separation of concerns issue(s)",
401
402
  details={"issues": issues},
402
403
  fix_description=(
@@ -409,7 +410,7 @@ class InstructionsCheck(BaseDiagnosticCheck):
409
410
 
410
411
  return DiagnosticResult(
411
412
  category="Separation of Concerns",
412
- status=DiagnosticStatus.OK,
413
+ status=OperationResult.SUCCESS,
413
414
  message="Instruction files properly separated",
414
415
  details={},
415
416
  )