htmlgraph 0.9.3__py3-none-any.whl → 0.27.5__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (331) hide show
  1. htmlgraph/.htmlgraph/.session-warning-state.json +6 -0
  2. htmlgraph/.htmlgraph/agents.json +72 -0
  3. htmlgraph/.htmlgraph/htmlgraph.db +0 -0
  4. htmlgraph/__init__.py +173 -17
  5. htmlgraph/__init__.pyi +123 -0
  6. htmlgraph/agent_detection.py +127 -0
  7. htmlgraph/agent_registry.py +45 -30
  8. htmlgraph/agents.py +160 -107
  9. htmlgraph/analytics/__init__.py +9 -2
  10. htmlgraph/analytics/cli.py +190 -51
  11. htmlgraph/analytics/cost_analyzer.py +391 -0
  12. htmlgraph/analytics/cost_monitor.py +664 -0
  13. htmlgraph/analytics/cost_reporter.py +675 -0
  14. htmlgraph/analytics/cross_session.py +617 -0
  15. htmlgraph/analytics/dependency.py +192 -100
  16. htmlgraph/analytics/pattern_learning.py +771 -0
  17. htmlgraph/analytics/session_graph.py +707 -0
  18. htmlgraph/analytics/strategic/__init__.py +80 -0
  19. htmlgraph/analytics/strategic/cost_optimizer.py +611 -0
  20. htmlgraph/analytics/strategic/pattern_detector.py +876 -0
  21. htmlgraph/analytics/strategic/preference_manager.py +709 -0
  22. htmlgraph/analytics/strategic/suggestion_engine.py +747 -0
  23. htmlgraph/analytics/work_type.py +190 -14
  24. htmlgraph/analytics_index.py +135 -51
  25. htmlgraph/api/__init__.py +3 -0
  26. htmlgraph/api/cost_alerts_websocket.py +416 -0
  27. htmlgraph/api/main.py +2498 -0
  28. htmlgraph/api/static/htmx.min.js +1 -0
  29. htmlgraph/api/static/style-redesign.css +1344 -0
  30. htmlgraph/api/static/style.css +1079 -0
  31. htmlgraph/api/templates/dashboard-redesign.html +1366 -0
  32. htmlgraph/api/templates/dashboard.html +794 -0
  33. htmlgraph/api/templates/partials/activity-feed-hierarchical.html +326 -0
  34. htmlgraph/api/templates/partials/activity-feed.html +1100 -0
  35. htmlgraph/api/templates/partials/agents-redesign.html +317 -0
  36. htmlgraph/api/templates/partials/agents.html +317 -0
  37. htmlgraph/api/templates/partials/event-traces.html +373 -0
  38. htmlgraph/api/templates/partials/features-kanban-redesign.html +509 -0
  39. htmlgraph/api/templates/partials/features.html +578 -0
  40. htmlgraph/api/templates/partials/metrics-redesign.html +346 -0
  41. htmlgraph/api/templates/partials/metrics.html +346 -0
  42. htmlgraph/api/templates/partials/orchestration-redesign.html +443 -0
  43. htmlgraph/api/templates/partials/orchestration.html +198 -0
  44. htmlgraph/api/templates/partials/spawners.html +375 -0
  45. htmlgraph/api/templates/partials/work-items.html +613 -0
  46. htmlgraph/api/websocket.py +538 -0
  47. htmlgraph/archive/__init__.py +24 -0
  48. htmlgraph/archive/bloom.py +234 -0
  49. htmlgraph/archive/fts.py +297 -0
  50. htmlgraph/archive/manager.py +583 -0
  51. htmlgraph/archive/search.py +244 -0
  52. htmlgraph/atomic_ops.py +560 -0
  53. htmlgraph/attribute_index.py +208 -0
  54. htmlgraph/bounded_paths.py +539 -0
  55. htmlgraph/builders/__init__.py +14 -0
  56. htmlgraph/builders/base.py +118 -29
  57. htmlgraph/builders/bug.py +150 -0
  58. htmlgraph/builders/chore.py +119 -0
  59. htmlgraph/builders/epic.py +150 -0
  60. htmlgraph/builders/feature.py +31 -6
  61. htmlgraph/builders/insight.py +195 -0
  62. htmlgraph/builders/metric.py +217 -0
  63. htmlgraph/builders/pattern.py +202 -0
  64. htmlgraph/builders/phase.py +162 -0
  65. htmlgraph/builders/spike.py +52 -19
  66. htmlgraph/builders/track.py +148 -72
  67. htmlgraph/cigs/__init__.py +81 -0
  68. htmlgraph/cigs/autonomy.py +385 -0
  69. htmlgraph/cigs/cost.py +475 -0
  70. htmlgraph/cigs/messages_basic.py +472 -0
  71. htmlgraph/cigs/messaging.py +365 -0
  72. htmlgraph/cigs/models.py +771 -0
  73. htmlgraph/cigs/pattern_storage.py +427 -0
  74. htmlgraph/cigs/patterns.py +503 -0
  75. htmlgraph/cigs/posttool_analyzer.py +234 -0
  76. htmlgraph/cigs/reporter.py +818 -0
  77. htmlgraph/cigs/tracker.py +317 -0
  78. htmlgraph/cli/.htmlgraph/.session-warning-state.json +6 -0
  79. htmlgraph/cli/.htmlgraph/agents.json +72 -0
  80. htmlgraph/cli/.htmlgraph/htmlgraph.db +0 -0
  81. htmlgraph/cli/__init__.py +42 -0
  82. htmlgraph/cli/__main__.py +6 -0
  83. htmlgraph/cli/analytics.py +1424 -0
  84. htmlgraph/cli/base.py +685 -0
  85. htmlgraph/cli/constants.py +206 -0
  86. htmlgraph/cli/core.py +954 -0
  87. htmlgraph/cli/main.py +147 -0
  88. htmlgraph/cli/models.py +475 -0
  89. htmlgraph/cli/templates/__init__.py +1 -0
  90. htmlgraph/cli/templates/cost_dashboard.py +399 -0
  91. htmlgraph/cli/work/__init__.py +239 -0
  92. htmlgraph/cli/work/browse.py +115 -0
  93. htmlgraph/cli/work/features.py +568 -0
  94. htmlgraph/cli/work/orchestration.py +676 -0
  95. htmlgraph/cli/work/report.py +728 -0
  96. htmlgraph/cli/work/sessions.py +466 -0
  97. htmlgraph/cli/work/snapshot.py +559 -0
  98. htmlgraph/cli/work/tracks.py +486 -0
  99. htmlgraph/cli_commands/__init__.py +1 -0
  100. htmlgraph/cli_commands/feature.py +195 -0
  101. htmlgraph/cli_framework.py +115 -0
  102. htmlgraph/collections/__init__.py +18 -0
  103. htmlgraph/collections/base.py +415 -98
  104. htmlgraph/collections/bug.py +53 -0
  105. htmlgraph/collections/chore.py +53 -0
  106. htmlgraph/collections/epic.py +53 -0
  107. htmlgraph/collections/feature.py +12 -26
  108. htmlgraph/collections/insight.py +100 -0
  109. htmlgraph/collections/metric.py +92 -0
  110. htmlgraph/collections/pattern.py +97 -0
  111. htmlgraph/collections/phase.py +53 -0
  112. htmlgraph/collections/session.py +194 -0
  113. htmlgraph/collections/spike.py +56 -16
  114. htmlgraph/collections/task_delegation.py +241 -0
  115. htmlgraph/collections/todo.py +511 -0
  116. htmlgraph/collections/traces.py +487 -0
  117. htmlgraph/config/cost_models.json +56 -0
  118. htmlgraph/config.py +190 -0
  119. htmlgraph/context_analytics.py +344 -0
  120. htmlgraph/converter.py +216 -28
  121. htmlgraph/cost_analysis/__init__.py +5 -0
  122. htmlgraph/cost_analysis/analyzer.py +438 -0
  123. htmlgraph/dashboard.html +2406 -307
  124. htmlgraph/dashboard.html.backup +6592 -0
  125. htmlgraph/dashboard.html.bak +7181 -0
  126. htmlgraph/dashboard.html.bak2 +7231 -0
  127. htmlgraph/dashboard.html.bak3 +7232 -0
  128. htmlgraph/db/__init__.py +38 -0
  129. htmlgraph/db/queries.py +790 -0
  130. htmlgraph/db/schema.py +1788 -0
  131. htmlgraph/decorators.py +317 -0
  132. htmlgraph/dependency_models.py +19 -2
  133. htmlgraph/deploy.py +142 -125
  134. htmlgraph/deployment_models.py +474 -0
  135. htmlgraph/docs/API_REFERENCE.md +841 -0
  136. htmlgraph/docs/HTTP_API.md +750 -0
  137. htmlgraph/docs/INTEGRATION_GUIDE.md +752 -0
  138. htmlgraph/docs/ORCHESTRATION_PATTERNS.md +717 -0
  139. htmlgraph/docs/README.md +532 -0
  140. htmlgraph/docs/__init__.py +77 -0
  141. htmlgraph/docs/docs_version.py +55 -0
  142. htmlgraph/docs/metadata.py +93 -0
  143. htmlgraph/docs/migrations.py +232 -0
  144. htmlgraph/docs/template_engine.py +143 -0
  145. htmlgraph/docs/templates/_sections/cli_reference.md.j2 +52 -0
  146. htmlgraph/docs/templates/_sections/core_concepts.md.j2 +29 -0
  147. htmlgraph/docs/templates/_sections/sdk_basics.md.j2 +69 -0
  148. htmlgraph/docs/templates/base_agents.md.j2 +78 -0
  149. htmlgraph/docs/templates/example_user_override.md.j2 +47 -0
  150. htmlgraph/docs/version_check.py +163 -0
  151. htmlgraph/edge_index.py +182 -27
  152. htmlgraph/error_handler.py +544 -0
  153. htmlgraph/event_log.py +100 -52
  154. htmlgraph/event_migration.py +13 -4
  155. htmlgraph/exceptions.py +49 -0
  156. htmlgraph/file_watcher.py +101 -28
  157. htmlgraph/find_api.py +75 -63
  158. htmlgraph/git_events.py +145 -63
  159. htmlgraph/graph.py +1122 -106
  160. htmlgraph/hooks/.htmlgraph/.session-warning-state.json +6 -0
  161. htmlgraph/hooks/.htmlgraph/agents.json +72 -0
  162. htmlgraph/hooks/.htmlgraph/index.sqlite +0 -0
  163. htmlgraph/hooks/__init__.py +45 -0
  164. htmlgraph/hooks/bootstrap.py +169 -0
  165. htmlgraph/hooks/cigs_pretool_enforcer.py +354 -0
  166. htmlgraph/hooks/concurrent_sessions.py +208 -0
  167. htmlgraph/hooks/context.py +350 -0
  168. htmlgraph/hooks/drift_handler.py +525 -0
  169. htmlgraph/hooks/event_tracker.py +1314 -0
  170. htmlgraph/hooks/git_commands.py +175 -0
  171. htmlgraph/hooks/hooks-config.example.json +12 -0
  172. htmlgraph/hooks/installer.py +343 -0
  173. htmlgraph/hooks/orchestrator.py +674 -0
  174. htmlgraph/hooks/orchestrator_reflector.py +223 -0
  175. htmlgraph/hooks/post-checkout.sh +28 -0
  176. htmlgraph/hooks/post-commit.sh +24 -0
  177. htmlgraph/hooks/post-merge.sh +26 -0
  178. htmlgraph/hooks/post_tool_use_failure.py +273 -0
  179. htmlgraph/hooks/post_tool_use_handler.py +257 -0
  180. htmlgraph/hooks/posttooluse.py +408 -0
  181. htmlgraph/hooks/pre-commit.sh +94 -0
  182. htmlgraph/hooks/pre-push.sh +28 -0
  183. htmlgraph/hooks/pretooluse.py +819 -0
  184. htmlgraph/hooks/prompt_analyzer.py +637 -0
  185. htmlgraph/hooks/session_handler.py +668 -0
  186. htmlgraph/hooks/session_summary.py +395 -0
  187. htmlgraph/hooks/state_manager.py +504 -0
  188. htmlgraph/hooks/subagent_detection.py +202 -0
  189. htmlgraph/hooks/subagent_stop.py +369 -0
  190. htmlgraph/hooks/task_enforcer.py +255 -0
  191. htmlgraph/hooks/task_validator.py +177 -0
  192. htmlgraph/hooks/validator.py +628 -0
  193. htmlgraph/ids.py +41 -27
  194. htmlgraph/index.d.ts +286 -0
  195. htmlgraph/learning.py +767 -0
  196. htmlgraph/mcp_server.py +69 -23
  197. htmlgraph/models.py +1586 -87
  198. htmlgraph/operations/README.md +62 -0
  199. htmlgraph/operations/__init__.py +79 -0
  200. htmlgraph/operations/analytics.py +339 -0
  201. htmlgraph/operations/bootstrap.py +289 -0
  202. htmlgraph/operations/events.py +244 -0
  203. htmlgraph/operations/fastapi_server.py +231 -0
  204. htmlgraph/operations/hooks.py +350 -0
  205. htmlgraph/operations/initialization.py +597 -0
  206. htmlgraph/operations/initialization.py.backup +228 -0
  207. htmlgraph/operations/server.py +303 -0
  208. htmlgraph/orchestration/__init__.py +58 -0
  209. htmlgraph/orchestration/claude_launcher.py +179 -0
  210. htmlgraph/orchestration/command_builder.py +72 -0
  211. htmlgraph/orchestration/headless_spawner.py +281 -0
  212. htmlgraph/orchestration/live_events.py +377 -0
  213. htmlgraph/orchestration/model_selection.py +327 -0
  214. htmlgraph/orchestration/plugin_manager.py +140 -0
  215. htmlgraph/orchestration/prompts.py +137 -0
  216. htmlgraph/orchestration/spawner_event_tracker.py +383 -0
  217. htmlgraph/orchestration/spawners/__init__.py +16 -0
  218. htmlgraph/orchestration/spawners/base.py +194 -0
  219. htmlgraph/orchestration/spawners/claude.py +173 -0
  220. htmlgraph/orchestration/spawners/codex.py +435 -0
  221. htmlgraph/orchestration/spawners/copilot.py +294 -0
  222. htmlgraph/orchestration/spawners/gemini.py +471 -0
  223. htmlgraph/orchestration/subprocess_runner.py +36 -0
  224. htmlgraph/orchestration/task_coordination.py +343 -0
  225. htmlgraph/orchestration.md +563 -0
  226. htmlgraph/orchestrator-system-prompt-optimized.txt +863 -0
  227. htmlgraph/orchestrator.py +669 -0
  228. htmlgraph/orchestrator_config.py +357 -0
  229. htmlgraph/orchestrator_mode.py +328 -0
  230. htmlgraph/orchestrator_validator.py +133 -0
  231. htmlgraph/parallel.py +646 -0
  232. htmlgraph/parser.py +160 -35
  233. htmlgraph/path_query.py +608 -0
  234. htmlgraph/pattern_matcher.py +636 -0
  235. htmlgraph/planning.py +147 -52
  236. htmlgraph/pydantic_models.py +476 -0
  237. htmlgraph/quality_gates.py +350 -0
  238. htmlgraph/query_builder.py +109 -72
  239. htmlgraph/query_composer.py +509 -0
  240. htmlgraph/reflection.py +443 -0
  241. htmlgraph/refs.py +344 -0
  242. htmlgraph/repo_hash.py +512 -0
  243. htmlgraph/repositories/__init__.py +292 -0
  244. htmlgraph/repositories/analytics_repository.py +455 -0
  245. htmlgraph/repositories/analytics_repository_standard.py +628 -0
  246. htmlgraph/repositories/feature_repository.py +581 -0
  247. htmlgraph/repositories/feature_repository_htmlfile.py +668 -0
  248. htmlgraph/repositories/feature_repository_memory.py +607 -0
  249. htmlgraph/repositories/feature_repository_sqlite.py +858 -0
  250. htmlgraph/repositories/filter_service.py +620 -0
  251. htmlgraph/repositories/filter_service_standard.py +445 -0
  252. htmlgraph/repositories/shared_cache.py +621 -0
  253. htmlgraph/repositories/shared_cache_memory.py +395 -0
  254. htmlgraph/repositories/track_repository.py +552 -0
  255. htmlgraph/repositories/track_repository_htmlfile.py +619 -0
  256. htmlgraph/repositories/track_repository_memory.py +508 -0
  257. htmlgraph/repositories/track_repository_sqlite.py +711 -0
  258. htmlgraph/routing.py +8 -19
  259. htmlgraph/scripts/deploy.py +1 -2
  260. htmlgraph/sdk/__init__.py +398 -0
  261. htmlgraph/sdk/__init__.pyi +14 -0
  262. htmlgraph/sdk/analytics/__init__.py +19 -0
  263. htmlgraph/sdk/analytics/engine.py +155 -0
  264. htmlgraph/sdk/analytics/helpers.py +178 -0
  265. htmlgraph/sdk/analytics/registry.py +109 -0
  266. htmlgraph/sdk/base.py +484 -0
  267. htmlgraph/sdk/constants.py +216 -0
  268. htmlgraph/sdk/core.pyi +308 -0
  269. htmlgraph/sdk/discovery.py +120 -0
  270. htmlgraph/sdk/help/__init__.py +12 -0
  271. htmlgraph/sdk/help/mixin.py +699 -0
  272. htmlgraph/sdk/mixins/__init__.py +15 -0
  273. htmlgraph/sdk/mixins/attribution.py +113 -0
  274. htmlgraph/sdk/mixins/mixin.py +410 -0
  275. htmlgraph/sdk/operations/__init__.py +12 -0
  276. htmlgraph/sdk/operations/mixin.py +427 -0
  277. htmlgraph/sdk/orchestration/__init__.py +17 -0
  278. htmlgraph/sdk/orchestration/coordinator.py +203 -0
  279. htmlgraph/sdk/orchestration/spawner.py +204 -0
  280. htmlgraph/sdk/planning/__init__.py +19 -0
  281. htmlgraph/sdk/planning/bottlenecks.py +93 -0
  282. htmlgraph/sdk/planning/mixin.py +211 -0
  283. htmlgraph/sdk/planning/parallel.py +186 -0
  284. htmlgraph/sdk/planning/queue.py +210 -0
  285. htmlgraph/sdk/planning/recommendations.py +87 -0
  286. htmlgraph/sdk/planning/smart_planning.py +319 -0
  287. htmlgraph/sdk/session/__init__.py +19 -0
  288. htmlgraph/sdk/session/continuity.py +57 -0
  289. htmlgraph/sdk/session/handoff.py +110 -0
  290. htmlgraph/sdk/session/info.py +309 -0
  291. htmlgraph/sdk/session/manager.py +103 -0
  292. htmlgraph/sdk/strategic/__init__.py +26 -0
  293. htmlgraph/sdk/strategic/mixin.py +563 -0
  294. htmlgraph/server.py +685 -180
  295. htmlgraph/services/__init__.py +10 -0
  296. htmlgraph/services/claiming.py +199 -0
  297. htmlgraph/session_hooks.py +300 -0
  298. htmlgraph/session_manager.py +1392 -175
  299. htmlgraph/session_registry.py +587 -0
  300. htmlgraph/session_state.py +436 -0
  301. htmlgraph/session_warning.py +201 -0
  302. htmlgraph/sessions/__init__.py +23 -0
  303. htmlgraph/sessions/handoff.py +756 -0
  304. htmlgraph/setup.py +34 -17
  305. htmlgraph/spike_index.py +143 -0
  306. htmlgraph/sync_docs.py +12 -15
  307. htmlgraph/system_prompts.py +450 -0
  308. htmlgraph/templates/AGENTS.md.template +366 -0
  309. htmlgraph/templates/CLAUDE.md.template +97 -0
  310. htmlgraph/templates/GEMINI.md.template +87 -0
  311. htmlgraph/templates/orchestration-view.html +350 -0
  312. htmlgraph/track_builder.py +146 -15
  313. htmlgraph/track_manager.py +69 -21
  314. htmlgraph/transcript.py +890 -0
  315. htmlgraph/transcript_analytics.py +699 -0
  316. htmlgraph/types.py +323 -0
  317. htmlgraph/validation.py +115 -0
  318. htmlgraph/watch.py +8 -5
  319. htmlgraph/work_type_utils.py +3 -2
  320. {htmlgraph-0.9.3.data → htmlgraph-0.27.5.data}/data/htmlgraph/dashboard.html +2406 -307
  321. htmlgraph-0.27.5.data/data/htmlgraph/templates/AGENTS.md.template +366 -0
  322. htmlgraph-0.27.5.data/data/htmlgraph/templates/CLAUDE.md.template +97 -0
  323. htmlgraph-0.27.5.data/data/htmlgraph/templates/GEMINI.md.template +87 -0
  324. {htmlgraph-0.9.3.dist-info → htmlgraph-0.27.5.dist-info}/METADATA +97 -64
  325. htmlgraph-0.27.5.dist-info/RECORD +337 -0
  326. {htmlgraph-0.9.3.dist-info → htmlgraph-0.27.5.dist-info}/entry_points.txt +1 -1
  327. htmlgraph/cli.py +0 -2688
  328. htmlgraph/sdk.py +0 -709
  329. htmlgraph-0.9.3.dist-info/RECORD +0 -61
  330. {htmlgraph-0.9.3.data → htmlgraph-0.27.5.data}/data/htmlgraph/styles.css +0 -0
  331. {htmlgraph-0.9.3.dist-info → htmlgraph-0.27.5.dist-info}/WHEEL +0 -0
