claude-mpm 5.0.9__py3-none-any.whl → 5.6.23__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of claude-mpm might be problematic. Click here for more details.
- claude_mpm/VERSION +1 -1
- claude_mpm/__init__.py +4 -0
- claude_mpm/agents/BASE_AGENT.md +164 -0
- claude_mpm/agents/CLAUDE_MPM_OUTPUT_STYLE.md +115 -0
- claude_mpm/agents/CLAUDE_MPM_RESEARCH_OUTPUT_STYLE.md +413 -0
- claude_mpm/agents/CLAUDE_MPM_TEACHER_OUTPUT_STYLE.md +186 -0
- claude_mpm/agents/MEMORY.md +1 -1
- claude_mpm/agents/PM_INSTRUCTIONS.md +479 -616
- claude_mpm/agents/WORKFLOW.md +6 -253
- claude_mpm/agents/agent_loader.py +13 -44
- claude_mpm/agents/base_agent.json +1 -1
- claude_mpm/agents/frontmatter_validator.py +70 -2
- claude_mpm/agents/templates/circuit-breakers.md +457 -62
- claude_mpm/cli/__init__.py +5 -2
- claude_mpm/cli/__main__.py +4 -0
- claude_mpm/cli/chrome_devtools_installer.py +175 -0
- claude_mpm/cli/commands/agent_state_manager.py +18 -27
- claude_mpm/cli/commands/agents.py +177 -41
- claude_mpm/cli/commands/agents_reconcile.py +197 -0
- claude_mpm/cli/commands/auto_configure.py +723 -236
- claude_mpm/cli/commands/autotodos.py +566 -0
- claude_mpm/cli/commands/commander.py +216 -0
- claude_mpm/cli/commands/config.py +88 -2
- claude_mpm/cli/commands/configure.py +1874 -170
- claude_mpm/cli/commands/configure_agent_display.py +27 -6
- 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 +232 -46
- claude_mpm/cli/commands/mpm_init/knowledge_extractor.py +481 -0
- claude_mpm/cli/commands/mpm_init/prompts.py +280 -0
- claude_mpm/cli/commands/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 +379 -204
- claude_mpm/cli/commands/summarize.py +413 -0
- claude_mpm/cli/executor.py +141 -19
- claude_mpm/cli/interactive/__init__.py +10 -0
- claude_mpm/cli/interactive/agent_wizard.py +115 -60
- claude_mpm/cli/interactive/questionary_styles.py +65 -0
- claude_mpm/cli/interactive/skill_selector.py +481 -0
- claude_mpm/cli/parsers/agents_parser.py +54 -9
- claude_mpm/cli/parsers/auto_configure_parser.py +13 -138
- claude_mpm/cli/parsers/base_parser.py +88 -1
- claude_mpm/cli/parsers/commander_parser.py +116 -0
- claude_mpm/cli/parsers/config_parser.py +153 -83
- 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 +1 -1
- claude_mpm/cli/startup.py +1017 -266
- 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 +36 -0
- claude_mpm/commands/mpm-doctor.md +16 -21
- claude_mpm/commands/mpm-help.md +12 -286
- claude_mpm/commands/mpm-init.md +88 -506
- claude_mpm/commands/mpm-monitor.md +22 -401
- claude_mpm/commands/mpm-organize.md +128 -0
- 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/agent_sources.py +27 -0
- 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/formatters/content_formatter.py +3 -13
- claude_mpm/core/framework/loaders/agent_loader.py +8 -5
- claude_mpm/core/framework/loaders/instruction_loader.py +52 -11
- claude_mpm/core/framework_loader.py +4 -2
- claude_mpm/core/hook_manager.py +51 -3
- claude_mpm/core/interactive_session.py +12 -11
- claude_mpm/core/logger.py +39 -9
- claude_mpm/core/logging_utils.py +35 -11
- 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 +219 -44
- claude_mpm/core/shared/config_loader.py +3 -1
- claude_mpm/core/socketio_pool.py +16 -8
- claude_mpm/core/unified_agent_registry.py +134 -16
- claude_mpm/core/unified_config.py +76 -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/correlation_manager.py +60 -0
- claude_mpm/hooks/claude_hooks/event_handlers.py +479 -128
- claude_mpm/hooks/claude_hooks/hook_handler.py +254 -83
- claude_mpm/hooks/claude_hooks/hook_wrapper.sh +6 -11
- claude_mpm/hooks/claude_hooks/installer.py +149 -18
- claude_mpm/hooks/claude_hooks/memory_integration.py +67 -19
- claude_mpm/hooks/claude_hooks/response_tracking.py +44 -62
- 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/hooks/claude_hooks/services/connection_manager.py +69 -30
- claude_mpm/hooks/claude_hooks/services/connection_manager_http.py +36 -103
- claude_mpm/hooks/claude_hooks/services/state_manager.py +23 -36
- claude_mpm/hooks/claude_hooks/services/subagent_processor.py +73 -75
- claude_mpm/hooks/kuzu_memory_hook.py +5 -5
- claude_mpm/hooks/memory_integration_hook.py +46 -1
- claude_mpm/hooks/session_resume_hook.py +89 -1
- claude_mpm/hooks/templates/pre_tool_use_template.py +10 -2
- claude_mpm/init.py +276 -19
- claude_mpm/models/agent_definition.py +7 -0
- claude_mpm/models/git_repository.py +3 -3
- claude_mpm/scripts/claude-hook-handler.sh +87 -20
- claude_mpm/scripts/launch_monitor.py +93 -13
- claude_mpm/scripts/start_activity_logging.py +0 -0
- claude_mpm/services/agents/agent_builder.py +3 -3
- claude_mpm/services/agents/agent_recommendation_service.py +278 -0
- claude_mpm/services/agents/agent_review_service.py +280 -0
- 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 +6 -5
- claude_mpm/services/agents/deployment/agent_format_converter.py +25 -13
- claude_mpm/services/agents/deployment/agent_template_builder.py +42 -20
- 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 +348 -29
- claude_mpm/services/agents/deployment/remote_agent_discovery_service.py +570 -68
- claude_mpm/services/agents/deployment/startup_reconciliation.py +138 -0
- claude_mpm/services/agents/git_source_manager.py +57 -4
- claude_mpm/services/agents/loading/base_agent_manager.py +1 -13
- 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 +129 -11
- claude_mpm/services/agents/startup_sync.py +27 -4
- claude_mpm/services/agents/toolchain_detector.py +10 -6
- claude_mpm/services/analysis/__init__.py +11 -1
- claude_mpm/services/analysis/clone_detector.py +1030 -0
- claude_mpm/services/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 +81 -10
- 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_bus/config.py +3 -1
- claude_mpm/services/event_log.py +325 -0
- claude_mpm/services/git/git_operations_service.py +101 -16
- 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.py +9 -2
- claude_mpm/services/monitor/daemon_manager.py +54 -7
- claude_mpm/services/monitor/management/lifecycle.py +15 -3
- claude_mpm/services/monitor/server.py +796 -30
- claude_mpm/services/pm_skills_deployer.py +884 -0
- claude_mpm/services/profile_manager.py +337 -0
- claude_mpm/services/project/project_organizer.py +4 -0
- claude_mpm/services/self_upgrade_service.py +120 -12
- claude_mpm/services/skills/__init__.py +3 -0
- claude_mpm/services/skills/git_skill_source_manager.py +303 -12
- claude_mpm/services/skills/selective_skill_deployer.py +869 -0
- claude_mpm/services/skills/skill_discovery_service.py +74 -4
- claude_mpm/services/skills/skill_to_agent_mapper.py +406 -0
- claude_mpm/services/skills_deployer.py +294 -55
- claude_mpm/services/socketio/dashboard_server.py +1 -0
- claude_mpm/services/socketio/event_normalizer.py +51 -6
- claude_mpm/services/socketio/handlers/hook.py +14 -7
- claude_mpm/services/socketio/server/core.py +386 -108
- claude_mpm/services/socketio/server/main.py +12 -4
- claude_mpm/services/version_control/git_operations.py +103 -0
- 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 +17 -44
- claude_mpm/utils/gitignore.py +3 -0
- claude_mpm/utils/migration.py +4 -4
- claude_mpm/utils/robust_installer.py +86 -21
- claude_mpm-5.6.23.dist-info/METADATA +393 -0
- {claude_mpm-5.0.9.dist-info → claude_mpm-5.6.23.dist-info}/RECORD +508 -261
- claude_mpm-5.6.23.dist-info/entry_points.txt +5 -0
- claude_mpm-5.6.23.dist-info/licenses/LICENSE +94 -0
- claude_mpm-5.6.23.dist-info/licenses/LICENSE-FAQ.md +153 -0
- claude_mpm/agents/BASE_AGENT_TEMPLATE.md +0 -292
- claude_mpm/agents/BASE_DOCUMENTATION.md +0 -53
- claude_mpm/agents/BASE_OPS.md +0 -219
- claude_mpm/agents/BASE_PM.md +0 -480
- claude_mpm/agents/BASE_PROMPT_ENGINEER.md +0 -787
- claude_mpm/agents/BASE_QA.md +0 -167
- claude_mpm/agents/BASE_RESEARCH.md +0 -53
- claude_mpm/agents/OUTPUT_STYLE.md +0 -290
- claude_mpm/agents/PM_INSTRUCTIONS_TEACH.md +0 -1322
- claude_mpm/agents/base_agent_loader.py +0 -601
- claude_mpm/cli/commands/agents_detect.py +0 -380
- claude_mpm/cli/commands/agents_recommend.py +0 -309
- claude_mpm/cli/ticket_cli.py +0 -35
- claude_mpm/commands/mpm-agents-auto-configure.md +0 -278
- claude_mpm/commands/mpm-agents-detect.md +0 -177
- claude_mpm/commands/mpm-agents-list.md +0 -131
- claude_mpm/commands/mpm-agents-recommend.md +0 -223
- claude_mpm/commands/mpm-config-view.md +0 -150
- claude_mpm/commands/mpm-ticket-organize.md +0 -304
- claude_mpm/dashboard/analysis_runner.py +0 -455
- claude_mpm/dashboard/index.html +0 -13
- claude_mpm/dashboard/open_dashboard.py +0 -66
- claude_mpm/dashboard/static/css/activity.css +0 -1958
- claude_mpm/dashboard/static/css/connection-status.css +0 -370
- claude_mpm/dashboard/static/css/dashboard.css +0 -4701
- claude_mpm/dashboard/static/js/components/activity-tree.js +0 -1871
- claude_mpm/dashboard/static/js/components/agent-hierarchy.js +0 -777
- claude_mpm/dashboard/static/js/components/agent-inference.js +0 -956
- claude_mpm/dashboard/static/js/components/build-tracker.js +0 -333
- claude_mpm/dashboard/static/js/components/code-simple.js +0 -857
- claude_mpm/dashboard/static/js/components/connection-debug.js +0 -654
- claude_mpm/dashboard/static/js/components/diff-viewer.js +0 -891
- claude_mpm/dashboard/static/js/components/event-processor.js +0 -542
- claude_mpm/dashboard/static/js/components/event-viewer.js +0 -1155
- claude_mpm/dashboard/static/js/components/export-manager.js +0 -368
- claude_mpm/dashboard/static/js/components/file-change-tracker.js +0 -443
- claude_mpm/dashboard/static/js/components/file-change-viewer.js +0 -690
- claude_mpm/dashboard/static/js/components/file-tool-tracker.js +0 -724
- claude_mpm/dashboard/static/js/components/file-viewer.js +0 -580
- claude_mpm/dashboard/static/js/components/hud-library-loader.js +0 -211
- claude_mpm/dashboard/static/js/components/hud-manager.js +0 -671
- claude_mpm/dashboard/static/js/components/hud-visualizer.js +0 -1718
- claude_mpm/dashboard/static/js/components/module-viewer.js +0 -2764
- claude_mpm/dashboard/static/js/components/session-manager.js +0 -579
- claude_mpm/dashboard/static/js/components/socket-manager.js +0 -368
- claude_mpm/dashboard/static/js/components/ui-state-manager.js +0 -749
- claude_mpm/dashboard/static/js/components/unified-data-viewer.js +0 -1824
- claude_mpm/dashboard/static/js/components/working-directory.js +0 -920
- claude_mpm/dashboard/static/js/connection-manager.js +0 -536
- claude_mpm/dashboard/static/js/dashboard.js +0 -1914
- claude_mpm/dashboard/static/js/extension-error-handler.js +0 -164
- claude_mpm/dashboard/static/js/socket-client.js +0 -1474
- claude_mpm/dashboard/static/js/tab-isolation-fix.js +0 -185
- claude_mpm/dashboard/static/socket.io.min.js +0 -7
- claude_mpm/dashboard/static/socket.io.v4.8.1.backup.js +0 -7
- claude_mpm/dashboard/templates/code_simple.html +0 -153
- claude_mpm/dashboard/templates/index.html +0 -606
- claude_mpm/dashboard/test_dashboard.html +0 -372
- claude_mpm/hooks/claude_hooks/__pycache__/__init__.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/event_handlers.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/hook_handler.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/memory_integration.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/response_tracking.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/tool_analysis.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/__init__.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/connection_manager_http.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/duplicate_detector.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/state_manager.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/subagent_processor.cpython-313.pyc +0 -0
- claude_mpm/scripts/mcp_server.py +0 -75
- claude_mpm/scripts/mcp_wrapper.py +0 -39
- claude_mpm/services/mcp_gateway/__init__.py +0 -159
- claude_mpm/services/mcp_gateway/auto_configure.py +0 -369
- claude_mpm/services/mcp_gateway/config/__init__.py +0 -17
- claude_mpm/services/mcp_gateway/config/config_loader.py +0 -296
- claude_mpm/services/mcp_gateway/config/config_schema.py +0 -243
- claude_mpm/services/mcp_gateway/config/configuration.py +0 -429
- claude_mpm/services/mcp_gateway/core/__init__.py +0 -43
- claude_mpm/services/mcp_gateway/core/base.py +0 -312
- claude_mpm/services/mcp_gateway/core/exceptions.py +0 -253
- claude_mpm/services/mcp_gateway/core/interfaces.py +0 -443
- claude_mpm/services/mcp_gateway/core/process_pool.py +0 -977
- claude_mpm/services/mcp_gateway/core/singleton_manager.py +0 -315
- claude_mpm/services/mcp_gateway/core/startup_verification.py +0 -316
- claude_mpm/services/mcp_gateway/main.py +0 -589
- claude_mpm/services/mcp_gateway/registry/__init__.py +0 -12
- claude_mpm/services/mcp_gateway/registry/service_registry.py +0 -412
- claude_mpm/services/mcp_gateway/registry/tool_registry.py +0 -489
- claude_mpm/services/mcp_gateway/server/__init__.py +0 -15
- claude_mpm/services/mcp_gateway/server/mcp_gateway.py +0 -414
- claude_mpm/services/mcp_gateway/server/stdio_handler.py +0 -372
- claude_mpm/services/mcp_gateway/server/stdio_server.py +0 -712
- claude_mpm/services/mcp_gateway/tools/__init__.py +0 -36
- claude_mpm/services/mcp_gateway/tools/base_adapter.py +0 -485
- claude_mpm/services/mcp_gateway/tools/document_summarizer.py +0 -789
- claude_mpm/services/mcp_gateway/tools/external_mcp_services.py +0 -654
- claude_mpm/services/mcp_gateway/tools/health_check_tool.py +0 -456
- claude_mpm/services/mcp_gateway/tools/hello_world.py +0 -551
- claude_mpm/services/mcp_gateway/tools/kuzu_memory_service.py +0 -555
- claude_mpm/services/mcp_gateway/utils/__init__.py +0 -14
- claude_mpm/services/mcp_gateway/utils/package_version_checker.py +0 -160
- claude_mpm/services/mcp_gateway/utils/update_preferences.py +0 -170
- claude_mpm-5.0.9.dist-info/METADATA +0 -1028
- claude_mpm-5.0.9.dist-info/entry_points.txt +0 -10
- claude_mpm-5.0.9.dist-info/licenses/LICENSE +0 -21
- {claude_mpm-5.0.9.dist-info → claude_mpm-5.6.23.dist-info}/WHEEL +0 -0
- {claude_mpm-5.0.9.dist-info → claude_mpm-5.6.23.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,413 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Document Summarization Command.
|
|
3
|
+
|
|
4
|
+
Shell-based alternative to MCP document_summarizer tool.
|
|
5
|
+
Provides algorithmic summarization without ML dependencies.
|
|
6
|
+
|
|
7
|
+
Design Decision: Uses simple text processing techniques:
|
|
8
|
+
- Brief: First paragraph extraction
|
|
9
|
+
- Detailed: Key sentence extraction based on position and length
|
|
10
|
+
- Bullet Points: Convert to markdown bullet list
|
|
11
|
+
- Executive: Opening + conclusion extraction
|
|
12
|
+
|
|
13
|
+
Why: Lightweight, fast, no dependencies, works offline.
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
import json
|
|
17
|
+
import re
|
|
18
|
+
from enum import Enum
|
|
19
|
+
from pathlib import Path
|
|
20
|
+
from typing import Optional
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class SummaryStyle(str, Enum):
|
|
24
|
+
"""Summary output styles."""
|
|
25
|
+
|
|
26
|
+
BRIEF = "brief"
|
|
27
|
+
DETAILED = "detailed"
|
|
28
|
+
BULLET_POINTS = "bullet_points"
|
|
29
|
+
EXECUTIVE = "executive"
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
class OutputFormat(str, Enum):
|
|
33
|
+
"""Output format types."""
|
|
34
|
+
|
|
35
|
+
TEXT = "text"
|
|
36
|
+
JSON = "json"
|
|
37
|
+
MARKDOWN = "markdown"
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
class DocumentSummarizer:
|
|
41
|
+
"""
|
|
42
|
+
Algorithmic document summarizer.
|
|
43
|
+
|
|
44
|
+
Design Decision: Use simple heuristics instead of ML:
|
|
45
|
+
- Position-based extraction (opening, closing paragraphs)
|
|
46
|
+
- Length-based filtering (key sentences)
|
|
47
|
+
- Structure detection (headings, lists)
|
|
48
|
+
|
|
49
|
+
Trade-offs:
|
|
50
|
+
- Performance: O(n) single pass vs. complex NLP models
|
|
51
|
+
- Accuracy: ~70% vs. ~90% for ML models
|
|
52
|
+
- Simplicity: Zero dependencies vs. heavy ML packages
|
|
53
|
+
"""
|
|
54
|
+
|
|
55
|
+
def __init__(self, max_words: int = 150):
|
|
56
|
+
"""Initialize summarizer with word limit."""
|
|
57
|
+
self.max_words = max_words
|
|
58
|
+
|
|
59
|
+
def summarize(
|
|
60
|
+
self, content: str, style: SummaryStyle, lines_limit: Optional[int] = None
|
|
61
|
+
) -> str:
|
|
62
|
+
"""
|
|
63
|
+
Summarize document content.
|
|
64
|
+
|
|
65
|
+
Args:
|
|
66
|
+
content: Document text to summarize
|
|
67
|
+
style: Summary style (brief, detailed, bullet_points, executive)
|
|
68
|
+
lines_limit: Optional line limit (reads first N lines only)
|
|
69
|
+
|
|
70
|
+
Returns:
|
|
71
|
+
Summary text
|
|
72
|
+
|
|
73
|
+
Complexity: O(n) where n is content length
|
|
74
|
+
"""
|
|
75
|
+
# Apply line limit if specified
|
|
76
|
+
if lines_limit:
|
|
77
|
+
content = self._limit_lines(content, lines_limit)
|
|
78
|
+
|
|
79
|
+
# Route to style-specific summarizer
|
|
80
|
+
summarizers = {
|
|
81
|
+
SummaryStyle.BRIEF: self._summarize_brief,
|
|
82
|
+
SummaryStyle.DETAILED: self._summarize_detailed,
|
|
83
|
+
SummaryStyle.BULLET_POINTS: self._summarize_bullet_points,
|
|
84
|
+
SummaryStyle.EXECUTIVE: self._summarize_executive,
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
summary = summarizers[style](content)
|
|
88
|
+
return self._truncate_to_word_limit(summary)
|
|
89
|
+
|
|
90
|
+
def _limit_lines(self, content: str, limit: int) -> str:
|
|
91
|
+
"""Limit content to first N lines."""
|
|
92
|
+
lines = content.split("\n")
|
|
93
|
+
return "\n".join(lines[:limit])
|
|
94
|
+
|
|
95
|
+
def _truncate_to_word_limit(self, text: str) -> str:
|
|
96
|
+
"""Truncate text to max_words limit."""
|
|
97
|
+
words = text.split()
|
|
98
|
+
if len(words) <= self.max_words:
|
|
99
|
+
return text
|
|
100
|
+
|
|
101
|
+
# Truncate and add ellipsis
|
|
102
|
+
truncated = " ".join(words[: self.max_words])
|
|
103
|
+
return f"{truncated}..."
|
|
104
|
+
|
|
105
|
+
def _summarize_brief(self, content: str) -> str:
|
|
106
|
+
"""
|
|
107
|
+
Brief summary: Extract first paragraph.
|
|
108
|
+
|
|
109
|
+
Heuristic: First non-empty paragraph usually introduces document.
|
|
110
|
+
"""
|
|
111
|
+
paragraphs = self._extract_paragraphs(content)
|
|
112
|
+
if not paragraphs:
|
|
113
|
+
return content.strip()
|
|
114
|
+
|
|
115
|
+
return paragraphs[0]
|
|
116
|
+
|
|
117
|
+
def _summarize_detailed(self, content: str) -> str:
|
|
118
|
+
"""
|
|
119
|
+
Detailed summary: Extract key sentences.
|
|
120
|
+
|
|
121
|
+
Heuristics:
|
|
122
|
+
- First paragraph (introduction)
|
|
123
|
+
- Sentences with important markers (however, therefore, important)
|
|
124
|
+
- Last paragraph (conclusion)
|
|
125
|
+
"""
|
|
126
|
+
paragraphs = self._extract_paragraphs(content)
|
|
127
|
+
if not paragraphs:
|
|
128
|
+
return content.strip()
|
|
129
|
+
|
|
130
|
+
key_sentences = []
|
|
131
|
+
|
|
132
|
+
# Add first paragraph
|
|
133
|
+
if paragraphs:
|
|
134
|
+
key_sentences.append(paragraphs[0])
|
|
135
|
+
|
|
136
|
+
# Add sentences with key markers from middle paragraphs
|
|
137
|
+
if len(paragraphs) > 2:
|
|
138
|
+
key_markers = [
|
|
139
|
+
"however",
|
|
140
|
+
"therefore",
|
|
141
|
+
"important",
|
|
142
|
+
"note",
|
|
143
|
+
"critical",
|
|
144
|
+
"key",
|
|
145
|
+
"must",
|
|
146
|
+
"should",
|
|
147
|
+
"recommended",
|
|
148
|
+
]
|
|
149
|
+
|
|
150
|
+
for para in paragraphs[1:-1]:
|
|
151
|
+
sentences = self._split_sentences(para)
|
|
152
|
+
for sentence in sentences:
|
|
153
|
+
if any(marker in sentence.lower() for marker in key_markers):
|
|
154
|
+
key_sentences.append(sentence)
|
|
155
|
+
break # One sentence per paragraph max
|
|
156
|
+
|
|
157
|
+
# Add last paragraph
|
|
158
|
+
if len(paragraphs) > 1:
|
|
159
|
+
key_sentences.append(paragraphs[-1])
|
|
160
|
+
|
|
161
|
+
return " ".join(key_sentences)
|
|
162
|
+
|
|
163
|
+
def _summarize_bullet_points(self, content: str) -> str:
|
|
164
|
+
"""
|
|
165
|
+
Bullet point summary: Convert paragraphs to markdown list.
|
|
166
|
+
|
|
167
|
+
Heuristic: Each paragraph becomes a bullet point.
|
|
168
|
+
"""
|
|
169
|
+
paragraphs = self._extract_paragraphs(content)
|
|
170
|
+
if not paragraphs:
|
|
171
|
+
return content.strip()
|
|
172
|
+
|
|
173
|
+
# Take key paragraphs (first, middle with markers, last)
|
|
174
|
+
key_paragraphs = []
|
|
175
|
+
|
|
176
|
+
# Always include first
|
|
177
|
+
if paragraphs:
|
|
178
|
+
key_paragraphs.append(paragraphs[0])
|
|
179
|
+
|
|
180
|
+
# Include middle paragraphs with key content
|
|
181
|
+
if len(paragraphs) > 2:
|
|
182
|
+
key_markers = ["however", "therefore", "important", "note", "critical"]
|
|
183
|
+
for para in paragraphs[1:-1]:
|
|
184
|
+
if any(marker in para.lower() for marker in key_markers):
|
|
185
|
+
# Take first sentence only for bullet point
|
|
186
|
+
first_sentence = self._split_sentences(para)[0]
|
|
187
|
+
key_paragraphs.append(first_sentence)
|
|
188
|
+
|
|
189
|
+
# Include last if different from first
|
|
190
|
+
if len(paragraphs) > 1:
|
|
191
|
+
key_paragraphs.append(paragraphs[-1])
|
|
192
|
+
|
|
193
|
+
# Format as markdown bullets
|
|
194
|
+
bullets = [f"- {para}" for para in key_paragraphs]
|
|
195
|
+
return "\n".join(bullets)
|
|
196
|
+
|
|
197
|
+
def _summarize_executive(self, content: str) -> str:
|
|
198
|
+
"""
|
|
199
|
+
Executive summary: Opening + conclusion.
|
|
200
|
+
|
|
201
|
+
Heuristic: First and last paragraphs capture overview and conclusion.
|
|
202
|
+
"""
|
|
203
|
+
paragraphs = self._extract_paragraphs(content)
|
|
204
|
+
if not paragraphs:
|
|
205
|
+
return content.strip()
|
|
206
|
+
|
|
207
|
+
if len(paragraphs) == 1:
|
|
208
|
+
return paragraphs[0]
|
|
209
|
+
|
|
210
|
+
# Opening paragraph + conclusion paragraph
|
|
211
|
+
return f"{paragraphs[0]}\n\n{paragraphs[-1]}"
|
|
212
|
+
|
|
213
|
+
def _extract_paragraphs(self, content: str) -> list[str]:
|
|
214
|
+
"""
|
|
215
|
+
Extract paragraphs from content.
|
|
216
|
+
|
|
217
|
+
Filters out:
|
|
218
|
+
- Empty lines
|
|
219
|
+
- Short lines (< 40 chars, likely headers/formatting artifacts)
|
|
220
|
+
- Code blocks (lines with multiple indentation)
|
|
221
|
+
- Lines that look like code (contain def, class, =, {, etc.)
|
|
222
|
+
"""
|
|
223
|
+
# Split on double newlines for paragraph boundaries
|
|
224
|
+
raw_paragraphs = re.split(r"\n\s*\n", content)
|
|
225
|
+
|
|
226
|
+
paragraphs = []
|
|
227
|
+
for para in raw_paragraphs:
|
|
228
|
+
# Clean and normalize whitespace
|
|
229
|
+
para = " ".join(para.split())
|
|
230
|
+
|
|
231
|
+
# Skip empty or very short paragraphs (likely headers)
|
|
232
|
+
if len(para) < 40:
|
|
233
|
+
continue
|
|
234
|
+
|
|
235
|
+
# Skip code blocks (heuristic: contains code-like patterns)
|
|
236
|
+
code_indicators = ["def ", "class ", " = ", "{", "}", "return ", "import "]
|
|
237
|
+
if any(indicator in para for indicator in code_indicators):
|
|
238
|
+
continue
|
|
239
|
+
|
|
240
|
+
paragraphs.append(para)
|
|
241
|
+
|
|
242
|
+
return paragraphs
|
|
243
|
+
|
|
244
|
+
def _split_sentences(self, text: str) -> list[str]:
|
|
245
|
+
"""
|
|
246
|
+
Split text into sentences.
|
|
247
|
+
|
|
248
|
+
Simple heuristic: Split on '. ' but handle common abbreviations.
|
|
249
|
+
"""
|
|
250
|
+
# Handle common abbreviations to avoid false splits
|
|
251
|
+
text = text.replace("Dr.", "Dr<DOT>")
|
|
252
|
+
text = text.replace("Mr.", "Mr<DOT>")
|
|
253
|
+
text = text.replace("Mrs.", "Mrs<DOT>")
|
|
254
|
+
text = text.replace("e.g.", "e<DOT>g<DOT>")
|
|
255
|
+
text = text.replace("i.e.", "i<DOT>e<DOT>")
|
|
256
|
+
|
|
257
|
+
# Split on sentence boundaries
|
|
258
|
+
sentences = re.split(r"(?<=[.!?])\s+", text)
|
|
259
|
+
|
|
260
|
+
# Restore abbreviations
|
|
261
|
+
sentences = [s.replace("<DOT>", ".") for s in sentences]
|
|
262
|
+
|
|
263
|
+
return [s.strip() for s in sentences if s.strip()]
|
|
264
|
+
|
|
265
|
+
|
|
266
|
+
def format_output(summary: str, output_format: OutputFormat, file_path: Path) -> str:
|
|
267
|
+
"""
|
|
268
|
+
Format summary output.
|
|
269
|
+
|
|
270
|
+
Args:
|
|
271
|
+
summary: Summary text
|
|
272
|
+
output_format: Output format (text, json, markdown)
|
|
273
|
+
file_path: Original file path for metadata
|
|
274
|
+
|
|
275
|
+
Returns:
|
|
276
|
+
Formatted output string
|
|
277
|
+
"""
|
|
278
|
+
if output_format == OutputFormat.TEXT:
|
|
279
|
+
return summary
|
|
280
|
+
|
|
281
|
+
if output_format == OutputFormat.JSON:
|
|
282
|
+
result = {
|
|
283
|
+
"file": str(file_path),
|
|
284
|
+
"summary": summary,
|
|
285
|
+
"word_count": len(summary.split()),
|
|
286
|
+
}
|
|
287
|
+
return json.dumps(result, indent=2)
|
|
288
|
+
|
|
289
|
+
if output_format == OutputFormat.MARKDOWN:
|
|
290
|
+
return f"# Summary: {file_path.name}\n\n{summary}\n"
|
|
291
|
+
|
|
292
|
+
return summary
|
|
293
|
+
|
|
294
|
+
|
|
295
|
+
def summarize_command(args) -> int:
|
|
296
|
+
"""
|
|
297
|
+
Execute summarize command.
|
|
298
|
+
|
|
299
|
+
Args:
|
|
300
|
+
args: Parsed command line arguments with:
|
|
301
|
+
- file_path: Path to file to summarize
|
|
302
|
+
- style: Summary style
|
|
303
|
+
- max_words: Maximum words in summary
|
|
304
|
+
- output: Output format
|
|
305
|
+
- lines: Optional line limit
|
|
306
|
+
|
|
307
|
+
Returns:
|
|
308
|
+
Exit code (0 for success, 1 for error)
|
|
309
|
+
"""
|
|
310
|
+
file_path = Path(args.file_path)
|
|
311
|
+
|
|
312
|
+
# Validate file exists
|
|
313
|
+
if not file_path.exists():
|
|
314
|
+
print(f"Error: File not found: {file_path}")
|
|
315
|
+
return 1
|
|
316
|
+
|
|
317
|
+
if not file_path.is_file():
|
|
318
|
+
print(f"Error: Not a file: {file_path}")
|
|
319
|
+
return 1
|
|
320
|
+
|
|
321
|
+
try:
|
|
322
|
+
# Read file content
|
|
323
|
+
content = file_path.read_text(encoding="utf-8")
|
|
324
|
+
|
|
325
|
+
# Create summarizer
|
|
326
|
+
summarizer = DocumentSummarizer(max_words=args.max_words)
|
|
327
|
+
|
|
328
|
+
# Generate summary
|
|
329
|
+
summary = summarizer.summarize(
|
|
330
|
+
content, style=SummaryStyle(args.style), lines_limit=args.lines
|
|
331
|
+
)
|
|
332
|
+
|
|
333
|
+
# Format output
|
|
334
|
+
output = format_output(summary, OutputFormat(args.output), file_path)
|
|
335
|
+
|
|
336
|
+
# Print result
|
|
337
|
+
print(output)
|
|
338
|
+
|
|
339
|
+
return 0
|
|
340
|
+
|
|
341
|
+
except UnicodeDecodeError:
|
|
342
|
+
print(f"Error: Cannot read file (not valid UTF-8): {file_path}")
|
|
343
|
+
return 1
|
|
344
|
+
except Exception as e:
|
|
345
|
+
print(f"Error: {e}")
|
|
346
|
+
return 1
|
|
347
|
+
|
|
348
|
+
|
|
349
|
+
def add_summarize_parser(subparsers) -> None:
|
|
350
|
+
"""
|
|
351
|
+
Add summarize subcommand parser.
|
|
352
|
+
|
|
353
|
+
Args:
|
|
354
|
+
subparsers: Subparsers object from argparse
|
|
355
|
+
"""
|
|
356
|
+
parser = subparsers.add_parser(
|
|
357
|
+
"summarize",
|
|
358
|
+
help="Summarize document content (shell-based alternative to MCP document_summarizer)",
|
|
359
|
+
description="""
|
|
360
|
+
Algorithmic document summarization without ML dependencies.
|
|
361
|
+
|
|
362
|
+
Styles:
|
|
363
|
+
brief - First paragraph only (quick overview)
|
|
364
|
+
detailed - Key sentences from opening, middle, closing
|
|
365
|
+
bullet_points - Markdown bullet list of key points
|
|
366
|
+
executive - Opening + conclusion (for quick decisions)
|
|
367
|
+
|
|
368
|
+
Examples:
|
|
369
|
+
claude-mpm summarize README.md
|
|
370
|
+
claude-mpm summarize docs/guide.md --style detailed --max-words 200
|
|
371
|
+
claude-mpm summarize src/main.py --style bullet_points --output markdown
|
|
372
|
+
claude-mpm summarize large.txt --lines 100 --style brief
|
|
373
|
+
""",
|
|
374
|
+
formatter_class=lambda prog: __import__("argparse").RawDescriptionHelpFormatter(
|
|
375
|
+
prog, max_help_position=40
|
|
376
|
+
),
|
|
377
|
+
)
|
|
378
|
+
|
|
379
|
+
# Required arguments
|
|
380
|
+
parser.add_argument("file_path", type=str, help="Path to file to summarize")
|
|
381
|
+
|
|
382
|
+
# Optional arguments
|
|
383
|
+
parser.add_argument(
|
|
384
|
+
"--style",
|
|
385
|
+
type=str,
|
|
386
|
+
choices=["brief", "detailed", "bullet_points", "executive"],
|
|
387
|
+
default="brief",
|
|
388
|
+
help="Summary style (default: brief)",
|
|
389
|
+
)
|
|
390
|
+
|
|
391
|
+
parser.add_argument(
|
|
392
|
+
"--max-words",
|
|
393
|
+
type=int,
|
|
394
|
+
default=150,
|
|
395
|
+
help="Maximum words in summary (default: 150)",
|
|
396
|
+
)
|
|
397
|
+
|
|
398
|
+
parser.add_argument(
|
|
399
|
+
"--output",
|
|
400
|
+
type=str,
|
|
401
|
+
choices=["text", "json", "markdown"],
|
|
402
|
+
default="text",
|
|
403
|
+
help="Output format (default: text)",
|
|
404
|
+
)
|
|
405
|
+
|
|
406
|
+
parser.add_argument(
|
|
407
|
+
"--lines",
|
|
408
|
+
type=int,
|
|
409
|
+
default=None,
|
|
410
|
+
help="Limit to first N lines of file (default: no limit)",
|
|
411
|
+
)
|
|
412
|
+
|
|
413
|
+
parser.set_defaults(command="summarize")
|
claude_mpm/cli/executor.py
CHANGED
|
@@ -24,6 +24,7 @@ from .commands import (
|
|
|
24
24
|
show_info,
|
|
25
25
|
)
|
|
26
26
|
from .commands.analyze_code import manage_analyze_code
|
|
27
|
+
from .commands.config import manage_config
|
|
27
28
|
from .commands.dashboard import manage_dashboard
|
|
28
29
|
from .commands.skills import manage_skills
|
|
29
30
|
from .commands.upgrade import upgrade
|
|
@@ -65,6 +66,7 @@ def ensure_run_attributes(args):
|
|
|
65
66
|
args.monitor = getattr(args, "monitor", False)
|
|
66
67
|
args.force = getattr(args, "force", False)
|
|
67
68
|
args.reload_agents = getattr(args, "reload_agents", False)
|
|
69
|
+
args.force_sync = getattr(args, "force_sync", False)
|
|
68
70
|
# Include dependency checking attributes
|
|
69
71
|
args.check_dependencies = getattr(args, "check_dependencies", True)
|
|
70
72
|
args.force_check_dependencies = getattr(args, "force_check_dependencies", False)
|
|
@@ -125,6 +127,14 @@ def execute_command(command: str, args) -> int:
|
|
|
125
127
|
result = handle_verify(args)
|
|
126
128
|
return result if result is not None else 0
|
|
127
129
|
|
|
130
|
+
# Handle commander command with lazy import
|
|
131
|
+
if command == "commander":
|
|
132
|
+
# Lazy import to avoid loading unless needed
|
|
133
|
+
from .commands.commander import handle_commander_command
|
|
134
|
+
|
|
135
|
+
result = handle_commander_command(args)
|
|
136
|
+
return result if result is not None else 0
|
|
137
|
+
|
|
128
138
|
# Handle skill-source command with lazy import
|
|
129
139
|
if command == "skill-source":
|
|
130
140
|
# Lazy import to avoid loading unless needed
|
|
@@ -141,6 +151,24 @@ def execute_command(command: str, args) -> int:
|
|
|
141
151
|
result = agent_source_command(args)
|
|
142
152
|
return result if result is not None else 0
|
|
143
153
|
|
|
154
|
+
# Handle summarize command with lazy import
|
|
155
|
+
if command == "summarize":
|
|
156
|
+
# Lazy import to avoid loading unless needed
|
|
157
|
+
from .commands.summarize import summarize_command
|
|
158
|
+
|
|
159
|
+
result = summarize_command(args)
|
|
160
|
+
return result if result is not None else 0
|
|
161
|
+
|
|
162
|
+
# Handle profile command with lazy import
|
|
163
|
+
if command == "profile":
|
|
164
|
+
# Lazy import to avoid loading unless needed
|
|
165
|
+
from .commands.profile import ProfileCommand
|
|
166
|
+
|
|
167
|
+
cmd = ProfileCommand()
|
|
168
|
+
result = cmd.run(args)
|
|
169
|
+
# Convert CommandResult to exit code
|
|
170
|
+
return result.exit_code if result else 0
|
|
171
|
+
|
|
144
172
|
# Handle auto-configure command with lazy import
|
|
145
173
|
if command == "auto-configure":
|
|
146
174
|
# Lazy import to avoid loading unless needed
|
|
@@ -186,35 +214,127 @@ def execute_command(command: str, args) -> int:
|
|
|
186
214
|
"status": show_status,
|
|
187
215
|
}
|
|
188
216
|
|
|
189
|
-
# Get handler and
|
|
217
|
+
# Get handler and call it with argument list (same pattern as autotodos)
|
|
190
218
|
handler = handlers.get(subcommand)
|
|
191
219
|
if handler:
|
|
192
|
-
|
|
193
|
-
|
|
220
|
+
try:
|
|
221
|
+
# Build argument list for Click command based on subcommand
|
|
222
|
+
click_args = []
|
|
223
|
+
|
|
224
|
+
# list command: --format, --hook-type
|
|
225
|
+
if subcommand == "list":
|
|
226
|
+
if hasattr(args, "format") and args.format:
|
|
227
|
+
click_args.extend(["--format", args.format])
|
|
228
|
+
if hasattr(args, "hook_type") and args.hook_type:
|
|
229
|
+
click_args.extend(["--hook-type", args.hook_type])
|
|
230
|
+
# clear command: --hook-type, -y
|
|
231
|
+
elif subcommand == "clear":
|
|
232
|
+
if hasattr(args, "hook_type") and args.hook_type:
|
|
233
|
+
click_args.extend(["--hook-type", args.hook_type])
|
|
234
|
+
if hasattr(args, "yes") and args.yes:
|
|
235
|
+
click_args.append("-y")
|
|
236
|
+
# diagnose command: hook_type (positional argument)
|
|
237
|
+
elif subcommand == "diagnose":
|
|
238
|
+
if hasattr(args, "hook_type") and args.hook_type:
|
|
239
|
+
click_args.append(args.hook_type)
|
|
240
|
+
# status and summary commands: no options
|
|
241
|
+
|
|
242
|
+
# Call Click command with argument list and standalone_mode=False
|
|
243
|
+
handler(click_args, standalone_mode=False)
|
|
244
|
+
return 0
|
|
245
|
+
except SystemExit as e:
|
|
246
|
+
return e.code if e.code is not None else 0
|
|
247
|
+
except Exception as e:
|
|
248
|
+
print(f"Error: {e}")
|
|
249
|
+
return 1
|
|
250
|
+
else:
|
|
251
|
+
print(f"Unknown hook-errors subcommand: {subcommand}")
|
|
252
|
+
return 1
|
|
194
253
|
|
|
195
|
-
|
|
254
|
+
# Handle autotodos command with lazy import
|
|
255
|
+
if command == "autotodos":
|
|
256
|
+
# Lazy import to avoid loading unless needed
|
|
257
|
+
from .commands.autotodos import (
|
|
258
|
+
clear_autotodos,
|
|
259
|
+
inject_autotodos,
|
|
260
|
+
list_autotodos,
|
|
261
|
+
list_pm_violations,
|
|
262
|
+
scan_delegation_patterns,
|
|
263
|
+
show_autotodos_status,
|
|
264
|
+
)
|
|
265
|
+
|
|
266
|
+
# Get subcommand
|
|
267
|
+
subcommand = getattr(args, "autotodos_command", "status")
|
|
268
|
+
if not subcommand:
|
|
269
|
+
subcommand = "status"
|
|
196
270
|
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
271
|
+
# Map subcommands to functions
|
|
272
|
+
handlers = {
|
|
273
|
+
"list": list_autotodos,
|
|
274
|
+
"inject": inject_autotodos,
|
|
275
|
+
"clear": clear_autotodos,
|
|
276
|
+
"status": show_autotodos_status,
|
|
277
|
+
"scan": scan_delegation_patterns,
|
|
278
|
+
"violations": list_pm_violations,
|
|
279
|
+
}
|
|
205
280
|
|
|
281
|
+
# Get handler and call it with standalone_mode=False
|
|
282
|
+
handler = handlers.get(subcommand)
|
|
283
|
+
if handler:
|
|
206
284
|
try:
|
|
207
|
-
#
|
|
208
|
-
|
|
209
|
-
|
|
285
|
+
# Build argument list for Click command
|
|
286
|
+
click_args = []
|
|
287
|
+
|
|
288
|
+
if subcommand == "list":
|
|
289
|
+
fmt = getattr(args, "format", "table")
|
|
290
|
+
click_args = ["--format", fmt]
|
|
291
|
+
elif subcommand == "inject":
|
|
292
|
+
output = getattr(args, "output", None)
|
|
293
|
+
if output:
|
|
294
|
+
click_args = ["--output", output]
|
|
295
|
+
elif subcommand == "clear":
|
|
296
|
+
error_key = getattr(args, "error_key", None)
|
|
297
|
+
event_type = getattr(args, "event_type", "all")
|
|
298
|
+
if error_key:
|
|
299
|
+
click_args.append("--error-key")
|
|
300
|
+
click_args.append(error_key)
|
|
301
|
+
if event_type != "all":
|
|
302
|
+
click_args.append("--event-type")
|
|
303
|
+
click_args.append(event_type)
|
|
304
|
+
if getattr(args, "yes", False):
|
|
305
|
+
click_args.append("-y")
|
|
306
|
+
elif subcommand == "scan":
|
|
307
|
+
text = getattr(args, "text", None)
|
|
308
|
+
file = getattr(args, "file", None)
|
|
309
|
+
fmt = getattr(args, "format", "table")
|
|
310
|
+
save = getattr(args, "save", False)
|
|
311
|
+
|
|
312
|
+
if text:
|
|
313
|
+
click_args.append(text)
|
|
314
|
+
if file:
|
|
315
|
+
click_args.extend(["--file", file])
|
|
316
|
+
if fmt != "table":
|
|
317
|
+
click_args.extend(["--format", fmt])
|
|
318
|
+
if save:
|
|
319
|
+
click_args.append("--save")
|
|
320
|
+
elif subcommand == "violations":
|
|
321
|
+
fmt = getattr(args, "format", "table")
|
|
322
|
+
if fmt != "table":
|
|
323
|
+
click_args.extend(["--format", fmt])
|
|
324
|
+
|
|
325
|
+
# Call Click command with argument list and standalone_mode=False
|
|
326
|
+
handler(click_args, standalone_mode=False)
|
|
210
327
|
return 0
|
|
211
328
|
except SystemExit as e:
|
|
212
329
|
return e.code if e.code is not None else 0
|
|
213
330
|
except Exception as e:
|
|
214
331
|
print(f"Error: {e}")
|
|
332
|
+
import traceback
|
|
333
|
+
|
|
334
|
+
traceback.print_exc()
|
|
215
335
|
return 1
|
|
216
336
|
else:
|
|
217
|
-
print(f"Unknown
|
|
337
|
+
print(f"Unknown autotodos subcommand: {subcommand}")
|
|
218
338
|
return 1
|
|
219
339
|
|
|
220
340
|
# Map stable commands to their implementations
|
|
@@ -228,9 +348,8 @@ def execute_command(command: str, args) -> int:
|
|
|
228
348
|
CLICommands.MEMORY.value: manage_memory,
|
|
229
349
|
CLICommands.MONITOR.value: manage_monitor,
|
|
230
350
|
CLICommands.DASHBOARD.value: manage_dashboard,
|
|
231
|
-
# Configuration management commands
|
|
232
|
-
#
|
|
233
|
-
CLICommands.CONFIG.value: manage_configure, # Alias to configure
|
|
351
|
+
# Configuration management commands
|
|
352
|
+
CLICommands.CONFIG.value: manage_config, # Unified config with subcommands
|
|
234
353
|
CLICommands.CONFIGURE.value: manage_configure, # Interactive configuration TUI
|
|
235
354
|
CLICommands.AGGREGATE.value: aggregate_command,
|
|
236
355
|
CLICommands.ANALYZE_CODE.value: manage_analyze_code,
|
|
@@ -241,6 +360,7 @@ def execute_command(command: str, args) -> int:
|
|
|
241
360
|
CLICommands.SKILLS.value: manage_skills,
|
|
242
361
|
"debug": manage_debug, # Add debug command
|
|
243
362
|
"mpm-init": None, # Will be handled separately with lazy import
|
|
363
|
+
"commander": None, # Will be handled separately with lazy import
|
|
244
364
|
}
|
|
245
365
|
|
|
246
366
|
# Execute command if found
|
|
@@ -268,6 +388,8 @@ def execute_command(command: str, args) -> int:
|
|
|
268
388
|
"local-deploy",
|
|
269
389
|
"skill-source",
|
|
270
390
|
"agent-source",
|
|
391
|
+
"hook-errors",
|
|
392
|
+
"autotodos",
|
|
271
393
|
]
|
|
272
394
|
|
|
273
395
|
suggestion = suggest_similar_commands(command, all_commands)
|
|
@@ -10,12 +10,22 @@ from .agent_wizard import (
|
|
|
10
10
|
run_interactive_agent_manager,
|
|
11
11
|
run_interactive_agent_wizard,
|
|
12
12
|
)
|
|
13
|
+
from .questionary_styles import (
|
|
14
|
+
BANNER_WIDTH,
|
|
15
|
+
MPM_STYLE,
|
|
16
|
+
print_banner,
|
|
17
|
+
print_section_header,
|
|
18
|
+
)
|
|
13
19
|
from .skills_wizard import SkillsWizard, discover_and_link_runtime_skills
|
|
14
20
|
|
|
15
21
|
__all__ = [
|
|
22
|
+
"BANNER_WIDTH",
|
|
23
|
+
"MPM_STYLE",
|
|
16
24
|
"AgentWizard",
|
|
17
25
|
"SkillsWizard",
|
|
18
26
|
"discover_and_link_runtime_skills",
|
|
27
|
+
"print_banner",
|
|
28
|
+
"print_section_header",
|
|
19
29
|
"run_interactive_agent_manager",
|
|
20
30
|
"run_interactive_agent_wizard",
|
|
21
31
|
]
|