claude-mpm 5.4.48__py3-none-any.whl → 5.6.34__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of claude-mpm might be problematic. Click here for more details.
- claude_mpm/VERSION +1 -1
- claude_mpm/agents/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 +119 -689
- 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 +171 -17
- 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 +5 -0
- claude_mpm/cli/startup.py +544 -511
- 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 +39 -13
- 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 +66 -18
- claude_mpm/core/shared/config_loader.py +3 -1
- claude_mpm/core/socketio_pool.py +47 -15
- 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 +527 -136
- claude_mpm/hooks/claude_hooks/hook_handler.py +170 -104
- claude_mpm/hooks/claude_hooks/hook_wrapper.sh +6 -11
- claude_mpm/hooks/claude_hooks/installer.py +206 -36
- claude_mpm/hooks/claude_hooks/memory_integration.py +52 -32
- claude_mpm/hooks/claude_hooks/response_tracking.py +43 -60
- claude_mpm/hooks/claude_hooks/services/__init__.py +21 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/__init__.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/connection_manager_http.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/container.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/protocols.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/state_manager.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/subagent_processor.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/connection_manager.py +41 -26
- claude_mpm/hooks/claude_hooks/services/connection_manager_http.py +38 -105
- claude_mpm/hooks/claude_hooks/services/container.py +310 -0
- claude_mpm/hooks/claude_hooks/services/protocols.py +328 -0
- claude_mpm/hooks/claude_hooks/services/state_manager.py +25 -38
- claude_mpm/hooks/claude_hooks/services/subagent_processor.py +75 -77
- claude_mpm/hooks/session_resume_hook.py +89 -1
- claude_mpm/hooks/templates/pre_tool_use_simple.py +6 -6
- claude_mpm/hooks/templates/pre_tool_use_template.py +16 -8
- claude_mpm/init.py +215 -2
- claude_mpm/scripts/claude-hook-handler.sh +46 -19
- claude_mpm/scripts/start_activity_logging.py +0 -0
- 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 +8 -6
- claude_mpm/services/agents/deployment/agent_template_builder.py +14 -4
- claude_mpm/services/agents/deployment/deployment_reconciler.py +577 -0
- claude_mpm/services/agents/deployment/multi_source_deployment_service.py +4 -4
- claude_mpm/services/agents/deployment/remote_agent_discovery_service.py +4 -1
- claude_mpm/services/agents/deployment/startup_reconciliation.py +138 -0
- claude_mpm/services/agents/git_source_manager.py +6 -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 +10 -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/command_deployment_service.py +44 -26
- 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/hook_installer_service.py +77 -8
- claude_mpm/services/infrastructure/__init__.py +4 -0
- claude_mpm/services/infrastructure/context_usage_tracker.py +291 -0
- claude_mpm/services/infrastructure/resume_log_generator.py +24 -5
- claude_mpm/services/monitor/daemon_manager.py +15 -4
- claude_mpm/services/monitor/management/lifecycle.py +8 -3
- claude_mpm/services/monitor/server.py +106 -16
- claude_mpm/services/pm_skills_deployer.py +267 -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 +188 -67
- 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.34.dist-info/METADATA +393 -0
- {claude_mpm-5.4.48.dist-info → claude_mpm-5.6.34.dist-info}/RECORD +453 -151
- 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.48.dist-info/METADATA +0 -999
- {claude_mpm-5.4.48.dist-info → claude_mpm-5.6.34.dist-info}/WHEEL +0 -0
- {claude_mpm-5.4.48.dist-info → claude_mpm-5.6.34.dist-info}/entry_points.txt +0 -0
- {claude_mpm-5.4.48.dist-info → claude_mpm-5.6.34.dist-info}/licenses/LICENSE +0 -0
- {claude_mpm-5.4.48.dist-info → claude_mpm-5.6.34.dist-info}/licenses/LICENSE-FAQ.md +0 -0
- {claude_mpm-5.4.48.dist-info → claude_mpm-5.6.34.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,6 +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)
|
|
541
|
+
deploy_all = getattr(args, "all", False)
|
|
540
542
|
|
|
541
543
|
if collection:
|
|
542
544
|
console.print(
|
|
@@ -547,14 +549,15 @@ class SkillsManagementCommand(BaseCommand):
|
|
|
547
549
|
"\n[bold cyan]Deploying skills from default collection...[/bold cyan]\n"
|
|
548
550
|
)
|
|
549
551
|
|
|
550
|
-
#
|
|
551
|
-
#
|
|
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
|
|
552
555
|
result = self.skills_deployer.deploy_skills(
|
|
553
556
|
collection=collection,
|
|
554
557
|
toolchain=toolchain,
|
|
555
558
|
categories=categories,
|
|
556
559
|
force=force,
|
|
557
|
-
selective=
|
|
560
|
+
selective=not deploy_all,
|
|
558
561
|
)
|
|
559
562
|
|
|
560
563
|
# Display results
|
|
@@ -673,33 +676,91 @@ class SkillsManagementCommand(BaseCommand):
|
|
|
673
676
|
def _check_deployed_skills(self, args) -> CommandResult:
|
|
674
677
|
"""Check currently deployed skills in ~/.claude/skills/."""
|
|
675
678
|
try:
|
|
676
|
-
|
|
679
|
+
# Get deployed skills
|
|
680
|
+
deployed_result = self.skills_deployer.check_deployed_skills()
|
|
681
|
+
deployed_names = {skill["name"] for skill in deployed_result["skills"]}
|
|
677
682
|
|
|
678
683
|
console.print("\n[bold cyan]Claude Code Skills Status:[/bold cyan]\n")
|
|
679
|
-
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 = []
|
|
680
697
|
|
|
681
|
-
|
|
682
|
-
|
|
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]")
|
|
683
726
|
console.print(
|
|
684
727
|
"[dim]Use 'claude-mpm skills deploy-github' to deploy skills.[/dim]\n"
|
|
685
728
|
)
|
|
686
729
|
return CommandResult(success=True, exit_code=0)
|
|
687
730
|
|
|
688
|
-
|
|
689
|
-
|
|
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"
|
|
690
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)
|
|
691
742
|
|
|
692
|
-
#
|
|
693
|
-
|
|
694
|
-
table.add_column("Skill Name", style="green")
|
|
695
|
-
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"])
|
|
696
745
|
|
|
697
|
-
for skill in
|
|
698
|
-
|
|
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
|
+
)
|
|
699
753
|
|
|
700
754
|
console.print(table)
|
|
701
755
|
console.print()
|
|
702
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
|
+
|
|
703
764
|
return CommandResult(success=True, exit_code=0)
|
|
704
765
|
|
|
705
766
|
except Exception as e:
|
|
@@ -1222,6 +1283,99 @@ class SkillsManagementCommand(BaseCommand):
|
|
|
1222
1283
|
console.print(f"[dim]{traceback.format_exc()}[/dim]")
|
|
1223
1284
|
return CommandResult(success=False, message=str(e), exit_code=1)
|
|
1224
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
|
+
|
|
1225
1379
|
|
|
1226
1380
|
def manage_skills(args) -> int:
|
|
1227
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
|
]
|
|
@@ -12,8 +12,12 @@ from pathlib import Path
|
|
|
12
12
|
from typing import Any, Dict, List, Optional, Tuple
|
|
13
13
|
|
|
14
14
|
import questionary
|
|
15
|
-
from questionary import Style
|
|
16
15
|
|
|
16
|
+
from claude_mpm.cli.interactive.questionary_styles import (
|
|
17
|
+
BANNER_WIDTH,
|
|
18
|
+
MPM_STYLE,
|
|
19
|
+
print_section_header,
|
|
20
|
+
)
|
|
17
21
|
from claude_mpm.core.logging_config import get_logger
|
|
18
22
|
from claude_mpm.services.agents.local_template_manager import (
|
|
19
23
|
LocalAgentTemplate,
|
|
@@ -23,16 +27,6 @@ from claude_mpm.utils.agent_filters import apply_all_filters
|
|
|
23
27
|
|
|
24
28
|
logger = get_logger(__name__)
|
|
25
29
|
|
|
26
|
-
# Questionary style matching Rich cyan theme (consistent with configure.py)
|
|
27
|
-
QUESTIONARY_STYLE = Style(
|
|
28
|
-
[
|
|
29
|
-
("selected", "fg:cyan bold"),
|
|
30
|
-
("pointer", "fg:cyan bold"),
|
|
31
|
-
("highlighted", "fg:cyan"),
|
|
32
|
-
("question", "fg:cyan bold"),
|
|
33
|
-
]
|
|
34
|
-
)
|
|
35
|
-
|
|
36
30
|
|
|
37
31
|
class AgentWizard:
|
|
38
32
|
"""
|
|
@@ -113,9 +107,7 @@ class AgentWizard:
|
|
|
113
107
|
Tuple of (success, message)
|
|
114
108
|
"""
|
|
115
109
|
try:
|
|
116
|
-
|
|
117
|
-
print("🧙♂️ Agent Creation Wizard")
|
|
118
|
-
print("=" * 60)
|
|
110
|
+
print_section_header("🧙♂️", "Agent Creation Wizard", width=BANNER_WIDTH)
|
|
119
111
|
print("\nI'll guide you through creating a custom local agent.")
|
|
120
112
|
print("Press Ctrl+C anytime to cancel.\n")
|
|
121
113
|
|
|
@@ -281,9 +273,7 @@ class AgentWizard:
|
|
|
281
273
|
# Get merged agents from all sources
|
|
282
274
|
all_agents = self._merge_agent_sources()
|
|
283
275
|
|
|
284
|
-
|
|
285
|
-
print("🔧 Agent Management Menu")
|
|
286
|
-
print("=" * 60)
|
|
276
|
+
print_section_header("🔧", "Agent Management Menu", width=BANNER_WIDTH)
|
|
287
277
|
|
|
288
278
|
if not all_agents:
|
|
289
279
|
print(
|
|
@@ -384,7 +374,7 @@ class AgentWizard:
|
|
|
384
374
|
choice = questionary.select(
|
|
385
375
|
"Agent Management Menu:",
|
|
386
376
|
choices=menu_choices,
|
|
387
|
-
style=
|
|
377
|
+
style=MPM_STYLE,
|
|
388
378
|
).ask()
|
|
389
379
|
|
|
390
380
|
if not choice: # User pressed Esc
|
|
@@ -776,9 +766,7 @@ class AgentWizard:
|
|
|
776
766
|
|
|
777
767
|
def _confirm_creation(self, config: Dict[str, Any]) -> bool:
|
|
778
768
|
"""Show preview and get confirmation from user."""
|
|
779
|
-
|
|
780
|
-
print("📋 Agent Configuration Preview")
|
|
781
|
-
print("=" * 60)
|
|
769
|
+
print_section_header("📋", "Agent Configuration Preview", width=BANNER_WIDTH)
|
|
782
770
|
|
|
783
771
|
print(f"Agent ID: {config['agent_id']}")
|
|
784
772
|
print(f"Name: {config['name']}")
|
|
@@ -795,7 +783,8 @@ class AgentWizard:
|
|
|
795
783
|
print("\nInstructions Preview:")
|
|
796
784
|
print(f" {config['instructions_preview']}")
|
|
797
785
|
|
|
798
|
-
print(
|
|
786
|
+
print()
|
|
787
|
+
print("=" * BANNER_WIDTH)
|
|
799
788
|
|
|
800
789
|
while True:
|
|
801
790
|
confirm = input("\nCreate this agent? [Y/n]: ").strip().lower()
|
|
@@ -1046,8 +1035,7 @@ class AgentWizard:
|
|
|
1046
1035
|
|
|
1047
1036
|
def _interactive_delete_menu(self, templates: list) -> Tuple[bool, str]:
|
|
1048
1037
|
"""Interactive deletion menu for multiple agents."""
|
|
1049
|
-
|
|
1050
|
-
print("=" * 50)
|
|
1038
|
+
print_section_header("🗑️", "Delete Agents", width=BANNER_WIDTH)
|
|
1051
1039
|
|
|
1052
1040
|
if not templates:
|
|
1053
1041
|
return False, "No agents available to delete"
|
|
@@ -1154,9 +1142,9 @@ class AgentWizard:
|
|
|
1154
1142
|
Args:
|
|
1155
1143
|
agent: Agent metadata dictionary
|
|
1156
1144
|
"""
|
|
1157
|
-
|
|
1158
|
-
|
|
1159
|
-
|
|
1145
|
+
print_section_header(
|
|
1146
|
+
"📄", f"Agent Details: {agent['agent_id']}", width=BANNER_WIDTH
|
|
1147
|
+
)
|
|
1160
1148
|
print(f"Name: {agent['name']}")
|
|
1161
1149
|
print(f"Category: {agent['category'] or 'N/A'}")
|
|
1162
1150
|
print(f"Source: [{agent['source_type']}] {agent['source_identifier']}")
|
|
@@ -1188,9 +1176,7 @@ class AgentWizard:
|
|
|
1188
1176
|
input("\nPress Enter to continue...")
|
|
1189
1177
|
return
|
|
1190
1178
|
|
|
1191
|
-
|
|
1192
|
-
print("📦 Deploy Agent")
|
|
1193
|
-
print("=" * 60)
|
|
1179
|
+
print_section_header("📦", "Deploy Agent", width=BANNER_WIDTH)
|
|
1194
1180
|
print(f"\n{len(deployable)} agent(s) available to deploy:\n")
|
|
1195
1181
|
|
|
1196
1182
|
# Build agent selection choices with arrow-key navigation
|
|
@@ -1200,7 +1186,7 @@ class AgentWizard:
|
|
|
1200
1186
|
]
|
|
1201
1187
|
|
|
1202
1188
|
choice = questionary.select(
|
|
1203
|
-
"Select agent to deploy:", choices=agent_choices, style=
|
|
1189
|
+
"Select agent to deploy:", choices=agent_choices, style=MPM_STYLE
|
|
1204
1190
|
).ask()
|
|
1205
1191
|
|
|
1206
1192
|
if not choice: # User pressed Esc
|
|
@@ -1296,9 +1282,7 @@ class AgentWizard:
|
|
|
1296
1282
|
return
|
|
1297
1283
|
|
|
1298
1284
|
while True:
|
|
1299
|
-
|
|
1300
|
-
print("🔍 Browse & Filter Agents")
|
|
1301
|
-
print("=" * 60)
|
|
1285
|
+
print_section_header("🔍", "Browse & Filter Agents", width=BANNER_WIDTH)
|
|
1302
1286
|
|
|
1303
1287
|
# Show filter menu with arrow-key navigation
|
|
1304
1288
|
print("\n[bold]Filter by:[/bold]")
|
|
@@ -1314,7 +1298,7 @@ class AgentWizard:
|
|
|
1314
1298
|
choice = questionary.select(
|
|
1315
1299
|
"Browse & Filter Agents:",
|
|
1316
1300
|
choices=filter_choices,
|
|
1317
|
-
style=
|
|
1301
|
+
style=MPM_STYLE,
|
|
1318
1302
|
).ask()
|
|
1319
1303
|
|
|
1320
1304
|
if not choice or "Back" in choice:
|
|
@@ -1343,7 +1327,7 @@ class AgentWizard:
|
|
|
1343
1327
|
cat_choices = [f"{idx}. {cat}" for idx, cat in enumerate(categories, 1)]
|
|
1344
1328
|
|
|
1345
1329
|
cat_choice = questionary.select(
|
|
1346
|
-
"Select category:", choices=cat_choices, style=
|
|
1330
|
+
"Select category:", choices=cat_choices, style=MPM_STYLE
|
|
1347
1331
|
).ask()
|
|
1348
1332
|
|
|
1349
1333
|
if not cat_choice: # User pressed Esc
|
|
@@ -1457,9 +1441,11 @@ class AgentWizard:
|
|
|
1457
1441
|
continue
|
|
1458
1442
|
|
|
1459
1443
|
# Display filtered results
|
|
1460
|
-
|
|
1461
|
-
|
|
1462
|
-
|
|
1444
|
+
print_section_header(
|
|
1445
|
+
"📋",
|
|
1446
|
+
f"{filter_description} ({len(filtered_agents)} agents)",
|
|
1447
|
+
width=BANNER_WIDTH,
|
|
1448
|
+
)
|
|
1463
1449
|
|
|
1464
1450
|
if not filtered_agents:
|
|
1465
1451
|
print("\n[yellow]No agents found matching filter[/yellow]")
|
|
@@ -1523,7 +1509,7 @@ class AgentWizard:
|
|
|
1523
1509
|
]
|
|
1524
1510
|
|
|
1525
1511
|
agent_choice = questionary.select(
|
|
1526
|
-
"Select agent to deploy:", choices=agent_choices, style=
|
|
1512
|
+
"Select agent to deploy:", choices=agent_choices, style=MPM_STYLE
|
|
1527
1513
|
).ask()
|
|
1528
1514
|
|
|
1529
1515
|
if not agent_choice: # User pressed Esc
|
|
@@ -1629,7 +1615,7 @@ class AgentWizard:
|
|
|
1629
1615
|
]
|
|
1630
1616
|
|
|
1631
1617
|
agent_choice = questionary.select(
|
|
1632
|
-
"Select agent to view:", choices=agent_choices, style=
|
|
1618
|
+
"Select agent to view:", choices=agent_choices, style=MPM_STYLE
|
|
1633
1619
|
).ask()
|
|
1634
1620
|
|
|
1635
1621
|
if not agent_choice: # User pressed Esc
|
|
@@ -1652,9 +1638,7 @@ class AgentWizard:
|
|
|
1652
1638
|
preset_service = AgentPresetService(self.source_manager)
|
|
1653
1639
|
|
|
1654
1640
|
while True:
|
|
1655
|
-
|
|
1656
|
-
print("📦 Deploy Agent Preset")
|
|
1657
|
-
print("=" * 60)
|
|
1641
|
+
print_section_header("📦", "Deploy Agent Preset", width=BANNER_WIDTH)
|
|
1658
1642
|
|
|
1659
1643
|
# List available presets
|
|
1660
1644
|
presets = preset_service.list_presets()
|
|
@@ -1690,9 +1674,7 @@ class AgentWizard:
|
|
|
1690
1674
|
preset_name = presets[idx]["name"]
|
|
1691
1675
|
|
|
1692
1676
|
# Show preset details
|
|
1693
|
-
|
|
1694
|
-
print(f"📦 Preset: {preset_name}")
|
|
1695
|
-
print("=" * 60)
|
|
1677
|
+
print_section_header("📦", f"Preset: {preset_name}", width=BANNER_WIDTH)
|
|
1696
1678
|
print(f"\n[bold]Description:[/bold] {presets[idx]['description']}\n")
|
|
1697
1679
|
|
|
1698
1680
|
# Resolve preset
|
|
@@ -1872,9 +1854,7 @@ class AgentWizard:
|
|
|
1872
1854
|
input("\nPress Enter to continue...")
|
|
1873
1855
|
return
|
|
1874
1856
|
|
|
1875
|
-
|
|
1876
|
-
print("🔗 Manage Agent Sources")
|
|
1877
|
-
print("=" * 60)
|
|
1857
|
+
print_section_header("🔗", "Manage Agent Sources", width=BANNER_WIDTH)
|
|
1878
1858
|
|
|
1879
1859
|
try:
|
|
1880
1860
|
from claude_mpm.config.agent_sources import AgentSourceConfiguration
|