Spaces:
Paused
Paused
Update templates/index.html
Browse files- templates/index.html +25 -13
templates/index.html
CHANGED
|
@@ -20,7 +20,7 @@
|
|
| 20 |
}
|
| 21 |
*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
|
| 22 |
html,body{height:100%;overflow:hidden}
|
| 23 |
-
body{font-family:'IBM Plex Sans',system-ui,sans-serif;background:var(--floor);color:var(--text);display:flex;flex-direction:column;font-size:13px}
|
| 24 |
|
| 25 |
/* ββ TOPBAR ββ */
|
| 26 |
.topbar{height:44px;background:var(--panel);border-bottom:1px solid var(--border-dark);display:flex;align-items:center;justify-content:space-between;padding:0 16px;flex-shrink:0;z-index:100}
|
|
@@ -56,11 +56,11 @@ body{font-family:'IBM Plex Sans',system-ui,sans-serif;background:var(--floor);co
|
|
| 56 |
.mc-lbl{font-family:'DM Mono',monospace;font-size:11px;color:#4b5563;white-space:nowrap;align-self:center}
|
| 57 |
|
| 58 |
/* ββ MAIN GRID ββ */
|
| 59 |
-
.main{display:grid;grid-template-columns:1fr 420px;flex:1;min-height:0;
|
| 60 |
@media(max-width:900px){.main{grid-template-columns:1fr}.right-col{display:none}}
|
| 61 |
|
| 62 |
/* ββ OFFICE ββ */
|
| 63 |
-
.office{position:relative;overflow:hidden;background:var(--floor)}
|
| 64 |
|
| 65 |
/* Wall */
|
| 66 |
.wall{position:absolute;top:0;left:0;right:0;height:40%;background:linear-gradient(180deg,var(--wall) 0%,var(--wall2) 100%)}
|
|
@@ -160,14 +160,14 @@ body{font-family:'IBM Plex Sans',system-ui,sans-serif;background:var(--floor);co
|
|
| 160 |
.agent.idle .a-body{animation:breathe 3s ease-in-out infinite}
|
| 161 |
|
| 162 |
/* ββ RIGHT COLUMN ββ */
|
| 163 |
-
.right-col{background:var(--white);border-left:1px solid var(--gray-200);display:flex;flex-direction:column;overflow:hidden;height:100%}
|
| 164 |
|
| 165 |
/* Tabs */
|
| 166 |
.tabs{display:flex;border-bottom:1px solid var(--gray-200);flex-shrink:0;background:var(--gray-50)}
|
| 167 |
.tab{flex:1;padding:8px 4px;font-size:11px;font-weight:500;text-align:center;cursor:pointer;border-bottom:2px solid transparent;color:var(--text3);transition:all .15s;letter-spacing:.3px;font-family:'IBM Plex Sans',sans-serif}
|
| 168 |
.tab.on{color:var(--text);border-bottom-color:var(--green-l);background:var(--white)}
|
| 169 |
.tab:hover:not(.on){color:var(--text2);background:var(--gray-100)}
|
| 170 |
-
.pane{flex:1;overflow
|
| 171 |
.pane.on{display:flex;flex-direction:column;flex:1;min-height:0;overflow:hidden}
|
| 172 |
|
| 173 |
/* Results */
|
|
@@ -193,7 +193,7 @@ body{font-family:'IBM Plex Sans',system-ui,sans-serif;background:var(--floor);co
|
|
| 193 |
.act-time{font-size:9px;color:var(--text3);margin-top:1px;font-family:'DM Mono',monospace}
|
| 194 |
|
| 195 |
/* ββ CHAT ββ */
|
| 196 |
-
.chat-col{display:flex;flex-direction:column;
|
| 197 |
.chat-chips{padding:8px 10px;border-bottom:1px solid var(--gray-100);display:flex;gap:5px;flex-wrap:wrap;flex-shrink:0;background:var(--gray-50)}
|
| 198 |
.chip{font-size:10px;font-weight:500;padding:3px 9px;border:1px solid;border-radius:20px;cursor:pointer;transition:all .15s;font-family:'IBM Plex Sans',sans-serif;white-space:nowrap}
|
| 199 |
.chip.on{color:var(--white)}
|
|
@@ -201,13 +201,13 @@ body{font-family:'IBM Plex Sans',system-ui,sans-serif;background:var(--floor);co
|
|
| 201 |
.chat-hdr-info{font-size:11px;color:var(--text3);font-family:'DM Mono',monospace}
|
| 202 |
.chat-hdr-clear{font-size:10px;color:var(--text3);cursor:pointer;padding:2px 7px;border:1px solid var(--gray-200);border-radius:4px;transition:all .15s;font-family:'IBM Plex Sans',sans-serif}
|
| 203 |
.chat-hdr-clear:hover{color:var(--red);border-color:#fca5a5}
|
| 204 |
-
.chat-msgs{flex:1;overflow-y:auto;padding:10px 12px;display:flex;flex-direction:column;gap:8px;min-height:0;background:var(--gray-50)
|
| 205 |
-
.msg{padding:9px 11px;border-radius:8px;font-size:11px;line-height:1.6;
|
| 206 |
-
.msg.user{background:var(--gray-100);border:1px solid var(--gray-200);align-self:flex-end;color:var(--text);max-width:
|
| 207 |
-
.msg.agent{background:var(--white);border:1px solid var(--gray-200);color:var(--text);box-shadow:var(--shadow);
|
| 208 |
.msg.user .msg-who{font-size:9px;color:var(--text3);text-align:right;margin-bottom:2px;font-family:'DM Mono',monospace}
|
| 209 |
.msg.agent .msg-who{font-size:9px;margin-bottom:3px;font-family:'DM Mono',monospace;font-weight:500}
|
| 210 |
-
.msg-text{user-select:text;cursor:text;word-break:break-word;overflow-wrap:anywhere;white-space:
|
| 211 |
.msg-model{font-size:8px;color:var(--text3);margin-top:4px;font-family:'DM Mono',monospace}
|
| 212 |
.msg-imgs{display:flex;gap:6px;flex-wrap:wrap;margin-top:8px;padding:6px;background:var(--gray-50);border-radius:6px;border:1px solid var(--gray-200)}
|
| 213 |
.chat-typing{padding:2px 12px 0;font-size:10px;color:var(--text3);height:16px;font-style:italic;font-family:'IBM Plex Sans',sans-serif;flex-shrink:0}
|
|
@@ -334,7 +334,7 @@ body{font-family:'IBM Plex Sans',system-ui,sans-serif;background:var(--floor);co
|
|
| 334 |
<div class="tab" onclick="switchTab('archive')">Archive</div>
|
| 335 |
</div>
|
| 336 |
|
| 337 |
-
<div class="pane on" id="pane-results">
|
| 338 |
<div class="results-wrap" id="results-wrap">
|
| 339 |
<div class="r-empty">Launch a mission to see results.</div>
|
| 340 |
</div>
|
|
@@ -344,7 +344,7 @@ body{font-family:'IBM Plex Sans',system-ui,sans-serif;background:var(--floor);co
|
|
| 344 |
</div>
|
| 345 |
</div>
|
| 346 |
|
| 347 |
-
<div class="pane" id="pane-chat"
|
| 348 |
<div class="chat-col">
|
| 349 |
<div class="chat-chips" id="chat-chips"></div>
|
| 350 |
<div class="chat-hdr">
|
|
@@ -716,8 +716,20 @@ async function sendChat(){
|
|
| 716 |
const r=await fetch('/api/chat',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({agent:chatAgent,message:msg,session_id:chatAgent})});
|
| 717 |
const d=await r.json();
|
| 718 |
if(d.error) throw new Error(d.error);
|
|
|
|
| 719 |
const imgs=d.img_base&&d.img_count>0?{base:d.img_base,count:d.img_count}:null;
|
| 720 |
chatHist[chatAgent].push({role:'agent',text:d.response,model:d.model,turn:d.turn,imgs});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 721 |
showBubble(chatAgent,d.response.substring(0,50)+(d.response.length>50?'β¦':''),3000);
|
| 722 |
updateChatHdr();
|
| 723 |
}catch(e){
|
|
|
|
| 20 |
}
|
| 21 |
*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
|
| 22 |
html,body{height:100%;overflow:hidden}
|
| 23 |
+
body{font-family:'IBM Plex Sans',system-ui,sans-serif;background:var(--floor);color:var(--text);display:flex;flex-direction:column;font-size:13px;height:100vh;overflow:hidden}
|
| 24 |
|
| 25 |
/* ββ TOPBAR ββ */
|
| 26 |
.topbar{height:44px;background:var(--panel);border-bottom:1px solid var(--border-dark);display:flex;align-items:center;justify-content:space-between;padding:0 16px;flex-shrink:0;z-index:100}
|
|
|
|
| 56 |
.mc-lbl{font-family:'DM Mono',monospace;font-size:11px;color:#4b5563;white-space:nowrap;align-self:center}
|
| 57 |
|
| 58 |
/* ββ MAIN GRID ββ */
|
| 59 |
+
.main{display:grid;grid-template-columns:1fr 420px;overflow:hidden;flex:1;min-height:0;height:0}
|
| 60 |
@media(max-width:900px){.main{grid-template-columns:1fr}.right-col{display:none}}
|
| 61 |
|
| 62 |
/* ββ OFFICE ββ */
|
| 63 |
+
.office{position:relative;overflow:hidden;background:var(--floor);min-height:0;height:100%}
|
| 64 |
|
| 65 |
/* Wall */
|
| 66 |
.wall{position:absolute;top:0;left:0;right:0;height:40%;background:linear-gradient(180deg,var(--wall) 0%,var(--wall2) 100%)}
|
|
|
|
| 160 |
.agent.idle .a-body{animation:breathe 3s ease-in-out infinite}
|
| 161 |
|
| 162 |
/* ββ RIGHT COLUMN ββ */
|
| 163 |
+
.right-col{background:var(--white);border-left:1px solid var(--gray-200);display:flex;flex-direction:column;overflow:hidden;min-height:0;height:100%}
|
| 164 |
|
| 165 |
/* Tabs */
|
| 166 |
.tabs{display:flex;border-bottom:1px solid var(--gray-200);flex-shrink:0;background:var(--gray-50)}
|
| 167 |
.tab{flex:1;padding:8px 4px;font-size:11px;font-weight:500;text-align:center;cursor:pointer;border-bottom:2px solid transparent;color:var(--text3);transition:all .15s;letter-spacing:.3px;font-family:'IBM Plex Sans',sans-serif}
|
| 168 |
.tab.on{color:var(--text);border-bottom-color:var(--green-l);background:var(--white)}
|
| 169 |
.tab:hover:not(.on){color:var(--text2);background:var(--gray-100)}
|
| 170 |
+
.pane{flex:1;overflow:hidden;display:none;min-height:0;flex-direction:column}
|
| 171 |
.pane.on{display:flex;flex-direction:column;flex:1;min-height:0;overflow:hidden}
|
| 172 |
|
| 173 |
/* Results */
|
|
|
|
| 193 |
.act-time{font-size:9px;color:var(--text3);margin-top:1px;font-family:'DM Mono',monospace}
|
| 194 |
|
| 195 |
/* ββ CHAT ββ */
|
| 196 |
+
.chat-col{display:flex;flex-direction:column;flex:1;min-height:0;overflow:hidden}
|
| 197 |
.chat-chips{padding:8px 10px;border-bottom:1px solid var(--gray-100);display:flex;gap:5px;flex-wrap:wrap;flex-shrink:0;background:var(--gray-50)}
|
| 198 |
.chip{font-size:10px;font-weight:500;padding:3px 9px;border:1px solid;border-radius:20px;cursor:pointer;transition:all .15s;font-family:'IBM Plex Sans',sans-serif;white-space:nowrap}
|
| 199 |
.chip.on{color:var(--white)}
|
|
|
|
| 201 |
.chat-hdr-info{font-size:11px;color:var(--text3);font-family:'DM Mono',monospace}
|
| 202 |
.chat-hdr-clear{font-size:10px;color:var(--text3);cursor:pointer;padding:2px 7px;border:1px solid var(--gray-200);border-radius:4px;transition:all .15s;font-family:'IBM Plex Sans',sans-serif}
|
| 203 |
.chat-hdr-clear:hover{color:var(--red);border-color:#fca5a5}
|
| 204 |
+
.chat-msgs{flex:1;overflow-y:auto;padding:10px 12px;display:flex;flex-direction:column;gap:8px;min-height:0;background:var(--gray-50)}
|
| 205 |
+
.msg{padding:9px 11px;border-radius:8px;font-size:11px;line-height:1.6;word-break:break-word;font-family:'IBM Plex Sans',sans-serif;box-sizing:border-box}
|
| 206 |
+
.msg.user{background:var(--gray-100);border:1px solid var(--gray-200);align-self:flex-end;color:var(--text);max-width:88%}
|
| 207 |
+
.msg.agent{background:var(--white);border:1px solid var(--gray-200);color:var(--text);box-shadow:var(--shadow);align-self:stretch}
|
| 208 |
.msg.user .msg-who{font-size:9px;color:var(--text3);text-align:right;margin-bottom:2px;font-family:'DM Mono',monospace}
|
| 209 |
.msg.agent .msg-who{font-size:9px;margin-bottom:3px;font-family:'DM Mono',monospace;font-weight:500}
|
| 210 |
+
.msg-text{user-select:text;cursor:text;word-break:break-word;overflow-wrap:anywhere;white-space:normal}
|
| 211 |
.msg-model{font-size:8px;color:var(--text3);margin-top:4px;font-family:'DM Mono',monospace}
|
| 212 |
.msg-imgs{display:flex;gap:6px;flex-wrap:wrap;margin-top:8px;padding:6px;background:var(--gray-50);border-radius:6px;border:1px solid var(--gray-200)}
|
| 213 |
.chat-typing{padding:2px 12px 0;font-size:10px;color:var(--text3);height:16px;font-style:italic;font-family:'IBM Plex Sans',sans-serif;flex-shrink:0}
|
|
|
|
| 334 |
<div class="tab" onclick="switchTab('archive')">Archive</div>
|
| 335 |
</div>
|
| 336 |
|
| 337 |
+
<div class="pane on" id="pane-results" style="overflow-y:auto">
|
| 338 |
<div class="results-wrap" id="results-wrap">
|
| 339 |
<div class="r-empty">Launch a mission to see results.</div>
|
| 340 |
</div>
|
|
|
|
| 344 |
</div>
|
| 345 |
</div>
|
| 346 |
|
| 347 |
+
<div class="pane" id="pane-chat">
|
| 348 |
<div class="chat-col">
|
| 349 |
<div class="chat-chips" id="chat-chips"></div>
|
| 350 |
<div class="chat-hdr">
|
|
|
|
| 716 |
const r=await fetch('/api/chat',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({agent:chatAgent,message:msg,session_id:chatAgent})});
|
| 717 |
const d=await r.json();
|
| 718 |
if(d.error) throw new Error(d.error);
|
| 719 |
+
// Main agent response
|
| 720 |
const imgs=d.img_base&&d.img_count>0?{base:d.img_base,count:d.img_count}:null;
|
| 721 |
chatHist[chatAgent].push({role:'agent',text:d.response,model:d.model,turn:d.turn,imgs});
|
| 722 |
+
// If manager delegated β show each sub-agent as separate message
|
| 723 |
+
if(d.delegate_result&&d.delegate_result.sub_results){
|
| 724 |
+
Object.entries(d.delegate_result.sub_results).forEach(([key,r])=>{
|
| 725 |
+
if(!r||r.status==='idle') return;
|
| 726 |
+
const sc=AC[key]||'#2563eb';
|
| 727 |
+
const sn=agents.find(a=>a.key===key)?.name||key;
|
| 728 |
+
const si=(key==='image_agent'&&r.img_base&&r.img_count>0)?{base:r.img_base,count:r.img_count}:null;
|
| 729 |
+
chatHist[chatAgent].push({role:'agent',agentKey:key,agentName:sn,agentColor:sc,
|
| 730 |
+
text:r.message||'Done.',model:r.model||'',doc_file:r.doc_file||null,imgs:si,collab:true});
|
| 731 |
+
});
|
| 732 |
+
}
|
| 733 |
showBubble(chatAgent,d.response.substring(0,50)+(d.response.length>50?'β¦':''),3000);
|
| 734 |
updateChatHdr();
|
| 735 |
}catch(e){
|