claude-mpm 5.4.22__py3-none-any.whl → 5.6.34__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/agents/BASE_AGENT.md +164 -0
- claude_mpm/agents/BASE_ENGINEER.md +658 -0
- claude_mpm/agents/CLAUDE_MPM_OUTPUT_STYLE.md +66 -241
- claude_mpm/agents/CLAUDE_MPM_RESEARCH_OUTPUT_STYLE.md +413 -0
- claude_mpm/agents/CLAUDE_MPM_TEACHER_OUTPUT_STYLE.md +109 -1925
- claude_mpm/agents/MEMORY.md +1 -1
- claude_mpm/agents/PM_INSTRUCTIONS.md +374 -1257
- claude_mpm/agents/WORKFLOW.md +6 -253
- claude_mpm/agents/agent_loader.py +1 -1
- claude_mpm/agents/base_agent.json +31 -0
- claude_mpm/agents/frontmatter_validator.py +2 -2
- claude_mpm/agents/templates/circuit-breakers.md +26 -17
- claude_mpm/cli/__init__.py +5 -1
- claude_mpm/cli/commands/agent_state_manager.py +10 -10
- claude_mpm/cli/commands/agents.py +11 -13
- claude_mpm/cli/commands/agents_reconcile.py +197 -0
- claude_mpm/cli/commands/auto_configure.py +4 -4
- claude_mpm/cli/commands/autotodos.py +566 -0
- claude_mpm/cli/commands/commander.py +216 -0
- claude_mpm/cli/commands/configure.py +621 -22
- claude_mpm/cli/commands/configure_agent_display.py +12 -0
- claude_mpm/cli/commands/hook_errors.py +60 -60
- claude_mpm/cli/commands/monitor.py +2 -2
- claude_mpm/cli/commands/mpm_init/core.py +72 -0
- claude_mpm/cli/commands/postmortem.py +1 -1
- claude_mpm/cli/commands/profile.py +276 -0
- claude_mpm/cli/commands/run.py +35 -3
- claude_mpm/cli/commands/skill_source.py +51 -2
- claude_mpm/cli/commands/skills.py +182 -32
- claude_mpm/cli/executor.py +130 -16
- claude_mpm/cli/interactive/__init__.py +10 -0
- claude_mpm/cli/interactive/agent_wizard.py +32 -52
- claude_mpm/cli/interactive/questionary_styles.py +65 -0
- claude_mpm/cli/interactive/skill_selector.py +481 -0
- claude_mpm/cli/parsers/base_parser.py +83 -1
- claude_mpm/cli/parsers/commander_parser.py +116 -0
- claude_mpm/cli/parsers/profile_parser.py +147 -0
- claude_mpm/cli/parsers/run_parser.py +10 -0
- claude_mpm/cli/parsers/skill_source_parser.py +4 -0
- claude_mpm/cli/parsers/skills_parser.py +2 -3
- claude_mpm/cli/startup.py +690 -386
- claude_mpm/cli/startup_display.py +74 -6
- claude_mpm/cli/startup_logging.py +2 -2
- claude_mpm/cli/utils.py +7 -3
- claude_mpm/commander/__init__.py +78 -0
- claude_mpm/commander/adapters/__init__.py +60 -0
- claude_mpm/commander/adapters/auggie.py +260 -0
- claude_mpm/commander/adapters/base.py +288 -0
- claude_mpm/commander/adapters/claude_code.py +392 -0
- claude_mpm/commander/adapters/codex.py +237 -0
- claude_mpm/commander/adapters/communication.py +366 -0
- claude_mpm/commander/adapters/example_usage.py +310 -0
- claude_mpm/commander/adapters/mpm.py +389 -0
- claude_mpm/commander/adapters/registry.py +204 -0
- claude_mpm/commander/api/__init__.py +16 -0
- claude_mpm/commander/api/app.py +121 -0
- claude_mpm/commander/api/errors.py +133 -0
- claude_mpm/commander/api/routes/__init__.py +8 -0
- claude_mpm/commander/api/routes/events.py +184 -0
- claude_mpm/commander/api/routes/inbox.py +171 -0
- claude_mpm/commander/api/routes/messages.py +148 -0
- claude_mpm/commander/api/routes/projects.py +271 -0
- claude_mpm/commander/api/routes/sessions.py +226 -0
- claude_mpm/commander/api/routes/work.py +296 -0
- claude_mpm/commander/api/schemas.py +186 -0
- claude_mpm/commander/chat/__init__.py +7 -0
- claude_mpm/commander/chat/cli.py +146 -0
- claude_mpm/commander/chat/commands.py +96 -0
- claude_mpm/commander/chat/repl.py +310 -0
- claude_mpm/commander/config.py +51 -0
- claude_mpm/commander/config_loader.py +115 -0
- claude_mpm/commander/core/__init__.py +10 -0
- claude_mpm/commander/core/block_manager.py +325 -0
- claude_mpm/commander/core/response_manager.py +323 -0
- claude_mpm/commander/daemon.py +603 -0
- claude_mpm/commander/env_loader.py +59 -0
- claude_mpm/commander/events/__init__.py +26 -0
- claude_mpm/commander/events/manager.py +332 -0
- claude_mpm/commander/frameworks/__init__.py +12 -0
- claude_mpm/commander/frameworks/base.py +146 -0
- claude_mpm/commander/frameworks/claude_code.py +58 -0
- claude_mpm/commander/frameworks/mpm.py +62 -0
- claude_mpm/commander/inbox/__init__.py +16 -0
- claude_mpm/commander/inbox/dedup.py +128 -0
- claude_mpm/commander/inbox/inbox.py +224 -0
- claude_mpm/commander/inbox/models.py +70 -0
- claude_mpm/commander/instance_manager.py +450 -0
- claude_mpm/commander/llm/__init__.py +6 -0
- claude_mpm/commander/llm/openrouter_client.py +167 -0
- claude_mpm/commander/llm/summarizer.py +70 -0
- claude_mpm/commander/memory/__init__.py +45 -0
- claude_mpm/commander/memory/compression.py +347 -0
- claude_mpm/commander/memory/embeddings.py +230 -0
- claude_mpm/commander/memory/entities.py +310 -0
- claude_mpm/commander/memory/example_usage.py +290 -0
- claude_mpm/commander/memory/integration.py +325 -0
- claude_mpm/commander/memory/search.py +381 -0
- claude_mpm/commander/memory/store.py +657 -0
- claude_mpm/commander/models/__init__.py +18 -0
- claude_mpm/commander/models/events.py +121 -0
- claude_mpm/commander/models/project.py +162 -0
- claude_mpm/commander/models/work.py +214 -0
- claude_mpm/commander/parsing/__init__.py +20 -0
- claude_mpm/commander/parsing/extractor.py +132 -0
- claude_mpm/commander/parsing/output_parser.py +270 -0
- claude_mpm/commander/parsing/patterns.py +100 -0
- claude_mpm/commander/persistence/__init__.py +11 -0
- claude_mpm/commander/persistence/event_store.py +274 -0
- claude_mpm/commander/persistence/state_store.py +309 -0
- claude_mpm/commander/persistence/work_store.py +164 -0
- claude_mpm/commander/polling/__init__.py +13 -0
- claude_mpm/commander/polling/event_detector.py +104 -0
- claude_mpm/commander/polling/output_buffer.py +49 -0
- claude_mpm/commander/polling/output_poller.py +153 -0
- claude_mpm/commander/project_session.py +268 -0
- claude_mpm/commander/proxy/__init__.py +12 -0
- claude_mpm/commander/proxy/formatter.py +89 -0
- claude_mpm/commander/proxy/output_handler.py +191 -0
- claude_mpm/commander/proxy/relay.py +155 -0
- claude_mpm/commander/registry.py +410 -0
- claude_mpm/commander/runtime/__init__.py +10 -0
- claude_mpm/commander/runtime/executor.py +191 -0
- claude_mpm/commander/runtime/monitor.py +346 -0
- claude_mpm/commander/session/__init__.py +6 -0
- claude_mpm/commander/session/context.py +81 -0
- claude_mpm/commander/session/manager.py +59 -0
- claude_mpm/commander/tmux_orchestrator.py +361 -0
- claude_mpm/commander/web/__init__.py +1 -0
- claude_mpm/commander/work/__init__.py +30 -0
- claude_mpm/commander/work/executor.py +207 -0
- claude_mpm/commander/work/queue.py +405 -0
- claude_mpm/commander/workflow/__init__.py +27 -0
- claude_mpm/commander/workflow/event_handler.py +241 -0
- claude_mpm/commander/workflow/notifier.py +146 -0
- claude_mpm/commands/mpm-config.md +20 -249
- claude_mpm/commands/mpm-doctor.md +16 -21
- claude_mpm/commands/mpm-help.md +12 -205
- claude_mpm/commands/mpm-init.md +88 -506
- claude_mpm/commands/mpm-monitor.md +22 -401
- claude_mpm/commands/mpm-organize.md +70 -442
- claude_mpm/commands/mpm-postmortem.md +13 -107
- claude_mpm/commands/mpm-session-resume.md +20 -363
- claude_mpm/commands/mpm-status.md +13 -69
- claude_mpm/commands/mpm-ticket-view.md +60 -495
- claude_mpm/commands/mpm-version.md +13 -107
- claude_mpm/commands/mpm.md +8 -0
- claude_mpm/config/agent_presets.py +8 -7
- claude_mpm/config/skill_sources.py +16 -0
- claude_mpm/constants.py +1 -0
- claude_mpm/core/claude_runner.py +154 -2
- claude_mpm/core/config.py +37 -26
- claude_mpm/core/config_constants.py +74 -9
- claude_mpm/core/constants.py +56 -12
- claude_mpm/core/framework/loaders/agent_loader.py +1 -1
- claude_mpm/core/framework/loaders/instruction_loader.py +52 -11
- claude_mpm/core/hook_manager.py +51 -3
- claude_mpm/core/interactive_session.py +12 -11
- claude_mpm/core/logger.py +26 -9
- claude_mpm/core/logging_utils.py +39 -13
- claude_mpm/core/network_config.py +148 -0
- claude_mpm/core/oneshot_session.py +7 -6
- claude_mpm/core/optimized_startup.py +61 -0
- claude_mpm/core/output_style_manager.py +66 -18
- claude_mpm/core/shared/config_loader.py +3 -1
- claude_mpm/core/socketio_pool.py +47 -15
- claude_mpm/core/unified_agent_registry.py +1 -1
- claude_mpm/core/unified_config.py +54 -8
- claude_mpm/core/unified_paths.py +95 -90
- claude_mpm/dashboard/static/svelte-build/_app/env.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/assets/0.C33zOoyM.css +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/assets/2.CW1J-YuA.css +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/1WZnGYqX.js +24 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/67pF3qNn.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/6RxdMKe4.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/8cZrfX0h.js +60 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/9a6T2nm-.js +7 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/B443AUzu.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/B8AwtY2H.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BF15LAsF.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BQaXIfA_.js +331 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BRcwIQNr.js +4 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BSNlmTZj.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BV6nKitt.js +43 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BViJ8lZt.js +128 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BcQ-Q0FE.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Bpyvgze_.js +30 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BzTRqg-z.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/C0Fr8dve.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/C3rbW_a-.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/C8WYN38h.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/C9I8FlXH.js +61 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CIQcWgO2.js +36 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CIctN7YN.js +7 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CKrS_JZW.js +145 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CR6P9C4A.js +89 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CRRR9MD_.js +2 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CRcR2DqT.js +334 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CSXtMOf0.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CT-sbxSk.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CWm6DJsp.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CmKTTxBW.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CpqQ1Kzn.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Cu_Erd72.js +261 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/D2nGpDRe.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/D9iCMida.js +267 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/D9ykgMoY.js +10 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DL2Ldur1.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DPfltzjH.js +165 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DR8nis88.js +2 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DUliQN2b.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DVp1hx9R.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DXlhR01x.js +122 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/D_lyTybS.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DngoTTgh.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DqkmHtDC.js +220 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DsDh8EYs.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DypDmXgd.js +139 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Gi6I4Gst.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/IPYC-LnN.js +162 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/JTLiF7dt.js +24 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/JpevfAFt.js +68 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/NqQ1dWOy.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/R8CEIRAd.js +2 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Zxy7qc-l.js +64 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/q9Hm6zAU.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/qtd3IeO4.js +15 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/ulBFON_C.js +65 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/wQVh1CoA.js +10 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/entry/app.Dr7t0z2J.js +2 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/entry/start.BGhZHUS3.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/0.RgBboRvH.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/1.DG-KkbDf.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/2.D_jnf-x6.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/version.json +1 -0
- claude_mpm/dashboard/static/svelte-build/favicon.svg +7 -0
- claude_mpm/dashboard/static/svelte-build/index.html +36 -0
- claude_mpm/dashboard-svelte/node_modules/katex/src/fonts/generate_fonts.py +58 -0
- claude_mpm/dashboard-svelte/node_modules/katex/src/metrics/extract_tfms.py +114 -0
- claude_mpm/dashboard-svelte/node_modules/katex/src/metrics/extract_ttfs.py +122 -0
- claude_mpm/dashboard-svelte/node_modules/katex/src/metrics/format_json.py +28 -0
- claude_mpm/dashboard-svelte/node_modules/katex/src/metrics/parse_tfm.py +211 -0
- claude_mpm/experimental/cli_enhancements.py +2 -1
- 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__/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 +485 -0
- claude_mpm/hooks/claude_hooks/event_handlers.py +527 -136
- claude_mpm/hooks/claude_hooks/hook_handler.py +313 -99
- claude_mpm/hooks/claude_hooks/hook_wrapper.sh +6 -11
- claude_mpm/hooks/claude_hooks/installer.py +206 -36
- claude_mpm/hooks/claude_hooks/memory_integration.py +52 -32
- claude_mpm/hooks/claude_hooks/response_tracking.py +43 -60
- claude_mpm/hooks/claude_hooks/services/__init__.py +21 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/__init__.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__/container.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__/protocols.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/connection_manager.py +67 -32
- claude_mpm/hooks/claude_hooks/services/connection_manager_http.py +38 -105
- claude_mpm/hooks/claude_hooks/services/container.py +310 -0
- claude_mpm/hooks/claude_hooks/services/protocols.py +328 -0
- claude_mpm/hooks/claude_hooks/services/state_manager.py +25 -38
- claude_mpm/hooks/claude_hooks/services/subagent_processor.py +75 -77
- claude_mpm/hooks/kuzu_memory_hook.py +5 -5
- claude_mpm/hooks/session_resume_hook.py +89 -1
- claude_mpm/hooks/templates/pre_tool_use_simple.py +6 -6
- claude_mpm/hooks/templates/pre_tool_use_template.py +16 -8
- claude_mpm/init.py +276 -0
- claude_mpm/models/git_repository.py +3 -3
- claude_mpm/scripts/claude-hook-handler.sh +46 -19
- claude_mpm/services/agents/agent_builder.py +3 -3
- claude_mpm/services/agents/agent_recommendation_service.py +8 -8
- claude_mpm/services/agents/agent_selection_service.py +2 -2
- claude_mpm/services/agents/cache_git_manager.py +7 -7
- claude_mpm/services/agents/deployment/agent_deployment.py +29 -7
- claude_mpm/services/agents/deployment/agent_discovery_service.py +4 -2
- claude_mpm/services/agents/deployment/agent_format_converter.py +25 -13
- claude_mpm/services/agents/deployment/agent_template_builder.py +39 -19
- claude_mpm/services/agents/deployment/agents_directory_resolver.py +2 -2
- claude_mpm/services/agents/deployment/async_agent_deployment.py +31 -27
- claude_mpm/services/agents/deployment/deployment_reconciler.py +577 -0
- claude_mpm/services/agents/deployment/local_template_deployment.py +3 -1
- claude_mpm/services/agents/deployment/multi_source_deployment_service.py +169 -26
- claude_mpm/services/agents/deployment/remote_agent_discovery_service.py +101 -75
- claude_mpm/services/agents/deployment/startup_reconciliation.py +138 -0
- claude_mpm/services/agents/git_source_manager.py +23 -4
- claude_mpm/services/agents/loading/framework_agent_loader.py +75 -2
- claude_mpm/services/agents/recommender.py +5 -3
- claude_mpm/services/agents/single_tier_deployment_service.py +6 -6
- claude_mpm/services/agents/sources/git_source_sync_service.py +121 -10
- claude_mpm/services/agents/startup_sync.py +27 -4
- claude_mpm/services/cli/__init__.py +3 -0
- claude_mpm/services/cli/incremental_pause_manager.py +561 -0
- claude_mpm/services/cli/session_resume_helper.py +10 -2
- claude_mpm/services/command_deployment_service.py +44 -26
- claude_mpm/services/delegation_detector.py +175 -0
- claude_mpm/services/diagnostics/checks/agent_check.py +2 -2
- claude_mpm/services/diagnostics/checks/agent_sources_check.py +31 -1
- claude_mpm/services/diagnostics/checks/configuration_check.py +24 -0
- claude_mpm/services/diagnostics/checks/installation_check.py +22 -0
- claude_mpm/services/diagnostics/checks/mcp_services_check.py +23 -0
- claude_mpm/services/diagnostics/doctor_reporter.py +31 -1
- claude_mpm/services/diagnostics/models.py +14 -1
- claude_mpm/services/event_log.py +325 -0
- claude_mpm/services/git/git_operations_service.py +8 -8
- claude_mpm/services/hook_installer_service.py +77 -8
- 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/services/monitor/daemon_manager.py +15 -4
- claude_mpm/services/monitor/management/lifecycle.py +15 -3
- claude_mpm/services/monitor/server.py +571 -11
- claude_mpm/services/pm_skills_deployer.py +884 -0
- claude_mpm/services/profile_manager.py +337 -0
- claude_mpm/services/skills/git_skill_source_manager.py +281 -20
- claude_mpm/services/skills/selective_skill_deployer.py +211 -46
- claude_mpm/services/skills/skill_discovery_service.py +74 -4
- claude_mpm/services/skills_deployer.py +192 -70
- claude_mpm/services/socketio/dashboard_server.py +1 -0
- claude_mpm/services/socketio/event_normalizer.py +37 -6
- claude_mpm/services/socketio/handlers/hook.py +14 -7
- claude_mpm/services/socketio/server/core.py +262 -123
- claude_mpm/services/socketio/server/main.py +12 -4
- claude_mpm/skills/__init__.py +2 -1
- claude_mpm/skills/bundled/collaboration/brainstorming/SKILL.md +79 -0
- claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/SKILL.md +178 -0
- claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/agent-prompts.md +577 -0
- claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/coordination-patterns.md +467 -0
- claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/examples.md +537 -0
- claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/troubleshooting.md +730 -0
- claude_mpm/skills/bundled/collaboration/git-worktrees.md +317 -0
- claude_mpm/skills/bundled/collaboration/requesting-code-review/SKILL.md +112 -0
- claude_mpm/skills/bundled/collaboration/requesting-code-review/references/code-reviewer-template.md +146 -0
- claude_mpm/skills/bundled/collaboration/requesting-code-review/references/review-examples.md +412 -0
- claude_mpm/skills/bundled/collaboration/stacked-prs.md +251 -0
- claude_mpm/skills/bundled/collaboration/writing-plans/SKILL.md +81 -0
- claude_mpm/skills/bundled/collaboration/writing-plans/references/best-practices.md +362 -0
- claude_mpm/skills/bundled/collaboration/writing-plans/references/plan-structure-templates.md +312 -0
- claude_mpm/skills/bundled/debugging/root-cause-tracing/SKILL.md +152 -0
- claude_mpm/skills/bundled/debugging/root-cause-tracing/references/advanced-techniques.md +668 -0
- claude_mpm/skills/bundled/debugging/root-cause-tracing/references/examples.md +587 -0
- claude_mpm/skills/bundled/debugging/root-cause-tracing/references/integration.md +438 -0
- claude_mpm/skills/bundled/debugging/root-cause-tracing/references/tracing-techniques.md +391 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/CREATION-LOG.md +119 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/SKILL.md +148 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/references/anti-patterns.md +483 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/references/examples.md +452 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/references/troubleshooting.md +449 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/references/workflow.md +411 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/test-academic.md +14 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-1.md +58 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-2.md +68 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-3.md +69 -0
- claude_mpm/skills/bundled/debugging/verification-before-completion/SKILL.md +131 -0
- claude_mpm/skills/bundled/debugging/verification-before-completion/references/gate-function.md +325 -0
- claude_mpm/skills/bundled/debugging/verification-before-completion/references/integration-and-workflows.md +490 -0
- claude_mpm/skills/bundled/debugging/verification-before-completion/references/red-flags-and-failures.md +425 -0
- claude_mpm/skills/bundled/debugging/verification-before-completion/references/verification-patterns.md +499 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/INTEGRATION.md +611 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/README.md +596 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/SKILL.md +260 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/examples/nextjs-env-structure.md +315 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/references/frameworks.md +436 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/references/security.md +433 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/references/synchronization.md +452 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/references/troubleshooting.md +404 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/references/validation.md +420 -0
- claude_mpm/skills/bundled/main/artifacts-builder/SKILL.md +86 -0
- claude_mpm/skills/bundled/main/internal-comms/SKILL.md +43 -0
- claude_mpm/skills/bundled/main/internal-comms/examples/3p-updates.md +47 -0
- claude_mpm/skills/bundled/main/internal-comms/examples/company-newsletter.md +65 -0
- claude_mpm/skills/bundled/main/internal-comms/examples/faq-answers.md +30 -0
- claude_mpm/skills/bundled/main/internal-comms/examples/general-comms.md +16 -0
- claude_mpm/skills/bundled/main/mcp-builder/SKILL.md +160 -0
- claude_mpm/skills/bundled/main/mcp-builder/reference/design_principles.md +412 -0
- claude_mpm/skills/bundled/main/mcp-builder/reference/evaluation.md +602 -0
- claude_mpm/skills/bundled/main/mcp-builder/reference/mcp_best_practices.md +915 -0
- claude_mpm/skills/bundled/main/mcp-builder/reference/node_mcp_server.md +916 -0
- claude_mpm/skills/bundled/main/mcp-builder/reference/python_mcp_server.md +752 -0
- claude_mpm/skills/bundled/main/mcp-builder/reference/workflow.md +1237 -0
- claude_mpm/skills/bundled/main/skill-creator/SKILL.md +189 -0
- claude_mpm/skills/bundled/main/skill-creator/references/best-practices.md +500 -0
- claude_mpm/skills/bundled/main/skill-creator/references/creation-workflow.md +464 -0
- claude_mpm/skills/bundled/main/skill-creator/references/examples.md +619 -0
- claude_mpm/skills/bundled/main/skill-creator/references/progressive-disclosure.md +437 -0
- claude_mpm/skills/bundled/main/skill-creator/references/skill-structure.md +231 -0
- claude_mpm/skills/bundled/php/espocrm-development/SKILL.md +170 -0
- claude_mpm/skills/bundled/php/espocrm-development/references/architecture.md +602 -0
- claude_mpm/skills/bundled/php/espocrm-development/references/common-tasks.md +821 -0
- claude_mpm/skills/bundled/php/espocrm-development/references/development-workflow.md +742 -0
- claude_mpm/skills/bundled/php/espocrm-development/references/frontend-customization.md +726 -0
- claude_mpm/skills/bundled/php/espocrm-development/references/hooks-and-services.md +764 -0
- claude_mpm/skills/bundled/php/espocrm-development/references/testing-debugging.md +831 -0
- claude_mpm/skills/bundled/pm/mpm/SKILL.md +38 -0
- claude_mpm/skills/bundled/pm/mpm-agent-update-workflow/SKILL.md +75 -0
- claude_mpm/skills/bundled/pm/mpm-bug-reporting/SKILL.md +248 -0
- claude_mpm/skills/bundled/pm/mpm-circuit-breaker-enforcement/SKILL.md +476 -0
- claude_mpm/skills/bundled/pm/mpm-config/SKILL.md +29 -0
- claude_mpm/skills/bundled/pm/mpm-delegation-patterns/SKILL.md +167 -0
- claude_mpm/skills/bundled/pm/mpm-doctor/SKILL.md +53 -0
- claude_mpm/skills/bundled/pm/mpm-git-file-tracking/SKILL.md +113 -0
- claude_mpm/skills/bundled/pm/mpm-help/SKILL.md +35 -0
- claude_mpm/skills/bundled/pm/mpm-init/SKILL.md +125 -0
- claude_mpm/skills/bundled/pm/mpm-monitor/SKILL.md +32 -0
- claude_mpm/skills/bundled/pm/mpm-organize/SKILL.md +121 -0
- claude_mpm/skills/bundled/pm/mpm-postmortem/SKILL.md +22 -0
- claude_mpm/skills/bundled/pm/mpm-pr-workflow/SKILL.md +124 -0
- claude_mpm/skills/bundled/pm/mpm-session-management/SKILL.md +312 -0
- claude_mpm/skills/bundled/pm/mpm-session-pause/SKILL.md +170 -0
- claude_mpm/skills/bundled/pm/mpm-session-resume/SKILL.md +31 -0
- claude_mpm/skills/bundled/pm/mpm-status/SKILL.md +37 -0
- claude_mpm/skills/bundled/pm/mpm-teaching-mode/SKILL.md +657 -0
- claude_mpm/skills/bundled/pm/mpm-ticket-view/SKILL.md +110 -0
- claude_mpm/skills/bundled/pm/mpm-ticketing-integration/SKILL.md +154 -0
- claude_mpm/skills/bundled/pm/mpm-tool-usage-guide/SKILL.md +386 -0
- claude_mpm/skills/bundled/pm/mpm-verification-protocols/SKILL.md +198 -0
- claude_mpm/skills/bundled/pm/mpm-version/SKILL.md +21 -0
- claude_mpm/skills/bundled/react/flexlayout-react.md +742 -0
- claude_mpm/skills/bundled/rust/desktop-applications/SKILL.md +226 -0
- claude_mpm/skills/bundled/rust/desktop-applications/references/architecture-patterns.md +901 -0
- claude_mpm/skills/bundled/rust/desktop-applications/references/native-gui-frameworks.md +901 -0
- claude_mpm/skills/bundled/rust/desktop-applications/references/platform-integration.md +775 -0
- claude_mpm/skills/bundled/rust/desktop-applications/references/state-management.md +937 -0
- claude_mpm/skills/bundled/rust/desktop-applications/references/tauri-framework.md +770 -0
- claude_mpm/skills/bundled/rust/desktop-applications/references/testing-deployment.md +961 -0
- claude_mpm/skills/bundled/security-scanning.md +112 -0
- claude_mpm/skills/bundled/tauri/tauri-async-patterns.md +495 -0
- claude_mpm/skills/bundled/tauri/tauri-build-deploy.md +599 -0
- claude_mpm/skills/bundled/tauri/tauri-command-patterns.md +535 -0
- claude_mpm/skills/bundled/tauri/tauri-error-handling.md +613 -0
- claude_mpm/skills/bundled/tauri/tauri-event-system.md +648 -0
- claude_mpm/skills/bundled/tauri/tauri-file-system.md +673 -0
- claude_mpm/skills/bundled/tauri/tauri-frontend-integration.md +767 -0
- claude_mpm/skills/bundled/tauri/tauri-performance.md +669 -0
- claude_mpm/skills/bundled/tauri/tauri-state-management.md +573 -0
- claude_mpm/skills/bundled/tauri/tauri-testing.md +384 -0
- claude_mpm/skills/bundled/tauri/tauri-window-management.md +628 -0
- claude_mpm/skills/bundled/testing/condition-based-waiting/SKILL.md +119 -0
- claude_mpm/skills/bundled/testing/condition-based-waiting/references/patterns-and-implementation.md +253 -0
- claude_mpm/skills/bundled/testing/test-driven-development/SKILL.md +145 -0
- claude_mpm/skills/bundled/testing/test-driven-development/references/anti-patterns.md +543 -0
- claude_mpm/skills/bundled/testing/test-driven-development/references/examples.md +741 -0
- claude_mpm/skills/bundled/testing/test-driven-development/references/integration.md +470 -0
- claude_mpm/skills/bundled/testing/test-driven-development/references/philosophy.md +458 -0
- claude_mpm/skills/bundled/testing/test-driven-development/references/workflow.md +639 -0
- claude_mpm/skills/bundled/testing/test-quality-inspector/SKILL.md +458 -0
- claude_mpm/skills/bundled/testing/test-quality-inspector/examples/example-inspection-report.md +411 -0
- claude_mpm/skills/bundled/testing/test-quality-inspector/references/assertion-quality.md +317 -0
- claude_mpm/skills/bundled/testing/test-quality-inspector/references/inspection-checklist.md +270 -0
- claude_mpm/skills/bundled/testing/test-quality-inspector/references/red-flags.md +436 -0
- claude_mpm/skills/bundled/testing/testing-anti-patterns/SKILL.md +140 -0
- claude_mpm/skills/bundled/testing/testing-anti-patterns/references/completeness-anti-patterns.md +572 -0
- claude_mpm/skills/bundled/testing/testing-anti-patterns/references/core-anti-patterns.md +411 -0
- claude_mpm/skills/bundled/testing/testing-anti-patterns/references/detection-guide.md +569 -0
- claude_mpm/skills/bundled/testing/testing-anti-patterns/references/tdd-connection.md +695 -0
- claude_mpm/skills/bundled/testing/webapp-testing/SKILL.md +184 -0
- claude_mpm/skills/bundled/testing/webapp-testing/decision-tree.md +459 -0
- claude_mpm/skills/bundled/testing/webapp-testing/playwright-patterns.md +479 -0
- claude_mpm/skills/bundled/testing/webapp-testing/reconnaissance-pattern.md +687 -0
- claude_mpm/skills/bundled/testing/webapp-testing/server-management.md +758 -0
- claude_mpm/skills/bundled/testing/webapp-testing/troubleshooting.md +868 -0
- claude_mpm/skills/registry.py +295 -90
- claude_mpm/skills/skill_manager.py +98 -3
- claude_mpm/templates/.pre-commit-config.yaml +112 -0
- claude_mpm/utils/agent_dependency_loader.py +115 -4
- claude_mpm/utils/agent_filters.py +1 -1
- claude_mpm/utils/migration.py +4 -4
- claude_mpm/utils/robust_installer.py +86 -21
- claude_mpm-5.6.34.dist-info/METADATA +393 -0
- {claude_mpm-5.4.22.dist-info → claude_mpm-5.6.34.dist-info}/RECORD +486 -145
- claude_mpm-5.4.22.dist-info/METADATA +0 -996
- {claude_mpm-5.4.22.dist-info → claude_mpm-5.6.34.dist-info}/WHEEL +0 -0
- {claude_mpm-5.4.22.dist-info → claude_mpm-5.6.34.dist-info}/entry_points.txt +0 -0
- {claude_mpm-5.4.22.dist-info → claude_mpm-5.6.34.dist-info}/licenses/LICENSE +0 -0
- {claude_mpm-5.4.22.dist-info → claude_mpm-5.6.34.dist-info}/licenses/LICENSE-FAQ.md +0 -0
- {claude_mpm-5.4.22.dist-info → claude_mpm-5.6.34.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,328 @@
|
|
|
1
|
+
"""Protocol definitions for hook handler services.
|
|
2
|
+
|
|
3
|
+
This module defines Protocol classes for all hook handler services,
|
|
4
|
+
enabling type-safe dependency injection and easy testing through
|
|
5
|
+
protocol-based duck typing.
|
|
6
|
+
|
|
7
|
+
WHY Protocol-based DI:
|
|
8
|
+
- Enables loose coupling between components
|
|
9
|
+
- Allows easy mocking in tests without monkey-patching
|
|
10
|
+
- Provides clear interface contracts
|
|
11
|
+
- Supports static type checking with mypy
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
from typing import Any, Callable, Optional, Protocol, runtime_checkable
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
@runtime_checkable
|
|
18
|
+
class IStateManager(Protocol):
|
|
19
|
+
"""Protocol for state management service.
|
|
20
|
+
|
|
21
|
+
Manages:
|
|
22
|
+
- Agent delegation tracking
|
|
23
|
+
- Git branch caching
|
|
24
|
+
- Session state management
|
|
25
|
+
- Cleanup of old entries
|
|
26
|
+
"""
|
|
27
|
+
|
|
28
|
+
active_delegations: dict
|
|
29
|
+
delegation_history: Any # deque
|
|
30
|
+
delegation_requests: dict
|
|
31
|
+
pending_prompts: dict
|
|
32
|
+
events_processed: int
|
|
33
|
+
|
|
34
|
+
def track_delegation(
|
|
35
|
+
self, session_id: str, agent_type: str, request_data: Optional[dict] = None
|
|
36
|
+
) -> None:
|
|
37
|
+
"""Track a new agent delegation with optional request data."""
|
|
38
|
+
...
|
|
39
|
+
|
|
40
|
+
def get_delegation_agent_type(self, session_id: str) -> str:
|
|
41
|
+
"""Get the agent type for a session's active delegation."""
|
|
42
|
+
...
|
|
43
|
+
|
|
44
|
+
def cleanup_old_entries(self) -> None:
|
|
45
|
+
"""Clean up old entries to prevent memory growth."""
|
|
46
|
+
...
|
|
47
|
+
|
|
48
|
+
def get_git_branch(self, working_dir: Optional[str] = None) -> str:
|
|
49
|
+
"""Get git branch for the given directory with caching."""
|
|
50
|
+
...
|
|
51
|
+
|
|
52
|
+
def find_matching_request(self, session_id: str) -> Optional[dict]:
|
|
53
|
+
"""Find matching request data for a session, with fuzzy matching fallback."""
|
|
54
|
+
...
|
|
55
|
+
|
|
56
|
+
def remove_request(self, session_id: str) -> None:
|
|
57
|
+
"""Remove request data for a session."""
|
|
58
|
+
...
|
|
59
|
+
|
|
60
|
+
def increment_events_processed(self) -> bool:
|
|
61
|
+
"""Increment events processed counter and return True if cleanup is needed."""
|
|
62
|
+
...
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
@runtime_checkable
|
|
66
|
+
class IConnectionManager(Protocol):
|
|
67
|
+
"""Protocol for connection management service.
|
|
68
|
+
|
|
69
|
+
Handles:
|
|
70
|
+
- HTTP-based event emission to dashboard
|
|
71
|
+
- Event queuing and batching
|
|
72
|
+
- Connection state management
|
|
73
|
+
"""
|
|
74
|
+
|
|
75
|
+
def emit_event(self, namespace: str, event: str, data: dict) -> None:
|
|
76
|
+
"""Emit an event through HTTP to the dashboard."""
|
|
77
|
+
...
|
|
78
|
+
|
|
79
|
+
def cleanup(self) -> None:
|
|
80
|
+
"""Clean up any resources."""
|
|
81
|
+
...
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
@runtime_checkable
|
|
85
|
+
class IDuplicateDetector(Protocol):
|
|
86
|
+
"""Protocol for duplicate event detection service.
|
|
87
|
+
|
|
88
|
+
Detects:
|
|
89
|
+
- Duplicate events within a time window
|
|
90
|
+
- Rapid-fire events that should be deduplicated
|
|
91
|
+
"""
|
|
92
|
+
|
|
93
|
+
def is_duplicate(self, event: dict) -> bool:
|
|
94
|
+
"""Check if an event is a duplicate of a recent event."""
|
|
95
|
+
...
|
|
96
|
+
|
|
97
|
+
def generate_event_key(self, event: dict) -> str:
|
|
98
|
+
"""Generate a unique key for an event for deduplication."""
|
|
99
|
+
...
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
@runtime_checkable
|
|
103
|
+
class IResponseTrackingManager(Protocol):
|
|
104
|
+
"""Protocol for response tracking management.
|
|
105
|
+
|
|
106
|
+
Manages:
|
|
107
|
+
- Response tracking enablement
|
|
108
|
+
- Comprehensive response logging
|
|
109
|
+
- Agent response correlation
|
|
110
|
+
"""
|
|
111
|
+
|
|
112
|
+
response_tracking_enabled: bool
|
|
113
|
+
response_tracker: Optional[Any]
|
|
114
|
+
track_all_interactions: bool
|
|
115
|
+
auto_pause_handler: Optional[Any]
|
|
116
|
+
|
|
117
|
+
def track_agent_response(
|
|
118
|
+
self,
|
|
119
|
+
session_id: str,
|
|
120
|
+
agent_type: str,
|
|
121
|
+
event: dict,
|
|
122
|
+
delegation_requests: dict,
|
|
123
|
+
) -> None:
|
|
124
|
+
"""Track an agent response for logging."""
|
|
125
|
+
...
|
|
126
|
+
|
|
127
|
+
def track_stop_response(
|
|
128
|
+
self,
|
|
129
|
+
event: dict,
|
|
130
|
+
session_id: str,
|
|
131
|
+
metadata: dict,
|
|
132
|
+
pending_prompts: dict,
|
|
133
|
+
) -> None:
|
|
134
|
+
"""Track a stop event response."""
|
|
135
|
+
...
|
|
136
|
+
|
|
137
|
+
def track_assistant_response(
|
|
138
|
+
self,
|
|
139
|
+
event: dict,
|
|
140
|
+
pending_prompts: dict,
|
|
141
|
+
) -> None:
|
|
142
|
+
"""Track an assistant response."""
|
|
143
|
+
...
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
@runtime_checkable
|
|
147
|
+
class IMemoryHookManager(Protocol):
|
|
148
|
+
"""Protocol for memory hook management.
|
|
149
|
+
|
|
150
|
+
Manages:
|
|
151
|
+
- Pre/post delegation memory hooks
|
|
152
|
+
- Memory field processing
|
|
153
|
+
"""
|
|
154
|
+
|
|
155
|
+
def trigger_pre_delegation_hook(
|
|
156
|
+
self, agent_type: str, tool_input: dict, session_id: str
|
|
157
|
+
) -> None:
|
|
158
|
+
"""Trigger memory hooks before delegation."""
|
|
159
|
+
...
|
|
160
|
+
|
|
161
|
+
def trigger_post_delegation_hook(
|
|
162
|
+
self, agent_type: str, event: dict, session_id: str
|
|
163
|
+
) -> None:
|
|
164
|
+
"""Trigger memory hooks after delegation."""
|
|
165
|
+
...
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
@runtime_checkable
|
|
169
|
+
class ISubagentProcessor(Protocol):
|
|
170
|
+
"""Protocol for subagent response processing.
|
|
171
|
+
|
|
172
|
+
Handles:
|
|
173
|
+
- SubagentStop event processing
|
|
174
|
+
- Structured response extraction
|
|
175
|
+
- Response tracking and correlation
|
|
176
|
+
"""
|
|
177
|
+
|
|
178
|
+
def process_subagent_stop(self, event: dict) -> None:
|
|
179
|
+
"""Handle subagent stop events."""
|
|
180
|
+
...
|
|
181
|
+
|
|
182
|
+
|
|
183
|
+
@runtime_checkable
|
|
184
|
+
class IAutoPauseHandler(Protocol):
|
|
185
|
+
"""Protocol for auto-pause functionality.
|
|
186
|
+
|
|
187
|
+
Manages:
|
|
188
|
+
- Session pause tracking
|
|
189
|
+
- Usage threshold monitoring
|
|
190
|
+
- Session state capture
|
|
191
|
+
"""
|
|
192
|
+
|
|
193
|
+
def is_pause_active(self) -> bool:
|
|
194
|
+
"""Check if auto-pause is currently active."""
|
|
195
|
+
...
|
|
196
|
+
|
|
197
|
+
def on_user_message(self, message: str) -> None:
|
|
198
|
+
"""Record a user message for auto-pause tracking."""
|
|
199
|
+
...
|
|
200
|
+
|
|
201
|
+
def on_tool_call(self, tool_name: str, tool_input: dict) -> None:
|
|
202
|
+
"""Record a tool call for auto-pause tracking."""
|
|
203
|
+
...
|
|
204
|
+
|
|
205
|
+
def on_assistant_response(self, response: str) -> None:
|
|
206
|
+
"""Record an assistant response for auto-pause tracking."""
|
|
207
|
+
...
|
|
208
|
+
|
|
209
|
+
def on_usage_update(self, usage: dict) -> Optional[str]:
|
|
210
|
+
"""Update usage metrics and return threshold crossed if any."""
|
|
211
|
+
...
|
|
212
|
+
|
|
213
|
+
def emit_threshold_warning(self, threshold: str) -> str:
|
|
214
|
+
"""Emit a warning for a crossed threshold."""
|
|
215
|
+
...
|
|
216
|
+
|
|
217
|
+
def on_session_end(self) -> Optional[Any]:
|
|
218
|
+
"""Finalize the current auto-pause session."""
|
|
219
|
+
...
|
|
220
|
+
|
|
221
|
+
|
|
222
|
+
@runtime_checkable
|
|
223
|
+
class IEventHandlers(Protocol):
|
|
224
|
+
"""Protocol for event handler collection.
|
|
225
|
+
|
|
226
|
+
Provides handlers for:
|
|
227
|
+
- UserPromptSubmit
|
|
228
|
+
- PreToolUse
|
|
229
|
+
- PostToolUse
|
|
230
|
+
- Notification
|
|
231
|
+
- Stop
|
|
232
|
+
- SubagentStop
|
|
233
|
+
- SubagentStart
|
|
234
|
+
- SessionStart
|
|
235
|
+
- AssistantResponse
|
|
236
|
+
"""
|
|
237
|
+
|
|
238
|
+
def handle_user_prompt_fast(self, event: dict) -> None:
|
|
239
|
+
"""Handle user prompt with comprehensive data capture."""
|
|
240
|
+
...
|
|
241
|
+
|
|
242
|
+
def handle_pre_tool_fast(self, event: dict) -> Optional[dict]:
|
|
243
|
+
"""Handle pre-tool use with comprehensive data capture."""
|
|
244
|
+
...
|
|
245
|
+
|
|
246
|
+
def handle_post_tool_fast(self, event: dict) -> None:
|
|
247
|
+
"""Handle post-tool use with comprehensive data capture."""
|
|
248
|
+
...
|
|
249
|
+
|
|
250
|
+
def handle_notification_fast(self, event: dict) -> None:
|
|
251
|
+
"""Handle notification events from Claude."""
|
|
252
|
+
...
|
|
253
|
+
|
|
254
|
+
def handle_stop_fast(self, event: dict) -> None:
|
|
255
|
+
"""Handle stop events when Claude processing stops."""
|
|
256
|
+
...
|
|
257
|
+
|
|
258
|
+
def handle_subagent_stop_fast(self, event: dict) -> None:
|
|
259
|
+
"""Handle subagent stop events."""
|
|
260
|
+
...
|
|
261
|
+
|
|
262
|
+
def handle_subagent_start_fast(self, event: dict) -> None:
|
|
263
|
+
"""Handle SubagentStart events."""
|
|
264
|
+
...
|
|
265
|
+
|
|
266
|
+
def handle_session_start_fast(self, event: dict) -> None:
|
|
267
|
+
"""Handle session start events."""
|
|
268
|
+
...
|
|
269
|
+
|
|
270
|
+
def handle_assistant_response(self, event: dict) -> None:
|
|
271
|
+
"""Handle assistant response events."""
|
|
272
|
+
...
|
|
273
|
+
|
|
274
|
+
|
|
275
|
+
# Type alias for log function
|
|
276
|
+
LogFunction = Callable[[str], None]
|
|
277
|
+
|
|
278
|
+
|
|
279
|
+
@runtime_checkable
|
|
280
|
+
class ILogManager(Protocol):
|
|
281
|
+
"""Protocol for log manager service (optional dependency).
|
|
282
|
+
|
|
283
|
+
Used for logging agent prompts and responses.
|
|
284
|
+
"""
|
|
285
|
+
|
|
286
|
+
async def log_prompt(
|
|
287
|
+
self, source: str, content: str, metadata: dict
|
|
288
|
+
) -> Optional[Any]:
|
|
289
|
+
"""Log a prompt to the log manager."""
|
|
290
|
+
...
|
|
291
|
+
|
|
292
|
+
|
|
293
|
+
@runtime_checkable
|
|
294
|
+
class IDelegationDetector(Protocol):
|
|
295
|
+
"""Protocol for delegation pattern detector (optional dependency).
|
|
296
|
+
|
|
297
|
+
Used for detecting delegation anti-patterns in responses.
|
|
298
|
+
"""
|
|
299
|
+
|
|
300
|
+
def detect_user_delegation(self, text: str) -> list[dict]:
|
|
301
|
+
"""Detect delegation patterns in text."""
|
|
302
|
+
...
|
|
303
|
+
|
|
304
|
+
|
|
305
|
+
@runtime_checkable
|
|
306
|
+
class IEventLog(Protocol):
|
|
307
|
+
"""Protocol for event log service (optional dependency).
|
|
308
|
+
|
|
309
|
+
Used for logging PM violations and other events.
|
|
310
|
+
"""
|
|
311
|
+
|
|
312
|
+
def append_event(
|
|
313
|
+
self,
|
|
314
|
+
event_type: str,
|
|
315
|
+
payload: dict,
|
|
316
|
+
status: str = "pending",
|
|
317
|
+
) -> None:
|
|
318
|
+
"""Append an event to the log."""
|
|
319
|
+
...
|
|
320
|
+
|
|
321
|
+
|
|
322
|
+
@runtime_checkable
|
|
323
|
+
class IConfig(Protocol):
|
|
324
|
+
"""Protocol for configuration service (optional dependency)."""
|
|
325
|
+
|
|
326
|
+
def get(self, key: str, default: Any = None) -> Any:
|
|
327
|
+
"""Get a configuration value."""
|
|
328
|
+
...
|
|
@@ -8,13 +8,22 @@ This service manages:
|
|
|
8
8
|
"""
|
|
9
9
|
|
|
10
10
|
import os
|
|
11
|
-
import subprocess
|
|
11
|
+
import subprocess # nosec B404
|
|
12
12
|
import time
|
|
13
13
|
from collections import deque
|
|
14
14
|
from datetime import datetime, timezone
|
|
15
15
|
from pathlib import Path
|
|
16
16
|
from typing import Optional
|
|
17
17
|
|
|
18
|
+
# Try to import _log from hook_handler, fall back to no-op
|
|
19
|
+
try:
|
|
20
|
+
from claude_mpm.hooks.claude_hooks.hook_handler import _log
|
|
21
|
+
except ImportError:
|
|
22
|
+
|
|
23
|
+
def _log(msg: str) -> None:
|
|
24
|
+
pass # Silent fallback
|
|
25
|
+
|
|
26
|
+
|
|
18
27
|
# Import constants for configuration
|
|
19
28
|
try:
|
|
20
29
|
from claude_mpm.core.constants import TimeoutConfig
|
|
@@ -24,8 +33,8 @@ except ImportError:
|
|
|
24
33
|
QUICK_TIMEOUT = 2.0
|
|
25
34
|
|
|
26
35
|
|
|
27
|
-
# Debug mode
|
|
28
|
-
DEBUG = os.environ.get("CLAUDE_MPM_HOOK_DEBUG", "
|
|
36
|
+
# Debug mode - disabled by default to prevent logging overhead in production
|
|
37
|
+
DEBUG = os.environ.get("CLAUDE_MPM_HOOK_DEBUG", "false").lower() == "true"
|
|
29
38
|
|
|
30
39
|
|
|
31
40
|
class StateManagerService:
|
|
@@ -63,17 +72,11 @@ class StateManagerService:
|
|
|
63
72
|
):
|
|
64
73
|
"""Track a new agent delegation with optional request data for response correlation."""
|
|
65
74
|
if DEBUG:
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
)
|
|
72
|
-
print(f" - agent_type: {agent_type}", file=sys.stderr)
|
|
73
|
-
print(f" - request_data provided: {bool(request_data)}", file=sys.stderr)
|
|
74
|
-
print(
|
|
75
|
-
f" - delegation_requests size before: {len(self.delegation_requests)}",
|
|
76
|
-
file=sys.stderr,
|
|
75
|
+
_log(f" - session_id: {session_id[:16] if session_id else 'None'}...")
|
|
76
|
+
_log(f" - agent_type: {agent_type}")
|
|
77
|
+
_log(f" - request_data provided: {bool(request_data)}")
|
|
78
|
+
_log(
|
|
79
|
+
f" - delegation_requests size before: {len(self.delegation_requests)}"
|
|
77
80
|
)
|
|
78
81
|
|
|
79
82
|
if session_id and agent_type and agent_type != "unknown":
|
|
@@ -89,15 +92,9 @@ class StateManagerService:
|
|
|
89
92
|
"timestamp": datetime.now(timezone.utc).isoformat(),
|
|
90
93
|
}
|
|
91
94
|
if DEBUG:
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
f" - ✅ Stored in delegation_requests[{session_id[:16]}...]",
|
|
96
|
-
file=sys.stderr,
|
|
97
|
-
)
|
|
98
|
-
print(
|
|
99
|
-
f" - delegation_requests size after: {len(self.delegation_requests)}",
|
|
100
|
-
file=sys.stderr,
|
|
95
|
+
_log(f" - ✅ Stored in delegation_requests[{session_id[:16]}...]")
|
|
96
|
+
_log(
|
|
97
|
+
f" - delegation_requests size after: {len(self.delegation_requests)}"
|
|
101
98
|
)
|
|
102
99
|
|
|
103
100
|
# Clean up old delegations (older than 5 minutes)
|
|
@@ -197,7 +194,7 @@ class StateManagerService:
|
|
|
197
194
|
os.chdir(working_dir)
|
|
198
195
|
|
|
199
196
|
# Run git command to get current branch
|
|
200
|
-
result = subprocess.run(
|
|
197
|
+
result = subprocess.run( # nosec B603 B607
|
|
201
198
|
["git", "branch", "--show-current"],
|
|
202
199
|
capture_output=True,
|
|
203
200
|
text=True,
|
|
@@ -233,17 +230,12 @@ class StateManagerService:
|
|
|
233
230
|
def find_matching_request(self, session_id: str) -> Optional[dict]:
|
|
234
231
|
"""Find matching request data for a session, with fuzzy matching fallback."""
|
|
235
232
|
# First try exact match
|
|
236
|
-
request_info = self.delegation_requests.get(session_id)
|
|
233
|
+
request_info = self.delegation_requests.get(session_id) # nosec B113
|
|
237
234
|
|
|
238
235
|
# If exact match fails, try partial matching
|
|
239
236
|
if not request_info and session_id:
|
|
240
237
|
if DEBUG:
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
print(
|
|
244
|
-
f" - Trying fuzzy match for session {session_id[:16]}...",
|
|
245
|
-
file=sys.stderr,
|
|
246
|
-
)
|
|
238
|
+
_log(f" - Trying fuzzy match for session {session_id[:16]}...")
|
|
247
239
|
# Try to find a session that matches the first 8-16 characters
|
|
248
240
|
for stored_sid in list(self.delegation_requests.keys()):
|
|
249
241
|
if (
|
|
@@ -256,13 +248,8 @@ class StateManagerService:
|
|
|
256
248
|
)
|
|
257
249
|
):
|
|
258
250
|
if DEBUG:
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
print(
|
|
262
|
-
f" - ✅ Fuzzy match found: {stored_sid[:16]}...",
|
|
263
|
-
file=sys.stderr,
|
|
264
|
-
)
|
|
265
|
-
request_info = self.delegation_requests.get(stored_sid)
|
|
251
|
+
_log(f" - ✅ Fuzzy match found: {stored_sid[:16]}...")
|
|
252
|
+
request_info = self.delegation_requests.get(stored_sid) # nosec B113
|
|
266
253
|
# Update the key to use the current session_id for consistency
|
|
267
254
|
if request_info:
|
|
268
255
|
self.delegation_requests[session_id] = request_info
|