claude-mpm 5.4.48__py3-none-any.whl → 5.6.34__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of claude-mpm might be problematic. Click here for more details.
- claude_mpm/VERSION +1 -1
- claude_mpm/agents/CLAUDE_MPM_OUTPUT_STYLE.md +66 -241
- claude_mpm/agents/CLAUDE_MPM_RESEARCH_OUTPUT_STYLE.md +413 -0
- claude_mpm/agents/CLAUDE_MPM_TEACHER_OUTPUT_STYLE.md +109 -1925
- claude_mpm/agents/PM_INSTRUCTIONS.md +119 -689
- claude_mpm/agents/WORKFLOW.md +2 -0
- claude_mpm/agents/templates/circuit-breakers.md +26 -17
- claude_mpm/cli/__init__.py +5 -1
- claude_mpm/cli/commands/agents.py +2 -4
- claude_mpm/cli/commands/agents_reconcile.py +197 -0
- claude_mpm/cli/commands/autotodos.py +566 -0
- claude_mpm/cli/commands/commander.py +216 -0
- claude_mpm/cli/commands/configure.py +620 -21
- claude_mpm/cli/commands/configure_agent_display.py +3 -1
- claude_mpm/cli/commands/hook_errors.py +60 -60
- claude_mpm/cli/commands/monitor.py +2 -2
- claude_mpm/cli/commands/mpm_init/core.py +15 -8
- claude_mpm/cli/commands/profile.py +9 -10
- claude_mpm/cli/commands/run.py +35 -3
- claude_mpm/cli/commands/skill_source.py +51 -2
- claude_mpm/cli/commands/skills.py +171 -17
- claude_mpm/cli/executor.py +120 -16
- claude_mpm/cli/interactive/__init__.py +10 -0
- claude_mpm/cli/interactive/agent_wizard.py +30 -50
- claude_mpm/cli/interactive/questionary_styles.py +65 -0
- claude_mpm/cli/interactive/skill_selector.py +481 -0
- claude_mpm/cli/parsers/base_parser.py +76 -1
- claude_mpm/cli/parsers/commander_parser.py +116 -0
- claude_mpm/cli/parsers/profile_parser.py +0 -1
- claude_mpm/cli/parsers/run_parser.py +10 -0
- claude_mpm/cli/parsers/skill_source_parser.py +4 -0
- claude_mpm/cli/parsers/skills_parser.py +5 -0
- claude_mpm/cli/startup.py +544 -511
- claude_mpm/cli/startup_display.py +74 -6
- claude_mpm/cli/startup_logging.py +2 -2
- claude_mpm/cli/utils.py +7 -3
- claude_mpm/commander/__init__.py +78 -0
- claude_mpm/commander/adapters/__init__.py +60 -0
- claude_mpm/commander/adapters/auggie.py +260 -0
- claude_mpm/commander/adapters/base.py +288 -0
- claude_mpm/commander/adapters/claude_code.py +392 -0
- claude_mpm/commander/adapters/codex.py +237 -0
- claude_mpm/commander/adapters/communication.py +366 -0
- claude_mpm/commander/adapters/example_usage.py +310 -0
- claude_mpm/commander/adapters/mpm.py +389 -0
- claude_mpm/commander/adapters/registry.py +204 -0
- claude_mpm/commander/api/__init__.py +16 -0
- claude_mpm/commander/api/app.py +121 -0
- claude_mpm/commander/api/errors.py +133 -0
- claude_mpm/commander/api/routes/__init__.py +8 -0
- claude_mpm/commander/api/routes/events.py +184 -0
- claude_mpm/commander/api/routes/inbox.py +171 -0
- claude_mpm/commander/api/routes/messages.py +148 -0
- claude_mpm/commander/api/routes/projects.py +271 -0
- claude_mpm/commander/api/routes/sessions.py +226 -0
- claude_mpm/commander/api/routes/work.py +296 -0
- claude_mpm/commander/api/schemas.py +186 -0
- claude_mpm/commander/chat/__init__.py +7 -0
- claude_mpm/commander/chat/cli.py +146 -0
- claude_mpm/commander/chat/commands.py +96 -0
- claude_mpm/commander/chat/repl.py +310 -0
- claude_mpm/commander/config.py +51 -0
- claude_mpm/commander/config_loader.py +115 -0
- claude_mpm/commander/core/__init__.py +10 -0
- claude_mpm/commander/core/block_manager.py +325 -0
- claude_mpm/commander/core/response_manager.py +323 -0
- claude_mpm/commander/daemon.py +603 -0
- claude_mpm/commander/env_loader.py +59 -0
- claude_mpm/commander/events/__init__.py +26 -0
- claude_mpm/commander/events/manager.py +332 -0
- claude_mpm/commander/frameworks/__init__.py +12 -0
- claude_mpm/commander/frameworks/base.py +146 -0
- claude_mpm/commander/frameworks/claude_code.py +58 -0
- claude_mpm/commander/frameworks/mpm.py +62 -0
- claude_mpm/commander/inbox/__init__.py +16 -0
- claude_mpm/commander/inbox/dedup.py +128 -0
- claude_mpm/commander/inbox/inbox.py +224 -0
- claude_mpm/commander/inbox/models.py +70 -0
- claude_mpm/commander/instance_manager.py +450 -0
- claude_mpm/commander/llm/__init__.py +6 -0
- claude_mpm/commander/llm/openrouter_client.py +167 -0
- claude_mpm/commander/llm/summarizer.py +70 -0
- claude_mpm/commander/memory/__init__.py +45 -0
- claude_mpm/commander/memory/compression.py +347 -0
- claude_mpm/commander/memory/embeddings.py +230 -0
- claude_mpm/commander/memory/entities.py +310 -0
- claude_mpm/commander/memory/example_usage.py +290 -0
- claude_mpm/commander/memory/integration.py +325 -0
- claude_mpm/commander/memory/search.py +381 -0
- claude_mpm/commander/memory/store.py +657 -0
- claude_mpm/commander/models/__init__.py +18 -0
- claude_mpm/commander/models/events.py +121 -0
- claude_mpm/commander/models/project.py +162 -0
- claude_mpm/commander/models/work.py +214 -0
- claude_mpm/commander/parsing/__init__.py +20 -0
- claude_mpm/commander/parsing/extractor.py +132 -0
- claude_mpm/commander/parsing/output_parser.py +270 -0
- claude_mpm/commander/parsing/patterns.py +100 -0
- claude_mpm/commander/persistence/__init__.py +11 -0
- claude_mpm/commander/persistence/event_store.py +274 -0
- claude_mpm/commander/persistence/state_store.py +309 -0
- claude_mpm/commander/persistence/work_store.py +164 -0
- claude_mpm/commander/polling/__init__.py +13 -0
- claude_mpm/commander/polling/event_detector.py +104 -0
- claude_mpm/commander/polling/output_buffer.py +49 -0
- claude_mpm/commander/polling/output_poller.py +153 -0
- claude_mpm/commander/project_session.py +268 -0
- claude_mpm/commander/proxy/__init__.py +12 -0
- claude_mpm/commander/proxy/formatter.py +89 -0
- claude_mpm/commander/proxy/output_handler.py +191 -0
- claude_mpm/commander/proxy/relay.py +155 -0
- claude_mpm/commander/registry.py +410 -0
- claude_mpm/commander/runtime/__init__.py +10 -0
- claude_mpm/commander/runtime/executor.py +191 -0
- claude_mpm/commander/runtime/monitor.py +346 -0
- claude_mpm/commander/session/__init__.py +6 -0
- claude_mpm/commander/session/context.py +81 -0
- claude_mpm/commander/session/manager.py +59 -0
- claude_mpm/commander/tmux_orchestrator.py +361 -0
- claude_mpm/commander/web/__init__.py +1 -0
- claude_mpm/commander/work/__init__.py +30 -0
- claude_mpm/commander/work/executor.py +207 -0
- claude_mpm/commander/work/queue.py +405 -0
- claude_mpm/commander/workflow/__init__.py +27 -0
- claude_mpm/commander/workflow/event_handler.py +241 -0
- claude_mpm/commander/workflow/notifier.py +146 -0
- claude_mpm/commands/mpm-config.md +8 -0
- claude_mpm/commands/mpm-doctor.md +8 -0
- claude_mpm/commands/mpm-help.md +8 -0
- claude_mpm/commands/mpm-init.md +8 -0
- claude_mpm/commands/mpm-monitor.md +8 -0
- claude_mpm/commands/mpm-organize.md +8 -0
- claude_mpm/commands/mpm-postmortem.md +8 -0
- claude_mpm/commands/mpm-session-resume.md +9 -1
- claude_mpm/commands/mpm-status.md +8 -0
- claude_mpm/commands/mpm-ticket-view.md +8 -0
- claude_mpm/commands/mpm-version.md +8 -0
- claude_mpm/commands/mpm.md +8 -0
- claude_mpm/config/agent_presets.py +8 -7
- claude_mpm/config/skill_sources.py +16 -0
- claude_mpm/constants.py +1 -0
- claude_mpm/core/claude_runner.py +154 -2
- claude_mpm/core/config.py +35 -22
- claude_mpm/core/config_constants.py +74 -9
- claude_mpm/core/constants.py +56 -12
- claude_mpm/core/hook_manager.py +51 -3
- claude_mpm/core/interactive_session.py +12 -11
- claude_mpm/core/logger.py +26 -9
- claude_mpm/core/logging_utils.py +39 -13
- claude_mpm/core/network_config.py +148 -0
- claude_mpm/core/oneshot_session.py +7 -6
- claude_mpm/core/optimized_startup.py +3 -1
- claude_mpm/core/output_style_manager.py +66 -18
- claude_mpm/core/shared/config_loader.py +3 -1
- claude_mpm/core/socketio_pool.py +47 -15
- claude_mpm/core/unified_config.py +54 -8
- claude_mpm/core/unified_paths.py +95 -90
- claude_mpm/dashboard/static/svelte-build/_app/immutable/assets/0.C33zOoyM.css +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/assets/2.CW1J-YuA.css +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/1WZnGYqX.js +24 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/67pF3qNn.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/6RxdMKe4.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/8cZrfX0h.js +60 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/9a6T2nm-.js +7 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/B443AUzu.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/B8AwtY2H.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BF15LAsF.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BQaXIfA_.js +331 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BRcwIQNr.js +4 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{uj46x2Wr.js → BSNlmTZj.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BV6nKitt.js +43 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BViJ8lZt.js +128 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BcQ-Q0FE.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Bpyvgze_.js +30 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BzTRqg-z.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/C0Fr8dve.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/C3rbW_a-.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/C8WYN38h.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/C9I8FlXH.js +61 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CIQcWgO2.js +36 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CIctN7YN.js +7 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CKrS_JZW.js +145 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CR6P9C4A.js +89 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CRRR9MD_.js +2 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CRcR2DqT.js +334 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CSXtMOf0.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CT-sbxSk.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CWm6DJsp.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CmKTTxBW.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CpqQ1Kzn.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Cu_Erd72.js +261 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/D2nGpDRe.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/D9iCMida.js +267 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/D9ykgMoY.js +10 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DL2Ldur1.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DPfltzjH.js +165 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{N4qtv3Hx.js → DR8nis88.js} +2 -2
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DUliQN2b.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DVp1hx9R.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DXlhR01x.js +122 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/D_lyTybS.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DngoTTgh.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DqkmHtDC.js +220 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DsDh8EYs.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DypDmXgd.js +139 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Gi6I4Gst.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/IPYC-LnN.js +162 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/JTLiF7dt.js +24 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/JpevfAFt.js +68 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{DjhvlsAc.js → NqQ1dWOy.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/R8CEIRAd.js +2 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Zxy7qc-l.js +64 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/q9Hm6zAU.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/qtd3IeO4.js +15 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/ulBFON_C.js +65 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/wQVh1CoA.js +10 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/entry/app.Dr7t0z2J.js +2 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/entry/start.BGhZHUS3.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/{0.CAGBuiOw.js → 0.RgBboRvH.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/1.DG-KkbDf.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/2.D_jnf-x6.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/version.json +1 -1
- claude_mpm/dashboard/static/svelte-build/index.html +11 -11
- claude_mpm/dashboard-svelte/node_modules/katex/src/fonts/generate_fonts.py +58 -0
- claude_mpm/dashboard-svelte/node_modules/katex/src/metrics/extract_tfms.py +114 -0
- claude_mpm/dashboard-svelte/node_modules/katex/src/metrics/extract_ttfs.py +122 -0
- claude_mpm/dashboard-svelte/node_modules/katex/src/metrics/format_json.py +28 -0
- claude_mpm/dashboard-svelte/node_modules/katex/src/metrics/parse_tfm.py +211 -0
- claude_mpm/experimental/cli_enhancements.py +2 -1
- claude_mpm/hooks/claude_hooks/INTEGRATION_EXAMPLE.md +243 -0
- claude_mpm/hooks/claude_hooks/README_AUTO_PAUSE.md +403 -0
- claude_mpm/hooks/claude_hooks/__pycache__/auto_pause_handler.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/event_handlers.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/hook_handler.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/memory_integration.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/response_tracking.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/auto_pause_handler.py +485 -0
- claude_mpm/hooks/claude_hooks/event_handlers.py +527 -136
- claude_mpm/hooks/claude_hooks/hook_handler.py +170 -104
- claude_mpm/hooks/claude_hooks/hook_wrapper.sh +6 -11
- claude_mpm/hooks/claude_hooks/installer.py +206 -36
- claude_mpm/hooks/claude_hooks/memory_integration.py +52 -32
- claude_mpm/hooks/claude_hooks/response_tracking.py +43 -60
- claude_mpm/hooks/claude_hooks/services/__init__.py +21 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/__init__.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/connection_manager_http.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/container.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/protocols.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/state_manager.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/subagent_processor.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/connection_manager.py +41 -26
- claude_mpm/hooks/claude_hooks/services/connection_manager_http.py +38 -105
- claude_mpm/hooks/claude_hooks/services/container.py +310 -0
- claude_mpm/hooks/claude_hooks/services/protocols.py +328 -0
- claude_mpm/hooks/claude_hooks/services/state_manager.py +25 -38
- claude_mpm/hooks/claude_hooks/services/subagent_processor.py +75 -77
- claude_mpm/hooks/session_resume_hook.py +89 -1
- claude_mpm/hooks/templates/pre_tool_use_simple.py +6 -6
- claude_mpm/hooks/templates/pre_tool_use_template.py +16 -8
- claude_mpm/init.py +215 -2
- claude_mpm/scripts/claude-hook-handler.sh +46 -19
- claude_mpm/scripts/start_activity_logging.py +0 -0
- claude_mpm/services/agents/agent_recommendation_service.py +8 -8
- claude_mpm/services/agents/agent_selection_service.py +2 -2
- claude_mpm/services/agents/cache_git_manager.py +1 -1
- claude_mpm/services/agents/deployment/agent_discovery_service.py +3 -1
- claude_mpm/services/agents/deployment/agent_format_converter.py +8 -6
- claude_mpm/services/agents/deployment/agent_template_builder.py +14 -4
- claude_mpm/services/agents/deployment/deployment_reconciler.py +577 -0
- claude_mpm/services/agents/deployment/multi_source_deployment_service.py +4 -4
- claude_mpm/services/agents/deployment/remote_agent_discovery_service.py +4 -1
- claude_mpm/services/agents/deployment/startup_reconciliation.py +138 -0
- claude_mpm/services/agents/git_source_manager.py +6 -2
- claude_mpm/services/agents/loading/framework_agent_loader.py +75 -2
- claude_mpm/services/agents/single_tier_deployment_service.py +4 -4
- claude_mpm/services/agents/sources/git_source_sync_service.py +10 -5
- claude_mpm/services/agents/startup_sync.py +5 -2
- claude_mpm/services/cli/__init__.py +3 -0
- claude_mpm/services/cli/incremental_pause_manager.py +561 -0
- claude_mpm/services/cli/session_resume_helper.py +10 -2
- claude_mpm/services/command_deployment_service.py +44 -26
- claude_mpm/services/delegation_detector.py +175 -0
- claude_mpm/services/diagnostics/checks/agent_sources_check.py +30 -0
- claude_mpm/services/diagnostics/checks/configuration_check.py +24 -0
- claude_mpm/services/diagnostics/checks/installation_check.py +22 -0
- claude_mpm/services/diagnostics/checks/mcp_services_check.py +23 -0
- claude_mpm/services/diagnostics/doctor_reporter.py +31 -1
- claude_mpm/services/diagnostics/models.py +14 -1
- claude_mpm/services/event_log.py +325 -0
- claude_mpm/services/hook_installer_service.py +77 -8
- claude_mpm/services/infrastructure/__init__.py +4 -0
- claude_mpm/services/infrastructure/context_usage_tracker.py +291 -0
- claude_mpm/services/infrastructure/resume_log_generator.py +24 -5
- claude_mpm/services/monitor/daemon_manager.py +15 -4
- claude_mpm/services/monitor/management/lifecycle.py +8 -3
- claude_mpm/services/monitor/server.py +106 -16
- claude_mpm/services/pm_skills_deployer.py +267 -94
- claude_mpm/services/profile_manager.py +10 -4
- claude_mpm/services/skills/git_skill_source_manager.py +192 -29
- claude_mpm/services/skills/selective_skill_deployer.py +211 -46
- claude_mpm/services/skills/skill_discovery_service.py +74 -4
- claude_mpm/services/skills_deployer.py +188 -67
- claude_mpm/services/socketio/handlers/hook.py +14 -7
- claude_mpm/services/socketio/server/main.py +12 -4
- claude_mpm/skills/__init__.py +2 -1
- claude_mpm/skills/bundled/collaboration/brainstorming/SKILL.md +79 -0
- claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/SKILL.md +178 -0
- claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/agent-prompts.md +577 -0
- claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/coordination-patterns.md +467 -0
- claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/examples.md +537 -0
- claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/troubleshooting.md +730 -0
- claude_mpm/skills/bundled/collaboration/git-worktrees.md +317 -0
- claude_mpm/skills/bundled/collaboration/requesting-code-review/SKILL.md +112 -0
- claude_mpm/skills/bundled/collaboration/requesting-code-review/references/code-reviewer-template.md +146 -0
- claude_mpm/skills/bundled/collaboration/requesting-code-review/references/review-examples.md +412 -0
- claude_mpm/skills/bundled/collaboration/stacked-prs.md +251 -0
- claude_mpm/skills/bundled/collaboration/writing-plans/SKILL.md +81 -0
- claude_mpm/skills/bundled/collaboration/writing-plans/references/best-practices.md +362 -0
- claude_mpm/skills/bundled/collaboration/writing-plans/references/plan-structure-templates.md +312 -0
- claude_mpm/skills/bundled/debugging/root-cause-tracing/SKILL.md +152 -0
- claude_mpm/skills/bundled/debugging/root-cause-tracing/references/advanced-techniques.md +668 -0
- claude_mpm/skills/bundled/debugging/root-cause-tracing/references/examples.md +587 -0
- claude_mpm/skills/bundled/debugging/root-cause-tracing/references/integration.md +438 -0
- claude_mpm/skills/bundled/debugging/root-cause-tracing/references/tracing-techniques.md +391 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/CREATION-LOG.md +119 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/SKILL.md +148 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/references/anti-patterns.md +483 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/references/examples.md +452 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/references/troubleshooting.md +449 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/references/workflow.md +411 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/test-academic.md +14 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-1.md +58 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-2.md +68 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-3.md +69 -0
- claude_mpm/skills/bundled/debugging/verification-before-completion/SKILL.md +131 -0
- claude_mpm/skills/bundled/debugging/verification-before-completion/references/gate-function.md +325 -0
- claude_mpm/skills/bundled/debugging/verification-before-completion/references/integration-and-workflows.md +490 -0
- claude_mpm/skills/bundled/debugging/verification-before-completion/references/red-flags-and-failures.md +425 -0
- claude_mpm/skills/bundled/debugging/verification-before-completion/references/verification-patterns.md +499 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/INTEGRATION.md +611 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/README.md +596 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/SKILL.md +260 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/examples/nextjs-env-structure.md +315 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/references/frameworks.md +436 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/references/security.md +433 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/references/synchronization.md +452 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/references/troubleshooting.md +404 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/references/validation.md +420 -0
- claude_mpm/skills/bundled/main/artifacts-builder/SKILL.md +86 -0
- claude_mpm/skills/bundled/main/internal-comms/SKILL.md +43 -0
- claude_mpm/skills/bundled/main/internal-comms/examples/3p-updates.md +47 -0
- claude_mpm/skills/bundled/main/internal-comms/examples/company-newsletter.md +65 -0
- claude_mpm/skills/bundled/main/internal-comms/examples/faq-answers.md +30 -0
- claude_mpm/skills/bundled/main/internal-comms/examples/general-comms.md +16 -0
- claude_mpm/skills/bundled/main/mcp-builder/SKILL.md +160 -0
- claude_mpm/skills/bundled/main/mcp-builder/reference/design_principles.md +412 -0
- claude_mpm/skills/bundled/main/mcp-builder/reference/evaluation.md +602 -0
- claude_mpm/skills/bundled/main/mcp-builder/reference/mcp_best_practices.md +915 -0
- claude_mpm/skills/bundled/main/mcp-builder/reference/node_mcp_server.md +916 -0
- claude_mpm/skills/bundled/main/mcp-builder/reference/python_mcp_server.md +752 -0
- claude_mpm/skills/bundled/main/mcp-builder/reference/workflow.md +1237 -0
- claude_mpm/skills/bundled/main/skill-creator/SKILL.md +189 -0
- claude_mpm/skills/bundled/main/skill-creator/references/best-practices.md +500 -0
- claude_mpm/skills/bundled/main/skill-creator/references/creation-workflow.md +464 -0
- claude_mpm/skills/bundled/main/skill-creator/references/examples.md +619 -0
- claude_mpm/skills/bundled/main/skill-creator/references/progressive-disclosure.md +437 -0
- claude_mpm/skills/bundled/main/skill-creator/references/skill-structure.md +231 -0
- claude_mpm/skills/bundled/php/espocrm-development/SKILL.md +170 -0
- claude_mpm/skills/bundled/php/espocrm-development/references/architecture.md +602 -0
- claude_mpm/skills/bundled/php/espocrm-development/references/common-tasks.md +821 -0
- claude_mpm/skills/bundled/php/espocrm-development/references/development-workflow.md +742 -0
- claude_mpm/skills/bundled/php/espocrm-development/references/frontend-customization.md +726 -0
- claude_mpm/skills/bundled/php/espocrm-development/references/hooks-and-services.md +764 -0
- claude_mpm/skills/bundled/php/espocrm-development/references/testing-debugging.md +831 -0
- claude_mpm/skills/bundled/pm/mpm/SKILL.md +38 -0
- claude_mpm/skills/bundled/pm/mpm-agent-update-workflow/SKILL.md +75 -0
- claude_mpm/skills/bundled/pm/mpm-bug-reporting/SKILL.md +248 -0
- claude_mpm/skills/bundled/pm/mpm-circuit-breaker-enforcement/SKILL.md +476 -0
- claude_mpm/skills/bundled/pm/mpm-config/SKILL.md +29 -0
- claude_mpm/skills/bundled/pm/mpm-delegation-patterns/SKILL.md +167 -0
- claude_mpm/skills/bundled/pm/mpm-doctor/SKILL.md +53 -0
- claude_mpm/skills/bundled/pm/mpm-git-file-tracking/SKILL.md +113 -0
- claude_mpm/skills/bundled/pm/mpm-help/SKILL.md +35 -0
- claude_mpm/skills/bundled/pm/mpm-init/SKILL.md +125 -0
- claude_mpm/skills/bundled/pm/mpm-monitor/SKILL.md +32 -0
- claude_mpm/skills/bundled/pm/mpm-organize/SKILL.md +121 -0
- claude_mpm/skills/bundled/pm/mpm-postmortem/SKILL.md +22 -0
- claude_mpm/skills/bundled/pm/mpm-pr-workflow/SKILL.md +124 -0
- claude_mpm/skills/bundled/pm/mpm-session-management/SKILL.md +312 -0
- claude_mpm/skills/bundled/pm/mpm-session-pause/SKILL.md +170 -0
- claude_mpm/skills/bundled/pm/mpm-session-resume/SKILL.md +31 -0
- claude_mpm/skills/bundled/pm/mpm-status/SKILL.md +37 -0
- claude_mpm/skills/bundled/pm/mpm-teaching-mode/SKILL.md +657 -0
- claude_mpm/skills/bundled/pm/mpm-ticket-view/SKILL.md +110 -0
- claude_mpm/skills/bundled/pm/mpm-ticketing-integration/SKILL.md +154 -0
- claude_mpm/skills/bundled/pm/mpm-tool-usage-guide/SKILL.md +386 -0
- claude_mpm/skills/bundled/pm/mpm-verification-protocols/SKILL.md +198 -0
- claude_mpm/skills/bundled/pm/mpm-version/SKILL.md +21 -0
- claude_mpm/skills/bundled/react/flexlayout-react.md +742 -0
- claude_mpm/skills/bundled/rust/desktop-applications/SKILL.md +226 -0
- claude_mpm/skills/bundled/rust/desktop-applications/references/architecture-patterns.md +901 -0
- claude_mpm/skills/bundled/rust/desktop-applications/references/native-gui-frameworks.md +901 -0
- claude_mpm/skills/bundled/rust/desktop-applications/references/platform-integration.md +775 -0
- claude_mpm/skills/bundled/rust/desktop-applications/references/state-management.md +937 -0
- claude_mpm/skills/bundled/rust/desktop-applications/references/tauri-framework.md +770 -0
- claude_mpm/skills/bundled/rust/desktop-applications/references/testing-deployment.md +961 -0
- claude_mpm/skills/bundled/security-scanning.md +112 -0
- claude_mpm/skills/bundled/tauri/tauri-async-patterns.md +495 -0
- claude_mpm/skills/bundled/tauri/tauri-build-deploy.md +599 -0
- claude_mpm/skills/bundled/tauri/tauri-command-patterns.md +535 -0
- claude_mpm/skills/bundled/tauri/tauri-error-handling.md +613 -0
- claude_mpm/skills/bundled/tauri/tauri-event-system.md +648 -0
- claude_mpm/skills/bundled/tauri/tauri-file-system.md +673 -0
- claude_mpm/skills/bundled/tauri/tauri-frontend-integration.md +767 -0
- claude_mpm/skills/bundled/tauri/tauri-performance.md +669 -0
- claude_mpm/skills/bundled/tauri/tauri-state-management.md +573 -0
- claude_mpm/skills/bundled/tauri/tauri-testing.md +384 -0
- claude_mpm/skills/bundled/tauri/tauri-window-management.md +628 -0
- claude_mpm/skills/bundled/testing/condition-based-waiting/SKILL.md +119 -0
- claude_mpm/skills/bundled/testing/condition-based-waiting/references/patterns-and-implementation.md +253 -0
- claude_mpm/skills/bundled/testing/test-driven-development/SKILL.md +145 -0
- claude_mpm/skills/bundled/testing/test-driven-development/references/anti-patterns.md +543 -0
- claude_mpm/skills/bundled/testing/test-driven-development/references/examples.md +741 -0
- claude_mpm/skills/bundled/testing/test-driven-development/references/integration.md +470 -0
- claude_mpm/skills/bundled/testing/test-driven-development/references/philosophy.md +458 -0
- claude_mpm/skills/bundled/testing/test-driven-development/references/workflow.md +639 -0
- claude_mpm/skills/bundled/testing/test-quality-inspector/SKILL.md +458 -0
- claude_mpm/skills/bundled/testing/test-quality-inspector/examples/example-inspection-report.md +411 -0
- claude_mpm/skills/bundled/testing/test-quality-inspector/references/assertion-quality.md +317 -0
- claude_mpm/skills/bundled/testing/test-quality-inspector/references/inspection-checklist.md +270 -0
- claude_mpm/skills/bundled/testing/test-quality-inspector/references/red-flags.md +436 -0
- claude_mpm/skills/bundled/testing/testing-anti-patterns/SKILL.md +140 -0
- claude_mpm/skills/bundled/testing/testing-anti-patterns/references/completeness-anti-patterns.md +572 -0
- claude_mpm/skills/bundled/testing/testing-anti-patterns/references/core-anti-patterns.md +411 -0
- claude_mpm/skills/bundled/testing/testing-anti-patterns/references/detection-guide.md +569 -0
- claude_mpm/skills/bundled/testing/testing-anti-patterns/references/tdd-connection.md +695 -0
- claude_mpm/skills/bundled/testing/webapp-testing/SKILL.md +184 -0
- claude_mpm/skills/bundled/testing/webapp-testing/decision-tree.md +459 -0
- claude_mpm/skills/bundled/testing/webapp-testing/playwright-patterns.md +479 -0
- claude_mpm/skills/bundled/testing/webapp-testing/reconnaissance-pattern.md +687 -0
- claude_mpm/skills/bundled/testing/webapp-testing/server-management.md +758 -0
- claude_mpm/skills/bundled/testing/webapp-testing/troubleshooting.md +868 -0
- claude_mpm/skills/registry.py +295 -90
- claude_mpm/skills/skill_manager.py +29 -23
- claude_mpm/templates/.pre-commit-config.yaml +112 -0
- claude_mpm/utils/agent_dependency_loader.py +103 -4
- claude_mpm/utils/robust_installer.py +45 -24
- claude_mpm-5.6.34.dist-info/METADATA +393 -0
- {claude_mpm-5.4.48.dist-info → claude_mpm-5.6.34.dist-info}/RECORD +453 -151
- claude_mpm/dashboard/static/svelte-build/_app/immutable/assets/0.B_FtCwCQ.css +0 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/assets/2.Cl_eSA4x.css +0 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BgChzWQ1.js +0 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CIXEwuWe.js +0 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CWc5urbQ.js +0 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DMkZpdF2.js +0 -2
- claude_mpm/dashboard/static/svelte-build/_app/immutable/entry/app.DTL5mJO-.js +0 -2
- claude_mpm/dashboard/static/svelte-build/_app/immutable/entry/start.DzuEhzqh.js +0 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/1.DFLC8jdE.js +0 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/2.DPvEihJJ.js +0 -10
- claude_mpm/hooks/claude_hooks/__pycache__/installer.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/connection_manager.cpython-311.pyc +0 -0
- claude_mpm-5.4.48.dist-info/METADATA +0 -999
- {claude_mpm-5.4.48.dist-info → claude_mpm-5.6.34.dist-info}/WHEEL +0 -0
- {claude_mpm-5.4.48.dist-info → claude_mpm-5.6.34.dist-info}/entry_points.txt +0 -0
- {claude_mpm-5.4.48.dist-info → claude_mpm-5.6.34.dist-info}/licenses/LICENSE +0 -0
- {claude_mpm-5.4.48.dist-info → claude_mpm-5.6.34.dist-info}/licenses/LICENSE-FAQ.md +0 -0
- {claude_mpm-5.4.48.dist-info → claude_mpm-5.6.34.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,404 @@
|
|
|
1
|
+
# Environment Troubleshooting Guide
|
|
2
|
+
|
|
3
|
+
> **Part of**: [env-manager](../SKILL.md)
|
|
4
|
+
> **Category**: infrastructure
|
|
5
|
+
> **Reading Level**: Intermediate
|
|
6
|
+
|
|
7
|
+
## Purpose
|
|
8
|
+
|
|
9
|
+
Solutions to common environment variable issues: "works locally, not in production", missing variables, framework-specific problems, and platform quirks.
|
|
10
|
+
|
|
11
|
+
## Common Issues
|
|
12
|
+
|
|
13
|
+
### Issue 1: Works Locally, Not in Production
|
|
14
|
+
|
|
15
|
+
**Symptoms:**
|
|
16
|
+
- Application works fine locally
|
|
17
|
+
- Fails or behaves incorrectly in production
|
|
18
|
+
- Error messages about missing or undefined variables
|
|
19
|
+
|
|
20
|
+
**Root Causes:**
|
|
21
|
+
|
|
22
|
+
**A. Variables Not Synced to Platform**
|
|
23
|
+
```bash
|
|
24
|
+
# Check local vs platform
|
|
25
|
+
python scripts/validate_env.py .env --compare-platform vercel
|
|
26
|
+
|
|
27
|
+
# Common issue: forgot to sync
|
|
28
|
+
python scripts/sync_secrets.py --platform vercel --sync --dry-run
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
**B. Wrong Environment File Loaded**
|
|
32
|
+
```bash
|
|
33
|
+
# Next.js example
|
|
34
|
+
# Local: .env.local (gitignored, has all secrets)
|
|
35
|
+
# Production: Platform env vars (might be missing some)
|
|
36
|
+
|
|
37
|
+
# Solution: Ensure all vars from .env.local are in platform
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
**C. Build-Time vs Runtime Variables**
|
|
41
|
+
```bash
|
|
42
|
+
# Vite/Next.js: VITE_* and NEXT_PUBLIC_* are build-time
|
|
43
|
+
# If you change them in production, you must rebuild
|
|
44
|
+
|
|
45
|
+
# Vercel: Redeploy after changing NEXT_PUBLIC_ vars
|
|
46
|
+
vercel --prod
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### Issue 2: Missing Variables
|
|
50
|
+
|
|
51
|
+
**Debug Workflow:**
|
|
52
|
+
|
|
53
|
+
```python
|
|
54
|
+
# 1. Check if variable is defined
|
|
55
|
+
def check_variable(var_name: str, env_file: Path):
|
|
56
|
+
"""Check if variable exists and has value."""
|
|
57
|
+
vars_dict = parse_env_file(env_file)
|
|
58
|
+
|
|
59
|
+
if var_name not in vars_dict:
|
|
60
|
+
print(f"❌ {var_name} not defined in {env_file}")
|
|
61
|
+
return False
|
|
62
|
+
|
|
63
|
+
if not vars_dict[var_name]:
|
|
64
|
+
print(f"⚠️ {var_name} defined but empty")
|
|
65
|
+
return False
|
|
66
|
+
|
|
67
|
+
print(f"✅ {var_name}={mask_secret(vars_dict[var_name])}")
|
|
68
|
+
return True
|
|
69
|
+
|
|
70
|
+
# 2. Check file precedence (Next.js)
|
|
71
|
+
def check_nextjs_precedence(project_dir: Path, var_name: str):
|
|
72
|
+
"""Check which file defines variable in Next.js."""
|
|
73
|
+
env_files = [
|
|
74
|
+
'.env.production.local',
|
|
75
|
+
'.env.local',
|
|
76
|
+
'.env.production',
|
|
77
|
+
'.env'
|
|
78
|
+
]
|
|
79
|
+
|
|
80
|
+
for env_file in env_files:
|
|
81
|
+
file_path = project_dir / env_file
|
|
82
|
+
if file_path.exists():
|
|
83
|
+
vars_dict = parse_env_file(file_path)
|
|
84
|
+
if var_name in vars_dict:
|
|
85
|
+
print(f"Found in: {env_file}")
|
|
86
|
+
print(f"Value: {mask_secret(vars_dict[var_name])}")
|
|
87
|
+
return
|
|
88
|
+
|
|
89
|
+
print(f"❌ {var_name} not found in any .env file")
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
**Common Mistakes:**
|
|
93
|
+
```bash
|
|
94
|
+
# ❌ Wrong: Variable name typo
|
|
95
|
+
DATABASE_URL=postgres://...
|
|
96
|
+
# Code accessing: DATABASE_ULR (typo)
|
|
97
|
+
|
|
98
|
+
# ❌ Wrong: Not loaded in .env file
|
|
99
|
+
# Missing from .env entirely
|
|
100
|
+
|
|
101
|
+
# ❌ Wrong: Empty value
|
|
102
|
+
DATABASE_URL=
|
|
103
|
+
|
|
104
|
+
# ✅ Correct:
|
|
105
|
+
DATABASE_URL=postgres://localhost:5432/mydb
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### Issue 3: Framework-Specific Issues
|
|
109
|
+
|
|
110
|
+
**Next.js Issues:**
|
|
111
|
+
|
|
112
|
+
**A. NEXT_PUBLIC_ Variable Not Available Client-Side**
|
|
113
|
+
```bash
|
|
114
|
+
# Issue: Variable defined but undefined in browser
|
|
115
|
+
# Cause: Missing NEXT_PUBLIC_ prefix
|
|
116
|
+
|
|
117
|
+
# ❌ Wrong:
|
|
118
|
+
API_URL=https://api.example.com
|
|
119
|
+
|
|
120
|
+
# ✅ Correct:
|
|
121
|
+
NEXT_PUBLIC_API_URL=https://api.example.com
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
**B. File Precedence Confusion**
|
|
125
|
+
```bash
|
|
126
|
+
# If .env.local defines DATABASE_URL=local
|
|
127
|
+
# But .env defines DATABASE_URL=remote
|
|
128
|
+
# .env.local wins (higher precedence)
|
|
129
|
+
|
|
130
|
+
# Solution: Check all .env files
|
|
131
|
+
ls -la .env*
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
**Express/Node.js Issues:**
|
|
135
|
+
|
|
136
|
+
**A. process.env.VAR Undefined**
|
|
137
|
+
```javascript
|
|
138
|
+
// Issue: Variable not loaded
|
|
139
|
+
// Cause: Forgot to load dotenv
|
|
140
|
+
|
|
141
|
+
// ❌ Wrong: No dotenv
|
|
142
|
+
const dbUrl = process.env.DATABASE_URL; // undefined
|
|
143
|
+
|
|
144
|
+
// ✅ Correct: Load dotenv first
|
|
145
|
+
require('dotenv').config();
|
|
146
|
+
const dbUrl = process.env.DATABASE_URL;
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
**Flask Issues:**
|
|
150
|
+
|
|
151
|
+
**A. Variable Not Available in Flask App**
|
|
152
|
+
```python
|
|
153
|
+
# Issue: os.getenv() returns None
|
|
154
|
+
# Cause: dotenv not loaded before app initialization
|
|
155
|
+
|
|
156
|
+
# ❌ Wrong: Config before load_dotenv
|
|
157
|
+
app.config['SECRET_KEY'] = os.getenv('SECRET_KEY') # None
|
|
158
|
+
load_dotenv()
|
|
159
|
+
|
|
160
|
+
# ✅ Correct: load_dotenv first
|
|
161
|
+
from dotenv import load_dotenv
|
|
162
|
+
load_dotenv()
|
|
163
|
+
app.config['SECRET_KEY'] = os.getenv('SECRET_KEY')
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
### Issue 4: Platform-Specific Issues
|
|
167
|
+
|
|
168
|
+
**Vercel Issues:**
|
|
169
|
+
|
|
170
|
+
**A. Environment Variable Not Applied**
|
|
171
|
+
```bash
|
|
172
|
+
# Issue: Changed env var in Vercel UI, but app still uses old value
|
|
173
|
+
# Cause: Vercel caches NEXT_PUBLIC_ vars at build time
|
|
174
|
+
|
|
175
|
+
# Solution: Redeploy
|
|
176
|
+
vercel --prod
|
|
177
|
+
|
|
178
|
+
# Or: Use non-NEXT_PUBLIC_ var and read server-side
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
**B. Variable Shows in Preview, Not Production**
|
|
182
|
+
```bash
|
|
183
|
+
# Issue: Variable works in preview deployments
|
|
184
|
+
# Cause: Variable only set for "Preview" environment in Vercel
|
|
185
|
+
|
|
186
|
+
# Solution: Set for "Production" environment too
|
|
187
|
+
# Vercel UI: Settings → Environment Variables → Production
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
**Railway Issues:**
|
|
191
|
+
|
|
192
|
+
**A. Variable Not Found After Deployment**
|
|
193
|
+
```bash
|
|
194
|
+
# Issue: App can't find variable
|
|
195
|
+
# Cause: Railway uses exact syntax, no dotenv loading
|
|
196
|
+
|
|
197
|
+
# Solution: Set variables in Railway dashboard or CLI
|
|
198
|
+
railway variables set DATABASE_URL=postgres://...
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
**Heroku Issues:**
|
|
202
|
+
|
|
203
|
+
**A. Config Vars Not Applied**
|
|
204
|
+
```bash
|
|
205
|
+
# Check current config
|
|
206
|
+
heroku config --app myapp
|
|
207
|
+
|
|
208
|
+
# Set missing var
|
|
209
|
+
heroku config:set DATABASE_URL=postgres://... --app myapp
|
|
210
|
+
|
|
211
|
+
# Restart app (sometimes needed)
|
|
212
|
+
heroku restart --app myapp
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
### Issue 5: Secret Exposure
|
|
216
|
+
|
|
217
|
+
**If Secrets Are Committed to Git:**
|
|
218
|
+
|
|
219
|
+
```bash
|
|
220
|
+
# Immediate actions:
|
|
221
|
+
# 1. Revoke/rotate exposed secrets immediately
|
|
222
|
+
# 2. Remove from git history
|
|
223
|
+
# 3. Update all deployments
|
|
224
|
+
|
|
225
|
+
# Remove from git history (DESTRUCTIVE)
|
|
226
|
+
git filter-branch --force --index-filter \
|
|
227
|
+
"git rm --cached --ignore-unmatch .env" \
|
|
228
|
+
--prune-empty --tag-name-filter cat -- --all
|
|
229
|
+
|
|
230
|
+
# Or use BFG Repo-Cleaner (recommended)
|
|
231
|
+
bfg --delete-files .env
|
|
232
|
+
git reflog expire --expire=now --all
|
|
233
|
+
git gc --prune=now --aggressive
|
|
234
|
+
|
|
235
|
+
# Force push (careful!)
|
|
236
|
+
git push origin --force --all
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
**If Secrets Are in Public Logs:**
|
|
240
|
+
|
|
241
|
+
```bash
|
|
242
|
+
# 1. Clear deployment logs (if possible)
|
|
243
|
+
# 2. Rotate all exposed secrets
|
|
244
|
+
# 3. Add logging safeguards
|
|
245
|
+
|
|
246
|
+
# Update code to never log secrets
|
|
247
|
+
# ❌ Wrong:
|
|
248
|
+
logger.info(f"Connecting with {db_password}")
|
|
249
|
+
|
|
250
|
+
# ✅ Correct:
|
|
251
|
+
logger.info(f"Connecting to database (credentials masked)")
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
## Debugging Checklist
|
|
255
|
+
|
|
256
|
+
### Local Development
|
|
257
|
+
|
|
258
|
+
```bash
|
|
259
|
+
# 1. Check .env file exists
|
|
260
|
+
ls -la .env*
|
|
261
|
+
|
|
262
|
+
# 2. Validate structure
|
|
263
|
+
python scripts/validate_env.py .env
|
|
264
|
+
|
|
265
|
+
# 3. Check for duplicates
|
|
266
|
+
python scripts/validate_env.py .env --check-duplicates
|
|
267
|
+
|
|
268
|
+
# 4. Verify framework detection
|
|
269
|
+
python scripts/validate_env.py .env --detect-framework
|
|
270
|
+
|
|
271
|
+
# 5. Test variable loading
|
|
272
|
+
node -e "require('dotenv').config(); console.log(process.env.DATABASE_URL)"
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
### Production Debugging
|
|
276
|
+
|
|
277
|
+
```bash
|
|
278
|
+
# 1. Compare local vs production
|
|
279
|
+
python scripts/sync_secrets.py --platform vercel --compare
|
|
280
|
+
|
|
281
|
+
# 2. Check platform variables
|
|
282
|
+
vercel env ls
|
|
283
|
+
|
|
284
|
+
# 3. Check build logs for errors
|
|
285
|
+
vercel logs --follow
|
|
286
|
+
|
|
287
|
+
# 4. Verify deployment used correct branch
|
|
288
|
+
vercel inspect <deployment-url>
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
## Quick Fixes
|
|
292
|
+
|
|
293
|
+
### Fix 1: Sync Local to Platform
|
|
294
|
+
|
|
295
|
+
```bash
|
|
296
|
+
# 1. Validate local .env
|
|
297
|
+
python scripts/validate_env.py .env
|
|
298
|
+
|
|
299
|
+
# 2. Compare with platform
|
|
300
|
+
python scripts/sync_secrets.py --platform vercel --compare
|
|
301
|
+
|
|
302
|
+
# 3. Sync (dry-run first)
|
|
303
|
+
python scripts/sync_secrets.py --platform vercel --sync --dry-run
|
|
304
|
+
|
|
305
|
+
# 4. Actually sync
|
|
306
|
+
python scripts/sync_secrets.py --platform vercel --sync --confirm
|
|
307
|
+
```
|
|
308
|
+
|
|
309
|
+
### Fix 2: Regenerate .env.example
|
|
310
|
+
|
|
311
|
+
```bash
|
|
312
|
+
# Generate from current .env
|
|
313
|
+
python scripts/validate_env.py .env --generate-example
|
|
314
|
+
|
|
315
|
+
# Review and commit
|
|
316
|
+
git add .env.example
|
|
317
|
+
git commit -m "docs: update .env.example"
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
### Fix 3: Check All .env Files (Next.js)
|
|
321
|
+
|
|
322
|
+
```bash
|
|
323
|
+
# List all .env files
|
|
324
|
+
find . -name ".env*" -not -path "*/node_modules/*"
|
|
325
|
+
|
|
326
|
+
# Check each file
|
|
327
|
+
for file in .env*; do
|
|
328
|
+
echo "=== $file ==="
|
|
329
|
+
python scripts/validate_env.py $file
|
|
330
|
+
done
|
|
331
|
+
```
|
|
332
|
+
|
|
333
|
+
## Prevention Tips
|
|
334
|
+
|
|
335
|
+
### Tip 1: Use .env.example
|
|
336
|
+
|
|
337
|
+
```bash
|
|
338
|
+
# Always maintain .env.example with structure
|
|
339
|
+
# Never include actual values
|
|
340
|
+
|
|
341
|
+
# .env.example
|
|
342
|
+
DATABASE_URL=postgres://localhost:5432/mydb
|
|
343
|
+
JWT_SECRET=your-secret-here
|
|
344
|
+
API_KEY=your-api-key-here
|
|
345
|
+
```
|
|
346
|
+
|
|
347
|
+
### Tip 2: Validate Before Deploy
|
|
348
|
+
|
|
349
|
+
```bash
|
|
350
|
+
# Add to CI/CD pipeline
|
|
351
|
+
# .github/workflows/validate.yml
|
|
352
|
+
- name: Validate Environment
|
|
353
|
+
run: python scripts/validate_env.py .env.example
|
|
354
|
+
```
|
|
355
|
+
|
|
356
|
+
### Tip 3: Document Platform-Specific Setup
|
|
357
|
+
|
|
358
|
+
```markdown
|
|
359
|
+
# README.md
|
|
360
|
+
|
|
361
|
+
## Environment Setup
|
|
362
|
+
|
|
363
|
+
### Local Development
|
|
364
|
+
1. Copy `.env.example` to `.env.local`
|
|
365
|
+
2. Fill in actual values
|
|
366
|
+
3. Run `python scripts/validate_env.py .env.local`
|
|
367
|
+
|
|
368
|
+
### Vercel Deployment
|
|
369
|
+
1. Go to Settings → Environment Variables
|
|
370
|
+
2. Add variables from `.env.example`
|
|
371
|
+
3. Set for Production environment
|
|
372
|
+
4. Deploy
|
|
373
|
+
```
|
|
374
|
+
|
|
375
|
+
## Summary
|
|
376
|
+
|
|
377
|
+
**Common Issues**:
|
|
378
|
+
- Works locally, not in production → Check platform sync
|
|
379
|
+
- Missing variables → Check file precedence
|
|
380
|
+
- Framework-specific → Check prefix requirements
|
|
381
|
+
- Platform quirks → Check platform documentation
|
|
382
|
+
|
|
383
|
+
**Debugging Workflow**:
|
|
384
|
+
1. Validate local .env structure
|
|
385
|
+
2. Check file precedence (Next.js)
|
|
386
|
+
3. Compare local vs platform
|
|
387
|
+
4. Check build logs
|
|
388
|
+
5. Verify variable access in code
|
|
389
|
+
|
|
390
|
+
**Quick Fixes**:
|
|
391
|
+
- Sync to platform with dry-run
|
|
392
|
+
- Regenerate .env.example
|
|
393
|
+
- Check all .env files
|
|
394
|
+
- Rotate exposed secrets
|
|
395
|
+
|
|
396
|
+
## Related References
|
|
397
|
+
|
|
398
|
+
- [Validation](validation.md): Environment validation workflows
|
|
399
|
+
- [Security](security.md): Secret exposure recovery
|
|
400
|
+
- [Synchronization](synchronization.md): Platform sync procedures
|
|
401
|
+
- [Frameworks](frameworks.md): Framework-specific patterns
|
|
402
|
+
|
|
403
|
+
---
|
|
404
|
+
**Lines**: 245 ✓ 180-250 range
|