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.
Files changed (401) hide show
  1. claude_mpm/VERSION +1 -1
  2. claude_mpm/agents/CLAUDE_MPM_OUTPUT_STYLE.md +66 -241
  3. claude_mpm/agents/CLAUDE_MPM_RESEARCH_OUTPUT_STYLE.md +413 -0
  4. claude_mpm/agents/CLAUDE_MPM_TEACHER_OUTPUT_STYLE.md +109 -1925
  5. claude_mpm/agents/PM_INSTRUCTIONS.md +111 -686
  6. claude_mpm/agents/WORKFLOW.md +2 -0
  7. claude_mpm/agents/templates/circuit-breakers.md +26 -17
  8. claude_mpm/cli/__init__.py +5 -1
  9. claude_mpm/cli/commands/agents.py +2 -4
  10. claude_mpm/cli/commands/agents_reconcile.py +197 -0
  11. claude_mpm/cli/commands/autotodos.py +566 -0
  12. claude_mpm/cli/commands/commander.py +46 -0
  13. claude_mpm/cli/commands/configure.py +620 -21
  14. claude_mpm/cli/commands/hook_errors.py +60 -60
  15. claude_mpm/cli/commands/monitor.py +2 -2
  16. claude_mpm/cli/commands/mpm_init/core.py +2 -2
  17. claude_mpm/cli/commands/run.py +35 -3
  18. claude_mpm/cli/commands/skills.py +166 -14
  19. claude_mpm/cli/executor.py +120 -16
  20. claude_mpm/cli/interactive/__init__.py +10 -0
  21. claude_mpm/cli/interactive/agent_wizard.py +30 -50
  22. claude_mpm/cli/interactive/questionary_styles.py +65 -0
  23. claude_mpm/cli/interactive/skill_selector.py +481 -0
  24. claude_mpm/cli/parsers/base_parser.py +76 -1
  25. claude_mpm/cli/parsers/commander_parser.py +83 -0
  26. claude_mpm/cli/parsers/run_parser.py +10 -0
  27. claude_mpm/cli/startup.py +276 -403
  28. claude_mpm/cli/startup_display.py +72 -5
  29. claude_mpm/cli/startup_logging.py +2 -2
  30. claude_mpm/cli/utils.py +7 -3
  31. claude_mpm/commander/__init__.py +72 -0
  32. claude_mpm/commander/adapters/__init__.py +31 -0
  33. claude_mpm/commander/adapters/base.py +191 -0
  34. claude_mpm/commander/adapters/claude_code.py +361 -0
  35. claude_mpm/commander/adapters/communication.py +366 -0
  36. claude_mpm/commander/api/__init__.py +16 -0
  37. claude_mpm/commander/api/app.py +105 -0
  38. claude_mpm/commander/api/errors.py +112 -0
  39. claude_mpm/commander/api/routes/__init__.py +8 -0
  40. claude_mpm/commander/api/routes/events.py +184 -0
  41. claude_mpm/commander/api/routes/inbox.py +171 -0
  42. claude_mpm/commander/api/routes/messages.py +148 -0
  43. claude_mpm/commander/api/routes/projects.py +271 -0
  44. claude_mpm/commander/api/routes/sessions.py +215 -0
  45. claude_mpm/commander/api/routes/work.py +260 -0
  46. claude_mpm/commander/api/schemas.py +182 -0
  47. claude_mpm/commander/chat/__init__.py +7 -0
  48. claude_mpm/commander/chat/cli.py +107 -0
  49. claude_mpm/commander/chat/commands.py +96 -0
  50. claude_mpm/commander/chat/repl.py +310 -0
  51. claude_mpm/commander/config.py +49 -0
  52. claude_mpm/commander/config_loader.py +115 -0
  53. claude_mpm/commander/daemon.py +398 -0
  54. claude_mpm/commander/events/__init__.py +26 -0
  55. claude_mpm/commander/events/manager.py +332 -0
  56. claude_mpm/commander/frameworks/__init__.py +12 -0
  57. claude_mpm/commander/frameworks/base.py +143 -0
  58. claude_mpm/commander/frameworks/claude_code.py +58 -0
  59. claude_mpm/commander/frameworks/mpm.py +62 -0
  60. claude_mpm/commander/inbox/__init__.py +16 -0
  61. claude_mpm/commander/inbox/dedup.py +128 -0
  62. claude_mpm/commander/inbox/inbox.py +224 -0
  63. claude_mpm/commander/inbox/models.py +70 -0
  64. claude_mpm/commander/instance_manager.py +337 -0
  65. claude_mpm/commander/llm/__init__.py +6 -0
  66. claude_mpm/commander/llm/openrouter_client.py +167 -0
  67. claude_mpm/commander/llm/summarizer.py +70 -0
  68. claude_mpm/commander/models/__init__.py +18 -0
  69. claude_mpm/commander/models/events.py +121 -0
  70. claude_mpm/commander/models/project.py +162 -0
  71. claude_mpm/commander/models/work.py +214 -0
  72. claude_mpm/commander/parsing/__init__.py +20 -0
  73. claude_mpm/commander/parsing/extractor.py +132 -0
  74. claude_mpm/commander/parsing/output_parser.py +270 -0
  75. claude_mpm/commander/parsing/patterns.py +100 -0
  76. claude_mpm/commander/persistence/__init__.py +11 -0
  77. claude_mpm/commander/persistence/event_store.py +274 -0
  78. claude_mpm/commander/persistence/state_store.py +309 -0
  79. claude_mpm/commander/persistence/work_store.py +164 -0
  80. claude_mpm/commander/polling/__init__.py +13 -0
  81. claude_mpm/commander/polling/event_detector.py +104 -0
  82. claude_mpm/commander/polling/output_buffer.py +49 -0
  83. claude_mpm/commander/polling/output_poller.py +153 -0
  84. claude_mpm/commander/project_session.py +268 -0
  85. claude_mpm/commander/proxy/__init__.py +12 -0
  86. claude_mpm/commander/proxy/formatter.py +89 -0
  87. claude_mpm/commander/proxy/output_handler.py +191 -0
  88. claude_mpm/commander/proxy/relay.py +155 -0
  89. claude_mpm/commander/registry.py +404 -0
  90. claude_mpm/commander/runtime/__init__.py +10 -0
  91. claude_mpm/commander/runtime/executor.py +191 -0
  92. claude_mpm/commander/runtime/monitor.py +316 -0
  93. claude_mpm/commander/session/__init__.py +6 -0
  94. claude_mpm/commander/session/context.py +81 -0
  95. claude_mpm/commander/session/manager.py +59 -0
  96. claude_mpm/commander/tmux_orchestrator.py +361 -0
  97. claude_mpm/commander/web/__init__.py +1 -0
  98. claude_mpm/commander/work/__init__.py +30 -0
  99. claude_mpm/commander/work/executor.py +189 -0
  100. claude_mpm/commander/work/queue.py +405 -0
  101. claude_mpm/commander/workflow/__init__.py +27 -0
  102. claude_mpm/commander/workflow/event_handler.py +219 -0
  103. claude_mpm/commander/workflow/notifier.py +146 -0
  104. claude_mpm/commands/mpm-config.md +8 -0
  105. claude_mpm/commands/mpm-doctor.md +8 -0
  106. claude_mpm/commands/mpm-help.md +8 -0
  107. claude_mpm/commands/mpm-init.md +8 -0
  108. claude_mpm/commands/mpm-monitor.md +8 -0
  109. claude_mpm/commands/mpm-organize.md +8 -0
  110. claude_mpm/commands/mpm-postmortem.md +8 -0
  111. claude_mpm/commands/mpm-session-resume.md +9 -1
  112. claude_mpm/commands/mpm-status.md +8 -0
  113. claude_mpm/commands/mpm-ticket-view.md +8 -0
  114. claude_mpm/commands/mpm-version.md +8 -0
  115. claude_mpm/commands/mpm.md +8 -0
  116. claude_mpm/config/agent_presets.py +8 -7
  117. claude_mpm/constants.py +1 -0
  118. claude_mpm/core/claude_runner.py +2 -2
  119. claude_mpm/core/config.py +5 -0
  120. claude_mpm/core/hook_manager.py +51 -3
  121. claude_mpm/core/interactive_session.py +7 -7
  122. claude_mpm/core/logger.py +10 -7
  123. claude_mpm/core/logging_utils.py +4 -2
  124. claude_mpm/core/output_style_manager.py +31 -13
  125. claude_mpm/core/unified_config.py +54 -8
  126. claude_mpm/core/unified_paths.py +30 -13
  127. claude_mpm/dashboard/static/svelte-build/_app/immutable/assets/0.C33zOoyM.css +1 -0
  128. claude_mpm/dashboard/static/svelte-build/_app/immutable/assets/2.CW1J-YuA.css +1 -0
  129. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{Cs_tUR18.js → 1WZnGYqX.js} +1 -1
  130. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{CDuw-vjf.js → 67pF3qNn.js} +1 -1
  131. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{bTOqqlTd.js → 6RxdMKe4.js} +1 -1
  132. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{DwBR2MJi.js → 8cZrfX0h.js} +1 -1
  133. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{ZGh7QtNv.js → 9a6T2nm-.js} +1 -1
  134. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{D9lljYKQ.js → B443AUzu.js} +1 -1
  135. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{RJiighC3.js → B8AwtY2H.js} +1 -1
  136. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{uuIeMWc-.js → BF15LAsF.js} +1 -1
  137. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{D3k0OPJN.js → BRcwIQNr.js} +1 -1
  138. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{CyWMqx4W.js → BV6nKitt.js} +1 -1
  139. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{CiIAseT4.js → BViJ8lZt.js} +5 -5
  140. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{CBBdVcY8.js → BcQ-Q0FE.js} +1 -1
  141. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{BovzEFCE.js → Bpyvgze_.js} +1 -1
  142. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BzTRqg-z.js +1 -0
  143. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/C0Fr8dve.js +1 -0
  144. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{eNVUfhuA.js → C3rbW_a-.js} +1 -1
  145. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{GYwsonyD.js → C8WYN38h.js} +1 -1
  146. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{BIF9m_hv.js → C9I8FlXH.js} +1 -1
  147. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{B0uc0UOD.js → CIQcWgO2.js} +3 -3
  148. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{Be7GpZd6.js → CIctN7YN.js} +1 -1
  149. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{Bh0LDWpI.js → CKrS_JZW.js} +2 -2
  150. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{DUrLdbGD.js → CR6P9C4A.js} +1 -1
  151. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{B7xVLGWV.js → CRRR9MD_.js} +1 -1
  152. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CRcR2DqT.js +334 -0
  153. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{Dhb8PKl3.js → CSXtMOf0.js} +1 -1
  154. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{BPYeabCQ.js → CT-sbxSk.js} +1 -1
  155. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{sQeU3Y1z.js → CWm6DJsp.js} +1 -1
  156. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{CnA0NrzZ.js → CpqQ1Kzn.js} +1 -1
  157. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{C4B-KCzX.js → D2nGpDRe.js} +1 -1
  158. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{DGkLK5U1.js → D9iCMida.js} +1 -1
  159. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{BofRWZRR.js → D9ykgMoY.js} +1 -1
  160. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{DmxopI1J.js → DL2Ldur1.js} +1 -1
  161. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{C30mlcqg.js → DPfltzjH.js} +1 -1
  162. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{Vzk33B_K.js → DR8nis88.js} +2 -2
  163. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{DI7hHRFL.js → DUliQN2b.js} +1 -1
  164. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{C4JcI4KD.js → DXlhR01x.js} +1 -1
  165. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{bT1r9zLR.js → D_lyTybS.js} +1 -1
  166. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{DZX00Y4g.js → DngoTTgh.js} +1 -1
  167. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{CzZX-COe.js → DqkmHtDC.js} +1 -1
  168. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{B7RN905-.js → DsDh8EYs.js} +1 -1
  169. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{DLVjFsZ3.js → DypDmXgd.js} +1 -1
  170. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{iEWssX7S.js → IPYC-LnN.js} +1 -1
  171. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/JTLiF7dt.js +24 -0
  172. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{DaimHw_p.js → JpevfAFt.js} +1 -1
  173. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{DY1XQ8fi.js → R8CEIRAd.js} +1 -1
  174. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{Dle-35c7.js → Zxy7qc-l.js} +2 -2
  175. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/q9Hm6zAU.js +1 -0
  176. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{C_Usid8X.js → qtd3IeO4.js} +2 -2
  177. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{CzeYkLYB.js → ulBFON_C.js} +2 -2
  178. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{Cfqx1Qun.js → wQVh1CoA.js} +1 -1
  179. claude_mpm/dashboard/static/svelte-build/_app/immutable/entry/{app.D6-I5TpK.js → app.Dr7t0z2J.js} +2 -2
  180. claude_mpm/dashboard/static/svelte-build/_app/immutable/entry/start.BGhZHUS3.js +1 -0
  181. claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/{0.m1gL8KXf.js → 0.RgBboRvH.js} +1 -1
  182. claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/{1.CgNOuw-d.js → 1.DG-KkbDf.js} +1 -1
  183. claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/2.D_jnf-x6.js +1 -0
  184. claude_mpm/dashboard/static/svelte-build/_app/version.json +1 -1
  185. claude_mpm/dashboard/static/svelte-build/index.html +9 -9
  186. claude_mpm/experimental/cli_enhancements.py +2 -1
  187. claude_mpm/hooks/claude_hooks/INTEGRATION_EXAMPLE.md +243 -0
  188. claude_mpm/hooks/claude_hooks/README_AUTO_PAUSE.md +403 -0
  189. claude_mpm/hooks/claude_hooks/auto_pause_handler.py +486 -0
  190. claude_mpm/hooks/claude_hooks/event_handlers.py +250 -11
  191. claude_mpm/hooks/claude_hooks/hook_handler.py +106 -89
  192. claude_mpm/hooks/claude_hooks/hook_wrapper.sh +6 -11
  193. claude_mpm/hooks/claude_hooks/installer.py +69 -5
  194. claude_mpm/hooks/claude_hooks/response_tracking.py +3 -1
  195. claude_mpm/hooks/claude_hooks/services/connection_manager.py +20 -0
  196. claude_mpm/hooks/claude_hooks/services/connection_manager_http.py +14 -77
  197. claude_mpm/hooks/claude_hooks/services/subagent_processor.py +30 -6
  198. claude_mpm/hooks/session_resume_hook.py +85 -1
  199. claude_mpm/init.py +1 -1
  200. claude_mpm/scripts/claude-hook-handler.sh +36 -10
  201. claude_mpm/scripts/start_activity_logging.py +0 -0
  202. claude_mpm/services/agents/agent_recommendation_service.py +8 -8
  203. claude_mpm/services/agents/cache_git_manager.py +1 -1
  204. claude_mpm/services/agents/deployment/agent_template_builder.py +8 -0
  205. claude_mpm/services/agents/deployment/deployment_reconciler.py +577 -0
  206. claude_mpm/services/agents/deployment/remote_agent_discovery_service.py +3 -0
  207. claude_mpm/services/agents/deployment/startup_reconciliation.py +138 -0
  208. claude_mpm/services/agents/loading/framework_agent_loader.py +75 -2
  209. claude_mpm/services/agents/sources/git_source_sync_service.py +7 -4
  210. claude_mpm/services/agents/startup_sync.py +5 -2
  211. claude_mpm/services/cli/__init__.py +3 -0
  212. claude_mpm/services/cli/incremental_pause_manager.py +561 -0
  213. claude_mpm/services/cli/session_resume_helper.py +10 -2
  214. claude_mpm/services/delegation_detector.py +175 -0
  215. claude_mpm/services/diagnostics/checks/agent_sources_check.py +30 -0
  216. claude_mpm/services/diagnostics/checks/configuration_check.py +24 -0
  217. claude_mpm/services/diagnostics/checks/installation_check.py +22 -0
  218. claude_mpm/services/diagnostics/checks/mcp_services_check.py +23 -0
  219. claude_mpm/services/diagnostics/doctor_reporter.py +31 -1
  220. claude_mpm/services/diagnostics/models.py +14 -1
  221. claude_mpm/services/event_log.py +325 -0
  222. claude_mpm/services/infrastructure/__init__.py +4 -0
  223. claude_mpm/services/infrastructure/context_usage_tracker.py +291 -0
  224. claude_mpm/services/infrastructure/resume_log_generator.py +24 -5
  225. claude_mpm/services/monitor/daemon_manager.py +15 -4
  226. claude_mpm/services/monitor/management/lifecycle.py +8 -2
  227. claude_mpm/services/monitor/server.py +106 -16
  228. claude_mpm/services/pm_skills_deployer.py +261 -85
  229. claude_mpm/services/skills/git_skill_source_manager.py +75 -10
  230. claude_mpm/services/skills/selective_skill_deployer.py +177 -80
  231. claude_mpm/services/skills/skill_discovery_service.py +57 -3
  232. claude_mpm/services/socketio/handlers/hook.py +14 -7
  233. claude_mpm/services/socketio/server/main.py +12 -4
  234. claude_mpm/skills/bundled/collaboration/brainstorming/SKILL.md +79 -0
  235. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/SKILL.md +178 -0
  236. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/agent-prompts.md +577 -0
  237. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/coordination-patterns.md +467 -0
  238. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/examples.md +537 -0
  239. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/troubleshooting.md +730 -0
  240. claude_mpm/skills/bundled/collaboration/git-worktrees.md +317 -0
  241. claude_mpm/skills/bundled/collaboration/requesting-code-review/SKILL.md +112 -0
  242. claude_mpm/skills/bundled/collaboration/requesting-code-review/references/code-reviewer-template.md +146 -0
  243. claude_mpm/skills/bundled/collaboration/requesting-code-review/references/review-examples.md +412 -0
  244. claude_mpm/skills/bundled/collaboration/stacked-prs.md +251 -0
  245. claude_mpm/skills/bundled/collaboration/writing-plans/SKILL.md +81 -0
  246. claude_mpm/skills/bundled/collaboration/writing-plans/references/best-practices.md +362 -0
  247. claude_mpm/skills/bundled/collaboration/writing-plans/references/plan-structure-templates.md +312 -0
  248. claude_mpm/skills/bundled/debugging/root-cause-tracing/SKILL.md +152 -0
  249. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/advanced-techniques.md +668 -0
  250. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/examples.md +587 -0
  251. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/integration.md +438 -0
  252. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/tracing-techniques.md +391 -0
  253. claude_mpm/skills/bundled/debugging/systematic-debugging/CREATION-LOG.md +119 -0
  254. claude_mpm/skills/bundled/debugging/systematic-debugging/SKILL.md +148 -0
  255. claude_mpm/skills/bundled/debugging/systematic-debugging/references/anti-patterns.md +483 -0
  256. claude_mpm/skills/bundled/debugging/systematic-debugging/references/examples.md +452 -0
  257. claude_mpm/skills/bundled/debugging/systematic-debugging/references/troubleshooting.md +449 -0
  258. claude_mpm/skills/bundled/debugging/systematic-debugging/references/workflow.md +411 -0
  259. claude_mpm/skills/bundled/debugging/systematic-debugging/test-academic.md +14 -0
  260. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-1.md +58 -0
  261. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-2.md +68 -0
  262. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-3.md +69 -0
  263. claude_mpm/skills/bundled/debugging/verification-before-completion/SKILL.md +131 -0
  264. claude_mpm/skills/bundled/debugging/verification-before-completion/references/gate-function.md +325 -0
  265. claude_mpm/skills/bundled/debugging/verification-before-completion/references/integration-and-workflows.md +490 -0
  266. claude_mpm/skills/bundled/debugging/verification-before-completion/references/red-flags-and-failures.md +425 -0
  267. claude_mpm/skills/bundled/debugging/verification-before-completion/references/verification-patterns.md +499 -0
  268. claude_mpm/skills/bundled/infrastructure/env-manager/INTEGRATION.md +611 -0
  269. claude_mpm/skills/bundled/infrastructure/env-manager/README.md +596 -0
  270. claude_mpm/skills/bundled/infrastructure/env-manager/SKILL.md +260 -0
  271. claude_mpm/skills/bundled/infrastructure/env-manager/examples/nextjs-env-structure.md +315 -0
  272. claude_mpm/skills/bundled/infrastructure/env-manager/references/frameworks.md +436 -0
  273. claude_mpm/skills/bundled/infrastructure/env-manager/references/security.md +433 -0
  274. claude_mpm/skills/bundled/infrastructure/env-manager/references/synchronization.md +452 -0
  275. claude_mpm/skills/bundled/infrastructure/env-manager/references/troubleshooting.md +404 -0
  276. claude_mpm/skills/bundled/infrastructure/env-manager/references/validation.md +420 -0
  277. claude_mpm/skills/bundled/main/artifacts-builder/SKILL.md +86 -0
  278. claude_mpm/skills/bundled/main/internal-comms/SKILL.md +43 -0
  279. claude_mpm/skills/bundled/main/internal-comms/examples/3p-updates.md +47 -0
  280. claude_mpm/skills/bundled/main/internal-comms/examples/company-newsletter.md +65 -0
  281. claude_mpm/skills/bundled/main/internal-comms/examples/faq-answers.md +30 -0
  282. claude_mpm/skills/bundled/main/internal-comms/examples/general-comms.md +16 -0
  283. claude_mpm/skills/bundled/main/mcp-builder/SKILL.md +160 -0
  284. claude_mpm/skills/bundled/main/mcp-builder/reference/design_principles.md +412 -0
  285. claude_mpm/skills/bundled/main/mcp-builder/reference/evaluation.md +602 -0
  286. claude_mpm/skills/bundled/main/mcp-builder/reference/mcp_best_practices.md +915 -0
  287. claude_mpm/skills/bundled/main/mcp-builder/reference/node_mcp_server.md +916 -0
  288. claude_mpm/skills/bundled/main/mcp-builder/reference/python_mcp_server.md +752 -0
  289. claude_mpm/skills/bundled/main/mcp-builder/reference/workflow.md +1237 -0
  290. claude_mpm/skills/bundled/main/skill-creator/SKILL.md +189 -0
  291. claude_mpm/skills/bundled/main/skill-creator/references/best-practices.md +500 -0
  292. claude_mpm/skills/bundled/main/skill-creator/references/creation-workflow.md +464 -0
  293. claude_mpm/skills/bundled/main/skill-creator/references/examples.md +619 -0
  294. claude_mpm/skills/bundled/main/skill-creator/references/progressive-disclosure.md +437 -0
  295. claude_mpm/skills/bundled/main/skill-creator/references/skill-structure.md +231 -0
  296. claude_mpm/skills/bundled/php/espocrm-development/SKILL.md +170 -0
  297. claude_mpm/skills/bundled/php/espocrm-development/references/architecture.md +602 -0
  298. claude_mpm/skills/bundled/php/espocrm-development/references/common-tasks.md +821 -0
  299. claude_mpm/skills/bundled/php/espocrm-development/references/development-workflow.md +742 -0
  300. claude_mpm/skills/bundled/php/espocrm-development/references/frontend-customization.md +726 -0
  301. claude_mpm/skills/bundled/php/espocrm-development/references/hooks-and-services.md +764 -0
  302. claude_mpm/skills/bundled/php/espocrm-development/references/testing-debugging.md +831 -0
  303. claude_mpm/skills/bundled/pm/mpm/SKILL.md +38 -0
  304. claude_mpm/skills/bundled/pm/mpm-agent-update-workflow/SKILL.md +75 -0
  305. claude_mpm/skills/bundled/pm/mpm-bug-reporting/SKILL.md +248 -0
  306. claude_mpm/skills/bundled/pm/mpm-circuit-breaker-enforcement/SKILL.md +476 -0
  307. claude_mpm/skills/bundled/pm/mpm-config/SKILL.md +29 -0
  308. claude_mpm/skills/bundled/pm/mpm-delegation-patterns/SKILL.md +167 -0
  309. claude_mpm/skills/bundled/pm/mpm-doctor/SKILL.md +53 -0
  310. claude_mpm/skills/bundled/pm/mpm-git-file-tracking/SKILL.md +113 -0
  311. claude_mpm/skills/bundled/pm/mpm-help/SKILL.md +35 -0
  312. claude_mpm/skills/bundled/pm/mpm-init/SKILL.md +125 -0
  313. claude_mpm/skills/bundled/pm/mpm-monitor/SKILL.md +32 -0
  314. claude_mpm/skills/bundled/pm/mpm-organize/SKILL.md +121 -0
  315. claude_mpm/skills/bundled/pm/mpm-postmortem/SKILL.md +22 -0
  316. claude_mpm/skills/bundled/pm/mpm-pr-workflow/SKILL.md +124 -0
  317. claude_mpm/skills/bundled/pm/mpm-session-management/SKILL.md +312 -0
  318. claude_mpm/skills/bundled/pm/mpm-session-resume/SKILL.md +31 -0
  319. claude_mpm/skills/bundled/pm/mpm-status/SKILL.md +37 -0
  320. claude_mpm/skills/bundled/pm/mpm-teaching-mode/SKILL.md +657 -0
  321. claude_mpm/skills/bundled/pm/mpm-ticket-view/SKILL.md +110 -0
  322. claude_mpm/skills/bundled/pm/mpm-ticketing-integration/SKILL.md +154 -0
  323. claude_mpm/skills/bundled/pm/mpm-tool-usage-guide/SKILL.md +386 -0
  324. claude_mpm/skills/bundled/pm/mpm-verification-protocols/SKILL.md +198 -0
  325. claude_mpm/skills/bundled/pm/mpm-version/SKILL.md +21 -0
  326. claude_mpm/skills/bundled/react/flexlayout-react.md +742 -0
  327. claude_mpm/skills/bundled/rust/desktop-applications/SKILL.md +226 -0
  328. claude_mpm/skills/bundled/rust/desktop-applications/references/architecture-patterns.md +901 -0
  329. claude_mpm/skills/bundled/rust/desktop-applications/references/native-gui-frameworks.md +901 -0
  330. claude_mpm/skills/bundled/rust/desktop-applications/references/platform-integration.md +775 -0
  331. claude_mpm/skills/bundled/rust/desktop-applications/references/state-management.md +937 -0
  332. claude_mpm/skills/bundled/rust/desktop-applications/references/tauri-framework.md +770 -0
  333. claude_mpm/skills/bundled/rust/desktop-applications/references/testing-deployment.md +961 -0
  334. claude_mpm/skills/bundled/tauri/tauri-async-patterns.md +495 -0
  335. claude_mpm/skills/bundled/tauri/tauri-build-deploy.md +599 -0
  336. claude_mpm/skills/bundled/tauri/tauri-command-patterns.md +535 -0
  337. claude_mpm/skills/bundled/tauri/tauri-error-handling.md +613 -0
  338. claude_mpm/skills/bundled/tauri/tauri-event-system.md +648 -0
  339. claude_mpm/skills/bundled/tauri/tauri-file-system.md +673 -0
  340. claude_mpm/skills/bundled/tauri/tauri-frontend-integration.md +767 -0
  341. claude_mpm/skills/bundled/tauri/tauri-performance.md +669 -0
  342. claude_mpm/skills/bundled/tauri/tauri-state-management.md +573 -0
  343. claude_mpm/skills/bundled/tauri/tauri-testing.md +384 -0
  344. claude_mpm/skills/bundled/tauri/tauri-window-management.md +628 -0
  345. claude_mpm/skills/bundled/testing/condition-based-waiting/SKILL.md +119 -0
  346. claude_mpm/skills/bundled/testing/condition-based-waiting/references/patterns-and-implementation.md +253 -0
  347. claude_mpm/skills/bundled/testing/test-driven-development/SKILL.md +145 -0
  348. claude_mpm/skills/bundled/testing/test-driven-development/references/anti-patterns.md +543 -0
  349. claude_mpm/skills/bundled/testing/test-driven-development/references/examples.md +741 -0
  350. claude_mpm/skills/bundled/testing/test-driven-development/references/integration.md +470 -0
  351. claude_mpm/skills/bundled/testing/test-driven-development/references/philosophy.md +458 -0
  352. claude_mpm/skills/bundled/testing/test-driven-development/references/workflow.md +639 -0
  353. claude_mpm/skills/bundled/testing/test-quality-inspector/SKILL.md +458 -0
  354. claude_mpm/skills/bundled/testing/test-quality-inspector/examples/example-inspection-report.md +411 -0
  355. claude_mpm/skills/bundled/testing/test-quality-inspector/references/assertion-quality.md +317 -0
  356. claude_mpm/skills/bundled/testing/test-quality-inspector/references/inspection-checklist.md +270 -0
  357. claude_mpm/skills/bundled/testing/test-quality-inspector/references/red-flags.md +436 -0
  358. claude_mpm/skills/bundled/testing/testing-anti-patterns/SKILL.md +140 -0
  359. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/completeness-anti-patterns.md +572 -0
  360. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/core-anti-patterns.md +411 -0
  361. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/detection-guide.md +569 -0
  362. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/tdd-connection.md +695 -0
  363. claude_mpm/skills/bundled/testing/webapp-testing/SKILL.md +184 -0
  364. claude_mpm/skills/bundled/testing/webapp-testing/decision-tree.md +459 -0
  365. claude_mpm/skills/bundled/testing/webapp-testing/playwright-patterns.md +479 -0
  366. claude_mpm/skills/bundled/testing/webapp-testing/reconnaissance-pattern.md +687 -0
  367. claude_mpm/skills/bundled/testing/webapp-testing/server-management.md +758 -0
  368. claude_mpm/skills/bundled/testing/webapp-testing/troubleshooting.md +868 -0
  369. claude_mpm/skills/skill_manager.py +4 -4
  370. claude_mpm/utils/agent_dependency_loader.py +103 -4
  371. claude_mpm/utils/robust_installer.py +45 -24
  372. claude_mpm-5.6.1.dist-info/METADATA +391 -0
  373. {claude_mpm-5.4.55.dist-info → claude_mpm-5.6.1.dist-info}/RECORD +377 -166
  374. claude_mpm/dashboard/static/svelte-build/_app/immutable/assets/0.DWzvg0-y.css +0 -1
  375. claude_mpm/dashboard/static/svelte-build/_app/immutable/assets/2.ThTw9_ym.css +0 -1
  376. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/4TdZjIqw.js +0 -1
  377. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/5shd3_w0.js +0 -24
  378. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BKjSRqUr.js +0 -1
  379. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Da0KfYnO.js +0 -1
  380. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Dfy6j1xT.js +0 -323
  381. claude_mpm/dashboard/static/svelte-build/_app/immutable/entry/start.NWzMBYRp.js +0 -1
  382. claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/2.C0GcWctS.js +0 -1
  383. claude_mpm/hooks/claude_hooks/__pycache__/__init__.cpython-311.pyc +0 -0
  384. claude_mpm/hooks/claude_hooks/__pycache__/correlation_manager.cpython-311.pyc +0 -0
  385. claude_mpm/hooks/claude_hooks/__pycache__/event_handlers.cpython-311.pyc +0 -0
  386. claude_mpm/hooks/claude_hooks/__pycache__/hook_handler.cpython-311.pyc +0 -0
  387. claude_mpm/hooks/claude_hooks/__pycache__/installer.cpython-311.pyc +0 -0
  388. claude_mpm/hooks/claude_hooks/__pycache__/memory_integration.cpython-311.pyc +0 -0
  389. claude_mpm/hooks/claude_hooks/__pycache__/response_tracking.cpython-311.pyc +0 -0
  390. claude_mpm/hooks/claude_hooks/__pycache__/tool_analysis.cpython-311.pyc +0 -0
  391. claude_mpm/hooks/claude_hooks/services/__pycache__/__init__.cpython-311.pyc +0 -0
  392. claude_mpm/hooks/claude_hooks/services/__pycache__/connection_manager_http.cpython-311.pyc +0 -0
  393. claude_mpm/hooks/claude_hooks/services/__pycache__/duplicate_detector.cpython-311.pyc +0 -0
  394. claude_mpm/hooks/claude_hooks/services/__pycache__/state_manager.cpython-311.pyc +0 -0
  395. claude_mpm/hooks/claude_hooks/services/__pycache__/subagent_processor.cpython-311.pyc +0 -0
  396. claude_mpm-5.4.55.dist-info/METADATA +0 -999
  397. {claude_mpm-5.4.55.dist-info → claude_mpm-5.6.1.dist-info}/WHEEL +0 -0
  398. {claude_mpm-5.4.55.dist-info → claude_mpm-5.6.1.dist-info}/entry_points.txt +0 -0
  399. {claude_mpm-5.4.55.dist-info → claude_mpm-5.6.1.dist-info}/licenses/LICENSE +0 -0
  400. {claude_mpm-5.4.55.dist-info → claude_mpm-5.6.1.dist-info}/licenses/LICENSE-FAQ.md +0 -0
  401. {claude_mpm-5.4.55.dist-info → claude_mpm-5.6.1.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,243 @@
1
+ # Auto-Pause Handler Integration Example
2
+
3
+ This document shows how to integrate the `AutoPauseHandler` with the existing `response_tracking.py` hook handler.
4
+
5
+ ## Integration Steps
6
+
7
+ ### 1. Initialize Handler in ResponseTrackingManager
8
+
9
+ Add to `response_tracking.py` around line 30:
10
+
11
+ ```python
12
+ from claude_mpm.hooks.claude_hooks.auto_pause_handler import AutoPauseHandler
13
+
14
+ class ResponseTrackingManager:
15
+ """Manager for response tracking functionality."""
16
+
17
+ def __init__(self):
18
+ self.response_tracker: Optional[Any] = None
19
+ self.response_tracking_enabled = False
20
+ self.track_all_interactions = False
21
+
22
+ # Initialize auto-pause handler
23
+ self.auto_pause_handler: Optional[AutoPauseHandler] = None
24
+ self._initialize_auto_pause()
25
+
26
+ if RESPONSE_TRACKING_AVAILABLE:
27
+ self._initialize_response_tracking()
28
+
29
+ def _initialize_auto_pause(self):
30
+ """Initialize auto-pause handler for context management."""
31
+ try:
32
+ self.auto_pause_handler = AutoPauseHandler()
33
+
34
+ if DEBUG:
35
+ status = self.auto_pause_handler.get_status()
36
+ print(
37
+ f"✅ Auto-pause handler initialized: "
38
+ f"{status['context_percentage']}% context used",
39
+ file=sys.stderr
40
+ )
41
+ except Exception as e:
42
+ if DEBUG:
43
+ print(f"❌ Failed to initialize auto-pause handler: {e}", file=sys.stderr)
44
+ # Don't fail - auto-pause is optional
45
+ ```
46
+
47
+ ### 2. Monitor Token Usage in track_stop_response()
48
+
49
+ Add to `track_stop_response()` method around line 327 (after capturing usage data):
50
+
51
+ ```python
52
+ def track_stop_response(
53
+ self, event: dict, session_id: str, metadata: dict, pending_prompts: dict
54
+ ):
55
+ """Track response for stop events.
56
+
57
+ Captures Claude API stop_reason and usage data for context management.
58
+ """
59
+ if not (self.response_tracking_enabled and self.response_tracker):
60
+ return
61
+
62
+ try:
63
+ # ... existing code ...
64
+
65
+ # Capture Claude API usage data if available
66
+ if "usage" in event:
67
+ usage_data = event["usage"]
68
+ metadata["usage"] = {
69
+ "input_tokens": usage_data.get("input_tokens", 0),
70
+ "output_tokens": usage_data.get("output_tokens", 0),
71
+ "cache_creation_input_tokens": usage_data.get(
72
+ "cache_creation_input_tokens", 0
73
+ ),
74
+ "cache_read_input_tokens": usage_data.get(
75
+ "cache_read_input_tokens", 0
76
+ ),
77
+ }
78
+
79
+ # ===== NEW: Auto-pause integration =====
80
+ if self.auto_pause_handler:
81
+ threshold_crossed = self.auto_pause_handler.on_usage_update(
82
+ metadata["usage"]
83
+ )
84
+
85
+ if threshold_crossed:
86
+ warning = self.auto_pause_handler.emit_threshold_warning(
87
+ threshold_crossed
88
+ )
89
+ print(f"\n⚠️ {warning}", file=sys.stderr)
90
+ # ===== END NEW =====
91
+
92
+ if DEBUG:
93
+ total_tokens = usage_data.get(
94
+ "input_tokens", 0
95
+ ) + usage_data.get("output_tokens", 0)
96
+ print(
97
+ f" - Captured usage: {total_tokens} total tokens",
98
+ file=sys.stderr,
99
+ )
100
+
101
+ # ... rest of existing code ...
102
+ ```
103
+
104
+ ### 3. Record Actions During Pause Mode
105
+
106
+ Add to tool call tracking (in the main hook handler where tools are processed):
107
+
108
+ ```python
109
+ # When a tool is called
110
+ if self.auto_pause_handler and self.auto_pause_handler.is_pause_active():
111
+ self.auto_pause_handler.on_tool_call(tool_name, tool_args)
112
+ ```
113
+
114
+ Add to assistant response tracking:
115
+
116
+ ```python
117
+ # When assistant responds
118
+ if self.auto_pause_handler and self.auto_pause_handler.is_pause_active():
119
+ # Summarize response to avoid storing full content
120
+ summary = response[:200] + "..." if len(response) > 200 else response
121
+ self.auto_pause_handler.on_assistant_response(summary)
122
+ ```
123
+
124
+ ### 4. Finalize Session on End
125
+
126
+ Add to session cleanup/end handler:
127
+
128
+ ```python
129
+ def on_session_end(self):
130
+ """Handle session end."""
131
+ if self.auto_pause_handler:
132
+ session_file = self.auto_pause_handler.on_session_end()
133
+
134
+ if session_file and DEBUG:
135
+ print(f"✅ Session finalized: {session_file}", file=sys.stderr)
136
+ ```
137
+
138
+ ## Testing the Integration
139
+
140
+ ### Test 1: Verify Initialization
141
+
142
+ ```bash
143
+ export CLAUDE_MPM_HOOK_DEBUG=true
144
+ # Run Claude Code - check stderr for initialization message:
145
+ # "✅ Auto-pause handler initialized: 0.0% context used"
146
+ ```
147
+
148
+ ### Test 2: Simulate Threshold Crossing
149
+
150
+ You can test manually by modifying the context usage state file:
151
+
152
+ ```bash
153
+ # View current state
154
+ cat .claude-mpm/state/context-usage.json
155
+
156
+ # Or check status programmatically
157
+ python -c "
158
+ from claude_mpm.hooks.claude_hooks.auto_pause_handler import AutoPauseHandler
159
+ handler = AutoPauseHandler()
160
+ print(handler.get_status())
161
+ "
162
+ ```
163
+
164
+ ### Test 3: Verify Action Recording
165
+
166
+ After auto-pause is triggered:
167
+
168
+ ```bash
169
+ # Check for active pause file
170
+ ls -la .claude-mpm/sessions/ACTIVE-PAUSE.jsonl
171
+
172
+ # View recorded actions
173
+ cat .claude-mpm/sessions/ACTIVE-PAUSE.jsonl | jq .
174
+ ```
175
+
176
+ ### Test 4: Finalize and Check Output
177
+
178
+ ```bash
179
+ # After session ends, check for finalized session files
180
+ ls -la .claude-mpm/sessions/session-*.json
181
+ ls -la .claude-mpm/sessions/session-*.yaml
182
+ ls -la .claude-mpm/sessions/session-*.md
183
+ ```
184
+
185
+ ## Expected Behavior
186
+
187
+ 1. **At 70% context usage**: Caution warning emitted
188
+ 2. **At 85% context usage**: Warning emitted
189
+ 3. **At 90% context usage**:
190
+ - Auto-pause triggered
191
+ - `ACTIVE-PAUSE.jsonl` created
192
+ - Actions recorded incrementally
193
+ 4. **At 95% context usage**: Critical warning emitted
194
+ 5. **On session end**:
195
+ - Pause finalized
196
+ - Session files created (JSON, YAML, MD)
197
+ - `ACTIVE-PAUSE.jsonl` archived
198
+
199
+ ## Debug Output Examples
200
+
201
+ ```
202
+ ✅ Auto-pause handler initialized: 0.0% context used
203
+ - Captured usage: 15234 total tokens
204
+ Context threshold crossed: caution (72.3%)
205
+ ⚠️ Context usage at 70%. Consider wrapping up current work. (72.3%)
206
+ - Captured usage: 32451 total tokens
207
+ Context threshold crossed: warning (86.7%)
208
+ ⚠️ Context usage at 85%. Session nearing capacity. (86.7%)
209
+ - Captured usage: 45678 total tokens
210
+ Context threshold crossed: auto_pause (91.2%)
211
+ ✅ Auto-pause triggered: session-20260106-143022 (91.2% context used)
212
+ ⚠️ Context usage at 90%. Auto-pause activated. Actions are being recorded for session continuity. (91.2%)
213
+ Recorded tool call during pause: Read
214
+ Recorded assistant response during pause (length: 245)
215
+ ✅ Session finalized: session-20260106-143022.json
216
+ ```
217
+
218
+ ## Error Handling
219
+
220
+ The integration is designed to be resilient:
221
+
222
+ - Auto-pause failures don't break the main hook flow
223
+ - All errors are logged to stderr in DEBUG mode
224
+ - Missing dependencies are handled gracefully
225
+ - Invalid state files trigger default initialization
226
+
227
+ ## Monitoring
228
+
229
+ Check auto-pause status programmatically:
230
+
231
+ ```python
232
+ from claude_mpm.hooks.claude_hooks.auto_pause_handler import AutoPauseHandler
233
+
234
+ handler = AutoPauseHandler()
235
+ status = handler.get_status()
236
+
237
+ print(f"Context: {status['context_percentage']}%")
238
+ print(f"Threshold: {status['threshold_reached']}")
239
+ print(f"Pause active: {status['pause_active']}")
240
+
241
+ if status.get('pause_details'):
242
+ print(f"Actions recorded: {status['pause_details']['action_count']}")
243
+ ```
@@ -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).