claude-mpm 5.4.104__py3-none-any.whl → 5.4.105__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 CHANGED
@@ -1 +1 @@
1
- 5.4.104
1
+ 5.4.105
claude_mpm/core/logger.py CHANGED
@@ -214,16 +214,19 @@ def setup_logging(
214
214
 
215
215
  # Console handler
216
216
  if console_output:
217
+ # MUST use stderr to avoid corrupting hook JSON output
218
+ # WHY stderr: Hook handlers output JSON to stdout. Logging to stdout
219
+ # corrupts this JSON and causes "hook error" messages from Claude Code.
217
220
  if use_streaming:
218
221
  # Use streaming handler for single-line INFO messages
219
- console_handler = StreamingHandler(sys.stdout)
222
+ console_handler = StreamingHandler(sys.stderr)
220
223
  console_handler.setFormatter(simple_formatter)
221
224
  elif use_rich and not json_format:
222
225
  # Rich support has been removed, use standard handler
223
- console_handler = logging.StreamHandler(sys.stdout)
226
+ console_handler = logging.StreamHandler(sys.stderr)
224
227
  console_handler.setFormatter(simple_formatter)
225
228
  else:
226
- console_handler = logging.StreamHandler(sys.stdout)
229
+ console_handler = logging.StreamHandler(sys.stderr)
227
230
  console_handler.setFormatter(formatter if json_format else simple_formatter)
228
231
 
229
232
  console_handler.setLevel(logging.INFO)
@@ -263,7 +266,7 @@ def setup_logging(
263
266
  if deleted_count > 0:
264
267
  # Log to the new file handler that we're about to add
265
268
  pass # Deletion count will be logged when logger is ready
266
- except Exception:
269
+ except Exception: # nosec B110 - intentional: logging should not break app
267
270
  pass # Ignore cleanup errors
268
271
 
269
272
  # Also create a symlink to latest log (with thread safety)
@@ -305,7 +308,7 @@ def setup_logging(
305
308
  # Fallback: try to create a regular file with reference to actual log
306
309
  try:
307
310
  latest_link.write_text(f"Latest log: {log_file.name}\n")
308
- except Exception:
311
+ except Exception: # nosec B110 - intentional: logging should not break app
309
312
  pass # Silently fail - logging should not break the application
310
313
  except Exception as e:
311
314
  # Catch any other unexpected errors to ensure logging doesn't break
@@ -381,7 +384,7 @@ def cleanup_old_mpm_logs(
381
384
  try:
382
385
  log_file.unlink()
383
386
  deleted_count += 1
384
- except Exception:
387
+ except Exception: # nosec B110 - intentional: log cleanup is best-effort
385
388
  pass # Ignore deletion errors
386
389
 
387
390
  return deleted_count
@@ -108,8 +108,10 @@ class LoggerFactory:
108
108
  # Remove existing handlers
109
109
  root_logger.handlers = []
110
110
 
111
- # Console handler
112
- console_handler = logging.StreamHandler(sys.stdout)
111
+ # Console handler - MUST use stderr to avoid corrupting hook JSON output
112
+ # WHY stderr: Hook handlers output JSON to stdout. Logging to stdout
113
+ # corrupts this JSON and causes "hook error" messages from Claude Code.
114
+ console_handler = logging.StreamHandler(sys.stderr)
113
115
  console_handler.setLevel(LoggingConfig.LEVELS.get(cls._log_level, logging.INFO))
114
116
  console_formatter = logging.Formatter(
115
117
  log_format or LoggingConfig.DEFAULT_FORMAT,
@@ -58,8 +58,9 @@ class CLIContext:
58
58
  else "%(message)s"
59
59
  )
60
60
 
61
+ # MUST use stderr to avoid corrupting hook JSON output
61
62
  logging.basicConfig(
62
- level=level, format=format_str, handlers=[logging.StreamHandler(sys.stdout)]
63
+ level=level, format=format_str, handlers=[logging.StreamHandler(sys.stderr)]
63
64
  )
64
65
  self.debug = debug
65
66
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: claude-mpm
3
- Version: 5.4.104
3
+ Version: 5.4.105
4
4
  Summary: Claude Multi-Agent Project Manager - Orchestrate Claude with agent delegation and ticket tracking
5
5
  Author-email: Bob Matsuoka <bob@matsuoka.com>
6
6
  Maintainer: Claude MPM Team
@@ -1,5 +1,5 @@
1
1
  claude_mpm/BUILD_NUMBER,sha256=9JfxhnDtr-8l3kCP2U5TVXSErptHoga8m7XA8zqgGOc,4
2
- claude_mpm/VERSION,sha256=u2IW-FZis-WhBsFTnPey3Q0V0o8e-Zwv4EJx84eW-PU,8
2
+ claude_mpm/VERSION,sha256=_4W_UIilKx0gM1l25COCd6xS4MTWzvspsU_uyKDUTyA,8
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
@@ -200,9 +200,9 @@ claude_mpm/core/interactive_session.py,sha256=CW3_HNSMQ5pRi0mIh9_zBMncywARFV2AXL
200
200
  claude_mpm/core/interfaces.py,sha256=sSipQa2tjf9EbRaKhxeCE31E-alS_iddvUfI0X_I0LQ,26909
201
201
  claude_mpm/core/lazy.py,sha256=pyCfEqGHyLz18yXTu_uG52-II-9nCaBcpzwwQGBrQro,14808
202
202
  claude_mpm/core/log_manager.py,sha256=yf82AKC-DYLtl7h0ka5IEoVC8aC0_II-zCjHOwD3RxQ,24661
203
- claude_mpm/core/logger.py,sha256=PXfz2lh_ayygPgMrxpCm5hTm3dWtUB6x6L5zBG65iZ0,21507
203
+ claude_mpm/core/logger.py,sha256=9BJWz-7gOkRhYs6IDrXFwYkEKwe0c7WdpLiFaQcn0Ik,21899
204
204
  claude_mpm/core/logging_config.py,sha256=h6beZ1QQTOSM8RM_dq-LC-pnfA3iRxIcTtuGv9zusyI,14724
205
- claude_mpm/core/logging_utils.py,sha256=KKFkUW9rSxa28xk6L9EUK0DttBR1MWQk_AS-4fzWfTo,16007
205
+ claude_mpm/core/logging_utils.py,sha256=A7fVgLVs4k4qpWGHSoSoJcvW-g_cUEVnniIi_41keHE,16219
206
206
  claude_mpm/core/minimal_framework_loader.py,sha256=vmDEjL3MjnV7W4WIR-ymaL8QgsGsgxJJ0KdiQqAtudM,3640
207
207
  claude_mpm/core/mixins.py,sha256=vmZ7Nu2ZOnKjbhN07Ixk4noIej9nsJiknrp-Sclfu0A,5344
208
208
  claude_mpm/core/oneshot_session.py,sha256=nA86Zk7W3Rh_yIhPuegFL7Xgc9S63vQ_MqfLk52doV0,21994
@@ -317,7 +317,7 @@ claude_mpm/dashboard-svelte/node_modules/katex/src/metrics/extract_ttfs.py,sha25
317
317
  claude_mpm/dashboard-svelte/node_modules/katex/src/metrics/format_json.py,sha256=rm9mYQQ6rs5KgzFo4-ePqivUkx8aMH5bG8SkhyYPhNg,786
318
318
  claude_mpm/dashboard-svelte/node_modules/katex/src/metrics/parse_tfm.py,sha256=dkhu6asdXnYt_3Tq5h-VSVVKBexflJqaRp7H3Sug_YI,6524
319
319
  claude_mpm/experimental/__init__.py,sha256=R_aclOvWpvSTHWAx9QXyg9OIPVK2dXT5tQJhxLQN11Y,369
320
- claude_mpm/experimental/cli_enhancements.py,sha256=ty_ich98J5C9QuJeH8hxVWvjVq0d1sbUboO0ZEWgXpg,11524
320
+ claude_mpm/experimental/cli_enhancements.py,sha256=Gxo5QrUuamggjChO-hzvzGTVsGLJLvzY0DqzFS8fU1M,11587
321
321
  claude_mpm/generators/__init__.py,sha256=rG8vwF_BjPmeMKvyMXpUA8uJ-7mtW2HTNfalZzgRlNk,153
322
322
  claude_mpm/generators/agent_profile_generator.py,sha256=yTEFdZPUt4lAfXlQuIIxzRwOrWMaJhEJ3Z6Ofm48Rlc,5740
323
323
  claude_mpm/hooks/__init__.py,sha256=T8VQOEtVW434xeN5J0W8qxqmBj5uE7moLqZ4cm8Uub0,1182
@@ -998,10 +998,10 @@ claude_mpm/utils/subprocess_utils.py,sha256=D0izRT8anjiUb_JG72zlJR_JAw1cDkb7kalN
998
998
  claude_mpm/validation/__init__.py,sha256=YZhwE3mhit-lslvRLuwfX82xJ_k4haZeKmh4IWaVwtk,156
999
999
  claude_mpm/validation/agent_validator.py,sha256=GprtAvu80VyMXcKGsK_VhYiXWA6BjKHv7O6HKx0AB9w,20917
1000
1000
  claude_mpm/validation/frontmatter_validator.py,sha256=YpJlYNNYcV8u6hIOi3_jaRsDnzhbcQpjCBE6eyBKaFY,7076
1001
- claude_mpm-5.4.104.dist-info/licenses/LICENSE,sha256=ca3y_Rk4aPrbF6f62z8Ht5MJM9OAvbGlHvEDcj9vUQ4,3867
1002
- claude_mpm-5.4.104.dist-info/licenses/LICENSE-FAQ.md,sha256=TxfEkXVCK98RzDOer09puc7JVCP_q_bN4dHtZKHCMcM,5104
1003
- claude_mpm-5.4.104.dist-info/METADATA,sha256=NT50RmXXow29OCeGE89mcx44_NNgc7UA-M5JkcgLDE0,14350
1004
- claude_mpm-5.4.104.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
1005
- claude_mpm-5.4.104.dist-info/entry_points.txt,sha256=n-Uk4vwHPpuvu-g_I7-GHORzTnN_m6iyOsoLveKKD0E,228
1006
- claude_mpm-5.4.104.dist-info/top_level.txt,sha256=1nUg3FEaBySgm8t-s54jK5zoPnu3_eY6EP6IOlekyHA,11
1007
- claude_mpm-5.4.104.dist-info/RECORD,,
1001
+ claude_mpm-5.4.105.dist-info/licenses/LICENSE,sha256=ca3y_Rk4aPrbF6f62z8Ht5MJM9OAvbGlHvEDcj9vUQ4,3867
1002
+ claude_mpm-5.4.105.dist-info/licenses/LICENSE-FAQ.md,sha256=TxfEkXVCK98RzDOer09puc7JVCP_q_bN4dHtZKHCMcM,5104
1003
+ claude_mpm-5.4.105.dist-info/METADATA,sha256=fq_ncNJUhUEXEoKJSVRH6p4gCBu6XVBJoOFNF4jRc1M,14350
1004
+ claude_mpm-5.4.105.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
1005
+ claude_mpm-5.4.105.dist-info/entry_points.txt,sha256=n-Uk4vwHPpuvu-g_I7-GHORzTnN_m6iyOsoLveKKD0E,228
1006
+ claude_mpm-5.4.105.dist-info/top_level.txt,sha256=1nUg3FEaBySgm8t-s54jK5zoPnu3_eY6EP6IOlekyHA,11
1007
+ claude_mpm-5.4.105.dist-info/RECORD,,