claude-mpm 5.4.41__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/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 +161 -298
- 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 +216 -0
- claude_mpm/cli/commands/configure.py +620 -21
- claude_mpm/cli/commands/configure_agent_display.py +3 -1
- 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 +15 -8
- claude_mpm/cli/commands/profile.py +9 -10
- claude_mpm/cli/commands/run.py +35 -3
- claude_mpm/cli/commands/skill_source.py +51 -2
- claude_mpm/cli/commands/skills.py +182 -32
- claude_mpm/cli/executor.py +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 +116 -0
- claude_mpm/cli/parsers/profile_parser.py +0 -1
- claude_mpm/cli/parsers/run_parser.py +10 -0
- claude_mpm/cli/parsers/skill_source_parser.py +4 -0
- claude_mpm/cli/parsers/skills_parser.py +2 -3
- claude_mpm/cli/startup.py +527 -506
- 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 +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/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 +35 -22
- claude_mpm/core/config_constants.py +74 -9
- claude_mpm/core/constants.py +56 -12
- claude_mpm/core/hook_manager.py +51 -3
- claude_mpm/core/interactive_session.py +12 -11
- claude_mpm/core/logger.py +26 -9
- claude_mpm/core/logging_utils.py +35 -11
- claude_mpm/core/network_config.py +148 -0
- claude_mpm/core/oneshot_session.py +7 -6
- claude_mpm/core/optimized_startup.py +3 -1
- claude_mpm/core/output_style_manager.py +63 -18
- claude_mpm/core/shared/config_loader.py +3 -1
- claude_mpm/core/socketio_pool.py +13 -5
- claude_mpm/core/unified_config.py +54 -8
- claude_mpm/core/unified_paths.py +95 -90
- 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/{uj46x2Wr.js → BSNlmTZj.js} +1 -1
- 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/{N4qtv3Hx.js → DR8nis88.js} +2 -2
- 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/{DjhvlsAc.js → NqQ1dWOy.js} +1 -1
- 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.CAGBuiOw.js → 0.RgBboRvH.js} +1 -1
- 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 -1
- claude_mpm/dashboard/static/svelte-build/index.html +11 -11
- 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__/auto_pause_handler.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/auto_pause_handler.py +485 -0
- claude_mpm/hooks/claude_hooks/event_handlers.py +305 -87
- 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 +116 -8
- claude_mpm/hooks/claude_hooks/memory_integration.py +51 -31
- claude_mpm/hooks/claude_hooks/response_tracking.py +42 -59
- claude_mpm/hooks/claude_hooks/services/__pycache__/connection_manager_http.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 +39 -24
- 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/session_resume_hook.py +89 -1
- claude_mpm/hooks/templates/pre_tool_use_template.py +10 -2
- claude_mpm/init.py +215 -2
- claude_mpm/scripts/claude-hook-handler.sh +43 -16
- claude_mpm/services/agents/agent_recommendation_service.py +8 -8
- claude_mpm/services/agents/agent_selection_service.py +2 -2
- claude_mpm/services/agents/cache_git_manager.py +1 -1
- claude_mpm/services/agents/deployment/agent_discovery_service.py +3 -1
- claude_mpm/services/agents/deployment/agent_format_converter.py +25 -13
- claude_mpm/services/agents/deployment/agent_template_builder.py +37 -17
- 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 +36 -8
- claude_mpm/services/agents/deployment/remote_agent_discovery_service.py +50 -26
- claude_mpm/services/agents/deployment/startup_reconciliation.py +138 -0
- claude_mpm/services/agents/git_source_manager.py +21 -2
- claude_mpm/services/agents/loading/framework_agent_loader.py +75 -2
- claude_mpm/services/agents/single_tier_deployment_service.py +4 -4
- claude_mpm/services/agents/sources/git_source_sync_service.py +116 -5
- 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 -3
- claude_mpm/services/monitor/server.py +106 -16
- claude_mpm/services/pm_skills_deployer.py +302 -94
- claude_mpm/services/profile_manager.py +10 -4
- claude_mpm/services/skills/git_skill_source_manager.py +192 -29
- claude_mpm/services/skills/selective_skill_deployer.py +211 -46
- claude_mpm/services/skills/skill_discovery_service.py +74 -4
- claude_mpm/services/skills_deployer.py +192 -70
- claude_mpm/services/socketio/handlers/hook.py +14 -7
- claude_mpm/services/socketio/server/main.py +12 -4
- claude_mpm/skills/__init__.py +2 -1
- claude_mpm/skills/bundled/collaboration/brainstorming/SKILL.md +79 -0
- claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/SKILL.md +178 -0
- claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/agent-prompts.md +577 -0
- claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/coordination-patterns.md +467 -0
- claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/examples.md +537 -0
- claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/troubleshooting.md +730 -0
- claude_mpm/skills/bundled/collaboration/git-worktrees.md +317 -0
- claude_mpm/skills/bundled/collaboration/requesting-code-review/SKILL.md +112 -0
- claude_mpm/skills/bundled/collaboration/requesting-code-review/references/code-reviewer-template.md +146 -0
- claude_mpm/skills/bundled/collaboration/requesting-code-review/references/review-examples.md +412 -0
- claude_mpm/skills/bundled/collaboration/stacked-prs.md +251 -0
- claude_mpm/skills/bundled/collaboration/writing-plans/SKILL.md +81 -0
- claude_mpm/skills/bundled/collaboration/writing-plans/references/best-practices.md +362 -0
- claude_mpm/skills/bundled/collaboration/writing-plans/references/plan-structure-templates.md +312 -0
- claude_mpm/skills/bundled/debugging/root-cause-tracing/SKILL.md +152 -0
- claude_mpm/skills/bundled/debugging/root-cause-tracing/references/advanced-techniques.md +668 -0
- claude_mpm/skills/bundled/debugging/root-cause-tracing/references/examples.md +587 -0
- claude_mpm/skills/bundled/debugging/root-cause-tracing/references/integration.md +438 -0
- claude_mpm/skills/bundled/debugging/root-cause-tracing/references/tracing-techniques.md +391 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/CREATION-LOG.md +119 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/SKILL.md +148 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/references/anti-patterns.md +483 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/references/examples.md +452 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/references/troubleshooting.md +449 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/references/workflow.md +411 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/test-academic.md +14 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-1.md +58 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-2.md +68 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-3.md +69 -0
- claude_mpm/skills/bundled/debugging/verification-before-completion/SKILL.md +131 -0
- claude_mpm/skills/bundled/debugging/verification-before-completion/references/gate-function.md +325 -0
- claude_mpm/skills/bundled/debugging/verification-before-completion/references/integration-and-workflows.md +490 -0
- claude_mpm/skills/bundled/debugging/verification-before-completion/references/red-flags-and-failures.md +425 -0
- claude_mpm/skills/bundled/debugging/verification-before-completion/references/verification-patterns.md +499 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/INTEGRATION.md +611 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/README.md +596 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/SKILL.md +260 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/examples/nextjs-env-structure.md +315 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/references/frameworks.md +436 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/references/security.md +433 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/references/synchronization.md +452 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/references/troubleshooting.md +404 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/references/validation.md +420 -0
- claude_mpm/skills/bundled/main/artifacts-builder/SKILL.md +86 -0
- claude_mpm/skills/bundled/main/internal-comms/SKILL.md +43 -0
- claude_mpm/skills/bundled/main/internal-comms/examples/3p-updates.md +47 -0
- claude_mpm/skills/bundled/main/internal-comms/examples/company-newsletter.md +65 -0
- claude_mpm/skills/bundled/main/internal-comms/examples/faq-answers.md +30 -0
- claude_mpm/skills/bundled/main/internal-comms/examples/general-comms.md +16 -0
- claude_mpm/skills/bundled/main/mcp-builder/SKILL.md +160 -0
- claude_mpm/skills/bundled/main/mcp-builder/reference/design_principles.md +412 -0
- claude_mpm/skills/bundled/main/mcp-builder/reference/evaluation.md +602 -0
- claude_mpm/skills/bundled/main/mcp-builder/reference/mcp_best_practices.md +915 -0
- claude_mpm/skills/bundled/main/mcp-builder/reference/node_mcp_server.md +916 -0
- claude_mpm/skills/bundled/main/mcp-builder/reference/python_mcp_server.md +752 -0
- claude_mpm/skills/bundled/main/mcp-builder/reference/workflow.md +1237 -0
- claude_mpm/skills/bundled/main/skill-creator/SKILL.md +189 -0
- claude_mpm/skills/bundled/main/skill-creator/references/best-practices.md +500 -0
- claude_mpm/skills/bundled/main/skill-creator/references/creation-workflow.md +464 -0
- claude_mpm/skills/bundled/main/skill-creator/references/examples.md +619 -0
- claude_mpm/skills/bundled/main/skill-creator/references/progressive-disclosure.md +437 -0
- claude_mpm/skills/bundled/main/skill-creator/references/skill-structure.md +231 -0
- claude_mpm/skills/bundled/php/espocrm-development/SKILL.md +170 -0
- claude_mpm/skills/bundled/php/espocrm-development/references/architecture.md +602 -0
- claude_mpm/skills/bundled/php/espocrm-development/references/common-tasks.md +821 -0
- claude_mpm/skills/bundled/php/espocrm-development/references/development-workflow.md +742 -0
- claude_mpm/skills/bundled/php/espocrm-development/references/frontend-customization.md +726 -0
- claude_mpm/skills/bundled/php/espocrm-development/references/hooks-and-services.md +764 -0
- claude_mpm/skills/bundled/php/espocrm-development/references/testing-debugging.md +831 -0
- claude_mpm/skills/bundled/pm/mpm/SKILL.md +38 -0
- claude_mpm/skills/bundled/pm/mpm-agent-update-workflow/SKILL.md +75 -0
- claude_mpm/skills/bundled/pm/mpm-bug-reporting/SKILL.md +248 -0
- claude_mpm/skills/bundled/pm/mpm-circuit-breaker-enforcement/SKILL.md +476 -0
- claude_mpm/skills/bundled/pm/mpm-config/SKILL.md +29 -0
- claude_mpm/skills/bundled/pm/mpm-delegation-patterns/SKILL.md +167 -0
- claude_mpm/skills/bundled/pm/mpm-doctor/SKILL.md +53 -0
- claude_mpm/skills/bundled/pm/mpm-git-file-tracking/SKILL.md +113 -0
- claude_mpm/skills/bundled/pm/mpm-help/SKILL.md +35 -0
- claude_mpm/skills/bundled/pm/mpm-init/SKILL.md +125 -0
- claude_mpm/skills/bundled/pm/mpm-monitor/SKILL.md +32 -0
- claude_mpm/skills/bundled/pm/mpm-organize/SKILL.md +121 -0
- claude_mpm/skills/bundled/pm/mpm-postmortem/SKILL.md +22 -0
- claude_mpm/skills/bundled/pm/mpm-pr-workflow/SKILL.md +124 -0
- claude_mpm/skills/bundled/pm/mpm-session-management/SKILL.md +312 -0
- claude_mpm/skills/bundled/pm/mpm-session-pause/SKILL.md +170 -0
- claude_mpm/skills/bundled/pm/mpm-session-resume/SKILL.md +31 -0
- claude_mpm/skills/bundled/pm/mpm-status/SKILL.md +37 -0
- claude_mpm/skills/bundled/pm/mpm-teaching-mode/SKILL.md +657 -0
- claude_mpm/skills/bundled/pm/mpm-ticket-view/SKILL.md +110 -0
- claude_mpm/skills/bundled/pm/mpm-ticketing-integration/SKILL.md +154 -0
- claude_mpm/skills/bundled/pm/mpm-tool-usage-guide/SKILL.md +386 -0
- claude_mpm/skills/bundled/pm/mpm-verification-protocols/SKILL.md +198 -0
- claude_mpm/skills/bundled/pm/mpm-version/SKILL.md +21 -0
- claude_mpm/skills/bundled/react/flexlayout-react.md +742 -0
- claude_mpm/skills/bundled/rust/desktop-applications/SKILL.md +226 -0
- claude_mpm/skills/bundled/rust/desktop-applications/references/architecture-patterns.md +901 -0
- claude_mpm/skills/bundled/rust/desktop-applications/references/native-gui-frameworks.md +901 -0
- claude_mpm/skills/bundled/rust/desktop-applications/references/platform-integration.md +775 -0
- claude_mpm/skills/bundled/rust/desktop-applications/references/state-management.md +937 -0
- claude_mpm/skills/bundled/rust/desktop-applications/references/tauri-framework.md +770 -0
- claude_mpm/skills/bundled/rust/desktop-applications/references/testing-deployment.md +961 -0
- claude_mpm/skills/bundled/security-scanning.md +112 -0
- claude_mpm/skills/bundled/tauri/tauri-async-patterns.md +495 -0
- claude_mpm/skills/bundled/tauri/tauri-build-deploy.md +599 -0
- claude_mpm/skills/bundled/tauri/tauri-command-patterns.md +535 -0
- claude_mpm/skills/bundled/tauri/tauri-error-handling.md +613 -0
- claude_mpm/skills/bundled/tauri/tauri-event-system.md +648 -0
- claude_mpm/skills/bundled/tauri/tauri-file-system.md +673 -0
- claude_mpm/skills/bundled/tauri/tauri-frontend-integration.md +767 -0
- claude_mpm/skills/bundled/tauri/tauri-performance.md +669 -0
- claude_mpm/skills/bundled/tauri/tauri-state-management.md +573 -0
- claude_mpm/skills/bundled/tauri/tauri-testing.md +384 -0
- claude_mpm/skills/bundled/tauri/tauri-window-management.md +628 -0
- claude_mpm/skills/bundled/testing/condition-based-waiting/SKILL.md +119 -0
- claude_mpm/skills/bundled/testing/condition-based-waiting/references/patterns-and-implementation.md +253 -0
- claude_mpm/skills/bundled/testing/test-driven-development/SKILL.md +145 -0
- claude_mpm/skills/bundled/testing/test-driven-development/references/anti-patterns.md +543 -0
- claude_mpm/skills/bundled/testing/test-driven-development/references/examples.md +741 -0
- claude_mpm/skills/bundled/testing/test-driven-development/references/integration.md +470 -0
- claude_mpm/skills/bundled/testing/test-driven-development/references/philosophy.md +458 -0
- claude_mpm/skills/bundled/testing/test-driven-development/references/workflow.md +639 -0
- claude_mpm/skills/bundled/testing/test-quality-inspector/SKILL.md +458 -0
- claude_mpm/skills/bundled/testing/test-quality-inspector/examples/example-inspection-report.md +411 -0
- claude_mpm/skills/bundled/testing/test-quality-inspector/references/assertion-quality.md +317 -0
- claude_mpm/skills/bundled/testing/test-quality-inspector/references/inspection-checklist.md +270 -0
- claude_mpm/skills/bundled/testing/test-quality-inspector/references/red-flags.md +436 -0
- claude_mpm/skills/bundled/testing/testing-anti-patterns/SKILL.md +140 -0
- claude_mpm/skills/bundled/testing/testing-anti-patterns/references/completeness-anti-patterns.md +572 -0
- claude_mpm/skills/bundled/testing/testing-anti-patterns/references/core-anti-patterns.md +411 -0
- claude_mpm/skills/bundled/testing/testing-anti-patterns/references/detection-guide.md +569 -0
- claude_mpm/skills/bundled/testing/testing-anti-patterns/references/tdd-connection.md +695 -0
- claude_mpm/skills/bundled/testing/webapp-testing/SKILL.md +184 -0
- claude_mpm/skills/bundled/testing/webapp-testing/decision-tree.md +459 -0
- claude_mpm/skills/bundled/testing/webapp-testing/playwright-patterns.md +479 -0
- claude_mpm/skills/bundled/testing/webapp-testing/reconnaissance-pattern.md +687 -0
- claude_mpm/skills/bundled/testing/webapp-testing/server-management.md +758 -0
- claude_mpm/skills/bundled/testing/webapp-testing/troubleshooting.md +868 -0
- claude_mpm/skills/registry.py +295 -90
- claude_mpm/skills/skill_manager.py +29 -23
- claude_mpm/templates/.pre-commit-config.yaml +112 -0
- claude_mpm/utils/agent_dependency_loader.py +103 -4
- claude_mpm/utils/robust_installer.py +45 -24
- claude_mpm-5.6.23.dist-info/METADATA +393 -0
- {claude_mpm-5.4.41.dist-info → claude_mpm-5.6.23.dist-info}/RECORD +447 -149
- claude_mpm/dashboard/static/svelte-build/_app/immutable/assets/0.B_FtCwCQ.css +0 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/assets/2.Cl_eSA4x.css +0 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BgChzWQ1.js +0 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CIXEwuWe.js +0 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CWc5urbQ.js +0 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DMkZpdF2.js +0 -2
- claude_mpm/dashboard/static/svelte-build/_app/immutable/entry/app.DTL5mJO-.js +0 -2
- claude_mpm/dashboard/static/svelte-build/_app/immutable/entry/start.DzuEhzqh.js +0 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/1.DFLC8jdE.js +0 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/2.DPvEihJJ.js +0 -10
- claude_mpm/hooks/claude_hooks/__pycache__/installer.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/connection_manager.cpython-311.pyc +0 -0
- claude_mpm-5.4.41.dist-info/METADATA +0 -998
- {claude_mpm-5.4.41.dist-info → claude_mpm-5.6.23.dist-info}/WHEEL +0 -0
- {claude_mpm-5.4.41.dist-info → claude_mpm-5.6.23.dist-info}/entry_points.txt +0 -0
- {claude_mpm-5.4.41.dist-info → claude_mpm-5.6.23.dist-info}/licenses/LICENSE +0 -0
- {claude_mpm-5.4.41.dist-info → claude_mpm-5.6.23.dist-info}/licenses/LICENSE-FAQ.md +0 -0
- {claude_mpm-5.4.41.dist-info → claude_mpm-5.6.23.dist-info}/top_level.txt +0 -0
|
@@ -18,7 +18,7 @@ ARCHITECTURE:
|
|
|
18
18
|
"""
|
|
19
19
|
|
|
20
20
|
import os
|
|
21
|
-
import subprocess
|
|
21
|
+
import subprocess # nosec B404
|
|
22
22
|
from typing import Optional
|
|
23
23
|
|
|
24
24
|
from rich.console import Console
|
|
@@ -84,6 +84,7 @@ class SkillsManagementCommand(BaseCommand):
|
|
|
84
84
|
SkillsCommands.INFO.value: self._show_skill_info,
|
|
85
85
|
SkillsCommands.CONFIG.value: self._manage_config,
|
|
86
86
|
SkillsCommands.CONFIGURE.value: self._configure_skills,
|
|
87
|
+
SkillsCommands.SELECT.value: self._select_skills_interactive,
|
|
87
88
|
# GitHub deployment commands
|
|
88
89
|
SkillsCommands.DEPLOY_FROM_GITHUB.value: self._deploy_from_github,
|
|
89
90
|
SkillsCommands.LIST_AVAILABLE.value: self._list_available_github_skills,
|
|
@@ -504,7 +505,7 @@ class SkillsManagementCommand(BaseCommand):
|
|
|
504
505
|
# Open in editor
|
|
505
506
|
editor = os.environ.get("EDITOR", "nano")
|
|
506
507
|
try:
|
|
507
|
-
subprocess.run([editor, str(config_path)], check=True)
|
|
508
|
+
subprocess.run([editor, str(config_path)], check=True) # nosec B603
|
|
508
509
|
console.print(
|
|
509
510
|
f"\n[green]Configuration saved to {config_path}[/green]\n"
|
|
510
511
|
)
|
|
@@ -537,7 +538,7 @@ class SkillsManagementCommand(BaseCommand):
|
|
|
537
538
|
toolchain = getattr(args, "toolchain", None)
|
|
538
539
|
categories = getattr(args, "categories", None)
|
|
539
540
|
force = getattr(args, "force", False)
|
|
540
|
-
|
|
541
|
+
deploy_all = getattr(args, "all", False)
|
|
541
542
|
|
|
542
543
|
if collection:
|
|
543
544
|
console.print(
|
|
@@ -548,23 +549,15 @@ class SkillsManagementCommand(BaseCommand):
|
|
|
548
549
|
"\n[bold cyan]Deploying skills from default collection...[/bold cyan]\n"
|
|
549
550
|
)
|
|
550
551
|
|
|
551
|
-
#
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
"[yellow]No toolchain specified. Use --toolchain to filter by language,[/yellow]"
|
|
555
|
-
)
|
|
556
|
-
console.print(
|
|
557
|
-
"[yellow]or --all-skills to deploy all available skills (not just agent-referenced).[/yellow]\n"
|
|
558
|
-
)
|
|
559
|
-
|
|
560
|
-
# Selective deployment is enabled by default (deploy only agent-referenced skills)
|
|
561
|
-
# Use --all-skills to disable selective mode
|
|
552
|
+
# Use selective deployment unless --all flag is provided
|
|
553
|
+
# Selective mode deploys only agent-referenced skills
|
|
554
|
+
# --all mode deploys all available skills from the collection
|
|
562
555
|
result = self.skills_deployer.deploy_skills(
|
|
563
556
|
collection=collection,
|
|
564
557
|
toolchain=toolchain,
|
|
565
558
|
categories=categories,
|
|
566
559
|
force=force,
|
|
567
|
-
selective=not
|
|
560
|
+
selective=not deploy_all,
|
|
568
561
|
)
|
|
569
562
|
|
|
570
563
|
# Display results
|
|
@@ -577,11 +570,7 @@ class SkillsManagementCommand(BaseCommand):
|
|
|
577
570
|
f"(out of {total_available} available)[/cyan]"
|
|
578
571
|
)
|
|
579
572
|
console.print(
|
|
580
|
-
"[dim]Use
|
|
581
|
-
)
|
|
582
|
-
else:
|
|
583
|
-
console.print(
|
|
584
|
-
"[cyan]📦 Deploying all available skills (selective mode disabled)[/cyan]\n"
|
|
573
|
+
"[dim]Use 'claude-mpm skills configure' to manually select skills[/dim]\n"
|
|
585
574
|
)
|
|
586
575
|
|
|
587
576
|
if result["deployed_count"] > 0:
|
|
@@ -606,6 +595,16 @@ class SkillsManagementCommand(BaseCommand):
|
|
|
606
595
|
console.print(f" • {error}")
|
|
607
596
|
console.print()
|
|
608
597
|
|
|
598
|
+
# Show cleanup results
|
|
599
|
+
cleanup = result.get("cleanup", {})
|
|
600
|
+
if cleanup.get("removed_count", 0) > 0:
|
|
601
|
+
console.print(
|
|
602
|
+
f"[yellow]🧹 Removed {cleanup['removed_count']} orphaned skill(s):[/yellow]"
|
|
603
|
+
)
|
|
604
|
+
for skill in cleanup.get("removed_skills", []):
|
|
605
|
+
console.print(f" • {skill}")
|
|
606
|
+
console.print()
|
|
607
|
+
|
|
609
608
|
# Show restart instructions
|
|
610
609
|
if result["restart_instructions"]:
|
|
611
610
|
console.print(
|
|
@@ -677,33 +676,91 @@ class SkillsManagementCommand(BaseCommand):
|
|
|
677
676
|
def _check_deployed_skills(self, args) -> CommandResult:
|
|
678
677
|
"""Check currently deployed skills in ~/.claude/skills/."""
|
|
679
678
|
try:
|
|
680
|
-
|
|
679
|
+
# Get deployed skills
|
|
680
|
+
deployed_result = self.skills_deployer.check_deployed_skills()
|
|
681
|
+
deployed_names = {skill["name"] for skill in deployed_result["skills"]}
|
|
681
682
|
|
|
682
683
|
console.print("\n[bold cyan]Claude Code Skills Status:[/bold cyan]\n")
|
|
683
|
-
console.print(
|
|
684
|
+
console.print(
|
|
685
|
+
f"[dim]Directory: {deployed_result['claude_skills_dir']}[/dim]\n"
|
|
686
|
+
)
|
|
687
|
+
|
|
688
|
+
# Fetch available skills from GitHub to get full list
|
|
689
|
+
try:
|
|
690
|
+
available_result = self.skills_deployer.list_available_skills()
|
|
691
|
+
all_skills = available_result.get("skills", [])
|
|
692
|
+
except Exception as e:
|
|
693
|
+
console.print(
|
|
694
|
+
f"[yellow]Warning: Could not fetch available skills: {e}[/yellow]\n"
|
|
695
|
+
)
|
|
696
|
+
all_skills = []
|
|
684
697
|
|
|
685
|
-
|
|
686
|
-
|
|
698
|
+
# Combine deployed and available skills
|
|
699
|
+
skill_map = {}
|
|
700
|
+
|
|
701
|
+
# Add available skills
|
|
702
|
+
for skill in all_skills:
|
|
703
|
+
skill_name = skill.get("name", "")
|
|
704
|
+
if skill_name:
|
|
705
|
+
skill_map[skill_name] = {
|
|
706
|
+
"name": skill.get("display_name")
|
|
707
|
+
or skill_name.replace("-", " ").title(),
|
|
708
|
+
"skill_id": skill_name,
|
|
709
|
+
"source": "MPM Skills",
|
|
710
|
+
"is_deployed": skill_name in deployed_names,
|
|
711
|
+
}
|
|
712
|
+
|
|
713
|
+
# Add any deployed skills not in available list (local/custom skills)
|
|
714
|
+
for skill in deployed_result["skills"]:
|
|
715
|
+
skill_name = skill["name"]
|
|
716
|
+
if skill_name not in skill_map:
|
|
717
|
+
skill_map[skill_name] = {
|
|
718
|
+
"name": skill_name.replace("-", " ").title(),
|
|
719
|
+
"skill_id": skill_name,
|
|
720
|
+
"source": "Local",
|
|
721
|
+
"is_deployed": True,
|
|
722
|
+
}
|
|
723
|
+
|
|
724
|
+
if not skill_map:
|
|
725
|
+
console.print("[yellow]No skills available.[/yellow]")
|
|
687
726
|
console.print(
|
|
688
727
|
"[dim]Use 'claude-mpm skills deploy-github' to deploy skills.[/dim]\n"
|
|
689
728
|
)
|
|
690
729
|
return CommandResult(success=True, exit_code=0)
|
|
691
730
|
|
|
692
|
-
|
|
693
|
-
|
|
731
|
+
# Create table matching agent management format
|
|
732
|
+
table = Table(show_header=True, header_style="bold cyan")
|
|
733
|
+
table.add_column("#", style="bright_black", width=6, no_wrap=True)
|
|
734
|
+
table.add_column(
|
|
735
|
+
"Skill ID", style="bright_black", no_wrap=True, overflow="ellipsis"
|
|
694
736
|
)
|
|
737
|
+
table.add_column(
|
|
738
|
+
"Name", style="bright_cyan", no_wrap=True, overflow="ellipsis"
|
|
739
|
+
)
|
|
740
|
+
table.add_column("Source", style="bright_yellow", no_wrap=True)
|
|
741
|
+
table.add_column("Status", style="bright_black", no_wrap=True)
|
|
695
742
|
|
|
696
|
-
#
|
|
697
|
-
|
|
698
|
-
table.add_column("Skill Name", style="green")
|
|
699
|
-
table.add_column("Path", style="dim")
|
|
743
|
+
# Sort skills by name for consistent display
|
|
744
|
+
sorted_skills = sorted(skill_map.values(), key=lambda s: s["skill_id"])
|
|
700
745
|
|
|
701
|
-
for skill in
|
|
702
|
-
|
|
746
|
+
for idx, skill in enumerate(sorted_skills, 1):
|
|
747
|
+
status = (
|
|
748
|
+
"[green]Installed[/green]" if skill["is_deployed"] else "Available"
|
|
749
|
+
)
|
|
750
|
+
table.add_row(
|
|
751
|
+
str(idx), skill["skill_id"], skill["name"], skill["source"], status
|
|
752
|
+
)
|
|
703
753
|
|
|
704
754
|
console.print(table)
|
|
705
755
|
console.print()
|
|
706
756
|
|
|
757
|
+
# Show summary
|
|
758
|
+
deployed_count = sum(1 for s in skill_map.values() if s["is_deployed"])
|
|
759
|
+
console.print(
|
|
760
|
+
f"[dim]Showing {len(skill_map)} skills ({deployed_count} installed, "
|
|
761
|
+
f"{len(skill_map) - deployed_count} available)[/dim]\n"
|
|
762
|
+
)
|
|
763
|
+
|
|
707
764
|
return CommandResult(success=True, exit_code=0)
|
|
708
765
|
|
|
709
766
|
except Exception as e:
|
|
@@ -1226,6 +1283,99 @@ class SkillsManagementCommand(BaseCommand):
|
|
|
1226
1283
|
console.print(f"[dim]{traceback.format_exc()}[/dim]")
|
|
1227
1284
|
return CommandResult(success=False, message=str(e), exit_code=1)
|
|
1228
1285
|
|
|
1286
|
+
def _select_skills_interactive(self, args) -> CommandResult:
|
|
1287
|
+
"""Interactive skill selection with topic grouping.
|
|
1288
|
+
|
|
1289
|
+
This command provides a two-tier selection interface:
|
|
1290
|
+
1. Select topic groups (toolchains) to explore
|
|
1291
|
+
2. Multi-select skills within each topic group
|
|
1292
|
+
|
|
1293
|
+
Features:
|
|
1294
|
+
- Groups skills by toolchain (universal, python, typescript, etc.)
|
|
1295
|
+
- Shows skills auto-included by agent dependencies
|
|
1296
|
+
- Displays token counts for each skill
|
|
1297
|
+
- Updates config and runs reconciliation
|
|
1298
|
+
|
|
1299
|
+
Returns:
|
|
1300
|
+
CommandResult with success/failure status
|
|
1301
|
+
"""
|
|
1302
|
+
try:
|
|
1303
|
+
from ...cli.interactive.skill_selector import run_skill_selector
|
|
1304
|
+
from ...core.unified_config import UnifiedConfig
|
|
1305
|
+
from ...services.agents.deployment.deployment_reconciler import (
|
|
1306
|
+
DeploymentReconciler,
|
|
1307
|
+
)
|
|
1308
|
+
|
|
1309
|
+
console.print("\n[bold cyan]Interactive Skill Selector[/bold cyan]\n")
|
|
1310
|
+
|
|
1311
|
+
# Run skill selector
|
|
1312
|
+
selected_skills = run_skill_selector()
|
|
1313
|
+
|
|
1314
|
+
if selected_skills is None:
|
|
1315
|
+
console.print("\n[yellow]Skill selection cancelled[/yellow]")
|
|
1316
|
+
return CommandResult(success=True, exit_code=0)
|
|
1317
|
+
|
|
1318
|
+
# Update config with selected skills
|
|
1319
|
+
config = UnifiedConfig()
|
|
1320
|
+
config.skills.enabled = selected_skills
|
|
1321
|
+
|
|
1322
|
+
# Save config
|
|
1323
|
+
try:
|
|
1324
|
+
config.save()
|
|
1325
|
+
console.print(
|
|
1326
|
+
f"\n[green]✓ Saved {len(selected_skills)} skills to configuration[/green]"
|
|
1327
|
+
)
|
|
1328
|
+
except Exception as e:
|
|
1329
|
+
console.print(f"\n[red]Failed to save configuration: {e}[/red]")
|
|
1330
|
+
return CommandResult(success=False, message=str(e), exit_code=1)
|
|
1331
|
+
|
|
1332
|
+
# Run reconciliation to deploy skills
|
|
1333
|
+
console.print("\n[cyan]Running skill reconciliation...[/cyan]")
|
|
1334
|
+
reconciler = DeploymentReconciler(config)
|
|
1335
|
+
|
|
1336
|
+
try:
|
|
1337
|
+
from pathlib import Path
|
|
1338
|
+
|
|
1339
|
+
project_path = Path.cwd()
|
|
1340
|
+
result = reconciler.reconcile_skills(project_path)
|
|
1341
|
+
|
|
1342
|
+
if result.deployed:
|
|
1343
|
+
console.print(
|
|
1344
|
+
f" [green]✓ Deployed: {', '.join(result.deployed)}[/green]"
|
|
1345
|
+
)
|
|
1346
|
+
if result.removed:
|
|
1347
|
+
console.print(
|
|
1348
|
+
f" [yellow]✓ Removed: {', '.join(result.removed)}[/yellow]"
|
|
1349
|
+
)
|
|
1350
|
+
if result.errors:
|
|
1351
|
+
for error in result.errors:
|
|
1352
|
+
console.print(f" [red]✗ {error}[/red]")
|
|
1353
|
+
|
|
1354
|
+
if result.success:
|
|
1355
|
+
console.print(
|
|
1356
|
+
"\n[bold green]✓ Skill deployment complete![/bold green]"
|
|
1357
|
+
)
|
|
1358
|
+
return CommandResult(success=True, exit_code=0)
|
|
1359
|
+
console.print(
|
|
1360
|
+
f"\n[yellow]⚠ Deployment had {len(result.errors)} errors[/yellow]"
|
|
1361
|
+
)
|
|
1362
|
+
return CommandResult(
|
|
1363
|
+
success=False,
|
|
1364
|
+
message=f"{len(result.errors)} deployment errors",
|
|
1365
|
+
exit_code=1,
|
|
1366
|
+
)
|
|
1367
|
+
|
|
1368
|
+
except Exception as e:
|
|
1369
|
+
console.print(f"\n[red]Reconciliation failed: {e}[/red]")
|
|
1370
|
+
return CommandResult(success=False, message=str(e), exit_code=1)
|
|
1371
|
+
|
|
1372
|
+
except Exception as e:
|
|
1373
|
+
console.print(f"[red]Skill selection error: {e}[/red]")
|
|
1374
|
+
import traceback
|
|
1375
|
+
|
|
1376
|
+
console.print(f"[dim]{traceback.format_exc()}[/dim]")
|
|
1377
|
+
return CommandResult(success=False, message=str(e), exit_code=1)
|
|
1378
|
+
|
|
1229
1379
|
|
|
1230
1380
|
def manage_skills(args) -> int:
|
|
1231
1381
|
"""
|
claude_mpm/cli/executor.py
CHANGED
|
@@ -66,6 +66,7 @@ def ensure_run_attributes(args):
|
|
|
66
66
|
args.monitor = getattr(args, "monitor", False)
|
|
67
67
|
args.force = getattr(args, "force", False)
|
|
68
68
|
args.reload_agents = getattr(args, "reload_agents", False)
|
|
69
|
+
args.force_sync = getattr(args, "force_sync", False)
|
|
69
70
|
# Include dependency checking attributes
|
|
70
71
|
args.check_dependencies = getattr(args, "check_dependencies", True)
|
|
71
72
|
args.force_check_dependencies = getattr(args, "force_check_dependencies", False)
|
|
@@ -126,6 +127,14 @@ def execute_command(command: str, args) -> int:
|
|
|
126
127
|
result = handle_verify(args)
|
|
127
128
|
return result if result is not None else 0
|
|
128
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
|
+
|
|
129
138
|
# Handle skill-source command with lazy import
|
|
130
139
|
if command == "skill-source":
|
|
131
140
|
# Lazy import to avoid loading unless needed
|
|
@@ -205,35 +214,127 @@ def execute_command(command: str, args) -> int:
|
|
|
205
214
|
"status": show_status,
|
|
206
215
|
}
|
|
207
216
|
|
|
208
|
-
# Get handler and
|
|
217
|
+
# Get handler and call it with argument list (same pattern as autotodos)
|
|
209
218
|
handler = handlers.get(subcommand)
|
|
210
219
|
if handler:
|
|
211
|
-
|
|
212
|
-
|
|
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
|
|
213
253
|
|
|
214
|
-
|
|
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
|
+
)
|
|
215
265
|
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
if hasattr(args, "hook_type"):
|
|
221
|
-
kwargs["hook_type"] = args.hook_type
|
|
222
|
-
if hasattr(args, "yes"):
|
|
223
|
-
kwargs["yes"] = args.yes
|
|
266
|
+
# Get subcommand
|
|
267
|
+
subcommand = getattr(args, "autotodos_command", "status")
|
|
268
|
+
if not subcommand:
|
|
269
|
+
subcommand = "status"
|
|
224
270
|
|
|
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
|
+
}
|
|
280
|
+
|
|
281
|
+
# Get handler and call it with standalone_mode=False
|
|
282
|
+
handler = handlers.get(subcommand)
|
|
283
|
+
if handler:
|
|
225
284
|
try:
|
|
226
|
-
#
|
|
227
|
-
|
|
228
|
-
|
|
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)
|
|
229
327
|
return 0
|
|
230
328
|
except SystemExit as e:
|
|
231
329
|
return e.code if e.code is not None else 0
|
|
232
330
|
except Exception as e:
|
|
233
331
|
print(f"Error: {e}")
|
|
332
|
+
import traceback
|
|
333
|
+
|
|
334
|
+
traceback.print_exc()
|
|
234
335
|
return 1
|
|
235
336
|
else:
|
|
236
|
-
print(f"Unknown
|
|
337
|
+
print(f"Unknown autotodos subcommand: {subcommand}")
|
|
237
338
|
return 1
|
|
238
339
|
|
|
239
340
|
# Map stable commands to their implementations
|
|
@@ -259,6 +360,7 @@ def execute_command(command: str, args) -> int:
|
|
|
259
360
|
CLICommands.SKILLS.value: manage_skills,
|
|
260
361
|
"debug": manage_debug, # Add debug command
|
|
261
362
|
"mpm-init": None, # Will be handled separately with lazy import
|
|
363
|
+
"commander": None, # Will be handled separately with lazy import
|
|
262
364
|
}
|
|
263
365
|
|
|
264
366
|
# Execute command if found
|
|
@@ -286,6 +388,8 @@ def execute_command(command: str, args) -> int:
|
|
|
286
388
|
"local-deploy",
|
|
287
389
|
"skill-source",
|
|
288
390
|
"agent-source",
|
|
391
|
+
"hook-errors",
|
|
392
|
+
"autotodos",
|
|
289
393
|
]
|
|
290
394
|
|
|
291
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
|
]
|