claude-mpm 5.0.2__py3-none-any.whl → 5.4.3__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.

Files changed (184) hide show
  1. claude_mpm/VERSION +1 -1
  2. claude_mpm/agents/CLAUDE_MPM_TEACHER_OUTPUT_STYLE.md +2002 -0
  3. claude_mpm/agents/PM_INSTRUCTIONS.md +1218 -905
  4. claude_mpm/agents/agent_loader.py +10 -17
  5. claude_mpm/agents/base_agent_loader.py +10 -35
  6. claude_mpm/agents/frontmatter_validator.py +68 -0
  7. claude_mpm/agents/templates/circuit-breakers.md +431 -45
  8. claude_mpm/cli/__init__.py +0 -1
  9. claude_mpm/cli/commands/__init__.py +2 -0
  10. claude_mpm/cli/commands/agent_state_manager.py +67 -23
  11. claude_mpm/cli/commands/agents.py +446 -25
  12. claude_mpm/cli/commands/auto_configure.py +535 -233
  13. claude_mpm/cli/commands/configure.py +1500 -147
  14. claude_mpm/cli/commands/configure_agent_display.py +13 -6
  15. claude_mpm/cli/commands/mpm_init/core.py +158 -1
  16. claude_mpm/cli/commands/mpm_init/knowledge_extractor.py +481 -0
  17. claude_mpm/cli/commands/mpm_init/prompts.py +280 -0
  18. claude_mpm/cli/commands/postmortem.py +401 -0
  19. claude_mpm/cli/commands/run.py +1 -39
  20. claude_mpm/cli/commands/skills.py +322 -19
  21. claude_mpm/cli/commands/summarize.py +413 -0
  22. claude_mpm/cli/executor.py +8 -0
  23. claude_mpm/cli/interactive/agent_wizard.py +302 -195
  24. claude_mpm/cli/parsers/agents_parser.py +137 -0
  25. claude_mpm/cli/parsers/auto_configure_parser.py +13 -0
  26. claude_mpm/cli/parsers/base_parser.py +9 -0
  27. claude_mpm/cli/parsers/skills_parser.py +7 -0
  28. claude_mpm/cli/startup.py +133 -85
  29. claude_mpm/commands/mpm-agents-auto-configure.md +2 -2
  30. claude_mpm/commands/mpm-agents-list.md +2 -2
  31. claude_mpm/commands/mpm-config-view.md +2 -2
  32. claude_mpm/commands/mpm-help.md +3 -0
  33. claude_mpm/commands/{mpm-ticket-organize.md → mpm-organize.md} +4 -5
  34. claude_mpm/commands/mpm-postmortem.md +123 -0
  35. claude_mpm/commands/mpm-session-resume.md +2 -2
  36. claude_mpm/commands/mpm-ticket-view.md +2 -2
  37. claude_mpm/config/agent_presets.py +312 -82
  38. claude_mpm/config/agent_sources.py +27 -0
  39. claude_mpm/config/skill_presets.py +392 -0
  40. claude_mpm/constants.py +1 -0
  41. claude_mpm/core/claude_runner.py +2 -25
  42. claude_mpm/core/framework/loaders/agent_loader.py +8 -5
  43. claude_mpm/core/framework/loaders/file_loader.py +54 -101
  44. claude_mpm/core/interactive_session.py +19 -5
  45. claude_mpm/core/oneshot_session.py +16 -4
  46. claude_mpm/core/output_style_manager.py +173 -43
  47. claude_mpm/core/protocols/__init__.py +23 -0
  48. claude_mpm/core/protocols/runner_protocol.py +103 -0
  49. claude_mpm/core/protocols/session_protocol.py +131 -0
  50. claude_mpm/core/shared/singleton_manager.py +11 -4
  51. claude_mpm/core/socketio_pool.py +3 -3
  52. claude_mpm/core/system_context.py +38 -0
  53. claude_mpm/core/unified_agent_registry.py +134 -16
  54. claude_mpm/core/unified_config.py +22 -0
  55. claude_mpm/hooks/claude_hooks/__pycache__/__init__.cpython-313.pyc +0 -0
  56. claude_mpm/hooks/claude_hooks/__pycache__/correlation_manager.cpython-313.pyc +0 -0
  57. claude_mpm/hooks/claude_hooks/__pycache__/event_handlers.cpython-313.pyc +0 -0
  58. claude_mpm/hooks/claude_hooks/__pycache__/hook_handler.cpython-313.pyc +0 -0
  59. claude_mpm/hooks/claude_hooks/__pycache__/memory_integration.cpython-313.pyc +0 -0
  60. claude_mpm/hooks/claude_hooks/__pycache__/response_tracking.cpython-313.pyc +0 -0
  61. claude_mpm/hooks/claude_hooks/__pycache__/tool_analysis.cpython-313.pyc +0 -0
  62. claude_mpm/hooks/claude_hooks/correlation_manager.py +60 -0
  63. claude_mpm/hooks/claude_hooks/event_handlers.py +35 -2
  64. claude_mpm/hooks/claude_hooks/hook_handler.py +4 -0
  65. claude_mpm/hooks/claude_hooks/memory_integration.py +12 -1
  66. claude_mpm/hooks/claude_hooks/services/__pycache__/__init__.cpython-313.pyc +0 -0
  67. claude_mpm/hooks/claude_hooks/services/__pycache__/connection_manager_http.cpython-313.pyc +0 -0
  68. claude_mpm/hooks/claude_hooks/services/__pycache__/duplicate_detector.cpython-313.pyc +0 -0
  69. claude_mpm/hooks/claude_hooks/services/__pycache__/state_manager.cpython-313.pyc +0 -0
  70. claude_mpm/hooks/claude_hooks/services/__pycache__/subagent_processor.cpython-313.pyc +0 -0
  71. claude_mpm/hooks/claude_hooks/services/connection_manager.py +4 -0
  72. claude_mpm/models/agent_definition.py +7 -0
  73. claude_mpm/scripts/launch_monitor.py +93 -13
  74. claude_mpm/services/agents/agent_recommendation_service.py +279 -0
  75. claude_mpm/services/agents/cache_git_manager.py +621 -0
  76. claude_mpm/services/agents/deployment/agent_template_builder.py +3 -2
  77. claude_mpm/services/agents/deployment/multi_source_deployment_service.py +110 -3
  78. claude_mpm/services/agents/deployment/remote_agent_discovery_service.py +518 -55
  79. claude_mpm/services/agents/git_source_manager.py +20 -0
  80. claude_mpm/services/agents/sources/git_source_sync_service.py +45 -6
  81. claude_mpm/services/agents/toolchain_detector.py +6 -5
  82. claude_mpm/services/analysis/__init__.py +35 -0
  83. claude_mpm/services/analysis/clone_detector.py +1030 -0
  84. claude_mpm/services/analysis/postmortem_reporter.py +474 -0
  85. claude_mpm/services/analysis/postmortem_service.py +765 -0
  86. claude_mpm/services/command_deployment_service.py +106 -5
  87. claude_mpm/services/core/base.py +7 -2
  88. claude_mpm/services/diagnostics/checks/mcp_services_check.py +7 -15
  89. claude_mpm/services/event_bus/config.py +3 -1
  90. claude_mpm/services/git/git_operations_service.py +8 -8
  91. claude_mpm/services/mcp_config_manager.py +75 -145
  92. claude_mpm/services/mcp_service_verifier.py +6 -3
  93. claude_mpm/services/monitor/daemon.py +37 -10
  94. claude_mpm/services/monitor/daemon_manager.py +134 -21
  95. claude_mpm/services/monitor/server.py +225 -19
  96. claude_mpm/services/project/project_organizer.py +4 -0
  97. claude_mpm/services/runner_configuration_service.py +16 -3
  98. claude_mpm/services/session_management_service.py +16 -4
  99. claude_mpm/services/socketio/event_normalizer.py +15 -1
  100. claude_mpm/services/socketio/server/core.py +160 -21
  101. claude_mpm/services/version_control/git_operations.py +103 -0
  102. claude_mpm/utils/agent_filters.py +261 -0
  103. claude_mpm/utils/gitignore.py +3 -0
  104. claude_mpm/utils/migration.py +372 -0
  105. claude_mpm/utils/progress.py +5 -1
  106. {claude_mpm-5.0.2.dist-info → claude_mpm-5.4.3.dist-info}/METADATA +69 -84
  107. {claude_mpm-5.0.2.dist-info → claude_mpm-5.4.3.dist-info}/RECORD +112 -153
  108. {claude_mpm-5.0.2.dist-info → claude_mpm-5.4.3.dist-info}/entry_points.txt +0 -2
  109. claude_mpm/dashboard/analysis_runner.py +0 -455
  110. claude_mpm/dashboard/index.html +0 -13
  111. claude_mpm/dashboard/open_dashboard.py +0 -66
  112. claude_mpm/dashboard/static/css/activity.css +0 -1958
  113. claude_mpm/dashboard/static/css/connection-status.css +0 -370
  114. claude_mpm/dashboard/static/css/dashboard.css +0 -4701
  115. claude_mpm/dashboard/static/js/components/activity-tree.js +0 -1871
  116. claude_mpm/dashboard/static/js/components/agent-hierarchy.js +0 -777
  117. claude_mpm/dashboard/static/js/components/agent-inference.js +0 -956
  118. claude_mpm/dashboard/static/js/components/build-tracker.js +0 -333
  119. claude_mpm/dashboard/static/js/components/code-simple.js +0 -857
  120. claude_mpm/dashboard/static/js/components/connection-debug.js +0 -654
  121. claude_mpm/dashboard/static/js/components/diff-viewer.js +0 -891
  122. claude_mpm/dashboard/static/js/components/event-processor.js +0 -542
  123. claude_mpm/dashboard/static/js/components/event-viewer.js +0 -1155
  124. claude_mpm/dashboard/static/js/components/export-manager.js +0 -368
  125. claude_mpm/dashboard/static/js/components/file-change-tracker.js +0 -443
  126. claude_mpm/dashboard/static/js/components/file-change-viewer.js +0 -690
  127. claude_mpm/dashboard/static/js/components/file-tool-tracker.js +0 -724
  128. claude_mpm/dashboard/static/js/components/file-viewer.js +0 -580
  129. claude_mpm/dashboard/static/js/components/hud-library-loader.js +0 -211
  130. claude_mpm/dashboard/static/js/components/hud-manager.js +0 -671
  131. claude_mpm/dashboard/static/js/components/hud-visualizer.js +0 -1718
  132. claude_mpm/dashboard/static/js/components/module-viewer.js +0 -2764
  133. claude_mpm/dashboard/static/js/components/session-manager.js +0 -579
  134. claude_mpm/dashboard/static/js/components/socket-manager.js +0 -368
  135. claude_mpm/dashboard/static/js/components/ui-state-manager.js +0 -749
  136. claude_mpm/dashboard/static/js/components/unified-data-viewer.js +0 -1824
  137. claude_mpm/dashboard/static/js/components/working-directory.js +0 -920
  138. claude_mpm/dashboard/static/js/connection-manager.js +0 -536
  139. claude_mpm/dashboard/static/js/dashboard.js +0 -1914
  140. claude_mpm/dashboard/static/js/extension-error-handler.js +0 -164
  141. claude_mpm/dashboard/static/js/socket-client.js +0 -1474
  142. claude_mpm/dashboard/static/js/tab-isolation-fix.js +0 -185
  143. claude_mpm/dashboard/static/socket.io.min.js +0 -7
  144. claude_mpm/dashboard/static/socket.io.v4.8.1.backup.js +0 -7
  145. claude_mpm/dashboard/templates/code_simple.html +0 -153
  146. claude_mpm/dashboard/templates/index.html +0 -606
  147. claude_mpm/dashboard/test_dashboard.html +0 -372
  148. claude_mpm/scripts/mcp_server.py +0 -75
  149. claude_mpm/scripts/mcp_wrapper.py +0 -39
  150. claude_mpm/services/mcp_gateway/__init__.py +0 -159
  151. claude_mpm/services/mcp_gateway/auto_configure.py +0 -369
  152. claude_mpm/services/mcp_gateway/config/__init__.py +0 -17
  153. claude_mpm/services/mcp_gateway/config/config_loader.py +0 -296
  154. claude_mpm/services/mcp_gateway/config/config_schema.py +0 -243
  155. claude_mpm/services/mcp_gateway/config/configuration.py +0 -429
  156. claude_mpm/services/mcp_gateway/core/__init__.py +0 -43
  157. claude_mpm/services/mcp_gateway/core/base.py +0 -312
  158. claude_mpm/services/mcp_gateway/core/exceptions.py +0 -253
  159. claude_mpm/services/mcp_gateway/core/interfaces.py +0 -443
  160. claude_mpm/services/mcp_gateway/core/process_pool.py +0 -971
  161. claude_mpm/services/mcp_gateway/core/singleton_manager.py +0 -315
  162. claude_mpm/services/mcp_gateway/core/startup_verification.py +0 -316
  163. claude_mpm/services/mcp_gateway/main.py +0 -589
  164. claude_mpm/services/mcp_gateway/registry/__init__.py +0 -12
  165. claude_mpm/services/mcp_gateway/registry/service_registry.py +0 -412
  166. claude_mpm/services/mcp_gateway/registry/tool_registry.py +0 -489
  167. claude_mpm/services/mcp_gateway/server/__init__.py +0 -15
  168. claude_mpm/services/mcp_gateway/server/mcp_gateway.py +0 -414
  169. claude_mpm/services/mcp_gateway/server/stdio_handler.py +0 -372
  170. claude_mpm/services/mcp_gateway/server/stdio_server.py +0 -712
  171. claude_mpm/services/mcp_gateway/tools/__init__.py +0 -36
  172. claude_mpm/services/mcp_gateway/tools/base_adapter.py +0 -485
  173. claude_mpm/services/mcp_gateway/tools/document_summarizer.py +0 -789
  174. claude_mpm/services/mcp_gateway/tools/external_mcp_services.py +0 -654
  175. claude_mpm/services/mcp_gateway/tools/health_check_tool.py +0 -456
  176. claude_mpm/services/mcp_gateway/tools/hello_world.py +0 -551
  177. claude_mpm/services/mcp_gateway/tools/kuzu_memory_service.py +0 -555
  178. claude_mpm/services/mcp_gateway/utils/__init__.py +0 -14
  179. claude_mpm/services/mcp_gateway/utils/package_version_checker.py +0 -160
  180. claude_mpm/services/mcp_gateway/utils/update_preferences.py +0 -170
  181. /claude_mpm/agents/{OUTPUT_STYLE.md → CLAUDE_MPM_OUTPUT_STYLE.md} +0 -0
  182. {claude_mpm-5.0.2.dist-info → claude_mpm-5.4.3.dist-info}/WHEEL +0 -0
  183. {claude_mpm-5.0.2.dist-info → claude_mpm-5.4.3.dist-info}/licenses/LICENSE +0 -0
  184. {claude_mpm-5.0.2.dist-info → claude_mpm-5.4.3.dist-info}/top_level.txt +0 -0
