claude-mpm 5.4.22__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/BASE_AGENT.md +164 -0
- claude_mpm/agents/BASE_ENGINEER.md +658 -0
- 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/MEMORY.md +1 -1
- claude_mpm/agents/PM_INSTRUCTIONS.md +374 -1257
- claude_mpm/agents/WORKFLOW.md +6 -253
- claude_mpm/agents/agent_loader.py +1 -1
- claude_mpm/agents/base_agent.json +31 -0
- claude_mpm/agents/frontmatter_validator.py +2 -2
- claude_mpm/agents/templates/circuit-breakers.md +26 -17
- claude_mpm/cli/__init__.py +5 -1
- claude_mpm/cli/commands/agent_state_manager.py +10 -10
- claude_mpm/cli/commands/agents.py +11 -13
- claude_mpm/cli/commands/agents_reconcile.py +197 -0
- claude_mpm/cli/commands/auto_configure.py +4 -4
- claude_mpm/cli/commands/autotodos.py +566 -0
- claude_mpm/cli/commands/commander.py +216 -0
- claude_mpm/cli/commands/configure.py +621 -22
- claude_mpm/cli/commands/configure_agent_display.py +12 -0
- 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 +72 -0
- claude_mpm/cli/commands/postmortem.py +1 -1
- claude_mpm/cli/commands/profile.py +276 -0
- claude_mpm/cli/commands/run.py +35 -3
- claude_mpm/cli/commands/skill_source.py +51 -2
- claude_mpm/cli/commands/skills.py +182 -32
- claude_mpm/cli/executor.py +130 -16
- claude_mpm/cli/interactive/__init__.py +10 -0
- claude_mpm/cli/interactive/agent_wizard.py +32 -52
- 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 +83 -1
- claude_mpm/cli/parsers/commander_parser.py +116 -0
- claude_mpm/cli/parsers/profile_parser.py +147 -0
- claude_mpm/cli/parsers/run_parser.py +10 -0
- claude_mpm/cli/parsers/skill_source_parser.py +4 -0
- claude_mpm/cli/parsers/skills_parser.py +2 -3
- claude_mpm/cli/startup.py +690 -386
- 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 +20 -249
- claude_mpm/commands/mpm-doctor.md +16 -21
- claude_mpm/commands/mpm-help.md +12 -205
- claude_mpm/commands/mpm-init.md +88 -506
- claude_mpm/commands/mpm-monitor.md +22 -401
- claude_mpm/commands/mpm-organize.md +70 -442
- claude_mpm/commands/mpm-postmortem.md +13 -107
- claude_mpm/commands/mpm-session-resume.md +20 -363
- claude_mpm/commands/mpm-status.md +13 -69
- claude_mpm/commands/mpm-ticket-view.md +60 -495
- claude_mpm/commands/mpm-version.md +13 -107
- claude_mpm/commands/mpm.md +8 -0
- claude_mpm/config/agent_presets.py +8 -7
- claude_mpm/config/skill_sources.py +16 -0
- claude_mpm/constants.py +1 -0
- claude_mpm/core/claude_runner.py +154 -2
- claude_mpm/core/config.py +37 -26
- claude_mpm/core/config_constants.py +74 -9
- claude_mpm/core/constants.py +56 -12
- claude_mpm/core/framework/loaders/agent_loader.py +1 -1
- claude_mpm/core/framework/loaders/instruction_loader.py +52 -11
- 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 +61 -0
- 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_agent_registry.py +1 -1
- claude_mpm/core/unified_config.py +54 -8
- claude_mpm/core/unified_paths.py +95 -90
- claude_mpm/dashboard/static/svelte-build/_app/env.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/assets/0.C33zOoyM.css +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/assets/2.CW1J-YuA.css +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/1WZnGYqX.js +24 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/67pF3qNn.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/6RxdMKe4.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/8cZrfX0h.js +60 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/9a6T2nm-.js +7 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/B443AUzu.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/B8AwtY2H.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BF15LAsF.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BQaXIfA_.js +331 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BRcwIQNr.js +4 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BSNlmTZj.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BV6nKitt.js +43 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BViJ8lZt.js +128 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BcQ-Q0FE.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Bpyvgze_.js +30 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BzTRqg-z.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/C0Fr8dve.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/C3rbW_a-.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/C8WYN38h.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/C9I8FlXH.js +61 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CIQcWgO2.js +36 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CIctN7YN.js +7 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CKrS_JZW.js +145 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CR6P9C4A.js +89 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CRRR9MD_.js +2 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CRcR2DqT.js +334 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CSXtMOf0.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CT-sbxSk.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CWm6DJsp.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CmKTTxBW.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CpqQ1Kzn.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Cu_Erd72.js +261 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/D2nGpDRe.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/D9iCMida.js +267 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/D9ykgMoY.js +10 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DL2Ldur1.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DPfltzjH.js +165 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DR8nis88.js +2 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DUliQN2b.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DVp1hx9R.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DXlhR01x.js +122 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/D_lyTybS.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DngoTTgh.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DqkmHtDC.js +220 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DsDh8EYs.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DypDmXgd.js +139 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Gi6I4Gst.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/IPYC-LnN.js +162 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/JTLiF7dt.js +24 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/JpevfAFt.js +68 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/NqQ1dWOy.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/R8CEIRAd.js +2 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Zxy7qc-l.js +64 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/q9Hm6zAU.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/qtd3IeO4.js +15 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/ulBFON_C.js +65 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/wQVh1CoA.js +10 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/entry/app.Dr7t0z2J.js +2 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/entry/start.BGhZHUS3.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/0.RgBboRvH.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/1.DG-KkbDf.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/2.D_jnf-x6.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/version.json +1 -0
- claude_mpm/dashboard/static/svelte-build/favicon.svg +7 -0
- claude_mpm/dashboard/static/svelte-build/index.html +36 -0
- claude_mpm/dashboard-svelte/node_modules/katex/src/fonts/generate_fonts.py +58 -0
- claude_mpm/dashboard-svelte/node_modules/katex/src/metrics/extract_tfms.py +114 -0
- claude_mpm/dashboard-svelte/node_modules/katex/src/metrics/extract_ttfs.py +122 -0
- claude_mpm/dashboard-svelte/node_modules/katex/src/metrics/format_json.py +28 -0
- claude_mpm/dashboard-svelte/node_modules/katex/src/metrics/parse_tfm.py +211 -0
- claude_mpm/experimental/cli_enhancements.py +2 -1
- claude_mpm/hooks/claude_hooks/INTEGRATION_EXAMPLE.md +243 -0
- claude_mpm/hooks/claude_hooks/README_AUTO_PAUSE.md +403 -0
- claude_mpm/hooks/claude_hooks/__pycache__/__init__.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/auto_pause_handler.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/correlation_manager.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/event_handlers.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/hook_handler.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/memory_integration.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/response_tracking.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/tool_analysis.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/auto_pause_handler.py +485 -0
- claude_mpm/hooks/claude_hooks/event_handlers.py +527 -136
- claude_mpm/hooks/claude_hooks/hook_handler.py +313 -99
- 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__/duplicate_detector.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 +67 -32
- 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/kuzu_memory_hook.py +5 -5
- 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 +276 -0
- claude_mpm/models/git_repository.py +3 -3
- claude_mpm/scripts/claude-hook-handler.sh +46 -19
- claude_mpm/services/agents/agent_builder.py +3 -3
- 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 +7 -7
- claude_mpm/services/agents/deployment/agent_deployment.py +29 -7
- claude_mpm/services/agents/deployment/agent_discovery_service.py +4 -2
- claude_mpm/services/agents/deployment/agent_format_converter.py +25 -13
- claude_mpm/services/agents/deployment/agent_template_builder.py +39 -19
- claude_mpm/services/agents/deployment/agents_directory_resolver.py +2 -2
- claude_mpm/services/agents/deployment/async_agent_deployment.py +31 -27
- claude_mpm/services/agents/deployment/deployment_reconciler.py +577 -0
- claude_mpm/services/agents/deployment/local_template_deployment.py +3 -1
- claude_mpm/services/agents/deployment/multi_source_deployment_service.py +169 -26
- claude_mpm/services/agents/deployment/remote_agent_discovery_service.py +101 -75
- claude_mpm/services/agents/deployment/startup_reconciliation.py +138 -0
- claude_mpm/services/agents/git_source_manager.py +23 -4
- claude_mpm/services/agents/loading/framework_agent_loader.py +75 -2
- claude_mpm/services/agents/recommender.py +5 -3
- claude_mpm/services/agents/single_tier_deployment_service.py +6 -6
- claude_mpm/services/agents/sources/git_source_sync_service.py +121 -10
- claude_mpm/services/agents/startup_sync.py +27 -4
- 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_check.py +2 -2
- claude_mpm/services/diagnostics/checks/agent_sources_check.py +31 -1
- claude_mpm/services/diagnostics/checks/configuration_check.py +24 -0
- claude_mpm/services/diagnostics/checks/installation_check.py +22 -0
- claude_mpm/services/diagnostics/checks/mcp_services_check.py +23 -0
- claude_mpm/services/diagnostics/doctor_reporter.py +31 -1
- claude_mpm/services/diagnostics/models.py +14 -1
- claude_mpm/services/event_log.py +325 -0
- claude_mpm/services/git/git_operations_service.py +8 -8
- 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 +15 -3
- claude_mpm/services/monitor/server.py +571 -11
- claude_mpm/services/pm_skills_deployer.py +884 -0
- claude_mpm/services/profile_manager.py +337 -0
- claude_mpm/services/skills/git_skill_source_manager.py +281 -20
- claude_mpm/services/skills/selective_skill_deployer.py +211 -46
- claude_mpm/services/skills/skill_discovery_service.py +74 -4
- claude_mpm/services/skills_deployer.py +192 -70
- claude_mpm/services/socketio/dashboard_server.py +1 -0
- claude_mpm/services/socketio/event_normalizer.py +37 -6
- claude_mpm/services/socketio/handlers/hook.py +14 -7
- claude_mpm/services/socketio/server/core.py +262 -123
- 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 +98 -3
- claude_mpm/templates/.pre-commit-config.yaml +112 -0
- claude_mpm/utils/agent_dependency_loader.py +115 -4
- claude_mpm/utils/agent_filters.py +1 -1
- claude_mpm/utils/migration.py +4 -4
- claude_mpm/utils/robust_installer.py +86 -21
- claude_mpm-5.6.34.dist-info/METADATA +393 -0
- {claude_mpm-5.4.22.dist-info → claude_mpm-5.6.34.dist-info}/RECORD +486 -145
- claude_mpm-5.4.22.dist-info/METADATA +0 -996
- {claude_mpm-5.4.22.dist-info → claude_mpm-5.6.34.dist-info}/WHEEL +0 -0
- {claude_mpm-5.4.22.dist-info → claude_mpm-5.6.34.dist-info}/entry_points.txt +0 -0
- {claude_mpm-5.4.22.dist-info → claude_mpm-5.6.34.dist-info}/licenses/LICENSE +0 -0
- {claude_mpm-5.4.22.dist-info → claude_mpm-5.6.34.dist-info}/licenses/LICENSE-FAQ.md +0 -0
- {claude_mpm-5.4.22.dist-info → claude_mpm-5.6.34.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,596 @@
|
|
|
1
|
+
# Environment Variable Manager (env-manager)
|
|
2
|
+
|
|
3
|
+
**Comprehensive environment variable validation, security scanning, and management for modern web applications.**
|
|
4
|
+
|
|
5
|
+
[](references/security.md)
|
|
6
|
+
[](tests/)
|
|
7
|
+
[](#performance)
|
|
8
|
+
|
|
9
|
+
## Overview
|
|
10
|
+
|
|
11
|
+
The env-manager skill provides systematic environment variable management across local development, CI/CD pipelines, and deployment platforms. It prevents common issues like missing variables, exposed secrets, and framework-specific configuration errors.
|
|
12
|
+
|
|
13
|
+
**Key Features:**
|
|
14
|
+
- **Framework-Aware Validation**: Next.js, Vite, React, Node.js, Flask support
|
|
15
|
+
- **Security-First**: Never logs secrets, detects exposed credentials
|
|
16
|
+
- **Platform Integration**: Ready for Vercel, Railway, Heroku, and CI/CD
|
|
17
|
+
- **Fast**: Validates 1000 variables in 0.025s (80x faster than 2s target)
|
|
18
|
+
- **Zero Dependencies**: Pure Python, works anywhere
|
|
19
|
+
|
|
20
|
+
## Why Use env-manager?
|
|
21
|
+
|
|
22
|
+
**Common problems this solves:**
|
|
23
|
+
- "Works on my machine, but not in production" (missing env vars)
|
|
24
|
+
- Accidentally exposing API keys in client-side code (NEXT_PUBLIC_ with secrets)
|
|
25
|
+
- Missing required variables during deployment
|
|
26
|
+
- Inconsistent .env files across team members
|
|
27
|
+
- No documentation of required environment variables
|
|
28
|
+
- Security vulnerabilities from exposed secrets
|
|
29
|
+
|
|
30
|
+
## Quick Start
|
|
31
|
+
|
|
32
|
+
### Installation
|
|
33
|
+
|
|
34
|
+
No installation needed! env-manager is a bundled skill in Claude MPM.
|
|
35
|
+
|
|
36
|
+
**Requirements:**
|
|
37
|
+
- Python 3.7+
|
|
38
|
+
- No external dependencies
|
|
39
|
+
|
|
40
|
+
### 5-Minute Quick Start
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
# 1. Validate your .env file
|
|
44
|
+
python3 scripts/validate_env.py .env
|
|
45
|
+
|
|
46
|
+
# 2. Check for framework-specific issues (Next.js example)
|
|
47
|
+
python3 scripts/validate_env.py .env --framework nextjs
|
|
48
|
+
|
|
49
|
+
# 3. Compare with .env.example to find missing vars
|
|
50
|
+
python3 scripts/validate_env.py .env --compare-with .env.example
|
|
51
|
+
|
|
52
|
+
# 4. Generate .env.example for documentation
|
|
53
|
+
python3 scripts/validate_env.py .env --generate-example .env.example
|
|
54
|
+
|
|
55
|
+
# 5. Get JSON output for CI/CD integration
|
|
56
|
+
python3 scripts/validate_env.py .env --json
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
That's it! You're now validating environment variables like a pro.
|
|
60
|
+
|
|
61
|
+
## Usage Examples
|
|
62
|
+
|
|
63
|
+
### Basic Validation
|
|
64
|
+
|
|
65
|
+
Validate a .env file for structural issues:
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
python3 scripts/validate_env.py .env
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
**What it checks:**
|
|
72
|
+
- Valid key=value format
|
|
73
|
+
- No duplicate keys
|
|
74
|
+
- Proper naming conventions (UPPERCASE_WITH_UNDERSCORES)
|
|
75
|
+
- No empty values (unless explicitly allowed)
|
|
76
|
+
- Proper quoting for values with spaces
|
|
77
|
+
|
|
78
|
+
**Example output:**
|
|
79
|
+
```
|
|
80
|
+
✅ Validation successful!
|
|
81
|
+
- 15 variables validated
|
|
82
|
+
- 0 errors
|
|
83
|
+
- 0 warnings
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
### Framework-Specific Validation
|
|
87
|
+
|
|
88
|
+
#### Next.js
|
|
89
|
+
|
|
90
|
+
Validate Next.js environment variables:
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
python3 scripts/validate_env.py .env.local --framework nextjs
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
**Next.js-specific checks:**
|
|
97
|
+
- NEXT_PUBLIC_* variables are client-exposed (warns if secrets detected)
|
|
98
|
+
- .env.local, .env.production, .env file hierarchy
|
|
99
|
+
- Detects secrets in client-side variables
|
|
100
|
+
|
|
101
|
+
**Example:**
|
|
102
|
+
```bash
|
|
103
|
+
# .env.local
|
|
104
|
+
NEXT_PUBLIC_API_URL=https://api.example.com
|
|
105
|
+
NEXT_PUBLIC_API_KEY=secret123 # ⚠️ WARNING: Secret in client-exposed variable!
|
|
106
|
+
DATABASE_URL=postgresql://... # ✅ Server-side only
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
#### Vite
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
python3 scripts/validate_env.py .env --framework vite
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
**Vite-specific checks:**
|
|
116
|
+
- VITE_* variables are client-exposed
|
|
117
|
+
- Warns if secrets detected in VITE_ prefixed vars
|
|
118
|
+
|
|
119
|
+
#### React (Create React App)
|
|
120
|
+
|
|
121
|
+
```bash
|
|
122
|
+
python3 scripts/validate_env.py .env --framework react
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
**React-specific checks:**
|
|
126
|
+
- REACT_APP_* variables are client-exposed
|
|
127
|
+
- Warns if secrets in REACT_APP_ prefixed vars
|
|
128
|
+
|
|
129
|
+
#### Node.js/Express
|
|
130
|
+
|
|
131
|
+
```bash
|
|
132
|
+
python3 scripts/validate_env.py .env --framework nodejs
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
**Node.js-specific checks:**
|
|
136
|
+
- Common NODE_ENV, PORT, DATABASE_URL patterns
|
|
137
|
+
- Standard Node.js conventions
|
|
138
|
+
|
|
139
|
+
#### Flask/Python
|
|
140
|
+
|
|
141
|
+
```bash
|
|
142
|
+
python3 scripts/validate_env.py .env --framework flask
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
**Flask-specific checks:**
|
|
146
|
+
- FLASK_APP, FLASK_ENV variables
|
|
147
|
+
- SQLAlchemy DATABASE_URL format
|
|
148
|
+
|
|
149
|
+
### Comparing with .env.example
|
|
150
|
+
|
|
151
|
+
Ensure your .env has all required variables:
|
|
152
|
+
|
|
153
|
+
```bash
|
|
154
|
+
python3 scripts/validate_env.py .env --compare-with .env.example
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
**What it checks:**
|
|
158
|
+
- All variables in .env.example exist in .env
|
|
159
|
+
- No extra undocumented variables in .env
|
|
160
|
+
|
|
161
|
+
**Example output:**
|
|
162
|
+
```
|
|
163
|
+
❌ Missing variables:
|
|
164
|
+
- DATABASE_URL (required in .env.example)
|
|
165
|
+
- STRIPE_SECRET_KEY (required in .env.example)
|
|
166
|
+
|
|
167
|
+
⚠️ Extra variables not in .env.example:
|
|
168
|
+
- DEBUG_MODE (consider adding to .env.example)
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
**Perfect for:**
|
|
172
|
+
- Onboarding new team members
|
|
173
|
+
- CI/CD validation
|
|
174
|
+
- Deployment pre-checks
|
|
175
|
+
|
|
176
|
+
### Generating .env.example
|
|
177
|
+
|
|
178
|
+
Create documentation for your environment variables:
|
|
179
|
+
|
|
180
|
+
```bash
|
|
181
|
+
python3 scripts/validate_env.py .env --generate-example .env.example
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
**What it does:**
|
|
185
|
+
- Reads your .env file
|
|
186
|
+
- Sanitizes secret values (replaces with placeholders)
|
|
187
|
+
- Generates .env.example with safe defaults
|
|
188
|
+
|
|
189
|
+
**Example:**
|
|
190
|
+
|
|
191
|
+
```bash
|
|
192
|
+
# Input: .env
|
|
193
|
+
DATABASE_URL=postgresql://user:pass@localhost/db # pragma: allowlist secret
|
|
194
|
+
STRIPE_SECRET_KEY=sk_live_abc123xyz
|
|
195
|
+
NEXT_PUBLIC_API_URL=https://api.example.com
|
|
196
|
+
|
|
197
|
+
# Output: .env.example
|
|
198
|
+
DATABASE_URL=postgresql://user:password@localhost/dbname # pragma: allowlist secret
|
|
199
|
+
STRIPE_SECRET_KEY=your_stripe_secret_key_here
|
|
200
|
+
NEXT_PUBLIC_API_URL=https://api.example.com
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
**Security note:** env-manager detects common secret patterns and replaces them with safe placeholders.
|
|
204
|
+
|
|
205
|
+
### CI/CD Integration
|
|
206
|
+
|
|
207
|
+
Get machine-readable JSON output for automated workflows:
|
|
208
|
+
|
|
209
|
+
```bash
|
|
210
|
+
python3 scripts/validate_env.py .env.example --strict --json
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
**JSON output format:**
|
|
214
|
+
```json
|
|
215
|
+
{
|
|
216
|
+
"valid": true,
|
|
217
|
+
"errors": [],
|
|
218
|
+
"warnings": [],
|
|
219
|
+
"stats": {
|
|
220
|
+
"total_vars": 15,
|
|
221
|
+
"errors": 0,
|
|
222
|
+
"warnings": 0
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
**Exit codes:**
|
|
228
|
+
- `0`: Validation passed
|
|
229
|
+
- `1`: Validation errors found
|
|
230
|
+
- `2`: Missing required file
|
|
231
|
+
- `3`: Warnings found (only in --strict mode)
|
|
232
|
+
|
|
233
|
+
**GitHub Actions example:**
|
|
234
|
+
|
|
235
|
+
```yaml
|
|
236
|
+
name: Validate Environment Variables
|
|
237
|
+
|
|
238
|
+
on: [push, pull_request]
|
|
239
|
+
|
|
240
|
+
jobs:
|
|
241
|
+
validate-env:
|
|
242
|
+
runs-on: ubuntu-latest
|
|
243
|
+
steps:
|
|
244
|
+
- uses: actions/checkout@v3
|
|
245
|
+
|
|
246
|
+
- name: Validate .env.example
|
|
247
|
+
run: |
|
|
248
|
+
python3 scripts/validate_env.py .env.example --strict --json
|
|
249
|
+
working-directory: ./path/to/skill
|
|
250
|
+
|
|
251
|
+
- name: Check for framework-specific issues
|
|
252
|
+
run: |
|
|
253
|
+
python3 scripts/validate_env.py .env.example --framework nextjs --json
|
|
254
|
+
working-directory: ./path/to/skill
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
### Strict Mode
|
|
258
|
+
|
|
259
|
+
Treat warnings as errors (useful for CI/CD):
|
|
260
|
+
|
|
261
|
+
```bash
|
|
262
|
+
python3 scripts/validate_env.py .env --strict
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
**When to use:**
|
|
266
|
+
- Pre-deployment validation
|
|
267
|
+
- CI/CD pipelines
|
|
268
|
+
- Release gates
|
|
269
|
+
- Team standard enforcement
|
|
270
|
+
|
|
271
|
+
### Quiet Mode
|
|
272
|
+
|
|
273
|
+
Show only errors, suppress warnings:
|
|
274
|
+
|
|
275
|
+
```bash
|
|
276
|
+
python3 scripts/validate_env.py .env --quiet
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
**When to use:**
|
|
280
|
+
- You've already reviewed warnings
|
|
281
|
+
- Automated scripts that only care about errors
|
|
282
|
+
- Noisy environments where warnings are distracting
|
|
283
|
+
|
|
284
|
+
## Supported Frameworks
|
|
285
|
+
|
|
286
|
+
| Framework | Prefix | Client-Exposed | Notes |
|
|
287
|
+
|-----------|--------|----------------|-------|
|
|
288
|
+
| **Next.js** | `NEXT_PUBLIC_*` | Yes | Auto-exposed in browser |
|
|
289
|
+
| **Vite** | `VITE_*` | Yes | Bundled into client code |
|
|
290
|
+
| **React (CRA)** | `REACT_APP_*` | Yes | Embedded in production build |
|
|
291
|
+
| **Node.js** | N/A | No | Server-side only |
|
|
292
|
+
| **Flask** | N/A | No | Server-side only |
|
|
293
|
+
|
|
294
|
+
**Security warning:** Never put secrets in client-exposed variables (NEXT_PUBLIC_, VITE_, REACT_APP_). env-manager will warn you if it detects common secret patterns.
|
|
295
|
+
|
|
296
|
+
## CLI Reference
|
|
297
|
+
|
|
298
|
+
### Command Structure
|
|
299
|
+
|
|
300
|
+
```bash
|
|
301
|
+
python3 scripts/validate_env.py <file> [options]
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
### Options
|
|
305
|
+
|
|
306
|
+
| Option | Description | Example |
|
|
307
|
+
|--------|-------------|---------|
|
|
308
|
+
| `--compare-with FILE` | Compare with .env.example | `--compare-with .env.example` |
|
|
309
|
+
| `--framework {nextjs\|vite\|react\|nodejs\|flask\|generic}` | Framework-specific validation | `--framework nextjs` |
|
|
310
|
+
| `--strict` | Treat warnings as errors | `--strict` |
|
|
311
|
+
| `--json` | JSON output for automation | `--json` |
|
|
312
|
+
| `--quiet` | Only show errors | `--quiet` |
|
|
313
|
+
| `--generate-example OUTPUT` | Generate .env.example | `--generate-example .env.example` |
|
|
314
|
+
|
|
315
|
+
### Exit Codes
|
|
316
|
+
|
|
317
|
+
| Code | Meaning | When |
|
|
318
|
+
|------|---------|------|
|
|
319
|
+
| `0` | Success | No errors (warnings OK unless --strict) |
|
|
320
|
+
| `1` | Validation errors | Structural issues, duplicates, etc. |
|
|
321
|
+
| `2` | File not found | Specified .env file doesn't exist |
|
|
322
|
+
| `3` | Warnings in strict mode | Warnings exist and --strict enabled |
|
|
323
|
+
|
|
324
|
+
## Common Use Cases
|
|
325
|
+
|
|
326
|
+
### Scenario 1: New Developer Onboarding
|
|
327
|
+
|
|
328
|
+
```bash
|
|
329
|
+
# New developer clones repo
|
|
330
|
+
git clone <repo>
|
|
331
|
+
cd <project>
|
|
332
|
+
|
|
333
|
+
# Copy example and fill in values
|
|
334
|
+
cp .env.example .env
|
|
335
|
+
# Edit .env with actual values...
|
|
336
|
+
|
|
337
|
+
# Validate setup
|
|
338
|
+
python3 scripts/validate_env.py .env --compare-with .env.example
|
|
339
|
+
|
|
340
|
+
# If missing variables, fix them
|
|
341
|
+
# Validation passes ✅
|
|
342
|
+
```
|
|
343
|
+
|
|
344
|
+
### Scenario 2: Pre-Deployment Check
|
|
345
|
+
|
|
346
|
+
```bash
|
|
347
|
+
# Before deploying to Vercel/Railway/Heroku
|
|
348
|
+
python3 scripts/validate_env.py .env.production --framework nextjs --strict
|
|
349
|
+
|
|
350
|
+
# Fix any errors
|
|
351
|
+
# Deploy with confidence ✅
|
|
352
|
+
```
|
|
353
|
+
|
|
354
|
+
### Scenario 3: Security Audit
|
|
355
|
+
|
|
356
|
+
```bash
|
|
357
|
+
# Check for accidentally exposed secrets
|
|
358
|
+
python3 scripts/validate_env.py .env.local --framework nextjs
|
|
359
|
+
|
|
360
|
+
# Look for warnings like:
|
|
361
|
+
# ⚠️ NEXT_PUBLIC_STRIPE_SECRET: Contains potential secret in client-exposed variable
|
|
362
|
+
```
|
|
363
|
+
|
|
364
|
+
### Scenario 4: Team Documentation
|
|
365
|
+
|
|
366
|
+
```bash
|
|
367
|
+
# After adding new environment variable
|
|
368
|
+
echo "NEW_API_KEY=abc123" >> .env
|
|
369
|
+
|
|
370
|
+
# Regenerate .env.example
|
|
371
|
+
python3 scripts/validate_env.py .env --generate-example .env.example
|
|
372
|
+
|
|
373
|
+
# Commit updated .env.example
|
|
374
|
+
git add .env.example
|
|
375
|
+
git commit -m "docs: add NEW_API_KEY to environment variables"
|
|
376
|
+
```
|
|
377
|
+
|
|
378
|
+
### Scenario 5: CI/CD Quality Gate
|
|
379
|
+
|
|
380
|
+
```yaml
|
|
381
|
+
# In your CI pipeline
|
|
382
|
+
- name: Validate environment configuration
|
|
383
|
+
run: |
|
|
384
|
+
python3 scripts/validate_env.py .env.example --strict --json > validation.json
|
|
385
|
+
|
|
386
|
+
# Fail pipeline if validation fails
|
|
387
|
+
if [ $? -ne 0 ]; then
|
|
388
|
+
cat validation.json
|
|
389
|
+
exit 1
|
|
390
|
+
fi
|
|
391
|
+
```
|
|
392
|
+
|
|
393
|
+
## Performance
|
|
394
|
+
|
|
395
|
+
env-manager is designed for speed:
|
|
396
|
+
|
|
397
|
+
**Benchmarks:**
|
|
398
|
+
- Validates 1000 variables in **0.025s**
|
|
399
|
+
- 80x faster than 2s target
|
|
400
|
+
- Zero external dependencies
|
|
401
|
+
- Minimal memory footprint
|
|
402
|
+
|
|
403
|
+
**Why it matters:**
|
|
404
|
+
- Fast feedback during development
|
|
405
|
+
- No CI/CD slowdown
|
|
406
|
+
- Works in resource-constrained environments
|
|
407
|
+
|
|
408
|
+
## Security Notes
|
|
409
|
+
|
|
410
|
+
**Critical security features:**
|
|
411
|
+
|
|
412
|
+
1. **Never Logs Secrets**: env-manager NEVER displays actual secret values in output
|
|
413
|
+
2. **Client-Exposure Detection**: Warns when secrets are in NEXT_PUBLIC_, VITE_, REACT_APP_ variables
|
|
414
|
+
3. **Secret Sanitization**: When generating .env.example, replaces secrets with safe placeholders
|
|
415
|
+
4. **No Network Calls**: All validation is local, no data leaves your machine
|
|
416
|
+
|
|
417
|
+
**Security-audited:** This skill has undergone security review. See [references/security.md](references/security.md) for details.
|
|
418
|
+
|
|
419
|
+
**Best practices:**
|
|
420
|
+
- Never commit .env files with secrets
|
|
421
|
+
- Always use .env.example for documentation
|
|
422
|
+
- Use platform secret managers (Vercel, Railway, etc.) for production
|
|
423
|
+
- Validate before every deployment
|
|
424
|
+
- Run security scan regularly
|
|
425
|
+
|
|
426
|
+
## Common Issues
|
|
427
|
+
|
|
428
|
+
### "Missing equals sign" error
|
|
429
|
+
|
|
430
|
+
**Cause:** Line in .env doesn't have = separator
|
|
431
|
+
|
|
432
|
+
**Fix:**
|
|
433
|
+
```bash
|
|
434
|
+
# ❌ Bad
|
|
435
|
+
API_KEY
|
|
436
|
+
|
|
437
|
+
# ✅ Good
|
|
438
|
+
API_KEY=your_key_here
|
|
439
|
+
```
|
|
440
|
+
|
|
441
|
+
### "Duplicate key" error
|
|
442
|
+
|
|
443
|
+
**Cause:** Same variable defined multiple times
|
|
444
|
+
|
|
445
|
+
**Fix:**
|
|
446
|
+
```bash
|
|
447
|
+
# ❌ Bad
|
|
448
|
+
API_KEY=value1
|
|
449
|
+
API_KEY=value2
|
|
450
|
+
|
|
451
|
+
# ✅ Good
|
|
452
|
+
API_KEY=value2
|
|
453
|
+
```
|
|
454
|
+
|
|
455
|
+
### "Invalid variable name" warning
|
|
456
|
+
|
|
457
|
+
**Cause:** Variable name doesn't follow UPPERCASE_WITH_UNDERSCORES convention
|
|
458
|
+
|
|
459
|
+
**Fix:**
|
|
460
|
+
```bash
|
|
461
|
+
# ❌ Bad
|
|
462
|
+
apiKey=value
|
|
463
|
+
api-key=value
|
|
464
|
+
|
|
465
|
+
# ✅ Good
|
|
466
|
+
API_KEY=value
|
|
467
|
+
```
|
|
468
|
+
|
|
469
|
+
### "Potential secret in client-exposed variable" warning
|
|
470
|
+
|
|
471
|
+
**Cause:** NEXT_PUBLIC_, VITE_, or REACT_APP_ variable contains secret-like value
|
|
472
|
+
|
|
473
|
+
**Fix:**
|
|
474
|
+
```bash
|
|
475
|
+
# ❌ Bad (secret exposed to client!)
|
|
476
|
+
NEXT_PUBLIC_STRIPE_SECRET=sk_live_abc123
|
|
477
|
+
|
|
478
|
+
# ✅ Good (server-side only)
|
|
479
|
+
STRIPE_SECRET_KEY=sk_live_abc123
|
|
480
|
+
NEXT_PUBLIC_STRIPE_PUBLISHABLE=pk_live_xyz789
|
|
481
|
+
```
|
|
482
|
+
|
|
483
|
+
### "Empty value" warning
|
|
484
|
+
|
|
485
|
+
**Cause:** Variable has no value
|
|
486
|
+
|
|
487
|
+
**Fix:**
|
|
488
|
+
```bash
|
|
489
|
+
# ❌ Bad
|
|
490
|
+
DATABASE_URL=
|
|
491
|
+
|
|
492
|
+
# ✅ Good (if optional, document it)
|
|
493
|
+
DATABASE_URL= # Optional, uses SQLite if not set
|
|
494
|
+
|
|
495
|
+
# ✅ Better
|
|
496
|
+
DATABASE_URL=postgresql://localhost/mydb
|
|
497
|
+
```
|
|
498
|
+
|
|
499
|
+
### File not found error
|
|
500
|
+
|
|
501
|
+
**Cause:** Specified .env file doesn't exist
|
|
502
|
+
|
|
503
|
+
**Fix:**
|
|
504
|
+
```bash
|
|
505
|
+
# Check file exists
|
|
506
|
+
ls -la .env
|
|
507
|
+
|
|
508
|
+
# Or create it
|
|
509
|
+
touch .env
|
|
510
|
+
```
|
|
511
|
+
|
|
512
|
+
## Troubleshooting
|
|
513
|
+
|
|
514
|
+
### Validation passes locally but fails in CI
|
|
515
|
+
|
|
516
|
+
**Check:**
|
|
517
|
+
1. Line endings (CRLF vs LF)
|
|
518
|
+
2. File encoding (UTF-8 expected)
|
|
519
|
+
3. File permissions
|
|
520
|
+
4. Python version (3.7+ required)
|
|
521
|
+
|
|
522
|
+
### Warnings about client-exposed variables
|
|
523
|
+
|
|
524
|
+
**This is intentional!** env-manager is warning you that variables like NEXT_PUBLIC_API_KEY will be visible in the browser.
|
|
525
|
+
|
|
526
|
+
**Options:**
|
|
527
|
+
1. Move secret to server-side variable (remove NEXT_PUBLIC_ prefix)
|
|
528
|
+
2. Use public/publishable keys only in client-exposed variables
|
|
529
|
+
3. If it's truly not a secret, you can ignore the warning
|
|
530
|
+
|
|
531
|
+
### .env.example generation replaces too much
|
|
532
|
+
|
|
533
|
+
env-manager is conservative about secrets. If it over-sanitizes, you can:
|
|
534
|
+
1. Manually edit .env.example after generation
|
|
535
|
+
2. Use specific placeholder values in your .env that won't trigger sanitization
|
|
536
|
+
|
|
537
|
+
## Advanced Usage
|
|
538
|
+
|
|
539
|
+
### Custom Validation Patterns
|
|
540
|
+
|
|
541
|
+
See [references/validation.md](references/validation.md) for advanced validation patterns.
|
|
542
|
+
|
|
543
|
+
### Platform-Specific Deployment
|
|
544
|
+
|
|
545
|
+
See [references/synchronization.md](references/synchronization.md) for Vercel, Railway, Heroku integration patterns.
|
|
546
|
+
|
|
547
|
+
### Framework-Specific Guides
|
|
548
|
+
|
|
549
|
+
See [references/frameworks.md](references/frameworks.md) for comprehensive framework guides.
|
|
550
|
+
|
|
551
|
+
## Related Documentation
|
|
552
|
+
|
|
553
|
+
- **[Validation Reference](references/validation.md)**: Complete validation workflows and checks
|
|
554
|
+
- **[Security Reference](references/security.md)**: Secret scanning and security patterns
|
|
555
|
+
- **[Synchronization Reference](references/synchronization.md)**: Platform sync patterns (coming soon)
|
|
556
|
+
- **[Frameworks Reference](references/frameworks.md)**: Framework-specific patterns and conventions
|
|
557
|
+
- **[Troubleshooting Guide](references/troubleshooting.md)**: Common issues and solutions
|
|
558
|
+
|
|
559
|
+
## Integration with Claude MPM
|
|
560
|
+
|
|
561
|
+
env-manager is a bundled skill in Claude MPM. Agents can use it for:
|
|
562
|
+
- Pre-deployment validation
|
|
563
|
+
- Security scanning
|
|
564
|
+
- Environment setup verification
|
|
565
|
+
- Documentation generation
|
|
566
|
+
|
|
567
|
+
See [INTEGRATION.md](INTEGRATION.md) for agent integration patterns.
|
|
568
|
+
|
|
569
|
+
## Contributing
|
|
570
|
+
|
|
571
|
+
env-manager follows Claude MPM contribution guidelines:
|
|
572
|
+
|
|
573
|
+
1. Run `make lint-fix` during development
|
|
574
|
+
2. Run `make quality` before commits
|
|
575
|
+
3. Add tests for new features (85%+ coverage required)
|
|
576
|
+
4. Update documentation
|
|
577
|
+
|
|
578
|
+
See [CONTRIBUTING.md](../../../../../../CONTRIBUTING.md) for details.
|
|
579
|
+
|
|
580
|
+
## License
|
|
581
|
+
|
|
582
|
+
MIT License - Part of Claude MPM project
|
|
583
|
+
|
|
584
|
+
## Support
|
|
585
|
+
|
|
586
|
+
- **Issues**: Report bugs via GitHub Issues
|
|
587
|
+
- **Documentation**: See references/ directory
|
|
588
|
+
- **Examples**: See examples/ directory
|
|
589
|
+
- **Integration**: See INTEGRATION.md
|
|
590
|
+
|
|
591
|
+
---
|
|
592
|
+
|
|
593
|
+
**Version**: 1.0.0
|
|
594
|
+
**Status**: Stable, Security-Audited
|
|
595
|
+
**Test Coverage**: 85%+
|
|
596
|
+
**Performance**: 80x faster than target
|