vfven commited on
Commit
da58733
Β·
verified Β·
1 Parent(s): 1462674

Update templates/index.html

Browse files
Files changed (1) hide show
  1. 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;overflow:hidden}
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-y:auto;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,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;height:100%;min-height:0;flex:1;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,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);align-items:stretch}
205
- .msg{padding:9px 11px;border-radius:8px;font-size:11px;line-height:1.6;width:100%;max-width:100%;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:85%;width:fit-content}
207
- .msg.agent{background:var(--white);border:1px solid var(--gray-200);color:var(--text);box-shadow:var(--shadow);width:100%}
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:pre-wrap}
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" style="height:100%">
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){