house-lights 1.9.2 → 1.9.3
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.
|
@@ -98,17 +98,17 @@ body { margin: 0; }
|
|
|
98
98
|
<body>
|
|
99
99
|
<div class="cl" id="app"></div>
|
|
100
100
|
<script type="application/json" id="cast">{{CAST}}</script>
|
|
101
|
-
<script>(()=>{var
|
|
101
|
+
<script>(()=>{var P=[{id:"orchestrator-variables",name:"Orchestrator-Generated Variables",sign:"an OnRecognizedIntent topic with an AutomaticTaskInput that has shouldPromptUser: false"},{id:"rai-error-handling",name:"RAI Error Handling",sign:"the OnError topic reads System.Error.SubCode"},{id:"knowledge-hold-message",name:"Knowledge Hold Message",sign:"an OnKnowledgeRequested topic that sends a message"},{id:"prevent-tool-call-leaks",name:"Prevent Tool Call Leaks",sign:"an OnGeneratedResponse topic that sets System.ContinueResponse"},{id:"dynamic-topic-redirect",name:"Dynamic Topic Redirect",sign:"a BeginDialog whose dialog is a =Switch( expression"},{id:"channel-aware-behavior",name:"Channel-Aware Behavior",sign:"a condition or SetVariable that reads System.Activity.ChannelId (not a tool input)"},{id:"date-context",name:"Date Context",sign:"the instructions use Today() or Now()"},{id:"line-breaks-in-messages",name:"Line Breaks in Messages",sign:"<br /> inside a SendActivity or Question"},{id:"conversation-history-variable",name:"Conversation History Variable"},{id:"chain-of-thought-logging",name:"Chain of Thought Logging"},{id:"deterministic-mcp-calls",name:"Deterministic MCP Calls"},{id:"prevent-child-agent-responses",name:"Prevent Child Agent Responses"},{id:"jit-glossary",name:"JIT Glossary"},{id:"jit-user-context",name:"JIT User Context"},{id:"teams-production-hardening",name:"Teams Production Hardening"}];var te=Object.fromEntries(P.map(e=>[e.id,e.name]));function L(e){let t=e.length>1?e.reduce((a,l)=>{let d=0;for(;d<a.length&&a[d]===l[d];)d++;return a.slice(0,d)}):"",c=/[-–·:]\s*$/.test(t)?t:"";return a=>c&&a.startsWith(c)&&a.length>c.length?a.slice(c.length):a}var G={en:{title:"Stage",sub:"The cast on stage: who talks to whom, the traffic each one gets, the patterns as lenses, and a follow spot that walks a call.",privacy:"This file holds the client\u2019s data: keep it in the client\u2019s environment.",client:"Customer",lenses:"Lenses \u2014 light a pattern",lensHint:"Pick a lens: who follows the pattern lights green, who is off blinks red.",scenes:"Follow spot \u2014 walk a call",narrIdle:"Pick a call under \xABFollow spot\xBB to walk it step by step here.",actor:"Actor",actorHint:"Click someone on stage.",resume:"See the r\xE9sum\xE9 \u2192",map:"\u2190 Map",vol:(e,t)=>`${e.toLocaleString("en")} topic starts / ${t} days`,silent:"no telemetry",noTraffic:"The traffic shows with the export of Application Insights (--telemetry).",legend:["traffic (topic starts of who receives it)","off a pattern","to decide","not in the folder / unused"],structure:"Inner arrows (flows, systems) are structure, not measured traffic.",step:(e,t)=>`step ${e}/${t}`,keys:"\u2190 \u2192 to move \xB7 space plays all \xB7 Esc leaves",orchestrator:"Orchestrator",specialist:"Specialist",fingerprint:"Fingerprint of its instructions",foot:"cast-list \xB7 no model: what is here is what the files and tables say."},pt:{title:"Palco",sub:"O elenco no palco: quem fala com quem, o tr\xE1fego de cada um, os padr\xF5es como lentes, e um canh\xE3o que segue uma chamada.",privacy:"Este arquivo tem dados do cliente: deixe-o no ambiente dele.",client:"Cliente",lenses:"Lentes \u2014 acenda um padr\xE3o",lensHint:"Escolha uma lente: quem segue o padr\xE3o acende em verde, quem foge pisca em vermelho.",scenes:"Canh\xE3o seguidor \u2014 siga uma chamada",narrIdle:"Escolha uma chamada em \xABCanh\xE3o seguidor\xBB para segui-la passo a passo aqui.",actor:"Ator",actorHint:"Clique em algu\xE9m no palco.",resume:"Ver curr\xEDculo \u2192",map:"\u2190 Mapa",vol:(e,t)=>`${e.toLocaleString("pt-BR")} in\xEDcios de t\xF3pico / ${t} dias`,silent:"sem telemetria",noTraffic:"O tr\xE1fego aparece com a exporta\xE7\xE3o do Application Insights (--telemetry).",legend:["tr\xE1fego (in\xEDcios de t\xF3pico de quem recebe)","fora do padr\xE3o","a decidir","fora da pasta / sem uso"],structure:"As setas internas (fluxos, sistemas) s\xE3o estrutura, n\xE3o tr\xE1fego medido.",step:(e,t)=>`passo ${e}/${t}`,keys:"\u2190 \u2192 avan\xE7am e voltam \xB7 espa\xE7o toca tudo \xB7 Esc sai",orchestrator:"Orquestrador",specialist:"Especialista",fingerprint:"Impress\xE3o digital das instru\xE7\xF5es",foot:"cast-list \xB7 sem modelo: o que est\xE1 aqui \xE9 o que os arquivos e as planilhas dizem."}},x=JSON.parse(document.getElementById("cast").textContent),{stage:r,lang:g}=x,i=G[g];document.documentElement.lang=g==="pt"?"pt-BR":"en";document.title=`${i.title} \xB7 ${r.name??x.id}`;var n=e=>String(e??"").replace(/[&<>"']/g,t=>({"&":"&","<":"<",">":">",'"':""","'":"'"})[t]),S=document.getElementById("app"),_=matchMedia("(prefers-reduced-motion: reduce)").matches,u=168,b=48,C=5.6,B=e=>r.nodes.some(t=>e.x<t.x+u/2&&e.x+e.w>t.x-u/2&&e.y>t.y-b/2-2&&e.y-11<t.y+b/2+2),y=e=>r.nodes.find(t=>t.id===e),A=e=>e.kind==="orchestrator"||e.kind==="specialist",w,p,f=0,R,E;function j(e){let t=y(e.from),c=y(e.to),a=c.x>=t.x,l=t.x+(a?u/2:-u/2),d=c.x+(a?-u/2:u/2),s=(l+d)/2;return{d:`M${l},${t.y} C${s},${t.y} ${s},${c.y} ${d},${c.y}`,mx:s,my:(t.y+c.y)/2,x2:d,y2:c.y}}var H=e=>e.kind==="client"?i.client:e.labels?.[g]??e.label,q=(e,t=24)=>e.length>t?`${e.slice(0,t-1)}\u2026`:e,K=r.nodes.filter(A),V=L([...K,...r.nodes.filter(e=>e.kind==="ghost")].map(e=>e.label)),U=e=>A(e)||e.kind==="ghost"?V(e.label):H(e);function z(){let e=r.lenses.find(o=>o.id===w),t=e?new Set([...e.ok,...e.amber,...e.bad]):void 0,c=o=>{let h=["pl-node",o.kind,o.unused?"unused":""];return e&&h.push(e.bad.includes(o.id)?"l-bad":e.amber.includes(o.id)?"l-amber":e.ok.includes(o.id)?"l-ok":""),p&&p.steps[f]?.node===o.id&&p.steps[f].warn&&h.push("warn"),h.filter(Boolean).join(" ")},a=r.groups.map(o=>`<rect class="pl-band" x="${y(r.nodes.find(h=>h.kind==="specialist").id).x-u/2-18}" y="${o.y1}" width="${u+36}" height="${o.y2-o.y1}" rx="12"/><text class="pl-group" x="${y(r.nodes.find(h=>h.kind==="specialist").id).x-u/2-10}" y="${o.y1-6}">${n(o.label)}</text>`).join(""),l=r.edges.map((o,h)=>{let m=j(o),N=o.tone??"",I=o.kind==="traffic"&&y(o.to).kind!=="ghost",$=o.label?q(o.label[g],I?56:40):"",D=I?{x:m.x2-10-$.length*C,y:m.y2-9,w:$.length*C}:{x:m.mx-$.length*C/2,y:m.my-6,w:$.length*C},W=t&&!t.has(o.from)&&!t.has(o.to),F=$&&!W&&!B(D)?I?`<text class="pl-elabel ${N}" x="${m.x2-10}" y="${m.y2-9}" text-anchor="end">${n($)}</text>`:`<text class="pl-elabel ${N}" x="${m.mx}" y="${m.my-6}" text-anchor="middle">${n($)}</text>`:"";return`<path id="e${h}" class="pl-edge ${o.kind} ${N} ${o.dashed?"dashed":""}" d="${m.d}"/>${F}`}).join(""),d=r.nodes.map(o=>{let h=A(o)&&r.hasTelemetry?`<text class="pl-vol ${o.silent?"silent":""}" x="${u/2}" y="${b+14}" text-anchor="middle">${n(o.silent?i.silent:o.volume!==void 0?i.vol(o.volume,r.days??0):"")}</text>`:"",m=A(o)?` tabindex="0" role="button" aria-label="${n(o.label)}"`:"";return`<g class="${c(o)}" data-node="${n(o.id)}" transform="translate(${o.x-u/2},${o.y-b/2})"${m}>${h}<rect width="${u}" height="${b}" rx="${o.kind==="client"?b/2:10}"/><text x="${u/2}" y="21" text-anchor="middle">${n(q(U(o),o.kind==="ghost"?30:22))}</text><text class="pl-sub" x="${u/2}" y="37" text-anchor="middle">${n(q(o.sub[g],30))}</text></g>`}).join(""),s=p?.steps[f],v=s?y(s.node):void 0;return`<svg class="pl-svg ${e?"lensing":""}" viewBox="0 0 ${r.width} ${r.height}" role="img" aria-label="${n(i.title)}">
|
|
102
102
|
<defs><radialGradient id="pl-spot" r="0.5"><stop offset="0" stop-color="#000"/><stop offset="0.6" stop-color="#000"/><stop offset="1" stop-color="#000" stop-opacity="0"/></radialGradient>
|
|
103
|
-
<mask id="pl-mask"><rect width="${
|
|
104
|
-
<g>${
|
|
105
|
-
<rect class="pl-dark" width="${
|
|
106
|
-
</svg>`}function
|
|
107
|
-
${
|
|
108
|
-
<ul class="pl-checks">${
|
|
109
|
-
${
|
|
110
|
-
<div class="pl-wrap"><div class="pl-stage">${
|
|
111
|
-
<p class="pl-foot">${
|
|
103
|
+
<mask id="pl-mask"><rect width="${r.width}" height="${r.height}" fill="#fff"/>${v?`<ellipse cx="${v.x}" cy="${v.y}" rx="${u/2+34}" ry="${b/2+30}" fill="url(#pl-spot)"/>`:""}</mask></defs>
|
|
104
|
+
<g>${a}</g><g>${l}</g><g id="pl-parts"></g><g>${d}</g>
|
|
105
|
+
<rect class="pl-dark" width="${r.width}" height="${r.height}" mask="url(#pl-mask)" opacity="${p?.72:0}"/>
|
|
106
|
+
</svg>`}function J(){let e=r.lenses.find(s=>s.id===w),t=`<section class="pl-box"><h2>${n(i.lenses)}</h2><div class="pl-chips">${r.lenses.map(s=>`<button data-lens="${n(s.id)}" aria-pressed="${s.id===w}">${n(q(s.name[g],28))}</button>`).join("")}</div><p class="pl-cap">${e?n(e.caption[g]):`<span class="pl-note">${n(i.lensHint)}</span>`}</p></section>`,c=r.scenes.length?`<section class="pl-box"><h2>${n(i.scenes)}</h2><div class="pl-scenes">${r.scenes.map(s=>`<button data-scene="${n(s.id)}" aria-pressed="${s.id===p?.id}">\u25B6 ${n(s.title[g])}</button>`).join("")}</div></section>`:"",a=r.actors.find(s=>s.id===R),l=a?`<section class="pl-box pl-card" aria-live="polite"><h2>${n(i.actor)}</h2><p class="pl-name">${n(a.name)}</p><p class="pl-role">${n(a.role==="orchestrator"?i.orchestrator:i.specialist)}${a.types.length?` \xB7 ${n(a.types.join(" \xB7 "))}`:""}${r.hasTelemetry?` \xB7 ${n(a.silent?i.silent:a.volume!==void 0?i.vol(a.volume,r.days??0):"")}`:""}</p>
|
|
107
|
+
${a.fingerprint.length?`<p class="pl-note">${n(i.fingerprint)}</p><div class="pl-dna">${a.fingerprint.map(s=>`<span class="${s.kind}" style="flex:${s.size}" title="${n(s.label??"")}"></span>`).join("")}</div>`:""}
|
|
108
|
+
<ul class="pl-checks">${a.checks.map(s=>`<li class="${s.state}">${n(s[g])}</li>`).join("")}${a.access.map(s=>`<li class="decide">${n(s[g])}</li>`).join("")}</ul>
|
|
109
|
+
${x.playbill?`<p class="pl-note" style="margin-top:8px"><a href="${n(x.playbill)}#${encodeURIComponent(a.id)}">${n(i.resume)}</a></p>`:""}</section>`:`<section class="pl-box pl-card"><h2>${n(i.actor)}</h2><p class="pl-note">${n(i.actorHint)}</p></section>`,d=`<section class="pl-box"><div class="pl-legend">${[["var(--beam)",i.legend[0]],["var(--bad)",i.legend[1]],["var(--amber)",i.legend[2]],["var(--ghost)",i.legend[3]]].map(([s,v])=>`<span><i class="pl-dot" style="background:${s}"></i>${n(v)}</span>`).join("")}</div><p class="pl-note" style="margin-top:8px">${n(r.hasTelemetry?i.structure:i.noTraffic)}</p></section>`;return t+c+l+d}function Q(){let e=p?.steps[f];return!p||!e?`<div class="pl-narr idle"><span class="pl-note">${n(i.narrIdle)}</span></div>`:`<div class="pl-narr ${e.warn?"warn":""}" role="status"><span class="pl-step">${n(i.step(f+1,p.steps.length))}</span>${n(e.text[g])}${e.quote?`<q class="pb-quote">${n(e.quote)}</q>`:""}<span class="pl-keys">${n(i.keys)}</span></div>`}function T(){S.innerHTML=`<header class="pl-head">${x.map?`<p><a href="${n(x.map)}">${n(i.map)}</a></p>`:""}<h1>${n(i.title)} \xB7 <span>${n(r.name??x.id)}</span></h1><p>${n(i.sub)}</p><p class="pl-private">${n(i.privacy)}</p></header>
|
|
110
|
+
<div class="pl-wrap"><div class="pl-stage">${z()}${Q()}</div><aside class="pl-panel">${J()}</aside></div>
|
|
111
|
+
<p class="pl-foot">${n(i.foot)}</p>`,Y()}var O;function Y(){O&&cancelAnimationFrame(O);let e=S.querySelector("#pl-parts");if(!e||!r.hasTelemetry)return;let t=[];r.edges.forEach((l,d)=>{let s=S.querySelector(`#e${d}`);if(!s||l.dashed)return;let v=l.kind==="traffic"?l.volume?Math.max(1,Math.min(8,Math.round(Math.log10(l.volume+1)*2.2))):0:1,o=s.getTotalLength();for(let h=0;h<v;h++){let m=document.createElementNS("http://www.w3.org/2000/svg","circle");m.setAttribute("r",l.kind==="traffic"?"3":"2.2"),m.setAttribute("class",`pl-part ${l.kind}`),e.appendChild(m),t.push({el:m,path:s,len:o,phase:h/v,speed:l.kind==="traffic"?11e-5:6e-5})}});let c=l=>{for(let d of t){let s=d.path.getPointAtLength(((d.phase+l*d.speed)%1+1)%1*d.len);d.el.setAttribute("cx",s.x.toFixed(1)),d.el.setAttribute("cy",s.y.toFixed(1))}};if(_)return c(0);let a=l=>{c(l),O=requestAnimationFrame(a)};O=requestAnimationFrame(a)}function k(){E&&clearInterval(E),E=void 0}function M(e){p&&(f=Math.max(0,Math.min(p.steps.length-1,e)),T())}S.addEventListener("click",e=>{let t=e.target,c=t.closest("button"),a=t.closest("[data-node]");if(c?.dataset.lens)w=w===c.dataset.lens?void 0:c.dataset.lens,w&&(k(),p=void 0);else if(c?.dataset.scene)k(),p=p?.id===c.dataset.scene?void 0:r.scenes.find(l=>l.id===c.dataset.scene),f=0,p&&(w=void 0);else if(a&&r.actors.some(l=>l.id===a.dataset.node))R=a.dataset.node;else return;T()});S.addEventListener("keydown",e=>{let t=e.target.closest?.("[data-node]");t&&(e.key==="Enter"||e.key===" ")&&r.actors.some(c=>c.id===t.dataset.node)&&(e.preventDefault(),R=t.dataset.node,T(),S.querySelector(`[data-node="${CSS.escape(R)}"]`)?.focus())});document.addEventListener("keydown",e=>{if(p)if(e.key==="ArrowRight")M(f+1);else if(e.key==="ArrowLeft")M(f-1);else if(e.key==="Escape")k(),p=void 0,T();else if(e.key===" "&&!e.target.closest?.("[data-node]"))e.preventDefault(),k(),E=window.setInterval(()=>p&&f<p.steps.length-1?M(f+1):k(),1800);else return});T();})();
|
|
112
112
|
</script>
|
|
113
113
|
</body>
|
|
114
114
|
</html>
|