@@ -1,1958 +0,0 @@
1
- /* Activity Tab Styles for Linear Tree View */
2
-
3
- /* Container and Layout */
4
- .activity-container {
5
- padding: 20px;
6
- height: calc(100vh - 280px);
7
- display: flex;
8
- flex-direction: column;
9
- }
10
-
11
- .activity-header {
12
- display: flex;
13
- justify-content: space-between;
14
- align-items: center;
15
- padding: 15px;
16
- background: white;
17
- border-radius: 8px;
18
- margin-bottom: 15px;
19
- box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);
20
- }
21
-
22
- .activity-controls {
23
- display: flex;
24
- gap: 10px;
25
- align-items: center;
26
- }
27
-
28
- .activity-controls .btn-sm {
29
- padding: 6px 12px;
30
- font-size: 12px;
31
- background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
32
- color: white;
33
- border: none;
34
- border-radius: 4px;
35
- cursor: pointer;
36
- transition: all 0.3s;
37
- }
38
-
39
- .activity-controls .btn-sm:hover {
40
- transform: translateY(-1px);
41
- box-shadow: 0 4px 8px rgba(102, 126, 234, 0.4);
42
- }
43
-
44
- .activity-controls select {
45
- padding: 6px 10px;
46
- border: 1px solid #e2e8f0;
47
- border-radius: 4px;
48
- font-size: 12px;
49
- background: white;
50
- }
51
-
52
- .activity-controls input {
53
- padding: 6px 12px;
54
- border: 1px solid #e2e8f0;
55
- border-radius: 4px;
56
- font-size: 12px;
57
- width: 200px;
58
- }
59
-
60
- .activity-stats {
61
- display: flex;
62
- gap: 20px;
63
- }
64
-
65
- .stat-item {
66
- display: flex;
67
- align-items: center;
68
- gap: 5px;
69
- }
70
-
71
- .stat-label {
72
- font-size: 12px;
73
- color: #718096;
74
- font-weight: 600;
75
- }
76
-
77
- .stat-value {
78
- font-size: 14px;
79
- font-weight: bold;
80
- color: #2d3748;
81
- }
82
-
83
- /* Tree Container */
84
- .activity-tree-container {
85
- flex: 1;
86
- background: white;
87
- border-radius: 8px;
88
- box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);
89
- position: relative;
90
- overflow-y: auto;
91
- overflow-x: hidden;
92
- min-height: 400px;
93
- max-height: calc(100vh - 320px);
94
- padding: 0;
95
- scroll-behavior: smooth;
96
- }
97
-
98
- /* SVG Tree Styles */
99
- #activity-tree-svg {
100
- font-family: 'SF Mono', Monaco, 'Cascadia Code', 'Roboto Mono', monospace;
101
- width: 100%;
102
- height: 100%;
103
- min-height: 400px;
104
- }
105
-
106
- /* D3 Tree Group */
107
- .tree-group {
108
- cursor: move; /* Cursor for pan */
109
- }
110
-
111
- /* D3 Node Styles */
112
- .node {
113
- cursor: pointer;
114
- transition: all 0.3s ease;
115
- }
116
-
117
- .node.selected .node-circle {
118
- stroke: #4299e1 !important;
119
- stroke-width: 3px !important;
120
- filter: drop-shadow(0 0 6px rgba(66, 153, 225, 0.6));
121
- }
122
-
123
- .node-circle {
124
- transition: all 0.3s ease;
125
- }
126
-
127
- .node:hover .node-circle {
128
- stroke-width: 3px;
129
- filter: drop-shadow(0 0 4px rgba(0, 0, 0, 0.3));
130
- }
131
-
132
- .node-icon {
133
- font-size: 12px;
134
- pointer-events: none;
135
- font-weight: bold;
136
- }
137
-
138
- .node-label {
139
- font-size: 14px;
140
- font-weight: 500;
141
- fill: #2d3748;
142
- transition: all 0.3s ease;
143
- }
144
-
145
- .node:hover .node-label {
146
- fill: #4299e1;
147
- }
148
-
149
- /* Node Type Colors */
150
- .node-project .node-circle {
151
- fill: #4299e1;
152
- stroke: #2c5282;
153
- }
154
-
155
- .node-session .node-circle {
156
- fill: #38a169;
157
- stroke: #276749;
158
- }
159
-
160
- .node-todo .node-circle {
161
- fill: #ed8936;
162
- stroke: #c05621;
163
- }
164
-
165
- .node-agent .node-circle {
166
- fill: #9f7aea;
167
- stroke: #6b46c1;
168
- }
169
-
170
- .node-tool .node-circle {
171
- fill: #e53e3e;
172
- stroke: #c53030;
173
- }
174
-
175
- /* Status Badges */
176
- .status-badge {
177
- transition: all 0.3s ease;
178
- }
179
-
180
- .status-text {
181
- font-size: 10px;
182
- font-weight: 600;
183
- text-transform: uppercase;
184
- letter-spacing: 0.5px;
185
- pointer-events: none;
186
- }
187
-
188
- /* Links */
189
- .link {
190
- transition: all 0.3s ease;
191
- }
192
-
193
- .node:hover .link {
194
- stroke: #4299e1;
195
- stroke-width: 3px;
196
- }
197
-
198
- /* D3 Tooltip */
199
- .d3-tooltip {
200
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
201
- line-height: 1.4;
202
- max-width: 250px;
203
- word-wrap: break-word;
204
- }
205
-
206
- /* Legacy Tree Styles - Keep for fallback */
207
- .linear-tree {
208
- font-family: 'SF Mono', Monaco, 'Cascadia Code', 'Roboto Mono', monospace;
209
- line-height: 1.6;
210
- padding: 15px;
211
- min-height: 100%;
212
- }
213
-
214
- /* Tree Node Base Styles */
215
- .tree-node {
216
- margin: 2px 0;
217
- border-radius: 4px;
218
- transition: background-color 0.2s ease;
219
- }
220
-
221
- .tree-node:hover {
222
- background-color: #f7fafc;
223
- }
224
-
225
- .tree-node-content {
226
- display: flex;
227
- align-items: center;
228
- padding: 6px 8px;
229
- gap: 8px;
230
- cursor: pointer;
231
- border-radius: 4px;
232
- transition: all 0.2s ease;
233
- }
234
-
235
- .tree-node-content:hover {
236
- background-color: #edf2f7;
237
- }
238
-
239
- /* Tree Indentation */
240
- .tree-node[data-level="1"] {
241
- margin-left: 20px;
242
- }
243
-
244
- .tree-node[data-level="2"] {
245
- margin-left: 40px;
246
- }
247
-
248
- .tree-node[data-level="3"] {
249
- margin-left: 60px;
250
- }
251
-
252
- .tree-node[data-level="4"] {
253
- margin-left: 80px;
254
- }
255
-
256
- /* Tree Icons */
257
- .tree-icon {
258
- font-size: 16px;
259
- width: 20px;
260
- text-align: center;
261
- flex-shrink: 0;
262
- }
263
-
264
- .tree-status-icon {
265
- font-size: 14px;
266
- width: 18px;
267
- text-align: center;
268
- flex-shrink: 0;
269
- margin-left: 2px;
270
- }
271
-
272
- .tree-expand-icon {
273
- font-size: 12px;
274
- width: 16px;
275
- text-align: center;
276
- flex-shrink: 0;
277
- cursor: pointer;
278
- color: #718096;
279
- transition: transform 0.2s ease;
280
- }
281
-
282
- .tree-expand-icon:hover {
283
- color: #4a5568;
284
- transform: scale(1.2);
285
- }
286
-
287
- /* Tree Labels and Text */
288
- .tree-label {
289
- flex-grow: 1;
290
- font-size: 14px;
291
- color: #2d3748;
292
- font-weight: 500;
293
- }
294
-
295
- .tree-label.clickable {
296
- cursor: pointer;
297
- transition: all 0.2s ease;
298
- border-radius: 3px;
299
- padding: 2px 4px;
300
- }
301
-
302
- .tree-label.clickable:hover {
303
- background-color: #e2e8f0;
304
- color: #2c5282;
305
- }
306
-
307
- .tree-meta {
308
- font-size: 12px;
309
- color: #718096;
310
- font-style: italic;
311
- margin-left: auto;
312
- }
313
-
314
- .tree-params {
315
- font-size: 11px;
316
- color: #4a5568;
317
- background: #edf2f7;
318
- padding: 2px 6px;
319
- border-radius: 3px;
320
- max-width: 200px;
321
- overflow: hidden;
322
- text-overflow: ellipsis;
323
- white-space: nowrap;
324
- }
325
-
326
- .tree-status {
327
- font-size: 11px;
328
- padding: 2px 6px;
329
- border-radius: 12px;
330
- font-weight: 600;
331
- text-transform: uppercase;
332
- letter-spacing: 0.5px;
333
- margin-left: 8px;
334
- }
335
-
336
- /* Tree Children */
337
- .tree-children {
338
- margin-left: 0;
339
- border-left: 1px solid #e2e8f0;
340
- margin-left: 20px;
341
- padding-left: 0;
342
- }
343
-
344
- /* Node Type Styles */
345
-
346
- /* Project Root */
347
- .tree-node.project-root {
348
- background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
349
- color: white;
350
- margin-bottom: 10px;
351
- border-radius: 6px;
352
- }
353
-
354
- .tree-node.project-root .tree-node-content {
355
- padding: 10px 12px;
356
- }
357
-
358
- .tree-node.project-root .tree-label {
359
- color: white;
360
- font-weight: 600;
361
- font-size: 16px;
362
- }
363
-
364
- .tree-node.project-root .tree-meta {
365
- color: rgba(255, 255, 255, 0.8);
366
- }
367
-
368
- /* Session Nodes */
369
- .tree-node.session {
370
- background: #f8f9fa;
371
- border: 1px solid #e9ecef;
372
- margin-bottom: 8px;
373
- border-radius: 6px;
374
- }
375
-
376
- .tree-node.session .tree-node-content {
377
- padding: 8px 12px;
378
- font-weight: 600;
379
- }
380
-
381
- .tree-node.session .tree-icon {
382
- font-size: 18px;
383
- }
384
-
385
- .tree-node.session .tree-label {
386
- font-size: 15px;
387
- color: #495057;
388
- }
389
-
390
- /* Todo Nodes */
391
- .tree-node.todo {
392
- border-left: 3px solid #cbd5e0;
393
- margin: 4px 0;
394
- }
395
-
396
- .tree-node.todo.status-pending {
397
- border-left-color: #cbd5e0;
398
- background: #f8f9fa;
399
- }
400
-
401
- .tree-node.todo.status-in_progress {
402
- border-left-color: #3182ce;
403
- background: #ebf8ff;
404
- }
405
-
406
- .tree-node.todo.status-completed {
407
- border-left-color: #38a169;
408
- background: #f0fff4;
409
- }
410
-
411
- /* Agent Nodes */
412
- .tree-node.agent {
413
- background: #fef5e7;
414
- border-left: 2px solid #ed8936;
415
- margin: 2px 0;
416
- cursor: pointer;
417
- transition: all 0.2s ease;
418
- }
419
-
420
- .tree-node.agent:hover {
421
- background: #fed7aa;
422
- transform: translateX(2px);
423
- box-shadow: 0 2px 4px rgba(237, 137, 54, 0.2);
424
- }
425
-
426
- .tree-node.agent.selected {
427
- background: #fed7aa;
428
- border-left-color: #c05621;
429
- border-left-width: 4px;
430
- box-shadow: 0 4px 8px rgba(192, 86, 33, 0.3);
431
- }
432
-
433
- .tree-node.agent.status-active {
434
- background: #fef5e7;
435
- border-left-color: #ed8936;
436
- }
437
-
438
- .tree-node.agent.status-completed {
439
- background: #f0fff4;
440
- border-left-color: #38a169;
441
- }
442
-
443
- /* Tool Nodes - Maximum Specificity to Override Any Conflicting Styles */
444
- body .activity-tree-container .linear-tree .tree-node.tool,
445
- .tree-node.tool {
446
- background: #faf5ff !important;
447
- border-left: 2px solid #9f7aea !important;
448
- margin: 1px 0 !important;
449
- cursor: pointer !important;
450
- transition: all 0.2s ease !important;
451
- }
452
-
453
- body .activity-tree-container .linear-tree .tree-node.tool:hover,
454
- .tree-node.tool:hover {
455
- background: #f3e8ff !important;
456
- transform: translateX(2px) !important;
457
- box-shadow: 0 2px 4px rgba(159, 122, 234, 0.2) !important;
458
- }
459
-
460
- body .activity-tree-container .linear-tree .tree-node.tool.selected,
461
- .tree-node.tool.selected {
462
- background: #e9d8fd !important;
463
- border-left-color: #7c3aed !important;
464
- border-left-width: 4px !important;
465
- box-shadow: 0 4px 8px rgba(124, 58, 237, 0.3) !important;
466
- }
467
-
468
- /* Tool Status Styles - Maximum Specificity to Override Any Other Rules */
469
- body .activity-tree-container .linear-tree .tree-node.tool.status-pending,
470
- .tree-node.tool.status-pending {
471
- background: #faf5ff !important;
472
- border-left-color: #9f7aea !important;
473
- border-left-width: 2px !important;
474
- }
475
-
476
- body .activity-tree-container .linear-tree .tree-node.tool.status-in_progress,
477
- .tree-node.tool.status-in_progress {
478
- background: #e6fffa !important;
479
- border-left-color: #38b2ac !important;
480
- border-left-width: 3px !important;
481
- animation: pulse-tool 2s infinite;
482
- }
483
-
484
- body .activity-tree-container .linear-tree .tree-node.tool.status-completed,
485
- .tree-node.tool.status-completed {
486
- background: #f0fff4 !important;
487
- border-left-color: #38a169 !important;
488
- border-left-width: 2px !important;
489
- }
490
-
491
- body .activity-tree-container .linear-tree .tree-node.tool.status-failed,
492
- .tree-node.tool.status-failed {
493
- background: #fed7d7 !important;
494
- border-left-color: #e53e3e !important;
495
- border-left-width: 2px !important;
496
- }
497
-
498
- /* Tool Status Icons */
499
- .tree-node.tool .tree-status-icon {
500
- color: #718096;
501
- }
502
-
503
- .tree-node.tool.status-in_progress .tree-status-icon {
504
- color: #38b2ac;
505
- animation: spin 2s linear infinite;
506
- }
507
-
508
- .tree-node.tool.status-completed .tree-status-icon {
509
- color: #38a169;
510
- }
511
-
512
- .tree-node.tool.status-failed .tree-status-icon {
513
- color: #e53e3e;
514
- }
515
-
516
- /* Spinning animation for in-progress tools */
517
- @keyframes spin {
518
- 0% { transform: rotate(0deg); }
519
- 100% { transform: rotate(360deg); }
520
- }
521
-
522
- /* Pulse animation for in-progress tools */
523
- @keyframes pulse-tool {
524
- 0% {
525
- background: #e6fffa !important;
526
- }
527
- 50% {
528
- background: #b2f5ea !important;
529
- }
530
- 100% {
531
- background: #e6fffa !important;
532
- }
533
- }
534
-
535
- /* Privileged Tool (TodoWrite) - High Specificity */
536
- body .activity-tree-container .linear-tree .tree-node.tool.privileged-tool,
537
- .tree-node.tool.privileged-tool {
538
- background: #fff8e1 !important;
539
- border-left: 3px solid #ff9800 !important;
540
- border-radius: 6px !important;
541
- margin: 4px 0 !important;
542
- }
543
-
544
- body .activity-tree-container .linear-tree .tree-node.tool.privileged-tool .tree-label,
545
- .tree-node.tool.privileged-tool .tree-label {
546
- font-weight: 600 !important;
547
- color: #e65100 !important;
548
- }
549
-
550
- body .activity-tree-container .linear-tree .tree-node.tool.privileged-tool .tree-params,
551
- .tree-node.tool.privileged-tool .tree-params {
552
- background: #ffe0b2 !important;
553
- color: #e65100 !important;
554
- font-weight: 500 !important;
555
- }
556
-
557
- /* Catch-all rule to prevent any other styles from overriding tool styling */
558
- .tree-node.tool:not(.privileged-tool) {
559
- background: #faf5ff !important;
560
- border-left: 2px solid #9f7aea !important;
561
- }
562
-
563
- .tree-node.tool:not(.privileged-tool).status-pending {
564
- background: #faf5ff !important;
565
- border-left-color: #9f7aea !important;
566
- }
567
-
568
- .tree-node.tool:not(.privileged-tool).status-in_progress {
569
- background: #e6fffa !important;
570
- border-left-color: #38b2ac !important;
571
- border-left-width: 3px !important;
572
- animation: pulse-tool 2s infinite;
573
- }
574
-
575
- .tree-node.tool:not(.privileged-tool).status-completed {
576
- background: #f0fff4 !important;
577
- border-left-color: #38a169 !important;
578
- }
579
-
580
- .tree-node.tool:not(.privileged-tool).status-failed {
581
- background: #fed7d7 !important;
582
- border-left-color: #e53e3e !important;
583
- }
584
-
585
- /* Todo Items within TodoWrite tool */
586
- .tree-node.todo-item {
587
- background: #f8f9fa;
588
- border-left: 2px solid #cbd5e0;
589
- margin: 1px 0;
590
- border-radius: 3px;
591
- }
592
-
593
- .tree-node.todo-item.status-pending {
594
- border-left-color: #cbd5e0;
595
- background: #f8f9fa;
596
- }
597
-
598
- .tree-node.todo-item.status-in_progress {
599
- border-left-color: #3182ce;
600
- background: #ebf8ff;
601
- animation: pulse-todo 2s infinite;
602
- }
603
-
604
- .tree-node.todo-item.status-completed {
605
- border-left-color: #38a169;
606
- background: #f0fff4;
607
- }
608
-
609
- @keyframes pulse-todo {
610
- 0% {
611
- background: #ebf8ff;
612
- }
613
- 50% {
614
- background: #bee3f8;
615
- }
616
- 100% {
617
- background: #ebf8ff;
618
- }
619
- }
620
-
621
- /* Status Badges */
622
- .tree-status.status-pending {
623
- background: #e2e8f0;
624
- color: #4a5568;
625
- }
626
-
627
- .tree-status.status-in_progress {
628
- background: #bee3f8;
629
- color: #2c5282;
630
- animation: pulse-status 2s infinite;
631
- }
632
-
633
- .tree-status.status-active {
634
- background: #fbb6ce;
635
- color: #97266d;
636
- animation: pulse-status 2s infinite;
637
- }
638
-
639
- .tree-status.status-completed {
640
- background: #c6f6d5;
641
- color: #276749;
642
- }
643
-
644
- .tree-status.status-failed {
645
- background: #fed7d7;
646
- color: #c53030;
647
- }
648
-
649
- /* Status Animation */
650
- @keyframes pulse-status {
651
- 0% {
652
- opacity: 1;
653
- }
654
- 50% {
655
- opacity: 0.7;
656
- }
657
- 100% {
658
- opacity: 1;
659
- }
660
- }
661
-
662
- /* Pinned TODOs Styles */
663
- .tree-node.pinned-todos {
664
- background: linear-gradient(135deg, #fff8dc 0%, #f0e68c 100%) !important;
665
- border-left: 4px solid #daa520 !important;
666
- border-radius: 6px !important;
667
- margin: 4px 0 !important;
668
- font-weight: 600 !important;
669
- }
670
-
671
- .tree-node.pinned-todos:hover {
672
- background: linear-gradient(135deg, #f0e68c 0%, #daa520 100%) !important;
673
- box-shadow: 0 4px 8px rgba(218, 165, 32, 0.3) !important;
674
- }
675
-
676
- .tree-node.pinned-todos .tree-label {
677
- color: #b8860b !important;
678
- font-weight: bold !important;
679
- }
680
-
681
- .tree-node.pinned-todos .tree-icon {
682
- color: #daa520 !important;
683
- font-size: 18px !important;
684
- }
685
-
686
- .tree-node.pinned-todos .tree-params {
687
- background: #f5deb3 !important;
688
- color: #8b4513 !important;
689
- font-weight: 600 !important;
690
- border: 1px solid #daa520 !important;
691
- }
692
-
693
- .tree-node.pinned-todos .tree-status {
694
- background: #daa520 !important;
695
- color: white !important;
696
- font-weight: bold !important;
697
- text-transform: uppercase !important;
698
- }
699
-
700
- /* Tree Legend */
701
- .tree-legend {
702
- position: absolute;
703
- top: 15px;
704
- right: 15px;
705
- background: rgba(255, 255, 255, 0.95);
706
- border: 1px solid #e2e8f0;
707
- border-radius: 6px;
708
- padding: 10px;
709
- box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
710
- }
711
-
712
- .legend-item {
713
- display: flex;
714
- align-items: center;
715
- gap: 8px;
716
- margin-bottom: 5px;
717
- font-size: 12px;
718
- color: #4a5568;
719
- }
720
-
721
- .legend-item:last-child {
722
- margin-bottom: 0;
723
- }
724
-
725
- .legend-icon {
726
- width: 14px;
727
- height: 14px;
728
- display: inline-block;
729
- text-align: center;
730
- }
731
-
732
- .legend-icon.pm {
733
- color: #4A90E2;
734
- }
735
-
736
- .legend-icon.todowrite {
737
- color: #9B59B6;
738
- }
739
-
740
- .legend-icon.agent {
741
- color: #27AE60;
742
- }
743
-
744
- .legend-icon.tool {
745
- color: #E67E22;
746
- }
747
-
748
- .legend-icon.file {
749
- color: #95A5A6;
750
- }
751
-
752
- /* Search Highlighting - Specific to activity tree only */
753
- .activity-tree-container .tree-node.search-match:not(.tool) {
754
- background: #fff3cd !important;
755
- border-left-color: #ffc107 !important;
756
- }
757
-
758
- .activity-tree-container .tree-node.search-match:not(.tool) .tree-label {
759
- background: #ffecb5;
760
- padding: 2px 4px;
761
- border-radius: 3px;
762
- }
763
-
764
- /* Empty State */
765
- .linear-tree:empty::after {
766
- content: "No activity data available. Start using the PM to see the activity tree.";
767
- display: block;
768
- text-align: center;
769
- color: #718096;
770
- font-style: italic;
771
- padding: 40px 20px;
772
- }
773
-
774
- /* Scrollbar Styles */
775
- .activity-tree-container::-webkit-scrollbar {
776
- width: 8px;
777
- }
778
-
779
- .activity-tree-container::-webkit-scrollbar-track {
780
- background: #f1f1f1;
781
- border-radius: 4px;
782
- }
783
-
784
- .activity-tree-container::-webkit-scrollbar-thumb {
785
- background: #c1c1c1;
786
- border-radius: 4px;
787
- }
788
-
789
- .activity-tree-container::-webkit-scrollbar-thumb:hover {
790
- background: #a8a8a8;
791
- }
792
-
793
- /* User instruction styles */
794
- .tree-node.user-instruction {
795
- background: linear-gradient(135deg, #e3f2fd 0%, #bbdefb 100%);
796
- border-left: 4px solid #2196f3;
797
- cursor: pointer;
798
- transition: all 0.2s ease;
799
- }
800
-
801
- .tree-node.user-instruction.selected {
802
- background: linear-gradient(135deg, #bbdefb 0%, #90caf9 100%);
803
- border-left-color: #1976d2;
804
- box-shadow: 0 4px 8px rgba(25, 118, 210, 0.3);
805
- }
806
-
807
- .tree-node.user-instruction:hover {
808
- background: linear-gradient(135deg, #bbdefb 0%, #90caf9 100%);
809
- box-shadow: 0 4px 8px rgba(33, 150, 243, 0.2);
810
- }
811
-
812
- .tree-node.user-instruction .tree-label {
813
- font-style: italic;
814
- color: #1976d2;
815
- }
816
-
817
- /* TODO checklist styles */
818
- .tree-node.todo-checklist {
819
- background: linear-gradient(135deg, #f3e5f5 0%, #e1bee7 100%);
820
- border-left: 4px solid #9c27b0;
821
- font-weight: 600;
822
- }
823
-
824
- .tree-node.todo-checklist:hover {
825
- background: linear-gradient(135deg, #e1bee7 0%, #ce93d8 100%);
826
- box-shadow: 0 4px 8px rgba(156, 39, 176, 0.2);
827
- }
828
-
829
- .tree-node.todo-checklist .tree-label {
830
- color: #7b1fa2;
831
- font-weight: bold;
832
- }
833
-
834
- /* Enhanced TODO item styles */
835
- .tree-node.todo-item {
836
- margin: 2px 0;
837
- border-radius: 4px;
838
- transition: all 0.2s ease;
839
- }
840
-
841
- .tree-node.todo-item.status-pending {
842
- background: linear-gradient(135deg, #f7fafc 0%, #e2e8f0 20%);
843
- border-left: 3px solid #a0aec0;
844
- }
845
-
846
- .tree-node.todo-item.status-in_progress {
847
- background: linear-gradient(135deg, #e8f5e8 0%, #a5d6a7 20%);
848
- border-left: 3px solid #4caf50;
849
- animation: pulse 2s infinite;
850
- }
851
-
852
- .tree-node.todo-item.status-completed {
853
- background: linear-gradient(135deg, #e8f5e8 0%, #c8e6c9 20%);
854
- border-left: 3px solid #2e7d32;
855
- opacity: 0.8;
856
- }
857
-
858
- .tree-node.todo-item.status-completed .tree-label {
859
- text-decoration: line-through;
860
- color: #666;
861
- }
862
-
863
- /* Instruction and todo item detail styles */
864
- .instruction-details,
865
- .generic-details,
866
- .tool-details,
867
- .agent-details {
868
- font-family: 'SF Mono', Monaco, 'Cascadia Code', 'Roboto Mono', monospace;
869
- font-size: 12px;
870
- }
871
-
872
- .detail-row {
873
- display: flex;
874
- margin-bottom: 12px;
875
- padding: 8px 0;
876
- border-bottom: 1px solid #f0f0f0;
877
- align-items: flex-start;
878
- }
879
-
880
- .detail-label {
881
- font-weight: bold;
882
- color: #4a5568;
883
- width: 120px;
884
- flex-shrink: 0;
885
- line-height: 1.4;
886
- }
887
-
888
- .detail-value {
889
- color: #2d3748;
890
- word-break: break-word;
891
- flex: 1;
892
- line-height: 1.4;
893
- }
894
-
895
- .detail-section {
896
- margin-top: 20px;
897
- padding-top: 16px;
898
- border-top: 2px solid #e2e8f0;
899
- }
900
-
901
- .detail-section-title {
902
- font-weight: bold;
903
- color: #2d3748;
904
- margin-bottom: 12px;
905
- display: block;
906
- font-size: 14px;
907
- }
908
-
909
- .params-list {
910
- background: #f7fafc;
911
- border-radius: 6px;
912
- padding: 12px;
913
- border: 1px solid #e2e8f0;
914
- }
915
-
916
- .param-item {
917
- margin-bottom: 16px;
918
- padding-bottom: 12px;
919
- border-bottom: 1px solid #e2e8f0;
920
- }
921
-
922
- .param-item:last-child {
923
- margin-bottom: 0;
924
- padding-bottom: 0;
925
- border-bottom: none;
926
- }
927
-
928
- .param-key {
929
- font-weight: bold;
930
- color: #553c9a;
931
- margin-bottom: 4px;
932
- display: block;
933
- font-size: 12px;
934
- }
935
-
936
- .param-value {
937
- color: #2d3748;
938
- }
939
-
940
- .param-text-short {
941
- background: #ffffff;
942
- padding: 4px 8px;
943
- border-radius: 3px;
944
- border: 1px solid #cbd5e0;
945
- display: inline-block;
946
- font-family: inherit;
947
- }
948
-
949
- .param-text,
950
- .param-text-long {
951
- background: #ffffff;
952
- border: 1px solid #cbd5e0;
953
- border-radius: 4px;
954
- padding: 8px;
955
- margin: 4px 0;
956
- white-space: pre-wrap;
957
- word-wrap: break-word;
958
- font-size: 11px;
959
- line-height: 1.4;
960
- max-height: 200px;
961
- overflow-y: auto;
962
- }
963
-
964
- .param-json {
965
- background: #f8f9fa;
966
- border: 1px solid #d6d8db;
967
- border-radius: 4px;
968
- padding: 8px;
969
- margin: 4px 0;
970
- white-space: pre;
971
- font-size: 11px;
972
- line-height: 1.3;
973
- max-height: 300px;
974
- overflow: auto;
975
- color: #24292e;
976
- }
977
-
978
- .param-primitive {
979
- background: #edf2f7;
980
- padding: 2px 6px;
981
- border-radius: 3px;
982
- font-weight: 500;
983
- color: #2d3748;
984
- }
985
-
986
- .param-error {
987
- background: #fed7d7;
988
- padding: 4px 8px;
989
- border-radius: 3px;
990
- color: #c53030;
991
- font-style: italic;
992
- }
993
-
994
- .status-badge {
995
- display: inline-block;
996
- padding: 3px 8px;
997
- border-radius: 12px;
998
- font-size: 11px;
999
- font-weight: 600;
1000
- text-transform: capitalize;
1001
- letter-spacing: 0.5px;
1002
- }
1003
-
1004
- .status-badge.status-pending {
1005
- background: #e2e8f0;
1006
- color: #4a5568;
1007
- }
1008
-
1009
- .status-badge.status-in_progress {
1010
- background: #bee3f8;
1011
- color: #2c5282;
1012
- }
1013
-
1014
- .status-badge.status-completed {
1015
- background: #c6f6d5;
1016
- color: #276749;
1017
- }
1018
-
1019
- .status-badge.status-failed {
1020
- background: #fed7d7;
1021
- color: #c53030;
1022
- }
1023
-
1024
- .status-badge.status-active {
1025
- background: #fbb6ce;
1026
- color: #97266d;
1027
- }
1028
-
1029
- .tool-result {
1030
- background: #f8f9fa;
1031
- border: 1px solid #d6d8db;
1032
- border-radius: 4px;
1033
- padding: 12px;
1034
- margin: 8px 0;
1035
- white-space: pre-wrap;
1036
- font-size: 11px;
1037
- line-height: 1.4;
1038
- max-height: 400px;
1039
- overflow: auto;
1040
- color: #24292e;
1041
- }
1042
-
1043
- /* Pulse animation for in-progress items */
1044
- @keyframes pulse {
1045
- 0% {
1046
- box-shadow: 0 0 0 0 rgba(76, 175, 80, 0.4);
1047
- }
1048
- 70% {
1049
- box-shadow: 0 0 0 4px rgba(76, 175, 80, 0);
1050
- }
1051
- 100% {
1052
- box-shadow: 0 0 0 0 rgba(76, 175, 80, 0);
1053
- }
1054
- }
1055
-
1056
- /* Responsive adjustments */
1057
- @media (max-width: 1024px) {
1058
- .activity-header {
1059
- flex-direction: column;
1060
- gap: 15px;
1061
- }
1062
-
1063
- .activity-controls {
1064
- width: 100%;
1065
- flex-wrap: wrap;
1066
- justify-content: center;
1067
- }
1068
-
1069
- .tree-legend {
1070
- position: static;
1071
- margin-top: 15px;
1072
- max-width: 300px;
1073
- }
1074
-
1075
- .tree-params {
1076
- max-width: 150px;
1077
- }
1078
-
1079
- .activity-controls input {
1080
- width: 150px;
1081
- }
1082
- }
1083
-
1084
- @media (max-width: 768px) {
1085
- .activity-container {
1086
- padding: 10px;
1087
- }
1088
-
1089
- .activity-tree-container {
1090
- padding: 0;
1091
- }
1092
-
1093
- .linear-tree {
1094
- padding: 10px;
1095
- }
1096
-
1097
- .tree-node[data-level="1"] {
1098
- margin-left: 15px;
1099
- }
1100
-
1101
- .tree-node[data-level="2"] {
1102
- margin-left: 30px;
1103
- }
1104
-
1105
- .tree-node[data-level="3"] {
1106
- margin-left: 45px;
1107
- }
1108
-
1109
- .tree-node[data-level="4"] {
1110
- margin-left: 60px;
1111
- }
1112
-
1113
- .tree-params {
1114
- max-width: 100px;
1115
- }
1116
-
1117
- .stat-item {
1118
- flex-direction: column;
1119
- gap: 2px;
1120
- text-align: center;
1121
- }
1122
- }
1123
-
1124
- /* Dark mode support */
1125
- @media (prefers-color-scheme: dark) {
1126
- .activity-tree-container {
1127
- background: #1a202c;
1128
- color: #e2e8f0;
1129
- }
1130
-
1131
- /* D3 Dark Mode Styles */
1132
- #activity-tree-svg {
1133
- background: #1a202c;
1134
- }
1135
-
1136
- .node-label {
1137
- fill: #e2e8f0;
1138
- }
1139
-
1140
- .node:hover .node-label {
1141
- fill: #63b3ed;
1142
- }
1143
-
1144
- .link {
1145
- stroke: #4a5568;
1146
- }
1147
-
1148
- .node:hover .link {
1149
- stroke: #63b3ed;
1150
- }
1151
-
1152
- .d3-tooltip {
1153
- background: rgba(45, 55, 72, 0.95) !important;
1154
- color: #e2e8f0 !important;
1155
- border: 1px solid #4a5568;
1156
- }
1157
-
1158
- .activity-header {
1159
- background: #2d3748;
1160
- }
1161
-
1162
- .activity-controls select,
1163
- .activity-controls input {
1164
- background: #2d3748;
1165
- color: #e2e8f0;
1166
- border-color: #4a5568;
1167
- }
1168
-
1169
- .stat-label {
1170
- color: #a0aec0;
1171
- }
1172
-
1173
- .stat-value {
1174
- color: #e2e8f0;
1175
- }
1176
-
1177
- .tree-legend {
1178
- background: rgba(45, 55, 72, 0.95);
1179
- border-color: #4a5568;
1180
- }
1181
-
1182
- .legend-item {
1183
- color: #e2e8f0;
1184
- }
1185
-
1186
- .tree-node:hover {
1187
- background-color: #2d3748;
1188
- }
1189
-
1190
- .tree-node-content:hover {
1191
- background-color: #4a5568;
1192
- }
1193
-
1194
- .tree-label {
1195
- color: #e2e8f0;
1196
- }
1197
-
1198
- .tree-meta {
1199
- color: #a0aec0;
1200
- }
1201
-
1202
- .tree-node.project-root {
1203
- background: linear-gradient(135deg, #4299e1 0%, #553c9a 100%);
1204
- }
1205
-
1206
- .tree-node.session {
1207
- background: #2d3748;
1208
- border-color: #4a5568;
1209
- }
1210
-
1211
- .tree-node.session .tree-label {
1212
- color: #e2e8f0;
1213
- }
1214
-
1215
- .tree-children {
1216
- border-left-color: #4a5568;
1217
- }
1218
-
1219
- .tree-label.clickable:hover {
1220
- background-color: rgba(74, 85, 104, 0.5);
1221
- color: #e2e8f0;
1222
- }
1223
-
1224
- .module-item-details {
1225
- color: #e2e8f0;
1226
- }
1227
-
1228
- .module-item-header {
1229
- border-bottom-color: #4a5568;
1230
- }
1231
-
1232
- .module-item-header h6 {
1233
- color: #e2e8f0;
1234
- }
1235
-
1236
- .detail-label {
1237
- color: #a0aec0;
1238
- }
1239
-
1240
- .detail-value {
1241
- color: #e2e8f0;
1242
- }
1243
-
1244
- .detail-section {
1245
- border-top-color: #4a5568;
1246
- }
1247
-
1248
- .detail-section-title {
1249
- color: #a0aec0;
1250
- }
1251
-
1252
- .tools-list, .params-list {
1253
- background: #2d3748;
1254
- border-color: #4a5568;
1255
- }
1256
-
1257
- .tool-summary {
1258
- background: #4a5568;
1259
- border-color: #718096;
1260
- color: #e2e8f0;
1261
- }
1262
-
1263
- .tool-params-expanded {
1264
- background: #2d3748;
1265
- border-color: #4a5568;
1266
- color: #e2e8f0;
1267
- }
1268
-
1269
- .param-line .param-key,
1270
- .param-key {
1271
- color: #9f7aea;
1272
- }
1273
-
1274
- .param-line .param-value,
1275
- .param-value {
1276
- color: #e2e8f0;
1277
- }
1278
-
1279
- .param-item {
1280
- border-bottom-color: #4a5568;
1281
- }
1282
-
1283
- .param-text-short {
1284
- background: #2d3748;
1285
- border-color: #4a5568;
1286
- color: #e2e8f0;
1287
- }
1288
-
1289
- .param-text,
1290
- .param-text-long {
1291
- background: #2d3748;
1292
- border-color: #4a5568;
1293
- color: #e2e8f0;
1294
- }
1295
-
1296
- .param-json {
1297
- background: #1a202c;
1298
- border-color: #4a5568;
1299
- color: #e2e8f0;
1300
- }
1301
-
1302
- .param-primitive {
1303
- background: #4a5568;
1304
- color: #e2e8f0;
1305
- }
1306
-
1307
- .param-error {
1308
- background: #742a2a;
1309
- color: #feb2b2;
1310
- }
1311
-
1312
- .tool-result {
1313
- background: #1a202c;
1314
- border-color: #4a5568;
1315
- color: #e2e8f0;
1316
- }
1317
- }
1318
-
1319
- /* Enhanced TodoWrite Display Styles */
1320
-
1321
- /* Todo Summary Items */
1322
- .todo-summary {
1323
- display: flex;
1324
- gap: 15px;
1325
- margin: 15px 0;
1326
- flex-wrap: wrap;
1327
- }
1328
-
1329
- .summary-item {
1330
- display: flex;
1331
- align-items: center;
1332
- gap: 8px;
1333
- padding: 8px 12px;
1334
- background: #f8fafc;
1335
- border-radius: 6px;
1336
- border-left: 3px solid #e2e8f0;
1337
- min-width: 120px;
1338
- flex: 1;
1339
- }
1340
-
1341
- .summary-item.completed {
1342
- background: #f0fff4;
1343
- border-left-color: #38a169;
1344
- }
1345
-
1346
- .summary-item.in_progress {
1347
- background: #e6fffa;
1348
- border-left-color: #38b2ac;
1349
- }
1350
-
1351
- .summary-item.pending {
1352
- background: #f7fafc;
1353
- border-left-color: #a0aec0;
1354
- }
1355
-
1356
- .summary-icon {
1357
- font-size: 16px;
1358
- flex-shrink: 0;
1359
- }
1360
-
1361
- .summary-count {
1362
- font-size: 18px;
1363
- font-weight: bold;
1364
- color: #2d3748;
1365
- flex-shrink: 0;
1366
- }
1367
-
1368
- .summary-label {
1369
- font-size: 12px;
1370
- color: #718096;
1371
- font-weight: 500;
1372
- text-transform: uppercase;
1373
- letter-spacing: 0.5px;
1374
- }
1375
-
1376
- /* Todo Checklist Items */
1377
- .todo-checklist {
1378
- background: #f8fafc;
1379
- border-radius: 6px;
1380
- border: 1px solid #e2e8f0;
1381
- padding: 8px;
1382
- }
1383
-
1384
- .todo-checklist-item {
1385
- display: flex;
1386
- align-items: flex-start;
1387
- gap: 12px;
1388
- padding: 8px;
1389
- margin: 4px 0;
1390
- border-radius: 4px;
1391
- transition: background 0.2s ease;
1392
- border-left: 3px solid transparent;
1393
- }
1394
-
1395
- .todo-checklist-item:hover {
1396
- background: #edf2f7;
1397
- }
1398
-
1399
- .todo-checklist-item.completed {
1400
- background: #f0fff4;
1401
- border-left-color: #38a169;
1402
- }
1403
-
1404
- .todo-checklist-item.in_progress {
1405
- background: #e6fffa;
1406
- border-left-color: #38b2ac;
1407
- animation: pulse-todo 2s infinite;
1408
- }
1409
-
1410
- .todo-checklist-item.pending {
1411
- background: #f7fafc;
1412
- border-left-color: #cbd5e0;
1413
- }
1414
-
1415
- .todo-checkbox {
1416
- flex-shrink: 0;
1417
- width: 24px;
1418
- height: 24px;
1419
- display: flex;
1420
- align-items: center;
1421
- justify-content: center;
1422
- border-radius: 4px;
1423
- background: white;
1424
- border: 2px solid #e2e8f0;
1425
- margin-top: 2px;
1426
- }
1427
-
1428
- .checkbox-icon {
1429
- font-size: 14px;
1430
- font-weight: bold;
1431
- }
1432
-
1433
- .checkbox-icon.status-completed {
1434
- color: #38a169;
1435
- }
1436
-
1437
- .checkbox-icon.status-in_progress {
1438
- color: #38b2ac;
1439
- }
1440
-
1441
- .checkbox-icon.status-pending {
1442
- color: #a0aec0;
1443
- }
1444
-
1445
- .todo-text {
1446
- flex: 1;
1447
- min-width: 0;
1448
- }
1449
-
1450
- .todo-content {
1451
- display: block;
1452
- font-size: 14px;
1453
- color: #2d3748;
1454
- line-height: 1.4;
1455
- margin-bottom: 4px;
1456
- word-wrap: break-word;
1457
- }
1458
-
1459
- .todo-checklist-item.completed .todo-content {
1460
- text-decoration: line-through;
1461
- color: #718096;
1462
- }
1463
-
1464
- .todo-status-badge {
1465
- display: inline-block;
1466
- padding: 2px 6px;
1467
- font-size: 10px;
1468
- font-weight: 600;
1469
- text-transform: uppercase;
1470
- letter-spacing: 0.5px;
1471
- border-radius: 10px;
1472
- margin-top: 2px;
1473
- }
1474
-
1475
- .todo-status-badge.status-completed {
1476
- background: #c6f6d5;
1477
- color: #276749;
1478
- }
1479
-
1480
- .todo-status-badge.status-in_progress {
1481
- background: #b2f5ea;
1482
- color: #285e61;
1483
- }
1484
-
1485
- .todo-status-badge.status-pending {
1486
- background: #e2e8f0;
1487
- color: #4a5568;
1488
- }
1489
-
1490
- /* No todos message */
1491
- .no-todos {
1492
- text-align: center;
1493
- color: #718096;
1494
- font-style: italic;
1495
- padding: 20px;
1496
- background: #f7fafc;
1497
- border-radius: 6px;
1498
- border: 1px dashed #cbd5e0;
1499
- }
1500
-
1501
- /* Animation for in-progress items */
1502
- @keyframes pulse-todo {
1503
- 0% {
1504
- background: #e6fffa;
1505
- }
1506
- 50% {
1507
- background: #b2f5ea;
1508
- }
1509
- 100% {
1510
- background: #e6fffa;
1511
- }
1512
- }
1513
-
1514
- /* Unified viewer status and headers */
1515
- .unified-viewer-header {
1516
- display: flex;
1517
- justify-content: space-between;
1518
- align-items: center;
1519
- padding: 12px 16px;
1520
- background: #f8fafc;
1521
- border-bottom: 1px solid #e2e8f0;
1522
- border-radius: 6px 6px 0 0;
1523
- }
1524
-
1525
- .unified-viewer-header h6 {
1526
- margin: 0;
1527
- font-size: 16px;
1528
- font-weight: 600;
1529
- color: #2d3748;
1530
- }
1531
-
1532
- .unified-viewer-status {
1533
- font-size: 12px;
1534
- font-weight: 600;
1535
- padding: 4px 8px;
1536
- border-radius: 12px;
1537
- text-transform: uppercase;
1538
- letter-spacing: 0.5px;
1539
- }
1540
-
1541
- .unified-viewer-content {
1542
- padding: 16px;
1543
- }
1544
-
1545
- /* Responsive adjustments for TodoWrite display */
1546
- @media (max-width: 768px) {
1547
- .todo-summary {
1548
- flex-direction: column;
1549
- gap: 8px;
1550
- }
1551
-
1552
- .summary-item {
1553
- min-width: auto;
1554
- }
1555
-
1556
- .todo-checklist-item {
1557
- padding: 6px;
1558
- }
1559
-
1560
- .todo-checkbox {
1561
- width: 20px;
1562
- height: 20px;
1563
- }
1564
-
1565
- .checkbox-icon {
1566
- font-size: 12px;
1567
- }
1568
- }
1569
-
1570
- /* Print Styles */
1571
- @media print {
1572
- .activity-header {
1573
- display: none;
1574
- }
1575
-
1576
- .tree-legend {
1577
- position: static;
1578
- margin-bottom: 20px;
1579
- }
1580
-
1581
- .activity-tree-container {
1582
- box-shadow: none;
1583
- border: 1px solid #000;
1584
- }
1585
-
1586
- .tree-node {
1587
- break-inside: avoid;
1588
- }
1589
-
1590
- .tree-status {
1591
- border: 1px solid #000;
1592
- background: transparent !important;
1593
- color: #000 !important;
1594
- }
1595
- }
1596
-
1597
- /* Focus and Accessibility */
1598
- .tree-node-content:focus {
1599
- outline: 2px solid #4299e1;
1600
- outline-offset: 2px;
1601
- }
1602
-
1603
- .tree-expand-icon:focus {
1604
- outline: 2px solid #4299e1;
1605
- outline-offset: 2px;
1606
- }
1607
-
1608
- /* Active/current item highlighting */
1609
- .tree-node.current-active {
1610
- background: linear-gradient(90deg, rgba(245, 158, 11, 0.1) 0%, transparent 100%);
1611
- border-left: 3px solid #f59e0b;
1612
- animation: pulse-active 2s ease-in-out infinite;
1613
- }
1614
-
1615
- .tree-node.has-active .tree-node-content {
1616
- font-weight: 600;
1617
- }
1618
-
1619
- .tree-node.todowrite.has-active .tree-icon {
1620
- animation: rotate-icon 3s linear infinite;
1621
- }
1622
-
1623
- @keyframes pulse-active {
1624
- 0%, 100% {
1625
- background: linear-gradient(90deg, rgba(245, 158, 11, 0.1) 0%, transparent 100%);
1626
- }
1627
- 50% {
1628
- background: linear-gradient(90deg, rgba(245, 158, 11, 0.2) 0%, transparent 100%);
1629
- }
1630
- }
1631
-
1632
- @keyframes rotate-icon {
1633
- from {
1634
- transform: rotate(0deg);
1635
- }
1636
- to {
1637
- transform: rotate(360deg);
1638
- }
1639
- }
1640
-
1641
- /* Collapsed state indicators */
1642
- .tree-node.agent:not(.expanded) .tree-label {
1643
- font-style: italic;
1644
- color: #4b5563;
1645
- }
1646
-
1647
- .tree-node.agent .tree-label .current-status {
1648
- color: #f59e0b;
1649
- font-weight: 600;
1650
- margin-left: 10px;
1651
- }
1652
-
1653
- /* TodoWrite specific styles */
1654
- .tree-node.todowrite {
1655
- background: rgba(99, 102, 241, 0.05);
1656
- border-radius: 4px;
1657
- margin: 2px 0;
1658
- }
1659
-
1660
- .tree-node.todowrite .tree-node-content {
1661
- padding: 4px 8px;
1662
- }
1663
-
1664
- /* Multiple call/update indicators */
1665
- .tree-node .tree-label .call-count,
1666
- .tree-node .tree-label .update-count {
1667
- color: #6366f1;
1668
- font-weight: 600;
1669
- font-size: 0.85em;
1670
- opacity: 0.8;
1671
- }
1672
-
1673
- .tree-node.tool .tree-label {
1674
- position: relative;
1675
- }
1676
-
1677
- .tree-node.tool .call-indicator {
1678
- display: inline-block;
1679
- background: #f59e0b;
1680
- color: white;
1681
- border-radius: 10px;
1682
- padding: 0 6px;
1683
- font-size: 0.75em;
1684
- margin-left: 5px;
1685
- font-weight: 600;
1686
- }
1687
-
1688
- /* ==================== IMPROVED DATA VIEWER STYLES ==================== */
1689
-
1690
- /* Primary data section for important information */
1691
- .primary-data {
1692
- padding: 10px 0;
1693
- border-bottom: 1px solid #e5e7eb;
1694
- margin-bottom: 15px;
1695
- }
1696
-
1697
- .primary-data .detail-row.highlight {
1698
- background: rgba(59, 130, 246, 0.05);
1699
- padding: 8px 12px;
1700
- border-radius: 6px;
1701
- margin: 5px 0;
1702
- font-weight: 500;
1703
- }
1704
-
1705
- .primary-data .code {
1706
- font-family: 'Monaco', 'Courier New', monospace;
1707
- background: #1e293b;
1708
- color: #94a3b8;
1709
- padding: 2px 6px;
1710
- border-radius: 3px;
1711
- }
1712
-
1713
- /* TodoWrite specific styles */
1714
- .todo-status-bar {
1715
- display: flex;
1716
- gap: 20px;
1717
- padding: 12px;
1718
- background: linear-gradient(90deg, #f8fafc 0%, #f1f5f9 100%);
1719
- border-radius: 8px;
1720
- margin-bottom: 15px;
1721
- }
1722
-
1723
- .todo-status-bar .status-item {
1724
- display: flex;
1725
- align-items: center;
1726
- gap: 6px;
1727
- }
1728
-
1729
- .todo-status-bar .status-icon {
1730
- font-size: 1.2em;
1731
- }
1732
-
1733
- .todo-status-bar .status-count {
1734
- font-size: 1.4em;
1735
- font-weight: 700;
1736
- color: #1e293b;
1737
- }
1738
-
1739
- .todo-status-bar .status-label {
1740
- color: #64748b;
1741
- font-size: 0.9em;
1742
- }
1743
-
1744
- /* Horizontal status line for TodoWrite */
1745
- .todo-status-line {
1746
- display: flex;
1747
- gap: 20px;
1748
- padding: 8px 12px;
1749
- background: #f8fafc;
1750
- border-radius: 6px;
1751
- margin-bottom: 12px;
1752
- font-size: 0.95em;
1753
- border: 1px solid #e2e8f0;
1754
- }
1755
-
1756
- .todo-status-line .status-inline {
1757
- display: inline-flex;
1758
- align-items: center;
1759
- gap: 4px;
1760
- font-weight: 500;
1761
- color: #475569;
1762
- }
1763
-
1764
- /* Todo list primary display */
1765
- .todo-list-primary {
1766
- padding: 10px 0;
1767
- }
1768
-
1769
- .todo-item {
1770
- display: flex;
1771
- align-items: center;
1772
- gap: 10px;
1773
- padding: 10px 12px;
1774
- margin: 5px 0;
1775
- background: white;
1776
- border: 1px solid #e5e7eb;
1777
- border-radius: 6px;
1778
- transition: all 0.2s ease;
1779
- }
1780
-
1781
- .todo-item:hover {
1782
- border-color: #cbd5e1;
1783
- box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);
1784
- }
1785
-
1786
- .todo-item.completed {
1787
- opacity: 0.7;
1788
- background: #f8fafc;
1789
- }
1790
-
1791
- .todo-item.completed .todo-text {
1792
- text-decoration: line-through;
1793
- color: #94a3b8;
1794
- }
1795
-
1796
- .todo-item.in_progress {
1797
- background: linear-gradient(90deg, rgba(251, 146, 60, 0.1) 0%, white 100%);
1798
- border-color: #fb923c;
1799
- }
1800
-
1801
- .todo-item .todo-icon {
1802
- font-size: 1.2em;
1803
- flex-shrink: 0;
1804
- }
1805
-
1806
- .todo-item .todo-text {
1807
- flex-grow: 1;
1808
- font-size: 0.95em;
1809
- color: #334155;
1810
- }
1811
-
1812
- .todo-item .todo-badge.active {
1813
- background: #fb923c;
1814
- color: white;
1815
- padding: 2px 8px;
1816
- border-radius: 12px;
1817
- font-size: 0.75em;
1818
- font-weight: 600;
1819
- text-transform: uppercase;
1820
- animation: pulse 2s ease-in-out infinite;
1821
- }
1822
-
1823
- /* Tool display improvements */
1824
- .tool-chip {
1825
- display: inline-flex;
1826
- align-items: center;
1827
- gap: 6px;
1828
- padding: 4px 10px;
1829
- background: #f1f5f9;
1830
- border: 1px solid #e2e8f0;
1831
- border-radius: 15px;
1832
- font-size: 0.9em;
1833
- margin: 2px;
1834
- }
1835
-
1836
- .tool-chip.active {
1837
- background: linear-gradient(90deg, #fef3c7 0%, #fed7aa 100%);
1838
- border-color: #fb923c;
1839
- font-weight: 500;
1840
- }
1841
-
1842
- .tools-grid {
1843
- display: flex;
1844
- flex-wrap: wrap;
1845
- gap: 5px;
1846
- margin-top: 8px;
1847
- }
1848
-
1849
- .active-tools-section {
1850
- margin: 10px 0;
1851
- padding: 10px;
1852
- background: rgba(251, 146, 60, 0.05);
1853
- border-radius: 6px;
1854
- }
1855
-
1856
- .active-tools-section .section-label {
1857
- font-weight: 600;
1858
- color: #ea580c;
1859
- display: block;
1860
- margin-bottom: 8px;
1861
- }
1862
-
1863
- /* Instruction display */
1864
- .instruction-content {
1865
- background: #f8fafc;
1866
- padding: 15px;
1867
- border-radius: 8px;
1868
- border-left: 4px solid #3b82f6;
1869
- font-size: 0.95em;
1870
- line-height: 1.6;
1871
- color: #1e293b;
1872
- margin-bottom: 10px;
1873
- }
1874
-
1875
- .instruction-meta {
1876
- display: flex;
1877
- gap: 15px;
1878
- padding: 8px 0;
1879
- color: #64748b;
1880
- font-size: 0.85em;
1881
- }
1882
-
1883
- .instruction-meta .meta-item {
1884
- display: flex;
1885
- align-items: center;
1886
- gap: 5px;
1887
- }
1888
-
1889
- /* Collapsible JSON viewer */
1890
- .collapsible-json-section {
1891
- margin-top: 15px;
1892
- border-top: 1px solid #e5e7eb;
1893
- padding-top: 10px;
1894
- }
1895
-
1896
- .collapsible-json-toggle {
1897
- background: #f8fafc;
1898
- border: 1px solid #e2e8f0;
1899
- padding: 6px 12px;
1900
- border-radius: 6px;
1901
- cursor: pointer;
1902
- font-size: 0.9em;
1903
- color: #475569;
1904
- transition: all 0.2s ease;
1905
- width: auto;
1906
- display: inline-block;
1907
- }
1908
-
1909
- .collapsible-json-toggle:hover {
1910
- background: #f1f5f9;
1911
- border-color: #cbd5e1;
1912
- }
1913
-
1914
- .collapsible-json-toggle.expanded {
1915
- background: #e0e7ff;
1916
- border-color: #818cf8;
1917
- color: #4338ca;
1918
- }
1919
-
1920
- .collapsible-json-content {
1921
- margin-top: 10px;
1922
- max-height: 400px;
1923
- overflow-y: auto;
1924
- }
1925
-
1926
- .json-viewer {
1927
- background: #1e293b;
1928
- color: #94a3b8;
1929
- padding: 12px;
1930
- border-radius: 6px;
1931
- font-family: 'Monaco', 'Courier New', monospace;
1932
- font-size: 0.85em;
1933
- line-height: 1.4;
1934
- overflow-x: auto;
1935
- }
1936
-
1937
- /* Code snippets in viewers */
1938
- .code-snippet {
1939
- background: #1e293b;
1940
- color: #94a3b8;
1941
- padding: 8px 12px;
1942
- border-radius: 4px;
1943
- font-family: 'Monaco', 'Courier New', monospace;
1944
- font-size: 0.9em;
1945
- margin: 5px 0;
1946
- overflow-x: auto;
1947
- max-width: 100%;
1948
- }
1949
-
1950
- /* Animation for active items */
1951
- @keyframes pulse {
1952
- 0%, 100% {
1953
- opacity: 1;
1954
- }
1955
- 50% {
1956
- opacity: 0.7;
1957
- }
1958
- }