claude-mpm 4.25.10__py3-none-any.whl → 5.1.8__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of claude-mpm might be problematic. Click here for more details.
- claude_mpm/VERSION +1 -1
- claude_mpm/agents/BASE_PM.md +12 -0
- claude_mpm/agents/PM_INSTRUCTIONS.md +1055 -2230
- claude_mpm/agents/PM_INSTRUCTIONS_TEACH.md +1322 -0
- claude_mpm/agents/WORKFLOW.md +4 -4
- claude_mpm/agents/__init__.py +6 -0
- claude_mpm/agents/agent_loader.py +1 -4
- claude_mpm/agents/base_agent_loader.py +10 -35
- claude_mpm/agents/templates/{circuit_breakers.md → circuit-breakers.md} +576 -66
- claude_mpm/agents/templates/context-management-examples.md +544 -0
- claude_mpm/agents/templates/pr-workflow-examples.md +427 -0
- claude_mpm/agents/templates/research-gate-examples.md +669 -0
- claude_mpm/agents/templates/structured-questions-examples.md +615 -0
- claude_mpm/agents/templates/ticket-completeness-examples.md +139 -0
- claude_mpm/agents/templates/ticketing-examples.md +277 -0
- claude_mpm/cli/__init__.py +28 -3
- claude_mpm/cli/commands/__init__.py +2 -0
- claude_mpm/cli/commands/agent_source.py +774 -0
- claude_mpm/cli/commands/agent_state_manager.py +188 -30
- claude_mpm/cli/commands/agents.py +959 -36
- claude_mpm/cli/commands/agents_cleanup.py +210 -0
- claude_mpm/cli/commands/agents_discover.py +338 -0
- claude_mpm/cli/commands/auto_configure.py +537 -239
- claude_mpm/cli/commands/config.py +7 -4
- claude_mpm/cli/commands/configure.py +924 -45
- claude_mpm/cli/commands/configure_navigation.py +63 -46
- claude_mpm/cli/commands/doctor.py +10 -2
- claude_mpm/cli/commands/local_deploy.py +1 -4
- claude_mpm/cli/commands/postmortem.py +401 -0
- claude_mpm/cli/commands/run.py +1 -39
- claude_mpm/cli/commands/skill_source.py +694 -0
- claude_mpm/cli/commands/skills.py +322 -19
- claude_mpm/cli/executor.py +22 -3
- claude_mpm/cli/interactive/agent_wizard.py +1028 -43
- claude_mpm/cli/parsers/agent_source_parser.py +171 -0
- claude_mpm/cli/parsers/agents_parser.py +256 -4
- claude_mpm/cli/parsers/auto_configure_parser.py +13 -0
- claude_mpm/cli/parsers/base_parser.py +25 -0
- claude_mpm/cli/parsers/config_parser.py +96 -43
- claude_mpm/cli/parsers/skill_source_parser.py +169 -0
- claude_mpm/cli/parsers/skills_parser.py +7 -0
- claude_mpm/cli/parsers/source_parser.py +138 -0
- claude_mpm/cli/startup.py +456 -103
- claude_mpm/cli/startup_display.py +4 -4
- claude_mpm/commands/{mpm-auto-configure.md → mpm-agents-auto-configure.md} +9 -0
- claude_mpm/commands/mpm-agents-detect.md +9 -0
- claude_mpm/commands/{mpm-agents.md → mpm-agents-list.md} +9 -0
- claude_mpm/commands/mpm-agents-recommend.md +9 -0
- claude_mpm/commands/{mpm-config.md → mpm-config-view.md} +9 -0
- claude_mpm/commands/mpm-doctor.md +9 -0
- claude_mpm/commands/mpm-help.md +14 -2
- claude_mpm/commands/mpm-init.md +9 -0
- claude_mpm/commands/mpm-monitor.md +9 -0
- claude_mpm/commands/mpm-postmortem.md +123 -0
- claude_mpm/commands/{mpm-resume.md → mpm-session-resume.md} +9 -0
- claude_mpm/commands/mpm-status.md +9 -0
- claude_mpm/commands/{mpm-organize.md → mpm-ticket-organize.md} +9 -0
- claude_mpm/commands/mpm-ticket-view.md +552 -0
- claude_mpm/commands/mpm-version.md +9 -0
- claude_mpm/commands/mpm.md +10 -0
- claude_mpm/config/agent_presets.py +488 -0
- claude_mpm/config/agent_sources.py +325 -0
- claude_mpm/config/skill_presets.py +392 -0
- claude_mpm/config/skill_sources.py +590 -0
- claude_mpm/constants.py +1 -0
- claude_mpm/core/claude_runner.py +5 -34
- claude_mpm/core/config.py +16 -0
- claude_mpm/core/framework/__init__.py +3 -16
- claude_mpm/core/framework/loaders/file_loader.py +54 -101
- claude_mpm/core/framework/loaders/instruction_loader.py +25 -5
- claude_mpm/core/interactive_session.py +83 -7
- claude_mpm/core/oneshot_session.py +71 -8
- claude_mpm/core/protocols/__init__.py +23 -0
- claude_mpm/core/protocols/runner_protocol.py +103 -0
- claude_mpm/core/protocols/session_protocol.py +131 -0
- claude_mpm/core/shared/singleton_manager.py +11 -4
- claude_mpm/core/system_context.py +38 -0
- claude_mpm/core/unified_config.py +22 -0
- claude_mpm/experimental/cli_enhancements.py +1 -5
- claude_mpm/hooks/claude_hooks/__pycache__/__init__.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/event_handlers.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/hook_handler.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/memory_integration.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/response_tracking.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/tool_analysis.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/memory_integration.py +12 -1
- claude_mpm/hooks/claude_hooks/services/__pycache__/__init__.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/connection_manager_http.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/duplicate_detector.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/state_manager.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/subagent_processor.cpython-313.pyc +0 -0
- claude_mpm/hooks/failure_learning/__init__.py +2 -8
- claude_mpm/hooks/failure_learning/failure_detection_hook.py +1 -6
- claude_mpm/hooks/failure_learning/fix_detection_hook.py +1 -6
- claude_mpm/hooks/failure_learning/learning_extraction_hook.py +1 -6
- claude_mpm/hooks/kuzu_response_hook.py +1 -5
- claude_mpm/models/git_repository.py +198 -0
- claude_mpm/services/agents/agent_builder.py +45 -9
- claude_mpm/services/agents/agent_preset_service.py +238 -0
- claude_mpm/services/agents/agent_selection_service.py +484 -0
- claude_mpm/services/agents/auto_deploy_index_parser.py +569 -0
- claude_mpm/services/agents/cache_git_manager.py +621 -0
- claude_mpm/services/agents/deployment/agent_deployment.py +126 -2
- claude_mpm/services/agents/deployment/agent_discovery_service.py +105 -73
- claude_mpm/services/agents/deployment/agent_lifecycle_manager.py +1 -5
- claude_mpm/services/agents/deployment/agent_restore_handler.py +1 -4
- claude_mpm/services/agents/deployment/agent_template_builder.py +236 -15
- claude_mpm/services/agents/deployment/agents_directory_resolver.py +101 -15
- claude_mpm/services/agents/deployment/async_agent_deployment.py +2 -1
- claude_mpm/services/agents/deployment/multi_source_deployment_service.py +115 -15
- claude_mpm/services/agents/deployment/refactored_agent_deployment_service.py +1 -4
- claude_mpm/services/agents/deployment/remote_agent_discovery_service.py +363 -0
- claude_mpm/services/agents/deployment/single_agent_deployer.py +2 -2
- claude_mpm/services/agents/deployment/system_instructions_deployer.py +168 -46
- claude_mpm/services/agents/deployment/validation/deployment_validator.py +2 -2
- claude_mpm/services/agents/git_source_manager.py +629 -0
- claude_mpm/services/agents/loading/framework_agent_loader.py +1 -4
- claude_mpm/services/agents/local_template_manager.py +47 -9
- claude_mpm/services/agents/single_tier_deployment_service.py +696 -0
- claude_mpm/services/agents/sources/__init__.py +13 -0
- claude_mpm/services/agents/sources/agent_sync_state.py +516 -0
- claude_mpm/services/agents/sources/git_source_sync_service.py +1087 -0
- claude_mpm/services/agents/startup_sync.py +239 -0
- claude_mpm/services/agents/toolchain_detector.py +474 -0
- claude_mpm/services/analysis/__init__.py +25 -0
- claude_mpm/services/analysis/postmortem_reporter.py +474 -0
- claude_mpm/services/analysis/postmortem_service.py +765 -0
- claude_mpm/services/command_deployment_service.py +200 -6
- claude_mpm/services/core/base.py +7 -2
- claude_mpm/services/core/interfaces/__init__.py +1 -3
- claude_mpm/services/core/interfaces/health.py +1 -4
- claude_mpm/services/core/models/__init__.py +2 -11
- claude_mpm/services/diagnostics/checks/__init__.py +4 -0
- claude_mpm/services/diagnostics/checks/agent_sources_check.py +577 -0
- claude_mpm/services/diagnostics/checks/mcp_services_check.py +7 -15
- claude_mpm/services/diagnostics/checks/skill_sources_check.py +587 -0
- claude_mpm/services/diagnostics/diagnostic_runner.py +9 -0
- claude_mpm/services/diagnostics/doctor_reporter.py +34 -6
- claude_mpm/services/git/__init__.py +21 -0
- claude_mpm/services/git/git_operations_service.py +494 -0
- claude_mpm/services/github/__init__.py +21 -0
- claude_mpm/services/github/github_cli_service.py +397 -0
- claude_mpm/services/infrastructure/monitoring/__init__.py +1 -5
- claude_mpm/services/infrastructure/monitoring/aggregator.py +1 -6
- claude_mpm/services/instructions/__init__.py +9 -0
- claude_mpm/services/instructions/instruction_cache_service.py +374 -0
- claude_mpm/services/local_ops/__init__.py +3 -13
- claude_mpm/services/local_ops/health_checks/__init__.py +1 -3
- claude_mpm/services/local_ops/health_manager.py +1 -4
- claude_mpm/services/mcp_config_manager.py +75 -145
- claude_mpm/services/mcp_gateway/core/process_pool.py +22 -16
- claude_mpm/services/mcp_gateway/server/mcp_gateway.py +1 -6
- claude_mpm/services/mcp_service_verifier.py +6 -3
- claude_mpm/services/monitor/daemon.py +28 -8
- claude_mpm/services/monitor/daemon_manager.py +96 -19
- claude_mpm/services/pr/__init__.py +14 -0
- claude_mpm/services/pr/pr_template_service.py +329 -0
- claude_mpm/services/project/project_organizer.py +4 -0
- claude_mpm/services/runner_configuration_service.py +16 -3
- claude_mpm/services/session_management_service.py +16 -4
- claude_mpm/services/skills/__init__.py +18 -0
- claude_mpm/services/skills/git_skill_source_manager.py +1169 -0
- claude_mpm/services/skills/skill_discovery_service.py +568 -0
- claude_mpm/services/socketio/server/core.py +1 -4
- claude_mpm/services/socketio/server/main.py +1 -3
- claude_mpm/services/unified/deployment_strategies/vercel.py +1 -5
- claude_mpm/services/unified/unified_deployment.py +1 -5
- claude_mpm/services/visualization/__init__.py +1 -5
- claude_mpm/templates/questions/__init__.py +2 -7
- claude_mpm/templates/questions/pr_strategy.py +1 -4
- claude_mpm/templates/questions/project_init.py +1 -4
- claude_mpm/templates/questions/ticket_mgmt.py +1 -4
- claude_mpm/utils/agent_dependency_loader.py +77 -10
- claude_mpm/utils/agent_filters.py +288 -0
- claude_mpm/utils/gitignore.py +3 -0
- claude_mpm/utils/migration.py +372 -0
- claude_mpm/utils/progress.py +387 -0
- {claude_mpm-4.25.10.dist-info → claude_mpm-5.1.8.dist-info}/METADATA +356 -112
- {claude_mpm-4.25.10.dist-info → claude_mpm-5.1.8.dist-info}/RECORD +188 -439
- claude_mpm/agents/templates/agent-manager.json +0 -273
- claude_mpm/agents/templates/agentic-coder-optimizer.json +0 -248
- claude_mpm/agents/templates/api_qa.json +0 -183
- claude_mpm/agents/templates/clerk-ops.json +0 -235
- claude_mpm/agents/templates/code_analyzer.json +0 -101
- claude_mpm/agents/templates/content-agent.json +0 -358
- claude_mpm/agents/templates/dart_engineer.json +0 -307
- claude_mpm/agents/templates/data_engineer.json +0 -225
- claude_mpm/agents/templates/documentation.json +0 -238
- claude_mpm/agents/templates/engineer.json +0 -210
- claude_mpm/agents/templates/gcp_ops_agent.json +0 -253
- claude_mpm/agents/templates/golang_engineer.json +0 -270
- claude_mpm/agents/templates/imagemagick.json +0 -264
- claude_mpm/agents/templates/java_engineer.json +0 -346
- claude_mpm/agents/templates/javascript_engineer_agent.json +0 -380
- claude_mpm/agents/templates/local_ops_agent.json +0 -1840
- claude_mpm/agents/templates/memory_manager.json +0 -158
- claude_mpm/agents/templates/nextjs_engineer.json +0 -285
- claude_mpm/agents/templates/ops.json +0 -185
- claude_mpm/agents/templates/php-engineer.json +0 -287
- claude_mpm/agents/templates/product_owner.json +0 -338
- claude_mpm/agents/templates/project_organizer.json +0 -144
- claude_mpm/agents/templates/prompt-engineer.json +0 -737
- claude_mpm/agents/templates/python_engineer.json +0 -387
- claude_mpm/agents/templates/qa.json +0 -243
- claude_mpm/agents/templates/react_engineer.json +0 -239
- claude_mpm/agents/templates/refactoring_engineer.json +0 -276
- claude_mpm/agents/templates/research.json +0 -258
- claude_mpm/agents/templates/ruby-engineer.json +0 -280
- claude_mpm/agents/templates/rust_engineer.json +0 -275
- claude_mpm/agents/templates/security.json +0 -202
- claude_mpm/agents/templates/svelte-engineer.json +0 -225
- claude_mpm/agents/templates/tauri_engineer.json +0 -274
- claude_mpm/agents/templates/ticketing.json +0 -181
- claude_mpm/agents/templates/typescript_engineer.json +0 -285
- claude_mpm/agents/templates/vercel_ops_agent.json +0 -412
- claude_mpm/agents/templates/version_control.json +0 -159
- claude_mpm/agents/templates/web_qa.json +0 -400
- claude_mpm/agents/templates/web_ui.json +0 -189
- claude_mpm/cli/README.md +0 -253
- claude_mpm/cli/commands/mcp_install_commands.py.backup +0 -284
- claude_mpm/cli/commands/mpm_init/README.md +0 -365
- claude_mpm/cli_module/refactoring_guide.md +0 -253
- claude_mpm/commands/mpm-tickets.md +0 -151
- claude_mpm/config/agent_capabilities.yaml +0 -658
- claude_mpm/config/async_logging_config.yaml +0 -145
- claude_mpm/core/.claude-mpm/logs/hooks_20250730.log +0 -34
- claude_mpm/d2/.gitignore +0 -22
- claude_mpm/d2/ARCHITECTURE_COMPARISON.md +0 -273
- claude_mpm/d2/FLASK_INTEGRATION.md +0 -156
- claude_mpm/d2/IMPLEMENTATION_SUMMARY.md +0 -452
- claude_mpm/d2/QUICKSTART.md +0 -186
- claude_mpm/d2/README.md +0 -232
- claude_mpm/d2/STORE_FIX_SUMMARY.md +0 -167
- claude_mpm/d2/SVELTE5_STORES_GUIDE.md +0 -180
- claude_mpm/d2/TESTING.md +0 -288
- claude_mpm/d2/index.html +0 -118
- claude_mpm/d2/package.json +0 -19
- claude_mpm/d2/src/App.svelte +0 -110
- claude_mpm/d2/src/components/Header.svelte +0 -153
- claude_mpm/d2/src/components/MainContent.svelte +0 -74
- claude_mpm/d2/src/components/Sidebar.svelte +0 -85
- claude_mpm/d2/src/components/tabs/EventsTab.svelte +0 -326
- claude_mpm/d2/src/lib/socketio.js +0 -144
- claude_mpm/d2/src/main.js +0 -7
- claude_mpm/d2/src/stores/events.js +0 -114
- claude_mpm/d2/src/stores/socket.js +0 -108
- claude_mpm/d2/src/stores/theme.js +0 -65
- claude_mpm/d2/svelte.config.js +0 -12
- claude_mpm/d2/vite.config.js +0 -15
- claude_mpm/dashboard/.claude-mpm/memories/README.md +0 -36
- claude_mpm/dashboard/BUILD_NUMBER +0 -1
- claude_mpm/dashboard/README.md +0 -121
- claude_mpm/dashboard/VERSION +0 -1
- claude_mpm/dashboard/react/components/DataInspector/DataInspector.module.css +0 -188
- claude_mpm/dashboard/react/components/DataInspector/DataInspector.tsx +0 -273
- claude_mpm/dashboard/react/components/ErrorBoundary.tsx +0 -75
- claude_mpm/dashboard/react/components/EventViewer/EventViewer.module.css +0 -156
- claude_mpm/dashboard/react/components/EventViewer/EventViewer.tsx +0 -141
- claude_mpm/dashboard/react/components/shared/ConnectionStatus.module.css +0 -38
- claude_mpm/dashboard/react/components/shared/ConnectionStatus.tsx +0 -36
- claude_mpm/dashboard/react/components/shared/FilterBar.module.css +0 -92
- claude_mpm/dashboard/react/components/shared/FilterBar.tsx +0 -89
- claude_mpm/dashboard/react/contexts/DashboardContext.tsx +0 -215
- claude_mpm/dashboard/react/entries/events.tsx +0 -165
- claude_mpm/dashboard/react/hooks/useEvents.ts +0 -191
- claude_mpm/dashboard/react/hooks/useSocket.ts +0 -225
- claude_mpm/dashboard/static/archive/activity_dashboard_fixed.html +0 -248
- claude_mpm/dashboard/static/built/REFACTORING_SUMMARY.md +0 -170
- claude_mpm/dashboard/static/built/assets/events.DjpNxWNo.css +0 -1
- claude_mpm/dashboard/static/built/components/activity-tree.js +0 -2
- claude_mpm/dashboard/static/built/components/activity-tree.js.map +0 -1
- claude_mpm/dashboard/static/built/components/agent-hierarchy.js +0 -777
- claude_mpm/dashboard/static/built/components/agent-inference.js +0 -2
- claude_mpm/dashboard/static/built/components/agent-inference.js.map +0 -1
- claude_mpm/dashboard/static/built/components/build-tracker.js +0 -333
- claude_mpm/dashboard/static/built/components/code-simple.js +0 -857
- claude_mpm/dashboard/static/built/components/code-tree/tree-breadcrumb.js +0 -353
- claude_mpm/dashboard/static/built/components/code-tree/tree-constants.js +0 -235
- claude_mpm/dashboard/static/built/components/code-tree/tree-search.js +0 -409
- claude_mpm/dashboard/static/built/components/code-tree/tree-utils.js +0 -435
- claude_mpm/dashboard/static/built/components/code-tree.js +0 -2
- claude_mpm/dashboard/static/built/components/code-tree.js.map +0 -1
- claude_mpm/dashboard/static/built/components/code-viewer.js +0 -2
- claude_mpm/dashboard/static/built/components/code-viewer.js.map +0 -1
- claude_mpm/dashboard/static/built/components/connection-debug.js +0 -654
- claude_mpm/dashboard/static/built/components/diff-viewer.js +0 -891
- claude_mpm/dashboard/static/built/components/event-processor.js +0 -2
- claude_mpm/dashboard/static/built/components/event-processor.js.map +0 -1
- claude_mpm/dashboard/static/built/components/event-viewer.js +0 -2
- claude_mpm/dashboard/static/built/components/event-viewer.js.map +0 -1
- claude_mpm/dashboard/static/built/components/export-manager.js +0 -2
- claude_mpm/dashboard/static/built/components/export-manager.js.map +0 -1
- claude_mpm/dashboard/static/built/components/file-change-tracker.js +0 -443
- claude_mpm/dashboard/static/built/components/file-change-viewer.js +0 -690
- claude_mpm/dashboard/static/built/components/file-tool-tracker.js +0 -2
- claude_mpm/dashboard/static/built/components/file-tool-tracker.js.map +0 -1
- claude_mpm/dashboard/static/built/components/file-viewer.js +0 -2
- claude_mpm/dashboard/static/built/components/file-viewer.js.map +0 -1
- claude_mpm/dashboard/static/built/components/hud-library-loader.js +0 -2
- claude_mpm/dashboard/static/built/components/hud-library-loader.js.map +0 -1
- claude_mpm/dashboard/static/built/components/hud-manager.js +0 -2
- claude_mpm/dashboard/static/built/components/hud-manager.js.map +0 -1
- claude_mpm/dashboard/static/built/components/hud-visualizer.js +0 -2
- claude_mpm/dashboard/static/built/components/hud-visualizer.js.map +0 -1
- claude_mpm/dashboard/static/built/components/module-viewer.js +0 -2
- claude_mpm/dashboard/static/built/components/module-viewer.js.map +0 -1
- claude_mpm/dashboard/static/built/components/nav-bar.js +0 -145
- claude_mpm/dashboard/static/built/components/page-structure.js +0 -429
- claude_mpm/dashboard/static/built/components/session-manager.js +0 -2
- claude_mpm/dashboard/static/built/components/session-manager.js.map +0 -1
- claude_mpm/dashboard/static/built/components/socket-manager.js +0 -2
- claude_mpm/dashboard/static/built/components/socket-manager.js.map +0 -1
- claude_mpm/dashboard/static/built/components/ui-state-manager.js +0 -2
- claude_mpm/dashboard/static/built/components/ui-state-manager.js.map +0 -1
- claude_mpm/dashboard/static/built/components/unified-data-viewer.js +0 -2
- claude_mpm/dashboard/static/built/components/unified-data-viewer.js.map +0 -1
- claude_mpm/dashboard/static/built/components/working-directory.js +0 -2
- claude_mpm/dashboard/static/built/components/working-directory.js.map +0 -1
- claude_mpm/dashboard/static/built/connection-manager.js +0 -536
- claude_mpm/dashboard/static/built/dashboard.js +0 -2
- claude_mpm/dashboard/static/built/dashboard.js.map +0 -1
- claude_mpm/dashboard/static/built/extension-error-handler.js +0 -164
- claude_mpm/dashboard/static/built/react/events.js +0 -30
- claude_mpm/dashboard/static/built/react/events.js.map +0 -1
- claude_mpm/dashboard/static/built/shared/dom-helpers.js +0 -396
- claude_mpm/dashboard/static/built/shared/event-bus.js +0 -330
- claude_mpm/dashboard/static/built/shared/event-filter-service.js +0 -540
- claude_mpm/dashboard/static/built/shared/logger.js +0 -385
- claude_mpm/dashboard/static/built/shared/page-structure.js +0 -249
- claude_mpm/dashboard/static/built/shared/tooltip-service.js +0 -253
- claude_mpm/dashboard/static/built/socket-client.js +0 -2
- claude_mpm/dashboard/static/built/socket-client.js.map +0 -1
- claude_mpm/dashboard/static/built/tab-isolation-fix.js +0 -185
- claude_mpm/dashboard/static/events.html +0 -607
- claude_mpm/dashboard/static/index.html +0 -635
- claude_mpm/dashboard/static/js/REFACTORING_SUMMARY.md +0 -170
- claude_mpm/dashboard/static/js/shared/dom-helpers.js +0 -396
- claude_mpm/dashboard/static/js/shared/event-bus.js +0 -330
- claude_mpm/dashboard/static/js/shared/logger.js +0 -385
- claude_mpm/dashboard/static/js/shared/tooltip-service.js +0 -253
- claude_mpm/dashboard/static/js/stores/dashboard-store.js +0 -562
- claude_mpm/dashboard/static/legacy/activity.html +0 -736
- claude_mpm/dashboard/static/legacy/agents.html +0 -786
- claude_mpm/dashboard/static/legacy/files.html +0 -747
- claude_mpm/dashboard/static/legacy/tools.html +0 -831
- claude_mpm/dashboard/static/monitors.html +0 -431
- claude_mpm/dashboard/static/navigation-test-results.md +0 -118
- claude_mpm/dashboard/static/production/events.html +0 -659
- claude_mpm/dashboard/static/production/main.html +0 -698
- claude_mpm/dashboard/static/production/monitors.html +0 -483
- claude_mpm/dashboard/static/test-archive/dashboard.html +0 -635
- claude_mpm/dashboard/static/test-archive/debug-events.html +0 -147
- claude_mpm/dashboard/static/test-archive/test-navigation.html +0 -256
- claude_mpm/dashboard/static/test-archive/test-react-exports.html +0 -180
- claude_mpm/dashboard/templates/.claude-mpm/memories/README.md +0 -36
- claude_mpm/dashboard/templates/.claude-mpm/memories/engineer_agent.md +0 -39
- claude_mpm/dashboard/templates/.claude-mpm/memories/version_control_agent.md +0 -38
- claude_mpm/hooks/README.md +0 -143
- claude_mpm/hooks/templates/README.md +0 -180
- claude_mpm/hooks/templates/settings.json.example +0 -147
- claude_mpm/schemas/agent_schema.json +0 -596
- claude_mpm/schemas/frontmatter_schema.json +0 -165
- claude_mpm/services/event_bus/README.md +0 -244
- claude_mpm/services/events/README.md +0 -303
- claude_mpm/services/framework_claude_md_generator/README.md +0 -119
- claude_mpm/services/mcp_gateway/README.md +0 -185
- claude_mpm/services/socketio/handlers/connection.py.backup +0 -217
- claude_mpm/services/socketio/handlers/hook.py.backup +0 -154
- claude_mpm/services/static/.gitkeep +0 -2
- claude_mpm/services/version_control/VERSION +0 -1
- claude_mpm/skills/bundled/.gitkeep +0 -2
- claude_mpm/skills/bundled/collaboration/brainstorming/SKILL.md +0 -79
- claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/SKILL.md +0 -178
- claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/agent-prompts.md +0 -577
- claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/coordination-patterns.md +0 -467
- claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/examples.md +0 -537
- claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/troubleshooting.md +0 -730
- claude_mpm/skills/bundled/collaboration/git-worktrees.md +0 -317
- claude_mpm/skills/bundled/collaboration/requesting-code-review/SKILL.md +0 -112
- claude_mpm/skills/bundled/collaboration/requesting-code-review/references/code-reviewer-template.md +0 -146
- claude_mpm/skills/bundled/collaboration/requesting-code-review/references/review-examples.md +0 -412
- claude_mpm/skills/bundled/collaboration/stacked-prs.md +0 -251
- claude_mpm/skills/bundled/collaboration/writing-plans/SKILL.md +0 -81
- claude_mpm/skills/bundled/collaboration/writing-plans/references/best-practices.md +0 -362
- claude_mpm/skills/bundled/collaboration/writing-plans/references/plan-structure-templates.md +0 -312
- claude_mpm/skills/bundled/debugging/root-cause-tracing/SKILL.md +0 -152
- claude_mpm/skills/bundled/debugging/root-cause-tracing/find-polluter.sh +0 -63
- claude_mpm/skills/bundled/debugging/root-cause-tracing/references/advanced-techniques.md +0 -668
- claude_mpm/skills/bundled/debugging/root-cause-tracing/references/examples.md +0 -587
- claude_mpm/skills/bundled/debugging/root-cause-tracing/references/integration.md +0 -438
- claude_mpm/skills/bundled/debugging/root-cause-tracing/references/tracing-techniques.md +0 -391
- claude_mpm/skills/bundled/debugging/systematic-debugging/CREATION-LOG.md +0 -119
- claude_mpm/skills/bundled/debugging/systematic-debugging/SKILL.md +0 -148
- claude_mpm/skills/bundled/debugging/systematic-debugging/references/anti-patterns.md +0 -483
- claude_mpm/skills/bundled/debugging/systematic-debugging/references/examples.md +0 -452
- claude_mpm/skills/bundled/debugging/systematic-debugging/references/troubleshooting.md +0 -449
- claude_mpm/skills/bundled/debugging/systematic-debugging/references/workflow.md +0 -411
- claude_mpm/skills/bundled/debugging/systematic-debugging/test-academic.md +0 -14
- claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-1.md +0 -58
- claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-2.md +0 -68
- claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-3.md +0 -69
- claude_mpm/skills/bundled/debugging/verification-before-completion/SKILL.md +0 -131
- claude_mpm/skills/bundled/debugging/verification-before-completion/references/gate-function.md +0 -325
- claude_mpm/skills/bundled/debugging/verification-before-completion/references/integration-and-workflows.md +0 -490
- claude_mpm/skills/bundled/debugging/verification-before-completion/references/red-flags-and-failures.md +0 -425
- claude_mpm/skills/bundled/debugging/verification-before-completion/references/verification-patterns.md +0 -499
- claude_mpm/skills/bundled/infrastructure/env-manager/INTEGRATION.md +0 -611
- claude_mpm/skills/bundled/infrastructure/env-manager/README.md +0 -596
- claude_mpm/skills/bundled/infrastructure/env-manager/SKILL.md +0 -260
- claude_mpm/skills/bundled/infrastructure/env-manager/examples/nextjs-env-structure.md +0 -315
- claude_mpm/skills/bundled/infrastructure/env-manager/references/frameworks.md +0 -436
- claude_mpm/skills/bundled/infrastructure/env-manager/references/security.md +0 -433
- claude_mpm/skills/bundled/infrastructure/env-manager/references/synchronization.md +0 -452
- claude_mpm/skills/bundled/infrastructure/env-manager/references/troubleshooting.md +0 -404
- claude_mpm/skills/bundled/infrastructure/env-manager/references/validation.md +0 -420
- claude_mpm/skills/bundled/main/artifacts-builder/LICENSE.txt +0 -202
- claude_mpm/skills/bundled/main/artifacts-builder/SKILL.md +0 -86
- claude_mpm/skills/bundled/main/artifacts-builder/scripts/bundle-artifact.sh +0 -54
- claude_mpm/skills/bundled/main/artifacts-builder/scripts/init-artifact.sh +0 -322
- claude_mpm/skills/bundled/main/artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
- claude_mpm/skills/bundled/main/internal-comms/LICENSE.txt +0 -202
- claude_mpm/skills/bundled/main/internal-comms/SKILL.md +0 -43
- claude_mpm/skills/bundled/main/internal-comms/examples/3p-updates.md +0 -47
- claude_mpm/skills/bundled/main/internal-comms/examples/company-newsletter.md +0 -65
- claude_mpm/skills/bundled/main/internal-comms/examples/faq-answers.md +0 -30
- claude_mpm/skills/bundled/main/internal-comms/examples/general-comms.md +0 -16
- claude_mpm/skills/bundled/main/mcp-builder/LICENSE.txt +0 -202
- claude_mpm/skills/bundled/main/mcp-builder/SKILL.md +0 -160
- claude_mpm/skills/bundled/main/mcp-builder/reference/design_principles.md +0 -412
- claude_mpm/skills/bundled/main/mcp-builder/reference/evaluation.md +0 -602
- claude_mpm/skills/bundled/main/mcp-builder/reference/mcp_best_practices.md +0 -915
- claude_mpm/skills/bundled/main/mcp-builder/reference/node_mcp_server.md +0 -916
- claude_mpm/skills/bundled/main/mcp-builder/reference/python_mcp_server.md +0 -752
- claude_mpm/skills/bundled/main/mcp-builder/reference/workflow.md +0 -1237
- claude_mpm/skills/bundled/main/mcp-builder/scripts/example_evaluation.xml +0 -22
- claude_mpm/skills/bundled/main/mcp-builder/scripts/requirements.txt +0 -2
- claude_mpm/skills/bundled/main/skill-creator/LICENSE.txt +0 -202
- claude_mpm/skills/bundled/main/skill-creator/SKILL.md +0 -189
- claude_mpm/skills/bundled/main/skill-creator/references/best-practices.md +0 -500
- claude_mpm/skills/bundled/main/skill-creator/references/creation-workflow.md +0 -464
- claude_mpm/skills/bundled/main/skill-creator/references/examples.md +0 -619
- claude_mpm/skills/bundled/main/skill-creator/references/progressive-disclosure.md +0 -437
- claude_mpm/skills/bundled/main/skill-creator/references/skill-structure.md +0 -231
- claude_mpm/skills/bundled/php/espocrm-development/SKILL.md +0 -170
- claude_mpm/skills/bundled/php/espocrm-development/references/architecture.md +0 -602
- claude_mpm/skills/bundled/php/espocrm-development/references/common-tasks.md +0 -821
- claude_mpm/skills/bundled/php/espocrm-development/references/development-workflow.md +0 -742
- claude_mpm/skills/bundled/php/espocrm-development/references/frontend-customization.md +0 -726
- claude_mpm/skills/bundled/php/espocrm-development/references/hooks-and-services.md +0 -764
- claude_mpm/skills/bundled/php/espocrm-development/references/testing-debugging.md +0 -831
- claude_mpm/skills/bundled/react/flexlayout-react.md +0 -742
- claude_mpm/skills/bundled/rust/desktop-applications/SKILL.md +0 -226
- claude_mpm/skills/bundled/rust/desktop-applications/references/architecture-patterns.md +0 -901
- claude_mpm/skills/bundled/rust/desktop-applications/references/native-gui-frameworks.md +0 -901
- claude_mpm/skills/bundled/rust/desktop-applications/references/platform-integration.md +0 -775
- claude_mpm/skills/bundled/rust/desktop-applications/references/state-management.md +0 -937
- claude_mpm/skills/bundled/rust/desktop-applications/references/tauri-framework.md +0 -770
- claude_mpm/skills/bundled/rust/desktop-applications/references/testing-deployment.md +0 -961
- claude_mpm/skills/bundled/tauri/tauri-async-patterns.md +0 -495
- claude_mpm/skills/bundled/tauri/tauri-build-deploy.md +0 -599
- claude_mpm/skills/bundled/tauri/tauri-command-patterns.md +0 -535
- claude_mpm/skills/bundled/tauri/tauri-error-handling.md +0 -613
- claude_mpm/skills/bundled/tauri/tauri-event-system.md +0 -648
- claude_mpm/skills/bundled/tauri/tauri-file-system.md +0 -673
- claude_mpm/skills/bundled/tauri/tauri-frontend-integration.md +0 -767
- claude_mpm/skills/bundled/tauri/tauri-performance.md +0 -669
- claude_mpm/skills/bundled/tauri/tauri-state-management.md +0 -573
- claude_mpm/skills/bundled/tauri/tauri-testing.md +0 -384
- claude_mpm/skills/bundled/tauri/tauri-window-management.md +0 -628
- claude_mpm/skills/bundled/testing/condition-based-waiting/SKILL.md +0 -119
- claude_mpm/skills/bundled/testing/condition-based-waiting/example.ts +0 -158
- claude_mpm/skills/bundled/testing/condition-based-waiting/references/patterns-and-implementation.md +0 -253
- claude_mpm/skills/bundled/testing/test-driven-development/SKILL.md +0 -145
- claude_mpm/skills/bundled/testing/test-driven-development/references/anti-patterns.md +0 -543
- claude_mpm/skills/bundled/testing/test-driven-development/references/examples.md +0 -741
- claude_mpm/skills/bundled/testing/test-driven-development/references/integration.md +0 -470
- claude_mpm/skills/bundled/testing/test-driven-development/references/philosophy.md +0 -458
- claude_mpm/skills/bundled/testing/test-driven-development/references/workflow.md +0 -639
- claude_mpm/skills/bundled/testing/test-quality-inspector/SKILL.md +0 -458
- claude_mpm/skills/bundled/testing/test-quality-inspector/examples/example-inspection-report.md +0 -411
- claude_mpm/skills/bundled/testing/test-quality-inspector/references/assertion-quality.md +0 -317
- claude_mpm/skills/bundled/testing/test-quality-inspector/references/inspection-checklist.md +0 -270
- claude_mpm/skills/bundled/testing/test-quality-inspector/references/red-flags.md +0 -436
- claude_mpm/skills/bundled/testing/testing-anti-patterns/SKILL.md +0 -140
- claude_mpm/skills/bundled/testing/testing-anti-patterns/references/completeness-anti-patterns.md +0 -572
- claude_mpm/skills/bundled/testing/testing-anti-patterns/references/core-anti-patterns.md +0 -411
- claude_mpm/skills/bundled/testing/testing-anti-patterns/references/detection-guide.md +0 -569
- claude_mpm/skills/bundled/testing/testing-anti-patterns/references/tdd-connection.md +0 -695
- claude_mpm/skills/bundled/testing/webapp-testing/LICENSE.txt +0 -202
- claude_mpm/skills/bundled/testing/webapp-testing/SKILL.md +0 -184
- claude_mpm/skills/bundled/testing/webapp-testing/decision-tree.md +0 -459
- claude_mpm/skills/bundled/testing/webapp-testing/playwright-patterns.md +0 -479
- claude_mpm/skills/bundled/testing/webapp-testing/reconnaissance-pattern.md +0 -687
- claude_mpm/skills/bundled/testing/webapp-testing/server-management.md +0 -758
- claude_mpm/skills/bundled/testing/webapp-testing/troubleshooting.md +0 -868
- claude_mpm/templates/questions/EXAMPLES.md +0 -501
- claude_mpm/tools/README_SOCKETIO_DEBUG.md +0 -224
- claude_mpm/tools/code_tree_analyzer/README.md +0 -64
- /claude_mpm/agents/templates/{git_file_tracking.md → git-file-tracking.md} +0 -0
- /claude_mpm/agents/templates/{pm_examples.md → pm-examples.md} +0 -0
- /claude_mpm/agents/templates/{pm_red_flags.md → pm-red-flags.md} +0 -0
- /claude_mpm/agents/templates/{response_format.md → response-format.md} +0 -0
- /claude_mpm/agents/templates/{validation_templates.md → validation-templates.md} +0 -0
- {claude_mpm-4.25.10.dist-info → claude_mpm-5.1.8.dist-info}/WHEEL +0 -0
- {claude_mpm-4.25.10.dist-info → claude_mpm-5.1.8.dist-info}/entry_points.txt +0 -0
- {claude_mpm-4.25.10.dist-info → claude_mpm-5.1.8.dist-info}/licenses/LICENSE +0 -0
- {claude_mpm-4.25.10.dist-info → claude_mpm-5.1.8.dist-info}/top_level.txt +0 -0
|
@@ -1,119 +0,0 @@
|
|
|
1
|
-
# Framework CLAUDE.md Generator
|
|
2
|
-
|
|
3
|
-
This directory contains the refactored framework CLAUDE.md generator service, originally a single 1,267-line file.
|
|
4
|
-
|
|
5
|
-
## Structure
|
|
6
|
-
|
|
7
|
-
### Core Modules
|
|
8
|
-
|
|
9
|
-
- **`__init__.py`** (~250 lines) - Main facade class that coordinates all functionality
|
|
10
|
-
- **`version_manager.py`** (~100 lines) - Handles version parsing, incrementing, and comparison
|
|
11
|
-
- **`content_assembler.py`** (~120 lines) - Assembles sections and applies template variables
|
|
12
|
-
- **`content_validator.py`** (~80 lines) - Validates generated content structure and completeness
|
|
13
|
-
- **`deployment_manager.py`** (~80 lines) - Handles deployment to parent directories
|
|
14
|
-
- **`section_manager.py`** (~60 lines) - Manages section registration, ordering, and updates
|
|
15
|
-
|
|
16
|
-
### Section Generators
|
|
17
|
-
|
|
18
|
-
The `section_generators/` subdirectory contains individual generators for each section:
|
|
19
|
-
|
|
20
|
-
- **`__init__.py`** - Base classes and registry
|
|
21
|
-
- **`header.py`** - Header with version metadata
|
|
22
|
-
- **`role_designation.py`** - AI Assistant role designation
|
|
23
|
-
- **`agents.py`** (~570 lines) - Comprehensive agents documentation (largest section)
|
|
24
|
-
- **`todo_task_tools.py`** - Todo and Task Tools integration
|
|
25
|
-
- **`claude_pm_init.py`** - Claude-PM initialization procedures
|
|
26
|
-
- **`orchestration_principles.py`** - Core orchestration principles
|
|
27
|
-
- **`subprocess_validation.py`** - Subprocess validation protocol
|
|
28
|
-
- **`delegation_constraints.py`** - Critical delegation constraints
|
|
29
|
-
- **`environment_config.py`** - Environment configuration
|
|
30
|
-
- **`troubleshooting.py`** - Troubleshooting guide
|
|
31
|
-
- **`core_responsibilities.py`** - Core responsibilities list
|
|
32
|
-
- **`footer.py`** - Footer with metadata
|
|
33
|
-
|
|
34
|
-
## Usage
|
|
35
|
-
|
|
36
|
-
The API remains unchanged from the original implementation:
|
|
37
|
-
|
|
38
|
-
```python
|
|
39
|
-
from claude_pm.services.framework_claude_md_generator import FrameworkClaudeMdGenerator
|
|
40
|
-
|
|
41
|
-
# Create generator instance (default: INSTRUCTIONS.md)
|
|
42
|
-
generator = FrameworkClaudeMdGenerator()
|
|
43
|
-
|
|
44
|
-
# Or specify a custom target filename (e.g., for legacy compatibility)
|
|
45
|
-
generator = FrameworkClaudeMdGenerator(target_filename="CLAUDE.md")
|
|
46
|
-
|
|
47
|
-
# Generate content
|
|
48
|
-
content = generator.generate(
|
|
49
|
-
current_content=existing_content, # Optional: for version auto-increment
|
|
50
|
-
template_variables={'PLATFORM': 'darwin', 'PYTHON_CMD': 'python3'}
|
|
51
|
-
)
|
|
52
|
-
|
|
53
|
-
# Deploy to parent directory
|
|
54
|
-
success, message = generator.deploy_to_parent(Path('/parent/dir'))
|
|
55
|
-
|
|
56
|
-
# Update a section
|
|
57
|
-
generator.update_section('agents', 'Custom agents content')
|
|
58
|
-
|
|
59
|
-
# Add custom section
|
|
60
|
-
generator.add_custom_section('custom', 'Custom content', after='agents')
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
## Configuration Options
|
|
64
|
-
|
|
65
|
-
### Target Filename
|
|
66
|
-
|
|
67
|
-
The generator supports configurable target filenames for deployment:
|
|
68
|
-
|
|
69
|
-
- **Default**: `"INSTRUCTIONS.md"` - The standard filename for framework instructions
|
|
70
|
-
- **Legacy**: `"CLAUDE.md"` - For backward compatibility with older projects
|
|
71
|
-
- **Custom**: Any filename can be specified for special use cases
|
|
72
|
-
|
|
73
|
-
This configuration affects:
|
|
74
|
-
- Deployment target filename
|
|
75
|
-
- Backup file naming
|
|
76
|
-
- Deployment check logic
|
|
77
|
-
|
|
78
|
-
Example:
|
|
79
|
-
```python
|
|
80
|
-
# Use legacy filename for older projects
|
|
81
|
-
generator = FrameworkClaudeMdGenerator(target_filename="CLAUDE.md")
|
|
82
|
-
|
|
83
|
-
# Use custom filename for special environments
|
|
84
|
-
generator = FrameworkClaudeMdGenerator(target_filename="PROJECT_INSTRUCTIONS.md")
|
|
85
|
-
```
|
|
86
|
-
|
|
87
|
-
## Design Benefits
|
|
88
|
-
|
|
89
|
-
1. **Modularity**: Each concern is separated into its own module
|
|
90
|
-
2. **Maintainability**: Smaller, focused modules are easier to understand and modify
|
|
91
|
-
3. **Testability**: Individual components can be tested in isolation
|
|
92
|
-
4. **Extensibility**: New section generators can be added easily
|
|
93
|
-
5. **Performance**: Section generators are loaded on demand
|
|
94
|
-
6. **Backward Compatibility**: Original API preserved through facade pattern
|
|
95
|
-
|
|
96
|
-
## Section Generator Pattern
|
|
97
|
-
|
|
98
|
-
To add a new section generator:
|
|
99
|
-
|
|
100
|
-
1. Create a new file in `section_generators/`
|
|
101
|
-
2. Inherit from `BaseSectionGenerator`
|
|
102
|
-
3. Implement the `generate()` method
|
|
103
|
-
4. Register in `section_generators/__init__.py`
|
|
104
|
-
|
|
105
|
-
Example:
|
|
106
|
-
```python
|
|
107
|
-
from . import BaseSectionGenerator
|
|
108
|
-
|
|
109
|
-
class CustomSectionGenerator(BaseSectionGenerator):
|
|
110
|
-
def generate(self, data: Dict[str, Any]) -> str:
|
|
111
|
-
return "## Custom Section\n\nContent here..."
|
|
112
|
-
```
|
|
113
|
-
|
|
114
|
-
## Refactoring Summary
|
|
115
|
-
|
|
116
|
-
- **Original**: 1,267 lines in a single file
|
|
117
|
-
- **Refactored**: ~250 lines in main module + well-organized submodules
|
|
118
|
-
- **Total line reduction**: Main module reduced by 80%
|
|
119
|
-
- **Improved organization**: 13 focused modules instead of 1 large file
|
|
@@ -1,185 +0,0 @@
|
|
|
1
|
-
# MCP Gateway Service
|
|
2
|
-
|
|
3
|
-
## Overview
|
|
4
|
-
|
|
5
|
-
The MCP Gateway is a standards-compliant implementation of the Model Context Protocol (MCP) for Claude MPM. It provides a simple, stdio-based server that enables seamless integration with Claude Code.
|
|
6
|
-
|
|
7
|
-
**NOTE: MCP is ONLY for Claude Code - NOT for Claude Code.**
|
|
8
|
-
Claude Code uses a different system for agent deployment via the `.claude/agents/` directory.
|
|
9
|
-
|
|
10
|
-
## Architecture
|
|
11
|
-
|
|
12
|
-
The MCP Gateway uses the official Anthropic MCP Python SDK with:
|
|
13
|
-
|
|
14
|
-
- **Standards compliance** with the official MCP specification
|
|
15
|
-
- **Stdio-based communication** for Claude Code integration
|
|
16
|
-
- **Simple JSON-RPC protocol** over stdin/stdout
|
|
17
|
-
- **Tool registry system** for extensible functionality
|
|
18
|
-
- **Comprehensive error handling** and logging
|
|
19
|
-
|
|
20
|
-
## Structure
|
|
21
|
-
|
|
22
|
-
```
|
|
23
|
-
mcp_gateway/
|
|
24
|
-
├── core/ # Core interfaces and base classes
|
|
25
|
-
│ ├── interfaces.py # MCP service interfaces
|
|
26
|
-
│ ├── base.py # Base MCP service class
|
|
27
|
-
│ └── exceptions.py # MCP-specific exceptions
|
|
28
|
-
├── config/ # Configuration management
|
|
29
|
-
│ ├── configuration.py # Main configuration service
|
|
30
|
-
│ ├── config_loader.py # Configuration discovery and loading
|
|
31
|
-
│ └── config_schema.py # Configuration validation
|
|
32
|
-
├── server/ # MCP server implementation (ISS-0035)
|
|
33
|
-
├── tools/ # Tool registry and adapters (ISS-0036)
|
|
34
|
-
└── registry/ # Service discovery and registration
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
## Features
|
|
38
|
-
|
|
39
|
-
### Implemented
|
|
40
|
-
- ✅ **Official MCP Server** - Standards-compliant implementation using Anthropic's MCP SDK
|
|
41
|
-
- ✅ **Tool Registry System** - Extensible tool management and discovery
|
|
42
|
-
- ✅ **Stdio Communication** - Standard MCP protocol over stdin/stdout
|
|
43
|
-
- ✅ **Configuration Management** - YAML-based configuration with validation
|
|
44
|
-
- ✅ **Built-in Tools** - Echo, calculator, and system info tools
|
|
45
|
-
- ✅ **CLI Integration** - Complete command-line interface for management
|
|
46
|
-
- ✅ **Error Handling** - Comprehensive error handling and logging
|
|
47
|
-
|
|
48
|
-
### Key Features
|
|
49
|
-
- **Protocol Handler** - Stdio-based MCP protocol handler, not a background service
|
|
50
|
-
- **Claude Code Ready** - Direct integration with Claude Code MCP client
|
|
51
|
-
- **Extensible** - Easy to add new tools and capabilities
|
|
52
|
-
- **Standards Compliant** - Follows official MCP specification exactly
|
|
53
|
-
|
|
54
|
-
## Quick Start
|
|
55
|
-
|
|
56
|
-
### 1. Check Status
|
|
57
|
-
```bash
|
|
58
|
-
claude-mpm mcp status
|
|
59
|
-
```
|
|
60
|
-
|
|
61
|
-
### 2. Test Tools
|
|
62
|
-
```bash
|
|
63
|
-
# Test echo tool
|
|
64
|
-
claude-mpm mcp test echo --args '{"message": "Hello MCP!"}'
|
|
65
|
-
|
|
66
|
-
# Test calculator
|
|
67
|
-
claude-mpm mcp test calculator --args '{"operation": "add", "a": 5, "b": 3}'
|
|
68
|
-
|
|
69
|
-
# Test system info
|
|
70
|
-
claude-mpm mcp test system_info
|
|
71
|
-
```
|
|
72
|
-
|
|
73
|
-
### 3. Start MCP Gateway Handler
|
|
74
|
-
```bash
|
|
75
|
-
# Start gateway handler for Claude Code integration
|
|
76
|
-
claude-mpm mcp start
|
|
77
|
-
```
|
|
78
|
-
|
|
79
|
-
The gateway handler will listen for MCP protocol messages via stdin/stdout. This is typically invoked by Claude Code, not run directly by users.
|
|
80
|
-
|
|
81
|
-
### 4. Claude Code Integration
|
|
82
|
-
Add to your Claude Code configuration (~/.claude.json):
|
|
83
|
-
```json
|
|
84
|
-
{
|
|
85
|
-
"mcpServers": {
|
|
86
|
-
"claude-mpm": {
|
|
87
|
-
"command": "python",
|
|
88
|
-
"args": ["-m", "claude_mpm.cli", "mcp", "start"],
|
|
89
|
-
"cwd": "/path/to/claude-mpm"
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
```
|
|
94
|
-
|
|
95
|
-
## Configuration
|
|
96
|
-
|
|
97
|
-
The MCP Gateway uses a hierarchical configuration system with the following priority:
|
|
98
|
-
|
|
99
|
-
1. Default configuration (built-in)
|
|
100
|
-
2. Configuration file (YAML)
|
|
101
|
-
3. Environment variables (highest priority)
|
|
102
|
-
|
|
103
|
-
### Configuration File Locations
|
|
104
|
-
|
|
105
|
-
The system searches for configuration in these locations (in order):
|
|
106
|
-
- `~/.claude/mcp/config.yaml` (user-specific)
|
|
107
|
-
- `~/.claude/mcp_gateway.yaml`
|
|
108
|
-
- `~/.config/claude-mpm/mcp_gateway.yaml`
|
|
109
|
-
- `./mcp_gateway.yaml` (project-specific)
|
|
110
|
-
- `./config/mcp_gateway.yaml`
|
|
111
|
-
- `./.claude/mcp_gateway.yaml`
|
|
112
|
-
- `/etc/claude-mpm/mcp_gateway.yaml` (system-wide)
|
|
113
|
-
|
|
114
|
-
### Environment Variables
|
|
115
|
-
|
|
116
|
-
Override configuration using environment variables:
|
|
117
|
-
```bash
|
|
118
|
-
export MCP_GATEWAY_SERVER_NAME=my-gateway
|
|
119
|
-
export MCP_GATEWAY_TOOLS_TIMEOUT_DEFAULT=60
|
|
120
|
-
export MCP_GATEWAY_LOGGING_LEVEL=DEBUG
|
|
121
|
-
```
|
|
122
|
-
|
|
123
|
-
## Usage
|
|
124
|
-
|
|
125
|
-
### Basic Setup
|
|
126
|
-
|
|
127
|
-
```python
|
|
128
|
-
from claude_mpm.services.mcp_gateway import MCPConfiguration, MCPConfigLoader
|
|
129
|
-
|
|
130
|
-
# Load configuration
|
|
131
|
-
config_loader = MCPConfigLoader()
|
|
132
|
-
config = MCPConfiguration()
|
|
133
|
-
await config.initialize()
|
|
134
|
-
|
|
135
|
-
# Access configuration
|
|
136
|
-
server_name = config.get("mcp.server.name")
|
|
137
|
-
tools_enabled = config.get("mcp.tools.enabled")
|
|
138
|
-
```
|
|
139
|
-
|
|
140
|
-
### Service Registration
|
|
141
|
-
|
|
142
|
-
The MCP Gateway services are automatically registered with the claude-mpm service container:
|
|
143
|
-
|
|
144
|
-
```python
|
|
145
|
-
from claude_mpm.services import MCPConfiguration, BaseMCPService
|
|
146
|
-
|
|
147
|
-
# Services are available through lazy loading
|
|
148
|
-
config = MCPConfiguration()
|
|
149
|
-
```
|
|
150
|
-
|
|
151
|
-
## Development
|
|
152
|
-
|
|
153
|
-
### Adding New MCP Services
|
|
154
|
-
|
|
155
|
-
1. Define the interface in `core/interfaces.py`
|
|
156
|
-
2. Create base implementation in appropriate module
|
|
157
|
-
3. Register in service container if needed
|
|
158
|
-
4. Add lazy import to `__init__.py`
|
|
159
|
-
5. Update documentation
|
|
160
|
-
|
|
161
|
-
### Testing
|
|
162
|
-
|
|
163
|
-
Run tests with:
|
|
164
|
-
```bash
|
|
165
|
-
pytest tests/services/mcp_gateway/
|
|
166
|
-
```
|
|
167
|
-
|
|
168
|
-
## Dependencies
|
|
169
|
-
|
|
170
|
-
- Python 3.8+
|
|
171
|
-
- mcp>=0.1.0 (Anthropic's MCP package)
|
|
172
|
-
- PyYAML for configuration
|
|
173
|
-
- asyncio for async operations
|
|
174
|
-
|
|
175
|
-
## Related Issues
|
|
176
|
-
|
|
177
|
-
- ISS-0034: Infrastructure Setup (this implementation)
|
|
178
|
-
- ISS-0035: MCP Server Core Implementation
|
|
179
|
-
- ISS-0036: Tool Registry & Discovery System
|
|
180
|
-
- ISS-0037: stdio Communication Handler
|
|
181
|
-
- ISS-0038: Tool Adapter Framework
|
|
182
|
-
|
|
183
|
-
## Notes
|
|
184
|
-
|
|
185
|
-
This is the foundation implementation for the MCP Gateway. The actual server functionality, tool registry, and communication handlers will be implemented in subsequent tickets as part of the EP-0007 epic.
|
|
@@ -1,217 +0,0 @@
|
|
|
1
|
-
"""Connection event handlers for Socket.IO.
|
|
2
|
-
|
|
3
|
-
WHY: This module handles all connection-related events including connect,
|
|
4
|
-
disconnect, status requests, and history management. Separating these
|
|
5
|
-
from other handlers makes connection management more maintainable.
|
|
6
|
-
"""
|
|
7
|
-
|
|
8
|
-
from datetime import datetime
|
|
9
|
-
from typing import Any, Dict, List, Optional, Set
|
|
10
|
-
|
|
11
|
-
from ....core.typing_utils import ClaudeStatus, EventData, SocketId
|
|
12
|
-
from .base import BaseEventHandler
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
class ConnectionEventHandler(BaseEventHandler):
|
|
16
|
-
"""Handles Socket.IO connection lifecycle events.
|
|
17
|
-
|
|
18
|
-
WHY: Connection management is a critical aspect of the Socket.IO server
|
|
19
|
-
that deserves its own focused handler. This includes client connections,
|
|
20
|
-
disconnections, status updates, and event history management.
|
|
21
|
-
"""
|
|
22
|
-
|
|
23
|
-
def register_events(self) -> None:
|
|
24
|
-
"""Register connection-related event handlers."""
|
|
25
|
-
|
|
26
|
-
@self.sio.event
|
|
27
|
-
async def connect(sid, environ, *args):
|
|
28
|
-
"""Handle client connection.
|
|
29
|
-
|
|
30
|
-
WHY: When a client connects, we need to track them, send initial
|
|
31
|
-
status information, and provide recent event history so they have
|
|
32
|
-
context for what's happening in the session.
|
|
33
|
-
"""
|
|
34
|
-
self.clients.add(sid)
|
|
35
|
-
client_addr = environ.get("REMOTE_ADDR", "unknown")
|
|
36
|
-
user_agent = environ.get("HTTP_USER_AGENT", "unknown")
|
|
37
|
-
self.logger.info(f"🔗 NEW CLIENT CONNECTED: {sid} from {client_addr}")
|
|
38
|
-
self.logger.info(f"📱 User Agent: {user_agent[:100]}...")
|
|
39
|
-
self.logger.info(f"📈 Total clients now: {len(self.clients)}")
|
|
40
|
-
|
|
41
|
-
# Send initial status immediately with enhanced data
|
|
42
|
-
status_data = {
|
|
43
|
-
"server": "claude-mpm-python-socketio",
|
|
44
|
-
"timestamp": datetime.utcnow().isoformat() + "Z",
|
|
45
|
-
"clients_connected": len(self.clients),
|
|
46
|
-
"session_id": self.server.session_id,
|
|
47
|
-
"claude_status": self.server.claude_status,
|
|
48
|
-
"claude_pid": self.server.claude_pid,
|
|
49
|
-
"server_version": "2.0.0",
|
|
50
|
-
"client_id": sid,
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
try:
|
|
54
|
-
await self.emit_to_client(sid, "status", status_data)
|
|
55
|
-
await self.emit_to_client(
|
|
56
|
-
sid,
|
|
57
|
-
"welcome",
|
|
58
|
-
{
|
|
59
|
-
"message": "Connected to Claude MPM Socket.IO server",
|
|
60
|
-
"client_id": sid,
|
|
61
|
-
"server_time": datetime.utcnow().isoformat() + "Z",
|
|
62
|
-
},
|
|
63
|
-
)
|
|
64
|
-
|
|
65
|
-
# Automatically send the last 50 events to new clients
|
|
66
|
-
await self._send_event_history(sid, limit=50)
|
|
67
|
-
|
|
68
|
-
self.logger.debug(
|
|
69
|
-
f"✅ Sent welcome messages and event history to client {sid}"
|
|
70
|
-
)
|
|
71
|
-
except Exception as e:
|
|
72
|
-
self.log_error(f"sending welcome to client {sid}", e)
|
|
73
|
-
|
|
74
|
-
@self.sio.event
|
|
75
|
-
async def disconnect(sid):
|
|
76
|
-
"""Handle client disconnection.
|
|
77
|
-
|
|
78
|
-
WHY: We need to clean up client tracking when they disconnect
|
|
79
|
-
to maintain accurate connection counts and avoid memory leaks.
|
|
80
|
-
"""
|
|
81
|
-
if sid in self.clients:
|
|
82
|
-
self.clients.remove(sid)
|
|
83
|
-
self.logger.info(f"🔌 CLIENT DISCONNECTED: {sid}")
|
|
84
|
-
self.logger.info(f"📉 Total clients now: {len(self.clients)}")
|
|
85
|
-
else:
|
|
86
|
-
self.logger.warning(
|
|
87
|
-
f"⚠️ Attempted to disconnect unknown client: {sid}"
|
|
88
|
-
)
|
|
89
|
-
|
|
90
|
-
@self.sio.event
|
|
91
|
-
async def get_status(sid):
|
|
92
|
-
"""Handle status request.
|
|
93
|
-
|
|
94
|
-
WHY: Clients need to query current server status on demand
|
|
95
|
-
to update their UI or verify connection health.
|
|
96
|
-
"""
|
|
97
|
-
status_data = {
|
|
98
|
-
"server": "claude-mpm-python-socketio",
|
|
99
|
-
"timestamp": datetime.utcnow().isoformat() + "Z",
|
|
100
|
-
"clients_connected": len(self.clients),
|
|
101
|
-
"session_id": self.server.session_id,
|
|
102
|
-
"claude_status": self.server.claude_status,
|
|
103
|
-
"claude_pid": self.server.claude_pid,
|
|
104
|
-
}
|
|
105
|
-
await self.emit_to_client(sid, "status", status_data)
|
|
106
|
-
|
|
107
|
-
@self.sio.event
|
|
108
|
-
async def get_history(sid, data=None):
|
|
109
|
-
"""Handle history request.
|
|
110
|
-
|
|
111
|
-
WHY: Clients may need to request specific event history
|
|
112
|
-
to reconstruct state or filter by event types.
|
|
113
|
-
"""
|
|
114
|
-
params = data or {}
|
|
115
|
-
event_types = params.get("event_types", [])
|
|
116
|
-
limit = min(params.get("limit", 100), len(self.event_history))
|
|
117
|
-
|
|
118
|
-
await self._send_event_history(sid, event_types=event_types, limit=limit)
|
|
119
|
-
|
|
120
|
-
@self.sio.event
|
|
121
|
-
async def request_history(sid, data=None):
|
|
122
|
-
"""Handle legacy history request (for client compatibility).
|
|
123
|
-
|
|
124
|
-
WHY: Maintains backward compatibility with clients using
|
|
125
|
-
the older 'request.history' event name.
|
|
126
|
-
"""
|
|
127
|
-
params = data or {}
|
|
128
|
-
event_types = params.get("event_types", [])
|
|
129
|
-
limit = min(params.get("limit", 50), len(self.event_history))
|
|
130
|
-
|
|
131
|
-
await self._send_event_history(sid, event_types=event_types, limit=limit)
|
|
132
|
-
|
|
133
|
-
@self.sio.event
|
|
134
|
-
async def subscribe(sid, data=None):
|
|
135
|
-
"""Handle subscription request.
|
|
136
|
-
|
|
137
|
-
WHY: Allows clients to subscribe to specific event channels
|
|
138
|
-
for filtered event streaming.
|
|
139
|
-
"""
|
|
140
|
-
channels = data.get("channels", ["*"]) if data else ["*"]
|
|
141
|
-
await self.emit_to_client(sid, "subscribed", {"channels": channels})
|
|
142
|
-
|
|
143
|
-
@self.sio.event
|
|
144
|
-
async def claude_event(sid, data):
|
|
145
|
-
"""Handle events from client proxies.
|
|
146
|
-
|
|
147
|
-
WHY: Client proxies send events that need to be stored
|
|
148
|
-
in history and re-broadcast to other clients.
|
|
149
|
-
"""
|
|
150
|
-
# Store in history
|
|
151
|
-
self.event_history.append(data)
|
|
152
|
-
self.logger.debug(
|
|
153
|
-
f"📚 Event from client stored in history (total: {len(self.event_history)})"
|
|
154
|
-
)
|
|
155
|
-
|
|
156
|
-
# Re-broadcast to all other clients
|
|
157
|
-
await self.broadcast_event("claude_event", data, skip_sid=sid)
|
|
158
|
-
|
|
159
|
-
async def _send_event_history(
|
|
160
|
-
self, sid: str, event_types: Optional[List[str]] = None, limit: int = 50
|
|
161
|
-
):
|
|
162
|
-
"""Send event history to a specific client.
|
|
163
|
-
|
|
164
|
-
WHY: When clients connect to the dashboard, they need context from recent events
|
|
165
|
-
to understand what's been happening. This sends the most recent events in
|
|
166
|
-
chronological order (oldest first) so the dashboard displays them properly.
|
|
167
|
-
|
|
168
|
-
Args:
|
|
169
|
-
sid: Socket.IO session ID of the client
|
|
170
|
-
event_types: Optional list of event types to filter by
|
|
171
|
-
limit: Maximum number of events to send (default: 50)
|
|
172
|
-
"""
|
|
173
|
-
try:
|
|
174
|
-
if not self.event_history:
|
|
175
|
-
self.logger.debug(f"No event history to send to client {sid}")
|
|
176
|
-
return
|
|
177
|
-
|
|
178
|
-
# Limit to reasonable number to avoid overwhelming client
|
|
179
|
-
limit = min(limit, 100)
|
|
180
|
-
|
|
181
|
-
# Get the most recent events, filtered by type if specified
|
|
182
|
-
history = []
|
|
183
|
-
for event in reversed(self.event_history):
|
|
184
|
-
if not event_types or event.get("type") in event_types:
|
|
185
|
-
history.append(event)
|
|
186
|
-
if len(history) >= limit:
|
|
187
|
-
break
|
|
188
|
-
|
|
189
|
-
# Reverse to get chronological order (oldest first)
|
|
190
|
-
history = list(reversed(history))
|
|
191
|
-
|
|
192
|
-
if history:
|
|
193
|
-
# Send as 'history' event that the client expects
|
|
194
|
-
await self.emit_to_client(
|
|
195
|
-
sid,
|
|
196
|
-
"history",
|
|
197
|
-
{
|
|
198
|
-
"events": history,
|
|
199
|
-
"count": len(history),
|
|
200
|
-
"total_available": len(self.event_history),
|
|
201
|
-
},
|
|
202
|
-
)
|
|
203
|
-
|
|
204
|
-
self.logger.info(
|
|
205
|
-
f"📚 Sent {len(history)} historical events to client {sid}"
|
|
206
|
-
)
|
|
207
|
-
else:
|
|
208
|
-
self.logger.debug(
|
|
209
|
-
f"No matching events found for client {sid} with filters: {event_types}"
|
|
210
|
-
)
|
|
211
|
-
|
|
212
|
-
except Exception as e:
|
|
213
|
-
self.log_error(
|
|
214
|
-
f"sending event history to client {sid}",
|
|
215
|
-
e,
|
|
216
|
-
{"event_types": event_types, "limit": limit},
|
|
217
|
-
)
|
|
@@ -1,154 +0,0 @@
|
|
|
1
|
-
"""Hook event handlers for Socket.IO.
|
|
2
|
-
|
|
3
|
-
WHY: This module handles hook events from Claude to track session information,
|
|
4
|
-
agent delegations, and other hook-based activity for the system heartbeat.
|
|
5
|
-
"""
|
|
6
|
-
|
|
7
|
-
from datetime import datetime
|
|
8
|
-
from typing import Any, Dict, Optional
|
|
9
|
-
|
|
10
|
-
from .base import BaseEventHandler
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
class HookEventHandler(BaseEventHandler):
|
|
14
|
-
"""Handles hook events from Claude for session tracking.
|
|
15
|
-
|
|
16
|
-
WHY: Hook events provide rich information about Claude's activity including
|
|
17
|
-
session starts/stops, agent delegations, and tool usage. This handler
|
|
18
|
-
extracts session information to populate the system heartbeat data.
|
|
19
|
-
"""
|
|
20
|
-
|
|
21
|
-
def register_events(self) -> None:
|
|
22
|
-
"""Register hook event handlers."""
|
|
23
|
-
|
|
24
|
-
@self.sio.event
|
|
25
|
-
async def claude_event(sid, data):
|
|
26
|
-
"""Handle claude_event which includes hook events.
|
|
27
|
-
|
|
28
|
-
WHY: Hook events are sent as claude_event with type 'hook'
|
|
29
|
-
and contain session and agent delegation information.
|
|
30
|
-
"""
|
|
31
|
-
if not isinstance(data, dict):
|
|
32
|
-
return
|
|
33
|
-
|
|
34
|
-
# Check if this is a hook event
|
|
35
|
-
event_type = data.get("type")
|
|
36
|
-
if event_type != "hook":
|
|
37
|
-
return
|
|
38
|
-
|
|
39
|
-
# Extract hook event details
|
|
40
|
-
hook_event = data.get("event")
|
|
41
|
-
hook_data = data.get("data", {})
|
|
42
|
-
|
|
43
|
-
# Track sessions based on hook events
|
|
44
|
-
if hook_event == "subagent_start":
|
|
45
|
-
await self._handle_subagent_start(hook_data)
|
|
46
|
-
elif hook_event == "subagent_stop":
|
|
47
|
-
await self._handle_subagent_stop(hook_data)
|
|
48
|
-
elif hook_event == "user_prompt":
|
|
49
|
-
await self._handle_user_prompt(hook_data)
|
|
50
|
-
elif hook_event == "pre_tool":
|
|
51
|
-
await self._handle_pre_tool(hook_data)
|
|
52
|
-
|
|
53
|
-
async def _handle_subagent_start(self, data: Dict[str, Any]):
|
|
54
|
-
"""Handle subagent start events.
|
|
55
|
-
|
|
56
|
-
WHY: When a subagent starts, we track it as an active session
|
|
57
|
-
with the agent type and start time for the heartbeat.
|
|
58
|
-
"""
|
|
59
|
-
session_id = data.get("session_id")
|
|
60
|
-
agent_type = data.get("agent_type", "unknown")
|
|
61
|
-
|
|
62
|
-
if not session_id:
|
|
63
|
-
return
|
|
64
|
-
|
|
65
|
-
# Update or create session tracking
|
|
66
|
-
if hasattr(self.server, 'active_sessions'):
|
|
67
|
-
self.server.active_sessions[session_id] = {
|
|
68
|
-
"session_id": session_id,
|
|
69
|
-
"start_time": datetime.now().isoformat(),
|
|
70
|
-
"agent": agent_type,
|
|
71
|
-
"status": "active",
|
|
72
|
-
"prompt": data.get("prompt", "")[:100], # First 100 chars
|
|
73
|
-
"last_activity": datetime.now().isoformat(),
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
self.logger.debug(
|
|
77
|
-
f"Tracked subagent start: session={session_id[:8]}..., agent={agent_type}"
|
|
78
|
-
)
|
|
79
|
-
|
|
80
|
-
async def _handle_subagent_stop(self, data: Dict[str, Any]):
|
|
81
|
-
"""Handle subagent stop events.
|
|
82
|
-
|
|
83
|
-
WHY: When a subagent stops, we update its status or remove it
|
|
84
|
-
from active sessions depending on the stop reason.
|
|
85
|
-
"""
|
|
86
|
-
session_id = data.get("session_id")
|
|
87
|
-
|
|
88
|
-
if not session_id:
|
|
89
|
-
return
|
|
90
|
-
|
|
91
|
-
# Update session status
|
|
92
|
-
if hasattr(self.server, 'active_sessions'):
|
|
93
|
-
if session_id in self.server.active_sessions:
|
|
94
|
-
# Mark as completed rather than removing immediately
|
|
95
|
-
self.server.active_sessions[session_id]["status"] = "completed"
|
|
96
|
-
self.server.active_sessions[session_id]["last_activity"] = datetime.now().isoformat()
|
|
97
|
-
|
|
98
|
-
self.logger.debug(
|
|
99
|
-
f"Marked session completed: session={session_id[:8]}..."
|
|
100
|
-
)
|
|
101
|
-
|
|
102
|
-
async def _handle_user_prompt(self, data: Dict[str, Any]):
|
|
103
|
-
"""Handle user prompt events.
|
|
104
|
-
|
|
105
|
-
WHY: User prompts indicate the start of a new interaction,
|
|
106
|
-
which we track as a PM session if no delegation occurs.
|
|
107
|
-
"""
|
|
108
|
-
session_id = data.get("session_id")
|
|
109
|
-
|
|
110
|
-
if not session_id:
|
|
111
|
-
return
|
|
112
|
-
|
|
113
|
-
# Create or update PM session
|
|
114
|
-
if hasattr(self.server, 'active_sessions'):
|
|
115
|
-
if session_id not in self.server.active_sessions:
|
|
116
|
-
self.server.active_sessions[session_id] = {
|
|
117
|
-
"session_id": session_id,
|
|
118
|
-
"start_time": datetime.now().isoformat(),
|
|
119
|
-
"agent": "pm", # Default to PM
|
|
120
|
-
"status": "active",
|
|
121
|
-
"prompt": data.get("prompt_text", "")[:100],
|
|
122
|
-
"working_directory": data.get("working_directory", ""),
|
|
123
|
-
"last_activity": datetime.now().isoformat(),
|
|
124
|
-
}
|
|
125
|
-
else:
|
|
126
|
-
# Update last activity
|
|
127
|
-
self.server.active_sessions[session_id]["last_activity"] = datetime.now().isoformat()
|
|
128
|
-
|
|
129
|
-
async def _handle_pre_tool(self, data: Dict[str, Any]):
|
|
130
|
-
"""Handle pre-tool events.
|
|
131
|
-
|
|
132
|
-
WHY: Pre-tool events with Task delegation indicate agent changes
|
|
133
|
-
that we need to track for accurate session information.
|
|
134
|
-
"""
|
|
135
|
-
if data.get("tool_name") != "Task":
|
|
136
|
-
return
|
|
137
|
-
|
|
138
|
-
session_id = data.get("session_id")
|
|
139
|
-
delegation_details = data.get("delegation_details", {})
|
|
140
|
-
agent_type = delegation_details.get("agent_type", "unknown")
|
|
141
|
-
|
|
142
|
-
if not session_id:
|
|
143
|
-
return
|
|
144
|
-
|
|
145
|
-
# Update session with new agent
|
|
146
|
-
if hasattr(self.server, 'active_sessions'):
|
|
147
|
-
if session_id in self.server.active_sessions:
|
|
148
|
-
self.server.active_sessions[session_id]["agent"] = agent_type
|
|
149
|
-
self.server.active_sessions[session_id]["status"] = "delegated"
|
|
150
|
-
self.server.active_sessions[session_id]["last_activity"] = datetime.now().isoformat()
|
|
151
|
-
|
|
152
|
-
self.logger.debug(
|
|
153
|
-
f"Updated session delegation: session={session_id[:8]}..., agent={agent_type}"
|
|
154
|
-
)
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
0.9.0
|