claude-mpm 3.4.10__py3-none-any.whl → 5.4.55__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- claude_mpm/BUILD_NUMBER +1 -0
- claude_mpm/VERSION +1 -0
- claude_mpm/__init__.py +50 -12
- claude_mpm/__main__.py +7 -2
- claude_mpm/agents/BASE_AGENT.md +164 -0
- claude_mpm/agents/BASE_ENGINEER.md +658 -0
- claude_mpm/agents/CLAUDE_MPM_OUTPUT_STYLE.md +290 -0
- claude_mpm/agents/CLAUDE_MPM_TEACHER_OUTPUT_STYLE.md +2002 -0
- claude_mpm/agents/MEMORY.md +72 -0
- claude_mpm/agents/PM_INSTRUCTIONS.md +1402 -0
- claude_mpm/agents/WORKFLOW.md +111 -0
- claude_mpm/agents/__init__.py +92 -80
- claude_mpm/agents/agent-template.yaml +83 -0
- claude_mpm/agents/agent_loader.py +560 -745
- claude_mpm/agents/agent_loader_integration.py +53 -55
- claude_mpm/agents/agents_metadata.py +186 -27
- claude_mpm/agents/async_agent_loader.py +436 -0
- claude_mpm/agents/base_agent.json +8 -4
- claude_mpm/agents/frontmatter_validator.py +754 -0
- claude_mpm/agents/system_agent_config.py +222 -155
- claude_mpm/agents/templates/README.md +465 -0
- claude_mpm/agents/templates/__init__.py +17 -13
- claude_mpm/agents/templates/circuit-breakers.md +1391 -0
- claude_mpm/agents/templates/context-management-examples.md +544 -0
- claude_mpm/agents/templates/git-file-tracking.md +584 -0
- claude_mpm/agents/templates/pm-examples.md +474 -0
- claude_mpm/agents/templates/pm-red-flags.md +310 -0
- claude_mpm/agents/templates/pr-workflow-examples.md +427 -0
- claude_mpm/agents/templates/research-gate-examples.md +669 -0
- claude_mpm/agents/templates/response-format.md +583 -0
- claude_mpm/agents/templates/structured-questions-examples.md +615 -0
- claude_mpm/agents/templates/ticket-completeness-examples.md +139 -0
- claude_mpm/agents/templates/ticketing-examples.md +277 -0
- claude_mpm/agents/templates/validation-templates.md +312 -0
- claude_mpm/cli/__init__.py +90 -128
- claude_mpm/cli/__main__.py +33 -0
- claude_mpm/cli/chrome_devtools_installer.py +175 -0
- claude_mpm/cli/commands/__init__.py +36 -12
- claude_mpm/cli/commands/agent_manager.py +1403 -0
- claude_mpm/cli/commands/agent_source.py +774 -0
- claude_mpm/cli/commands/agent_state_manager.py +335 -0
- claude_mpm/cli/commands/agents.py +2503 -168
- claude_mpm/cli/commands/agents_cleanup.py +210 -0
- claude_mpm/cli/commands/agents_discover.py +338 -0
- claude_mpm/cli/commands/aggregate.py +540 -0
- claude_mpm/cli/commands/analyze.py +553 -0
- claude_mpm/cli/commands/analyze_code.py +528 -0
- claude_mpm/cli/commands/auto_configure.py +1053 -0
- claude_mpm/cli/commands/cleanup.py +588 -0
- claude_mpm/cli/commands/cleanup_orphaned_agents.py +150 -0
- claude_mpm/cli/commands/config.py +586 -0
- claude_mpm/cli/commands/configure.py +2654 -0
- claude_mpm/cli/commands/configure_agent_display.py +282 -0
- claude_mpm/cli/commands/configure_behavior_manager.py +204 -0
- claude_mpm/cli/commands/configure_hook_manager.py +225 -0
- claude_mpm/cli/commands/configure_models.py +18 -0
- claude_mpm/cli/commands/configure_navigation.py +184 -0
- claude_mpm/cli/commands/configure_paths.py +104 -0
- claude_mpm/cli/commands/configure_persistence.py +254 -0
- claude_mpm/cli/commands/configure_startup_manager.py +646 -0
- claude_mpm/cli/commands/configure_template_editor.py +497 -0
- claude_mpm/cli/commands/configure_validators.py +73 -0
- claude_mpm/cli/commands/dashboard.py +286 -0
- claude_mpm/cli/commands/debug.py +1386 -0
- claude_mpm/cli/commands/doctor.py +243 -0
- claude_mpm/cli/commands/hook_errors.py +277 -0
- claude_mpm/cli/commands/info.py +195 -74
- claude_mpm/cli/commands/local_deploy.py +534 -0
- claude_mpm/cli/commands/mcp.py +205 -0
- claude_mpm/cli/commands/mcp_command_router.py +161 -0
- claude_mpm/cli/commands/mcp_config.py +154 -0
- claude_mpm/cli/commands/mcp_config_commands.py +20 -0
- claude_mpm/cli/commands/mcp_external_commands.py +249 -0
- claude_mpm/cli/commands/mcp_install_commands.py +346 -0
- claude_mpm/cli/commands/mcp_pipx_config.py +208 -0
- claude_mpm/cli/commands/mcp_server_commands.py +155 -0
- claude_mpm/cli/commands/mcp_setup_external.py +868 -0
- claude_mpm/cli/commands/mcp_tool_commands.py +34 -0
- claude_mpm/cli/commands/memory.py +585 -846
- claude_mpm/cli/commands/monitor.py +228 -310
- claude_mpm/cli/commands/mpm_init/__init__.py +73 -0
- claude_mpm/cli/commands/mpm_init/core.py +759 -0
- claude_mpm/cli/commands/mpm_init/display.py +341 -0
- claude_mpm/cli/commands/mpm_init/git_activity.py +427 -0
- claude_mpm/cli/commands/mpm_init/knowledge_extractor.py +481 -0
- claude_mpm/cli/commands/mpm_init/modes.py +397 -0
- claude_mpm/cli/commands/mpm_init/prompts.py +722 -0
- claude_mpm/cli/commands/mpm_init_cli.py +396 -0
- claude_mpm/cli/commands/mpm_init_handler.py +195 -0
- claude_mpm/cli/commands/postmortem.py +401 -0
- claude_mpm/cli/commands/profile.py +276 -0
- claude_mpm/cli/commands/run.py +910 -488
- claude_mpm/cli/commands/search.py +458 -0
- claude_mpm/cli/commands/skill_source.py +694 -0
- claude_mpm/cli/commands/skills.py +1246 -0
- claude_mpm/cli/commands/summarize.py +413 -0
- claude_mpm/cli/commands/tickets.py +536 -53
- claude_mpm/cli/commands/uninstall.py +176 -0
- claude_mpm/cli/commands/upgrade.py +152 -0
- claude_mpm/cli/commands/verify.py +119 -0
- claude_mpm/cli/executor.py +297 -0
- claude_mpm/cli/helpers.py +105 -0
- claude_mpm/cli/interactive/__init__.py +21 -0
- claude_mpm/cli/interactive/agent_wizard.py +1947 -0
- claude_mpm/cli/interactive/skills_wizard.py +491 -0
- claude_mpm/cli/parser.py +87 -563
- claude_mpm/cli/parsers/__init__.py +35 -0
- claude_mpm/cli/parsers/agent_manager_parser.py +393 -0
- claude_mpm/cli/parsers/agent_source_parser.py +171 -0
- claude_mpm/cli/parsers/agents_parser.py +575 -0
- claude_mpm/cli/parsers/analyze_code_parser.py +170 -0
- claude_mpm/cli/parsers/analyze_parser.py +135 -0
- claude_mpm/cli/parsers/auto_configure_parser.py +120 -0
- claude_mpm/cli/parsers/base_parser.py +644 -0
- claude_mpm/cli/parsers/config_parser.py +208 -0
- claude_mpm/cli/parsers/configure_parser.py +138 -0
- claude_mpm/cli/parsers/dashboard_parser.py +113 -0
- claude_mpm/cli/parsers/debug_parser.py +319 -0
- claude_mpm/cli/parsers/local_deploy_parser.py +227 -0
- claude_mpm/cli/parsers/mcp_parser.py +195 -0
- claude_mpm/cli/parsers/memory_parser.py +138 -0
- claude_mpm/cli/parsers/monitor_parser.py +142 -0
- claude_mpm/cli/parsers/mpm_init_parser.py +311 -0
- claude_mpm/cli/parsers/profile_parser.py +147 -0
- claude_mpm/cli/parsers/run_parser.py +157 -0
- claude_mpm/cli/parsers/search_parser.py +245 -0
- claude_mpm/cli/parsers/skill_source_parser.py +169 -0
- claude_mpm/cli/parsers/skills_parser.py +277 -0
- claude_mpm/cli/parsers/source_parser.py +138 -0
- claude_mpm/cli/parsers/tickets_parser.py +203 -0
- claude_mpm/cli/shared/__init__.py +40 -0
- claude_mpm/cli/shared/argument_patterns.py +205 -0
- claude_mpm/cli/shared/base_command.py +242 -0
- claude_mpm/cli/shared/error_handling.py +242 -0
- claude_mpm/cli/shared/output_formatters.py +241 -0
- claude_mpm/cli/startup.py +1743 -0
- claude_mpm/cli/startup_display.py +480 -0
- claude_mpm/cli/startup_logging.py +839 -0
- claude_mpm/cli/utils.py +136 -47
- claude_mpm/cli_module/__init__.py +6 -6
- claude_mpm/cli_module/args.py +188 -140
- claude_mpm/cli_module/commands.py +79 -70
- claude_mpm/cli_module/migration_example.py +42 -64
- claude_mpm/commands/__init__.py +14 -0
- claude_mpm/commands/mpm-config.md +28 -0
- claude_mpm/commands/mpm-doctor.md +20 -0
- claude_mpm/commands/mpm-help.md +20 -0
- claude_mpm/commands/mpm-init.md +120 -0
- claude_mpm/commands/mpm-monitor.md +31 -0
- claude_mpm/commands/mpm-organize.md +120 -0
- claude_mpm/commands/mpm-postmortem.md +21 -0
- claude_mpm/commands/mpm-session-resume.md +30 -0
- claude_mpm/commands/mpm-status.md +20 -0
- claude_mpm/commands/mpm-ticket-view.md +109 -0
- claude_mpm/commands/mpm-version.md +20 -0
- claude_mpm/commands/mpm.md +31 -0
- claude_mpm/config/__init__.py +42 -2
- claude_mpm/config/agent_config.py +402 -0
- claude_mpm/config/agent_presets.py +488 -0
- claude_mpm/config/agent_sources.py +352 -0
- claude_mpm/config/experimental_features.py +217 -0
- claude_mpm/config/model_config.py +428 -0
- claude_mpm/config/paths.py +258 -0
- claude_mpm/config/skill_presets.py +392 -0
- claude_mpm/config/skill_sources.py +590 -0
- claude_mpm/config/socketio_config.py +125 -83
- claude_mpm/constants.py +132 -22
- claude_mpm/core/__init__.py +62 -36
- claude_mpm/core/agent_name_normalizer.py +71 -73
- claude_mpm/core/agent_registry.py +385 -492
- claude_mpm/core/agent_session_manager.py +81 -70
- claude_mpm/core/api_validator.py +330 -0
- claude_mpm/core/base_service.py +159 -122
- claude_mpm/core/cache.py +560 -0
- claude_mpm/core/claude_runner.py +696 -916
- claude_mpm/core/config.py +613 -122
- claude_mpm/core/config_aliases.py +74 -73
- claude_mpm/core/config_constants.py +314 -0
- claude_mpm/core/constants.py +361 -0
- claude_mpm/core/container.py +646 -104
- claude_mpm/core/enums.py +452 -0
- claude_mpm/core/error_handler.py +623 -0
- claude_mpm/core/exceptions.py +536 -0
- claude_mpm/core/factories.py +105 -109
- claude_mpm/core/file_utils.py +764 -0
- claude_mpm/core/framework/__init__.py +25 -0
- claude_mpm/core/framework/formatters/__init__.py +11 -0
- claude_mpm/core/framework/formatters/capability_generator.py +367 -0
- claude_mpm/core/framework/formatters/content_formatter.py +278 -0
- claude_mpm/core/framework/formatters/context_generator.py +185 -0
- claude_mpm/core/framework/loaders/__init__.py +13 -0
- claude_mpm/core/framework/loaders/agent_loader.py +213 -0
- claude_mpm/core/framework/loaders/file_loader.py +176 -0
- claude_mpm/core/framework/loaders/instruction_loader.py +222 -0
- claude_mpm/core/framework/loaders/packaged_loader.py +232 -0
- claude_mpm/core/framework/processors/__init__.py +11 -0
- claude_mpm/core/framework/processors/memory_processor.py +230 -0
- claude_mpm/core/framework/processors/metadata_processor.py +146 -0
- claude_mpm/core/framework/processors/template_processor.py +244 -0
- claude_mpm/core/framework_loader.py +485 -414
- claude_mpm/core/hook_error_memory.py +381 -0
- claude_mpm/core/hook_manager.py +246 -86
- claude_mpm/core/hook_performance_config.py +147 -0
- claude_mpm/core/injectable_service.py +72 -63
- claude_mpm/core/instruction_reinforcement_hook.py +267 -0
- claude_mpm/core/interactive_session.py +670 -0
- claude_mpm/core/interfaces.py +570 -164
- claude_mpm/core/lazy.py +467 -0
- claude_mpm/core/log_manager.py +707 -0
- claude_mpm/core/logger.py +295 -134
- claude_mpm/core/logging_config.py +474 -0
- claude_mpm/core/logging_utils.py +520 -0
- claude_mpm/core/minimal_framework_loader.py +24 -22
- claude_mpm/core/mixins.py +30 -29
- claude_mpm/core/oneshot_session.py +594 -0
- claude_mpm/core/optimized_agent_loader.py +479 -0
- claude_mpm/core/optimized_startup.py +554 -0
- claude_mpm/core/output_style_manager.py +483 -0
- claude_mpm/core/pm_hook_interceptor.py +197 -82
- claude_mpm/core/protocols/__init__.py +23 -0
- claude_mpm/core/protocols/runner_protocol.py +103 -0
- claude_mpm/core/protocols/session_protocol.py +131 -0
- claude_mpm/core/service_registry.py +153 -116
- claude_mpm/core/session_manager.py +179 -64
- claude_mpm/core/shared/__init__.py +17 -0
- claude_mpm/core/shared/config_loader.py +326 -0
- claude_mpm/core/shared/path_resolver.py +281 -0
- claude_mpm/core/shared/singleton_manager.py +221 -0
- claude_mpm/core/socketio_pool.py +400 -137
- claude_mpm/core/system_context.py +38 -0
- claude_mpm/core/tool_access_control.py +64 -57
- claude_mpm/core/types.py +307 -0
- claude_mpm/core/typing_utils.py +553 -0
- claude_mpm/core/unified_agent_registry.py +969 -0
- claude_mpm/core/unified_config.py +570 -0
- claude_mpm/core/unified_paths.py +941 -0
- claude_mpm/dashboard/__init__.py +12 -0
- claude_mpm/dashboard/api/simple_directory.py +261 -0
- claude_mpm/dashboard/static/svelte-build/_app/env.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/assets/0.DWzvg0-y.css +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/assets/2.ThTw9_ym.css +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/4TdZjIqw.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/5shd3_w0.js +24 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/B0uc0UOD.js +36 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/B7RN905-.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/B7xVLGWV.js +2 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BIF9m_hv.js +61 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BKjSRqUr.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BPYeabCQ.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/BSNlmTZj.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Be7GpZd6.js +7 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Bh0LDWpI.js +145 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BofRWZRR.js +10 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BovzEFCE.js +30 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/C30mlcqg.js +165 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/C4B-KCzX.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/C4JcI4KD.js +122 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CBBdVcY8.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CDuw-vjf.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/C_Usid8X.js +15 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Cfqx1Qun.js +10 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CiIAseT4.js +128 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CmKTTxBW.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CnA0NrzZ.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Cs_tUR18.js +24 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Cu_Erd72.js +261 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CyWMqx4W.js +43 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CzZX-COe.js +220 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CzeYkLYB.js +65 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/D3k0OPJN.js +4 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/D9lljYKQ.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DGkLK5U1.js +267 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DI7hHRFL.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DLVjFsZ3.js +139 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DUrLdbGD.js +89 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DVp1hx9R.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DY1XQ8fi.js +2 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DZX00Y4g.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Da0KfYnO.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DaimHw_p.js +68 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Dfy6j1xT.js +323 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Dhb8PKl3.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Dle-35c7.js +64 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DmxopI1J.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DwBR2MJi.js +60 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/GYwsonyD.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Gi6I4Gst.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/NqQ1dWOy.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/RJiighC3.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Vzk33B_K.js +2 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/ZGh7QtNv.js +7 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/bT1r9zLR.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/bTOqqlTd.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/eNVUfhuA.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/iEWssX7S.js +162 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/sQeU3Y1z.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/uuIeMWc-.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/entry/app.D6-I5TpK.js +2 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/entry/start.NWzMBYRp.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/0.m1gL8KXf.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/1.CgNOuw-d.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/2.C0GcWctS.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/version.json +1 -0
- claude_mpm/dashboard/static/svelte-build/favicon.svg +7 -0
- claude_mpm/dashboard/static/svelte-build/index.html +36 -0
- claude_mpm/dashboard-svelte/node_modules/katex/src/fonts/generate_fonts.py +58 -0
- claude_mpm/dashboard-svelte/node_modules/katex/src/metrics/extract_tfms.py +114 -0
- claude_mpm/dashboard-svelte/node_modules/katex/src/metrics/extract_ttfs.py +122 -0
- claude_mpm/dashboard-svelte/node_modules/katex/src/metrics/format_json.py +28 -0
- claude_mpm/dashboard-svelte/node_modules/katex/src/metrics/parse_tfm.py +211 -0
- claude_mpm/experimental/__init__.py +10 -0
- claude_mpm/experimental/cli_enhancements.py +104 -89
- claude_mpm/generators/__init__.py +1 -1
- claude_mpm/generators/agent_profile_generator.py +76 -66
- claude_mpm/hooks/__init__.py +37 -1
- claude_mpm/hooks/base_hook.py +37 -32
- claude_mpm/hooks/claude_hooks/__init__.py +1 -1
- claude_mpm/hooks/claude_hooks/__pycache__/__init__.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/correlation_manager.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/event_handlers.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/hook_handler.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/installer.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/memory_integration.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/response_tracking.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/tool_analysis.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/connection_pool.py +250 -0
- claude_mpm/hooks/claude_hooks/correlation_manager.py +60 -0
- claude_mpm/hooks/claude_hooks/event_handlers.py +888 -0
- claude_mpm/hooks/claude_hooks/hook_handler.py +652 -875
- claude_mpm/hooks/claude_hooks/hook_wrapper.sh +10 -7
- claude_mpm/hooks/claude_hooks/installer.py +806 -0
- claude_mpm/hooks/claude_hooks/memory_integration.py +249 -0
- claude_mpm/hooks/claude_hooks/response_tracking.py +412 -0
- claude_mpm/hooks/claude_hooks/services/__init__.py +15 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/__init__.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/connection_manager_http.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/duplicate_detector.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/state_manager.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/subagent_processor.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/connection_manager.py +229 -0
- claude_mpm/hooks/claude_hooks/services/connection_manager_http.py +254 -0
- claude_mpm/hooks/claude_hooks/services/duplicate_detector.py +106 -0
- claude_mpm/hooks/claude_hooks/services/state_manager.py +284 -0
- claude_mpm/hooks/claude_hooks/services/subagent_processor.py +374 -0
- claude_mpm/hooks/claude_hooks/tool_analysis.py +224 -0
- claude_mpm/hooks/failure_learning/__init__.py +54 -0
- claude_mpm/hooks/failure_learning/failure_detection_hook.py +230 -0
- claude_mpm/hooks/failure_learning/fix_detection_hook.py +212 -0
- claude_mpm/hooks/failure_learning/learning_extraction_hook.py +281 -0
- claude_mpm/hooks/instruction_reinforcement.py +301 -0
- claude_mpm/hooks/kuzu_enrichment_hook.py +263 -0
- claude_mpm/hooks/kuzu_memory_hook.py +386 -0
- claude_mpm/hooks/kuzu_response_hook.py +179 -0
- claude_mpm/hooks/memory_integration_hook.py +201 -107
- claude_mpm/hooks/session_resume_hook.py +121 -0
- claude_mpm/hooks/templates/pre_tool_use_simple.py +78 -0
- claude_mpm/hooks/templates/pre_tool_use_template.py +323 -0
- claude_mpm/hooks/tool_call_interceptor.py +92 -76
- claude_mpm/hooks/validation_hooks.py +62 -54
- claude_mpm/init.py +518 -83
- claude_mpm/models/__init__.py +9 -9
- claude_mpm/models/agent_definition.py +40 -23
- claude_mpm/models/agent_session.py +538 -0
- claude_mpm/models/git_repository.py +198 -0
- claude_mpm/models/resume_log.py +340 -0
- claude_mpm/schemas/__init__.py +12 -0
- claude_mpm/scripts/__init__.py +15 -0
- claude_mpm/scripts/claude-hook-handler.sh +227 -0
- claude_mpm/scripts/launch_monitor.py +165 -0
- claude_mpm/scripts/mpm_doctor.py +322 -0
- claude_mpm/scripts/socketio_daemon.py +189 -200
- claude_mpm/scripts/start_activity_logging.py +91 -0
- claude_mpm/services/__init__.py +208 -39
- claude_mpm/services/agent_capabilities_service.py +266 -0
- claude_mpm/services/agents/__init__.py +89 -0
- claude_mpm/services/agents/agent_builder.py +514 -0
- claude_mpm/services/agents/agent_preset_service.py +238 -0
- claude_mpm/services/agents/agent_recommendation_service.py +278 -0
- claude_mpm/services/agents/agent_review_service.py +280 -0
- claude_mpm/services/agents/agent_selection_service.py +484 -0
- claude_mpm/services/agents/auto_config_manager.py +796 -0
- claude_mpm/services/agents/auto_deploy_index_parser.py +569 -0
- claude_mpm/services/agents/cache_git_manager.py +621 -0
- claude_mpm/services/agents/deployment/__init__.py +21 -0
- claude_mpm/services/agents/deployment/agent_config_provider.py +410 -0
- claude_mpm/services/agents/deployment/agent_configuration_manager.py +358 -0
- claude_mpm/services/agents/deployment/agent_definition_factory.py +80 -0
- claude_mpm/services/agents/deployment/agent_deployment.py +1037 -0
- claude_mpm/services/agents/deployment/agent_discovery_service.py +546 -0
- claude_mpm/services/agents/deployment/agent_environment_manager.py +288 -0
- claude_mpm/services/agents/deployment/agent_filesystem_manager.py +383 -0
- claude_mpm/services/agents/deployment/agent_format_converter.py +505 -0
- claude_mpm/services/agents/deployment/agent_frontmatter_validator.py +160 -0
- claude_mpm/services/agents/deployment/agent_lifecycle_manager.py +957 -0
- claude_mpm/services/agents/deployment/agent_metrics_collector.py +273 -0
- claude_mpm/services/agents/deployment/agent_operation_service.py +573 -0
- claude_mpm/services/agents/deployment/agent_record_service.py +418 -0
- claude_mpm/services/agents/deployment/agent_restore_handler.py +84 -0
- claude_mpm/services/agents/deployment/agent_state_service.py +381 -0
- claude_mpm/services/agents/deployment/agent_template_builder.py +1369 -0
- claude_mpm/services/agents/deployment/agent_validator.py +376 -0
- claude_mpm/services/agents/deployment/agent_version_manager.py +322 -0
- claude_mpm/services/{agent_versioning.py → agents/deployment/agent_versioning.py} +10 -13
- claude_mpm/services/agents/deployment/agents_directory_resolver.py +149 -0
- claude_mpm/services/agents/deployment/async_agent_deployment.py +768 -0
- claude_mpm/services/agents/deployment/base_agent_locator.py +132 -0
- claude_mpm/services/agents/deployment/config/__init__.py +13 -0
- claude_mpm/services/agents/deployment/config/deployment_config.py +181 -0
- claude_mpm/services/agents/deployment/config/deployment_config_manager.py +200 -0
- claude_mpm/services/agents/deployment/deployment_config_loader.py +178 -0
- claude_mpm/services/agents/deployment/deployment_results_manager.py +185 -0
- claude_mpm/services/agents/deployment/deployment_type_detector.py +120 -0
- claude_mpm/services/agents/deployment/deployment_wrapper.py +129 -0
- claude_mpm/services/agents/deployment/facade/__init__.py +18 -0
- claude_mpm/services/agents/deployment/facade/async_deployment_executor.py +159 -0
- claude_mpm/services/agents/deployment/facade/deployment_executor.py +70 -0
- claude_mpm/services/agents/deployment/facade/deployment_facade.py +269 -0
- claude_mpm/services/agents/deployment/facade/sync_deployment_executor.py +178 -0
- claude_mpm/services/agents/deployment/interface_adapter.py +226 -0
- claude_mpm/services/agents/deployment/lifecycle_health_checker.py +85 -0
- claude_mpm/services/agents/deployment/lifecycle_performance_tracker.py +100 -0
- claude_mpm/services/agents/deployment/local_template_deployment.py +362 -0
- claude_mpm/services/agents/deployment/multi_source_deployment_service.py +1478 -0
- claude_mpm/services/agents/deployment/pipeline/__init__.py +32 -0
- claude_mpm/services/agents/deployment/pipeline/pipeline_builder.py +158 -0
- claude_mpm/services/agents/deployment/pipeline/pipeline_context.py +162 -0
- claude_mpm/services/agents/deployment/pipeline/pipeline_executor.py +169 -0
- claude_mpm/services/agents/deployment/pipeline/steps/__init__.py +19 -0
- claude_mpm/services/agents/deployment/pipeline/steps/agent_processing_step.py +240 -0
- claude_mpm/services/agents/deployment/pipeline/steps/base_step.py +110 -0
- claude_mpm/services/agents/deployment/pipeline/steps/configuration_step.py +80 -0
- claude_mpm/services/agents/deployment/pipeline/steps/target_directory_step.py +92 -0
- claude_mpm/services/agents/deployment/pipeline/steps/validation_step.py +101 -0
- claude_mpm/services/agents/deployment/processors/__init__.py +15 -0
- claude_mpm/services/agents/deployment/processors/agent_deployment_context.py +102 -0
- claude_mpm/services/agents/deployment/processors/agent_deployment_result.py +235 -0
- claude_mpm/services/agents/deployment/processors/agent_processor.py +269 -0
- claude_mpm/services/agents/deployment/refactored_agent_deployment_service.py +311 -0
- claude_mpm/services/agents/deployment/remote_agent_discovery_service.py +862 -0
- claude_mpm/services/agents/deployment/results/__init__.py +13 -0
- claude_mpm/services/agents/deployment/results/deployment_metrics.py +200 -0
- claude_mpm/services/agents/deployment/results/deployment_result_builder.py +249 -0
- claude_mpm/services/agents/deployment/single_agent_deployer.py +315 -0
- claude_mpm/services/agents/deployment/strategies/__init__.py +25 -0
- claude_mpm/services/agents/deployment/strategies/base_strategy.py +113 -0
- claude_mpm/services/agents/deployment/strategies/project_strategy.py +148 -0
- claude_mpm/services/agents/deployment/strategies/strategy_selector.py +117 -0
- claude_mpm/services/agents/deployment/strategies/system_strategy.py +131 -0
- claude_mpm/services/agents/deployment/strategies/user_strategy.py +130 -0
- claude_mpm/services/agents/deployment/system_instructions_deployer.py +228 -0
- claude_mpm/services/agents/deployment/validation/__init__.py +21 -0
- claude_mpm/services/agents/deployment/validation/agent_validator.py +323 -0
- claude_mpm/services/agents/deployment/validation/deployment_validator.py +238 -0
- claude_mpm/services/agents/deployment/validation/template_validator.py +319 -0
- claude_mpm/services/agents/deployment/validation/validation_result.py +214 -0
- claude_mpm/services/agents/git_source_manager.py +682 -0
- claude_mpm/services/agents/loading/__init__.py +11 -0
- claude_mpm/services/{agent_profile_loader.py → agents/loading/agent_profile_loader.py} +306 -228
- claude_mpm/services/{base_agent_manager.py → agents/loading/base_agent_manager.py} +106 -91
- claude_mpm/services/agents/loading/framework_agent_loader.py +433 -0
- claude_mpm/services/agents/local_template_manager.py +784 -0
- claude_mpm/services/agents/management/__init__.py +9 -0
- claude_mpm/services/{agent_capabilities_generator.py → agents/management/agent_capabilities_generator.py} +92 -69
- claude_mpm/services/{agent_management_service.py → agents/management/agent_management_service.py} +219 -168
- claude_mpm/services/agents/memory/__init__.py +22 -0
- claude_mpm/services/agents/memory/agent_memory_manager.py +784 -0
- claude_mpm/services/{agent_persistence_service.py → agents/memory/agent_persistence_service.py} +20 -18
- claude_mpm/services/agents/memory/content_manager.py +470 -0
- claude_mpm/services/agents/memory/memory_categorization_service.py +167 -0
- claude_mpm/services/agents/memory/memory_file_service.py +129 -0
- claude_mpm/services/agents/memory/memory_format_service.py +201 -0
- claude_mpm/services/agents/memory/memory_limits_service.py +101 -0
- claude_mpm/services/agents/memory/template_generator.py +83 -0
- claude_mpm/services/agents/observers.py +547 -0
- claude_mpm/services/agents/recommender.py +617 -0
- claude_mpm/services/agents/registry/__init__.py +30 -0
- claude_mpm/services/agents/registry/deployed_agent_discovery.py +273 -0
- claude_mpm/services/{agent_modification_tracker.py → agents/registry/modification_tracker.py} +370 -295
- claude_mpm/services/agents/single_tier_deployment_service.py +696 -0
- claude_mpm/services/agents/sources/__init__.py +13 -0
- claude_mpm/services/agents/sources/agent_sync_state.py +516 -0
- claude_mpm/services/agents/sources/git_source_sync_service.py +1202 -0
- claude_mpm/services/agents/startup_sync.py +259 -0
- claude_mpm/services/agents/toolchain_detector.py +478 -0
- claude_mpm/services/analysis/__init__.py +35 -0
- claude_mpm/services/analysis/clone_detector.py +1030 -0
- claude_mpm/services/analysis/postmortem_reporter.py +474 -0
- claude_mpm/services/analysis/postmortem_service.py +765 -0
- claude_mpm/services/async_session_logger.py +665 -0
- claude_mpm/services/claude_session_logger.py +321 -0
- claude_mpm/services/cli/__init__.py +18 -0
- claude_mpm/services/cli/agent_cleanup_service.py +408 -0
- claude_mpm/services/cli/agent_dependency_service.py +395 -0
- claude_mpm/services/cli/agent_listing_service.py +463 -0
- claude_mpm/services/cli/agent_output_formatter.py +605 -0
- claude_mpm/services/cli/agent_validation_service.py +590 -0
- claude_mpm/services/cli/memory_crud_service.py +622 -0
- claude_mpm/services/cli/memory_output_formatter.py +604 -0
- claude_mpm/services/cli/resume_service.py +617 -0
- claude_mpm/services/cli/session_manager.py +604 -0
- claude_mpm/services/cli/session_pause_manager.py +504 -0
- claude_mpm/services/cli/session_resume_helper.py +372 -0
- claude_mpm/services/cli/startup_checker.py +362 -0
- claude_mpm/services/cli/unified_dashboard_manager.py +439 -0
- claude_mpm/services/command_deployment_service.py +446 -0
- claude_mpm/services/command_handler_service.py +221 -0
- claude_mpm/services/communication/__init__.py +22 -0
- claude_mpm/services/core/__init__.py +108 -0
- claude_mpm/services/core/base.py +269 -0
- claude_mpm/services/core/cache_manager.py +309 -0
- claude_mpm/services/core/interfaces/__init__.py +273 -0
- claude_mpm/services/core/interfaces/agent.py +514 -0
- claude_mpm/services/core/interfaces/communication.py +316 -0
- claude_mpm/services/core/interfaces/health.py +169 -0
- claude_mpm/services/core/interfaces/infrastructure.py +357 -0
- claude_mpm/services/core/interfaces/model.py +281 -0
- claude_mpm/services/core/interfaces/process.py +372 -0
- claude_mpm/services/core/interfaces/project.py +121 -0
- claude_mpm/services/core/interfaces/restart.py +307 -0
- claude_mpm/services/core/interfaces/service.py +405 -0
- claude_mpm/services/core/interfaces/stability.py +260 -0
- claude_mpm/services/core/interfaces.py +81 -0
- claude_mpm/services/core/memory_manager.py +682 -0
- claude_mpm/services/core/models/__init__.py +70 -0
- claude_mpm/services/core/models/agent_config.py +384 -0
- claude_mpm/services/core/models/health.py +162 -0
- claude_mpm/services/core/models/process.py +239 -0
- claude_mpm/services/core/models/restart.py +302 -0
- claude_mpm/services/core/models/stability.py +264 -0
- claude_mpm/services/core/models/toolchain.py +306 -0
- claude_mpm/services/core/path_resolver.py +517 -0
- claude_mpm/services/core/service_container.py +520 -0
- claude_mpm/services/core/service_interfaces.py +436 -0
- claude_mpm/services/diagnostics/__init__.py +18 -0
- claude_mpm/services/diagnostics/checks/__init__.py +38 -0
- claude_mpm/services/diagnostics/checks/agent_check.py +370 -0
- claude_mpm/services/diagnostics/checks/agent_sources_check.py +577 -0
- claude_mpm/services/diagnostics/checks/base_check.py +60 -0
- claude_mpm/services/diagnostics/checks/claude_code_check.py +270 -0
- claude_mpm/services/diagnostics/checks/common_issues_check.py +363 -0
- claude_mpm/services/diagnostics/checks/configuration_check.py +306 -0
- claude_mpm/services/diagnostics/checks/filesystem_check.py +233 -0
- claude_mpm/services/diagnostics/checks/installation_check.py +520 -0
- claude_mpm/services/diagnostics/checks/instructions_check.py +415 -0
- claude_mpm/services/diagnostics/checks/mcp_check.py +330 -0
- claude_mpm/services/diagnostics/checks/mcp_services_check.py +1058 -0
- claude_mpm/services/diagnostics/checks/monitor_check.py +281 -0
- claude_mpm/services/diagnostics/checks/skill_sources_check.py +587 -0
- claude_mpm/services/diagnostics/checks/startup_log_check.py +319 -0
- claude_mpm/services/diagnostics/diagnostic_runner.py +286 -0
- claude_mpm/services/diagnostics/doctor_reporter.py +578 -0
- claude_mpm/services/diagnostics/models.py +138 -0
- claude_mpm/services/event_aggregator.py +582 -0
- claude_mpm/services/event_bus/__init__.py +18 -0
- claude_mpm/services/event_bus/config.py +186 -0
- claude_mpm/services/event_bus/direct_relay.py +312 -0
- claude_mpm/services/event_bus/event_bus.py +396 -0
- claude_mpm/services/event_bus/relay.py +326 -0
- claude_mpm/services/events/__init__.py +44 -0
- claude_mpm/services/events/consumers/__init__.py +18 -0
- claude_mpm/services/events/consumers/dead_letter.py +306 -0
- claude_mpm/services/events/consumers/logging.py +184 -0
- claude_mpm/services/events/consumers/metrics.py +241 -0
- claude_mpm/services/events/consumers/socketio.py +377 -0
- claude_mpm/services/events/core.py +480 -0
- claude_mpm/services/events/interfaces.py +214 -0
- claude_mpm/services/events/producers/__init__.py +14 -0
- claude_mpm/services/events/producers/hook.py +269 -0
- claude_mpm/services/events/producers/system.py +329 -0
- claude_mpm/services/exceptions.py +433 -353
- claude_mpm/services/framework_claude_md_generator/__init__.py +81 -80
- claude_mpm/services/framework_claude_md_generator/content_assembler.py +74 -67
- claude_mpm/services/framework_claude_md_generator/content_validator.py +66 -62
- claude_mpm/services/framework_claude_md_generator/deployment_manager.py +82 -60
- claude_mpm/services/framework_claude_md_generator/section_generators/__init__.py +36 -37
- claude_mpm/services/framework_claude_md_generator/section_generators/agents.py +41 -40
- claude_mpm/services/framework_claude_md_generator/section_generators/claude_pm_init.py +15 -15
- claude_mpm/services/framework_claude_md_generator/section_generators/core_responsibilities.py +5 -4
- claude_mpm/services/framework_claude_md_generator/section_generators/delegation_constraints.py +4 -3
- claude_mpm/services/framework_claude_md_generator/section_generators/environment_config.py +4 -3
- claude_mpm/services/framework_claude_md_generator/section_generators/footer.py +6 -5
- claude_mpm/services/framework_claude_md_generator/section_generators/header.py +8 -7
- claude_mpm/services/framework_claude_md_generator/section_generators/orchestration_principles.py +5 -4
- claude_mpm/services/framework_claude_md_generator/section_generators/role_designation.py +6 -5
- claude_mpm/services/framework_claude_md_generator/section_generators/subprocess_validation.py +9 -8
- claude_mpm/services/framework_claude_md_generator/section_generators/todo_task_tools.py +26 -30
- claude_mpm/services/framework_claude_md_generator/section_generators/troubleshooting.py +6 -5
- claude_mpm/services/framework_claude_md_generator/section_manager.py +28 -27
- claude_mpm/services/framework_claude_md_generator/version_manager.py +31 -30
- claude_mpm/services/git/__init__.py +21 -0
- claude_mpm/services/git/git_operations_service.py +579 -0
- claude_mpm/services/github/__init__.py +21 -0
- claude_mpm/services/github/github_cli_service.py +397 -0
- claude_mpm/services/hook_installer_service.py +506 -0
- claude_mpm/services/hook_service.py +159 -111
- claude_mpm/services/infrastructure/__init__.py +52 -0
- claude_mpm/services/infrastructure/context_preservation.py +569 -0
- claude_mpm/services/infrastructure/daemon_manager.py +279 -0
- claude_mpm/services/infrastructure/logging.py +209 -0
- claude_mpm/services/infrastructure/monitoring/__init__.py +39 -0
- claude_mpm/services/infrastructure/monitoring/aggregator.py +432 -0
- claude_mpm/services/infrastructure/monitoring/base.py +122 -0
- claude_mpm/services/infrastructure/monitoring/legacy.py +203 -0
- claude_mpm/services/infrastructure/monitoring/network.py +219 -0
- claude_mpm/services/infrastructure/monitoring/process.py +343 -0
- claude_mpm/services/infrastructure/monitoring/resources.py +244 -0
- claude_mpm/services/infrastructure/monitoring/service.py +368 -0
- claude_mpm/services/infrastructure/monitoring.py +71 -0
- claude_mpm/services/infrastructure/resume_log_generator.py +439 -0
- claude_mpm/services/instructions/__init__.py +9 -0
- claude_mpm/services/instructions/instruction_cache_service.py +374 -0
- claude_mpm/services/local_ops/__init__.py +155 -0
- claude_mpm/services/local_ops/crash_detector.py +257 -0
- claude_mpm/services/local_ops/health_checks/__init__.py +26 -0
- claude_mpm/services/local_ops/health_checks/http_check.py +224 -0
- claude_mpm/services/local_ops/health_checks/process_check.py +236 -0
- claude_mpm/services/local_ops/health_checks/resource_check.py +255 -0
- claude_mpm/services/local_ops/health_manager.py +427 -0
- claude_mpm/services/local_ops/log_monitor.py +396 -0
- claude_mpm/services/local_ops/memory_leak_detector.py +294 -0
- claude_mpm/services/local_ops/process_manager.py +595 -0
- claude_mpm/services/local_ops/resource_monitor.py +331 -0
- claude_mpm/services/local_ops/restart_manager.py +401 -0
- claude_mpm/services/local_ops/restart_policy.py +387 -0
- claude_mpm/services/local_ops/state_manager.py +372 -0
- claude_mpm/services/local_ops/unified_manager.py +600 -0
- claude_mpm/services/mcp_config_manager.py +1542 -0
- claude_mpm/services/mcp_service_verifier.py +732 -0
- claude_mpm/services/memory/__init__.py +19 -0
- claude_mpm/services/{memory_builder.py → memory/builder.py} +465 -373
- claude_mpm/services/memory/cache/__init__.py +14 -0
- claude_mpm/services/{shared_prompt_cache.py → memory/cache/shared_prompt_cache.py} +237 -200
- claude_mpm/services/memory/cache/simple_cache.py +331 -0
- claude_mpm/services/memory/failure_tracker.py +578 -0
- claude_mpm/services/memory/indexed_memory.py +648 -0
- claude_mpm/services/{memory_optimizer.py → memory/optimizer.py} +272 -243
- claude_mpm/services/memory/router.py +951 -0
- claude_mpm/services/memory_hook_service.py +470 -0
- claude_mpm/services/model/__init__.py +147 -0
- claude_mpm/services/model/base_provider.py +365 -0
- claude_mpm/services/model/claude_provider.py +412 -0
- claude_mpm/services/model/model_router.py +452 -0
- claude_mpm/services/model/ollama_provider.py +415 -0
- claude_mpm/services/monitor/__init__.py +20 -0
- claude_mpm/services/monitor/daemon.py +698 -0
- claude_mpm/services/monitor/daemon_manager.py +1076 -0
- claude_mpm/services/monitor/event_emitter.py +350 -0
- claude_mpm/services/monitor/handlers/__init__.py +21 -0
- claude_mpm/services/monitor/handlers/code_analysis.py +332 -0
- claude_mpm/services/monitor/handlers/dashboard.py +299 -0
- claude_mpm/services/monitor/handlers/file.py +264 -0
- claude_mpm/services/monitor/handlers/hooks.py +512 -0
- claude_mpm/services/monitor/management/__init__.py +18 -0
- claude_mpm/services/monitor/management/health.py +124 -0
- claude_mpm/services/monitor/management/lifecycle.py +730 -0
- claude_mpm/services/monitor/server.py +1493 -0
- claude_mpm/services/monitor_build_service.py +349 -0
- claude_mpm/services/native_agent_converter.py +356 -0
- claude_mpm/services/orphan_detection.py +786 -0
- claude_mpm/services/pm_skills_deployer.py +707 -0
- claude_mpm/services/port_manager.py +597 -0
- claude_mpm/services/pr/__init__.py +14 -0
- claude_mpm/services/pr/pr_template_service.py +329 -0
- claude_mpm/services/profile_manager.py +337 -0
- claude_mpm/services/project/__init__.py +44 -0
- claude_mpm/services/{project_analyzer.py → project/analyzer.py} +541 -291
- claude_mpm/services/project/analyzer_v2.py +566 -0
- claude_mpm/services/project/architecture_analyzer.py +461 -0
- claude_mpm/services/project/archive_manager.py +1045 -0
- claude_mpm/services/project/dependency_analyzer.py +462 -0
- claude_mpm/services/project/detection_strategies.py +719 -0
- claude_mpm/services/project/documentation_manager.py +554 -0
- claude_mpm/services/project/enhanced_analyzer.py +572 -0
- claude_mpm/services/project/language_analyzer.py +265 -0
- claude_mpm/services/project/metrics_collector.py +407 -0
- claude_mpm/services/project/project_organizer.py +1009 -0
- claude_mpm/services/project/registry.py +636 -0
- claude_mpm/services/project/toolchain_analyzer.py +583 -0
- claude_mpm/services/project_port_allocator.py +596 -0
- claude_mpm/services/recovery_manager.py +293 -240
- claude_mpm/services/response_tracker.py +267 -0
- claude_mpm/services/runner_configuration_service.py +605 -0
- claude_mpm/services/self_upgrade_service.py +608 -0
- claude_mpm/services/session_management_service.py +314 -0
- claude_mpm/services/session_manager.py +380 -0
- claude_mpm/services/shared/__init__.py +21 -0
- claude_mpm/services/shared/async_service_base.py +216 -0
- claude_mpm/services/shared/config_service_base.py +301 -0
- claude_mpm/services/shared/lifecycle_service_base.py +308 -0
- claude_mpm/services/shared/manager_base.py +315 -0
- claude_mpm/services/shared/service_factory.py +309 -0
- claude_mpm/services/skills/__init__.py +21 -0
- claude_mpm/services/skills/git_skill_source_manager.py +1324 -0
- claude_mpm/services/skills/selective_skill_deployer.py +744 -0
- claude_mpm/services/skills/skill_discovery_service.py +568 -0
- claude_mpm/services/skills/skill_to_agent_mapper.py +406 -0
- claude_mpm/services/skills_config.py +547 -0
- claude_mpm/services/skills_deployer.py +1168 -0
- claude_mpm/services/socketio/__init__.py +25 -0
- claude_mpm/services/socketio/client_proxy.py +229 -0
- claude_mpm/services/socketio/dashboard_server.py +362 -0
- claude_mpm/services/socketio/event_normalizer.py +798 -0
- claude_mpm/services/socketio/handlers/__init__.py +30 -0
- claude_mpm/services/socketio/handlers/base.py +136 -0
- claude_mpm/services/socketio/handlers/code_analysis.py +682 -0
- claude_mpm/services/socketio/handlers/connection.py +643 -0
- claude_mpm/services/socketio/handlers/connection_handler.py +333 -0
- claude_mpm/services/socketio/handlers/file.py +263 -0
- claude_mpm/services/socketio/handlers/git.py +962 -0
- claude_mpm/services/socketio/handlers/hook.py +211 -0
- claude_mpm/services/socketio/handlers/memory.py +26 -0
- claude_mpm/services/socketio/handlers/project.py +24 -0
- claude_mpm/services/socketio/handlers/registry.py +214 -0
- claude_mpm/services/socketio/migration_utils.py +343 -0
- claude_mpm/services/socketio/monitor_client.py +364 -0
- claude_mpm/services/socketio/server/__init__.py +18 -0
- claude_mpm/services/socketio/server/broadcaster.py +569 -0
- claude_mpm/services/socketio/server/connection_manager.py +579 -0
- claude_mpm/services/socketio/server/core.py +1079 -0
- claude_mpm/services/socketio/server/eventbus_integration.py +245 -0
- claude_mpm/services/socketio/server/main.py +501 -0
- claude_mpm/services/socketio_client_manager.py +173 -143
- claude_mpm/services/socketio_server.py +38 -1657
- claude_mpm/services/subprocess_launcher_service.py +322 -0
- claude_mpm/services/system_instructions_service.py +270 -0
- claude_mpm/services/ticket_manager.py +25 -209
- claude_mpm/services/ticket_services/__init__.py +26 -0
- claude_mpm/services/ticket_services/crud_service.py +328 -0
- claude_mpm/services/ticket_services/formatter_service.py +290 -0
- claude_mpm/services/ticket_services/search_service.py +324 -0
- claude_mpm/services/ticket_services/validation_service.py +303 -0
- claude_mpm/services/ticket_services/workflow_service.py +244 -0
- claude_mpm/services/unified/__init__.py +65 -0
- claude_mpm/services/unified/analyzer_strategies/__init__.py +44 -0
- claude_mpm/services/unified/analyzer_strategies/code_analyzer.py +518 -0
- claude_mpm/services/unified/analyzer_strategies/dependency_analyzer.py +680 -0
- claude_mpm/services/unified/analyzer_strategies/performance_analyzer.py +900 -0
- claude_mpm/services/unified/analyzer_strategies/security_analyzer.py +745 -0
- claude_mpm/services/unified/analyzer_strategies/structure_analyzer.py +733 -0
- claude_mpm/services/unified/config_strategies/__init__.py +175 -0
- claude_mpm/services/unified/config_strategies/config_schema.py +731 -0
- claude_mpm/services/unified/config_strategies/context_strategy.py +747 -0
- claude_mpm/services/unified/config_strategies/error_handling_strategy.py +1005 -0
- claude_mpm/services/unified/config_strategies/file_loader_strategy.py +881 -0
- claude_mpm/services/unified/config_strategies/unified_config_service.py +823 -0
- claude_mpm/services/unified/config_strategies/validation_strategy.py +1148 -0
- claude_mpm/services/unified/deployment_strategies/__init__.py +97 -0
- claude_mpm/services/unified/deployment_strategies/base.py +553 -0
- claude_mpm/services/unified/deployment_strategies/cloud_strategies.py +573 -0
- claude_mpm/services/unified/deployment_strategies/local.py +607 -0
- claude_mpm/services/unified/deployment_strategies/utils.py +667 -0
- claude_mpm/services/unified/deployment_strategies/vercel.py +471 -0
- claude_mpm/services/unified/interfaces.py +475 -0
- claude_mpm/services/unified/migration.py +509 -0
- claude_mpm/services/unified/strategies.py +534 -0
- claude_mpm/services/unified/unified_analyzer.py +542 -0
- claude_mpm/services/unified/unified_config.py +691 -0
- claude_mpm/services/unified/unified_deployment.py +466 -0
- claude_mpm/services/utility_service.py +280 -0
- claude_mpm/services/version_control/__init__.py +34 -37
- claude_mpm/services/version_control/branch_strategy.py +26 -17
- claude_mpm/services/version_control/conflict_resolution.py +52 -36
- claude_mpm/services/version_control/git_operations.py +183 -49
- claude_mpm/services/version_control/semantic_versioning.py +172 -61
- claude_mpm/services/version_control/version_parser.py +546 -0
- claude_mpm/services/version_service.py +379 -0
- claude_mpm/services/visualization/__init__.py +15 -0
- claude_mpm/services/visualization/mermaid_generator.py +937 -0
- claude_mpm/skills/__init__.py +42 -0
- claude_mpm/skills/agent_skills_injector.py +324 -0
- claude_mpm/skills/bundled/LICENSE_ATTRIBUTIONS.md +79 -0
- claude_mpm/skills/bundled/__init__.py +6 -0
- claude_mpm/skills/bundled/api-documentation.md +393 -0
- claude_mpm/skills/bundled/async-testing.md +571 -0
- claude_mpm/skills/bundled/code-review.md +143 -0
- claude_mpm/skills/bundled/database-migration.md +199 -0
- claude_mpm/skills/bundled/docker-containerization.md +194 -0
- claude_mpm/skills/bundled/express-local-dev.md +1429 -0
- claude_mpm/skills/bundled/fastapi-local-dev.md +1199 -0
- claude_mpm/skills/bundled/git-workflow.md +414 -0
- claude_mpm/skills/bundled/imagemagick.md +204 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/scripts/validate_env.py +576 -0
- claude_mpm/skills/bundled/json-data-handling.md +223 -0
- claude_mpm/skills/bundled/main/mcp-builder/scripts/connections.py +157 -0
- claude_mpm/skills/bundled/main/mcp-builder/scripts/evaluation.py +425 -0
- claude_mpm/skills/bundled/main/skill-creator/scripts/init_skill.py +303 -0
- claude_mpm/skills/bundled/main/skill-creator/scripts/package_skill.py +113 -0
- claude_mpm/skills/bundled/main/skill-creator/scripts/quick_validate.py +72 -0
- claude_mpm/skills/bundled/nextjs-local-dev.md +807 -0
- claude_mpm/skills/bundled/pdf.md +141 -0
- claude_mpm/skills/bundled/performance-profiling.md +573 -0
- claude_mpm/skills/bundled/refactoring-patterns.md +180 -0
- claude_mpm/skills/bundled/security-scanning.md +439 -0
- claude_mpm/skills/bundled/systematic-debugging.md +473 -0
- claude_mpm/skills/bundled/test-driven-development.md +378 -0
- claude_mpm/skills/bundled/testing/webapp-testing/examples/console_logging.py +35 -0
- claude_mpm/skills/bundled/testing/webapp-testing/examples/element_discovery.py +44 -0
- claude_mpm/skills/bundled/testing/webapp-testing/examples/static_html_automation.py +34 -0
- claude_mpm/skills/bundled/testing/webapp-testing/scripts/with_server.py +129 -0
- claude_mpm/skills/bundled/vite-local-dev.md +1061 -0
- claude_mpm/skills/bundled/web-performance-optimization.md +2305 -0
- claude_mpm/skills/bundled/xlsx.md +157 -0
- claude_mpm/skills/registry.py +286 -0
- claude_mpm/skills/skill_manager.py +405 -0
- claude_mpm/skills/skills_registry.py +347 -0
- claude_mpm/skills/skills_service.py +739 -0
- claude_mpm/storage/__init__.py +9 -0
- claude_mpm/storage/state_storage.py +546 -0
- claude_mpm/templates/.pre-commit-config.yaml +112 -0
- claude_mpm/templates/questions/__init__.py +38 -0
- claude_mpm/templates/questions/base.py +193 -0
- claude_mpm/templates/questions/pr_strategy.py +311 -0
- claude_mpm/templates/questions/project_init.py +385 -0
- claude_mpm/templates/questions/ticket_mgmt.py +394 -0
- claude_mpm/ticket_wrapper.py +2 -2
- claude_mpm/tools/__init__.py +10 -0
- claude_mpm/tools/__main__.py +208 -0
- claude_mpm/tools/code_tree_analyzer/__init__.py +45 -0
- claude_mpm/tools/code_tree_analyzer/analysis.py +299 -0
- claude_mpm/tools/code_tree_analyzer/cache.py +131 -0
- claude_mpm/tools/code_tree_analyzer/core.py +380 -0
- claude_mpm/tools/code_tree_analyzer/discovery.py +403 -0
- claude_mpm/tools/code_tree_analyzer/events.py +168 -0
- claude_mpm/tools/code_tree_analyzer/gitignore.py +308 -0
- claude_mpm/tools/code_tree_analyzer/models.py +39 -0
- claude_mpm/tools/code_tree_analyzer/multilang_analyzer.py +224 -0
- claude_mpm/tools/code_tree_analyzer/python_analyzer.py +284 -0
- claude_mpm/tools/code_tree_builder.py +631 -0
- claude_mpm/tools/code_tree_events.py +420 -0
- claude_mpm/tools/socketio_debug.py +671 -0
- claude_mpm/utils/__init__.py +8 -8
- claude_mpm/utils/agent_dependency_loader.py +1090 -0
- claude_mpm/utils/agent_filters.py +261 -0
- claude_mpm/utils/common.py +544 -0
- claude_mpm/utils/config_manager.py +168 -126
- claude_mpm/utils/console.py +11 -0
- claude_mpm/utils/database_connector.py +298 -0
- claude_mpm/utils/dependency_cache.py +373 -0
- claude_mpm/utils/dependency_manager.py +60 -59
- claude_mpm/utils/dependency_strategies.py +381 -0
- claude_mpm/utils/display_helper.py +260 -0
- claude_mpm/utils/environment_context.py +313 -0
- claude_mpm/utils/error_handler.py +78 -66
- claude_mpm/utils/file_utils.py +305 -0
- claude_mpm/utils/framework_detection.py +12 -11
- claude_mpm/utils/git_analyzer.py +407 -0
- claude_mpm/utils/gitignore.py +244 -0
- claude_mpm/utils/import_migration_example.py +12 -60
- claude_mpm/utils/imports.py +48 -45
- claude_mpm/utils/log_cleanup.py +627 -0
- claude_mpm/utils/migration.py +372 -0
- claude_mpm/utils/path_operations.py +110 -104
- claude_mpm/utils/progress.py +387 -0
- claude_mpm/utils/robust_installer.py +823 -0
- claude_mpm/utils/session_logging.py +121 -0
- claude_mpm/utils/structured_questions.py +619 -0
- claude_mpm/utils/subprocess_utils.py +343 -0
- claude_mpm/validation/__init__.py +1 -1
- claude_mpm/validation/agent_validator.py +214 -108
- claude_mpm/validation/frontmatter_validator.py +252 -0
- claude_mpm-5.4.55.dist-info/METADATA +999 -0
- claude_mpm-5.4.55.dist-info/RECORD +868 -0
- {claude_mpm-3.4.10.dist-info → claude_mpm-5.4.55.dist-info}/entry_points.txt +1 -3
- claude_mpm-5.4.55.dist-info/licenses/LICENSE +94 -0
- claude_mpm-5.4.55.dist-info/licenses/LICENSE-FAQ.md +153 -0
- claude_mpm/agents/BASE_AGENT_TEMPLATE.md +0 -88
- claude_mpm/agents/INSTRUCTIONS.md +0 -352
- claude_mpm/agents/backups/INSTRUCTIONS.md +0 -352
- claude_mpm/agents/base_agent_loader.py +0 -529
- claude_mpm/agents/schema/agent_schema.json +0 -314
- claude_mpm/agents/templates/.claude-mpm/memories/README.md +0 -36
- claude_mpm/agents/templates/backup/data_engineer_agent_20250726_234551.json +0 -46
- claude_mpm/agents/templates/backup/documentation_agent_20250726_234551.json +0 -45
- claude_mpm/agents/templates/backup/engineer_agent_20250726_234551.json +0 -49
- claude_mpm/agents/templates/backup/ops_agent_20250726_234551.json +0 -46
- claude_mpm/agents/templates/backup/qa_agent_20250726_234551.json +0 -45
- claude_mpm/agents/templates/backup/research_agent_20250726_234551.json +0 -49
- claude_mpm/agents/templates/backup/security_agent_20250726_234551.json +0 -46
- claude_mpm/agents/templates/backup/version_control_agent_20250726_234551.json +0 -46
- claude_mpm/agents/templates/data_engineer.json +0 -110
- claude_mpm/agents/templates/documentation.json +0 -109
- claude_mpm/agents/templates/engineer.json +0 -113
- claude_mpm/agents/templates/ops.json +0 -109
- claude_mpm/agents/templates/pm.json +0 -25
- claude_mpm/agents/templates/qa.json +0 -111
- claude_mpm/agents/templates/research.json +0 -65
- claude_mpm/agents/templates/security.json +0 -113
- claude_mpm/agents/templates/test_integration.json +0 -112
- claude_mpm/agents/templates/version_control.json +0 -107
- claude_mpm/cli/commands/ui.py +0 -57
- claude_mpm/core/simple_runner.py +0 -1046
- claude_mpm/dashboard/open_dashboard.py +0 -34
- claude_mpm/deployment_paths.py +0 -261
- claude_mpm/hooks/builtin/__init__.py +0 -1
- claude_mpm/hooks/builtin/logging_hook_example.py +0 -165
- claude_mpm/hooks/builtin/memory_hooks_example.py +0 -67
- claude_mpm/hooks/builtin/mpm_command_hook.py +0 -125
- claude_mpm/hooks/builtin/post_delegation_hook_example.py +0 -124
- claude_mpm/hooks/builtin/pre_delegation_hook_example.py +0 -125
- claude_mpm/hooks/builtin/submit_hook_example.py +0 -100
- claude_mpm/hooks/builtin/ticket_extraction_hook_example.py +0 -237
- claude_mpm/hooks/builtin/todo_agent_prefix_hook.py +0 -240
- claude_mpm/hooks/builtin/workflow_start_hook.py +0 -181
- claude_mpm/orchestration/__init__.py +0 -6
- claude_mpm/orchestration/archive/direct_orchestrator.py +0 -195
- claude_mpm/orchestration/archive/factory.py +0 -215
- claude_mpm/orchestration/archive/hook_enabled_orchestrator.py +0 -188
- claude_mpm/orchestration/archive/hook_integration_example.py +0 -178
- claude_mpm/orchestration/archive/interactive_subprocess_orchestrator.py +0 -826
- claude_mpm/orchestration/archive/orchestrator.py +0 -501
- claude_mpm/orchestration/archive/pexpect_orchestrator.py +0 -252
- claude_mpm/orchestration/archive/pty_orchestrator.py +0 -270
- claude_mpm/orchestration/archive/simple_orchestrator.py +0 -82
- claude_mpm/orchestration/archive/subprocess_orchestrator.py +0 -801
- claude_mpm/orchestration/archive/system_prompt_orchestrator.py +0 -278
- claude_mpm/orchestration/archive/wrapper_orchestrator.py +0 -187
- claude_mpm/schemas/workflow_validator.py +0 -411
- claude_mpm/services/agent_deployment.py +0 -1534
- claude_mpm/services/agent_lifecycle_manager.py +0 -1169
- claude_mpm/services/agent_memory_manager.py +0 -1415
- claude_mpm/services/agent_registry.py +0 -676
- claude_mpm/services/deployed_agent_discovery.py +0 -226
- claude_mpm/services/framework_agent_loader.py +0 -337
- claude_mpm/services/framework_claude_md_generator.py +0 -621
- claude_mpm/services/health_monitor.py +0 -892
- claude_mpm/services/memory_router.py +0 -538
- claude_mpm/services/parent_directory_manager/__init__.py +0 -577
- claude_mpm/services/parent_directory_manager/backup_manager.py +0 -258
- claude_mpm/services/parent_directory_manager/config_manager.py +0 -210
- claude_mpm/services/parent_directory_manager/deduplication_manager.py +0 -279
- claude_mpm/services/parent_directory_manager/framework_protector.py +0 -143
- claude_mpm/services/parent_directory_manager/operations.py +0 -186
- claude_mpm/services/parent_directory_manager/state_manager.py +0 -624
- claude_mpm/services/parent_directory_manager/template_deployer.py +0 -579
- claude_mpm/services/parent_directory_manager/validation_manager.py +0 -378
- claude_mpm/services/parent_directory_manager/version_control_helper.py +0 -339
- claude_mpm/services/parent_directory_manager/version_manager.py +0 -222
- claude_mpm/services/standalone_socketio_server.py +0 -1300
- claude_mpm/services/ticket_manager_di.py +0 -318
- claude_mpm/services/ticketing_service_original.py +0 -508
- claude_mpm/ui/__init__.py +0 -1
- claude_mpm/ui/rich_terminal_ui.py +0 -295
- claude_mpm/ui/terminal_ui.py +0 -328
- claude_mpm/utils/paths.py +0 -289
- claude_mpm-3.4.10.dist-info/METADATA +0 -183
- claude_mpm-3.4.10.dist-info/RECORD +0 -201
- claude_mpm-3.4.10.dist-info/licenses/LICENSE +0 -21
- {claude_mpm-3.4.10.dist-info → claude_mpm-5.4.55.dist-info}/WHEEL +0 -0
- {claude_mpm-3.4.10.dist-info → claude_mpm-5.4.55.dist-info}/top_level.txt +0 -0
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
from pathlib import Path
|
|
2
|
+
|
|
1
3
|
"""
|
|
2
4
|
Configuration alias management for Claude PM Framework.
|
|
3
5
|
|
|
@@ -5,75 +7,73 @@ Manages friendly directory aliases for configuration paths, allowing users to
|
|
|
5
7
|
reference configurations using memorable names instead of full paths.
|
|
6
8
|
|
|
7
9
|
Example:
|
|
8
|
-
claude-pm --config personal # Resolves to ~/.claude-
|
|
10
|
+
claude-pm --config personal # Resolves to ~/.claude-mpm/configs/personal/
|
|
9
11
|
claude-pm --config work # Resolves to ~/work/claude-configs/
|
|
10
12
|
|
|
11
|
-
Aliases are stored in ~/.claude-
|
|
13
|
+
Aliases are stored in ~/.claude-mpm/config_aliases.json
|
|
12
14
|
"""
|
|
13
15
|
|
|
14
16
|
import json
|
|
15
|
-
import
|
|
16
|
-
|
|
17
|
-
from
|
|
18
|
-
from typing import Dict, Optional, List, Tuple
|
|
17
|
+
from typing import Dict, List, Optional, Tuple
|
|
18
|
+
|
|
19
|
+
from claude_mpm.core.logging_utils import get_logger
|
|
19
20
|
|
|
20
21
|
from ..utils.config_manager import ConfigurationManager
|
|
22
|
+
from .unified_paths import get_path_manager
|
|
21
23
|
|
|
22
|
-
logger =
|
|
24
|
+
logger = get_logger(__name__)
|
|
23
25
|
|
|
24
26
|
|
|
25
27
|
class ConfigAliasError(Exception):
|
|
26
28
|
"""Base exception for configuration alias errors."""
|
|
27
|
-
pass
|
|
28
29
|
|
|
29
30
|
|
|
30
31
|
class AliasNotFoundError(ConfigAliasError):
|
|
31
32
|
"""Raised when attempting to resolve a non-existent alias."""
|
|
32
|
-
pass
|
|
33
33
|
|
|
34
34
|
|
|
35
35
|
class DuplicateAliasError(ConfigAliasError):
|
|
36
36
|
"""Raised when attempting to create an alias that already exists."""
|
|
37
|
-
pass
|
|
38
37
|
|
|
39
38
|
|
|
40
39
|
class InvalidDirectoryError(ConfigAliasError):
|
|
41
40
|
"""Raised when a directory path is invalid or cannot be created."""
|
|
42
|
-
pass
|
|
43
41
|
|
|
44
42
|
|
|
45
43
|
class ConfigAliasManager:
|
|
46
44
|
"""
|
|
47
45
|
Manages configuration directory aliases for the Claude PM Framework.
|
|
48
|
-
|
|
46
|
+
|
|
49
47
|
Provides methods to create, delete, list, and resolve aliases that map
|
|
50
48
|
friendly names to actual directory paths.
|
|
51
49
|
"""
|
|
52
|
-
|
|
50
|
+
|
|
53
51
|
def __init__(self, aliases_file: Optional[Path] = None):
|
|
54
52
|
"""
|
|
55
53
|
Initialize the configuration alias manager.
|
|
56
|
-
|
|
54
|
+
|
|
57
55
|
Args:
|
|
58
56
|
aliases_file: Path to the aliases JSON file. Defaults to
|
|
59
57
|
~/.claude-pm/config_aliases.json
|
|
60
58
|
"""
|
|
61
59
|
if aliases_file is None:
|
|
62
|
-
self.aliases_file =
|
|
60
|
+
self.aliases_file = (
|
|
61
|
+
get_path_manager().get_user_config_dir() / "config_aliases.json"
|
|
62
|
+
)
|
|
63
63
|
else:
|
|
64
64
|
self.aliases_file = Path(aliases_file)
|
|
65
|
-
|
|
65
|
+
|
|
66
66
|
self.config_mgr = ConfigurationManager(cache_enabled=True)
|
|
67
67
|
self._ensure_aliases_file()
|
|
68
68
|
self._aliases: Dict[str, str] = self._load_aliases()
|
|
69
|
-
|
|
69
|
+
|
|
70
70
|
def _ensure_aliases_file(self) -> None:
|
|
71
71
|
"""Ensure the aliases file and its parent directory exist."""
|
|
72
72
|
self.aliases_file.parent.mkdir(parents=True, exist_ok=True)
|
|
73
73
|
if not self.aliases_file.exists():
|
|
74
74
|
self._save_aliases({})
|
|
75
75
|
logger.info(f"Created new aliases file at {self.aliases_file}")
|
|
76
|
-
|
|
76
|
+
|
|
77
77
|
def _load_aliases(self) -> Dict[str, str]:
|
|
78
78
|
"""Load aliases from the JSON file."""
|
|
79
79
|
try:
|
|
@@ -81,23 +81,23 @@ class ConfigAliasManager:
|
|
|
81
81
|
except (json.JSONDecodeError, Exception) as e:
|
|
82
82
|
logger.error(f"Failed to load aliases: {e}")
|
|
83
83
|
return {}
|
|
84
|
-
|
|
84
|
+
|
|
85
85
|
def _save_aliases(self, aliases: Dict[str, str]) -> None:
|
|
86
86
|
"""Save aliases to the JSON file."""
|
|
87
87
|
try:
|
|
88
88
|
self.config_mgr.save_json(aliases, self.aliases_file, sort_keys=True)
|
|
89
89
|
except Exception as e:
|
|
90
90
|
logger.error(f"Failed to save aliases: {e}")
|
|
91
|
-
raise ConfigAliasError(f"Failed to save aliases: {e}")
|
|
92
|
-
|
|
91
|
+
raise ConfigAliasError(f"Failed to save aliases: {e}") from e
|
|
92
|
+
|
|
93
93
|
def create_alias(self, alias_name: str, directory_path: str) -> None:
|
|
94
94
|
"""
|
|
95
95
|
Create a new configuration alias.
|
|
96
|
-
|
|
96
|
+
|
|
97
97
|
Args:
|
|
98
98
|
alias_name: The friendly name for the alias
|
|
99
99
|
directory_path: The directory path this alias should resolve to
|
|
100
|
-
|
|
100
|
+
|
|
101
101
|
Raises:
|
|
102
102
|
DuplicateAliasError: If the alias already exists
|
|
103
103
|
InvalidDirectoryError: If the directory path is invalid
|
|
@@ -105,103 +105,104 @@ class ConfigAliasManager:
|
|
|
105
105
|
# Validate alias name
|
|
106
106
|
if not alias_name or not alias_name.strip():
|
|
107
107
|
raise ValueError("Alias name cannot be empty")
|
|
108
|
-
|
|
108
|
+
|
|
109
109
|
alias_name = alias_name.strip()
|
|
110
|
-
|
|
110
|
+
|
|
111
111
|
# Check for duplicate
|
|
112
112
|
if alias_name in self._aliases:
|
|
113
113
|
raise DuplicateAliasError(
|
|
114
114
|
f"Alias '{alias_name}' already exists, pointing to: {self._aliases[alias_name]}"
|
|
115
115
|
)
|
|
116
|
-
|
|
116
|
+
|
|
117
117
|
# Validate and normalize the directory path
|
|
118
118
|
validated_path = self.validate_directory(directory_path)
|
|
119
|
-
|
|
119
|
+
|
|
120
120
|
# Add the alias
|
|
121
121
|
self._aliases[alias_name] = str(validated_path)
|
|
122
122
|
self._save_aliases(self._aliases)
|
|
123
|
-
|
|
123
|
+
|
|
124
124
|
logger.info(f"Created alias '{alias_name}' -> {validated_path}")
|
|
125
|
-
|
|
125
|
+
|
|
126
126
|
def resolve_alias(self, alias_name: str) -> Path:
|
|
127
127
|
"""
|
|
128
128
|
Resolve an alias to its directory path.
|
|
129
|
-
|
|
129
|
+
|
|
130
130
|
Args:
|
|
131
131
|
alias_name: The alias to resolve
|
|
132
|
-
|
|
132
|
+
|
|
133
133
|
Returns:
|
|
134
134
|
The Path object for the resolved directory
|
|
135
|
-
|
|
135
|
+
|
|
136
136
|
Raises:
|
|
137
137
|
AliasNotFoundError: If the alias does not exist
|
|
138
138
|
"""
|
|
139
139
|
if alias_name not in self._aliases:
|
|
140
140
|
raise AliasNotFoundError(f"Alias '{alias_name}' not found")
|
|
141
|
-
|
|
141
|
+
|
|
142
142
|
path = Path(self._aliases[alias_name])
|
|
143
|
-
|
|
143
|
+
|
|
144
144
|
# Ensure the directory still exists or can be created
|
|
145
145
|
try:
|
|
146
146
|
path = self.validate_directory(str(path))
|
|
147
147
|
except InvalidDirectoryError:
|
|
148
|
-
logger.warning(
|
|
148
|
+
logger.warning(
|
|
149
|
+
f"Directory for alias '{alias_name}' no longer valid: {path}"
|
|
150
|
+
)
|
|
149
151
|
# Still return the path, let the caller handle the missing directory
|
|
150
|
-
|
|
152
|
+
|
|
151
153
|
return path
|
|
152
|
-
|
|
154
|
+
|
|
153
155
|
def list_aliases(self) -> List[Tuple[str, str]]:
|
|
154
156
|
"""
|
|
155
157
|
List all configured aliases.
|
|
156
|
-
|
|
158
|
+
|
|
157
159
|
Returns:
|
|
158
160
|
A list of tuples containing (alias_name, directory_path)
|
|
159
161
|
"""
|
|
160
162
|
return sorted(self._aliases.items())
|
|
161
|
-
|
|
163
|
+
|
|
162
164
|
def delete_alias(self, alias_name: str) -> None:
|
|
163
165
|
"""
|
|
164
166
|
Delete a configuration alias.
|
|
165
|
-
|
|
167
|
+
|
|
166
168
|
Args:
|
|
167
169
|
alias_name: The alias to delete
|
|
168
|
-
|
|
170
|
+
|
|
169
171
|
Raises:
|
|
170
172
|
AliasNotFoundError: If the alias does not exist
|
|
171
173
|
"""
|
|
172
174
|
if alias_name not in self._aliases:
|
|
173
175
|
raise AliasNotFoundError(f"Alias '{alias_name}' not found")
|
|
174
|
-
|
|
176
|
+
|
|
175
177
|
directory_path = self._aliases[alias_name]
|
|
176
178
|
del self._aliases[alias_name]
|
|
177
179
|
self._save_aliases(self._aliases)
|
|
178
|
-
|
|
180
|
+
|
|
179
181
|
logger.info(f"Deleted alias '{alias_name}' (was pointing to: {directory_path})")
|
|
180
|
-
|
|
182
|
+
|
|
181
183
|
def validate_directory(self, path: str) -> Path:
|
|
182
184
|
"""
|
|
183
185
|
Validate that a directory exists or can be created.
|
|
184
|
-
|
|
186
|
+
|
|
185
187
|
Args:
|
|
186
188
|
path: The directory path to validate
|
|
187
|
-
|
|
189
|
+
|
|
188
190
|
Returns:
|
|
189
191
|
The normalized Path object
|
|
190
|
-
|
|
192
|
+
|
|
191
193
|
Raises:
|
|
192
194
|
InvalidDirectoryError: If the path is invalid or cannot be created
|
|
193
195
|
"""
|
|
194
196
|
try:
|
|
195
197
|
# Expand user home directory and environment variables
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
198
|
+
directory_path = Path(path).expanduser().resolve()
|
|
199
|
+
|
|
199
200
|
# Check if it's a file
|
|
200
201
|
if directory_path.exists() and directory_path.is_file():
|
|
201
202
|
raise InvalidDirectoryError(
|
|
202
203
|
f"Path exists but is a file, not a directory: {directory_path}"
|
|
203
204
|
)
|
|
204
|
-
|
|
205
|
+
|
|
205
206
|
# Try to create the directory if it doesn't exist
|
|
206
207
|
if not directory_path.exists():
|
|
207
208
|
try:
|
|
@@ -210,8 +211,8 @@ class ConfigAliasManager:
|
|
|
210
211
|
except Exception as e:
|
|
211
212
|
raise InvalidDirectoryError(
|
|
212
213
|
f"Cannot create directory '{directory_path}': {e}"
|
|
213
|
-
)
|
|
214
|
-
|
|
214
|
+
) from e
|
|
215
|
+
|
|
215
216
|
# Verify we can write to the directory
|
|
216
217
|
test_file = directory_path / ".claude_pm_test"
|
|
217
218
|
try:
|
|
@@ -220,73 +221,73 @@ class ConfigAliasManager:
|
|
|
220
221
|
except Exception as e:
|
|
221
222
|
raise InvalidDirectoryError(
|
|
222
223
|
f"Directory '{directory_path}' is not writable: {e}"
|
|
223
|
-
)
|
|
224
|
-
|
|
224
|
+
) from e
|
|
225
|
+
|
|
225
226
|
return directory_path
|
|
226
|
-
|
|
227
|
+
|
|
227
228
|
except InvalidDirectoryError:
|
|
228
229
|
raise
|
|
229
230
|
except Exception as e:
|
|
230
|
-
raise InvalidDirectoryError(f"Invalid directory path '{path}': {e}")
|
|
231
|
-
|
|
231
|
+
raise InvalidDirectoryError(f"Invalid directory path '{path}': {e}") from e
|
|
232
|
+
|
|
232
233
|
def get_alias(self, alias_name: str) -> Optional[str]:
|
|
233
234
|
"""
|
|
234
235
|
Get the directory path for an alias without validation.
|
|
235
|
-
|
|
236
|
+
|
|
236
237
|
Args:
|
|
237
238
|
alias_name: The alias to look up
|
|
238
|
-
|
|
239
|
+
|
|
239
240
|
Returns:
|
|
240
241
|
The directory path string if the alias exists, None otherwise
|
|
241
242
|
"""
|
|
242
243
|
return self._aliases.get(alias_name)
|
|
243
|
-
|
|
244
|
+
|
|
244
245
|
def update_alias(self, alias_name: str, new_directory_path: str) -> None:
|
|
245
246
|
"""
|
|
246
247
|
Update an existing alias to point to a new directory.
|
|
247
|
-
|
|
248
|
+
|
|
248
249
|
Args:
|
|
249
250
|
alias_name: The alias to update
|
|
250
251
|
new_directory_path: The new directory path
|
|
251
|
-
|
|
252
|
+
|
|
252
253
|
Raises:
|
|
253
254
|
AliasNotFoundError: If the alias does not exist
|
|
254
255
|
InvalidDirectoryError: If the new directory path is invalid
|
|
255
256
|
"""
|
|
256
257
|
if alias_name not in self._aliases:
|
|
257
258
|
raise AliasNotFoundError(f"Alias '{alias_name}' not found")
|
|
258
|
-
|
|
259
|
+
|
|
259
260
|
# Validate the new directory path
|
|
260
261
|
validated_path = self.validate_directory(new_directory_path)
|
|
261
|
-
|
|
262
|
+
|
|
262
263
|
old_path = self._aliases[alias_name]
|
|
263
264
|
self._aliases[alias_name] = str(validated_path)
|
|
264
265
|
self._save_aliases(self._aliases)
|
|
265
|
-
|
|
266
|
+
|
|
266
267
|
logger.info(f"Updated alias '{alias_name}': {old_path} -> {validated_path}")
|
|
267
|
-
|
|
268
|
+
|
|
268
269
|
def alias_exists(self, alias_name: str) -> bool:
|
|
269
270
|
"""
|
|
270
271
|
Check if an alias exists.
|
|
271
|
-
|
|
272
|
+
|
|
272
273
|
Args:
|
|
273
274
|
alias_name: The alias to check
|
|
274
|
-
|
|
275
|
+
|
|
275
276
|
Returns:
|
|
276
277
|
True if the alias exists, False otherwise
|
|
277
278
|
"""
|
|
278
279
|
return alias_name in self._aliases
|
|
279
|
-
|
|
280
|
+
|
|
280
281
|
def get_all_aliases(self) -> Dict[str, str]:
|
|
281
282
|
"""
|
|
282
283
|
Get a copy of all aliases.
|
|
283
|
-
|
|
284
|
+
|
|
284
285
|
Returns:
|
|
285
286
|
A dictionary mapping alias names to directory paths
|
|
286
287
|
"""
|
|
287
288
|
return self._aliases.copy()
|
|
288
|
-
|
|
289
|
+
|
|
289
290
|
def reload_aliases(self) -> None:
|
|
290
291
|
"""Reload aliases from the file, discarding any in-memory changes."""
|
|
291
292
|
self._aliases = self._load_aliases()
|
|
292
|
-
logger.debug("Reloaded aliases from file")
|
|
293
|
+
logger.debug("Reloaded aliases from file")
|
|
@@ -0,0 +1,314 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Configuration constants for Claude MPM.
|
|
3
|
+
|
|
4
|
+
This module provides centralized access to configuration values that were
|
|
5
|
+
previously hardcoded throughout the codebase. It serves as a bridge between
|
|
6
|
+
the old hardcoded values and the new unified configuration system.
|
|
7
|
+
|
|
8
|
+
Usage:
|
|
9
|
+
from claude_mpm.core.config_constants import ConfigConstants
|
|
10
|
+
|
|
11
|
+
# Get timeout value
|
|
12
|
+
timeout = ConfigConstants.get_timeout('hook_execution')
|
|
13
|
+
|
|
14
|
+
# Get port value
|
|
15
|
+
port = ConfigConstants.get_port('socketio')
|
|
16
|
+
|
|
17
|
+
# Get cache setting
|
|
18
|
+
cache_size = ConfigConstants.get_cache_setting('max_size_mb')
|
|
19
|
+
"""
|
|
20
|
+
|
|
21
|
+
from typing import Any, Optional
|
|
22
|
+
|
|
23
|
+
from .unified_config import ConfigurationService
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class ConfigConstants:
|
|
27
|
+
"""
|
|
28
|
+
Centralized access to configuration constants.
|
|
29
|
+
|
|
30
|
+
This class provides a convenient way to access configuration values
|
|
31
|
+
that were previously hardcoded, while maintaining backward compatibility.
|
|
32
|
+
"""
|
|
33
|
+
|
|
34
|
+
_config_service: Optional[ConfigurationService] = None
|
|
35
|
+
|
|
36
|
+
# Default values for backward compatibility
|
|
37
|
+
DEFAULT_VALUES = {
|
|
38
|
+
# Timeouts (in seconds)
|
|
39
|
+
"timeouts": {
|
|
40
|
+
"hook_execution": 5,
|
|
41
|
+
"session_default": 30,
|
|
42
|
+
"session_extended": 60,
|
|
43
|
+
"agent_loading": 10,
|
|
44
|
+
"startup": 60,
|
|
45
|
+
"graceful_shutdown": 30,
|
|
46
|
+
},
|
|
47
|
+
# Ports
|
|
48
|
+
"ports": {
|
|
49
|
+
"socketio_default": 8765,
|
|
50
|
+
"socketio_range_start": 8765,
|
|
51
|
+
"socketio_range_end": 8775,
|
|
52
|
+
},
|
|
53
|
+
# Cache settings
|
|
54
|
+
"cache": {
|
|
55
|
+
"max_size_mb": 100,
|
|
56
|
+
"max_entries": 10000,
|
|
57
|
+
"default_ttl_seconds": 300,
|
|
58
|
+
},
|
|
59
|
+
# Session settings
|
|
60
|
+
"sessions": {
|
|
61
|
+
"max_age_minutes": 30,
|
|
62
|
+
"cleanup_max_age_hours": 24,
|
|
63
|
+
"timeout_minutes": 60,
|
|
64
|
+
},
|
|
65
|
+
# Retry and recovery
|
|
66
|
+
"recovery": {
|
|
67
|
+
"max_restarts": 3,
|
|
68
|
+
"max_recovery_attempts": 3,
|
|
69
|
+
},
|
|
70
|
+
# Sleep and polling intervals (in seconds)
|
|
71
|
+
"intervals": {
|
|
72
|
+
"health_check": 0.1,
|
|
73
|
+
"batch_window_ms": 100,
|
|
74
|
+
"polling": 1.0,
|
|
75
|
+
"brief_pause": 0.1,
|
|
76
|
+
},
|
|
77
|
+
# File and memory limits
|
|
78
|
+
"limits": {
|
|
79
|
+
"max_file_size_mb": 10,
|
|
80
|
+
"max_memory_usage_mb": 1024,
|
|
81
|
+
},
|
|
82
|
+
# Logging configuration
|
|
83
|
+
"logging": {
|
|
84
|
+
"startup_logs_retention_count": 10,
|
|
85
|
+
"mpm_logs_retention_count": 10,
|
|
86
|
+
},
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
@classmethod
|
|
90
|
+
def _get_config_service(cls) -> ConfigurationService:
|
|
91
|
+
"""Get or create the configuration service."""
|
|
92
|
+
if cls._config_service is None:
|
|
93
|
+
cls._config_service = ConfigurationService()
|
|
94
|
+
return cls._config_service
|
|
95
|
+
|
|
96
|
+
@classmethod
|
|
97
|
+
def set_config_service(cls, config_service: ConfigurationService) -> None:
|
|
98
|
+
"""Set the configuration service (for dependency injection)."""
|
|
99
|
+
cls._config_service = config_service
|
|
100
|
+
|
|
101
|
+
@classmethod
|
|
102
|
+
def get_timeout(cls, timeout_type: str) -> int:
|
|
103
|
+
"""
|
|
104
|
+
Get timeout value by type.
|
|
105
|
+
|
|
106
|
+
Args:
|
|
107
|
+
timeout_type: Type of timeout (e.g., 'hook_execution', 'session_default')
|
|
108
|
+
|
|
109
|
+
Returns:
|
|
110
|
+
Timeout value in seconds
|
|
111
|
+
"""
|
|
112
|
+
try:
|
|
113
|
+
config = cls._get_config_service().config
|
|
114
|
+
|
|
115
|
+
if timeout_type == "hook_execution":
|
|
116
|
+
return config.performance.hook_timeout_seconds
|
|
117
|
+
if timeout_type == "session_default":
|
|
118
|
+
return config.performance.session_timeout_seconds
|
|
119
|
+
if timeout_type == "session_extended":
|
|
120
|
+
return config.sessions.session_timeout_minutes * 60
|
|
121
|
+
if timeout_type == "agent_loading":
|
|
122
|
+
return config.performance.agent_load_timeout_seconds
|
|
123
|
+
if timeout_type == "startup":
|
|
124
|
+
return config.performance.startup_timeout
|
|
125
|
+
if timeout_type == "graceful_shutdown":
|
|
126
|
+
return config.performance.graceful_shutdown_timeout
|
|
127
|
+
return cls.DEFAULT_VALUES["timeouts"].get(timeout_type, 30)
|
|
128
|
+
except Exception:
|
|
129
|
+
return cls.DEFAULT_VALUES["timeouts"].get(timeout_type, 30)
|
|
130
|
+
|
|
131
|
+
@classmethod
|
|
132
|
+
def get_port(cls, port_type: str) -> int:
|
|
133
|
+
"""
|
|
134
|
+
Get port value by type.
|
|
135
|
+
|
|
136
|
+
Args:
|
|
137
|
+
port_type: Type of port (e.g., 'socketio_default')
|
|
138
|
+
|
|
139
|
+
Returns:
|
|
140
|
+
Port number
|
|
141
|
+
"""
|
|
142
|
+
try:
|
|
143
|
+
config = cls._get_config_service().config
|
|
144
|
+
|
|
145
|
+
if port_type == "socketio_default":
|
|
146
|
+
return config.network.socketio_port
|
|
147
|
+
if port_type == "socketio_range_start":
|
|
148
|
+
return config.network.socketio_port_range[0]
|
|
149
|
+
if port_type == "socketio_range_end":
|
|
150
|
+
return config.network.socketio_port_range[1]
|
|
151
|
+
return cls.DEFAULT_VALUES["ports"].get(port_type, 8765)
|
|
152
|
+
except Exception:
|
|
153
|
+
return cls.DEFAULT_VALUES["ports"].get(port_type, 8765)
|
|
154
|
+
|
|
155
|
+
@classmethod
|
|
156
|
+
def get_cache_setting(cls, setting_name: str) -> Any:
|
|
157
|
+
"""
|
|
158
|
+
Get cache setting by name.
|
|
159
|
+
|
|
160
|
+
Args:
|
|
161
|
+
setting_name: Name of cache setting
|
|
162
|
+
|
|
163
|
+
Returns:
|
|
164
|
+
Cache setting value
|
|
165
|
+
"""
|
|
166
|
+
try:
|
|
167
|
+
config = cls._get_config_service().config
|
|
168
|
+
|
|
169
|
+
if setting_name == "max_size_mb":
|
|
170
|
+
return config.performance.cache_max_size_mb
|
|
171
|
+
if setting_name == "max_entries":
|
|
172
|
+
return config.performance.cache_max_entries
|
|
173
|
+
if setting_name == "default_ttl_seconds":
|
|
174
|
+
return config.performance.cache_default_ttl_seconds
|
|
175
|
+
return cls.DEFAULT_VALUES["cache"].get(setting_name)
|
|
176
|
+
except Exception:
|
|
177
|
+
return cls.DEFAULT_VALUES["cache"].get(setting_name)
|
|
178
|
+
|
|
179
|
+
@classmethod
|
|
180
|
+
def get_logging_setting(cls, setting_name: str) -> Any:
|
|
181
|
+
"""
|
|
182
|
+
Get logging setting by name.
|
|
183
|
+
|
|
184
|
+
Args:
|
|
185
|
+
setting_name: Name of logging setting
|
|
186
|
+
|
|
187
|
+
Returns:
|
|
188
|
+
Logging setting value
|
|
189
|
+
"""
|
|
190
|
+
try:
|
|
191
|
+
# For now, just return from DEFAULT_VALUES
|
|
192
|
+
# Can be extended to read from unified config later
|
|
193
|
+
return cls.DEFAULT_VALUES["logging"].get(setting_name)
|
|
194
|
+
except Exception:
|
|
195
|
+
# Fallback to default values
|
|
196
|
+
if setting_name in {
|
|
197
|
+
"startup_logs_retention_count",
|
|
198
|
+
"mpm_logs_retention_count",
|
|
199
|
+
}:
|
|
200
|
+
return 10
|
|
201
|
+
return None
|
|
202
|
+
|
|
203
|
+
@classmethod
|
|
204
|
+
def get_session_setting(cls, setting_name: str) -> Any:
|
|
205
|
+
"""
|
|
206
|
+
Get session setting by name.
|
|
207
|
+
|
|
208
|
+
Args:
|
|
209
|
+
setting_name: Name of session setting
|
|
210
|
+
|
|
211
|
+
Returns:
|
|
212
|
+
Session setting value
|
|
213
|
+
"""
|
|
214
|
+
try:
|
|
215
|
+
config = cls._get_config_service().config
|
|
216
|
+
|
|
217
|
+
if setting_name == "max_age_minutes":
|
|
218
|
+
return config.sessions.max_age_minutes
|
|
219
|
+
if setting_name == "cleanup_max_age_hours":
|
|
220
|
+
return config.sessions.cleanup_max_age_hours
|
|
221
|
+
if setting_name == "timeout_minutes":
|
|
222
|
+
return config.sessions.session_timeout_minutes
|
|
223
|
+
return cls.DEFAULT_VALUES["sessions"].get(setting_name)
|
|
224
|
+
except Exception:
|
|
225
|
+
return cls.DEFAULT_VALUES["sessions"].get(setting_name)
|
|
226
|
+
|
|
227
|
+
@classmethod
|
|
228
|
+
def get_recovery_setting(cls, setting_name: str) -> int:
|
|
229
|
+
"""
|
|
230
|
+
Get recovery setting by name.
|
|
231
|
+
|
|
232
|
+
Args:
|
|
233
|
+
setting_name: Name of recovery setting
|
|
234
|
+
|
|
235
|
+
Returns:
|
|
236
|
+
Recovery setting value
|
|
237
|
+
"""
|
|
238
|
+
try:
|
|
239
|
+
config = cls._get_config_service().config
|
|
240
|
+
|
|
241
|
+
if setting_name == "max_restarts":
|
|
242
|
+
return config.performance.max_restarts
|
|
243
|
+
if setting_name == "max_recovery_attempts":
|
|
244
|
+
return config.performance.max_recovery_attempts
|
|
245
|
+
return cls.DEFAULT_VALUES["recovery"].get(setting_name, 3)
|
|
246
|
+
except Exception:
|
|
247
|
+
return cls.DEFAULT_VALUES["recovery"].get(setting_name, 3)
|
|
248
|
+
|
|
249
|
+
@classmethod
|
|
250
|
+
def get_interval(cls, interval_type: str) -> float:
|
|
251
|
+
"""
|
|
252
|
+
Get interval value by type.
|
|
253
|
+
|
|
254
|
+
Args:
|
|
255
|
+
interval_type: Type of interval
|
|
256
|
+
|
|
257
|
+
Returns:
|
|
258
|
+
Interval value in seconds
|
|
259
|
+
"""
|
|
260
|
+
try:
|
|
261
|
+
config = cls._get_config_service().config
|
|
262
|
+
|
|
263
|
+
if interval_type == "health_check":
|
|
264
|
+
return config.performance.health_check_interval_seconds
|
|
265
|
+
if interval_type == "polling":
|
|
266
|
+
return config.performance.polling_interval_seconds
|
|
267
|
+
if interval_type == "batch_window_ms":
|
|
268
|
+
return config.performance.batch_window_ms / 1000.0
|
|
269
|
+
return cls.DEFAULT_VALUES["intervals"].get(interval_type, 1.0)
|
|
270
|
+
except Exception:
|
|
271
|
+
return cls.DEFAULT_VALUES["intervals"].get(interval_type, 1.0)
|
|
272
|
+
|
|
273
|
+
@classmethod
|
|
274
|
+
def get_limit(cls, limit_type: str) -> int:
|
|
275
|
+
"""
|
|
276
|
+
Get limit value by type.
|
|
277
|
+
|
|
278
|
+
Args:
|
|
279
|
+
limit_type: Type of limit
|
|
280
|
+
|
|
281
|
+
Returns:
|
|
282
|
+
Limit value
|
|
283
|
+
"""
|
|
284
|
+
try:
|
|
285
|
+
config = cls._get_config_service().config
|
|
286
|
+
|
|
287
|
+
if limit_type == "max_file_size_mb":
|
|
288
|
+
return config.security.max_file_size_mb
|
|
289
|
+
if limit_type == "max_memory_usage_mb":
|
|
290
|
+
return config.performance.max_memory_usage_mb
|
|
291
|
+
return cls.DEFAULT_VALUES["limits"].get(limit_type, 100)
|
|
292
|
+
except Exception:
|
|
293
|
+
return cls.DEFAULT_VALUES["limits"].get(limit_type, 100)
|
|
294
|
+
|
|
295
|
+
|
|
296
|
+
# Convenience functions for common values
|
|
297
|
+
def get_default_timeout() -> int:
|
|
298
|
+
"""Get default timeout value."""
|
|
299
|
+
return ConfigConstants.get_timeout("session_default")
|
|
300
|
+
|
|
301
|
+
|
|
302
|
+
def get_socketio_port() -> int:
|
|
303
|
+
"""Get default SocketIO port."""
|
|
304
|
+
return ConfigConstants.get_port("socketio_default")
|
|
305
|
+
|
|
306
|
+
|
|
307
|
+
def get_cache_size() -> float:
|
|
308
|
+
"""Get default cache size in MB."""
|
|
309
|
+
return ConfigConstants.get_cache_setting("max_size_mb")
|
|
310
|
+
|
|
311
|
+
|
|
312
|
+
def get_max_restarts() -> int:
|
|
313
|
+
"""Get maximum restart attempts."""
|
|
314
|
+
return ConfigConstants.get_recovery_setting("max_restarts")
|