claude-mpm 5.4.55__py3-none-any.whl → 5.6.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- claude_mpm/VERSION +1 -1
- claude_mpm/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/PM_INSTRUCTIONS.md +111 -686
- claude_mpm/agents/WORKFLOW.md +2 -0
- claude_mpm/agents/templates/circuit-breakers.md +26 -17
- claude_mpm/cli/__init__.py +5 -1
- claude_mpm/cli/commands/agents.py +2 -4
- claude_mpm/cli/commands/agents_reconcile.py +197 -0
- claude_mpm/cli/commands/autotodos.py +566 -0
- claude_mpm/cli/commands/commander.py +46 -0
- claude_mpm/cli/commands/configure.py +620 -21
- 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 +2 -2
- claude_mpm/cli/commands/run.py +35 -3
- claude_mpm/cli/commands/skills.py +166 -14
- claude_mpm/cli/executor.py +120 -16
- claude_mpm/cli/interactive/__init__.py +10 -0
- claude_mpm/cli/interactive/agent_wizard.py +30 -50
- 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 +76 -1
- claude_mpm/cli/parsers/commander_parser.py +83 -0
- claude_mpm/cli/parsers/run_parser.py +10 -0
- claude_mpm/cli/startup.py +276 -403
- claude_mpm/cli/startup_display.py +72 -5
- claude_mpm/cli/startup_logging.py +2 -2
- claude_mpm/cli/utils.py +7 -3
- claude_mpm/commander/__init__.py +72 -0
- claude_mpm/commander/adapters/__init__.py +31 -0
- claude_mpm/commander/adapters/base.py +191 -0
- claude_mpm/commander/adapters/claude_code.py +361 -0
- claude_mpm/commander/adapters/communication.py +366 -0
- claude_mpm/commander/api/__init__.py +16 -0
- claude_mpm/commander/api/app.py +105 -0
- claude_mpm/commander/api/errors.py +112 -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 +215 -0
- claude_mpm/commander/api/routes/work.py +260 -0
- claude_mpm/commander/api/schemas.py +182 -0
- claude_mpm/commander/chat/__init__.py +7 -0
- claude_mpm/commander/chat/cli.py +107 -0
- claude_mpm/commander/chat/commands.py +96 -0
- claude_mpm/commander/chat/repl.py +310 -0
- claude_mpm/commander/config.py +49 -0
- claude_mpm/commander/config_loader.py +115 -0
- claude_mpm/commander/daemon.py +398 -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 +143 -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 +337 -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/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 +404 -0
- claude_mpm/commander/runtime/__init__.py +10 -0
- claude_mpm/commander/runtime/executor.py +191 -0
- claude_mpm/commander/runtime/monitor.py +316 -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 +189 -0
- claude_mpm/commander/work/queue.py +405 -0
- claude_mpm/commander/workflow/__init__.py +27 -0
- claude_mpm/commander/workflow/event_handler.py +219 -0
- claude_mpm/commander/workflow/notifier.py +146 -0
- claude_mpm/commands/mpm-config.md +8 -0
- claude_mpm/commands/mpm-doctor.md +8 -0
- claude_mpm/commands/mpm-help.md +8 -0
- claude_mpm/commands/mpm-init.md +8 -0
- claude_mpm/commands/mpm-monitor.md +8 -0
- claude_mpm/commands/mpm-organize.md +8 -0
- claude_mpm/commands/mpm-postmortem.md +8 -0
- claude_mpm/commands/mpm-session-resume.md +9 -1
- claude_mpm/commands/mpm-status.md +8 -0
- claude_mpm/commands/mpm-ticket-view.md +8 -0
- claude_mpm/commands/mpm-version.md +8 -0
- claude_mpm/commands/mpm.md +8 -0
- claude_mpm/config/agent_presets.py +8 -7
- claude_mpm/constants.py +1 -0
- claude_mpm/core/claude_runner.py +2 -2
- claude_mpm/core/config.py +5 -0
- claude_mpm/core/hook_manager.py +51 -3
- claude_mpm/core/interactive_session.py +7 -7
- claude_mpm/core/logger.py +10 -7
- claude_mpm/core/logging_utils.py +4 -2
- claude_mpm/core/output_style_manager.py +31 -13
- claude_mpm/core/unified_config.py +54 -8
- claude_mpm/core/unified_paths.py +30 -13
- 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/{Cs_tUR18.js → 1WZnGYqX.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{CDuw-vjf.js → 67pF3qNn.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{bTOqqlTd.js → 6RxdMKe4.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{DwBR2MJi.js → 8cZrfX0h.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{ZGh7QtNv.js → 9a6T2nm-.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{D9lljYKQ.js → B443AUzu.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{RJiighC3.js → B8AwtY2H.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{uuIeMWc-.js → BF15LAsF.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{D3k0OPJN.js → BRcwIQNr.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{CyWMqx4W.js → BV6nKitt.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{CiIAseT4.js → BViJ8lZt.js} +5 -5
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{CBBdVcY8.js → BcQ-Q0FE.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{BovzEFCE.js → Bpyvgze_.js} +1 -1
- 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/{eNVUfhuA.js → C3rbW_a-.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{GYwsonyD.js → C8WYN38h.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{BIF9m_hv.js → C9I8FlXH.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{B0uc0UOD.js → CIQcWgO2.js} +3 -3
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{Be7GpZd6.js → CIctN7YN.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{Bh0LDWpI.js → CKrS_JZW.js} +2 -2
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{DUrLdbGD.js → CR6P9C4A.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{B7xVLGWV.js → CRRR9MD_.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CRcR2DqT.js +334 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{Dhb8PKl3.js → CSXtMOf0.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{BPYeabCQ.js → CT-sbxSk.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{sQeU3Y1z.js → CWm6DJsp.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{CnA0NrzZ.js → CpqQ1Kzn.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{C4B-KCzX.js → D2nGpDRe.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{DGkLK5U1.js → D9iCMida.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{BofRWZRR.js → D9ykgMoY.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{DmxopI1J.js → DL2Ldur1.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{C30mlcqg.js → DPfltzjH.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{Vzk33B_K.js → DR8nis88.js} +2 -2
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{DI7hHRFL.js → DUliQN2b.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{C4JcI4KD.js → DXlhR01x.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{bT1r9zLR.js → D_lyTybS.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{DZX00Y4g.js → DngoTTgh.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{CzZX-COe.js → DqkmHtDC.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{B7RN905-.js → DsDh8EYs.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{DLVjFsZ3.js → DypDmXgd.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{iEWssX7S.js → IPYC-LnN.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/JTLiF7dt.js +24 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{DaimHw_p.js → JpevfAFt.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{DY1XQ8fi.js → R8CEIRAd.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{Dle-35c7.js → Zxy7qc-l.js} +2 -2
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/q9Hm6zAU.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{C_Usid8X.js → qtd3IeO4.js} +2 -2
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{CzeYkLYB.js → ulBFON_C.js} +2 -2
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{Cfqx1Qun.js → wQVh1CoA.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/entry/{app.D6-I5TpK.js → app.Dr7t0z2J.js} +2 -2
- claude_mpm/dashboard/static/svelte-build/_app/immutable/entry/start.BGhZHUS3.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/{0.m1gL8KXf.js → 0.RgBboRvH.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/{1.CgNOuw-d.js → 1.DG-KkbDf.js} +1 -1
- 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 -1
- claude_mpm/dashboard/static/svelte-build/index.html +9 -9
- 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/auto_pause_handler.py +486 -0
- claude_mpm/hooks/claude_hooks/event_handlers.py +250 -11
- claude_mpm/hooks/claude_hooks/hook_handler.py +106 -89
- claude_mpm/hooks/claude_hooks/hook_wrapper.sh +6 -11
- claude_mpm/hooks/claude_hooks/installer.py +69 -5
- claude_mpm/hooks/claude_hooks/response_tracking.py +3 -1
- claude_mpm/hooks/claude_hooks/services/connection_manager.py +20 -0
- claude_mpm/hooks/claude_hooks/services/connection_manager_http.py +14 -77
- claude_mpm/hooks/claude_hooks/services/subagent_processor.py +30 -6
- claude_mpm/hooks/session_resume_hook.py +85 -1
- claude_mpm/init.py +1 -1
- claude_mpm/scripts/claude-hook-handler.sh +36 -10
- claude_mpm/scripts/start_activity_logging.py +0 -0
- claude_mpm/services/agents/agent_recommendation_service.py +8 -8
- claude_mpm/services/agents/cache_git_manager.py +1 -1
- claude_mpm/services/agents/deployment/agent_template_builder.py +8 -0
- claude_mpm/services/agents/deployment/deployment_reconciler.py +577 -0
- claude_mpm/services/agents/deployment/remote_agent_discovery_service.py +3 -0
- claude_mpm/services/agents/deployment/startup_reconciliation.py +138 -0
- claude_mpm/services/agents/loading/framework_agent_loader.py +75 -2
- claude_mpm/services/agents/sources/git_source_sync_service.py +7 -4
- claude_mpm/services/agents/startup_sync.py +5 -2
- 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/delegation_detector.py +175 -0
- claude_mpm/services/diagnostics/checks/agent_sources_check.py +30 -0
- 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/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 +8 -2
- claude_mpm/services/monitor/server.py +106 -16
- claude_mpm/services/pm_skills_deployer.py +261 -85
- claude_mpm/services/skills/git_skill_source_manager.py +75 -10
- claude_mpm/services/skills/selective_skill_deployer.py +177 -80
- claude_mpm/services/skills/skill_discovery_service.py +57 -3
- claude_mpm/services/socketio/handlers/hook.py +14 -7
- claude_mpm/services/socketio/server/main.py +12 -4
- 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-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/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/skill_manager.py +4 -4
- claude_mpm/utils/agent_dependency_loader.py +103 -4
- claude_mpm/utils/robust_installer.py +45 -24
- claude_mpm-5.6.1.dist-info/METADATA +391 -0
- {claude_mpm-5.4.55.dist-info → claude_mpm-5.6.1.dist-info}/RECORD +377 -166
- claude_mpm/dashboard/static/svelte-build/_app/immutable/assets/0.DWzvg0-y.css +0 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/assets/2.ThTw9_ym.css +0 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/4TdZjIqw.js +0 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/5shd3_w0.js +0 -24
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BKjSRqUr.js +0 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Da0KfYnO.js +0 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Dfy6j1xT.js +0 -323
- claude_mpm/dashboard/static/svelte-build/_app/immutable/entry/start.NWzMBYRp.js +0 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/2.C0GcWctS.js +0 -1
- claude_mpm/hooks/claude_hooks/__pycache__/__init__.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__/installer.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/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__/duplicate_detector.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-5.4.55.dist-info/METADATA +0 -999
- {claude_mpm-5.4.55.dist-info → claude_mpm-5.6.1.dist-info}/WHEEL +0 -0
- {claude_mpm-5.4.55.dist-info → claude_mpm-5.6.1.dist-info}/entry_points.txt +0 -0
- {claude_mpm-5.4.55.dist-info → claude_mpm-5.6.1.dist-info}/licenses/LICENSE +0 -0
- {claude_mpm-5.4.55.dist-info → claude_mpm-5.6.1.dist-info}/licenses/LICENSE-FAQ.md +0 -0
- {claude_mpm-5.4.55.dist-info → claude_mpm-5.6.1.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
"""Basic notification delivery for events.
|
|
2
|
+
|
|
3
|
+
This module provides Notifier which sends notifications for events.
|
|
4
|
+
Currently supports logging, with extensibility for future channels
|
|
5
|
+
(Slack, email, webhooks).
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
import logging
|
|
9
|
+
from dataclasses import dataclass
|
|
10
|
+
|
|
11
|
+
from ..models.events import Event
|
|
12
|
+
|
|
13
|
+
logger = logging.getLogger(__name__)
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
@dataclass
|
|
17
|
+
class NotifierConfig:
|
|
18
|
+
"""Configuration for notifier.
|
|
19
|
+
|
|
20
|
+
Attributes:
|
|
21
|
+
log_level: Logging level for notifications (default: INFO)
|
|
22
|
+
|
|
23
|
+
Future attributes:
|
|
24
|
+
slack_webhook: URL for Slack webhook notifications
|
|
25
|
+
email_config: SMTP configuration for email notifications
|
|
26
|
+
webhook_urls: List of webhook URLs for custom integrations
|
|
27
|
+
"""
|
|
28
|
+
|
|
29
|
+
log_level: str = "INFO"
|
|
30
|
+
# Future: slack_webhook, email_config, webhook_urls
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
class Notifier:
|
|
34
|
+
"""Sends notifications for events.
|
|
35
|
+
|
|
36
|
+
Currently implements logging-based notifications with configurable
|
|
37
|
+
log levels. Designed for extensibility to support future notification
|
|
38
|
+
channels like Slack, email, and webhooks.
|
|
39
|
+
|
|
40
|
+
Attributes:
|
|
41
|
+
config: Notifier configuration
|
|
42
|
+
|
|
43
|
+
Example:
|
|
44
|
+
>>> config = NotifierConfig(log_level="INFO")
|
|
45
|
+
>>> notifier = Notifier(config)
|
|
46
|
+
>>> await notifier.notify(event)
|
|
47
|
+
>>> await notifier.notify_resolution(event, "User responded")
|
|
48
|
+
"""
|
|
49
|
+
|
|
50
|
+
def __init__(self, config: NotifierConfig | None = None) -> None:
|
|
51
|
+
"""Initialize notifier.
|
|
52
|
+
|
|
53
|
+
Args:
|
|
54
|
+
config: Optional NotifierConfig (uses defaults if not provided)
|
|
55
|
+
"""
|
|
56
|
+
self.config = config or NotifierConfig()
|
|
57
|
+
|
|
58
|
+
# Map log level string to logging level
|
|
59
|
+
level_map = {
|
|
60
|
+
"DEBUG": logging.DEBUG,
|
|
61
|
+
"INFO": logging.INFO,
|
|
62
|
+
"WARNING": logging.WARNING,
|
|
63
|
+
"ERROR": logging.ERROR,
|
|
64
|
+
"CRITICAL": logging.CRITICAL,
|
|
65
|
+
}
|
|
66
|
+
self._log_level = level_map.get(self.config.log_level.upper(), logging.INFO)
|
|
67
|
+
|
|
68
|
+
logger.debug("Notifier initialized with log level: %s", self.config.log_level)
|
|
69
|
+
|
|
70
|
+
async def notify(self, event: Event) -> None:
|
|
71
|
+
"""Send notification for an event.
|
|
72
|
+
|
|
73
|
+
Currently logs the event at the configured log level. Future versions
|
|
74
|
+
will support additional notification channels.
|
|
75
|
+
|
|
76
|
+
Args:
|
|
77
|
+
event: Event to notify about
|
|
78
|
+
|
|
79
|
+
Example:
|
|
80
|
+
>>> await notifier.notify(event)
|
|
81
|
+
# Logs: [HIGH] Event evt_123: Choose deployment target
|
|
82
|
+
"""
|
|
83
|
+
# Format notification message
|
|
84
|
+
message = self._format_event(event)
|
|
85
|
+
|
|
86
|
+
# Log notification
|
|
87
|
+
logger.log(
|
|
88
|
+
self._log_level,
|
|
89
|
+
"Event notification: %s",
|
|
90
|
+
message,
|
|
91
|
+
)
|
|
92
|
+
|
|
93
|
+
# Future: Send to Slack, email, webhooks
|
|
94
|
+
# if self.config.slack_webhook:
|
|
95
|
+
# await self._send_slack(event)
|
|
96
|
+
# if self.config.email_config:
|
|
97
|
+
# await self._send_email(event)
|
|
98
|
+
|
|
99
|
+
async def notify_resolution(self, event: Event, response: str) -> None:
|
|
100
|
+
"""Notify that an event was resolved.
|
|
101
|
+
|
|
102
|
+
Logs the resolution with the user's response. Future versions will
|
|
103
|
+
send resolution notifications to configured channels.
|
|
104
|
+
|
|
105
|
+
Args:
|
|
106
|
+
event: Event that was resolved
|
|
107
|
+
response: User's response to the event
|
|
108
|
+
|
|
109
|
+
Example:
|
|
110
|
+
>>> await notifier.notify_resolution(event, "Deploy to staging")
|
|
111
|
+
# Logs: Event evt_123 resolved: Deploy to staging
|
|
112
|
+
"""
|
|
113
|
+
message = f"Event {event.id} resolved: {response[:100]}"
|
|
114
|
+
|
|
115
|
+
logger.log(
|
|
116
|
+
self._log_level,
|
|
117
|
+
"Event resolution: %s",
|
|
118
|
+
message,
|
|
119
|
+
)
|
|
120
|
+
|
|
121
|
+
# Future: Send resolution notifications to channels
|
|
122
|
+
|
|
123
|
+
def _format_event(self, event: Event) -> str:
|
|
124
|
+
"""Format event for notification display.
|
|
125
|
+
|
|
126
|
+
Args:
|
|
127
|
+
event: Event to format
|
|
128
|
+
|
|
129
|
+
Returns:
|
|
130
|
+
Formatted notification string
|
|
131
|
+
|
|
132
|
+
Example:
|
|
133
|
+
>>> msg = notifier._format_event(event)
|
|
134
|
+
'[HIGH] evt_123 (proj_456): Choose deployment target'
|
|
135
|
+
"""
|
|
136
|
+
parts = [
|
|
137
|
+
f"[{event.priority.value.upper()}]",
|
|
138
|
+
f"{event.id}",
|
|
139
|
+
f"({event.project_id})",
|
|
140
|
+
f"{event.title}",
|
|
141
|
+
]
|
|
142
|
+
|
|
143
|
+
if event.options:
|
|
144
|
+
parts.append(f"Options: {', '.join(event.options)}")
|
|
145
|
+
|
|
146
|
+
return " ".join(parts)
|
|
@@ -5,7 +5,15 @@ aliases: [mpm-config]
|
|
|
5
5
|
migration_target: /mpm/config
|
|
6
6
|
category: config
|
|
7
7
|
description: Manage Claude MPM configuration
|
|
8
|
+
deprecated: true
|
|
9
|
+
deprecated_in: "5.5.0"
|
|
10
|
+
replacement: "skill:mpm-config"
|
|
8
11
|
---
|
|
12
|
+
|
|
13
|
+
> **Deprecated:** This command file is deprecated in favor of the `mpm-config` skill.
|
|
14
|
+
> For Claude Code 2.1.3+, use the skill-based `/mpm-config` command instead.
|
|
15
|
+
> This file is kept for backward compatibility with Claude Code < 2.1.3.
|
|
16
|
+
|
|
9
17
|
# /mpm-config
|
|
10
18
|
|
|
11
19
|
Unified configuration management with auto-detection.
|
|
@@ -5,7 +5,15 @@ aliases: [mpm-doctor]
|
|
|
5
5
|
migration_target: /mpm/system:doctor
|
|
6
6
|
category: system
|
|
7
7
|
description: Run diagnostic checks on Claude MPM installation
|
|
8
|
+
deprecated: true
|
|
9
|
+
deprecated_in: "5.5.0"
|
|
10
|
+
replacement: "skill:mpm-doctor"
|
|
8
11
|
---
|
|
12
|
+
|
|
13
|
+
> **Deprecated:** This command file is deprecated in favor of the `mpm-doctor` skill.
|
|
14
|
+
> For Claude Code 2.1.3+, use the skill-based `/mpm-doctor` command instead.
|
|
15
|
+
> This file is kept for backward compatibility with Claude Code < 2.1.3.
|
|
16
|
+
|
|
9
17
|
# /mpm-doctor
|
|
10
18
|
|
|
11
19
|
Run comprehensive diagnostics on Claude MPM installation.
|
claude_mpm/commands/mpm-help.md
CHANGED
|
@@ -5,7 +5,15 @@ aliases: [mpm-help]
|
|
|
5
5
|
migration_target: /mpm/system:help
|
|
6
6
|
category: system
|
|
7
7
|
description: Display help for Claude MPM commands
|
|
8
|
+
deprecated: true
|
|
9
|
+
deprecated_in: "5.5.0"
|
|
10
|
+
replacement: "skill:mpm-help"
|
|
8
11
|
---
|
|
12
|
+
|
|
13
|
+
> **Deprecated:** This command file is deprecated in favor of the `mpm-help` skill.
|
|
14
|
+
> For Claude Code 2.1.3+, use the skill-based `/mpm-help` command instead.
|
|
15
|
+
> This file is kept for backward compatibility with Claude Code < 2.1.3.
|
|
16
|
+
|
|
9
17
|
# /mpm-help
|
|
10
18
|
|
|
11
19
|
Show help for MPM commands. Delegates to PM agent.
|
claude_mpm/commands/mpm-init.md
CHANGED
|
@@ -5,7 +5,15 @@ aliases: [mpm-init]
|
|
|
5
5
|
migration_target: /mpm/system:init
|
|
6
6
|
category: system
|
|
7
7
|
description: Initialize or update project for Claude Code and MPM
|
|
8
|
+
deprecated: true
|
|
9
|
+
deprecated_in: "5.5.0"
|
|
10
|
+
replacement: "skill:mpm-init"
|
|
8
11
|
---
|
|
12
|
+
|
|
13
|
+
> **Deprecated:** This command file is deprecated in favor of the `mpm-init` skill.
|
|
14
|
+
> For Claude Code 2.1.3+, use the skill-based `/mpm-init` command instead.
|
|
15
|
+
> This file is kept for backward compatibility with Claude Code < 2.1.3.
|
|
16
|
+
|
|
9
17
|
# /mpm-init
|
|
10
18
|
|
|
11
19
|
Initialize or intelligently update project for Claude Code and Claude MPM.
|
|
@@ -5,7 +5,15 @@ aliases: [mpm-monitor]
|
|
|
5
5
|
migration_target: /mpm/system:monitor
|
|
6
6
|
category: system
|
|
7
7
|
description: Control monitoring server and dashboard
|
|
8
|
+
deprecated: true
|
|
9
|
+
deprecated_in: "5.5.0"
|
|
10
|
+
replacement: "skill:mpm-monitor"
|
|
8
11
|
---
|
|
12
|
+
|
|
13
|
+
> **Deprecated:** This command file is deprecated in favor of the `mpm-monitor` skill.
|
|
14
|
+
> For Claude Code 2.1.3+, use the skill-based `/mpm-monitor` command instead.
|
|
15
|
+
> This file is kept for backward compatibility with Claude Code < 2.1.3.
|
|
16
|
+
|
|
9
17
|
# /mpm-monitor
|
|
10
18
|
|
|
11
19
|
Manage Socket.IO monitoring server for real-time dashboard.
|
|
@@ -5,7 +5,15 @@ aliases: [mpm-organize]
|
|
|
5
5
|
migration_target: /mpm/system:organize
|
|
6
6
|
category: system
|
|
7
7
|
description: Organize project files with intelligent consolidation
|
|
8
|
+
deprecated: true
|
|
9
|
+
deprecated_in: "5.5.0"
|
|
10
|
+
replacement: "skill:mpm-organize"
|
|
8
11
|
---
|
|
12
|
+
|
|
13
|
+
> **Deprecated:** This command file is deprecated in favor of the `mpm-organize` skill.
|
|
14
|
+
> For Claude Code 2.1.3+, use the skill-based `/mpm-organize` command instead.
|
|
15
|
+
> This file is kept for backward compatibility with Claude Code < 2.1.3.
|
|
16
|
+
|
|
9
17
|
# /mpm-organize
|
|
10
18
|
|
|
11
19
|
Organize ALL project files with intelligent detection, consolidation, and pruning.
|
|
@@ -5,7 +5,15 @@ aliases: [mpm-postmortem]
|
|
|
5
5
|
migration_target: /mpm/analysis:postmortem
|
|
6
6
|
category: analysis
|
|
7
7
|
description: Analyze session errors and suggest improvements
|
|
8
|
+
deprecated: true
|
|
9
|
+
deprecated_in: "5.5.0"
|
|
10
|
+
replacement: "skill:mpm-postmortem"
|
|
8
11
|
---
|
|
12
|
+
|
|
13
|
+
> **Deprecated:** This command file is deprecated in favor of the `mpm-postmortem` skill.
|
|
14
|
+
> For Claude Code 2.1.3+, use the skill-based `/mpm-postmortem` command instead.
|
|
15
|
+
> This file is kept for backward compatibility with Claude Code < 2.1.3.
|
|
16
|
+
|
|
9
17
|
# /mpm-postmortem
|
|
10
18
|
|
|
11
19
|
Analyze session errors and generate improvement suggestions.
|
|
@@ -5,7 +5,15 @@ aliases: [mpm-session-resume]
|
|
|
5
5
|
migration_target: /mpm/session:resume
|
|
6
6
|
category: session
|
|
7
7
|
description: Load context from paused session
|
|
8
|
+
deprecated: true
|
|
9
|
+
deprecated_in: "5.5.0"
|
|
10
|
+
replacement: "skill:mpm-session-resume"
|
|
8
11
|
---
|
|
12
|
+
|
|
13
|
+
> **Deprecated:** This command file is deprecated in favor of the `mpm-session-resume` skill.
|
|
14
|
+
> For Claude Code 2.1.3+, use the skill-based `/mpm-session-resume` command instead.
|
|
15
|
+
> This file is kept for backward compatibility with Claude Code < 2.1.3.
|
|
16
|
+
|
|
9
17
|
# /mpm-session-resume
|
|
10
18
|
|
|
11
19
|
Load and display context from most recent paused session.
|
|
@@ -21,7 +29,7 @@ Load and display context from most recent paused session.
|
|
|
21
29
|
- Git context and recent commits
|
|
22
30
|
- Next recommended actions
|
|
23
31
|
|
|
24
|
-
**Session location:** `.claude-mpm/sessions/session-*.
|
|
32
|
+
**Session location:** `.claude-mpm/sessions/session-*.md`
|
|
25
33
|
|
|
26
34
|
**Token usage:** ~20-40k tokens (10-20% of context budget)
|
|
27
35
|
|
|
@@ -5,7 +5,15 @@ aliases: [mpm-status]
|
|
|
5
5
|
migration_target: /mpm/system:status
|
|
6
6
|
category: system
|
|
7
7
|
description: Display Claude MPM system status
|
|
8
|
+
deprecated: true
|
|
9
|
+
deprecated_in: "5.5.0"
|
|
10
|
+
replacement: "skill:mpm-status"
|
|
8
11
|
---
|
|
12
|
+
|
|
13
|
+
> **Deprecated:** This command file is deprecated in favor of the `mpm-status` skill.
|
|
14
|
+
> For Claude Code 2.1.3+, use the skill-based `/mpm-status` command instead.
|
|
15
|
+
> This file is kept for backward compatibility with Claude Code < 2.1.3.
|
|
16
|
+
|
|
9
17
|
# /mpm-status
|
|
10
18
|
|
|
11
19
|
Show MPM system status. Delegates to PM agent.
|
|
@@ -5,7 +5,15 @@ aliases: [mpm-ticket-view]
|
|
|
5
5
|
migration_target: /mpm/ticket:view
|
|
6
6
|
category: tickets
|
|
7
7
|
description: Orchestrate ticketing agent for project management workflows
|
|
8
|
+
deprecated: true
|
|
9
|
+
deprecated_in: "5.5.0"
|
|
10
|
+
replacement: "skill:mpm-ticket-view"
|
|
8
11
|
---
|
|
12
|
+
|
|
13
|
+
> **Deprecated:** This command file is deprecated in favor of the `mpm-ticket-view` skill.
|
|
14
|
+
> For Claude Code 2.1.3+, use the skill-based `/mpm-ticket-view` command instead.
|
|
15
|
+
> This file is kept for backward compatibility with Claude Code < 2.1.3.
|
|
16
|
+
|
|
9
17
|
# /mpm-ticket
|
|
10
18
|
|
|
11
19
|
High-level ticketing workflows delegating to ticketing agent.
|
|
@@ -5,7 +5,15 @@ aliases: [mpm-version]
|
|
|
5
5
|
migration_target: /mpm/system:version
|
|
6
6
|
category: system
|
|
7
7
|
description: Show version information
|
|
8
|
+
deprecated: true
|
|
9
|
+
deprecated_in: "5.5.0"
|
|
10
|
+
replacement: "skill:mpm-version"
|
|
8
11
|
---
|
|
12
|
+
|
|
13
|
+
> **Deprecated:** This command file is deprecated in favor of the `mpm-version` skill.
|
|
14
|
+
> For Claude Code 2.1.3+, use the skill-based `/mpm-version` command instead.
|
|
15
|
+
> This file is kept for backward compatibility with Claude Code < 2.1.3.
|
|
16
|
+
|
|
9
17
|
# /mpm-version
|
|
10
18
|
|
|
11
19
|
Display version information for MPM, agents, and skills.
|
claude_mpm/commands/mpm.md
CHANGED
|
@@ -6,7 +6,15 @@ migration_target: /mpm
|
|
|
6
6
|
category: system
|
|
7
7
|
deprecated_aliases: []
|
|
8
8
|
description: Access Claude MPM functionality and manage multi-agent orchestration
|
|
9
|
+
deprecated: true
|
|
10
|
+
deprecated_in: "5.5.0"
|
|
11
|
+
replacement: "skill:mpm"
|
|
9
12
|
---
|
|
13
|
+
|
|
14
|
+
> **Deprecated:** This command file is deprecated in favor of the `mpm` skill.
|
|
15
|
+
> For Claude Code 2.1.3+, use the skill-based `/mpm` command instead.
|
|
16
|
+
> This file is kept for backward compatibility with Claude Code < 2.1.3.
|
|
17
|
+
|
|
10
18
|
# Claude MPM - Multi-Agent Project Manager
|
|
11
19
|
|
|
12
20
|
Access Claude MPM functionality and manage your multi-agent orchestration.
|
|
@@ -25,12 +25,17 @@ from typing import Any, Callable, Dict, List, Union
|
|
|
25
25
|
PresetResolver = Union[List[str], Callable[[], List[str]]]
|
|
26
26
|
|
|
27
27
|
# Core agents included in ALL presets (MIN and MAX)
|
|
28
|
+
# Standard 9 core agents for essential PM workflow functionality
|
|
28
29
|
CORE_AGENTS = [
|
|
29
30
|
"claude-mpm/mpm-agent-manager", # Agent lifecycle management
|
|
30
31
|
"claude-mpm/mpm-skills-manager", # Skills management
|
|
31
|
-
"
|
|
32
|
+
"engineer/core/engineer", # General-purpose implementation
|
|
33
|
+
"universal/research", # Codebase exploration and analysis
|
|
34
|
+
"qa/qa", # Testing and quality assurance
|
|
35
|
+
"qa/web-qa", # Browser-based testing specialist
|
|
32
36
|
"documentation/documentation", # Documentation generation
|
|
33
|
-
"
|
|
37
|
+
"ops/core/ops", # Basic deployment operations
|
|
38
|
+
"documentation/ticketing", # Ticket tracking (essential for PM workflow)
|
|
34
39
|
]
|
|
35
40
|
|
|
36
41
|
PRESETS: Dict[str, Dict[str, Any]] = {
|
|
@@ -39,11 +44,7 @@ PRESETS: Dict[str, Dict[str, Any]] = {
|
|
|
39
44
|
# ========================================
|
|
40
45
|
"minimal": {
|
|
41
46
|
"description": "Core agents only - universal starter kit",
|
|
42
|
-
"agents": CORE_AGENTS
|
|
43
|
-
+ [
|
|
44
|
-
"qa/qa",
|
|
45
|
-
"ops/core/ops",
|
|
46
|
-
],
|
|
47
|
+
"agents": CORE_AGENTS, # All 8 core agents (no additional needed)
|
|
47
48
|
"use_cases": ["Any project type", "Quick start", "Learning"],
|
|
48
49
|
},
|
|
49
50
|
# ========================================
|
claude_mpm/constants.py
CHANGED
|
@@ -169,6 +169,7 @@ class SkillsCommands(str, Enum):
|
|
|
169
169
|
INFO = "info"
|
|
170
170
|
CONFIG = "config"
|
|
171
171
|
CONFIGURE = "configure" # Interactive skills selection (like agents configure)
|
|
172
|
+
SELECT = "select" # Interactive topic-grouped skill selector
|
|
172
173
|
# GitHub deployment commands
|
|
173
174
|
DEPLOY_FROM_GITHUB = "deploy-github"
|
|
174
175
|
LIST_AVAILABLE = "list-available"
|
claude_mpm/core/claude_runner.py
CHANGED
|
@@ -730,7 +730,7 @@ Use these agents to delegate specialized work via the Task tool.
|
|
|
730
730
|
import json
|
|
731
731
|
|
|
732
732
|
settings = json.loads(settings_file.read_text())
|
|
733
|
-
if settings.get("activeOutputStyle") == "
|
|
733
|
+
if settings.get("activeOutputStyle") == "Claude MPM":
|
|
734
734
|
# Already active, check if file exists
|
|
735
735
|
output_style_file = (
|
|
736
736
|
Path.home() / ".claude" / "output-styles" / "claude-mpm.md"
|
|
@@ -740,7 +740,7 @@ Use these agents to delegate specialized work via the Task tool.
|
|
|
740
740
|
"Output style 'Claude MPM' already deployed and active"
|
|
741
741
|
)
|
|
742
742
|
return
|
|
743
|
-
except Exception:
|
|
743
|
+
except Exception: # nosec B110
|
|
744
744
|
pass # Continue with deployment if we can't read settings
|
|
745
745
|
|
|
746
746
|
# Read the OUTPUT_STYLE.md content if it exists
|
claude_mpm/core/config.py
CHANGED
|
@@ -605,6 +605,11 @@ class Config:
|
|
|
605
605
|
"sync_interval": "startup", # Options: "startup", "hourly", "daily", "manual"
|
|
606
606
|
"cache_dir": str(Path.home() / ".claude-mpm" / "cache" / "agents"),
|
|
607
607
|
},
|
|
608
|
+
# Autotodos configuration
|
|
609
|
+
"autotodos": {
|
|
610
|
+
"auto_inject_on_startup": True, # Auto-inject pending todos on PM session start
|
|
611
|
+
"max_todos_per_session": 10, # Max todos to inject per session
|
|
612
|
+
},
|
|
608
613
|
}
|
|
609
614
|
|
|
610
615
|
# Apply defaults for missing keys
|
claude_mpm/core/hook_manager.py
CHANGED
|
@@ -16,13 +16,15 @@ import contextlib
|
|
|
16
16
|
import json
|
|
17
17
|
import os
|
|
18
18
|
import queue
|
|
19
|
-
import subprocess
|
|
19
|
+
import subprocess # nosec B404
|
|
20
20
|
import threading
|
|
21
21
|
import uuid
|
|
22
22
|
from datetime import datetime, timezone
|
|
23
23
|
from typing import Any, Dict, Optional
|
|
24
24
|
|
|
25
25
|
from ..core.logger import get_logger
|
|
26
|
+
from ..services.event_bus.event_bus import EventBus
|
|
27
|
+
from ..services.event_log import get_event_log
|
|
26
28
|
from .hook_error_memory import get_hook_error_memory
|
|
27
29
|
from .hook_performance_config import get_hook_performance_config
|
|
28
30
|
from .unified_paths import get_package_root
|
|
@@ -46,6 +48,10 @@ class HookManager:
|
|
|
46
48
|
# Initialize error memory for tracking and preventing repeated errors
|
|
47
49
|
self.error_memory = get_hook_error_memory()
|
|
48
50
|
|
|
51
|
+
# Initialize event log and event bus for event-driven architecture
|
|
52
|
+
self.event_log = get_event_log()
|
|
53
|
+
self.event_bus = EventBus.get_instance()
|
|
54
|
+
|
|
49
55
|
# Initialize background hook processing for async execution
|
|
50
56
|
self.performance_config = get_hook_performance_config()
|
|
51
57
|
queue_config = self.performance_config.get_queue_config()
|
|
@@ -100,6 +106,45 @@ class HookManager:
|
|
|
100
106
|
self.background_thread.start()
|
|
101
107
|
self.logger.debug("Started background hook processor thread")
|
|
102
108
|
|
|
109
|
+
def _publish_error_event(
|
|
110
|
+
self, hook_type: str, error_info: Dict[str, str], suggestion: str
|
|
111
|
+
):
|
|
112
|
+
"""Publish hook error event to event log and event bus.
|
|
113
|
+
|
|
114
|
+
WHY publish events:
|
|
115
|
+
- Decouple error detection from error handling
|
|
116
|
+
- Enable autotodos CLI to read from persistent event log
|
|
117
|
+
- Support real-time notifications via event bus
|
|
118
|
+
- Maintain audit trail of all hook errors
|
|
119
|
+
|
|
120
|
+
Args:
|
|
121
|
+
hook_type: Type of hook that failed
|
|
122
|
+
error_info: Error information from error detection
|
|
123
|
+
suggestion: Fix suggestion from error memory
|
|
124
|
+
"""
|
|
125
|
+
try:
|
|
126
|
+
# Prepare event payload
|
|
127
|
+
payload = {
|
|
128
|
+
"error_type": error_info["type"],
|
|
129
|
+
"hook_type": hook_type,
|
|
130
|
+
"details": error_info.get("details", ""),
|
|
131
|
+
"full_message": error_info.get("match", ""),
|
|
132
|
+
"suggested_fix": suggestion,
|
|
133
|
+
"source": "hook_manager",
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
# Publish to event log (persistent storage)
|
|
137
|
+
self.event_log.append_event(
|
|
138
|
+
event_type="autotodo.error", payload=payload, status="pending"
|
|
139
|
+
)
|
|
140
|
+
|
|
141
|
+
# Publish to event bus (real-time listeners)
|
|
142
|
+
self.event_bus.publish("autotodo.error", payload)
|
|
143
|
+
|
|
144
|
+
except Exception as e:
|
|
145
|
+
# Don't let event publishing break hook processing
|
|
146
|
+
self.logger.debug(f"Failed to publish error event: {e}")
|
|
147
|
+
|
|
103
148
|
def _execute_hook_sync(self, hook_data: Dict[str, Any]):
|
|
104
149
|
"""Execute a single hook synchronously in the background thread with error detection.
|
|
105
150
|
|
|
@@ -141,7 +186,7 @@ class HookManager:
|
|
|
141
186
|
env["CLAUDE_MPM_HOOK_DEBUG"] = "true"
|
|
142
187
|
|
|
143
188
|
# Execute with timeout in background thread
|
|
144
|
-
result = subprocess.run(
|
|
189
|
+
result = subprocess.run( # nosec B603 B607
|
|
145
190
|
["python", str(self.hook_handler_path)],
|
|
146
191
|
input=event_json,
|
|
147
192
|
text=True,
|
|
@@ -157,7 +202,7 @@ class HookManager:
|
|
|
157
202
|
)
|
|
158
203
|
|
|
159
204
|
if error_info:
|
|
160
|
-
# Record the error
|
|
205
|
+
# Record the error in memory (for skipping repeated failures)
|
|
161
206
|
self.error_memory.record_error(error_info, hook_type)
|
|
162
207
|
|
|
163
208
|
# Get fix suggestion
|
|
@@ -165,6 +210,9 @@ class HookManager:
|
|
|
165
210
|
|
|
166
211
|
# Log error with suggestion
|
|
167
212
|
self.logger.warning(f"Hook {hook_type} error detected:\n{suggestion}")
|
|
213
|
+
|
|
214
|
+
# Publish event to event log for autotodos processing
|
|
215
|
+
self._publish_error_event(hook_type, error_info, suggestion)
|
|
168
216
|
elif result.returncode != 0:
|
|
169
217
|
# Non-zero return without detected pattern
|
|
170
218
|
self.logger.debug(f"Hook {hook_type} returned code {result.returncode}")
|
|
@@ -12,7 +12,7 @@ of InteractiveSession without circular dependency issues.
|
|
|
12
12
|
|
|
13
13
|
import contextlib
|
|
14
14
|
import os
|
|
15
|
-
import subprocess
|
|
15
|
+
import subprocess # nosec B404
|
|
16
16
|
import uuid
|
|
17
17
|
from pathlib import Path
|
|
18
18
|
from typing import TYPE_CHECKING, Any, Dict, Optional, Tuple
|
|
@@ -359,19 +359,19 @@ class InteractiveSession:
|
|
|
359
359
|
osm = self.runner.framework_loader.output_style_manager
|
|
360
360
|
if osm:
|
|
361
361
|
if osm.claude_version and osm.supports_output_styles():
|
|
362
|
-
# Check if
|
|
362
|
+
# Check if Claude MPM style is active
|
|
363
363
|
settings_file = osm.settings_file
|
|
364
364
|
if settings_file.exists():
|
|
365
365
|
import json
|
|
366
366
|
|
|
367
367
|
settings = json.loads(settings_file.read_text())
|
|
368
368
|
active_style = settings.get("activeOutputStyle")
|
|
369
|
-
if active_style
|
|
370
|
-
return "Output Style:
|
|
369
|
+
if active_style in ("Claude MPM", "Claude MPM Teacher"):
|
|
370
|
+
return f"Output Style: {active_style} ✅"
|
|
371
371
|
return f"Output Style: {active_style or 'none'}"
|
|
372
372
|
return "Output Style: Available"
|
|
373
373
|
return "Output Style: Injected (legacy)"
|
|
374
|
-
except Exception:
|
|
374
|
+
except Exception: # nosec B110
|
|
375
375
|
pass
|
|
376
376
|
return None
|
|
377
377
|
|
|
@@ -582,7 +582,7 @@ class InteractiveSession:
|
|
|
582
582
|
)
|
|
583
583
|
|
|
584
584
|
# This will not return if successful
|
|
585
|
-
os.execvpe(cmd[0], cmd, env)
|
|
585
|
+
os.execvpe(cmd[0], cmd, env) # nosec B606
|
|
586
586
|
return False # Only reached on failure
|
|
587
587
|
|
|
588
588
|
def _launch_subprocess_mode(self, cmd: list, env: dict) -> bool:
|
|
@@ -641,7 +641,7 @@ class InteractiveSession:
|
|
|
641
641
|
cmd = environment["command"]
|
|
642
642
|
env = environment["environment"]
|
|
643
643
|
|
|
644
|
-
result = subprocess.run(
|
|
644
|
+
result = subprocess.run( # nosec B603
|
|
645
645
|
cmd, stdin=None, stdout=None, stderr=None, env=env, check=False
|
|
646
646
|
)
|
|
647
647
|
|
claude_mpm/core/logger.py
CHANGED
|
@@ -214,19 +214,22 @@ 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.
|
|
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.
|
|
226
|
+
console_handler = logging.StreamHandler(sys.stderr)
|
|
224
227
|
console_handler.setFormatter(simple_formatter)
|
|
225
228
|
else:
|
|
226
|
-
console_handler = logging.StreamHandler(sys.
|
|
229
|
+
console_handler = logging.StreamHandler(sys.stderr)
|
|
227
230
|
console_handler.setFormatter(formatter if json_format else simple_formatter)
|
|
228
231
|
|
|
229
|
-
console_handler.setLevel(
|
|
232
|
+
console_handler.setLevel(log_level) # Respect the requested log level
|
|
230
233
|
logger.addHandler(console_handler)
|
|
231
234
|
|
|
232
235
|
# File handler
|
|
@@ -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
|
claude_mpm/core/logging_utils.py
CHANGED
|
@@ -108,8 +108,10 @@ class LoggerFactory:
|
|
|
108
108
|
# Remove existing handlers
|
|
109
109
|
root_logger.handlers = []
|
|
110
110
|
|
|
111
|
-
# Console handler
|
|
112
|
-
|
|
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,
|