Spaces:
Sleeping
Sleeping
Kacper Εukawski commited on
Commit Β·
74f8d0f
1
Parent(s): 070f7e4
Format agent outputs
Browse files- app/static/index.html +60 -13
- app/static/styles.css +55 -0
app/static/index.html
CHANGED
|
@@ -13,8 +13,10 @@
|
|
| 13 |
|
| 14 |
<!-- ββ Header ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ -->
|
| 15 |
<header class="app-header flex items-center gap-3 px-5 py-3">
|
|
|
|
| 16 |
<div class="ds-mark">d</div>
|
| 17 |
<span class="brand-name">deepset</span>
|
|
|
|
| 18 |
<span class="brand-sep">|</span>
|
| 19 |
<span class="brand-subtitle">Conference Intelligence</span>
|
| 20 |
|
|
@@ -334,11 +336,43 @@
|
|
| 334 |
phaseTextAcc.set(phase, (phaseTextAcc.get(phase) || '') + content);
|
| 335 |
|
| 336 |
if (!phaseTextEl.get(phase)) {
|
| 337 |
-
const el = document.createElement('div');
|
| 338 |
const isReport = phase === 'writer';
|
| 339 |
-
|
| 340 |
-
|
| 341 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 342 |
}
|
| 343 |
phaseTextEl.get(phase).innerHTML = marked.parse(phaseTextAcc.get(phase));
|
| 344 |
panel.scrollTop = panel.scrollHeight;
|
|
@@ -405,19 +439,28 @@
|
|
| 405 |
if (!phase) return;
|
| 406 |
ensurePhase(phase);
|
| 407 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 408 |
const panel = document.getElementById(`panel-${phase}`);
|
| 409 |
if (!panel) return;
|
| 410 |
|
| 411 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 412 |
|
| 413 |
-
const isReport = phase === 'writer';
|
| 414 |
const el = document.createElement('div');
|
| 415 |
-
el.className =
|
| 416 |
el.innerHTML = marked.parse(content);
|
| 417 |
-
|
| 418 |
-
|
| 419 |
-
|
| 420 |
-
phaseTextAcc.set(phase, content);
|
| 421 |
|
| 422 |
panel.scrollTop = panel.scrollHeight;
|
| 423 |
|
|
@@ -556,13 +599,17 @@
|
|
| 556 |
generateBtn.addEventListener('click', generate);
|
| 557 |
themeInput.addEventListener('keydown', e => { if (e.key === 'Enter') generate(); });
|
| 558 |
|
| 559 |
-
|
|
|
|
| 560 |
runSection.style.display = 'none';
|
| 561 |
inputSection.style.display = 'flex';
|
| 562 |
headerStatus.classList.add('hidden');
|
| 563 |
themeInput.value = '';
|
| 564 |
themeInput.focus();
|
| 565 |
-
}
|
|
|
|
|
|
|
|
|
|
| 566 |
</script>
|
| 567 |
</body>
|
| 568 |
</html>
|
|
|
|
| 13 |
|
| 14 |
<!-- ββ Header ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ -->
|
| 15 |
<header class="app-header flex items-center gap-3 px-5 py-3">
|
| 16 |
+
<div id="logo-home" class="flex items-center gap-3 cursor-pointer select-none" style="gap:0.75rem">
|
| 17 |
<div class="ds-mark">d</div>
|
| 18 |
<span class="brand-name">deepset</span>
|
| 19 |
+
</div>
|
| 20 |
<span class="brand-sep">|</span>
|
| 21 |
<span class="brand-subtitle">Conference Intelligence</span>
|
| 22 |
|
|
|
|
| 336 |
phaseTextAcc.set(phase, (phaseTextAcc.get(phase) || '') + content);
|
| 337 |
|
| 338 |
if (!phaseTextEl.get(phase)) {
|
|
|
|
| 339 |
const isReport = phase === 'writer';
|
| 340 |
+
if (!isReport) {
|
| 341 |
+
const wrapper = document.createElement('div');
|
| 342 |
+
wrapper.className = 'prose-block fade-in';
|
| 343 |
+
|
| 344 |
+
const badge = document.createElement('div');
|
| 345 |
+
badge.className = 'type-badge type-text';
|
| 346 |
+
badge.textContent = 'text';
|
| 347 |
+
wrapper.appendChild(badge);
|
| 348 |
+
|
| 349 |
+
const el = document.createElement('div');
|
| 350 |
+
el.className = 'prose prose-sm';
|
| 351 |
+
wrapper.appendChild(el);
|
| 352 |
+
panel.appendChild(wrapper);
|
| 353 |
+
phaseTextEl.set(phase, el);
|
| 354 |
+
} else {
|
| 355 |
+
const wrapper = document.createElement('div');
|
| 356 |
+
wrapper.className = 'final-report-wrapper fade-in';
|
| 357 |
+
|
| 358 |
+
const header = document.createElement('div');
|
| 359 |
+
header.className = 'final-report-header';
|
| 360 |
+
header.innerHTML = `
|
| 361 |
+
<div class="final-report-dot"></div>
|
| 362 |
+
<span class="final-report-label">Final Report</span>
|
| 363 |
+
`;
|
| 364 |
+
wrapper.appendChild(header);
|
| 365 |
+
|
| 366 |
+
const body = document.createElement('div');
|
| 367 |
+
body.className = 'final-report-body';
|
| 368 |
+
|
| 369 |
+
const el = document.createElement('div');
|
| 370 |
+
el.className = 'prose prose-report prose-lg';
|
| 371 |
+
body.appendChild(el);
|
| 372 |
+
wrapper.appendChild(body);
|
| 373 |
+
panel.appendChild(wrapper);
|
| 374 |
+
phaseTextEl.set(phase, el);
|
| 375 |
+
}
|
| 376 |
}
|
| 377 |
phaseTextEl.get(phase).innerHTML = marked.parse(phaseTextAcc.get(phase));
|
| 378 |
panel.scrollTop = panel.scrollHeight;
|
|
|
|
| 439 |
if (!phase) return;
|
| 440 |
ensurePhase(phase);
|
| 441 |
|
| 442 |
+
if (phase === 'planner') parsePlanForFiles(content);
|
| 443 |
+
|
| 444 |
+
// Writer phase: tool_result duplicates the text event β skip it, let appendText handle final report
|
| 445 |
+
if (phase === 'writer') return;
|
| 446 |
+
|
| 447 |
const panel = document.getElementById(`panel-${phase}`);
|
| 448 |
if (!panel) return;
|
| 449 |
|
| 450 |
+
const wrapper = document.createElement('div');
|
| 451 |
+
wrapper.className = 'tool-result-block fade-in';
|
| 452 |
+
|
| 453 |
+
const badge = document.createElement('div');
|
| 454 |
+
badge.className = 'type-badge type-result';
|
| 455 |
+
badge.textContent = 'tool_result';
|
| 456 |
+
wrapper.appendChild(badge);
|
| 457 |
|
|
|
|
| 458 |
const el = document.createElement('div');
|
| 459 |
+
el.className = 'prose prose-sm';
|
| 460 |
el.innerHTML = marked.parse(content);
|
| 461 |
+
wrapper.appendChild(el);
|
| 462 |
+
|
| 463 |
+
panel.appendChild(wrapper);
|
|
|
|
| 464 |
|
| 465 |
panel.scrollTop = panel.scrollHeight;
|
| 466 |
|
|
|
|
| 599 |
generateBtn.addEventListener('click', generate);
|
| 600 |
themeInput.addEventListener('keydown', e => { if (e.key === 'Enter') generate(); });
|
| 601 |
|
| 602 |
+
function goHome() {
|
| 603 |
+
resetState();
|
| 604 |
runSection.style.display = 'none';
|
| 605 |
inputSection.style.display = 'flex';
|
| 606 |
headerStatus.classList.add('hidden');
|
| 607 |
themeInput.value = '';
|
| 608 |
themeInput.focus();
|
| 609 |
+
}
|
| 610 |
+
|
| 611 |
+
newReportBtn.addEventListener('click', goHome);
|
| 612 |
+
document.getElementById('logo-home').addEventListener('click', goHome);
|
| 613 |
</script>
|
| 614 |
</body>
|
| 615 |
</html>
|
app/static/styles.css
CHANGED
|
@@ -85,6 +85,41 @@ body {
|
|
| 85 |
max-width: 700px;
|
| 86 |
margin: 0 auto;
|
| 87 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 88 |
.prose-report h1 {
|
| 89 |
font-size: 1.75rem;
|
| 90 |
letter-spacing: -0.5px;
|
|
@@ -107,6 +142,26 @@ body {
|
|
| 107 |
border: 1px solid var(--border);
|
| 108 |
}
|
| 109 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 110 |
/* ββ Animations ββββββββββββββββββββββββββββββββββββββββββββββββββββββ */
|
| 111 |
@keyframes spin {
|
| 112 |
to { transform: rotate(360deg); }
|
|
|
|
| 85 |
max-width: 700px;
|
| 86 |
margin: 0 auto;
|
| 87 |
}
|
| 88 |
+
|
| 89 |
+
/* ββ Final report container ββββββββββββββββββββββββββββββββββββββββββ */
|
| 90 |
+
.final-report-wrapper {
|
| 91 |
+
margin: 12px 4px;
|
| 92 |
+
border-radius: 12px;
|
| 93 |
+
border: 1px solid var(--border2);
|
| 94 |
+
background: var(--surface);
|
| 95 |
+
overflow: hidden;
|
| 96 |
+
}
|
| 97 |
+
.final-report-header {
|
| 98 |
+
display: flex;
|
| 99 |
+
align-items: center;
|
| 100 |
+
gap: 8px;
|
| 101 |
+
padding: 9px 20px;
|
| 102 |
+
background: linear-gradient(90deg, rgba(0,110,255,0.14) 0%, transparent 80%);
|
| 103 |
+
border-bottom: 1px solid var(--border);
|
| 104 |
+
}
|
| 105 |
+
.final-report-label {
|
| 106 |
+
font-size: 0.6rem;
|
| 107 |
+
font-family: "SF Mono", Consolas, monospace;
|
| 108 |
+
font-weight: 700;
|
| 109 |
+
text-transform: uppercase;
|
| 110 |
+
letter-spacing: 0.1em;
|
| 111 |
+
color: var(--blue);
|
| 112 |
+
}
|
| 113 |
+
.final-report-dot {
|
| 114 |
+
width: 6px; height: 6px;
|
| 115 |
+
border-radius: 50%;
|
| 116 |
+
background: var(--green);
|
| 117 |
+
flex-shrink: 0;
|
| 118 |
+
box-shadow: 0 0 6px var(--green);
|
| 119 |
+
}
|
| 120 |
+
.final-report-body {
|
| 121 |
+
padding: 24px 28px 28px;
|
| 122 |
+
}
|
| 123 |
.prose-report h1 {
|
| 124 |
font-size: 1.75rem;
|
| 125 |
letter-spacing: -0.5px;
|
|
|
|
| 142 |
border: 1px solid var(--border);
|
| 143 |
}
|
| 144 |
|
| 145 |
+
/* ββ Tool result block βββββββββββββββββββββββββββββββββββββββββββββββ */
|
| 146 |
+
.tool-result-block {
|
| 147 |
+
margin: 8px 0;
|
| 148 |
+
padding: 10px 14px;
|
| 149 |
+
background: var(--surface2);
|
| 150 |
+
border-left: 2px solid var(--amber);
|
| 151 |
+
border-radius: 0 6px 6px 0;
|
| 152 |
+
}
|
| 153 |
+
|
| 154 |
+
.type-badge {
|
| 155 |
+
font-size: 0.6rem;
|
| 156 |
+
font-family: "SF Mono", Consolas, monospace;
|
| 157 |
+
font-weight: 600;
|
| 158 |
+
text-transform: uppercase;
|
| 159 |
+
letter-spacing: 0.08em;
|
| 160 |
+
margin-bottom: 6px;
|
| 161 |
+
}
|
| 162 |
+
.type-badge.type-result { color: var(--amber); }
|
| 163 |
+
.type-badge.type-text { color: var(--muted2); }
|
| 164 |
+
|
| 165 |
/* ββ Animations ββββββββββββββββββββββββββββββββββββββββββββββββββββββ */
|
| 166 |
@keyframes spin {
|
| 167 |
to { transform: rotate(360deg); }
|