@@ -0,0 +1,373 @@
1
+ <!-- Event Traces - Parent-Child Event Nesting Visualization -->
2
+
3
+ <div class="event-traces-container">
4
+ <div class="traces-header">
5
+ <h2>Task Delegation Traces</h2>
6
+ <p class="subtitle">Parent-child event relationships showing delegation hierarchy</p>
7
+ </div>
8
+
9
+ {% if hierarchical_events %}
10
+ <div class="traces-list">
11
+ {% for trace in hierarchical_events %}
12
+ <div class="event-trace">
13
+ <!-- Parent Event (Task Delegation) -->
14
+ <div class="trace-parent">
15
+ <div class="event-header">
16
+ <span class="event-badge parent-badge">TASK</span>
17
+ <span class="agent-name">{{ trace.parent_event_id }}</span>
18
+ <span class="subagent-type" title="Subagent Type">
19
+ {{ trace.subagent_type or "general-purpose" }}
20
+ </span>
21
+ <span class="event-status" :class="'status-' + trace.status.lower()">
22
+ {{ trace.status.upper() }}
23
+ </span>
24
+ <span class="timestamp">{{ trace.started_at }}</span>
25
+ </div>
26
+
27
+ <div class="event-metadata">
28
+ {% if trace.duration_seconds %}
29
+ <span class="metadata-item">
30
+ <strong>Duration:</strong> {{ "%.1f" % trace.duration_seconds }}s
31
+ </span>
32
+ {% endif %}
33
+ <span class="metadata-item">
34
+ <strong>Child Events:</strong> {{ trace.child_spike_count or 0 }}
35
+ </span>
36
+ </div>
37
+ </div>
38
+
39
+ <!-- Child Events (Spikes Created by Subagent) -->
40
+ {% if trace.child_events or trace.child_spikes %}
41
+ <div class="trace-children">
42
+ <div class="children-header">
43
+ <span class="connector">├─</span>
44
+ <span class="label">Subagent Activity</span>
45
+ <span class="count">{{ trace.child_events|length + (trace.child_spikes|length if trace.child_spikes else 0) }} events</span>
46
+ </div>
47
+
48
+ <!-- Child Events (e.g., completion markers) -->
49
+ {% for child_event in trace.child_events %}
50
+ <div class="trace-child event-item">
51
+ <span class="connector">│ ├─</span>
52
+ <span class="event-icon">▪</span>
53
+ <span class="event-type">{{ child_event.event_type }}</span>
54
+ <span class="event-id">{{ child_event.event_id }}</span>
55
+ <span class="timestamp">{{ child_event.timestamp }}</span>
56
+ <span class="status" :class="'status-' + child_event.status.lower()">
57
+ {{ child_event.status }}
58
+ </span>
59
+ </div>
60
+ {% endfor %}
61
+
62
+ <!-- Child Spikes (Knowledge Created) -->
63
+ {% for spike_id in trace.child_spikes %}
64
+ <div class="trace-child spike-item">
65
+ <span class="connector">│ ├─</span>
66
+ <span class="spike-icon">✦</span>
67
+ <span class="event-type">spike</span>
68
+ <span class="spike-id" title="Knowledge Created">{{ spike_id }}</span>
69
+ </div>
70
+ {% endfor %}
71
+
72
+ <!-- Closing connector -->
73
+ <div class="trace-child-close">
74
+ <span class="connector">│</span>
75
+ </div>
76
+ </div>
77
+ {% else %}
78
+ <div class="trace-children empty">
79
+ <span class="connector">└─</span>
80
+ <span class="label">No child events</span>
81
+ </div>
82
+ {% endif %}
83
+ </div>
84
+ {% endfor %}
85
+ </div>
86
+
87
+ <style>
88
+ .event-traces-container {
89
+ padding: 16px;
90
+ background: #f8f9fa;
91
+ border-radius: 8px;
92
+ }
93
+
94
+ .traces-header {
95
+ margin-bottom: 20px;
96
+ border-bottom: 2px solid #e0e0e0;
97
+ padding-bottom: 12px;
98
+ }
99
+
100
+ .traces-header h2 {
101
+ margin: 0 0 4px 0;
102
+ color: #333;
103
+ font-size: 18px;
104
+ font-weight: 600;
105
+ }
106
+
107
+ .traces-header .subtitle {
108
+ margin: 0;
109
+ color: #666;
110
+ font-size: 13px;
111
+ }
112
+
113
+ .traces-list {
114
+ display: flex;
115
+ flex-direction: column;
116
+ gap: 12px;
117
+ }
118
+
119
+ .event-trace {
120
+ background: white;
121
+ border: 1px solid #ddd;
122
+ border-radius: 6px;
123
+ overflow: hidden;
124
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);
125
+ }
126
+
127
+ .trace-parent {
128
+ padding: 12px;
129
+ background: #f5f7ff;
130
+ border-left: 4px solid #4a90e2;
131
+ }
132
+
133
+ .event-header {
134
+ display: flex;
135
+ align-items: center;
136
+ gap: 8px;
137
+ margin-bottom: 8px;
138
+ flex-wrap: wrap;
139
+ }
140
+
141
+ .event-badge {
142
+ display: inline-block;
143
+ padding: 2px 8px;
144
+ font-size: 11px;
145
+ font-weight: 600;
146
+ border-radius: 3px;
147
+ text-transform: uppercase;
148
+ letter-spacing: 0.5px;
149
+ }
150
+
151
+ .event-badge.parent-badge {
152
+ background: #4a90e2;
153
+ color: white;
154
+ }
155
+
156
+ .agent-name {
157
+ font-family: 'Monaco', 'Menlo', monospace;
158
+ font-size: 12px;
159
+ font-weight: 500;
160
+ color: #333;
161
+ }
162
+
163
+ .subagent-type {
164
+ display: inline-block;
165
+ padding: 2px 6px;
166
+ font-size: 11px;
167
+ background: #e8f0ff;
168
+ color: #4a90e2;
169
+ border-radius: 3px;
170
+ border: 1px solid #b3d9ff;
171
+ }
172
+
173
+ .event-status {
174
+ display: inline-block;
175
+ padding: 2px 8px;
176
+ font-size: 11px;
177
+ font-weight: 600;
178
+ border-radius: 3px;
179
+ text-transform: uppercase;
180
+ }
181
+
182
+ .event-status.status-completed {
183
+ background: #d4f4dd;
184
+ color: #2d7a4a;
185
+ }
186
+
187
+ .event-status.status-started {
188
+ background: #fff3cd;
189
+ color: #856404;
190
+ }
191
+
192
+ .event-status.status-failed {
193
+ background: #f8d7da;
194
+ color: #721c24;
195
+ }
196
+
197
+ .timestamp {
198
+ font-size: 12px;
199
+ color: #999;
200
+ font-family: 'Monaco', 'Menlo', monospace;
201
+ margin-left: auto;
202
+ }
203
+
204
+ .event-metadata {
205
+ display: flex;
206
+ gap: 16px;
207
+ font-size: 12px;
208
+ color: #666;
209
+ padding: 0 0 0 0;
210
+ }
211
+
212
+ .metadata-item {
213
+ display: flex;
214
+ align-items: center;
215
+ gap: 4px;
216
+ }
217
+
218
+ .metadata-item strong {
219
+ color: #333;
220
+ font-weight: 600;
221
+ }
222
+
223
+ .trace-children {
224
+ padding: 8px 12px;
225
+ background: white;
226
+ border-top: 1px solid #eee;
227
+ }
228
+
229
+ .trace-children.empty {
230
+ color: #999;
231
+ font-size: 12px;
232
+ font-style: italic;
233
+ padding: 8px 12px;
234
+ }
235
+
236
+ .children-header {
237
+ display: flex;
238
+ align-items: center;
239
+ gap: 8px;
240
+ margin-bottom: 8px;
241
+ font-size: 12px;
242
+ font-weight: 600;
243
+ color: #666;
244
+ }
245
+
246
+ .connector {
247
+ font-family: 'Monaco', 'Menlo', monospace;
248
+ color: #ddd;
249
+ font-weight: bold;
250
+ min-width: 20px;
251
+ }
252
+
253
+ .label {
254
+ color: #333;
255
+ }
256
+
257
+ .count {
258
+ margin-left: auto;
259
+ font-size: 11px;
260
+ background: #f0f0f0;
261
+ padding: 2px 6px;
262
+ border-radius: 3px;
263
+ color: #666;
264
+ }
265
+
266
+ .trace-child {
267
+ display: flex;
268
+ align-items: center;
269
+ gap: 6px;
270
+ padding: 6px 0;
271
+ font-size: 12px;
272
+ border-bottom: 1px solid #f5f5f5;
273
+ }
274
+
275
+ .trace-child:last-child {
276
+ border-bottom: none;
277
+ }
278
+
279
+ .event-icon,
280
+ .spike-icon {
281
+ font-size: 10px;
282
+ color: #999;
283
+ }
284
+
285
+ .spike-icon {
286
+ color: #e8a600;
287
+ }
288
+
289
+ .event-type {
290
+ display: inline-block;
291
+ padding: 2px 6px;
292
+ font-size: 10px;
293
+ background: #f0f0f0;
294
+ color: #666;
295
+ border-radius: 2px;
296
+ text-transform: uppercase;
297
+ font-weight: 500;
298
+ }
299
+
300
+ .event-id,
301
+ .spike-id {
302
+ font-family: 'Monaco', 'Menlo', monospace;
303
+ font-size: 11px;
304
+ color: #666;
305
+ font-weight: 500;
306
+ }
307
+
308
+ .trace-child .timestamp {
309
+ font-size: 11px;
310
+ margin-left: auto;
311
+ }
312
+
313
+ .trace-child .status {
314
+ font-size: 10px;
315
+ padding: 2px 6px;
316
+ border-radius: 2px;
317
+ font-weight: 500;
318
+ text-transform: uppercase;
319
+ }
320
+
321
+ .trace-child .status.status-completed {
322
+ background: #d4f4dd;
323
+ color: #2d7a4a;
324
+ }
325
+
326
+ .trace-child-close {
327
+ padding: 2px 0;
328
+ font-size: 12px;
329
+ }
330
+
331
+ @media (max-width: 768px) {
332
+ .event-header {
333
+ flex-direction: column;
334
+ align-items: flex-start;
335
+ }
336
+
337
+ .timestamp {
338
+ margin-left: 0;
339
+ }
340
+
341
+ .event-metadata {
342
+ flex-direction: column;
343
+ gap: 4px;
344
+ }
345
+ }
346
+ </style>
347
+
348
+ {% else %}
349
+ <div class="no-traces">
350
+ <p>No task delegation traces found.</p>
351
+ <p class="hint">Task delegation traces appear here when you use Task() to delegate work to subagents.</p>
352
+ </div>
353
+
354
+ <style>
355
+ .no-traces {
356
+ padding: 40px 20px;
357
+ text-align: center;
358
+ color: #999;
359
+ }
360
+
361
+ .no-traces p {
362
+ margin: 8px 0;
363
+ font-size: 14px;
364
+ }
365
+
366
+ .no-traces .hint {
367
+ font-size: 12px;
368
+ color: #bbb;
369
+ font-style: italic;
370
+ }
371
+ </style>
372
+ {% endif %}
373
+ </div>