claude-mpm 5.4.55__py3-none-any.whl → 5.6.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- claude_mpm/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 +111 -686
- 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 +46 -0
- claude_mpm/cli/commands/configure.py +620 -21
- 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 +2 -2
- claude_mpm/cli/commands/run.py +35 -3
- claude_mpm/cli/commands/skills.py +166 -14
- 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 +83 -0
- claude_mpm/cli/parsers/run_parser.py +10 -0
- claude_mpm/cli/startup.py +276 -403
- claude_mpm/cli/startup_display.py +72 -5
- claude_mpm/cli/startup_logging.py +2 -2
- claude_mpm/cli/utils.py +7 -3
- claude_mpm/commander/__init__.py +72 -0
- claude_mpm/commander/adapters/__init__.py +31 -0
- claude_mpm/commander/adapters/base.py +191 -0
- claude_mpm/commander/adapters/claude_code.py +361 -0
- claude_mpm/commander/adapters/communication.py +366 -0
- claude_mpm/commander/api/__init__.py +16 -0
- claude_mpm/commander/api/app.py +105 -0
- claude_mpm/commander/api/errors.py +112 -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 +215 -0
- claude_mpm/commander/api/routes/work.py +260 -0
- claude_mpm/commander/api/schemas.py +182 -0
- claude_mpm/commander/chat/__init__.py +7 -0
- claude_mpm/commander/chat/cli.py +107 -0
- claude_mpm/commander/chat/commands.py +96 -0
- claude_mpm/commander/chat/repl.py +310 -0
- claude_mpm/commander/config.py +49 -0
- claude_mpm/commander/config_loader.py +115 -0
- claude_mpm/commander/daemon.py +398 -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 +143 -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 +337 -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/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 +404 -0
- claude_mpm/commander/runtime/__init__.py +10 -0
- claude_mpm/commander/runtime/executor.py +191 -0
- claude_mpm/commander/runtime/monitor.py +316 -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 +189 -0
- claude_mpm/commander/work/queue.py +405 -0
- claude_mpm/commander/workflow/__init__.py +27 -0
- claude_mpm/commander/workflow/event_handler.py +219 -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/constants.py +1 -0
- claude_mpm/core/claude_runner.py +2 -2
- claude_mpm/core/config.py +5 -0
- claude_mpm/core/hook_manager.py +51 -3
- claude_mpm/core/interactive_session.py +7 -7
- claude_mpm/core/logger.py +10 -7
- claude_mpm/core/logging_utils.py +4 -2
- claude_mpm/core/output_style_manager.py +31 -13
- claude_mpm/core/unified_config.py +54 -8
- claude_mpm/core/unified_paths.py +30 -13
- 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/{Cs_tUR18.js → 1WZnGYqX.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{CDuw-vjf.js → 67pF3qNn.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{bTOqqlTd.js → 6RxdMKe4.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{DwBR2MJi.js → 8cZrfX0h.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{ZGh7QtNv.js → 9a6T2nm-.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{D9lljYKQ.js → B443AUzu.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{RJiighC3.js → B8AwtY2H.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{uuIeMWc-.js → BF15LAsF.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{D3k0OPJN.js → BRcwIQNr.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{CyWMqx4W.js → BV6nKitt.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{CiIAseT4.js → BViJ8lZt.js} +5 -5
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{CBBdVcY8.js → BcQ-Q0FE.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{BovzEFCE.js → Bpyvgze_.js} +1 -1
- 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/{eNVUfhuA.js → C3rbW_a-.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{GYwsonyD.js → C8WYN38h.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{BIF9m_hv.js → C9I8FlXH.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{B0uc0UOD.js → CIQcWgO2.js} +3 -3
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{Be7GpZd6.js → CIctN7YN.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{Bh0LDWpI.js → CKrS_JZW.js} +2 -2
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{DUrLdbGD.js → CR6P9C4A.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{B7xVLGWV.js → CRRR9MD_.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CRcR2DqT.js +334 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{Dhb8PKl3.js → CSXtMOf0.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{BPYeabCQ.js → CT-sbxSk.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{sQeU3Y1z.js → CWm6DJsp.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{CnA0NrzZ.js → CpqQ1Kzn.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{C4B-KCzX.js → D2nGpDRe.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{DGkLK5U1.js → D9iCMida.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{BofRWZRR.js → D9ykgMoY.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{DmxopI1J.js → DL2Ldur1.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{C30mlcqg.js → DPfltzjH.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{Vzk33B_K.js → DR8nis88.js} +2 -2
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{DI7hHRFL.js → DUliQN2b.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{C4JcI4KD.js → DXlhR01x.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{bT1r9zLR.js → D_lyTybS.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{DZX00Y4g.js → DngoTTgh.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{CzZX-COe.js → DqkmHtDC.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{B7RN905-.js → DsDh8EYs.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{DLVjFsZ3.js → DypDmXgd.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{iEWssX7S.js → IPYC-LnN.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/JTLiF7dt.js +24 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{DaimHw_p.js → JpevfAFt.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{DY1XQ8fi.js → R8CEIRAd.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{Dle-35c7.js → Zxy7qc-l.js} +2 -2
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/q9Hm6zAU.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{C_Usid8X.js → qtd3IeO4.js} +2 -2
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{CzeYkLYB.js → ulBFON_C.js} +2 -2
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{Cfqx1Qun.js → wQVh1CoA.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/entry/{app.D6-I5TpK.js → app.Dr7t0z2J.js} +2 -2
- claude_mpm/dashboard/static/svelte-build/_app/immutable/entry/start.BGhZHUS3.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/{0.m1gL8KXf.js → 0.RgBboRvH.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/{1.CgNOuw-d.js → 1.DG-KkbDf.js} +1 -1
- 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 +9 -9
- 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/auto_pause_handler.py +486 -0
- claude_mpm/hooks/claude_hooks/event_handlers.py +250 -11
- claude_mpm/hooks/claude_hooks/hook_handler.py +106 -89
- claude_mpm/hooks/claude_hooks/hook_wrapper.sh +6 -11
- claude_mpm/hooks/claude_hooks/installer.py +69 -5
- claude_mpm/hooks/claude_hooks/response_tracking.py +3 -1
- claude_mpm/hooks/claude_hooks/services/connection_manager.py +20 -0
- claude_mpm/hooks/claude_hooks/services/connection_manager_http.py +14 -77
- claude_mpm/hooks/claude_hooks/services/subagent_processor.py +30 -6
- claude_mpm/hooks/session_resume_hook.py +85 -1
- claude_mpm/init.py +1 -1
- claude_mpm/scripts/claude-hook-handler.sh +36 -10
- claude_mpm/scripts/start_activity_logging.py +0 -0
- claude_mpm/services/agents/agent_recommendation_service.py +8 -8
- claude_mpm/services/agents/cache_git_manager.py +1 -1
- claude_mpm/services/agents/deployment/agent_template_builder.py +8 -0
- claude_mpm/services/agents/deployment/deployment_reconciler.py +577 -0
- claude_mpm/services/agents/deployment/remote_agent_discovery_service.py +3 -0
- claude_mpm/services/agents/deployment/startup_reconciliation.py +138 -0
- claude_mpm/services/agents/loading/framework_agent_loader.py +75 -2
- claude_mpm/services/agents/sources/git_source_sync_service.py +7 -4
- claude_mpm/services/agents/startup_sync.py +5 -2
- claude_mpm/services/cli/__init__.py +3 -0
- claude_mpm/services/cli/incremental_pause_manager.py +561 -0
- claude_mpm/services/cli/session_resume_helper.py +10 -2
- claude_mpm/services/delegation_detector.py +175 -0
- claude_mpm/services/diagnostics/checks/agent_sources_check.py +30 -0
- claude_mpm/services/diagnostics/checks/configuration_check.py +24 -0
- claude_mpm/services/diagnostics/checks/installation_check.py +22 -0
- claude_mpm/services/diagnostics/checks/mcp_services_check.py +23 -0
- claude_mpm/services/diagnostics/doctor_reporter.py +31 -1
- claude_mpm/services/diagnostics/models.py +14 -1
- claude_mpm/services/event_log.py +325 -0
- claude_mpm/services/infrastructure/__init__.py +4 -0
- claude_mpm/services/infrastructure/context_usage_tracker.py +291 -0
- claude_mpm/services/infrastructure/resume_log_generator.py +24 -5
- claude_mpm/services/monitor/daemon_manager.py +15 -4
- claude_mpm/services/monitor/management/lifecycle.py +8 -2
- claude_mpm/services/monitor/server.py +106 -16
- claude_mpm/services/pm_skills_deployer.py +261 -85
- claude_mpm/services/skills/git_skill_source_manager.py +75 -10
- claude_mpm/services/skills/selective_skill_deployer.py +177 -80
- claude_mpm/services/skills/skill_discovery_service.py +57 -3
- claude_mpm/services/socketio/handlers/hook.py +14 -7
- claude_mpm/services/socketio/server/main.py +12 -4
- 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-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/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/skill_manager.py +4 -4
- claude_mpm/utils/agent_dependency_loader.py +103 -4
- claude_mpm/utils/robust_installer.py +45 -24
- claude_mpm-5.6.1.dist-info/METADATA +391 -0
- {claude_mpm-5.4.55.dist-info → claude_mpm-5.6.1.dist-info}/RECORD +377 -166
- claude_mpm/dashboard/static/svelte-build/_app/immutable/assets/0.DWzvg0-y.css +0 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/assets/2.ThTw9_ym.css +0 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/4TdZjIqw.js +0 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/5shd3_w0.js +0 -24
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BKjSRqUr.js +0 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Da0KfYnO.js +0 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Dfy6j1xT.js +0 -323
- claude_mpm/dashboard/static/svelte-build/_app/immutable/entry/start.NWzMBYRp.js +0 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/2.C0GcWctS.js +0 -1
- claude_mpm/hooks/claude_hooks/__pycache__/__init__.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/correlation_manager.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/event_handlers.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/hook_handler.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/installer.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/memory_integration.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/response_tracking.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/tool_analysis.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/__init__.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/connection_manager_http.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/duplicate_detector.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/state_manager.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/subagent_processor.cpython-311.pyc +0 -0
- claude_mpm-5.4.55.dist-info/METADATA +0 -999
- {claude_mpm-5.4.55.dist-info → claude_mpm-5.6.1.dist-info}/WHEEL +0 -0
- {claude_mpm-5.4.55.dist-info → claude_mpm-5.6.1.dist-info}/entry_points.txt +0 -0
- {claude_mpm-5.4.55.dist-info → claude_mpm-5.6.1.dist-info}/licenses/LICENSE +0 -0
- {claude_mpm-5.4.55.dist-info → claude_mpm-5.6.1.dist-info}/licenses/LICENSE-FAQ.md +0 -0
- {claude_mpm-5.4.55.dist-info → claude_mpm-5.6.1.dist-info}/top_level.txt +0 -0
|
@@ -13,7 +13,7 @@ Users can change it if they want, and the system will respect their choice.
|
|
|
13
13
|
|
|
14
14
|
import json
|
|
15
15
|
import re
|
|
16
|
-
import subprocess
|
|
16
|
+
import subprocess # nosec B404
|
|
17
17
|
from pathlib import Path
|
|
18
18
|
from typing import Any, Dict, Literal, Optional, TypedDict, cast
|
|
19
19
|
|
|
@@ -27,7 +27,9 @@ _CACHED_CLAUDE_VERSION: Optional[str] = None
|
|
|
27
27
|
_VERSION_DETECTED: bool = False
|
|
28
28
|
|
|
29
29
|
# Output style types
|
|
30
|
-
OutputStyleType = Literal[
|
|
30
|
+
OutputStyleType = Literal[
|
|
31
|
+
"professional", "teaching", "research", "founders"
|
|
32
|
+
] # "founders" is deprecated, use "research"
|
|
31
33
|
|
|
32
34
|
|
|
33
35
|
class StyleConfig(TypedDict):
|
|
@@ -41,9 +43,10 @@ class StyleConfig(TypedDict):
|
|
|
41
43
|
class OutputStyleManager:
|
|
42
44
|
"""Manages output style deployment and version-based handling.
|
|
43
45
|
|
|
44
|
-
Supports
|
|
46
|
+
Supports three output styles:
|
|
45
47
|
- professional: Default Claude MPM style (claude-mpm.md)
|
|
46
|
-
- teaching: Adaptive teaching mode (claude-mpm-
|
|
48
|
+
- teaching: Adaptive teaching mode (claude-mpm-teacher.md)
|
|
49
|
+
- research: Codebase research mode for founders, PMs, and developers (claude-mpm-research.md)
|
|
47
50
|
"""
|
|
48
51
|
|
|
49
52
|
def __init__(self) -> None:
|
|
@@ -51,8 +54,8 @@ class OutputStyleManager:
|
|
|
51
54
|
self.logger = get_logger("output_style_manager") # type: ignore[misc]
|
|
52
55
|
self.claude_version = self._detect_claude_version()
|
|
53
56
|
|
|
54
|
-
# Deploy to ~/.claude/styles/ directory (
|
|
55
|
-
self.output_style_dir = Path.home() / ".claude" / "styles"
|
|
57
|
+
# Deploy to ~/.claude/output-styles/ directory (official Claude Code location)
|
|
58
|
+
self.output_style_dir = Path.home() / ".claude" / "output-styles"
|
|
56
59
|
self.settings_file = Path.home() / ".claude" / "settings.json"
|
|
57
60
|
|
|
58
61
|
# Style definitions
|
|
@@ -62,14 +65,29 @@ class OutputStyleManager:
|
|
|
62
65
|
/ "agents"
|
|
63
66
|
/ "CLAUDE_MPM_OUTPUT_STYLE.md",
|
|
64
67
|
target=self.output_style_dir / "claude-mpm.md",
|
|
65
|
-
name="
|
|
68
|
+
name="Claude MPM",
|
|
66
69
|
),
|
|
67
70
|
"teaching": StyleConfig(
|
|
68
71
|
source=Path(__file__).parent.parent
|
|
69
72
|
/ "agents"
|
|
70
73
|
/ "CLAUDE_MPM_TEACHER_OUTPUT_STYLE.md",
|
|
71
|
-
target=self.output_style_dir / "claude-mpm-
|
|
72
|
-
name="
|
|
74
|
+
target=self.output_style_dir / "claude-mpm-teacher.md",
|
|
75
|
+
name="Claude MPM Teacher",
|
|
76
|
+
),
|
|
77
|
+
"research": StyleConfig(
|
|
78
|
+
source=Path(__file__).parent.parent
|
|
79
|
+
/ "agents"
|
|
80
|
+
/ "CLAUDE_MPM_RESEARCH_OUTPUT_STYLE.md",
|
|
81
|
+
target=self.output_style_dir / "claude-mpm-research.md",
|
|
82
|
+
name="Claude MPM Research",
|
|
83
|
+
),
|
|
84
|
+
# Backward compatibility alias (deprecated)
|
|
85
|
+
"founders": StyleConfig(
|
|
86
|
+
source=Path(__file__).parent.parent
|
|
87
|
+
/ "agents"
|
|
88
|
+
/ "CLAUDE_MPM_RESEARCH_OUTPUT_STYLE.md",
|
|
89
|
+
target=self.output_style_dir / "claude-mpm-research.md",
|
|
90
|
+
name="Claude MPM Research",
|
|
73
91
|
),
|
|
74
92
|
}
|
|
75
93
|
|
|
@@ -93,7 +111,7 @@ class OutputStyleManager:
|
|
|
93
111
|
|
|
94
112
|
try:
|
|
95
113
|
# Run claude --version command
|
|
96
|
-
result = subprocess.run(
|
|
114
|
+
result = subprocess.run( # nosec B603 B607
|
|
97
115
|
["claude", "--version"],
|
|
98
116
|
capture_output=True,
|
|
99
117
|
text=True,
|
|
@@ -300,12 +318,12 @@ class OutputStyleManager:
|
|
|
300
318
|
self.logger.error(f"Failed to deploy {style} style: {e}")
|
|
301
319
|
return False
|
|
302
320
|
|
|
303
|
-
def _activate_output_style(self, style_name: str = "
|
|
321
|
+
def _activate_output_style(self, style_name: str = "Claude MPM") -> bool:
|
|
304
322
|
"""
|
|
305
323
|
Update Claude Code settings to activate a specific output style.
|
|
306
324
|
|
|
307
325
|
Args:
|
|
308
|
-
style_name: Name of the style to activate (e.g., "
|
|
326
|
+
style_name: Name of the style to activate (e.g., "Claude MPM", "Claude MPM Teacher")
|
|
309
327
|
|
|
310
328
|
Returns:
|
|
311
329
|
True if activated successfully, False otherwise
|
|
@@ -443,7 +461,7 @@ class OutputStyleManager:
|
|
|
443
461
|
|
|
444
462
|
# Activate the default style if requested
|
|
445
463
|
if activate_default and results.get("professional", False):
|
|
446
|
-
self._activate_output_style("
|
|
464
|
+
self._activate_output_style("Claude MPM")
|
|
447
465
|
|
|
448
466
|
return results
|
|
449
467
|
|
|
@@ -16,7 +16,7 @@ Design Principles:
|
|
|
16
16
|
from pathlib import Path
|
|
17
17
|
from typing import Any, Dict, List, Optional, Union
|
|
18
18
|
|
|
19
|
-
from pydantic import BaseModel, Field,
|
|
19
|
+
from pydantic import BaseModel, Field, field_validator
|
|
20
20
|
from pydantic_settings import BaseSettings
|
|
21
21
|
|
|
22
22
|
from .exceptions import ConfigurationError
|
|
@@ -54,8 +54,9 @@ class LoggingConfig(BaseModel):
|
|
|
54
54
|
default=True, description="Enable console logging"
|
|
55
55
|
)
|
|
56
56
|
|
|
57
|
-
@
|
|
58
|
-
|
|
57
|
+
@field_validator("level")
|
|
58
|
+
@classmethod
|
|
59
|
+
def validate_log_level(cls, v):
|
|
59
60
|
valid_levels = ["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"]
|
|
60
61
|
if v.upper() not in valid_levels:
|
|
61
62
|
raise ValueError(f"Invalid log level. Must be one of: {valid_levels}")
|
|
@@ -65,8 +66,36 @@ class LoggingConfig(BaseModel):
|
|
|
65
66
|
class AgentConfig(BaseModel):
|
|
66
67
|
"""Agent system configuration."""
|
|
67
68
|
|
|
69
|
+
# Explicit deployment lists (simplified model)
|
|
70
|
+
enabled: List[str] = Field(
|
|
71
|
+
default_factory=list,
|
|
72
|
+
description="Explicit list of agent IDs to deploy (empty = use auto_discover)",
|
|
73
|
+
)
|
|
74
|
+
|
|
75
|
+
# Required agents that are always deployed
|
|
76
|
+
# Standard 7 core agents for essential PM workflow functionality
|
|
77
|
+
# These are auto-deployed when no agents are specified in configuration
|
|
78
|
+
required: List[str] = Field(
|
|
79
|
+
default_factory=lambda: [
|
|
80
|
+
"engineer", # General-purpose implementation
|
|
81
|
+
"research", # Codebase exploration and analysis
|
|
82
|
+
"qa", # Testing and quality assurance
|
|
83
|
+
"web-qa", # Browser-based testing specialist
|
|
84
|
+
"documentation", # Documentation generation
|
|
85
|
+
"ops", # Basic deployment operations
|
|
86
|
+
"ticketing", # Ticket tracking (essential for PM workflow)
|
|
87
|
+
],
|
|
88
|
+
description="Agents that are always deployed (standard 7 core agents)",
|
|
89
|
+
)
|
|
90
|
+
|
|
91
|
+
include_universal: bool = Field(
|
|
92
|
+
default=True,
|
|
93
|
+
description="Auto-include all agents with 'universal' toolchain/category",
|
|
94
|
+
)
|
|
95
|
+
|
|
68
96
|
auto_discover: bool = Field(
|
|
69
|
-
default=
|
|
97
|
+
default=False,
|
|
98
|
+
description="Enable automatic agent discovery (deprecated, use enabled list)",
|
|
70
99
|
)
|
|
71
100
|
precedence: List[str] = Field(
|
|
72
101
|
default=["project", "user", "system"], description="Agent precedence order"
|
|
@@ -239,6 +268,21 @@ class DocumentationConfig(BaseModel):
|
|
|
239
268
|
)
|
|
240
269
|
|
|
241
270
|
|
|
271
|
+
class SkillConfig(BaseModel):
|
|
272
|
+
"""Skill system configuration."""
|
|
273
|
+
|
|
274
|
+
# Explicit deployment lists (simplified model)
|
|
275
|
+
enabled: List[str] = Field(
|
|
276
|
+
default_factory=list,
|
|
277
|
+
description="Explicit list of skill IDs to deploy (includes agent dependencies)",
|
|
278
|
+
)
|
|
279
|
+
|
|
280
|
+
auto_detect_dependencies: bool = Field(
|
|
281
|
+
default=True,
|
|
282
|
+
description="Automatically include skills required by enabled agents",
|
|
283
|
+
)
|
|
284
|
+
|
|
285
|
+
|
|
242
286
|
class UnifiedConfig(BaseSettings):
|
|
243
287
|
"""
|
|
244
288
|
Unified configuration model for Claude MPM.
|
|
@@ -258,6 +302,7 @@ class UnifiedConfig(BaseSettings):
|
|
|
258
302
|
network: NetworkConfig = Field(default_factory=NetworkConfig)
|
|
259
303
|
logging: LoggingConfig = Field(default_factory=LoggingConfig)
|
|
260
304
|
agents: AgentConfig = Field(default_factory=AgentConfig)
|
|
305
|
+
skills: SkillConfig = Field(default_factory=SkillConfig)
|
|
261
306
|
memory: MemoryConfig = Field(default_factory=MemoryConfig)
|
|
262
307
|
security: SecurityConfig = Field(default_factory=SecurityConfig)
|
|
263
308
|
performance: PerformanceConfig = Field(default_factory=PerformanceConfig)
|
|
@@ -287,8 +332,9 @@ class UnifiedConfig(BaseSettings):
|
|
|
287
332
|
validate_assignment = True
|
|
288
333
|
extra = "allow" # Allow extra fields for backward compatibility
|
|
289
334
|
|
|
290
|
-
@
|
|
291
|
-
|
|
335
|
+
@field_validator("environment")
|
|
336
|
+
@classmethod
|
|
337
|
+
def validate_environment(cls, v):
|
|
292
338
|
valid_envs = ["development", "testing", "production"]
|
|
293
339
|
if v not in valid_envs:
|
|
294
340
|
raise ValueError(f"Invalid environment. Must be one of: {valid_envs}")
|
|
@@ -554,12 +600,12 @@ class ConfigurationService:
|
|
|
554
600
|
import yaml
|
|
555
601
|
|
|
556
602
|
with file_path.open("w") as f:
|
|
557
|
-
yaml.dump(self._config.
|
|
603
|
+
yaml.dump(self._config.model_dump(), f, default_flow_style=False)
|
|
558
604
|
elif format.lower() == "json":
|
|
559
605
|
import json
|
|
560
606
|
|
|
561
607
|
with file_path.open("w") as f:
|
|
562
|
-
json.dump(self._config.
|
|
608
|
+
json.dump(self._config.model_dump(), f, indent=2)
|
|
563
609
|
else:
|
|
564
610
|
raise ConfigurationError(f"Unsupported export format: {format}")
|
|
565
611
|
|
claude_mpm/core/unified_paths.py
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
1
|
"""
|
|
3
2
|
Unified Path Management System for Claude MPM
|
|
4
3
|
==============================================
|
|
@@ -36,6 +35,24 @@ from claude_mpm.core.logging_utils import get_logger
|
|
|
36
35
|
logger = get_logger(__name__)
|
|
37
36
|
|
|
38
37
|
|
|
38
|
+
def _safe_cwd() -> Path:
|
|
39
|
+
"""Safely get the current working directory.
|
|
40
|
+
|
|
41
|
+
If the current directory no longer exists (deleted/moved), fall back to home directory.
|
|
42
|
+
This prevents FileNotFoundError when Path.cwd() is called from a deleted directory.
|
|
43
|
+
|
|
44
|
+
Returns:
|
|
45
|
+
Path: Current working directory, or home directory if cwd doesn't exist
|
|
46
|
+
"""
|
|
47
|
+
try:
|
|
48
|
+
return Path.cwd()
|
|
49
|
+
except (FileNotFoundError, OSError) as e:
|
|
50
|
+
logger.debug(
|
|
51
|
+
f"Current directory doesn't exist ({e}), falling back to home directory"
|
|
52
|
+
)
|
|
53
|
+
return Path.home()
|
|
54
|
+
|
|
55
|
+
|
|
39
56
|
class PathType(Enum):
|
|
40
57
|
"""Enumeration of different path types for categorization."""
|
|
41
58
|
|
|
@@ -95,7 +112,7 @@ class PathContext:
|
|
|
95
112
|
|
|
96
113
|
# Additional check: If we're running from within a claude-mpm development directory
|
|
97
114
|
# This handles the case where pipx claude-mpm is invoked from within the dev directory
|
|
98
|
-
cwd =
|
|
115
|
+
cwd = _safe_cwd()
|
|
99
116
|
current = cwd
|
|
100
117
|
for _ in range(5): # Check up to 5 levels up from current directory
|
|
101
118
|
if (current / "pyproject.toml").exists() and (
|
|
@@ -114,7 +131,7 @@ class PathContext:
|
|
|
114
131
|
# Verify this is a development setup by checking for key files
|
|
115
132
|
if (current / "scripts" / "claude-mpm").exists():
|
|
116
133
|
return True
|
|
117
|
-
except Exception:
|
|
134
|
+
except Exception: # nosec B110
|
|
118
135
|
pass
|
|
119
136
|
if current == current.parent:
|
|
120
137
|
break
|
|
@@ -140,7 +157,7 @@ class PathContext:
|
|
|
140
157
|
f"Found editable install via .pth file: {pth_file}"
|
|
141
158
|
)
|
|
142
159
|
return True
|
|
143
|
-
except Exception:
|
|
160
|
+
except Exception: # nosec B112
|
|
144
161
|
continue
|
|
145
162
|
|
|
146
163
|
# Check for egg-link files
|
|
@@ -156,7 +173,7 @@ class PathContext:
|
|
|
156
173
|
f"Found editable install via egg-link: {egg_link}"
|
|
157
174
|
)
|
|
158
175
|
return True
|
|
159
|
-
except Exception:
|
|
176
|
+
except Exception: # nosec B112
|
|
160
177
|
continue
|
|
161
178
|
except ImportError:
|
|
162
179
|
pass
|
|
@@ -186,7 +203,7 @@ class PathContext:
|
|
|
186
203
|
|
|
187
204
|
# Check if current working directory is a claude-mpm development project
|
|
188
205
|
# This handles the case where pipx claude-mpm is run from within the dev directory
|
|
189
|
-
cwd =
|
|
206
|
+
cwd = _safe_cwd()
|
|
190
207
|
current = cwd
|
|
191
208
|
for _ in range(5): # Check up to 5 levels up from current directory
|
|
192
209
|
if (current / "pyproject.toml").exists() and (
|
|
@@ -206,7 +223,7 @@ class PathContext:
|
|
|
206
223
|
"Using development mode for local source preference"
|
|
207
224
|
)
|
|
208
225
|
return DeploymentContext.DEVELOPMENT
|
|
209
|
-
except Exception:
|
|
226
|
+
except Exception: # nosec B110
|
|
210
227
|
pass
|
|
211
228
|
if current == current.parent:
|
|
212
229
|
break
|
|
@@ -228,7 +245,7 @@ class PathContext:
|
|
|
228
245
|
if "pipx" in str(module_path):
|
|
229
246
|
# Running via pipx but from within a development directory
|
|
230
247
|
# Use development mode to prefer local source over pipx installation
|
|
231
|
-
cwd =
|
|
248
|
+
cwd = _safe_cwd()
|
|
232
249
|
current = cwd
|
|
233
250
|
for _ in range(5):
|
|
234
251
|
if (current / "src" / "claude_mpm").exists() and (
|
|
@@ -346,7 +363,7 @@ class UnifiedPathManager:
|
|
|
346
363
|
):
|
|
347
364
|
# For development mode, first check if we're running from within a dev directory
|
|
348
365
|
# This handles the case where pipx is invoked from a development directory
|
|
349
|
-
cwd =
|
|
366
|
+
cwd = _safe_cwd()
|
|
350
367
|
current = cwd
|
|
351
368
|
for _ in range(5):
|
|
352
369
|
if (current / "src" / "claude_mpm").exists() and (
|
|
@@ -360,7 +377,7 @@ class UnifiedPathManager:
|
|
|
360
377
|
f"Found framework root via cwd at {current}"
|
|
361
378
|
)
|
|
362
379
|
return current
|
|
363
|
-
except Exception:
|
|
380
|
+
except Exception: # nosec B110
|
|
364
381
|
pass
|
|
365
382
|
if current == current.parent:
|
|
366
383
|
break
|
|
@@ -403,7 +420,7 @@ class UnifiedPathManager:
|
|
|
403
420
|
@lru_cache(maxsize=1)
|
|
404
421
|
def project_root(self) -> Path:
|
|
405
422
|
"""Get the current project root directory."""
|
|
406
|
-
current =
|
|
423
|
+
current = _safe_cwd()
|
|
407
424
|
while current != current.parent:
|
|
408
425
|
for marker in self._project_markers:
|
|
409
426
|
if (current / marker).exists():
|
|
@@ -413,7 +430,7 @@ class UnifiedPathManager:
|
|
|
413
430
|
|
|
414
431
|
# Fallback to current directory
|
|
415
432
|
logger.warning("Could not find project root, using current directory")
|
|
416
|
-
return
|
|
433
|
+
return _safe_cwd()
|
|
417
434
|
|
|
418
435
|
@property
|
|
419
436
|
def package_root(self) -> Path:
|
|
@@ -562,7 +579,7 @@ class UnifiedPathManager:
|
|
|
562
579
|
self, filename: str, start_path: Optional[Path] = None
|
|
563
580
|
) -> Optional[Path]:
|
|
564
581
|
"""Search for a file by traversing up the directory tree."""
|
|
565
|
-
current = start_path or
|
|
582
|
+
current = start_path or _safe_cwd()
|
|
566
583
|
|
|
567
584
|
while current != current.parent:
|
|
568
585
|
candidate = current / filename
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.\!container{width:100%!important}.container{width:100%}@media(min-width:640px){.\!container{max-width:640px!important}.container{max-width:640px}}@media(min-width:768px){.\!container{max-width:768px!important}.container{max-width:768px}}@media(min-width:1024px){.\!container{max-width:1024px!important}.container{max-width:1024px}}@media(min-width:1280px){.\!container{max-width:1280px!important}.container{max-width:1280px}}@media(min-width:1536px){.\!container{max-width:1536px!important}.container{max-width:1536px}}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{top:0;right:0;bottom:0;left:0}.bottom-4{bottom:1rem}.left-4{left:1rem}.right-2{right:.5rem}.right-4{right:1rem}.top-0{top:0}.top-2{top:.5rem}.top-4{top:1rem}.z-50{z-index:50}.mx-auto{margin-left:auto;margin-right:auto}.-ml-1{margin-left:-.25rem}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-6{margin-bottom:1.5rem}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.ml-4{margin-left:1rem}.ml-auto{margin-left:auto}.mr-1{margin-right:.25rem}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-4{margin-top:1rem}.block{display:block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.contents{display:contents}.hidden{display:none}.h-12{height:3rem}.h-16{height:4rem}.h-2{height:.5rem}.h-3{height:.75rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-full{height:100%}.h-screen{height:100vh}.max-h-\[calc\(100vh-280px\)\]{max-height:calc(100vh - 280px)}.min-h-0{min-height:0px}.min-h-\[400px\]{min-height:400px}.min-h-screen{min-height:100vh}.w-1\/3{width:33.333333%}.w-12{width:3rem}.w-16{width:4rem}.w-2{width:.5rem}.w-3{width:.75rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-64{width:16rem}.w-full{width:100%}.min-w-0{min-width:0px}.max-w-xs{max-width:20rem}.flex-1{flex:1 1 0%}.flex-shrink{flex-shrink:1}.flex-shrink-0{flex-shrink:0}.border-collapse{border-collapse:collapse}.rotate-90{--tw-rotate: 90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.cursor-pointer{cursor:pointer}.resize{resize:both}.grid-cols-\[110px_120px_160px_120px_100px\]{grid-template-columns:110px 120px 160px 120px 100px}.grid-cols-\[140px_1fr_80px_100px\]{grid-template-columns:140px 1fr 80px 100px}.grid-cols-\[50px_1fr_100px_120px_auto\]{grid-template-columns:50px 1fr 100px 120px auto}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0{gap:0px}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-2\.5{gap:.625rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-2\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.625rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.625rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.divide-slate-200>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1;border-color:rgb(226 232 240 / var(--tw-divide-opacity, 1))}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.break-all{word-break:break-all}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.border{border-width:1px}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-l-4{border-left-width:4px}.border-r{border-right-width:1px}.border-amber-200{--tw-border-opacity: 1;border-color:rgb(253 230 138 / var(--tw-border-opacity, 1))}.border-amber-400{--tw-border-opacity: 1;border-color:rgb(251 191 36 / var(--tw-border-opacity, 1))}.border-amber-500\/30{border-color:#f59e0b4d}.border-blue-200{--tw-border-opacity: 1;border-color:rgb(191 219 254 / var(--tw-border-opacity, 1))}.border-blue-500\/20{border-color:#3b82f633}.border-blue-500\/30{border-color:#3b82f64d}.border-green-500\/20{border-color:#22c55e33}.border-green-500\/30{border-color:#22c55e4d}.border-purple-200{--tw-border-opacity: 1;border-color:rgb(233 213 255 / var(--tw-border-opacity, 1))}.border-purple-500\/20{border-color:#a855f733}.border-purple-500\/30{border-color:#a855f74d}.border-red-500\/20{border-color:#ef444433}.border-slate-200{--tw-border-opacity: 1;border-color:rgb(226 232 240 / var(--tw-border-opacity, 1))}.border-slate-300{--tw-border-opacity: 1;border-color:rgb(203 213 225 / var(--tw-border-opacity, 1))}.border-slate-500{--tw-border-opacity: 1;border-color:rgb(100 116 139 / var(--tw-border-opacity, 1))}.border-slate-500\/20{border-color:#64748b33}.border-slate-500\/30{border-color:#64748b4d}.border-slate-600{--tw-border-opacity: 1;border-color:rgb(71 85 105 / var(--tw-border-opacity, 1))}.border-slate-700{--tw-border-opacity: 1;border-color:rgb(51 65 85 / var(--tw-border-opacity, 1))}.border-violet-400{--tw-border-opacity: 1;border-color:rgb(167 139 250 / var(--tw-border-opacity, 1))}.border-l-cyan-500{--tw-border-opacity: 1;border-left-color:rgb(6 182 212 / var(--tw-border-opacity, 1))}.border-l-transparent{border-left-color:transparent}.bg-amber-100{--tw-bg-opacity: 1;background-color:rgb(254 243 199 / var(--tw-bg-opacity, 1))}.bg-amber-200{--tw-bg-opacity: 1;background-color:rgb(253 230 138 / var(--tw-bg-opacity, 1))}.bg-amber-50{--tw-bg-opacity: 1;background-color:rgb(255 251 235 / var(--tw-bg-opacity, 1))}.bg-amber-500{--tw-bg-opacity: 1;background-color:rgb(245 158 11 / var(--tw-bg-opacity, 1))}.bg-amber-500\/20{background-color:#f59e0b33}.bg-blue-100{--tw-bg-opacity: 1;background-color:rgb(219 234 254 / var(--tw-bg-opacity, 1))}.bg-blue-50{--tw-bg-opacity: 1;background-color:rgb(239 246 255 / var(--tw-bg-opacity, 1))}.bg-blue-500\/20{background-color:#3b82f633}.bg-blue-500\/5{background-color:#3b82f60d}.bg-cyan-50{--tw-bg-opacity: 1;background-color:rgb(236 254 255 / var(--tw-bg-opacity, 1))}.bg-cyan-500{--tw-bg-opacity: 1;background-color:rgb(6 182 212 / var(--tw-bg-opacity, 1))}.bg-green-100{--tw-bg-opacity: 1;background-color:rgb(220 252 231 / var(--tw-bg-opacity, 1))}.bg-green-500{--tw-bg-opacity: 1;background-color:rgb(34 197 94 / var(--tw-bg-opacity, 1))}.bg-green-500\/20{background-color:#22c55e33}.bg-green-500\/5{background-color:#22c55e0d}.bg-purple-50{--tw-bg-opacity: 1;background-color:rgb(250 245 255 / var(--tw-bg-opacity, 1))}.bg-purple-500\/20{background-color:#a855f733}.bg-purple-500\/5{background-color:#a855f70d}.bg-red-100{--tw-bg-opacity: 1;background-color:rgb(254 226 226 / var(--tw-bg-opacity, 1))}.bg-red-50{--tw-bg-opacity: 1;background-color:rgb(254 242 242 / var(--tw-bg-opacity, 1))}.bg-red-500{--tw-bg-opacity: 1;background-color:rgb(239 68 68 / var(--tw-bg-opacity, 1))}.bg-red-500\/5{background-color:#ef44440d}.bg-slate-100{--tw-bg-opacity: 1;background-color:rgb(241 245 249 / var(--tw-bg-opacity, 1))}.bg-slate-200{--tw-bg-opacity: 1;background-color:rgb(226 232 240 / var(--tw-bg-opacity, 1))}.bg-slate-50{--tw-bg-opacity: 1;background-color:rgb(248 250 252 / var(--tw-bg-opacity, 1))}.bg-slate-500\/20{background-color:#64748b33}.bg-slate-500\/5{background-color:#64748b0d}.bg-slate-600{--tw-bg-opacity: 1;background-color:rgb(71 85 105 / var(--tw-bg-opacity, 1))}.bg-slate-800\/90{background-color:#1e293be6}.bg-slate-800\/95{background-color:#1e293bf2}.bg-slate-900{--tw-bg-opacity: 1;background-color:rgb(15 23 42 / var(--tw-bg-opacity, 1))}.bg-violet-500{--tw-bg-opacity: 1;background-color:rgb(139 92 246 / var(--tw-bg-opacity, 1))}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-12{padding-top:3rem;padding-bottom:3rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.pb-2{padding-bottom:.5rem}.pr-2{padding-right:.5rem}.pt-2{padding-top:.5rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-2xl{font-size:1.5rem;line-height:2rem}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.capitalize{text-transform:capitalize}.italic{font-style:italic}.leading-none{line-height:1}.text-amber-300{--tw-text-opacity: 1;color:rgb(252 211 77 / var(--tw-text-opacity, 1))}.text-amber-500{--tw-text-opacity: 1;color:rgb(245 158 11 / var(--tw-text-opacity, 1))}.text-amber-600{--tw-text-opacity: 1;color:rgb(217 119 6 / var(--tw-text-opacity, 1))}.text-amber-700{--tw-text-opacity: 1;color:rgb(180 83 9 / var(--tw-text-opacity, 1))}.text-blue-300{--tw-text-opacity: 1;color:rgb(147 197 253 / var(--tw-text-opacity, 1))}.text-blue-400{--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity, 1))}.text-blue-600{--tw-text-opacity: 1;color:rgb(37 99 235 / var(--tw-text-opacity, 1))}.text-blue-700{--tw-text-opacity: 1;color:rgb(29 78 216 / var(--tw-text-opacity, 1))}.text-cyan-400{--tw-text-opacity: 1;color:rgb(34 211 238 / var(--tw-text-opacity, 1))}.text-cyan-600{--tw-text-opacity: 1;color:rgb(8 145 178 / var(--tw-text-opacity, 1))}.text-green-300{--tw-text-opacity: 1;color:rgb(134 239 172 / var(--tw-text-opacity, 1))}.text-green-400{--tw-text-opacity: 1;color:rgb(74 222 128 / var(--tw-text-opacity, 1))}.text-green-600{--tw-text-opacity: 1;color:rgb(22 163 74 / var(--tw-text-opacity, 1))}.text-green-700{--tw-text-opacity: 1;color:rgb(21 128 61 / var(--tw-text-opacity, 1))}.text-green-800{--tw-text-opacity: 1;color:rgb(22 101 52 / var(--tw-text-opacity, 1))}.text-purple-400{--tw-text-opacity: 1;color:rgb(192 132 252 / var(--tw-text-opacity, 1))}.text-purple-600{--tw-text-opacity: 1;color:rgb(147 51 234 / var(--tw-text-opacity, 1))}.text-red-400{--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}.text-red-600{--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity, 1))}.text-red-800{--tw-text-opacity: 1;color:rgb(153 27 27 / var(--tw-text-opacity, 1))}.text-red-900{--tw-text-opacity: 1;color:rgb(127 29 29 / var(--tw-text-opacity, 1))}.text-slate-100{--tw-text-opacity: 1;color:rgb(241 245 249 / var(--tw-text-opacity, 1))}.text-slate-300{--tw-text-opacity: 1;color:rgb(203 213 225 / var(--tw-text-opacity, 1))}.text-slate-400{--tw-text-opacity: 1;color:rgb(148 163 184 / var(--tw-text-opacity, 1))}.text-slate-500{--tw-text-opacity: 1;color:rgb(100 116 139 / var(--tw-text-opacity, 1))}.text-slate-600{--tw-text-opacity: 1;color:rgb(71 85 105 / var(--tw-text-opacity, 1))}.text-slate-700{--tw-text-opacity: 1;color:rgb(51 65 85 / var(--tw-text-opacity, 1))}.text-slate-800{--tw-text-opacity: 1;color:rgb(30 41 59 / var(--tw-text-opacity, 1))}.text-slate-900{--tw-text-opacity: 1;color:rgb(15 23 42 / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.text-yellow-600{--tw-text-opacity: 1;color:rgb(202 138 4 / var(--tw-text-opacity, 1))}.underline{text-decoration-line:underline}.placeholder-slate-400::-moz-placeholder{--tw-placeholder-opacity: 1;color:rgb(148 163 184 / var(--tw-placeholder-opacity, 1))}.placeholder-slate-400::placeholder{--tw-placeholder-opacity: 1;color:rgb(148 163 184 / var(--tw-placeholder-opacity, 1))}.opacity-50{opacity:.5}.shadow-xl{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.outline{outline-style:solid}.ring-1{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-cyan-300{--tw-ring-opacity: 1;--tw-ring-color: rgb(103 232 249 / var(--tw-ring-opacity, 1))}.drop-shadow{--tw-drop-shadow: drop-shadow(0 1px 2px rgb(0 0 0 / .1)) drop-shadow(0 1px 1px rgb(0 0 0 / .06));filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur-sm{--tw-backdrop-blur: blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}:root{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Open Sans,Helvetica Neue,sans-serif;--color-bg-primary: #ffffff;--color-bg-secondary: #f8fafc;--color-bg-code: #f1f5f9;--color-text-primary: #0f172a;--color-text-secondary: #475569;--color-text-tertiary: #64748b;--color-border: #e2e8f0;--color-primary: #0891b2}.dark{--color-bg-primary: #0f172a;--color-bg-secondary: #1e293b;--color-bg-code: #334155;--color-text-primary: #f1f5f9;--color-text-secondary: #cbd5e1;--color-text-tertiary: #94a3b8;--color-border: #334155;--color-primary: #06b6d4}body{margin:0;padding:0;background-color:#0f172a;color:#e2e8f0}.hover\:border-slate-300:hover{--tw-border-opacity: 1;border-color:rgb(203 213 225 / var(--tw-border-opacity, 1))}.hover\:bg-blue-500\/10:hover{background-color:#3b82f61a}.hover\:bg-green-500\/10:hover{background-color:#22c55e1a}.hover\:bg-purple-500\/10:hover{background-color:#a855f71a}.hover\:bg-red-500\/10:hover{background-color:#ef44441a}.hover\:bg-slate-100:hover{--tw-bg-opacity: 1;background-color:rgb(241 245 249 / var(--tw-bg-opacity, 1))}.hover\:bg-slate-200:hover{--tw-bg-opacity: 1;background-color:rgb(226 232 240 / var(--tw-bg-opacity, 1))}.hover\:bg-slate-300:hover{--tw-bg-opacity: 1;background-color:rgb(203 213 225 / var(--tw-bg-opacity, 1))}.hover\:bg-slate-50:hover{--tw-bg-opacity: 1;background-color:rgb(248 250 252 / var(--tw-bg-opacity, 1))}.hover\:bg-slate-500\/10:hover{background-color:#64748b1a}.hover\:bg-slate-700:hover{--tw-bg-opacity: 1;background-color:rgb(51 65 85 / var(--tw-bg-opacity, 1))}.hover\:text-slate-900:hover{--tw-text-opacity: 1;color:rgb(15 23 42 / var(--tw-text-opacity, 1))}.hover\:underline:hover{text-decoration-line:underline}.focus\:border-transparent:focus{border-color:transparent}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-2:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-cyan-500:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(6 182 212 / var(--tw-ring-opacity, 1))}.dark\:divide-slate-700:is(.dark *)>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1;border-color:rgb(51 65 85 / var(--tw-divide-opacity, 1))}.dark\:border-amber-800:is(.dark *){--tw-border-opacity: 1;border-color:rgb(146 64 14 / var(--tw-border-opacity, 1))}.dark\:border-blue-800:is(.dark *){--tw-border-opacity: 1;border-color:rgb(30 64 175 / var(--tw-border-opacity, 1))}.dark\:border-purple-800:is(.dark *){--tw-border-opacity: 1;border-color:rgb(107 33 168 / var(--tw-border-opacity, 1))}.dark\:border-slate-600:is(.dark *){--tw-border-opacity: 1;border-color:rgb(71 85 105 / var(--tw-border-opacity, 1))}.dark\:border-slate-700:is(.dark *){--tw-border-opacity: 1;border-color:rgb(51 65 85 / var(--tw-border-opacity, 1))}.dark\:border-l-cyan-400:is(.dark *){--tw-border-opacity: 1;border-left-color:rgb(34 211 238 / var(--tw-border-opacity, 1))}.dark\:bg-amber-700:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(180 83 9 / var(--tw-bg-opacity, 1))}.dark\:bg-amber-900\/20:is(.dark *){background-color:#78350f33}.dark\:bg-amber-900\/30:is(.dark *){background-color:#78350f4d}.dark\:bg-black\/30:is(.dark *){background-color:#0000004d}.dark\:bg-blue-900\/20:is(.dark *){background-color:#1e3a8a33}.dark\:bg-blue-900\/30:is(.dark *){background-color:#1e3a8a4d}.dark\:bg-cyan-500\/20:is(.dark *){background-color:#06b6d433}.dark\:bg-green-900:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(20 83 45 / var(--tw-bg-opacity, 1))}.dark\:bg-green-900\/30:is(.dark *){background-color:#14532d4d}.dark\:bg-purple-900\/20:is(.dark *){background-color:#581c8733}.dark\:bg-red-900:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(127 29 29 / var(--tw-bg-opacity, 1))}.dark\:bg-red-900\/20:is(.dark *){background-color:#7f1d1d33}.dark\:bg-slate-700:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(51 65 85 / var(--tw-bg-opacity, 1))}.dark\:bg-slate-800:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(30 41 59 / var(--tw-bg-opacity, 1))}.dark\:bg-slate-800\/20:is(.dark *){background-color:#1e293b33}.dark\:bg-slate-800\/40:is(.dark *){background-color:#1e293b66}.dark\:bg-slate-800\/50:is(.dark *){background-color:#1e293b80}.dark\:bg-slate-900:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(15 23 42 / var(--tw-bg-opacity, 1))}.dark\:text-amber-300:is(.dark *){--tw-text-opacity: 1;color:rgb(252 211 77 / var(--tw-text-opacity, 1))}.dark\:text-amber-400:is(.dark *){--tw-text-opacity: 1;color:rgb(251 191 36 / var(--tw-text-opacity, 1))}.dark\:text-blue-300:is(.dark *){--tw-text-opacity: 1;color:rgb(147 197 253 / var(--tw-text-opacity, 1))}.dark\:text-blue-400:is(.dark *){--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity, 1))}.dark\:text-cyan-400:is(.dark *){--tw-text-opacity: 1;color:rgb(34 211 238 / var(--tw-text-opacity, 1))}.dark\:text-green-200:is(.dark *){--tw-text-opacity: 1;color:rgb(187 247 208 / var(--tw-text-opacity, 1))}.dark\:text-green-300:is(.dark *){--tw-text-opacity: 1;color:rgb(134 239 172 / var(--tw-text-opacity, 1))}.dark\:text-green-400:is(.dark *){--tw-text-opacity: 1;color:rgb(74 222 128 / var(--tw-text-opacity, 1))}.dark\:text-purple-400:is(.dark *){--tw-text-opacity: 1;color:rgb(192 132 252 / var(--tw-text-opacity, 1))}.dark\:text-red-100:is(.dark *){--tw-text-opacity: 1;color:rgb(254 226 226 / var(--tw-text-opacity, 1))}.dark\:text-red-200:is(.dark *){--tw-text-opacity: 1;color:rgb(254 202 202 / var(--tw-text-opacity, 1))}.dark\:text-red-400:is(.dark *){--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}.dark\:text-slate-100:is(.dark *){--tw-text-opacity: 1;color:rgb(241 245 249 / var(--tw-text-opacity, 1))}.dark\:text-slate-200:is(.dark *){--tw-text-opacity: 1;color:rgb(226 232 240 / var(--tw-text-opacity, 1))}.dark\:text-slate-300:is(.dark *){--tw-text-opacity: 1;color:rgb(203 213 225 / var(--tw-text-opacity, 1))}.dark\:text-slate-400:is(.dark *){--tw-text-opacity: 1;color:rgb(148 163 184 / var(--tw-text-opacity, 1))}.dark\:text-slate-500:is(.dark *){--tw-text-opacity: 1;color:rgb(100 116 139 / var(--tw-text-opacity, 1))}.dark\:text-white:is(.dark *){--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.dark\:text-yellow-400:is(.dark *){--tw-text-opacity: 1;color:rgb(250 204 21 / var(--tw-text-opacity, 1))}.dark\:placeholder-slate-500:is(.dark *)::-moz-placeholder{--tw-placeholder-opacity: 1;color:rgb(100 116 139 / var(--tw-placeholder-opacity, 1))}.dark\:placeholder-slate-500:is(.dark *)::placeholder{--tw-placeholder-opacity: 1;color:rgb(100 116 139 / var(--tw-placeholder-opacity, 1))}.dark\:ring-cyan-500\/30:is(.dark *){--tw-ring-color: rgb(6 182 212 / .3)}.dark\:hover\:border-slate-600:hover:is(.dark *){--tw-border-opacity: 1;border-color:rgb(71 85 105 / var(--tw-border-opacity, 1))}.dark\:hover\:bg-slate-600:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(71 85 105 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-slate-700:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(51 65 85 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-slate-700\/30:hover:is(.dark *){background-color:#3341554d}.dark\:hover\:bg-slate-700\/50:hover:is(.dark *){background-color:#33415580}.dark\:hover\:bg-slate-800:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(30 41 59 / var(--tw-bg-opacity, 1))}.dark\:hover\:text-slate-200:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(226 232 240 / var(--tw-text-opacity, 1))}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
option.active-stream.svelte-1elxaub{font-weight:600;background-color:#22c55e1a}@keyframes svelte-1elxaub-pulse-green{0%,to{opacity:1}50%{opacity:.5}}select.svelte-1elxaub option:where(.svelte-1elxaub):first-child{animation:svelte-1elxaub-pulse-green 2s cubic-bezier(.4,0,.6,1) infinite}.nodes circle{transition:r .15s ease,stroke-width .15s ease}.nodes text{transition:fill .15s ease}.radar-pulse{animation:svelte-1uw5zj-pulse-ring 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes svelte-1uw5zj-pulse-ring{0%{filter:drop-shadow(0 0 0 rgba(245,158,11,.7))}50%{filter:drop-shadow(0 0 8px rgba(245,158,11,.4))}to{filter:drop-shadow(0 0 0 rgba(245,158,11,0))}}.langtag.svelte-167dipq{position:relative}.langtag.svelte-167dipq:after{content:attr(data-language);position:absolute;top:var(--langtag-top, 0);right:var(--langtag-right, 0);display:flex;align-items:center;justify-content:center;background:var(--langtag-background, inherit);color:var(--langtag-color, inherit);border-radius:var(--langtag-border-radius, 0);padding:var(--langtag-padding, 1em)}.markdown-viewer.svelte-1i59led{padding:1rem;line-height:1.6;color:var(--color-text-primary)}.markdown-viewer.svelte-1i59led h1,.markdown-viewer.svelte-1i59led h2,.markdown-viewer.svelte-1i59led h3,.markdown-viewer.svelte-1i59led h4,.markdown-viewer.svelte-1i59led h5,.markdown-viewer.svelte-1i59led h6{margin-top:1.5rem;margin-bottom:.75rem;font-weight:600;line-height:1.25;color:var(--color-text-primary)}.markdown-viewer.svelte-1i59led h1{font-size:2rem;border-bottom:2px solid var(--color-border);padding-bottom:.5rem;margin-top:0}.markdown-viewer.svelte-1i59led h2{font-size:1.5rem;border-bottom:1px solid var(--color-border);padding-bottom:.375rem}.markdown-viewer.svelte-1i59led h3{font-size:1.25rem}.markdown-viewer.svelte-1i59led h4{font-size:1.125rem}.markdown-viewer.svelte-1i59led h5,.markdown-viewer.svelte-1i59led h6{font-size:1rem}.markdown-viewer.svelte-1i59led p{margin-top:0;margin-bottom:1rem}.markdown-viewer.svelte-1i59led strong{font-weight:600;color:var(--color-text-primary)}.markdown-viewer.svelte-1i59led em{font-style:italic}.markdown-viewer.svelte-1i59led a{color:var(--color-primary);text-decoration:none;transition:color .15s ease}.markdown-viewer.svelte-1i59led a:hover{color:#818cf8;text-decoration:underline}.markdown-viewer.svelte-1i59led ul,.markdown-viewer.svelte-1i59led ol{margin-top:0;margin-bottom:1rem;padding-left:2rem}.markdown-viewer.svelte-1i59led li{margin-bottom:.25rem}.markdown-viewer.svelte-1i59led li>p{margin-bottom:.5rem}.markdown-viewer.svelte-1i59led ul ul,.markdown-viewer.svelte-1i59led ol ol,.markdown-viewer.svelte-1i59led ul ol,.markdown-viewer.svelte-1i59led ol ul{margin-top:.25rem;margin-bottom:.25rem}.markdown-viewer.svelte-1i59led code{padding:.2em .4em;margin:0;font-size:.875rem;font-family:SF Mono,Monaco,Inconsolata,Fira Code,monospace;background-color:#6366f11a;border-radius:.25rem;color:var(--color-text-primary)}.markdown-viewer.svelte-1i59led pre{padding:1rem;margin-top:0;margin-bottom:1rem;font-size:.875rem;line-height:1.5;font-family:SF Mono,Monaco,Inconsolata,Fira Code,monospace;background-color:var(--color-bg-secondary);border:1px solid var(--color-border);border-radius:.375rem;overflow-x:auto}.markdown-viewer.svelte-1i59led pre code{padding:0;margin:0;font-size:100%;background-color:transparent;border:0;white-space:pre;word-break:normal}.markdown-viewer.svelte-1i59led blockquote{margin:0 0 1rem;padding:.5rem 1rem;border-left:.25rem solid var(--color-primary);background-color:#6366f10d;color:var(--color-text-secondary)}.markdown-viewer.svelte-1i59led blockquote>:first-child{margin-top:0}.markdown-viewer.svelte-1i59led blockquote>:last-child{margin-bottom:0}.markdown-viewer.svelte-1i59led table{width:100%;margin-bottom:1rem;border-collapse:collapse;border-spacing:0;overflow:hidden;border-radius:.375rem;border:1px solid var(--color-border)}.markdown-viewer.svelte-1i59led table th,.markdown-viewer.svelte-1i59led table td{padding:.75rem;text-align:left;border-bottom:1px solid var(--color-border)}.markdown-viewer.svelte-1i59led table th{font-weight:600;background-color:var(--color-bg-secondary);color:var(--color-text-primary)}.markdown-viewer.svelte-1i59led table tr:last-child td{border-bottom:none}.markdown-viewer.svelte-1i59led table tr:hover{background-color:#6366f10d}.markdown-viewer.svelte-1i59led hr{height:0;margin:1.5rem 0;border:0;border-top:1px solid var(--color-border)}.markdown-viewer.svelte-1i59led img{max-width:100%;height:auto;border-radius:.375rem;margin:1rem 0}.markdown-viewer.svelte-1i59led .mermaid-diagram{margin:1rem 0;padding:1rem;background-color:var(--color-bg-secondary);border:1px solid var(--color-border);border-radius:.375rem;display:flex;justify-content:center;overflow-x:auto}.markdown-viewer.svelte-1i59led .mermaid-diagram svg{max-width:100%;height:auto}.markdown-viewer.svelte-1i59led input[type=checkbox]{margin-right:.5rem}.markdown-viewer.svelte-1i59led .task-list-item{list-style:none}.markdown-viewer.svelte-1i59led .error{padding:1rem;background-color:#ef44441a;border:1px solid #ef4444;border-radius:.375rem;color:#ef4444}.markdown-viewer[data-theme=dark].svelte-1i59led code{background-color:#8b5cf626}.markdown-viewer[data-theme=dark].svelte-1i59led blockquote,.markdown-viewer[data-theme=dark].svelte-1i59led table tr:hover{background-color:#8b5cf61a}.file-viewer.svelte-1y85kzg{display:flex;flex-direction:column;height:100%;background:var(--color-bg-primary);border:1px solid var(--color-border);border-radius:.5rem;overflow:hidden}.file-viewer.empty.svelte-1y85kzg{display:flex;align-items:center;justify-content:center}.empty-message.svelte-1y85kzg{text-align:center;color:var(--color-text-tertiary);font-size:1rem}.viewer-header.svelte-1y85kzg{display:flex;justify-content:space-between;align-items:center;padding:1rem 1.5rem;border-bottom:1px solid var(--color-border);background:var(--color-bg-secondary)}.file-info.svelte-1y85kzg{flex:1;min-width:0}.view-toggle.svelte-1y85kzg{display:flex;gap:0;background:var(--color-bg-primary);border:1px solid var(--color-border);border-radius:.375rem;overflow:hidden}.toggle-btn.svelte-1y85kzg{padding:.375rem .75rem;font-size:.8125rem;font-weight:500;color:var(--color-text-secondary);background:transparent;border:none;cursor:pointer;transition:all .15s ease}.toggle-btn.svelte-1y85kzg:hover:not(.disabled){background:var(--color-bg-secondary);color:var(--color-text-primary)}.toggle-btn.active.svelte-1y85kzg{background:var(--color-primary);color:#fff}.toggle-btn.disabled.svelte-1y85kzg{opacity:.4;cursor:not-allowed}.toggle-btn.svelte-1y85kzg:not(:last-child){border-right:1px solid var(--color-border)}.file-path.svelte-1y85kzg{margin:0 0 .25rem;font-size:1rem;font-weight:600;font-family:SF Mono,Monaco,Inconsolata,Fira Code,monospace;color:var(--color-text-primary);word-break:break-all}.file-meta.svelte-1y85kzg{margin:0;font-size:.8125rem;color:var(--color-text-secondary)}.viewer-content.svelte-1y85kzg{flex:1;overflow:auto;padding:1rem}.code-container.svelte-1y85kzg{font-size:.875rem;line-height:1.5}.code-container.svelte-1y85kzg pre{margin:0;padding:0!important;border-radius:.375rem;overflow-x:auto}.code-container.svelte-1y85kzg pre code.hljs{display:block;padding:1rem;border-radius:.375rem}.code-container[data-theme=light].svelte-1y85kzg pre code.hljs{background:#fafafa!important;color:#383a42!important}.code-container[data-theme=light].svelte-1y85kzg .hljs-comment,.code-container[data-theme=light].svelte-1y85kzg .hljs-quote{color:#a0a1a7!important}.code-container[data-theme=light].svelte-1y85kzg .hljs-keyword,.code-container[data-theme=light].svelte-1y85kzg .hljs-selector-tag,.code-container[data-theme=light].svelte-1y85kzg .hljs-addition{color:#a626a4!important}.code-container[data-theme=light].svelte-1y85kzg .hljs-number,.code-container[data-theme=light].svelte-1y85kzg .hljs-string,.code-container[data-theme=light].svelte-1y85kzg .hljs-meta .hljs-string,.code-container[data-theme=light].svelte-1y85kzg .hljs-literal,.code-container[data-theme=light].svelte-1y85kzg .hljs-doctag,.code-container[data-theme=light].svelte-1y85kzg .hljs-regexp{color:#50a14f!important}.code-container[data-theme=light].svelte-1y85kzg .hljs-title,.code-container[data-theme=light].svelte-1y85kzg .hljs-section,.code-container[data-theme=light].svelte-1y85kzg .hljs-name,.code-container[data-theme=light].svelte-1y85kzg .hljs-selector-id,.code-container[data-theme=light].svelte-1y85kzg .hljs-selector-class{color:#c18401!important}.code-container[data-theme=light].svelte-1y85kzg .hljs-attribute,.code-container[data-theme=light].svelte-1y85kzg .hljs-attr,.code-container[data-theme=light].svelte-1y85kzg .hljs-variable,.code-container[data-theme=light].svelte-1y85kzg .hljs-template-variable,.code-container[data-theme=light].svelte-1y85kzg .hljs-class .hljs-title,.code-container[data-theme=light].svelte-1y85kzg .hljs-type{color:#986801!important}.code-container[data-theme=light].svelte-1y85kzg .hljs-symbol,.code-container[data-theme=light].svelte-1y85kzg .hljs-bullet,.code-container[data-theme=light].svelte-1y85kzg .hljs-subst,.code-container[data-theme=light].svelte-1y85kzg .hljs-meta,.code-container[data-theme=light].svelte-1y85kzg .hljs-meta .hljs-keyword,.code-container[data-theme=light].svelte-1y85kzg .hljs-selector-attr,.code-container[data-theme=light].svelte-1y85kzg .hljs-selector-pseudo,.code-container[data-theme=light].svelte-1y85kzg .hljs-link{color:#4078f2!important}.code-container[data-theme=light].svelte-1y85kzg .hljs-built_in,.code-container[data-theme=light].svelte-1y85kzg .hljs-deletion{color:#e45649!important}.code-container[data-theme=dark].svelte-1y85kzg pre code.hljs{background:#282c34!important;color:#abb2bf!important}.code-container[data-theme=dark].svelte-1y85kzg .hljs-comment,.code-container[data-theme=dark].svelte-1y85kzg .hljs-quote{color:#5c6370!important}.code-container[data-theme=dark].svelte-1y85kzg .hljs-keyword,.code-container[data-theme=dark].svelte-1y85kzg .hljs-selector-tag,.code-container[data-theme=dark].svelte-1y85kzg .hljs-addition{color:#c678dd!important}.code-container[data-theme=dark].svelte-1y85kzg .hljs-number,.code-container[data-theme=dark].svelte-1y85kzg .hljs-string,.code-container[data-theme=dark].svelte-1y85kzg .hljs-meta .hljs-string,.code-container[data-theme=dark].svelte-1y85kzg .hljs-literal,.code-container[data-theme=dark].svelte-1y85kzg .hljs-doctag,.code-container[data-theme=dark].svelte-1y85kzg .hljs-regexp{color:#98c379!important}.code-container[data-theme=dark].svelte-1y85kzg .hljs-title,.code-container[data-theme=dark].svelte-1y85kzg .hljs-section,.code-container[data-theme=dark].svelte-1y85kzg .hljs-name,.code-container[data-theme=dark].svelte-1y85kzg .hljs-selector-id,.code-container[data-theme=dark].svelte-1y85kzg .hljs-selector-class{color:#e5c07b!important}.code-container[data-theme=dark].svelte-1y85kzg .hljs-attribute,.code-container[data-theme=dark].svelte-1y85kzg .hljs-attr,.code-container[data-theme=dark].svelte-1y85kzg .hljs-variable,.code-container[data-theme=dark].svelte-1y85kzg .hljs-template-variable,.code-container[data-theme=dark].svelte-1y85kzg .hljs-class .hljs-title,.code-container[data-theme=dark].svelte-1y85kzg .hljs-type{color:#d19a66!important}.code-container[data-theme=dark].svelte-1y85kzg .hljs-symbol,.code-container[data-theme=dark].svelte-1y85kzg .hljs-bullet,.code-container[data-theme=dark].svelte-1y85kzg .hljs-subst,.code-container[data-theme=dark].svelte-1y85kzg .hljs-meta,.code-container[data-theme=dark].svelte-1y85kzg .hljs-meta .hljs-keyword,.code-container[data-theme=dark].svelte-1y85kzg .hljs-selector-attr,.code-container[data-theme=dark].svelte-1y85kzg .hljs-selector-pseudo,.code-container[data-theme=dark].svelte-1y85kzg .hljs-link{color:#61afef!important}.code-container[data-theme=dark].svelte-1y85kzg .hljs-built_in,.code-container[data-theme=dark].svelte-1y85kzg .hljs-deletion{color:#e06c75!important}.code-container.svelte-1y85kzg .plaintext:where(.svelte-1y85kzg){margin:0;padding:1rem;border-radius:.375rem;overflow-x:auto;background:var(--color-bg-secondary);color:var(--color-text-primary);font-family:SF Mono,Monaco,Inconsolata,Fira Code,monospace;font-size:.875rem;line-height:1.5}.image-container.svelte-1y85kzg{display:flex;align-items:center;justify-content:center;padding:2rem;background:var(--color-bg-secondary);min-height:300px}.image-preview.svelte-1y85kzg{max-width:100%;max-height:80vh;-o-object-fit:contain;object-fit:contain;border-radius:.5rem;box-shadow:0 4px 6px #0000001a}.no-content.svelte-1y85kzg{display:flex;align-items:center;justify-content:center;height:100%;color:var(--color-text-tertiary);font-style:italic}.loading-state.svelte-1y85kzg{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;gap:1rem;color:var(--color-text-secondary)}.spinner.svelte-1y85kzg{width:2rem;height:2rem;border:3px solid var(--color-border);border-top-color:var(--color-primary);border-radius:50%;animation:svelte-1y85kzg-spin .8s linear infinite}@keyframes svelte-1y85kzg-spin{to{transform:rotate(360deg)}}.diff-container.svelte-1y85kzg{font-size:.875rem;line-height:1.5;height:100%;overflow:auto}.commit-selector.svelte-1y85kzg{display:flex;align-items:center;gap:.75rem;padding:.75rem 1rem;background:var(--color-bg-secondary);border-bottom:1px solid var(--color-border);position:sticky;top:0;z-index:10}.commit-selector.svelte-1y85kzg label:where(.svelte-1y85kzg){font-size:.8125rem;font-weight:500;color:var(--color-text-secondary);white-space:nowrap}.commit-selector.svelte-1y85kzg select:where(.svelte-1y85kzg){flex:1;padding:.375rem .75rem;font-size:.8125rem;font-family:SF Mono,Monaco,Inconsolata,Fira Code,monospace;color:var(--color-text-primary);background:var(--color-bg-primary);border:1px solid var(--color-border);border-radius:.375rem;cursor:pointer;transition:all .15s ease}.commit-selector.svelte-1y85kzg select:where(.svelte-1y85kzg):hover{border-color:var(--color-primary)}.commit-selector.svelte-1y85kzg select:where(.svelte-1y85kzg):focus{outline:none;border-color:var(--color-primary);box-shadow:0 0 0 3px #6366f11a}.diff-content.svelte-1y85kzg{margin:0;padding:1rem;background:var(--color-bg-secondary);color:var(--color-text-primary);font-family:SF Mono,Monaco,Inconsolata,Fira Code,monospace;font-size:.875rem;line-height:1.6;overflow-x:auto;white-space:pre;-moz-tab-size:4;-o-tab-size:4;tab-size:4}.diff-content.svelte-1y85kzg .diff-header{color:#a78bfa;font-weight:600}.diff-content.svelte-1y85kzg .diff-file{color:#8b5cf6;font-weight:600}.diff-content.svelte-1y85kzg .diff-hunk{color:#0891b2;background-color:#0891b21a;font-weight:600}.diff-content.svelte-1y85kzg .diff-add{background-color:#22c55e26;color:#22c55e}.diff-content.svelte-1y85kzg .diff-remove{background-color:#ef444426;color:#ef4444}.diff-content.svelte-1y85kzg .diff-context{color:var(--color-text-secondary)}.diff-content.svelte-1y85kzg .diff-index{color:var(--color-text-tertiary);font-size:.8125rem}.dark .diff-content.svelte-1y85kzg .diff-add{background-color:#22c55e33;color:#4ade80}.dark .diff-content.svelte-1y85kzg .diff-remove{background-color:#ef444433;color:#f87171}.dark .diff-content.svelte-1y85kzg .diff-hunk{background-color:#0891b226}.tab.svelte-1uha8ag{padding:.5rem 1.5rem;font-size:.875rem;font-weight:600;background-color:#475569;color:#94a3b8;border-top-left-radius:.375rem;border-top-right-radius:.375rem;transition:all .2s;cursor:pointer;border:none;outline:none}.dark .tab.svelte-1uha8ag{background-color:#475569}.tab.svelte-1uha8ag:hover:not(.active){background-color:#64748b;color:#cbd5e1}.tab.active.svelte-1uha8ag{background-color:#0891b2;color:#fff}.divider.svelte-1uha8ag{width:6px;background:#cbd5e1;cursor:col-resize;transition:background .2s;flex-shrink:0}.dark .divider.svelte-1uha8ag{background:#334155}.divider.svelte-1uha8ag:hover,.divider.dragging.svelte-1uha8ag{background:#0891b2}body.dragging{-webkit-user-select:none;-moz-user-select:none;user-select:none;cursor:col-resize!important}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{_ as b,D as m,H as B,e as C,l as w,b as S,a as D,p as T,q as E,g as F,s as P,E as z,F as A,y as W}from"./
|
|
1
|
+
import{_ as b,D as m,H as B,e as C,l as w,b as S,a as D,p as T,q as E,g as F,s as P,E as z,F as A,y as W}from"./CRcR2DqT.js";import{p as _}from"./DUliQN2b.js";import{p as N}from"./BViJ8lZt.js";var L=A.packet,u,v=(u=class{constructor(){this.packet=[],this.setAccTitle=S,this.getAccTitle=D,this.setDiagramTitle=T,this.getDiagramTitle=E,this.getAccDescription=F,this.setAccDescription=P}getConfig(){const t=m({...L,...z().packet});return t.showBits&&(t.paddingY+=10),t}getPacket(){return this.packet}pushWord(t){t.length>0&&this.packet.push(t)}clear(){W(),this.packet=[]}},b(u,"PacketDB"),u),M=1e4,Y=b((e,t)=>{_(e,t);let s=-1,r=[],n=1;const{bitsPerRow:l}=t.getConfig();for(let{start:a,end:i,bits:d,label:c}of e.blocks){if(a!==void 0&&i!==void 0&&i<a)throw new Error(`Packet block ${a} - ${i} is invalid. End must be greater than start.`);if(a??(a=s+1),a!==s+1)throw new Error(`Packet block ${a} - ${i??a} is not contiguous. It should start from ${s+1}.`);if(d===0)throw new Error(`Packet block ${a} is invalid. Cannot have a zero bit field.`);for(i??(i=a+(d??1)-1),d??(d=i-a+1),s=i,w.debug(`Packet block ${a} - ${s} with label ${c}`);r.length<=l+1&&t.getPacket().length<M;){const[p,o]=H({start:a,end:i,bits:d,label:c},n,l);if(r.push(p),p.end+1===n*l&&(t.pushWord(r),r=[],n++),!o)break;({start:a,end:i,bits:d,label:c}=o)}}t.pushWord(r)},"populate"),H=b((e,t,s)=>{if(e.start===void 0)throw new Error("start should have been set during first phase");if(e.end===void 0)throw new Error("end should have been set during first phase");if(e.start>e.end)throw new Error(`Block start ${e.start} is greater than block end ${e.end}.`);if(e.end+1<=t*s)return[e,void 0];const r=t*s-1,n=t*s;return[{start:e.start,end:r,label:e.label,bits:r-e.start},{start:n,end:e.end,label:e.label,bits:e.end-n}]},"getNextFittingBlock"),x={parser:{yy:void 0},parse:b(async e=>{var r;const t=await N("packet",e),s=(r=x.parser)==null?void 0:r.yy;if(!(s instanceof v))throw new Error("parser.parser?.yy was not a PacketDB. This is due to a bug within Mermaid, please report this issue at https://github.com/mermaid-js/mermaid/issues.");w.debug(t),Y(t,s)},"parse")},I=b((e,t,s,r)=>{const n=r.db,l=n.getConfig(),{rowHeight:a,paddingY:i,bitWidth:d,bitsPerRow:c}=l,p=n.getPacket(),o=n.getDiagramTitle(),h=a+i,g=h*(p.length+1)-(o?0:a),k=d*c+2,f=B(t);f.attr("viewbox",`0 0 ${k} ${g}`),C(f,g,k,l.useMaxWidth);for(const[y,$]of p.entries())O(f,$,y,l);f.append("text").text(o).attr("x",k/2).attr("y",g-h/2).attr("dominant-baseline","middle").attr("text-anchor","middle").attr("class","packetTitle")},"draw"),O=b((e,t,s,{rowHeight:r,paddingX:n,paddingY:l,bitWidth:a,bitsPerRow:i,showBits:d})=>{const c=e.append("g"),p=s*(r+l)+l;for(const o of t){const h=o.start%i*a+1,g=(o.end-o.start+1)*a-n;if(c.append("rect").attr("x",h).attr("y",p).attr("width",g).attr("height",r).attr("class","packetBlock"),c.append("text").attr("x",h+g/2).attr("y",p+r/2).attr("class","packetLabel").attr("dominant-baseline","middle").attr("text-anchor","middle").text(o.label),!d)continue;const k=o.end===o.start,f=p-2;c.append("text").attr("x",h+(k?g/2:0)).attr("y",f).attr("class","packetByte start").attr("dominant-baseline","auto").attr("text-anchor",k?"middle":"start").text(o.start),k||c.append("text").attr("x",h+g).attr("y",f).attr("class","packetByte end").attr("dominant-baseline","auto").attr("text-anchor","end").text(o.end)}},"drawWord"),j={draw:I},q={byteFontSize:"10px",startByteColor:"black",endByteColor:"black",labelColor:"black",labelFontSize:"12px",titleColor:"black",titleFontSize:"14px",blockStrokeColor:"black",blockStrokeWidth:"1",blockFillColor:"#efefef"},G=b(({packet:e}={})=>{const t=m(q,e);return`
|
|
2
2
|
.packetByte {
|
|
3
3
|
font-size: ${t.byteFontSize};
|
|
4
4
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{s as r,c as s,a as e,C as t}from"./
|
|
1
|
+
import{s as r,c as s,a as e,C as t}from"./DPfltzjH.js";import{_ as l}from"./CRcR2DqT.js";var d={parser:e,get db(){return new t},renderer:s,styles:r,init:l(a=>{a.class||(a.class={}),a.class.arrowMarkerAbsolute=a.arrowMarkerAbsolute},"init")};export{d as diagram};
|