claude-mpm 5.4.48__py3-none-any.whl → 5.6.34__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of claude-mpm might be problematic. Click here for more details.
- claude_mpm/VERSION +1 -1
- claude_mpm/agents/CLAUDE_MPM_OUTPUT_STYLE.md +66 -241
- claude_mpm/agents/CLAUDE_MPM_RESEARCH_OUTPUT_STYLE.md +413 -0
- claude_mpm/agents/CLAUDE_MPM_TEACHER_OUTPUT_STYLE.md +109 -1925
- claude_mpm/agents/PM_INSTRUCTIONS.md +119 -689
- claude_mpm/agents/WORKFLOW.md +2 -0
- claude_mpm/agents/templates/circuit-breakers.md +26 -17
- claude_mpm/cli/__init__.py +5 -1
- claude_mpm/cli/commands/agents.py +2 -4
- claude_mpm/cli/commands/agents_reconcile.py +197 -0
- claude_mpm/cli/commands/autotodos.py +566 -0
- claude_mpm/cli/commands/commander.py +216 -0
- claude_mpm/cli/commands/configure.py +620 -21
- claude_mpm/cli/commands/configure_agent_display.py +3 -1
- claude_mpm/cli/commands/hook_errors.py +60 -60
- claude_mpm/cli/commands/monitor.py +2 -2
- claude_mpm/cli/commands/mpm_init/core.py +15 -8
- claude_mpm/cli/commands/profile.py +9 -10
- claude_mpm/cli/commands/run.py +35 -3
- claude_mpm/cli/commands/skill_source.py +51 -2
- claude_mpm/cli/commands/skills.py +171 -17
- claude_mpm/cli/executor.py +120 -16
- claude_mpm/cli/interactive/__init__.py +10 -0
- claude_mpm/cli/interactive/agent_wizard.py +30 -50
- claude_mpm/cli/interactive/questionary_styles.py +65 -0
- claude_mpm/cli/interactive/skill_selector.py +481 -0
- claude_mpm/cli/parsers/base_parser.py +76 -1
- claude_mpm/cli/parsers/commander_parser.py +116 -0
- claude_mpm/cli/parsers/profile_parser.py +0 -1
- claude_mpm/cli/parsers/run_parser.py +10 -0
- claude_mpm/cli/parsers/skill_source_parser.py +4 -0
- claude_mpm/cli/parsers/skills_parser.py +5 -0
- claude_mpm/cli/startup.py +544 -511
- claude_mpm/cli/startup_display.py +74 -6
- claude_mpm/cli/startup_logging.py +2 -2
- claude_mpm/cli/utils.py +7 -3
- claude_mpm/commander/__init__.py +78 -0
- claude_mpm/commander/adapters/__init__.py +60 -0
- claude_mpm/commander/adapters/auggie.py +260 -0
- claude_mpm/commander/adapters/base.py +288 -0
- claude_mpm/commander/adapters/claude_code.py +392 -0
- claude_mpm/commander/adapters/codex.py +237 -0
- claude_mpm/commander/adapters/communication.py +366 -0
- claude_mpm/commander/adapters/example_usage.py +310 -0
- claude_mpm/commander/adapters/mpm.py +389 -0
- claude_mpm/commander/adapters/registry.py +204 -0
- claude_mpm/commander/api/__init__.py +16 -0
- claude_mpm/commander/api/app.py +121 -0
- claude_mpm/commander/api/errors.py +133 -0
- claude_mpm/commander/api/routes/__init__.py +8 -0
- claude_mpm/commander/api/routes/events.py +184 -0
- claude_mpm/commander/api/routes/inbox.py +171 -0
- claude_mpm/commander/api/routes/messages.py +148 -0
- claude_mpm/commander/api/routes/projects.py +271 -0
- claude_mpm/commander/api/routes/sessions.py +226 -0
- claude_mpm/commander/api/routes/work.py +296 -0
- claude_mpm/commander/api/schemas.py +186 -0
- claude_mpm/commander/chat/__init__.py +7 -0
- claude_mpm/commander/chat/cli.py +146 -0
- claude_mpm/commander/chat/commands.py +96 -0
- claude_mpm/commander/chat/repl.py +310 -0
- claude_mpm/commander/config.py +51 -0
- claude_mpm/commander/config_loader.py +115 -0
- claude_mpm/commander/core/__init__.py +10 -0
- claude_mpm/commander/core/block_manager.py +325 -0
- claude_mpm/commander/core/response_manager.py +323 -0
- claude_mpm/commander/daemon.py +603 -0
- claude_mpm/commander/env_loader.py +59 -0
- claude_mpm/commander/events/__init__.py +26 -0
- claude_mpm/commander/events/manager.py +332 -0
- claude_mpm/commander/frameworks/__init__.py +12 -0
- claude_mpm/commander/frameworks/base.py +146 -0
- claude_mpm/commander/frameworks/claude_code.py +58 -0
- claude_mpm/commander/frameworks/mpm.py +62 -0
- claude_mpm/commander/inbox/__init__.py +16 -0
- claude_mpm/commander/inbox/dedup.py +128 -0
- claude_mpm/commander/inbox/inbox.py +224 -0
- claude_mpm/commander/inbox/models.py +70 -0
- claude_mpm/commander/instance_manager.py +450 -0
- claude_mpm/commander/llm/__init__.py +6 -0
- claude_mpm/commander/llm/openrouter_client.py +167 -0
- claude_mpm/commander/llm/summarizer.py +70 -0
- claude_mpm/commander/memory/__init__.py +45 -0
- claude_mpm/commander/memory/compression.py +347 -0
- claude_mpm/commander/memory/embeddings.py +230 -0
- claude_mpm/commander/memory/entities.py +310 -0
- claude_mpm/commander/memory/example_usage.py +290 -0
- claude_mpm/commander/memory/integration.py +325 -0
- claude_mpm/commander/memory/search.py +381 -0
- claude_mpm/commander/memory/store.py +657 -0
- claude_mpm/commander/models/__init__.py +18 -0
- claude_mpm/commander/models/events.py +121 -0
- claude_mpm/commander/models/project.py +162 -0
- claude_mpm/commander/models/work.py +214 -0
- claude_mpm/commander/parsing/__init__.py +20 -0
- claude_mpm/commander/parsing/extractor.py +132 -0
- claude_mpm/commander/parsing/output_parser.py +270 -0
- claude_mpm/commander/parsing/patterns.py +100 -0
- claude_mpm/commander/persistence/__init__.py +11 -0
- claude_mpm/commander/persistence/event_store.py +274 -0
- claude_mpm/commander/persistence/state_store.py +309 -0
- claude_mpm/commander/persistence/work_store.py +164 -0
- claude_mpm/commander/polling/__init__.py +13 -0
- claude_mpm/commander/polling/event_detector.py +104 -0
- claude_mpm/commander/polling/output_buffer.py +49 -0
- claude_mpm/commander/polling/output_poller.py +153 -0
- claude_mpm/commander/project_session.py +268 -0
- claude_mpm/commander/proxy/__init__.py +12 -0
- claude_mpm/commander/proxy/formatter.py +89 -0
- claude_mpm/commander/proxy/output_handler.py +191 -0
- claude_mpm/commander/proxy/relay.py +155 -0
- claude_mpm/commander/registry.py +410 -0
- claude_mpm/commander/runtime/__init__.py +10 -0
- claude_mpm/commander/runtime/executor.py +191 -0
- claude_mpm/commander/runtime/monitor.py +346 -0
- claude_mpm/commander/session/__init__.py +6 -0
- claude_mpm/commander/session/context.py +81 -0
- claude_mpm/commander/session/manager.py +59 -0
- claude_mpm/commander/tmux_orchestrator.py +361 -0
- claude_mpm/commander/web/__init__.py +1 -0
- claude_mpm/commander/work/__init__.py +30 -0
- claude_mpm/commander/work/executor.py +207 -0
- claude_mpm/commander/work/queue.py +405 -0
- claude_mpm/commander/workflow/__init__.py +27 -0
- claude_mpm/commander/workflow/event_handler.py +241 -0
- claude_mpm/commander/workflow/notifier.py +146 -0
- claude_mpm/commands/mpm-config.md +8 -0
- claude_mpm/commands/mpm-doctor.md +8 -0
- claude_mpm/commands/mpm-help.md +8 -0
- claude_mpm/commands/mpm-init.md +8 -0
- claude_mpm/commands/mpm-monitor.md +8 -0
- claude_mpm/commands/mpm-organize.md +8 -0
- claude_mpm/commands/mpm-postmortem.md +8 -0
- claude_mpm/commands/mpm-session-resume.md +9 -1
- claude_mpm/commands/mpm-status.md +8 -0
- claude_mpm/commands/mpm-ticket-view.md +8 -0
- claude_mpm/commands/mpm-version.md +8 -0
- claude_mpm/commands/mpm.md +8 -0
- claude_mpm/config/agent_presets.py +8 -7
- claude_mpm/config/skill_sources.py +16 -0
- claude_mpm/constants.py +1 -0
- claude_mpm/core/claude_runner.py +154 -2
- claude_mpm/core/config.py +35 -22
- claude_mpm/core/config_constants.py +74 -9
- claude_mpm/core/constants.py +56 -12
- claude_mpm/core/hook_manager.py +51 -3
- claude_mpm/core/interactive_session.py +12 -11
- claude_mpm/core/logger.py +26 -9
- claude_mpm/core/logging_utils.py +39 -13
- claude_mpm/core/network_config.py +148 -0
- claude_mpm/core/oneshot_session.py +7 -6
- claude_mpm/core/optimized_startup.py +3 -1
- claude_mpm/core/output_style_manager.py +66 -18
- claude_mpm/core/shared/config_loader.py +3 -1
- claude_mpm/core/socketio_pool.py +47 -15
- claude_mpm/core/unified_config.py +54 -8
- claude_mpm/core/unified_paths.py +95 -90
- claude_mpm/dashboard/static/svelte-build/_app/immutable/assets/0.C33zOoyM.css +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/assets/2.CW1J-YuA.css +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/1WZnGYqX.js +24 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/67pF3qNn.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/6RxdMKe4.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/8cZrfX0h.js +60 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/9a6T2nm-.js +7 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/B443AUzu.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/B8AwtY2H.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BF15LAsF.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BQaXIfA_.js +331 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BRcwIQNr.js +4 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{uj46x2Wr.js → BSNlmTZj.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BV6nKitt.js +43 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BViJ8lZt.js +128 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BcQ-Q0FE.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Bpyvgze_.js +30 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BzTRqg-z.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/C0Fr8dve.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/C3rbW_a-.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/C8WYN38h.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/C9I8FlXH.js +61 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CIQcWgO2.js +36 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CIctN7YN.js +7 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CKrS_JZW.js +145 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CR6P9C4A.js +89 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CRRR9MD_.js +2 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CRcR2DqT.js +334 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CSXtMOf0.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CT-sbxSk.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CWm6DJsp.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CmKTTxBW.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CpqQ1Kzn.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Cu_Erd72.js +261 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/D2nGpDRe.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/D9iCMida.js +267 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/D9ykgMoY.js +10 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DL2Ldur1.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DPfltzjH.js +165 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{N4qtv3Hx.js → DR8nis88.js} +2 -2
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DUliQN2b.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DVp1hx9R.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DXlhR01x.js +122 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/D_lyTybS.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DngoTTgh.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DqkmHtDC.js +220 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DsDh8EYs.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DypDmXgd.js +139 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Gi6I4Gst.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/IPYC-LnN.js +162 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/JTLiF7dt.js +24 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/JpevfAFt.js +68 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{DjhvlsAc.js → NqQ1dWOy.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/R8CEIRAd.js +2 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Zxy7qc-l.js +64 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/q9Hm6zAU.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/qtd3IeO4.js +15 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/ulBFON_C.js +65 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/wQVh1CoA.js +10 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/entry/app.Dr7t0z2J.js +2 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/entry/start.BGhZHUS3.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/{0.CAGBuiOw.js → 0.RgBboRvH.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/1.DG-KkbDf.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/2.D_jnf-x6.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/version.json +1 -1
- claude_mpm/dashboard/static/svelte-build/index.html +11 -11
- claude_mpm/dashboard-svelte/node_modules/katex/src/fonts/generate_fonts.py +58 -0
- claude_mpm/dashboard-svelte/node_modules/katex/src/metrics/extract_tfms.py +114 -0
- claude_mpm/dashboard-svelte/node_modules/katex/src/metrics/extract_ttfs.py +122 -0
- claude_mpm/dashboard-svelte/node_modules/katex/src/metrics/format_json.py +28 -0
- claude_mpm/dashboard-svelte/node_modules/katex/src/metrics/parse_tfm.py +211 -0
- claude_mpm/experimental/cli_enhancements.py +2 -1
- claude_mpm/hooks/claude_hooks/INTEGRATION_EXAMPLE.md +243 -0
- claude_mpm/hooks/claude_hooks/README_AUTO_PAUSE.md +403 -0
- claude_mpm/hooks/claude_hooks/__pycache__/auto_pause_handler.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/event_handlers.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/hook_handler.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/memory_integration.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/response_tracking.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/auto_pause_handler.py +485 -0
- claude_mpm/hooks/claude_hooks/event_handlers.py +527 -136
- claude_mpm/hooks/claude_hooks/hook_handler.py +170 -104
- claude_mpm/hooks/claude_hooks/hook_wrapper.sh +6 -11
- claude_mpm/hooks/claude_hooks/installer.py +206 -36
- claude_mpm/hooks/claude_hooks/memory_integration.py +52 -32
- claude_mpm/hooks/claude_hooks/response_tracking.py +43 -60
- claude_mpm/hooks/claude_hooks/services/__init__.py +21 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/__init__.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/connection_manager_http.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/container.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/protocols.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/state_manager.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/subagent_processor.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/connection_manager.py +41 -26
- claude_mpm/hooks/claude_hooks/services/connection_manager_http.py +38 -105
- claude_mpm/hooks/claude_hooks/services/container.py +310 -0
- claude_mpm/hooks/claude_hooks/services/protocols.py +328 -0
- claude_mpm/hooks/claude_hooks/services/state_manager.py +25 -38
- claude_mpm/hooks/claude_hooks/services/subagent_processor.py +75 -77
- claude_mpm/hooks/session_resume_hook.py +89 -1
- claude_mpm/hooks/templates/pre_tool_use_simple.py +6 -6
- claude_mpm/hooks/templates/pre_tool_use_template.py +16 -8
- claude_mpm/init.py +215 -2
- claude_mpm/scripts/claude-hook-handler.sh +46 -19
- claude_mpm/scripts/start_activity_logging.py +0 -0
- claude_mpm/services/agents/agent_recommendation_service.py +8 -8
- claude_mpm/services/agents/agent_selection_service.py +2 -2
- claude_mpm/services/agents/cache_git_manager.py +1 -1
- claude_mpm/services/agents/deployment/agent_discovery_service.py +3 -1
- claude_mpm/services/agents/deployment/agent_format_converter.py +8 -6
- claude_mpm/services/agents/deployment/agent_template_builder.py +14 -4
- claude_mpm/services/agents/deployment/deployment_reconciler.py +577 -0
- claude_mpm/services/agents/deployment/multi_source_deployment_service.py +4 -4
- claude_mpm/services/agents/deployment/remote_agent_discovery_service.py +4 -1
- claude_mpm/services/agents/deployment/startup_reconciliation.py +138 -0
- claude_mpm/services/agents/git_source_manager.py +6 -2
- claude_mpm/services/agents/loading/framework_agent_loader.py +75 -2
- claude_mpm/services/agents/single_tier_deployment_service.py +4 -4
- claude_mpm/services/agents/sources/git_source_sync_service.py +10 -5
- claude_mpm/services/agents/startup_sync.py +5 -2
- claude_mpm/services/cli/__init__.py +3 -0
- claude_mpm/services/cli/incremental_pause_manager.py +561 -0
- claude_mpm/services/cli/session_resume_helper.py +10 -2
- claude_mpm/services/command_deployment_service.py +44 -26
- claude_mpm/services/delegation_detector.py +175 -0
- claude_mpm/services/diagnostics/checks/agent_sources_check.py +30 -0
- claude_mpm/services/diagnostics/checks/configuration_check.py +24 -0
- claude_mpm/services/diagnostics/checks/installation_check.py +22 -0
- claude_mpm/services/diagnostics/checks/mcp_services_check.py +23 -0
- claude_mpm/services/diagnostics/doctor_reporter.py +31 -1
- claude_mpm/services/diagnostics/models.py +14 -1
- claude_mpm/services/event_log.py +325 -0
- claude_mpm/services/hook_installer_service.py +77 -8
- claude_mpm/services/infrastructure/__init__.py +4 -0
- claude_mpm/services/infrastructure/context_usage_tracker.py +291 -0
- claude_mpm/services/infrastructure/resume_log_generator.py +24 -5
- claude_mpm/services/monitor/daemon_manager.py +15 -4
- claude_mpm/services/monitor/management/lifecycle.py +8 -3
- claude_mpm/services/monitor/server.py +106 -16
- claude_mpm/services/pm_skills_deployer.py +267 -94
- claude_mpm/services/profile_manager.py +10 -4
- claude_mpm/services/skills/git_skill_source_manager.py +192 -29
- claude_mpm/services/skills/selective_skill_deployer.py +211 -46
- claude_mpm/services/skills/skill_discovery_service.py +74 -4
- claude_mpm/services/skills_deployer.py +188 -67
- claude_mpm/services/socketio/handlers/hook.py +14 -7
- claude_mpm/services/socketio/server/main.py +12 -4
- claude_mpm/skills/__init__.py +2 -1
- claude_mpm/skills/bundled/collaboration/brainstorming/SKILL.md +79 -0
- claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/SKILL.md +178 -0
- claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/agent-prompts.md +577 -0
- claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/coordination-patterns.md +467 -0
- claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/examples.md +537 -0
- claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/troubleshooting.md +730 -0
- claude_mpm/skills/bundled/collaboration/git-worktrees.md +317 -0
- claude_mpm/skills/bundled/collaboration/requesting-code-review/SKILL.md +112 -0
- claude_mpm/skills/bundled/collaboration/requesting-code-review/references/code-reviewer-template.md +146 -0
- claude_mpm/skills/bundled/collaboration/requesting-code-review/references/review-examples.md +412 -0
- claude_mpm/skills/bundled/collaboration/stacked-prs.md +251 -0
- claude_mpm/skills/bundled/collaboration/writing-plans/SKILL.md +81 -0
- claude_mpm/skills/bundled/collaboration/writing-plans/references/best-practices.md +362 -0
- claude_mpm/skills/bundled/collaboration/writing-plans/references/plan-structure-templates.md +312 -0
- claude_mpm/skills/bundled/debugging/root-cause-tracing/SKILL.md +152 -0
- claude_mpm/skills/bundled/debugging/root-cause-tracing/references/advanced-techniques.md +668 -0
- claude_mpm/skills/bundled/debugging/root-cause-tracing/references/examples.md +587 -0
- claude_mpm/skills/bundled/debugging/root-cause-tracing/references/integration.md +438 -0
- claude_mpm/skills/bundled/debugging/root-cause-tracing/references/tracing-techniques.md +391 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/CREATION-LOG.md +119 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/SKILL.md +148 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/references/anti-patterns.md +483 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/references/examples.md +452 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/references/troubleshooting.md +449 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/references/workflow.md +411 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/test-academic.md +14 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-1.md +58 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-2.md +68 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-3.md +69 -0
- claude_mpm/skills/bundled/debugging/verification-before-completion/SKILL.md +131 -0
- claude_mpm/skills/bundled/debugging/verification-before-completion/references/gate-function.md +325 -0
- claude_mpm/skills/bundled/debugging/verification-before-completion/references/integration-and-workflows.md +490 -0
- claude_mpm/skills/bundled/debugging/verification-before-completion/references/red-flags-and-failures.md +425 -0
- claude_mpm/skills/bundled/debugging/verification-before-completion/references/verification-patterns.md +499 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/INTEGRATION.md +611 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/README.md +596 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/SKILL.md +260 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/examples/nextjs-env-structure.md +315 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/references/frameworks.md +436 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/references/security.md +433 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/references/synchronization.md +452 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/references/troubleshooting.md +404 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/references/validation.md +420 -0
- claude_mpm/skills/bundled/main/artifacts-builder/SKILL.md +86 -0
- claude_mpm/skills/bundled/main/internal-comms/SKILL.md +43 -0
- claude_mpm/skills/bundled/main/internal-comms/examples/3p-updates.md +47 -0
- claude_mpm/skills/bundled/main/internal-comms/examples/company-newsletter.md +65 -0
- claude_mpm/skills/bundled/main/internal-comms/examples/faq-answers.md +30 -0
- claude_mpm/skills/bundled/main/internal-comms/examples/general-comms.md +16 -0
- claude_mpm/skills/bundled/main/mcp-builder/SKILL.md +160 -0
- claude_mpm/skills/bundled/main/mcp-builder/reference/design_principles.md +412 -0
- claude_mpm/skills/bundled/main/mcp-builder/reference/evaluation.md +602 -0
- claude_mpm/skills/bundled/main/mcp-builder/reference/mcp_best_practices.md +915 -0
- claude_mpm/skills/bundled/main/mcp-builder/reference/node_mcp_server.md +916 -0
- claude_mpm/skills/bundled/main/mcp-builder/reference/python_mcp_server.md +752 -0
- claude_mpm/skills/bundled/main/mcp-builder/reference/workflow.md +1237 -0
- claude_mpm/skills/bundled/main/skill-creator/SKILL.md +189 -0
- claude_mpm/skills/bundled/main/skill-creator/references/best-practices.md +500 -0
- claude_mpm/skills/bundled/main/skill-creator/references/creation-workflow.md +464 -0
- claude_mpm/skills/bundled/main/skill-creator/references/examples.md +619 -0
- claude_mpm/skills/bundled/main/skill-creator/references/progressive-disclosure.md +437 -0
- claude_mpm/skills/bundled/main/skill-creator/references/skill-structure.md +231 -0
- claude_mpm/skills/bundled/php/espocrm-development/SKILL.md +170 -0
- claude_mpm/skills/bundled/php/espocrm-development/references/architecture.md +602 -0
- claude_mpm/skills/bundled/php/espocrm-development/references/common-tasks.md +821 -0
- claude_mpm/skills/bundled/php/espocrm-development/references/development-workflow.md +742 -0
- claude_mpm/skills/bundled/php/espocrm-development/references/frontend-customization.md +726 -0
- claude_mpm/skills/bundled/php/espocrm-development/references/hooks-and-services.md +764 -0
- claude_mpm/skills/bundled/php/espocrm-development/references/testing-debugging.md +831 -0
- claude_mpm/skills/bundled/pm/mpm/SKILL.md +38 -0
- claude_mpm/skills/bundled/pm/mpm-agent-update-workflow/SKILL.md +75 -0
- claude_mpm/skills/bundled/pm/mpm-bug-reporting/SKILL.md +248 -0
- claude_mpm/skills/bundled/pm/mpm-circuit-breaker-enforcement/SKILL.md +476 -0
- claude_mpm/skills/bundled/pm/mpm-config/SKILL.md +29 -0
- claude_mpm/skills/bundled/pm/mpm-delegation-patterns/SKILL.md +167 -0
- claude_mpm/skills/bundled/pm/mpm-doctor/SKILL.md +53 -0
- claude_mpm/skills/bundled/pm/mpm-git-file-tracking/SKILL.md +113 -0
- claude_mpm/skills/bundled/pm/mpm-help/SKILL.md +35 -0
- claude_mpm/skills/bundled/pm/mpm-init/SKILL.md +125 -0
- claude_mpm/skills/bundled/pm/mpm-monitor/SKILL.md +32 -0
- claude_mpm/skills/bundled/pm/mpm-organize/SKILL.md +121 -0
- claude_mpm/skills/bundled/pm/mpm-postmortem/SKILL.md +22 -0
- claude_mpm/skills/bundled/pm/mpm-pr-workflow/SKILL.md +124 -0
- claude_mpm/skills/bundled/pm/mpm-session-management/SKILL.md +312 -0
- claude_mpm/skills/bundled/pm/mpm-session-pause/SKILL.md +170 -0
- claude_mpm/skills/bundled/pm/mpm-session-resume/SKILL.md +31 -0
- claude_mpm/skills/bundled/pm/mpm-status/SKILL.md +37 -0
- claude_mpm/skills/bundled/pm/mpm-teaching-mode/SKILL.md +657 -0
- claude_mpm/skills/bundled/pm/mpm-ticket-view/SKILL.md +110 -0
- claude_mpm/skills/bundled/pm/mpm-ticketing-integration/SKILL.md +154 -0
- claude_mpm/skills/bundled/pm/mpm-tool-usage-guide/SKILL.md +386 -0
- claude_mpm/skills/bundled/pm/mpm-verification-protocols/SKILL.md +198 -0
- claude_mpm/skills/bundled/pm/mpm-version/SKILL.md +21 -0
- claude_mpm/skills/bundled/react/flexlayout-react.md +742 -0
- claude_mpm/skills/bundled/rust/desktop-applications/SKILL.md +226 -0
- claude_mpm/skills/bundled/rust/desktop-applications/references/architecture-patterns.md +901 -0
- claude_mpm/skills/bundled/rust/desktop-applications/references/native-gui-frameworks.md +901 -0
- claude_mpm/skills/bundled/rust/desktop-applications/references/platform-integration.md +775 -0
- claude_mpm/skills/bundled/rust/desktop-applications/references/state-management.md +937 -0
- claude_mpm/skills/bundled/rust/desktop-applications/references/tauri-framework.md +770 -0
- claude_mpm/skills/bundled/rust/desktop-applications/references/testing-deployment.md +961 -0
- claude_mpm/skills/bundled/security-scanning.md +112 -0
- claude_mpm/skills/bundled/tauri/tauri-async-patterns.md +495 -0
- claude_mpm/skills/bundled/tauri/tauri-build-deploy.md +599 -0
- claude_mpm/skills/bundled/tauri/tauri-command-patterns.md +535 -0
- claude_mpm/skills/bundled/tauri/tauri-error-handling.md +613 -0
- claude_mpm/skills/bundled/tauri/tauri-event-system.md +648 -0
- claude_mpm/skills/bundled/tauri/tauri-file-system.md +673 -0
- claude_mpm/skills/bundled/tauri/tauri-frontend-integration.md +767 -0
- claude_mpm/skills/bundled/tauri/tauri-performance.md +669 -0
- claude_mpm/skills/bundled/tauri/tauri-state-management.md +573 -0
- claude_mpm/skills/bundled/tauri/tauri-testing.md +384 -0
- claude_mpm/skills/bundled/tauri/tauri-window-management.md +628 -0
- claude_mpm/skills/bundled/testing/condition-based-waiting/SKILL.md +119 -0
- claude_mpm/skills/bundled/testing/condition-based-waiting/references/patterns-and-implementation.md +253 -0
- claude_mpm/skills/bundled/testing/test-driven-development/SKILL.md +145 -0
- claude_mpm/skills/bundled/testing/test-driven-development/references/anti-patterns.md +543 -0
- claude_mpm/skills/bundled/testing/test-driven-development/references/examples.md +741 -0
- claude_mpm/skills/bundled/testing/test-driven-development/references/integration.md +470 -0
- claude_mpm/skills/bundled/testing/test-driven-development/references/philosophy.md +458 -0
- claude_mpm/skills/bundled/testing/test-driven-development/references/workflow.md +639 -0
- claude_mpm/skills/bundled/testing/test-quality-inspector/SKILL.md +458 -0
- claude_mpm/skills/bundled/testing/test-quality-inspector/examples/example-inspection-report.md +411 -0
- claude_mpm/skills/bundled/testing/test-quality-inspector/references/assertion-quality.md +317 -0
- claude_mpm/skills/bundled/testing/test-quality-inspector/references/inspection-checklist.md +270 -0
- claude_mpm/skills/bundled/testing/test-quality-inspector/references/red-flags.md +436 -0
- claude_mpm/skills/bundled/testing/testing-anti-patterns/SKILL.md +140 -0
- claude_mpm/skills/bundled/testing/testing-anti-patterns/references/completeness-anti-patterns.md +572 -0
- claude_mpm/skills/bundled/testing/testing-anti-patterns/references/core-anti-patterns.md +411 -0
- claude_mpm/skills/bundled/testing/testing-anti-patterns/references/detection-guide.md +569 -0
- claude_mpm/skills/bundled/testing/testing-anti-patterns/references/tdd-connection.md +695 -0
- claude_mpm/skills/bundled/testing/webapp-testing/SKILL.md +184 -0
- claude_mpm/skills/bundled/testing/webapp-testing/decision-tree.md +459 -0
- claude_mpm/skills/bundled/testing/webapp-testing/playwright-patterns.md +479 -0
- claude_mpm/skills/bundled/testing/webapp-testing/reconnaissance-pattern.md +687 -0
- claude_mpm/skills/bundled/testing/webapp-testing/server-management.md +758 -0
- claude_mpm/skills/bundled/testing/webapp-testing/troubleshooting.md +868 -0
- claude_mpm/skills/registry.py +295 -90
- claude_mpm/skills/skill_manager.py +29 -23
- claude_mpm/templates/.pre-commit-config.yaml +112 -0
- claude_mpm/utils/agent_dependency_loader.py +103 -4
- claude_mpm/utils/robust_installer.py +45 -24
- claude_mpm-5.6.34.dist-info/METADATA +393 -0
- {claude_mpm-5.4.48.dist-info → claude_mpm-5.6.34.dist-info}/RECORD +453 -151
- claude_mpm/dashboard/static/svelte-build/_app/immutable/assets/0.B_FtCwCQ.css +0 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/assets/2.Cl_eSA4x.css +0 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BgChzWQ1.js +0 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CIXEwuWe.js +0 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CWc5urbQ.js +0 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DMkZpdF2.js +0 -2
- claude_mpm/dashboard/static/svelte-build/_app/immutable/entry/app.DTL5mJO-.js +0 -2
- claude_mpm/dashboard/static/svelte-build/_app/immutable/entry/start.DzuEhzqh.js +0 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/1.DFLC8jdE.js +0 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/2.DPvEihJJ.js +0 -10
- claude_mpm/hooks/claude_hooks/__pycache__/installer.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/connection_manager.cpython-311.pyc +0 -0
- claude_mpm-5.4.48.dist-info/METADATA +0 -999
- {claude_mpm-5.4.48.dist-info → claude_mpm-5.6.34.dist-info}/WHEEL +0 -0
- {claude_mpm-5.4.48.dist-info → claude_mpm-5.6.34.dist-info}/entry_points.txt +0 -0
- {claude_mpm-5.4.48.dist-info → claude_mpm-5.6.34.dist-info}/licenses/LICENSE +0 -0
- {claude_mpm-5.4.48.dist-info → claude_mpm-5.6.34.dist-info}/licenses/LICENSE-FAQ.md +0 -0
- {claude_mpm-5.4.48.dist-info → claude_mpm-5.6.34.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,403 @@
|
|
|
1
|
+
# Auto-Pause Handler for Claude Code Hooks
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
The **AutoPauseHandler** component automatically pauses Claude sessions when context usage reaches 90% of the 200k token budget. It integrates seamlessly with Claude Code hooks to monitor API responses, track cumulative token usage, and capture actions during the "wind-down" period before the session ends.
|
|
6
|
+
|
|
7
|
+
## Key Features
|
|
8
|
+
|
|
9
|
+
- **Automatic threshold detection** at 70%, 85%, 90%, and 95% context usage
|
|
10
|
+
- **Auto-pause triggering** when 90%+ budget consumed
|
|
11
|
+
- **Incremental action capture** during pause mode (tool calls, responses, messages)
|
|
12
|
+
- **Thread-safe file-based persistence** across hook process restarts
|
|
13
|
+
- **User-friendly warnings** emitted to stderr
|
|
14
|
+
- **Graceful error handling** - failures don't break main hook flow
|
|
15
|
+
- **No duplicate triggers** - only emits warnings on NEW threshold crossings
|
|
16
|
+
|
|
17
|
+
## Architecture
|
|
18
|
+
|
|
19
|
+
```
|
|
20
|
+
AutoPauseHandler
|
|
21
|
+
├── ContextUsageTracker # Cumulative token tracking across API calls
|
|
22
|
+
│ ├── File: .claude-mpm/state/context-usage.json
|
|
23
|
+
│ └── Tracks: input/output tokens, cache tokens, thresholds
|
|
24
|
+
│
|
|
25
|
+
└── IncrementalPauseManager # Captures actions during pause mode
|
|
26
|
+
├── File: .claude-mpm/sessions/ACTIVE-PAUSE.jsonl
|
|
27
|
+
└── Captures: tool_call, assistant_response, user_message
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Usage
|
|
31
|
+
|
|
32
|
+
### 1. Initialize in Hook Handler
|
|
33
|
+
|
|
34
|
+
```python
|
|
35
|
+
from claude_mpm.hooks.claude_hooks.auto_pause_handler import AutoPauseHandler
|
|
36
|
+
|
|
37
|
+
class ResponseTrackingManager:
|
|
38
|
+
def __init__(self):
|
|
39
|
+
# Initialize auto-pause handler
|
|
40
|
+
self.auto_pause_handler = AutoPauseHandler()
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### 2. Monitor Token Usage
|
|
44
|
+
|
|
45
|
+
```python
|
|
46
|
+
def track_stop_response(self, event: dict, session_id: str, metadata: dict):
|
|
47
|
+
"""Track response for stop events."""
|
|
48
|
+
if "usage" in event:
|
|
49
|
+
usage_data = event["usage"]
|
|
50
|
+
|
|
51
|
+
# Update token usage and check thresholds
|
|
52
|
+
if self.auto_pause_handler:
|
|
53
|
+
threshold_crossed = self.auto_pause_handler.on_usage_update(usage_data)
|
|
54
|
+
|
|
55
|
+
if threshold_crossed:
|
|
56
|
+
warning = self.auto_pause_handler.emit_threshold_warning(threshold_crossed)
|
|
57
|
+
print(f"\n⚠️ {warning}", file=sys.stderr)
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### 3. Record Actions During Pause
|
|
61
|
+
|
|
62
|
+
```python
|
|
63
|
+
# When a tool is called
|
|
64
|
+
if self.auto_pause_handler.is_pause_active():
|
|
65
|
+
self.auto_pause_handler.on_tool_call(tool_name, tool_args)
|
|
66
|
+
|
|
67
|
+
# When assistant responds
|
|
68
|
+
if self.auto_pause_handler.is_pause_active():
|
|
69
|
+
summary = response[:200] + "..." if len(response) > 200 else response
|
|
70
|
+
self.auto_pause_handler.on_assistant_response(summary)
|
|
71
|
+
|
|
72
|
+
# When user sends message
|
|
73
|
+
if self.auto_pause_handler.is_pause_active():
|
|
74
|
+
self.auto_pause_handler.on_user_message(message_text)
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### 4. Finalize on Session End
|
|
78
|
+
|
|
79
|
+
```python
|
|
80
|
+
def on_session_end(self):
|
|
81
|
+
"""Handle session end."""
|
|
82
|
+
if self.auto_pause_handler:
|
|
83
|
+
session_file = self.auto_pause_handler.on_session_end()
|
|
84
|
+
|
|
85
|
+
if session_file:
|
|
86
|
+
print(f"✅ Session finalized: {session_file}", file=sys.stderr)
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
## API Reference
|
|
90
|
+
|
|
91
|
+
### `AutoPauseHandler`
|
|
92
|
+
|
|
93
|
+
#### `__init__(project_path: Optional[Path] = None)`
|
|
94
|
+
|
|
95
|
+
Initialize auto-pause handler.
|
|
96
|
+
|
|
97
|
+
**Args:**
|
|
98
|
+
- `project_path`: Project root path (default: current directory)
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
|
|
102
|
+
#### `on_usage_update(usage: Dict[str, Any]) -> Optional[str]`
|
|
103
|
+
|
|
104
|
+
Process token usage from a Claude API response.
|
|
105
|
+
|
|
106
|
+
**Args:**
|
|
107
|
+
- `usage`: Dict with `input_tokens`, `output_tokens`, `cache_creation_input_tokens`, `cache_read_input_tokens`
|
|
108
|
+
|
|
109
|
+
**Returns:**
|
|
110
|
+
- Threshold name if NEW threshold crossed: `"caution"`, `"warning"`, `"auto_pause"`, `"critical"`
|
|
111
|
+
- `None` if no new threshold crossed
|
|
112
|
+
|
|
113
|
+
**Example:**
|
|
114
|
+
```python
|
|
115
|
+
usage = {
|
|
116
|
+
"input_tokens": 130000,
|
|
117
|
+
"output_tokens": 52000,
|
|
118
|
+
"cache_creation_input_tokens": 5000,
|
|
119
|
+
"cache_read_input_tokens": 10000
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
threshold = handler.on_usage_update(usage)
|
|
123
|
+
|
|
124
|
+
if threshold == "auto_pause":
|
|
125
|
+
print("Auto-pause triggered!")
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
#### `on_tool_call(tool_name: str, tool_args: Dict[str, Any]) -> None`
|
|
131
|
+
|
|
132
|
+
Record a tool call if auto-pause is active.
|
|
133
|
+
|
|
134
|
+
**Args:**
|
|
135
|
+
- `tool_name`: Name of the tool being called
|
|
136
|
+
- `tool_args`: Tool arguments dictionary
|
|
137
|
+
|
|
138
|
+
**Example:**
|
|
139
|
+
```python
|
|
140
|
+
handler.on_tool_call("Read", {"file_path": "/test/file.py", "limit": 100})
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
---
|
|
144
|
+
|
|
145
|
+
#### `on_assistant_response(response_summary: str) -> None`
|
|
146
|
+
|
|
147
|
+
Record an assistant response if auto-pause is active.
|
|
148
|
+
|
|
149
|
+
**Args:**
|
|
150
|
+
- `response_summary`: Summary of assistant response (truncated to 500 chars)
|
|
151
|
+
|
|
152
|
+
**Example:**
|
|
153
|
+
```python
|
|
154
|
+
handler.on_assistant_response("File modified successfully...")
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
---
|
|
158
|
+
|
|
159
|
+
#### `on_user_message(message_summary: str) -> None`
|
|
160
|
+
|
|
161
|
+
Record a user message if auto-pause is active.
|
|
162
|
+
|
|
163
|
+
**Args:**
|
|
164
|
+
- `message_summary`: Summary of user message (truncated to 500 chars)
|
|
165
|
+
|
|
166
|
+
**Example:**
|
|
167
|
+
```python
|
|
168
|
+
handler.on_user_message("Please fix the authentication bug.")
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
---
|
|
172
|
+
|
|
173
|
+
#### `on_session_end() -> Optional[Path]`
|
|
174
|
+
|
|
175
|
+
Finalize any active pause session.
|
|
176
|
+
|
|
177
|
+
**Returns:**
|
|
178
|
+
- `Path` to finalized session file, or `None` if no pause was active
|
|
179
|
+
|
|
180
|
+
**Example:**
|
|
181
|
+
```python
|
|
182
|
+
session_file = handler.on_session_end()
|
|
183
|
+
|
|
184
|
+
if session_file:
|
|
185
|
+
print(f"Session saved to: {session_file}")
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
---
|
|
189
|
+
|
|
190
|
+
#### `is_pause_active() -> bool`
|
|
191
|
+
|
|
192
|
+
Check if auto-pause mode is currently active.
|
|
193
|
+
|
|
194
|
+
**Returns:**
|
|
195
|
+
- `True` if auto-pause has been triggered and is capturing actions
|
|
196
|
+
|
|
197
|
+
---
|
|
198
|
+
|
|
199
|
+
#### `get_status() -> Dict[str, Any]`
|
|
200
|
+
|
|
201
|
+
Get current status for display/logging.
|
|
202
|
+
|
|
203
|
+
**Returns:**
|
|
204
|
+
Dict with:
|
|
205
|
+
- `context_percentage`: Current context usage (0.0-100.0)
|
|
206
|
+
- `threshold_reached`: Highest threshold crossed or `None`
|
|
207
|
+
- `auto_pause_active`: Whether auto-pause has been triggered
|
|
208
|
+
- `pause_active`: Whether pause is currently recording actions
|
|
209
|
+
- `session_id`: Current session identifier
|
|
210
|
+
- `total_tokens`: Total tokens used (input + output)
|
|
211
|
+
- `budget`: Total context budget (200,000)
|
|
212
|
+
- `pause_details`: (if active) action_count, duration_seconds, context_range, last_action_type
|
|
213
|
+
|
|
214
|
+
**Example:**
|
|
215
|
+
```python
|
|
216
|
+
status = handler.get_status()
|
|
217
|
+
|
|
218
|
+
print(f"Context: {status['context_percentage']}%")
|
|
219
|
+
print(f"Threshold: {status['threshold_reached']}")
|
|
220
|
+
print(f"Pause active: {status['pause_active']}")
|
|
221
|
+
|
|
222
|
+
if status.get('pause_details'):
|
|
223
|
+
print(f"Actions recorded: {status['pause_details']['action_count']}")
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
---
|
|
227
|
+
|
|
228
|
+
#### `emit_threshold_warning(threshold: str) -> str`
|
|
229
|
+
|
|
230
|
+
Generate a warning message for threshold crossing.
|
|
231
|
+
|
|
232
|
+
**Args:**
|
|
233
|
+
- `threshold`: Threshold name (`"caution"`, `"warning"`, `"auto_pause"`, `"critical"`)
|
|
234
|
+
|
|
235
|
+
**Returns:**
|
|
236
|
+
- User-friendly warning message string
|
|
237
|
+
|
|
238
|
+
**Example:**
|
|
239
|
+
```python
|
|
240
|
+
warning = handler.emit_threshold_warning("auto_pause")
|
|
241
|
+
# Returns: "Context usage at 90%. Auto-pause activated. Actions are being recorded for session continuity. (91.2%)"
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
## Threshold Levels
|
|
245
|
+
|
|
246
|
+
| Threshold | Percentage | Behavior |
|
|
247
|
+
|-----------|------------|----------|
|
|
248
|
+
| **Caution** | 70% | Warning emitted, no action taken |
|
|
249
|
+
| **Warning** | 85% | Stronger warning emitted, no action taken |
|
|
250
|
+
| **Auto-pause** | 90% | **Pause triggered**, actions recorded |
|
|
251
|
+
| **Critical** | 95% | Critical warning emitted, pause already active |
|
|
252
|
+
|
|
253
|
+
## Warning Messages
|
|
254
|
+
|
|
255
|
+
```python
|
|
256
|
+
THRESHOLD_WARNINGS = {
|
|
257
|
+
"caution": "Context usage at 70%. Consider wrapping up current work.",
|
|
258
|
+
"warning": "Context usage at 85%. Session nearing capacity.",
|
|
259
|
+
"auto_pause": "Context usage at 90%. Auto-pause activated. Actions are being recorded for session continuity.",
|
|
260
|
+
"critical": "Context usage at 95%. Session nearly exhausted. Wrapping up...",
|
|
261
|
+
}
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
## Output Files
|
|
265
|
+
|
|
266
|
+
When auto-pause is triggered, the following files are created:
|
|
267
|
+
|
|
268
|
+
### During Pause (Incremental Capture)
|
|
269
|
+
|
|
270
|
+
```
|
|
271
|
+
.claude-mpm/sessions/ACTIVE-PAUSE.jsonl
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
**Format:** JSONL (one JSON object per line)
|
|
275
|
+
|
|
276
|
+
**Example:**
|
|
277
|
+
```jsonl
|
|
278
|
+
{"type":"pause_started","timestamp":"2026-01-06T23:15:42.123Z","session_id":"session-20260106-151542","data":{"context_percentage":0.91,"initial_state":{...},"reason":"Auto-pause threshold exceeded (90%+)"},"context_percentage":0.91}
|
|
279
|
+
{"type":"tool_call","timestamp":"2026-01-06T23:15:45.456Z","session_id":"session-20260106-151542","data":{"tool":"Read","args_summary":{"file_path":"/test/file.py"}},"context_percentage":0.912}
|
|
280
|
+
{"type":"assistant_response","timestamp":"2026-01-06T23:15:48.789Z","session_id":"session-20260106-151542","data":{"summary":"File read successfully..."},"context_percentage":0.915}
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
### After Finalization
|
|
284
|
+
|
|
285
|
+
```
|
|
286
|
+
.claude-mpm/sessions/session-20260106-151542.json # Full session state
|
|
287
|
+
.claude-mpm/sessions/session-20260106-151542.yaml # Human-readable YAML
|
|
288
|
+
.claude-mpm/sessions/session-20260106-151542.md # Markdown summary
|
|
289
|
+
.claude-mpm/sessions/session-20260106-151542-incremental.jsonl # Archived JSONL
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
## State Persistence
|
|
293
|
+
|
|
294
|
+
### Context Usage State
|
|
295
|
+
|
|
296
|
+
**File:** `.claude-mpm/state/context-usage.json`
|
|
297
|
+
|
|
298
|
+
**Format:**
|
|
299
|
+
```json
|
|
300
|
+
{
|
|
301
|
+
"session_id": "session-20260106-151542",
|
|
302
|
+
"cumulative_input_tokens": 130000,
|
|
303
|
+
"cumulative_output_tokens": 52000,
|
|
304
|
+
"cache_creation_tokens": 5000,
|
|
305
|
+
"cache_read_tokens": 10000,
|
|
306
|
+
"percentage_used": 91.0,
|
|
307
|
+
"threshold_reached": "auto_pause",
|
|
308
|
+
"auto_pause_active": true,
|
|
309
|
+
"last_updated": "2026-01-06T23:15:42.123Z"
|
|
310
|
+
}
|
|
311
|
+
```
|
|
312
|
+
|
|
313
|
+
This state persists across hook process restarts, enabling cumulative tracking.
|
|
314
|
+
|
|
315
|
+
## Testing
|
|
316
|
+
|
|
317
|
+
Run the comprehensive test suite:
|
|
318
|
+
|
|
319
|
+
```bash
|
|
320
|
+
python -m pytest tests/hooks/test_auto_pause_handler.py -v
|
|
321
|
+
```
|
|
322
|
+
|
|
323
|
+
**Test coverage:**
|
|
324
|
+
- ✅ Initialization and state loading
|
|
325
|
+
- ✅ Token usage updates and threshold detection
|
|
326
|
+
- ✅ Action recording during pause mode
|
|
327
|
+
- ✅ Session finalization and output files
|
|
328
|
+
- ✅ Status reporting and warnings
|
|
329
|
+
- ✅ Edge cases and error handling
|
|
330
|
+
- ✅ Concurrency and state persistence
|
|
331
|
+
|
|
332
|
+
## Debugging
|
|
333
|
+
|
|
334
|
+
Enable debug mode to see detailed logs:
|
|
335
|
+
|
|
336
|
+
```bash
|
|
337
|
+
export CLAUDE_MPM_HOOK_DEBUG=true
|
|
338
|
+
```
|
|
339
|
+
|
|
340
|
+
**Expected debug output:**
|
|
341
|
+
```
|
|
342
|
+
✅ Auto-pause handler initialized: 0.0% context used
|
|
343
|
+
- Captured usage: 15234 total tokens
|
|
344
|
+
Context threshold crossed: caution (72.3%)
|
|
345
|
+
⚠️ Context usage at 70%. Consider wrapping up current work. (72.3%)
|
|
346
|
+
- Captured usage: 32451 total tokens
|
|
347
|
+
Context threshold crossed: warning (86.7%)
|
|
348
|
+
⚠️ Context usage at 85%. Session nearing capacity. (86.7%)
|
|
349
|
+
- Captured usage: 45678 total tokens
|
|
350
|
+
Context threshold crossed: auto_pause (91.2%)
|
|
351
|
+
✅ Auto-pause triggered: session-20260106-143022 (91.2% context used)
|
|
352
|
+
⚠️ Context usage at 90%. Auto-pause activated. Actions are being recorded for session continuity. (91.2%)
|
|
353
|
+
Recorded tool call during pause: Read
|
|
354
|
+
Recorded assistant response during pause (length: 245)
|
|
355
|
+
✅ Session finalized: session-20260106-143022.json
|
|
356
|
+
```
|
|
357
|
+
|
|
358
|
+
## Integration Example
|
|
359
|
+
|
|
360
|
+
See `INTEGRATION_EXAMPLE.md` for complete integration guide with `response_tracking.py`.
|
|
361
|
+
|
|
362
|
+
## Error Handling
|
|
363
|
+
|
|
364
|
+
The handler is designed to be resilient:
|
|
365
|
+
|
|
366
|
+
- ✅ **No breaking failures**: All errors are caught and logged
|
|
367
|
+
- ✅ **Graceful degradation**: Missing dependencies handled gracefully
|
|
368
|
+
- ✅ **Invalid state recovery**: Corrupted files trigger default initialization
|
|
369
|
+
- ✅ **Thread-safe**: Atomic file operations prevent corruption
|
|
370
|
+
- ✅ **Optional feature**: Auto-pause failures don't break main hook flow
|
|
371
|
+
|
|
372
|
+
## Performance Characteristics
|
|
373
|
+
|
|
374
|
+
- **Overhead**: Minimal (~1-2ms per API call for state updates)
|
|
375
|
+
- **Storage**: ~1-5KB per session state file
|
|
376
|
+
- **Memory**: Constant (state persisted to disk, not held in memory)
|
|
377
|
+
- **Concurrency**: Safe (atomic file operations with locking)
|
|
378
|
+
|
|
379
|
+
## Limitations
|
|
380
|
+
|
|
381
|
+
1. **Token accuracy**: Relies on accurate token counts from Claude API
|
|
382
|
+
2. **Cross-session tracking**: Each session tracked independently (no cross-session cumulative tracking)
|
|
383
|
+
3. **Manual reset**: No automatic session reset (must manually delete state files)
|
|
384
|
+
4. **Summary truncation**: Long responses truncated to 500 chars (configurable via `MAX_SUMMARY_LENGTH`)
|
|
385
|
+
|
|
386
|
+
## Future Enhancements
|
|
387
|
+
|
|
388
|
+
- [ ] Add session reset command: `mpm reset-context`
|
|
389
|
+
- [ ] Support custom threshold percentages via config
|
|
390
|
+
- [ ] Add email/webhook notifications for critical thresholds
|
|
391
|
+
- [ ] Implement session resume from finalized pause files
|
|
392
|
+
- [ ] Add visualization dashboard for token usage trends
|
|
393
|
+
|
|
394
|
+
## Related Components
|
|
395
|
+
|
|
396
|
+
- **ContextUsageTracker**: Token tracking service (`src/claude_mpm/services/infrastructure/context_usage_tracker.py`)
|
|
397
|
+
- **IncrementalPauseManager**: Action capture service (`src/claude_mpm/services/cli/incremental_pause_manager.py`)
|
|
398
|
+
- **SessionPauseManager**: Session finalization service (`src/claude_mpm/services/cli/session_pause_manager.py`)
|
|
399
|
+
- **Response Tracking**: Hook integration (`src/claude_mpm/hooks/claude_hooks/response_tracking.py`)
|
|
400
|
+
|
|
401
|
+
## License
|
|
402
|
+
|
|
403
|
+
Part of Claude Multi-Agent Project Manager (MPM).
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|