claude-mpm 4.2.44__py3-none-any.whl → 4.3.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- claude_mpm/VERSION +1 -1
- claude_mpm/agents/BASE_PM.md +77 -405
- claude_mpm/agents/{INSTRUCTIONS.md → INSTRUCTIONS_OLD_DEPRECATED.md} +75 -1
- claude_mpm/agents/OUTPUT_STYLE.md +0 -39
- claude_mpm/agents/PM_INSTRUCTIONS.md +122 -0
- claude_mpm/agents/WORKFLOW.md +74 -323
- claude_mpm/agents/frontmatter_validator.py +20 -12
- claude_mpm/agents/templates/nextjs_engineer.json +277 -0
- claude_mpm/agents/templates/prompt-engineer.json +294 -0
- claude_mpm/agents/templates/python_engineer.json +289 -0
- claude_mpm/agents/templates/react_engineer.json +11 -3
- claude_mpm/agents/templates/security.json +50 -9
- claude_mpm/cli/commands/agents.py +2 -2
- claude_mpm/cli/commands/uninstall.py +1 -3
- claude_mpm/cli/interactive/agent_wizard.py +3 -3
- claude_mpm/cli/parsers/agent_manager_parser.py +3 -3
- claude_mpm/cli/parsers/agents_parser.py +1 -1
- claude_mpm/constants.py +1 -1
- claude_mpm/core/error_handler.py +2 -4
- claude_mpm/core/file_utils.py +4 -12
- claude_mpm/core/framework_loader.py +72 -24
- claude_mpm/core/log_manager.py +60 -5
- claude_mpm/core/logger.py +1 -1
- claude_mpm/core/logging_utils.py +36 -18
- claude_mpm/core/unified_agent_registry.py +18 -4
- claude_mpm/dashboard/react/components/DataInspector/DataInspector.module.css +188 -0
- claude_mpm/dashboard/react/components/EventViewer/EventViewer.module.css +156 -0
- claude_mpm/dashboard/react/components/shared/ConnectionStatus.module.css +38 -0
- claude_mpm/dashboard/react/components/shared/FilterBar.module.css +92 -0
- claude_mpm/dashboard/static/archive/activity_dashboard_fixed.html +248 -0
- claude_mpm/dashboard/static/archive/activity_dashboard_test.html +61 -0
- claude_mpm/dashboard/static/archive/test_activity_connection.html +179 -0
- claude_mpm/dashboard/static/archive/test_claude_tree_tab.html +68 -0
- claude_mpm/dashboard/static/archive/test_dashboard.html +409 -0
- claude_mpm/dashboard/static/archive/test_dashboard_fixed.html +519 -0
- claude_mpm/dashboard/static/archive/test_dashboard_verification.html +181 -0
- claude_mpm/dashboard/static/archive/test_file_data.html +315 -0
- claude_mpm/dashboard/static/archive/test_file_tree_empty_state.html +243 -0
- claude_mpm/dashboard/static/archive/test_file_tree_fix.html +234 -0
- claude_mpm/dashboard/static/archive/test_file_tree_rename.html +117 -0
- claude_mpm/dashboard/static/archive/test_file_tree_tab.html +115 -0
- claude_mpm/dashboard/static/archive/test_file_viewer.html +224 -0
- claude_mpm/dashboard/static/archive/test_final_activity.html +220 -0
- claude_mpm/dashboard/static/archive/test_tab_fix.html +139 -0
- claude_mpm/dashboard/static/built/assets/events.DjpNxWNo.css +1 -0
- claude_mpm/dashboard/static/built/components/activity-tree.js +1 -1
- claude_mpm/dashboard/static/built/components/agent-hierarchy.js +777 -0
- claude_mpm/dashboard/static/built/components/agent-inference.js +1 -1
- claude_mpm/dashboard/static/built/components/build-tracker.js +333 -0
- claude_mpm/dashboard/static/built/components/code-simple.js +857 -0
- claude_mpm/dashboard/static/built/components/code-tree/tree-breadcrumb.js +353 -0
- claude_mpm/dashboard/static/built/components/code-tree/tree-constants.js +235 -0
- claude_mpm/dashboard/static/built/components/code-tree/tree-search.js +409 -0
- claude_mpm/dashboard/static/built/components/code-tree/tree-utils.js +435 -0
- claude_mpm/dashboard/static/built/components/code-viewer.js +2 -1076
- claude_mpm/dashboard/static/built/components/connection-debug.js +654 -0
- claude_mpm/dashboard/static/built/components/diff-viewer.js +891 -0
- claude_mpm/dashboard/static/built/components/event-processor.js +1 -1
- claude_mpm/dashboard/static/built/components/event-viewer.js +1 -1
- claude_mpm/dashboard/static/built/components/export-manager.js +1 -1
- claude_mpm/dashboard/static/built/components/file-change-tracker.js +443 -0
- claude_mpm/dashboard/static/built/components/file-change-viewer.js +690 -0
- claude_mpm/dashboard/static/built/components/file-tool-tracker.js +1 -1
- claude_mpm/dashboard/static/built/components/module-viewer.js +1 -1
- claude_mpm/dashboard/static/built/components/nav-bar.js +145 -0
- claude_mpm/dashboard/static/built/components/page-structure.js +429 -0
- claude_mpm/dashboard/static/built/components/session-manager.js +1 -1
- claude_mpm/dashboard/static/built/components/ui-state-manager.js +2 -465
- claude_mpm/dashboard/static/built/components/working-directory.js +1 -1
- claude_mpm/dashboard/static/built/connection-manager.js +536 -0
- claude_mpm/dashboard/static/built/dashboard.js +1 -1
- claude_mpm/dashboard/static/built/extension-error-handler.js +164 -0
- claude_mpm/dashboard/static/built/react/events.js +30 -0
- claude_mpm/dashboard/static/built/shared/dom-helpers.js +396 -0
- claude_mpm/dashboard/static/built/shared/event-bus.js +330 -0
- claude_mpm/dashboard/static/built/shared/event-filter-service.js +540 -0
- claude_mpm/dashboard/static/built/shared/logger.js +385 -0
- claude_mpm/dashboard/static/built/shared/page-structure.js +251 -0
- claude_mpm/dashboard/static/built/shared/tooltip-service.js +253 -0
- claude_mpm/dashboard/static/built/socket-client.js +1 -1
- claude_mpm/dashboard/static/built/tab-isolation-fix.js +185 -0
- claude_mpm/dashboard/static/css/dashboard.css +28 -5
- claude_mpm/dashboard/static/dist/assets/events.DjpNxWNo.css +1 -0
- claude_mpm/dashboard/static/dist/components/activity-tree.js +1 -1
- claude_mpm/dashboard/static/dist/components/agent-inference.js +1 -1
- claude_mpm/dashboard/static/dist/components/code-viewer.js +2 -0
- claude_mpm/dashboard/static/dist/components/event-processor.js +1 -1
- claude_mpm/dashboard/static/dist/components/event-viewer.js +1 -1
- claude_mpm/dashboard/static/dist/components/export-manager.js +1 -1
- claude_mpm/dashboard/static/dist/components/file-tool-tracker.js +1 -1
- claude_mpm/dashboard/static/dist/components/module-viewer.js +1 -1
- claude_mpm/dashboard/static/dist/components/session-manager.js +1 -1
- claude_mpm/dashboard/static/dist/components/working-directory.js +1 -1
- claude_mpm/dashboard/static/dist/dashboard.js +1 -1
- claude_mpm/dashboard/static/dist/react/events.js +30 -0
- claude_mpm/dashboard/static/dist/socket-client.js +1 -1
- claude_mpm/dashboard/static/events.html +607 -0
- claude_mpm/dashboard/static/index.html +713 -0
- claude_mpm/dashboard/static/js/components/activity-tree.js +3 -17
- claude_mpm/dashboard/static/js/components/agent-hierarchy.js +4 -1
- claude_mpm/dashboard/static/js/components/agent-inference.js +3 -0
- claude_mpm/dashboard/static/js/components/build-tracker.js +8 -0
- claude_mpm/dashboard/static/js/components/code-viewer.js +306 -66
- claude_mpm/dashboard/static/js/components/event-processor.js +3 -0
- claude_mpm/dashboard/static/js/components/event-viewer.js +39 -2
- claude_mpm/dashboard/static/js/components/export-manager.js +3 -0
- claude_mpm/dashboard/static/js/components/file-tool-tracker.js +30 -10
- claude_mpm/dashboard/static/js/components/socket-manager.js +4 -0
- claude_mpm/dashboard/static/js/components/ui-state-manager.js +285 -85
- claude_mpm/dashboard/static/js/components/working-directory.js +3 -0
- claude_mpm/dashboard/static/js/dashboard.js +61 -33
- claude_mpm/dashboard/static/js/socket-client.js +12 -8
- claude_mpm/dashboard/static/js/stores/dashboard-store.js +562 -0
- claude_mpm/dashboard/static/js/tab-isolation-fix.js +185 -0
- claude_mpm/dashboard/static/legacy/activity.html +736 -0
- claude_mpm/dashboard/static/legacy/agents.html +786 -0
- claude_mpm/dashboard/static/legacy/files.html +747 -0
- claude_mpm/dashboard/static/legacy/tools.html +831 -0
- claude_mpm/dashboard/static/monitors-index.html +218 -0
- claude_mpm/dashboard/static/monitors.html +431 -0
- claude_mpm/dashboard/static/production/events.html +659 -0
- claude_mpm/dashboard/static/production/main.html +715 -0
- claude_mpm/dashboard/static/production/monitors.html +483 -0
- claude_mpm/dashboard/static/socket.io.min.js +7 -0
- claude_mpm/dashboard/static/socket.io.v4.8.1.backup.js +7 -0
- claude_mpm/dashboard/static/test-archive/dashboard.html +635 -0
- claude_mpm/dashboard/static/test-archive/debug-events.html +147 -0
- claude_mpm/dashboard/static/test-archive/test-navigation.html +256 -0
- claude_mpm/dashboard/static/test-archive/test-react-exports.html +180 -0
- claude_mpm/dashboard/templates/index.html +79 -9
- claude_mpm/hooks/claude_hooks/services/connection_manager_http.py +1 -1
- claude_mpm/services/agents/deployment/agent_discovery_service.py +3 -0
- claude_mpm/services/agents/deployment/agent_template_builder.py +285 -26
- claude_mpm/services/agents/deployment/agent_validator.py +3 -0
- claude_mpm/services/agents/deployment/validation/template_validator.py +13 -4
- claude_mpm/services/agents/local_template_manager.py +2 -7
- claude_mpm/services/monitor/daemon.py +1 -2
- claude_mpm/services/monitor/daemon_manager.py +2 -7
- claude_mpm/services/monitor/event_emitter.py +6 -2
- claude_mpm/services/monitor/handlers/code_analysis.py +4 -6
- claude_mpm/services/monitor/handlers/hooks.py +2 -6
- claude_mpm/services/monitor/server.py +27 -4
- claude_mpm/tools/code_tree_analyzer.py +2 -4
- claude_mpm/utils/log_cleanup.py +612 -0
- {claude_mpm-4.2.44.dist-info → claude_mpm-4.3.0.dist-info}/METADATA +1 -1
- {claude_mpm-4.2.44.dist-info → claude_mpm-4.3.0.dist-info}/RECORD +151 -83
- claude_mpm/dashboard/static/test-browser-monitor.html +0 -470
- claude_mpm/dashboard/static/test-simple.html +0 -97
- /claude_mpm/dashboard/static/{test_debug.html → test-archive/test_debug.html} +0 -0
- {claude_mpm-4.2.44.dist-info → claude_mpm-4.3.0.dist-info}/WHEEL +0 -0
- {claude_mpm-4.2.44.dist-info → claude_mpm-4.3.0.dist-info}/entry_points.txt +0 -0
- {claude_mpm-4.2.44.dist-info → claude_mpm-4.3.0.dist-info}/licenses/LICENSE +0 -0
- {claude_mpm-4.2.44.dist-info → claude_mpm-4.3.0.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
.eventsContainer {
|
|
2
|
+
background: rgba(255, 255, 255, 0.05);
|
|
3
|
+
backdrop-filter: blur(10px);
|
|
4
|
+
border-radius: 12px;
|
|
5
|
+
border: 1px solid rgba(255, 255, 255, 0.1);
|
|
6
|
+
overflow: hidden;
|
|
7
|
+
flex: 1;
|
|
8
|
+
display: flex;
|
|
9
|
+
flex-direction: column;
|
|
10
|
+
min-height: 0;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.eventsHeader {
|
|
14
|
+
padding: 15px 20px;
|
|
15
|
+
background: rgba(255, 255, 255, 0.05);
|
|
16
|
+
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
|
|
17
|
+
display: flex;
|
|
18
|
+
justify-content: space-between;
|
|
19
|
+
align-items: center;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
.eventsTitle {
|
|
23
|
+
font-weight: 600;
|
|
24
|
+
font-size: 16px;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.eventsInfo {
|
|
28
|
+
font-size: 12px;
|
|
29
|
+
color: rgba(255, 255, 255, 0.6);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
.eventsList {
|
|
33
|
+
flex: 1;
|
|
34
|
+
position: relative;
|
|
35
|
+
min-height: 300px;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
.eventItem {
|
|
39
|
+
padding: 12px 20px;
|
|
40
|
+
border-bottom: 1px solid rgba(255, 255, 255, 0.05);
|
|
41
|
+
transition: background 0.2s;
|
|
42
|
+
cursor: pointer;
|
|
43
|
+
font-family: 'Courier New', monospace;
|
|
44
|
+
font-size: 13px;
|
|
45
|
+
position: relative;
|
|
46
|
+
animation: slideIn 0.3s ease;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
@keyframes slideIn {
|
|
50
|
+
from {
|
|
51
|
+
opacity: 0;
|
|
52
|
+
transform: translateX(-20px);
|
|
53
|
+
}
|
|
54
|
+
to {
|
|
55
|
+
opacity: 1;
|
|
56
|
+
transform: translateX(0);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
.eventItem:hover {
|
|
61
|
+
background: rgba(255, 255, 255, 0.05);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
.eventItem.expanded {
|
|
65
|
+
background: rgba(255, 255, 255, 0.08);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
.eventHeader {
|
|
69
|
+
width: 100%;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
.eventHeaderRow {
|
|
73
|
+
display: flex;
|
|
74
|
+
gap: 10px;
|
|
75
|
+
align-items: center;
|
|
76
|
+
margin-bottom: 5px;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
.eventType {
|
|
80
|
+
padding: 3px 8px;
|
|
81
|
+
border-radius: 10px;
|
|
82
|
+
font-size: 11px;
|
|
83
|
+
font-weight: 600;
|
|
84
|
+
text-transform: uppercase;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
.eventType.agent {
|
|
88
|
+
background: rgba(167, 139, 250, 0.2);
|
|
89
|
+
color: #a78bfa;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
.eventType.tool {
|
|
93
|
+
background: rgba(96, 165, 250, 0.2);
|
|
94
|
+
color: #60a5fa;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
.eventType.file {
|
|
98
|
+
background: rgba(251, 191, 36, 0.2);
|
|
99
|
+
color: #fbbf24;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
.eventType.session {
|
|
103
|
+
background: rgba(74, 222, 128, 0.2);
|
|
104
|
+
color: #4ade80;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
.eventType.error {
|
|
108
|
+
background: rgba(248, 113, 113, 0.2);
|
|
109
|
+
color: #f87171;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
.eventType.info {
|
|
113
|
+
background: rgba(134, 239, 172, 0.2);
|
|
114
|
+
color: #86efac;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
.eventTime {
|
|
118
|
+
font-size: 11px;
|
|
119
|
+
color: rgba(255, 255, 255, 0.5);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
.sourceIndicator {
|
|
123
|
+
font-size: 10px;
|
|
124
|
+
color: rgba(255, 255, 255, 0.4);
|
|
125
|
+
font-style: italic;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
.eventPreview {
|
|
129
|
+
color: rgba(255, 255, 255, 0.7);
|
|
130
|
+
white-space: nowrap;
|
|
131
|
+
overflow: hidden;
|
|
132
|
+
text-overflow: ellipsis;
|
|
133
|
+
max-width: 100%;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
.eventDetails {
|
|
137
|
+
margin-top: 10px;
|
|
138
|
+
padding: 10px;
|
|
139
|
+
background: rgba(0, 0, 0, 0.2);
|
|
140
|
+
border-radius: 6px;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
.noEvents {
|
|
144
|
+
text-align: center;
|
|
145
|
+
padding: 60px 20px;
|
|
146
|
+
color: rgba(255, 255, 255, 0.5);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
.noEvents h3 {
|
|
150
|
+
margin-bottom: 10px;
|
|
151
|
+
font-size: 18px;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
.noEvents p {
|
|
155
|
+
font-size: 14px;
|
|
156
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
.statusBar {
|
|
2
|
+
display: flex;
|
|
3
|
+
gap: 20px;
|
|
4
|
+
align-items: center;
|
|
5
|
+
flex-wrap: wrap;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
.statusIndicator {
|
|
9
|
+
display: flex;
|
|
10
|
+
align-items: center;
|
|
11
|
+
gap: 8px;
|
|
12
|
+
padding: 8px 16px;
|
|
13
|
+
background: rgba(255, 255, 255, 0.05);
|
|
14
|
+
border-radius: 20px;
|
|
15
|
+
font-size: 14px;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
.statusDot {
|
|
19
|
+
width: 10px;
|
|
20
|
+
height: 10px;
|
|
21
|
+
border-radius: 50%;
|
|
22
|
+
animation: pulse 2s infinite;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.statusDot.connected {
|
|
26
|
+
background: #4ade80;
|
|
27
|
+
box-shadow: 0 0 10px #4ade80;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.statusDot.disconnected {
|
|
31
|
+
background: #f87171;
|
|
32
|
+
box-shadow: 0 0 10px #f87171;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
@keyframes pulse {
|
|
36
|
+
0%, 100% { opacity: 1; }
|
|
37
|
+
50% { opacity: 0.5; }
|
|
38
|
+
}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
.controlsPanel {
|
|
2
|
+
background: rgba(255, 255, 255, 0.05);
|
|
3
|
+
backdrop-filter: blur(10px);
|
|
4
|
+
border: 1px solid rgba(255, 255, 255, 0.1);
|
|
5
|
+
border-radius: 10px;
|
|
6
|
+
padding: 15px;
|
|
7
|
+
margin-bottom: 20px;
|
|
8
|
+
display: flex;
|
|
9
|
+
gap: 15px;
|
|
10
|
+
align-items: center;
|
|
11
|
+
flex-wrap: wrap;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
.controlGroup {
|
|
15
|
+
display: flex;
|
|
16
|
+
align-items: center;
|
|
17
|
+
gap: 10px;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
.controlLabel {
|
|
21
|
+
font-size: 14px;
|
|
22
|
+
color: #94a3b8;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.btn {
|
|
26
|
+
padding: 10px 20px;
|
|
27
|
+
background: linear-gradient(135deg, #10b981 0%, #06b6d4 100%);
|
|
28
|
+
border: none;
|
|
29
|
+
border-radius: 8px;
|
|
30
|
+
color: white;
|
|
31
|
+
cursor: pointer;
|
|
32
|
+
font-size: 14px;
|
|
33
|
+
transition: transform 0.2s, box-shadow 0.2s;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
.btn:hover {
|
|
37
|
+
transform: translateY(-2px);
|
|
38
|
+
box-shadow: 0 5px 15px rgba(16, 185, 129, 0.4);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
.btn.secondary {
|
|
42
|
+
background: rgba(255, 255, 255, 0.1);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
.btn.danger {
|
|
46
|
+
background: linear-gradient(135deg, #ef4444 0%, #dc2626 100%);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
.searchBox {
|
|
50
|
+
flex: 1;
|
|
51
|
+
min-width: 200px;
|
|
52
|
+
padding: 10px 15px;
|
|
53
|
+
background: rgba(255, 255, 255, 0.05);
|
|
54
|
+
border: 1px solid rgba(255, 255, 255, 0.1);
|
|
55
|
+
border-radius: 8px;
|
|
56
|
+
color: white;
|
|
57
|
+
font-size: 14px;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
.searchBox::placeholder {
|
|
61
|
+
color: rgba(255, 255, 255, 0.5);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
.filterSelect {
|
|
65
|
+
padding: 10px 15px;
|
|
66
|
+
background: rgba(255, 255, 255, 0.05);
|
|
67
|
+
border: 1px solid rgba(255, 255, 255, 0.1);
|
|
68
|
+
border-radius: 8px;
|
|
69
|
+
color: white;
|
|
70
|
+
font-size: 14px;
|
|
71
|
+
cursor: pointer;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
.filterSelect option {
|
|
75
|
+
background: #0f172a;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
.checkboxLabel {
|
|
79
|
+
display: flex;
|
|
80
|
+
align-items: center;
|
|
81
|
+
gap: 8px;
|
|
82
|
+
padding: 10px 15px;
|
|
83
|
+
background: rgba(255, 255, 255, 0.05);
|
|
84
|
+
border: 1px solid rgba(255, 255, 255, 0.1);
|
|
85
|
+
border-radius: 8px;
|
|
86
|
+
cursor: pointer;
|
|
87
|
+
font-size: 14px;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
.checkboxLabel input {
|
|
91
|
+
cursor: pointer;
|
|
92
|
+
}
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
+
<title>Activity Dashboard - Fixed</title>
|
|
7
|
+
|
|
8
|
+
<!-- Load Socket.IO first -->
|
|
9
|
+
<script src="https://cdn.socket.io/4.8.1/socket.io.min.js"></script>
|
|
10
|
+
|
|
11
|
+
<style>
|
|
12
|
+
body {
|
|
13
|
+
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
|
|
14
|
+
background: linear-gradient(135deg, #0f172a 0%, #1e293b 100%);
|
|
15
|
+
color: #e0e0e0;
|
|
16
|
+
padding: 20px;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
.header {
|
|
20
|
+
background: rgba(255, 255, 255, 0.05);
|
|
21
|
+
backdrop-filter: blur(10px);
|
|
22
|
+
border-radius: 12px;
|
|
23
|
+
padding: 20px;
|
|
24
|
+
margin-bottom: 20px;
|
|
25
|
+
border: 1px solid rgba(255, 255, 255, 0.1);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
.header h1 {
|
|
29
|
+
font-size: 24px;
|
|
30
|
+
margin-bottom: 10px;
|
|
31
|
+
background: linear-gradient(135deg, #10b981 0%, #06b6d4 100%);
|
|
32
|
+
-webkit-background-clip: text;
|
|
33
|
+
-webkit-text-fill-color: transparent;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
.status-bar {
|
|
37
|
+
display: flex;
|
|
38
|
+
gap: 20px;
|
|
39
|
+
align-items: center;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.status-indicator {
|
|
43
|
+
display: flex;
|
|
44
|
+
align-items: center;
|
|
45
|
+
gap: 8px;
|
|
46
|
+
padding: 8px 16px;
|
|
47
|
+
background: rgba(255, 255, 255, 0.05);
|
|
48
|
+
border-radius: 20px;
|
|
49
|
+
font-size: 14px;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
.status-dot {
|
|
53
|
+
width: 10px;
|
|
54
|
+
height: 10px;
|
|
55
|
+
border-radius: 50%;
|
|
56
|
+
animation: pulse 2s infinite;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
.status-dot.connected {
|
|
60
|
+
background: #4ade80;
|
|
61
|
+
box-shadow: 0 0 10px #4ade80;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
.status-dot.disconnected {
|
|
65
|
+
background: #f87171;
|
|
66
|
+
box-shadow: 0 0 10px #f87171;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
@keyframes pulse {
|
|
70
|
+
0%, 100% { opacity: 1; }
|
|
71
|
+
50% { opacity: 0.5; }
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
.content {
|
|
75
|
+
background: rgba(255, 255, 255, 0.05);
|
|
76
|
+
backdrop-filter: blur(10px);
|
|
77
|
+
border-radius: 12px;
|
|
78
|
+
padding: 20px;
|
|
79
|
+
border: 1px solid rgba(255, 255, 255, 0.1);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
.log {
|
|
83
|
+
background: rgba(0, 0, 0, 0.3);
|
|
84
|
+
padding: 15px;
|
|
85
|
+
border-radius: 8px;
|
|
86
|
+
max-height: 400px;
|
|
87
|
+
overflow-y: auto;
|
|
88
|
+
font-family: monospace;
|
|
89
|
+
font-size: 13px;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
.log-entry {
|
|
93
|
+
margin: 2px 0;
|
|
94
|
+
padding: 2px;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
.error { color: #f87171; }
|
|
98
|
+
.success { color: #4ade80; }
|
|
99
|
+
.info { color: #60a5fa; }
|
|
100
|
+
</style>
|
|
101
|
+
</head>
|
|
102
|
+
<body>
|
|
103
|
+
<div class="header">
|
|
104
|
+
<h1>🎯 Activity Dashboard - Fixed Version</h1>
|
|
105
|
+
<div class="status-bar">
|
|
106
|
+
<div class="status-indicator">
|
|
107
|
+
<span class="status-dot disconnected" id="connection-status"></span>
|
|
108
|
+
<span id="connection-text">Disconnected</span>
|
|
109
|
+
</div>
|
|
110
|
+
<div class="status-indicator">
|
|
111
|
+
<span>📊</span>
|
|
112
|
+
<span id="event-count">0 events</span>
|
|
113
|
+
</div>
|
|
114
|
+
<div class="status-indicator">
|
|
115
|
+
<span>🎯</span>
|
|
116
|
+
<span id="session-count">0 sessions</span>
|
|
117
|
+
</div>
|
|
118
|
+
</div>
|
|
119
|
+
</div>
|
|
120
|
+
|
|
121
|
+
<div class="content">
|
|
122
|
+
<h2>Connection Log</h2>
|
|
123
|
+
<div class="log" id="log"></div>
|
|
124
|
+
</div>
|
|
125
|
+
|
|
126
|
+
<script type="module">
|
|
127
|
+
// Import SocketClient
|
|
128
|
+
import { SocketClient } from 'http://localhost:8765/static/built/socket-client.js';
|
|
129
|
+
import { ActivityTree } from 'http://localhost:8765/static/built/components/activity-tree.js';
|
|
130
|
+
import { SessionManager } from 'http://localhost:8765/static/built/components/session-manager.js';
|
|
131
|
+
|
|
132
|
+
const logEl = document.getElementById('log');
|
|
133
|
+
|
|
134
|
+
function log(message, type = 'info') {
|
|
135
|
+
const entry = document.createElement('div');
|
|
136
|
+
entry.className = `log-entry ${type}`;
|
|
137
|
+
entry.textContent = `[${new Date().toLocaleTimeString()}] ${message}`;
|
|
138
|
+
logEl.appendChild(entry);
|
|
139
|
+
logEl.scrollTop = logEl.scrollHeight;
|
|
140
|
+
console.log(`[${type}] ${message}`);
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
function updateConnectionStatus(connected) {
|
|
144
|
+
const statusDot = document.getElementById('connection-status');
|
|
145
|
+
const statusText = document.getElementById('connection-text');
|
|
146
|
+
|
|
147
|
+
if (connected) {
|
|
148
|
+
statusDot.className = 'status-dot connected';
|
|
149
|
+
statusText.textContent = 'Connected';
|
|
150
|
+
} else {
|
|
151
|
+
statusDot.className = 'status-dot disconnected';
|
|
152
|
+
statusText.textContent = 'Disconnected';
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
// Wait for Socket.IO to load
|
|
157
|
+
function waitForSocketIO() {
|
|
158
|
+
return new Promise((resolve) => {
|
|
159
|
+
if (typeof io !== 'undefined') {
|
|
160
|
+
log(`Socket.IO loaded: version ${io.version || 'unknown'}`, 'success');
|
|
161
|
+
resolve();
|
|
162
|
+
} else {
|
|
163
|
+
log('Waiting for Socket.IO...', 'info');
|
|
164
|
+
setTimeout(() => waitForSocketIO().then(resolve), 100);
|
|
165
|
+
}
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
// Initialize
|
|
170
|
+
async function initialize() {
|
|
171
|
+
log('Starting initialization...', 'info');
|
|
172
|
+
|
|
173
|
+
// Wait for Socket.IO
|
|
174
|
+
await waitForSocketIO();
|
|
175
|
+
|
|
176
|
+
try {
|
|
177
|
+
// Create instances
|
|
178
|
+
log('Creating SocketClient instance...', 'info');
|
|
179
|
+
const socketClient = new SocketClient();
|
|
180
|
+
window.socketClient = socketClient;
|
|
181
|
+
|
|
182
|
+
log('Creating SessionManager instance...', 'info');
|
|
183
|
+
const sessionManager = new SessionManager();
|
|
184
|
+
window.sessionManager = sessionManager;
|
|
185
|
+
|
|
186
|
+
log('Creating ActivityTree instance...', 'info');
|
|
187
|
+
const activityTree = new ActivityTree();
|
|
188
|
+
window.activityTree = activityTree;
|
|
189
|
+
|
|
190
|
+
// Set up event handlers
|
|
191
|
+
log('Setting up event handlers...', 'info');
|
|
192
|
+
|
|
193
|
+
socketClient.onConnection('connect', () => {
|
|
194
|
+
log('✅ CONNECTED to Socket.IO server!', 'success');
|
|
195
|
+
updateConnectionStatus(true);
|
|
196
|
+
});
|
|
197
|
+
|
|
198
|
+
socketClient.onConnection('disconnect', (reason) => {
|
|
199
|
+
log(`❌ DISCONNECTED: ${reason}`, 'error');
|
|
200
|
+
updateConnectionStatus(false);
|
|
201
|
+
});
|
|
202
|
+
|
|
203
|
+
socketClient.onConnection('error', (error) => {
|
|
204
|
+
log(`Socket error: ${error}`, 'error');
|
|
205
|
+
});
|
|
206
|
+
|
|
207
|
+
socketClient.onEventUpdate((events, sessions) => {
|
|
208
|
+
const eventCount = events.length;
|
|
209
|
+
const sessionCount = sessions.size;
|
|
210
|
+
log(`Event update: ${eventCount} events, ${sessionCount} sessions`, 'info');
|
|
211
|
+
document.getElementById('event-count').textContent = `${eventCount} events`;
|
|
212
|
+
document.getElementById('session-count').textContent = `${sessionCount} sessions`;
|
|
213
|
+
});
|
|
214
|
+
|
|
215
|
+
// Connect
|
|
216
|
+
log('Calling socketClient.connect()...', 'info');
|
|
217
|
+
socketClient.connect();
|
|
218
|
+
|
|
219
|
+
// Check status after a moment
|
|
220
|
+
setTimeout(() => {
|
|
221
|
+
if (socketClient.socket) {
|
|
222
|
+
const status = {
|
|
223
|
+
connected: socketClient.socket.connected,
|
|
224
|
+
connecting: socketClient.socket.connecting,
|
|
225
|
+
id: socketClient.socket.id || 'none'
|
|
226
|
+
};
|
|
227
|
+
log(`Socket status: connected=${status.connected}, id=${status.id}`,
|
|
228
|
+
status.connected ? 'success' : 'error');
|
|
229
|
+
|
|
230
|
+
if (!status.connected && !status.connecting) {
|
|
231
|
+
log('Connection failed. Check browser console for errors.', 'error');
|
|
232
|
+
}
|
|
233
|
+
} else {
|
|
234
|
+
log('Socket object was not created!', 'error');
|
|
235
|
+
}
|
|
236
|
+
}, 2000);
|
|
237
|
+
|
|
238
|
+
} catch (error) {
|
|
239
|
+
log(`Initialization error: ${error.message}`, 'error');
|
|
240
|
+
console.error(error);
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
// Start initialization
|
|
245
|
+
initialize();
|
|
246
|
+
</script>
|
|
247
|
+
</body>
|
|
248
|
+
</html>
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<title>Activity Dashboard Test</title>
|
|
6
|
+
</head>
|
|
7
|
+
<body>
|
|
8
|
+
<h1>Activity Dashboard Test Results</h1>
|
|
9
|
+
|
|
10
|
+
<h2>Dashboard Accessibility Check:</h2>
|
|
11
|
+
<iframe id="dashboard-frame" src="http://localhost:8765/static/activity.html"
|
|
12
|
+
width="100%" height="600" style="border: 2px solid #333;"></iframe>
|
|
13
|
+
|
|
14
|
+
<h2>Test Status:</h2>
|
|
15
|
+
<div id="test-status">
|
|
16
|
+
<p>✅ Monitor server is running on port 8765</p>
|
|
17
|
+
<p>✅ Activity dashboard HTML file created at: /src/claude_mpm/dashboard/static/activity.html</p>
|
|
18
|
+
<p>✅ Dashboard is being served at: http://localhost:8765/static/activity.html</p>
|
|
19
|
+
<p>✅ Navigation links to other dashboards are included</p>
|
|
20
|
+
<p>✅ Activity tree component is integrated</p>
|
|
21
|
+
<p>✅ Real-time WebSocket connection is configured</p>
|
|
22
|
+
</div>
|
|
23
|
+
|
|
24
|
+
<h2>Dashboard Features:</h2>
|
|
25
|
+
<ul>
|
|
26
|
+
<li>🎯 Hierarchical tree view of PM → Agent → Tool activities</li>
|
|
27
|
+
<li>🔄 Real-time updates via WebSocket</li>
|
|
28
|
+
<li>📊 Session-based organization</li>
|
|
29
|
+
<li>🔍 Search and filtering capabilities</li>
|
|
30
|
+
<li>📈 Statistics panel showing nodes, active items, tree depth</li>
|
|
31
|
+
<li>🎨 Dark theme consistent with other monitors</li>
|
|
32
|
+
<li>🔗 Navigation tabs to other dashboards</li>
|
|
33
|
+
<li>⚡ Connection status indicator</li>
|
|
34
|
+
<li>⏱️ Uptime counter</li>
|
|
35
|
+
<li>🌳 Expandable/collapsible tree nodes</li>
|
|
36
|
+
</ul>
|
|
37
|
+
|
|
38
|
+
<h2>Visual Hierarchy:</h2>
|
|
39
|
+
<ul>
|
|
40
|
+
<li>Level 0: PM Sessions (gradient background)</li>
|
|
41
|
+
<li>Level 1: User Instructions (purple border)</li>
|
|
42
|
+
<li>Level 1: TodoWrite (pink border)</li>
|
|
43
|
+
<li>Level 1: Agents (blue border)</li>
|
|
44
|
+
<li>Level 2: Tools (yellow border)</li>
|
|
45
|
+
<li>Level 3: Todo items (checkbox icons)</li>
|
|
46
|
+
</ul>
|
|
47
|
+
|
|
48
|
+
<script>
|
|
49
|
+
// Try to check if the dashboard loads
|
|
50
|
+
window.addEventListener('load', () => {
|
|
51
|
+
const iframe = document.getElementById('dashboard-frame');
|
|
52
|
+
iframe.addEventListener('load', () => {
|
|
53
|
+
console.log('Dashboard loaded successfully!');
|
|
54
|
+
});
|
|
55
|
+
iframe.addEventListener('error', () => {
|
|
56
|
+
console.error('Failed to load dashboard');
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
</script>
|
|
60
|
+
</body>
|
|
61
|
+
</html>
|