@huynle/hub 0.8.1 → 0.8.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.
- package/CHANGELOG.md +193 -0
- package/README.md +32 -1
- package/package.json +1 -1
- package/packages/claude-code/package.json +1 -1
- package/packages/cli/dist/hub-cli.js +116 -53
- package/packages/cli/package.json +1 -1
- package/packages/cli/src/artifact-jobs-mcp.ts +10 -9
- package/packages/cli/src/artifacts-mcp.ts +8 -7
- package/packages/cli/src/mcp.ts +4 -3
- package/packages/cli/src/profiles-mcp.ts +3 -3
- package/packages/cli/src/team-intake-mcp.ts +8 -7
- package/packages/cli/src/teams-mcp.ts +2 -1
- package/packages/cli/src/tool-args.ts +6 -0
- package/packages/cli/src/watchlist.ts +5 -4
- package/packages/codex/package.json +1 -1
- package/packages/node/package.json +1 -1
- package/packages/preset/package.json +1 -1
- package/packages/protocol/package.json +1 -1
- package/packages/protocol/src/concierge.ts +4 -1
- package/packages/protocol/src/embedded-media.ts +59 -0
- package/packages/protocol/src/index.ts +92 -7
- package/packages/protocol/src/voice-recording.ts +107 -0
- package/packages/protocol/src/wire.ts +1 -0
- package/packages/runtime-openshell/package.json +1 -1
- package/packages/runtime-sdk/package.json +1 -1
- package/packages/sdk/package.json +1 -1
- package/packages/sdk/src/client.ts +3 -1
- package/packages/spoke-sdk/package.json +1 -1
- package/packages/spoke-sdk/src/connection.ts +13 -1
- package/src/central/agent/acting-routes.ts +3 -2
- package/src/central/agent/acting.ts +67 -12
- package/src/central/agent/delivery.ts +12 -3
- package/src/central/agent/escalation.ts +30 -9
- package/src/central/agent/launch-spec.ts +38 -19
- package/src/central/agent/routes.ts +14 -1
- package/src/central/artifacts/blob-store.ts +6 -1
- package/src/central/artifacts/blob-support.ts +3 -1
- package/src/central/concierge/board-render.ts +34 -11
- package/src/central/concierge/context.ts +3 -1
- package/src/central/concierge/index.ts +1 -1
- package/src/central/concierge/notifier.ts +2 -1
- package/src/central/concierge/prompt.ts +7 -4
- package/src/central/config.ts +4 -0
- package/src/central/csp.ts +55 -0
- package/src/central/http.ts +134 -29
- package/src/central/profiles/content.ts +16 -0
- package/src/central/recording/clock.ts +76 -0
- package/src/central/recording/concierge-taps.ts +104 -0
- package/src/central/recording/export.ts +215 -0
- package/src/central/recording/index.ts +658 -0
- package/src/central/recording/ingest.ts +209 -0
- package/src/central/recording/retention.ts +71 -0
- package/src/central/recording/routes.ts +281 -0
- package/src/central/recording/schema.ts +232 -0
- package/src/central/recording/settings.ts +35 -0
- package/src/central/recording/store.ts +316 -0
- package/src/central/recording/taps.ts +105 -0
- package/src/central/recording/zip.ts +138 -0
- package/src/central/registry.ts +91 -6
- package/src/central/revert-windows.ts +66 -0
- package/src/central/spoke-ws.ts +8 -3
- package/src/central/teams/staffing.ts +2 -2
- package/src/index.ts +26 -14
- package/src/spoke/deliver.ts +6 -0
- package/src/spoke/fork-revert.ts +94 -9
- package/src/spoke/hub-tool.ts +2 -2
- package/src/spoke/locations.ts +80 -0
- package/src/spoke/profile-apply.ts +24 -14
- package/src/spoke/session-context.ts +96 -6
- package/src/spoke/spoke.ts +119 -36
- package/src/spoke/timeline.ts +30 -3
- package/src/spoke/tracker.ts +23 -2
- package/src/status.ts +33 -6
- package/web/dist/assets/{ArtifactPage-mNzjlP_U.js → ArtifactPage-CSotAWob.js} +1 -1
- package/web/dist/assets/{ArtifactPane-CPQcuX7c.js → ArtifactPane-DPHjiWce.js} +1 -1
- package/web/dist/assets/{ArtifactWorkbench-NoFC5Sb2.js → ArtifactWorkbench-CkmWnP6L.js} +1 -1
- package/web/dist/assets/{Library-LXHsP5Fw.js → Library-DTLEyekn.js} +2 -2
- package/web/dist/assets/ProfilesDestination-GriuOpiZ.js +1 -0
- package/web/dist/assets/{TeamsPage-DBrO5hoL.js → TeamsPage-C-5lYeeM.js} +1 -1
- package/web/dist/assets/Watchtower-DOlPsiIy.js +2 -0
- package/web/dist/assets/index-6mdQ7eUY.js +34 -0
- package/web/dist/assets/index-C5OmwA1y.css +1 -0
- package/web/dist/assets/{live-BDq0AABg.js → live-CDWcyavI.js} +1 -1
- package/web/dist/assets/{pane-layout-DWXfDU-1.js → pane-layout-Csk-vPNe.js} +1 -1
- package/web/dist/assets/{renderer2d-DAr4IHM8.js → renderer2d-CNFdTDTr.js} +1 -1
- package/web/dist/assets/{renderer3d-DWZj595u.js → renderer3d-C45jPvYX.js} +4 -56
- package/web/dist/assets/renderer3d-Co5yCKMg.css +1 -0
- package/web/dist/assets/{safe-area-JUb6OeI3.js → safe-area-sA9a8vYJ.js} +1 -1
- package/web/dist/assets/{silero-worker-C8-8vLVS.js → silero-worker-DhlIHyD_.js} +1 -1
- package/web/dist/assets/{source-CDU04kYw.js → source-BFLJQ43_.js} +1 -1
- package/web/dist/assets/{ui-Dh1-78Cl.js → ui-Qo2Pd9-O.js} +1 -1
- package/web/dist/index.html +5 -16
- package/web/dist/theme-boot.js +12 -0
- package/web/dist/assets/ProfilesDestination-DhVVcAep.js +0 -1
- package/web/dist/assets/Watchtower-DxaJYQp_.js +0 -2
- package/web/dist/assets/index-BabrNDB3.css +0 -1
- package/web/dist/assets/index-lIOfSYck.js +0 -34
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{At as e,B as t,C as n,Ct as r,Et as i,Ft as a,Ht as o,Lt as s,Mt as c,Nt as l,Pt as u,S as d,dt as f,et as p,ft as m,ht as h,i as g,lt as _,pt as v,t as y,u as b,ut as x,wt as S,y as C,yt as w}from"./ui-Dh1-78Cl.js";import{t as T}from"./plural-Bspvoqfq.js";import{C as E,D,E as O,L as k,R as A,S as j,T as M,_ as N,a as P,b as F,c as I,d as L,f as ee,g as R,h as z,i as B,l as V,m as H,n as U,o as W,p as G,r as K,s as q,u as te,v as J,w as Y,x as ne,y as X}from"./index-lIOfSYck.js";var re=w(`<fieldset class=prof-editor style=border:0;padding:0;margin:0><label>Instructions<textarea rows=6 placeholder="Added after the session's own instructions; local instructions win where they conflict."></textarea></label><label>Preferred model (optional, provider/model)<input type=text placeholder=anthropic/claude-sonnet-4></label><h3>Skills (<!>/<!>)</h3><div><button type=button class="btn small">Add skill</button></div><h3>Commands (<!>/<!>)</h3><p class=prof-note>Templates use <code>{{param}}</code>, <code>{{arguments}}</code> and <code>{{secret:NAME}}</code> (write <code>\\{{</code> for a literal). Secrets are never entered here: the session's machine resolves them.</p><div><button type=button class="btn small">Add command`),ie=w(`<div class=prof-part role=group><div class=prof-part-head><label>Name<input type=text title="2–40 lowercase letters, digits or dashes"></label><label>Description<input type=text></label><button type=button class="btn small danger">Remove</button></div><label>Body<textarea rows=4>`),ae=w(`<div class=prof-part role=group><div class=prof-part-head><label>Name<input type=text title="2–40 lowercase letters, digits or dashes"></label><label>Description<input type=text></label><button type=button class="btn small danger">Remove</button></div><label>Template<textarea rows=3>`),oe=w(`<p class="prof-preview bad">`),se=w(`<p class=prof-preview>`);function Z(t){let n=e=>t.onChange({...t.draft,...e}),r=(e,r)=>n({skills:t.draft.skills.map((t,n)=>n===e?{...t,...r}:t)}),a=(e,r)=>n({commands:t.draft.commands.map((t,n)=>n===e?{...t,...r}:t)});return(()=>{var o=re(),s=o.firstChild,c=s.firstChild.nextSibling,l=s.nextSibling,d=l.firstChild.nextSibling,f=l.nextSibling,p=f.firstChild.nextSibling,g=p.nextSibling.nextSibling;g.nextSibling;var _=f.nextSibling,y=_.firstChild,b=_.nextSibling,x=b.firstChild.nextSibling,C=x.nextSibling.nextSibling;C.nextSibling;var w=b.nextSibling.nextSibling,T=w.firstChild;return c.$$input=e=>n({instructions:e.currentTarget.value}),d.$$input=e=>n({model:e.currentTarget.value}),m(f,()=>t.draft.skills.length,p),m(f,()=>D.skillsPerProfile,g),m(o,e(S,{get each(){return t.draft.skills},children:(e,i)=>(()=>{var a=ie(),o=a.firstChild,s=o.firstChild,c=s.firstChild.nextSibling,l=s.nextSibling,d=l.firstChild.nextSibling,f=l.nextSibling,p=o.nextSibling.firstChild.nextSibling;return h(a,`aria-label`,`Skill ${i+1}`),c.$$input=e=>r(i,{name:e.currentTarget.value}),d.$$input=e=>r(i,{description:e.currentTarget.value}),f.$$click=()=>n({skills:t.draft.skills.filter((e,t)=>t!==i)}),p.$$input=e=>r(i,{body:e.currentTarget.value}),u(t=>{var n=`Remove skill ${e().name||i+1}`,r=D.skillChars;return n!==t.e&&h(f,`aria-label`,t.e=n),r!==t.t&&h(p,`maxlength`,t.t=r),t},{e:void 0,t:void 0}),u(()=>c.value=e().name),u(()=>d.value=e().description),u(()=>p.value=e().body),a})()}),_),y.$$click=()=>n({skills:[...t.draft.skills,{name:``,description:``,body:``}]}),m(b,()=>t.draft.commands.length,x),m(b,()=>D.commandsPerProfile,C),m(o,e(S,{get each(){return t.draft.commands},children:(r,o)=>{let s=()=>H(r().template);return(()=>{var c=ae(),l=c.firstChild,d=l.firstChild,f=d.firstChild.nextSibling,p=d.nextSibling,g=p.firstChild.nextSibling,_=p.nextSibling,y=l.nextSibling.firstChild.nextSibling;return h(c,`aria-label`,`Command ${o+1}`),f.$$input=e=>a(o,{name:e.currentTarget.value}),g.$$input=e=>a(o,{description:e.currentTarget.value}),_.$$click=()=>n({commands:t.draft.commands.filter((e,t)=>t!==o)}),y.$$input=e=>a(o,{template:e.currentTarget.value}),m(c,e(i,{get when(){return r().template.trim()},get children(){return(()=>{let e=s();return`error`in e?(()=>{var t=oe();return m(t,()=>e.error),t})():(()=>{var t=se();return m(t,(()=>{var t=v(()=>!!e.params.length);return()=>t()?`Asks for: ${e.params.join(`, `)}`:`No parameters`})(),null),m(t,(()=>{var t=v(()=>!!e.secrets.length);return()=>t()?` · Secrets (names only): ${e.secrets.join(`, `)}`:``})(),null),t})()})()}}),null),u(e=>{var t=`Remove command ${r().name||o+1}`,n=D.commandChars;return t!==e.e&&h(_,`aria-label`,e.e=t),n!==e.t&&h(y,`maxlength`,e.t=n),e},{e:void 0,t:void 0}),u(()=>f.value=r().name),u(()=>g.value=r().description),u(()=>y.value=r().template),c})()}}),w),T.$$click=()=>n({commands:[...t.draft.commands,{name:``,description:``,template:``}]}),u(e=>{var n=t.disabled,r=D.instructionsChars,i=t.draft.skills.length>=D.skillsPerProfile,a=t.draft.commands.length>=D.commandsPerProfile;return n!==e.e&&(o.disabled=e.e=n),r!==e.t&&h(c,`maxlength`,e.t=r),i!==e.a&&(y.disabled=e.a=i),a!==e.o&&(T.disabled=e.o=a),e},{e:void 0,t:void 0,a:void 0,o:void 0}),u(()=>c.value=t.draft.instructions),u(()=>d.value=t.draft.model),o})()}f([`input`,`click`]);var ce=w(`<select aria-label=Tag><option value>Any tag`),le=w(`<select aria-label=Project><option value>Any project`),ue=w(`<select aria-label=Team><option value>Any team`),de=w(`<select aria-label=Harness><option value>Any harness`),fe=w(`<ul class=prof-items>`),pe=w(`<div class=prof-page><header class=topbar><h1 class=title>Agent profiles</h1><span style=flex:1></span><button type=button class="btn small primary">New profile</button></header><div><nav class=prof-list aria-label=Profiles><div class=prof-filter role=group aria-label=Show><button type=button class="btn small">Active</button><button type=button class="btn small">Archived</button></div><div class=prof-filters role=group aria-label="Filter and sort"><select aria-label=Usage><option value>Used or not</option><option value=used>Used</option><option value=unused>Unused</option></select><select aria-label=Sort><option value=name>Sort: name</option><option value=updated>Sort: recently updated</option><option value=usage>Sort: most used</option></select></div></nav><section class=prof-detail aria-label=Profile>`),Q=w(`<option>`),$=w(`<p class="error small"role=alert>`),me=w(`<p class="muted small">Loading…`),he=w(`<p class="muted small">`),ge=w(`<p class="muted small">No profile matches these filters.`),_e=w(`<div class=prof-intro><h2>Shared agent profiles</h2><p class=prof-note>Versioned instructions, skills and commands you can pin to any session from its top bar. Saving creates a new version; running sessions keep the version they are pinned to until you upgrade each one.`),ve=w(`<span class=prof-desc>`),ye=w(`<span class=prof-chips>`),be=w(`<li><a class=prof-item><strong></strong><span class=prof-sub> · v`),xe=w(`<span class=prof-tag>`),Se=w(`<span>`),Ce=w(`<form class=prof-editor novalidate><label>Name (2–40 lowercase letters, digits or dashes; can't change later)<input type=text autofocus></label><label>Title<input type=text></label><label>Description (optional)<input type=text></label><label>Tags (comma separated, optional)<input type=text></label><div class=row><button type=submit class="btn small primary">Create v1</button><button type=button class="btn small">Cancel`),we=w(`<div><a class="btn small prof-back"href=/profiles>← Profiles`),Te=w(`<p class=error role=alert>`),Ee=w(`<p class=muted>Loading…`),De=w(`<span class="prof-tag archived">archived`),Oe=w(`<div class=prof-head><h2></h2><span class=prof-tag></span><span class=prof-tag>v</span><span style=flex:1></span><button type=button class="btn small">`),ke=w(`<p class=prof-note>`),Ae=w(`<div class=prof-tabs role=tablist aria-label="Profile views"><button type=button role=tab class="btn small">Edit</button><button type=button role=tab class="btn small">History</button><button type=button role=tab class="btn small">Used by`),je=w(`<div class=row style=margin-top:10px><button type=button class="btn small primary">Save as v</button><button type=button class="btn small">Discard changes`),Me=w(`<p class=prof-note>Versions are immutable. Restoring copies an old version into a new one; nothing is rewritten.`),Ne=w(`<ul class=prof-history aria-label=Versions>`),Pe=w(`<span class=prof-tag>latest`),Fe=w(`<button type=button class="btn small">Restore as v`),Ie=w(`<pre>`),Le=w(`<li><strong>v</strong><span class="muted small"></span><span class=mono></span><span style=flex:1></span><button type=button class="btn small">View`),Re=w(`<form class=prof-editor aria-label="Edit details"novalidate><p class=prof-note>Optional details for people browsing the library (no secrets): up to 32 keys (lowercase letters, digits, dashes) and 16 projects. Versions don't change.</p><div class=row><button type=button class="btn small">Add detail</button></div><label>Projects (comma separated)<input type=text></label><div class=row><button type=submit class="btn small primary">Save details</button><button type=button class="btn small">Cancel`),ze=w(`<section class=prof-details aria-label=Details>`),Be=w(`<dt>Tags`),Ve=w(`<dd>`),He=w(`<dl class=prof-facts><dt>Latest</dt><dd>v</dd><dt>Updated</dt><dd></dd><dt>Projects</dt><dd>`),Ue=w(`<button type=button class="btn small">Edit details`),We=w(`<span class=muted>none`),Ge=w(`<dt>`),Ke=w(`<div class=prof-meta-row role=group><input type=text aria-label=Key placeholder="key (e.g. owner)"><input type=text aria-label=Value placeholder=value>`),qe=w(`<section class=prof-usage aria-label="Used by">`),Je=w(`<p class=prof-note> Upgrading a session is always explicit; a new version never reaches a running session by itself.`),Ye=w(`<h3>Sessions`),Xe=w(`<ul class=prof-uses aria-label="Pinned sessions">`),Ze=w(`<button type=button class="btn small">More sessions`),Qe=w(`<h3>Team roles`),$e=w(`<ul class=prof-uses aria-label="Team roles">`),et=w(`<h3>Launches`),tt=w(`<ul class=prof-uses aria-label=Launches>`),nt=w(`<h3>Workspaces and projects`),rt=w(`<ul class=prof-uses aria-label=Workspaces>`),it=w(`<p class=prof-note>Projects: `),at=w(`<p class=prof-note>Hidden for this sign-in: <!>.`),ot=w(`<p class=prof-note>Only part of the <!> is listed; the counts are complete.`),st=w(`<p class="muted small">No session pins this profile.`),ct=w(`<span class=prof-tag>running v`),lt=w(`<span class="prof-use older">older`),ut=w(`<a class="btn small">Open session`),dt=w(`<button type=button class="btn small primary">Upgrade to v`),ft=w(`<li><span></span><strong></strong><span class=prof-tag>v</span><span class="muted small"></span><span style=flex:1>`),pt=w(`<p class="muted small">No team role names this profile.`),mt=w(`<span class="muted small">`),ht=w(`<li><a></a><span>role <strong></strong></span><span class=prof-tag>`),gt=w(`<p class="muted small">No retained launch named this profile.`),_t=w(`<li><span class=mono></span><span class=prof-tag></span><span class=prof-tag>v</span><span class="muted small">`),vt=w(`<p class="muted small">The pinned sessions are in no workspace or project.`),yt=w(`<li><strong></strong><span class="muted small">`),bt=e=>e?`/profiles?id=${encodeURIComponent(e)}`:`/profiles`,xt=()=>t.some(e=>e.route===`/teams`);function St(t){let[o,c]=s(`active`),[d,f]=s(!1),[p,{refetch:v}]=a(o,e=>W(e).then(e=>e.items)),[y,b]=s({}),[S,C]=s(`name`),w=l(()=>ne(p()??[])),T=l(()=>Y(F(p()??[],y()),S())),D=e=>t=>b({...y(),[e]:t.currentTarget.value||void 0});return(()=>{var a=pe(),s=a.firstChild,l=s.firstChild,b=l.nextSibling.nextSibling,O=s.nextSibling,j=O.firstChild,M=j.firstChild,N=M.firstChild,P=N.nextSibling,F=M.nextSibling,I=F.firstChild,L=I.nextSibling,ee=j.nextSibling;return m(s,e(i,{get when(){return k()},get children(){return e(g,{icon:`menu`,label:`Open sidebar`,onClick:A})}}),l),b.$$click=()=>f(!0),N.$$click=()=>c(`active`),P.$$click=()=>c(`archived`),m(F,e(i,{get when(){return w().tags.length},get children(){var t=ce();return t.firstChild,_(t,`change`,D(`tag`)),m(t,e(r,{get each(){return w().tags},children:e=>(()=>{var t=Q();return t.value=e,m(t,e),t})()}),null),u(()=>t.value=y().tag??``),t}}),I),m(F,e(i,{get when(){return w().projects.length},get children(){var t=le();return t.firstChild,_(t,`change`,D(`project`)),m(t,e(r,{get each(){return w().projects},children:e=>(()=>{var t=Q();return t.value=e,m(t,e),t})()}),null),u(()=>t.value=y().project??``),t}}),I),m(F,e(i,{get when(){return w().teams.length},get children(){var t=ue();return t.firstChild,_(t,`change`,D(`team`)),m(t,e(r,{get each(){return w().teams},children:e=>(()=>{var t=Q();return t.value=e,m(t,e),t})()}),null),u(()=>t.value=y().team??``),t}}),I),m(F,e(i,{get when(){return w().harnesses.length},get children(){var t=de();return t.firstChild,_(t,`change`,D(`harness`)),m(t,e(r,{get each(){return w().harnesses},children:e=>(()=>{var t=Q();return t.value=e,m(t,e),t})()}),null),u(()=>t.value=y().harness??``),t}}),I),_(I,`change`,D(`used`)),L.addEventListener(`change`,e=>C(e.currentTarget.value)),m(j,e(i,{get when(){return!p.error},get fallback(){return(()=>{var e=$();return m(e,()=>E(p.error)),e})()},get children(){return e(i,{get when(){return p()},get fallback(){return me()},get children(){return e(i,{get when(){return p().length},get fallback(){return(()=>{var e=he();return m(e,()=>o()===`active`?`No profiles yet. Create one to share instructions, skills and commands across sessions.`:`No archived profiles.`),e})()},get children(){return e(i,{get when(){return T().length},get fallback(){return ge()},get children(){var n=fe();return m(n,e(r,{get each(){return T()},children:n=>e(Ct,{entry:n,get current(){return n.profile.id===t.id}})})),n}})}})}})}}),null),m(ee,e(i,{get when(){return t.id},keyed:!0,get fallback(){return _e()},children:t=>e(Tt,{id:t,onChanged:()=>void v()})})),m(a,e(i,{get when(){return d()},get children(){return e(wt,{onClose:()=>f(!1),onCreated:e=>{f(!1),c(`active`),v(),n(bt(e.id))}})}}),null),u(e=>{var n=`prof-body${t.id?` has-detail`:``}`,r=o()===`active`,i=o()===`archived`;return n!==e.e&&x(O,e.e=n),r!==e.t&&h(N,`aria-pressed`,e.t=r),i!==e.a&&h(P,`aria-pressed`,e.a=i),e},{e:void 0,t:void 0,a:void 0}),u(()=>I.value=y().used??``),u(()=>L.value=S()),a})()}function Ct(t){let n=()=>t.entry.profile,a=()=>t.entry.summary,o=()=>O(t.entry.usage);return(()=>{var s=be(),c=s.firstChild,l=c.firstChild,d=l.nextSibling,f=d.firstChild;return m(l,()=>n().title),m(c,e(i,{get when(){return n().description},get children(){var e=ve();return m(e,()=>n().description),e}}),d),m(d,()=>n().name,f),m(d,()=>n().latestVersion,null),m(d,e(i,{get when(){return a()},children:e=>` · ${T(e().skills,`skill`)} · ${T(e().commands,`command`)}`}),null),m(d,(()=>{var e=v(()=>!!n().updatedAt);return()=>e()?` · updated ${b(n().updatedAt)}`:``})(),null),m(c,e(i,{get when(){return n().tags.length||o().length},get children(){var t=ye();return m(t,e(r,{get each(){return n().tags},children:e=>(()=>{var t=xe();return m(t,e),t})()}),null),m(t,e(r,{get each(){return o()},children:e=>(()=>{var t=Se();return m(t,e),u(()=>x(t,`prof-use${e===`Unused`?` unused`:/older/.test(e)?` older`:``}`)),t})()}),null),t}}),null),u(e=>{var r=bt(n().id),i=t.current?`page`:void 0,a=`${n().title} (${n().name})`;return r!==e.e&&h(c,`href`,e.e=r),i!==e.t&&h(c,`aria-current`,e.t=i),a!==e.a&&h(c,`aria-label`,e.a=a),e},{e:void 0,t:void 0,a:void 0}),s})()}function wt(t){let[n,r]=s({name:``,title:``,description:``,tags:``}),[a,o]=s(X()),[c,l]=s(``),[d,f]=s(!1),h=q(),g=async e=>{e.preventDefault();let r=z(n(),a());if(!r.ok)return l(r.error);f(!0),l(``);try{let e=await K(r.body,h);C(`Created ${e.name} v1`),t.onCreated(e)}catch(e){e instanceof p||(h=q()),l(E(e))}finally{f(!1)}},v=e=>t=>r({...n(),[e]:t.currentTarget.value});return e(y,{open:!0,wide:!0,title:`New agent profile`,get onClose(){return t.onClose},class:`prof-dialog`,get children(){var r=Ce(),s=r.firstChild,l=s.firstChild.nextSibling,f=s.nextSibling,p=f.firstChild.nextSibling,h=f.nextSibling,y=h.firstChild.nextSibling,b=h.nextSibling,x=b.firstChild.nextSibling,S=b.nextSibling,C=S.firstChild,w=C.nextSibling;return r.addEventListener(`submit`,e=>void g(e)),_(l,`input`,v(`name`),!0),_(p,`input`,v(`title`),!0),_(y,`input`,v(`description`),!0),_(x,`input`,v(`tags`),!0),m(r,e(Z,{get draft(){return a()},onChange:o}),S),m(r,e(i,{get when(){return c()},get children(){var e=$();return m(e,c),e}}),S),_(w,`click`,t.onClose,!0),u(()=>C.disabled=d()),u(()=>l.value=n().name),u(()=>p.value=n().title),u(()=>y.value=n().description),u(()=>x.value=n().tags),r}})}function Tt(t){let[n,l]=s(),[d,f]=s(),[g,_]=s(X()),[y,x]=s(``),[S,w]=s(``),[T,D]=s(!1),[O,k]=s(`edit`),A=q(),j=async(e=!1)=>{x(``);try{let{profile:n}=await P(t.id),r=await B(n.id,n.latestVersion);l(n),f(r),e||_(J(r.content))}catch(e){x(E(e))}};c(o(()=>t.id,()=>void j()));let[M,{refetch:F}]=a(()=>O()===`history`?`${t.id}#${n()?.latestVersion??0}`:void 0,()=>ee(t.id).then(e=>e.items)),I=()=>!!d()&&R(g(),d().content),L=async(e,n)=>{A=q(),C(n),t.onChanged(),l(e),await j(),F()},z=async e=>{e instanceof p||(A=q()),w(E(e)),e.code===`conflict`&&(await j(!0),t.onChanged())},V=async()=>{let e=n(),t=d();if(!e||!t)return;let r=N(g());if(!r.ok)return w(r.error);if(!R(g(),t.content))return w(`Nothing changed since v${e.latestVersion}.`);D(!0),w(``);try{let t=await U(e.id,{expectedRevision:e.revision,content:r.content},A);await L(t,`Saved ${t.name} v${t.latestVersion}. Pinned sessions keep their version until you upgrade them.`)}catch(e){await z(e)}finally{D(!1)}},H=async e=>{let t=n();if(t){D(!0),w(``);try{let n=await U(t.id,{expectedRevision:t.revision,fromVersion:e},A);await L(n,`Restored v${e} as v${n.latestVersion}`)}catch(e){await z(e)}finally{D(!1)}}},W=async e=>{let r=n();if(r){D(!0),w(``);try{let n=await te(r,e);l(n),t.onChanged(),C(e?`Archived ${n.name}. Pinned sessions keep their version; it can't be pinned again until unarchived.`:`Unarchived ${n.name}`)}catch(e){await z(e)}finally{D(!1)}}},[G,K]=s(),Y=async e=>{try{let n=await B(t.id,e);K({version:e,text:JSON.stringify(n.content,null,2)})}catch(e){w(E(e))}};return(()=>{var a=we();return a.firstChild,m(a,e(i,{get when(){return!y()},get fallback(){return(()=>{var e=Te();return m(e,y),e})()},get children(){return e(i,{get when(){return n()},get fallback(){return Ee()},children:n=>[(()=>{var t=Oe(),r=t.firstChild,a=r.nextSibling,o=a.nextSibling;o.firstChild;var s=o.nextSibling,c=s.nextSibling;return m(r,()=>n().title),m(a,()=>n().name),m(o,()=>n().latestVersion,null),m(t,e(i,{get when(){return n().state===`archived`},get children(){return De()}}),s),c.$$click=()=>void W(n().state!==`archived`),m(c,()=>n().state===`archived`?`Unarchive`:`Archive`),u(()=>c.disabled=T()),t})(),e(i,{get when(){return n().description},get children(){var e=ke();return m(e,()=>n().description),e}}),e(Et,{get profile(){return n()},get latest(){return d()},onSaved:e=>{l(e),t.onChanged()},onConflict:async()=>{await j(!0),t.onChanged()}}),(()=>{var e=Ae(),t=e.firstChild,n=t.nextSibling,r=n.nextSibling;return t.$$click=()=>k(`edit`),n.$$click=()=>k(`history`),r.$$click=()=>k(`usage`),u(e=>{var i=O()===`edit`,a=O()===`history`,o=O()===`usage`;return i!==e.e&&h(t,`aria-selected`,e.e=i),a!==e.t&&h(n,`aria-selected`,e.t=a),o!==e.a&&h(r,`aria-selected`,e.a=o),e},{e:void 0,t:void 0,a:void 0}),e})(),e(i,{get when(){return S()},get children(){var e=$();return m(e,S),e}}),e(i,{get when(){return O()===`edit`},get children(){return[(()=>{var e=ke();return m(e,(()=>{var e=v(()=>n().state===`archived`);return()=>e()?`Unarchive to edit or pin this profile.`:`Saving creates v${n().latestVersion+1}. Sessions pinned to an earlier version keep it until you upgrade each one.`})()),e})(),e(Z,{get draft(){return g()},onChange:_,get disabled(){return n().state===`archived`||T()}}),(()=>{var e=je(),t=e.firstChild;t.firstChild;var r=t.nextSibling;return t.$$click=()=>void V(),m(t,()=>n().latestVersion+1,null),r.$$click=()=>(_(J(d().content)),w(``)),u(e=>{var i=T()||n().state===`archived`||!I(),a=T()||!I();return i!==e.e&&(t.disabled=e.e=i),a!==e.t&&(r.disabled=e.t=a),e},{e:void 0,t:void 0}),e})()]}}),e(i,{get when(){return O()===`usage`},get children(){return e(Ot,{get profile(){return n()},get onChanged(){return t.onChanged}})}}),e(i,{get when(){return O()===`history`},get children(){return[Me(),e(i,{get when(){return v(()=>!M.error)()&&M()},get fallback(){return(()=>{var e=he();return m(e,(()=>{var e=v(()=>!!M.error);return()=>e()?E(M.error):`Loading…`})()),e})()},get children(){var t=Ne();return m(t,e(r,{get each(){return M()},children:t=>(()=>{var r=Le(),a=r.firstChild;a.firstChild;var o=a.nextSibling,s=o.nextSibling,c=s.nextSibling.nextSibling;return m(a,()=>t.version,null),m(r,e(i,{get when(){return t.version===n().latestVersion},get children(){return Pe()}}),o),m(o,()=>b(t.createdAt)),m(s,()=>t.digest.slice(0,12)),c.$$click=()=>void Y(t.version),m(r,e(i,{get when(){return v(()=>t.version!==n().latestVersion)()&&n().state!==`archived`},get children(){var e=Fe();return e.firstChild,e.$$click=()=>void H(t.version),m(e,()=>n().latestVersion+1,null),u(()=>e.disabled=T()),e}}),null),m(r,e(i,{get when(){return G()?.version===t.version},get children(){var e=Ie();return m(e,()=>G().text),u(()=>h(e,`aria-label`,`Version ${t.version} content`)),e}}),null),u(()=>h(s,`title`,t.digest)),r})()})),t}})]}})]})}}),null),a})()}function Et(t){let[n,a]=s(!1),[o,c]=s([]),[l,d]=s(``),[f,p]=s(``),[_,y]=s(!1),x=()=>Object.entries(t.profile.metadata),S=()=>{c([...x().map(([e,t])=>({key:e,value:t})),{key:``,value:``}]),d(t.profile.projects.join(`, `)),p(``),a(!0)},w=(e,t,n)=>c(o().map((r,i)=>i===e?{...r,[t]:n}:r)),D=async e=>{e.preventDefault();let n=j(o(),l());if(!n.ok)return p(n.error);y(!0),p(``);try{let e=await L(t.profile,n.patch);a(!1),C(`Saved the details of ${e.name}`),t.onSaved(e)}catch(e){p(E(e)),e.code===`conflict`&&await t.onConflict()}finally{y(!1)}},O=()=>t.latest?.content;return(()=>{var s=ze();return m(s,e(i,{get when(){return n()},get fallback(){return[(()=>{var n=He(),a=n.firstChild.nextSibling;a.firstChild;var o=a.nextSibling.nextSibling,s=o.nextSibling,c=s.nextSibling;return m(a,()=>t.profile.latestVersion,null),m(a,e(i,{get when(){return O()},children:e=>` · ${e().instructions?`instructions · `:``}${T(e().skills.length,`skill`)} · ${T(e().commands.length,`command`)}${e().model?` · ${e().model}`:``}`}),null),m(o,(()=>{var e=v(()=>!!t.profile.updatedAt);return()=>e()?b(t.profile.updatedAt):`—`})()),m(n,e(i,{get when(){return t.profile.tags.length},get children(){return[Be(),(()=>{var e=Ve();return m(e,()=>t.profile.tags.join(`, `)),e})()]}}),s),m(c,(()=>{var e=v(()=>!!t.profile.projects.length);return()=>e()?t.profile.projects.join(`, `):We()})()),m(n,e(r,{get each(){return x()},children:([e,t])=>[(()=>{var t=Ge();return m(t,e),t})(),(()=>{var e=Ve();return m(e,t),e})()]}),null),n})(),(()=>{var e=Ue();return e.$$click=S,e})()]},get children(){var t=Re(),n=t.firstChild.nextSibling,s=n.firstChild,p=n.nextSibling,v=p.firstChild.nextSibling,y=p.nextSibling,b=y.firstChild,x=b.nextSibling;return t.addEventListener(`submit`,e=>void D(e)),m(t,e(r,{get each(){return o()},children:(t,n)=>(()=>{var r=Ke(),i=r.firstChild,a=i.nextSibling;return i.$$input=e=>w(n(),`key`,e.currentTarget.value),a.$$input=e=>w(n(),`value`,e.currentTarget.value),m(r,e(g,{icon:`close`,get label(){return`Remove detail ${n()+1}`},type:`button`,onClick:()=>c(o().filter((e,t)=>t!==n()))}),null),u(()=>h(r,`aria-label`,`Detail ${n()+1}`)),u(()=>i.value=t.key),u(()=>a.value=t.value),r})()}),n),s.$$click=()=>c([...o(),{key:``,value:``}]),v.$$input=e=>d(e.currentTarget.value),m(t,e(i,{get when(){return f()},get children(){var e=$();return m(e,f),e}}),y),x.$$click=()=>a(!1),u(()=>b.disabled=_()),u(()=>v.value=l()),t}})),s})()}var Dt={sessions:`sessions (needs sessions:read)`,teams:`team roles (needs teams:read)`,launches:`launches (needs sessions:launch)`,workspaces:`workspaces (needs workspaces:read)`};function Ot(t){let[n,{refetch:l}]=a(()=>t.profile.id+`#`+t.profile.latestVersion,()=>V(t.profile.id)),[d,f]=s([]),[p,g]=s(),[_,y]=s();c(o(n,e=>(f([]),g(e?.cursor))));let S=()=>[...n()?.sessions??[],...d()],w=async()=>{let e=p();if(e)try{let n=await V(t.profile.id,e);f([...d(),...n.sessions]),g(n.cursor)}catch(e){C(E(e))}},D=async(e,n)=>{y(e);try{await I(e,{profileID:t.profile.id,version:t.profile.latestVersion,expectedRevision:n}),C(`Asked ${e} to run v${t.profile.latestVersion}; it confirms on its next turn.`),t.onChanged(),l()}catch(e){C(E(e)),l()}finally{y(void 0)}},O=()=>{let e=n()?.counts;return e?[e.sessions===void 0?``:`${T(e.sessions,`session`)}${e.olderVersion?` (${e.olderVersion} on older versions)`:``}`,e.teamRoles===void 0?``:T(e.teamRoles,`team role`),e.launches===void 0?``:T(e.launches,`launch`),e.workspaces===void 0?``:T(e.workspaces,`workspace`)].filter(Boolean).join(` · `):``};return(()=>{var a=qe();return m(a,e(i,{get when(){return!n.error},get fallback(){return(()=>{var e=$();return m(e,()=>E(n.error)),e})()},get children(){return e(i,{get when(){return n()},get fallback(){return me()},children:n=>[(()=>{var e=Je(),t=e.firstChild;return m(e,(()=>{var e=v(()=>!!O());return()=>e()?`${O()}.`:`Nothing you can see uses this profile.`})(),t),e})(),e(i,{get when(){return!n().hidden.includes(`sessions`)},get children(){return[Ye(),e(i,{get when(){return S().length},get fallback(){return st()},get children(){return[(()=>{var n=Xe();return m(n,e(r,{get each(){return S()},children:n=>(()=>{var r=ft(),a=r.firstChild,o=a.nextSibling,s=o.nextSibling;s.firstChild;var c=s.nextSibling;return c.nextSibling,m(o,(()=>{var e=v(()=>!!n.name);return()=>e()?`@${n.name}`:n.title??n.sessionID})()),m(s,()=>n.version,null),m(r,e(i,{get when(){return v(()=>n.running!==void 0)()&&n.running!==n.version},get children(){var e=ct();return e.firstChild,m(e,()=>n.running,null),e}}),c),m(r,e(i,{get when(){return n.olderVersion},get children(){return lt()}}),c),m(c,()=>[n.ack?G[n.ack]+(n.offline?` (offline)`:``):``,n.harness??``,n.machineID??``,n.project??``,n.known?``:`session gone`].filter(Boolean).join(` · `)),m(r,e(i,{get when(){return n.known},get children(){var e=ut();return u(()=>h(e,`href`,`/s/${encodeURIComponent(n.sessionID)}`)),e}}),null),m(r,e(i,{get when(){return v(()=>!!n.olderVersion)()&&t.profile.state===`active`},get children(){var e=dt();return e.firstChild,e.$$click=()=>void D(n.sessionID,n.revision),m(e,()=>t.profile.latestVersion,null),u(()=>e.disabled=_()===n.sessionID),e}}),null),u(e=>{var t=`prof-dot${n.online?` on`:``}`,r=n.online?`online`:`offline`;return t!==e.e&&x(a,e.e=t),r!==e.t&&h(a,`title`,e.t=r),e},{e:void 0,t:void 0}),r})()})),n})(),e(i,{get when(){return p()},get children(){var e=Ze();return e.$$click=()=>void w(),e}})]}})]}}),e(i,{get when(){return!n().hidden.includes(`teams`)},get children(){return[Qe(),e(i,{get when(){return n().teamRoles.length},get fallback(){return pt()},get children(){var t=$e();return m(t,e(r,{get each(){return n().teamRoles},children:t=>(()=>{var n=ht(),r=n.firstChild,a=r.nextSibling,o=a.firstChild.nextSibling,s=a.nextSibling;return m(r,()=>t.teamTitle),m(o,()=>t.label??t.role),m(s,(()=>{var e=v(()=>t.version!==void 0);return()=>e()?`v${t.version}`:`latest`})()),m(n,e(i,{get when(){return t.staffed!==void 0},get children(){var e=mt();return m(e,()=>T(t.staffed,`staffed seat`)),e}}),null),u(()=>h(r,`href`,M(t.teamID,xt()))),n})()})),t}})]}}),e(i,{get when(){return!n().hidden.includes(`launches`)},get children(){return[et(),e(i,{get when(){return n().launches.length},get fallback(){return gt()},get children(){var t=tt();return m(t,e(r,{get each(){return n().launches},children:t=>(()=>{var n=_t(),r=n.firstChild,a=r.nextSibling,o=a.nextSibling;o.firstChild;var s=o.nextSibling;return m(r,()=>t.id),m(a,()=>t.state,null),m(a,(()=>{var e=v(()=>!!t.outcome);return()=>e()?` (${t.outcome})`:``})(),null),m(o,()=>t.version,null),m(s,()=>b(t.updated)),m(n,e(i,{get when(){return t.sessionID},get children(){var e=ut();return u(()=>h(e,`href`,`/s/${encodeURIComponent(t.sessionID)}`)),e}}),null),n})()})),t}})]}}),e(i,{get when(){return!n().hidden.includes(`workspaces`)},get children(){return[nt(),e(i,{get when(){return n().workspaces.length||n().projects.length},get fallback(){return vt()},get children(){return[(()=>{var t=rt();return m(t,e(r,{get each(){return n().workspaces},children:e=>(()=>{var t=yt(),n=t.firstChild,r=n.nextSibling;return m(n,()=>e.title??e.workspaceID),m(r,()=>T(e.sessions,`pinned session`)),t})()})),t})(),e(i,{get when(){return n().projects.length},get children(){var e=it();return e.firstChild,m(e,()=>n().projects.join(`, `),null),e}})]}})]}}),e(i,{get when(){return n().hidden.length},get children(){var e=at(),t=e.firstChild.nextSibling;return t.nextSibling,m(e,()=>n().hidden.map(e=>Dt[e]??e).join(`, `),t),e}}),e(i,{get when(){return n().truncated.length},get children(){var e=ot(),t=e.firstChild.nextSibling;return t.nextSibling,m(e,()=>n().truncated.join(`, `),t),e}})]})}})),a})()}f([`click`,`input`]);function kt(){return e(St,{get id(){return d().searchParams.get(`id`)??void 0}})}export{kt as default};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/renderer2d-DAr4IHM8.js","assets/live-BDq0AABg.js","assets/ui-Dh1-78Cl.js","assets/plural-Bspvoqfq.js","assets/index-lIOfSYck.js","assets/pane-layout-DWXfDU-1.js","assets/index-BabrNDB3.css","assets/live-BUofsQpz.css","assets/safe-area-JUb6OeI3.js","assets/renderer3d-DWZj595u.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{$ as e,At as t,C as n,Ct as r,Et as i,Gt as a,Ht as o,It as s,Lt as c,Mt as l,Nt as u,Ot as d,Pt as f,S as p,T as m,Tt as h,Ut as g,Vt as _,Wt as v,a as y,bt as b,dt as x,ft as S,g as ee,gt as C,ht as w,i as T,lt as E,pt as D,r as O,u as k,ut as A,yt as j}from"./ui-Dh1-78Cl.js";import{B as M,F as N,H as te,I as P,L as F,N as ne,P as I,R as re,j as L}from"./index-lIOfSYck.js";import{$ as ie,A as R,C as ae,D as oe,F as se,H as ce,I as le,J as ue,K as de,L as fe,M as pe,N as me,O as he,P as ge,Q as _e,R as ve,S as ye,T as be,U as xe,V as Se,W as Ce,X as we,Y as Te,Z as Ee,a as De,at as Oe,b as ke,ct as Ae,et as je,f as Me,ft as Ne,g as Pe,i as Fe,it as Ie,j as Le,k as z,l as Re,lt as B,m as ze,n as Be,nt as Ve,o as He,ot as Ue,p as We,q as Ge,r as Ke,rt as qe,s as V,t as Je,tt as Ye,u as Xe,ut as Ze,v as Qe,w as H,x as U,z as $e}from"./live-BDq0AABg.js";var et=Object.create,W=Object.defineProperty,tt=Object.getOwnPropertyDescriptor,nt=Object.getOwnPropertyNames,rt=Object.getPrototypeOf,it=Object.prototype.hasOwnProperty,at=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t,t.exports),e=null),t.exports),G=(e,t)=>{let n={};for(var r in e)W(n,r,{get:e[r],enumerable:!0});return t||W(n,Symbol.toStringTag,{value:`Module`}),n},K=(e,t,n,r)=>{if(t&&typeof t==`object`||typeof t==`function`)for(var i=nt(t),a=0,o=i.length,s;a<o;a++)s=i[a],!it.call(e,s)&&s!==n&&W(e,s,{get:(e=>t[e]).bind(null,s),enumerable:!(r=tt(t,s))||r.enumerable});return e},ot=(e,t,n)=>(n=e==null?{}:et(rt(e)),K(t||!e||!e.__esModule||!it.call(e,`default`)?W(n,`default`,{value:e,enumerable:!0}):n,e)),st=[`machine`,`harness`,`state`,`team`,`role`,`project`,`workspace`,`tag`,`meta`],q={machine:`Machine`,harness:`Harness`,state:`State`,team:`Team`,role:`Role`,project:`Project`,workspace:`Workspace`,tag:`Tag`,meta:`Metadata`},ct=`watchtower.filtersOpen`,lt=`watchtower.legendOpen`;function ut(e,t={}){let n=[];for(let r of st){let i=e[r];if(!i)continue;let a=r===`state`?R[e.state]:r===`machine`||r===`harness`||r===`team`?t[r]?.(i)??i:i;n.push({key:r,label:q[r],value:a,clear:{[r]:void 0}})}if(e.q&&n.push({key:`q`,label:`Search`,value:e.q,clear:{q:void 0}}),e.kinds){let t=ie(e).kinds.size;n.push({key:`kinds`,label:`Lines`,value:t===be.length?`all kinds`:`${t} of ${be.length} kinds`,clear:{kinds:void 0}})}return e.tree===!1&&n.push({key:`tree`,label:`Session tree`,value:`off`,clear:{tree:void 0}}),n}var dt=e=>ut(e).filter(e=>e.key!==`q`).length,ft=(e,t)=>st.filter(n=>!!e[n]||t.includes(n)),pt=(e,t)=>{let n=new Set(ft(e,t));return st.filter(e=>!n.has(e))},mt=(e,t)=>e===`1`||e!==`0`&&t;function ht(e,t,n){if(!(n<=0))switch(t){case`ArrowRight`:case`ArrowDown`:return(e+1)%n;case`ArrowLeft`:case`ArrowUp`:return(e-1+n)%n;case`Home`:return 0;case`End`:return n-1;default:return}}var gt=2500;function J(e){return e.panelOpen||e.focusInside||e.hover?!1:e.now-e.lastActivity>=gt}var _t=(e,t)=>e>Math.min(120,t/4),vt=j(`<div class=wt-backdrop aria-hidden=true>`),yt=j(`<section role=dialog tabindex=-1><header class=wt-panel-head><h2></h2></header><div class=wt-panel-body>`),bt=j(`<div class=wt-handle aria-hidden=true>`);function xt(e){let n,r=t=>{e.onClose(),t&&e.opener&&queueMicrotask(()=>document.getElementById(e.opener)?.focus())};return v(()=>{e.autoFocus&&n.focus({preventScroll:!0})}),[t(i,{get when(){return e.phone},get children(){var e=vt();return e.$$click=()=>r(!1),e}}),(()=>{var i=yt(),a=i.firstChild,o=a.firstChild,s=a.nextSibling;i.$$keydown=e=>{e.key!==`Escape`||e.defaultPrevented||(e.preventDefault(),r(!0))};var c=n;return typeof c==`function`?b(c,i):n=i,S(i,t(St,{onClose:()=>r(!1)}),a),S(o,()=>e.title),S(a,()=>e.actions,null),S(a,t(T,{icon:`close`,get label(){return`Close ${e.title.toLowerCase()}`},onClick:()=>r(!0)}),null),S(s,()=>e.children),f(t=>{var n=e.id,r=`wt-panel wt-sheetable ${e.class??``}`,a=!!e.phone,s=e.phone?`true`:`false`,c=`${e.id}-title`,l=`${e.id}-title`;return n!==t.e&&w(i,`id`,t.e=n),r!==t.t&&A(i,t.t=r),a!==t.a&&i.classList.toggle(`wt-sheet`,t.a=a),s!==t.o&&w(i,`aria-modal`,t.o=s),c!==t.i&&w(i,`aria-labelledby`,t.i=c),l!==t.n&&w(o,`id`,t.n=l),t},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0}),i})()]}function St(e){let t=0,n=0,r=null,i=t=>{if(!r)return;let i=r.offsetHeight;r.style.transform=``,r.style.transition=``,r=null,t&&_t(n,i)&&e.onClose()};return(()=>{var e=bt();return e.addEventListener(`pointercancel`,()=>i(!1)),e.$$pointerup=()=>i(!0),e.$$pointermove=e=>{r&&(n=Math.max(0,e.clientY-t),r.style.transform=`translateY(${n}px)`)},e.$$pointerdown=e=>{r=e.currentTarget.closest(`.wt-sheetable`),r&&(t=e.clientY,n=0,r.style.transition=`none`,e.currentTarget.setPointerCapture?.(e.pointerId))},e})()}x([`click`,`keydown`,`pointerdown`,`pointermove`,`pointerup`]);var Ct=j(`<div class=te-row><button type=button class="btn small">Edit team</button><a class="btn small">Open team page`),wt=j(`<p role=alert class=wt-error>Could not load the timeline: <!> <button type=button class=btn>Retry`),Tt=j(`<p class=muted>Loading…`),Et=j(`<p class=muted>No messages in this window.`),Dt=j(`<button type=button class=btn>Load older`),Ot=j(`<aside class="wt-slider wt-sheetable"aria-label=Details><header class=wt-slider-head><h2></h2></header><div class=wt-slider-body><section class=wt-section><h3>Timeline</h3><ol class=wt-timeline>`),kt=j(`<p class=muted>This is no longer in the chosen window.`),At=j(`<span class=muted>Loading…`),jt=j(`<span class=wt-error>`),Mt=j(`<div class=wt-text>`),Nt=j(`<div class="wt-text wt-answer"><span class=muted>Answer: `),Pt=j(`<li><div class=wt-tl-row><span class=wt-tl-kind></span><span> → </span><span class=muted> · `),Ft=j(`<button type=button class="btn wt-show-text">Show text`),It=j(`<dl class=wt-facts>`),Lt=j(`<dt>`),Rt=j(`<dd>`),zt=j(`<section class=wt-section><h3>Members</h3><ul class=wt-peers>`),Bt=j(`<p class=wt-actions><a class="btn primary"href=/concierge>`),Vt=j(`<span class="btn wt-drag"draggable=true title="Drag onto a pane: an edge splits, the centre replaces"aria-hidden=true> Drag into a pane`),Ht=j(`<p class=wt-actions><a class="btn primary">Open session</a> <button type=button class=btn>Open in pane beside</button> <button type=button class=btn>Start side chat…`),Ut=j(`<section class=wt-section><h3>Supervised by</h3><button type=button class=wt-link>`),Wt=j(`<section class=wt-section><h3>Parent</h3><button type=button class=wt-link>`),Gt=j(`<section class=wt-section><h3>Subsessions</h3><ul class=wt-peers>`),Kt=j(`<section class=wt-section><h3>Talks with</h3><ul class=wt-peers>`),qt=j(`<li><button type=button class=wt-link></button><span class=muted> · `),Jt=j(`<li><button type=button class=wt-link>`),Yt=j(`<p class=wt-endpoints><button type=button class=wt-link></button><span aria-hidden=true> → </span><span class=sr-only> to </span><button type=button class=wt-link>`),Xt={msg:`Message`,ask:`Ask`,reply:`Reply`,decline:`Decline`};function Zt(e){let n,a=t=>e.snap.nodes.find(e=>e.id===t)?.label??t,[s,u]=c([]),[p,m]=c(),[_,y]=c(`loading`),[x,C]=c(``),[E,O]=c({}),A=0,j=async t=>{let n=++A,r=e.selection;y(`loading`);try{let i=await ke(r,e.window,Date.now(),t?p():void 0);if(n!==A)return;u(t?[...s(),...i.messages]:i.messages),m(i.cursor),y(`ready`)}catch(e){if(n!==A)return;C(ae(e).message),y(`error`)}};l(o(()=>`${e.selection.type}:${e.selection.id}:${e.window}`,()=>{u([]),m(void 0),O({}),j(!1)}));let M=async e=>{O({...E(),[e]:`loading`});try{let t=await U(e);O({...E(),[e]:t})}catch(t){O({...E(),[e]:{error:ae(t).message}})}};v(()=>{let t=t=>{t.key===`Escape`&&!t.defaultPrevented&&!ee()&&e.onClose()};document.addEventListener(`keydown`,t),g(()=>document.removeEventListener(`keydown`,t))});let N=()=>e.edge?e.edge.label:e.node?.title??e.selection.id;return(()=>{var o=Ot(),c=o.firstChild,l=c.firstChild,u=c.nextSibling,m=u.firstChild,g=m.firstChild.nextSibling,v=n;return typeof v==`function`?b(v,o):n=o,S(o,t(St,{onClose:()=>e.onClose()}),c),S(l,N),S(c,t(T,{icon:`close`,label:`Close details`,onClick:()=>e.onClose()}),null),S(u,t(d,{get fallback(){return kt()},get children(){return[t(h,{get when(){return e.edge},children:n=>t(rn,{get edge(){return n()},get onSelect(){return e.onSelect}})}),t(h,{get when(){return e.node},children:n=>t(nn,{get node(){return n()},label:a,get onSelect(){return e.onSelect}})})]}}),m),S(u,t(i,{get when(){return D(()=>e.node?.kind===`team`)()&&e.onEditTeam},get children(){var t=Ct(),n=t.firstChild,r=n.nextSibling;return n.$$click=()=>e.onEditTeam(e.node.id),f(()=>w(r,`href`,`/teams/${encodeURIComponent(e.node.id)}`)),t}}),m),S(m,t(i,{get when(){return _()===`error`},get children(){var e=wt(),t=e.firstChild.nextSibling,n=t.nextSibling.nextSibling;return S(e,x,t),n.$$click=()=>void j(!1),e}}),g),S(g,t(r,{get each(){return s()},children:e=>{let n=()=>E()[e.id];return(()=>{var r=Pt(),o=r.firstChild.firstChild,s=o.nextSibling,c=s.firstChild,l=s.nextSibling,u=l.firstChild;return S(o,()=>Xt[e.kind]??e.kind),S(s,()=>a(e.from),c),S(s,()=>a(e.to),null),S(l,()=>e.state,u),S(l,(()=>{var t=D(()=>!!e.delivery);return()=>t()?` · ${$e(e.delivery)}`:``})(),u),S(l,()=>e.decisionID?` · Decision`:``,u),S(l,()=>k(e.at),null),S(r,t(d,{get fallback(){return(()=>{var t=Ft();return t.$$click=()=>void M(e.id),t})()},get children(){return[t(h,{get when(){return n()===`loading`},get children(){return At()}}),t(h,{get when(){return D(()=>typeof n()==`object`&&n()!==null)()&&`error`in n()},get children(){var e=jt();return S(e,()=>n().error),e}}),t(h,{get when(){return D(()=>typeof n()==`object`&&n()!==null)()&&`text`in n()},get children(){return[(()=>{var e=Mt();return S(e,()=>n().text),e})(),t(i,{get when(){return n().answer},get children(){var e=Nt();return e.firstChild,S(e,()=>n().answer,null),e}})]}})]}}),null),r})()}})),S(m,t(i,{get when(){return _()===`loading`},get children(){return Tt()}}),null),S(m,t(i,{get when(){return D(()=>_()===`ready`)()&&!s().length},get children(){return Et()}}),null),S(m,t(i,{get when(){return D(()=>_()===`ready`)()&&p()},get children(){var e=Dt();return e.$$click=()=>void j(!0),e}}),null),o})()}function Qt(e){return(()=>{var n=It();return S(n,t(r,{get each(){return e.rows.filter(e=>e[1]!==void 0&&e[1]!==``)},children:([e,t])=>[(()=>{var t=Lt();return S(t,e),t})(),(()=>{var e=Rt();return S(e,t),e})()]})),n})()}var $t=e=>Se(e),en=e=>e&&Object.keys(e).length?Object.entries(e).map(([e,t])=>`${e}=${t}`).join(`, `):void 0,tn=e=>e?Object.entries(e).map(([e,t])=>`${e} ${t}`).join(`, `):void 0;function nn(e){let n=()=>e.node,a={current:`Concierge (hub-managed session)`,previous:`Previous Concierge session (ended)`,service:`The hub's Concierge service (its updates, digests and launches)`},o=()=>n().conciergeRole?a[n().conciergeRole]:n().concierge?a.current:{hub:`Hub`,user:`You`,app:`App`,machine:`Machine`,session:`Session`,team:`Team`}[n().kind];return[t(Qt,{get rows(){return[[`Kind`,o()],[`State`,n().ring?R[n().ring]:void 0],[`Machine`,n().machine],[`Harness`,n().harness],[`Project`,n().project],[`Mode`,n().team?.mode===`restricted`?`Restricted: only its team paths`:n().team?.mode===`open`?`Open: everyone may message everyone`:void 0],[`Entry role`,n().team?.entryRole],[`Paused`,n().team?.paused?`yes`:void 0],[n().kind===`team`?`Roles`:`Directory roles`,n().roles.join(`, `)||void 0],[`Teams`,n().seats.map(e=>`${e.team} (${e.role})`).join(`, `)||void 0],[`Tags`,(n().team?.tags??n().tags).join(`, `)||void 0],[`Launch labels`,en(n().labels)],[`Metadata`,en(n().team?.metadata)],[`Workspaces`,n().workspaceIDs.join(`, `)||void 0],[`Launch`,n().launchID],[`Last seen`,n().lastSeen?k(n().lastSeen):void 0],...n().kind===`hub`||n().kind===`machine`?[[`Messages through it`,n().routed]]:[[`Sent`,n().sent],[`Received`,n().received]],[`By kind`,Object.entries(n().byKind).map(([e,t])=>`${$t(e)} ${t}`).join(`, `)||void 0],[`Sessions`,n().states?Object.entries(n().states).map(([e,t])=>`${R[e]} ${t}`).join(`, `):void 0],[`Machines online`,n().machinesOnline?`${n().machinesOnline.online} of ${n().machinesOnline.total}`:void 0]]}}),t(i,{get when(){return n().team?.members.length},get children(){var i=zt(),a=i.firstChild.nextSibling;return S(a,t(r,{get each(){return[...n().team.members]},children:t=>(()=>{var n=qt(),r=n.firstChild,i=r.nextSibling;return i.firstChild,r.$$click=()=>e.onSelect({type:`node`,id:t.id}),S(r,()=>t.label),S(i,()=>t.role,null),n})()})),i}}),t(i,{get when(){return D(()=>!!n().openable)()&&n().concierge},get children(){var e=Bt(),t=e.firstChild;return S(t,()=>n().conciergeRole===`previous`?`Open the current Concierge`:`Open the Concierge`),e}}),t(i,{get when(){return D(()=>!!n().openable)()&&!n().concierge},get children(){var e=Ht(),r=e.firstChild,a=r.nextSibling.nextSibling,o=a.nextSibling.nextSibling;return a.$$click=()=>M(n().id),S(e,t(i,{get when(){return!F()},get children(){return[(()=>{var e=Vt(),r=e.firstChild;return E(e,`dragend`,N),e.addEventListener(`dragstart`,e=>P(e,{target:{sessionID:n().id},label:n().title})),S(e,t(O,{name:`grip`}),r),e})(),` `]}}),o),o.$$click=()=>I(n().id,n().workspaceIDs[0]?{workspaceID:n().workspaceIDs[0]}:{}),f(()=>w(r,`href`,m(n().id))),e}}),t(i,{get when(){return n().supervisorID},get children(){var t=Ut(),r=t.firstChild.nextSibling;return r.$$click=()=>e.onSelect({type:`node`,id:n().supervisorID}),S(r,()=>n().supervisorLabel??n().supervisorID),t}}),t(i,{get when(){return n().parentID},get children(){var t=Wt(),r=t.firstChild.nextSibling;return r.$$click=()=>e.onSelect({type:`node`,id:n().parentID}),S(r,()=>e.label(n().parentID)),t}}),t(i,{get when(){return n().children.length},get children(){var i=Gt(),a=i.firstChild.nextSibling;return S(a,t(r,{get each(){return[...n().children]},children:t=>(()=>{var n=Jt(),r=n.firstChild;return r.$$click=()=>e.onSelect({type:`node`,id:t}),S(r,()=>e.label(t)),n})()})),i}}),t(i,{get when(){return n().peers.length},get children(){var i=Kt(),a=i.firstChild.nextSibling;return S(a,t(r,{get each(){return[...n().peers]},children:t=>(()=>{var n=qt(),r=n.firstChild,i=r.nextSibling;return i.firstChild,r.$$click=()=>e.onSelect({type:`node`,id:t.id}),S(r,()=>t.label),S(i,()=>t.count,null),n})()})),i}})]}function rn(e){let n=()=>e.edge;return[(()=>{var t=Yt(),r=t.firstChild,i=r.nextSibling.nextSibling.nextSibling;return r.$$click=()=>e.onSelect({type:`node`,id:n().from}),S(r,()=>n().fromLabel),i.$$click=()=>e.onSelect({type:`node`,id:n().to}),S(i,()=>n().toLabel),t})(),t(Qt,{get rows(){return[[`Messages`,n().kind===`policy`?void 0:n().count],[`First`,n().firstAt?k(n().firstAt):void 0],[`Last`,n().lastAt?k(n().lastAt):void 0],[`States`,tn(n().states)],[`Delivery`,ve(n().delivery)],[`Declined`,n().declined],[`Refused by team policy`,n().denied],[`To a role address`,n().roleAddressed],[`Team`,n().teamLabel??n().teamID],[`Permitted kinds`,n().kinds?.join(`, `)],[`Permitted path`,n().permitted===void 0?void 0:n().permitted?`yes`:`no (refused attempts only)`]]}})]}x([`click`]);var an=j(`<svg viewBox="0 0 24 24"width=16 height=16 fill=none stroke=currentColor stroke-width=1.8 stroke-linecap=round stroke-linejoin=round aria-hidden=true>`),on=j(`<svg><path></svg>`,!1,!0,!1),sn=j(`<button type=button class=wt-dock-item><span class=wt-dock-text>`),cn=j(`<span class="wt-dock-matches muted"role=status> `),ln=j(`<span class=wt-dock-search><input type=search aria-label="Search nodes"placeholder="Search @name, role, machine…"><button type=button class=wt-dock-close aria-label="Close search"title="Close search">`),un=j(`<div class=wt-dock-wrap><div class=wt-dock role=toolbar aria-label="Watchtower controls"aria-orientation=horizontal><div class=wt-dock-seg role=group aria-label=View></div><span class=wt-dock-sep aria-hidden=true></span><span class=wt-dock-more>`),dn=j(`<button type=button class="wt-dock-item wt-dock-view">`),fn=j(`<span class=wt-badge aria-hidden=true>`),pn=j(`<button type=button class=wt-dock-item aria-label=Search title="Search nodes"aria-expanded=false>`),mn={filters:[`M4 6h16`,`M7 12h10`,`M10 18h4`],legend:[`M12 3a9 9 0 1 0 0 18a9 9 0 0 0 0-18z`,`M12 11v6`,`M12 7.5h.01`],teams:[`M9 11a3 3 0 1 0 0-6a3 3 0 0 0 0 6z`,`M3 20a6 6 0 0 1 12 0`,`M16 5.5a3 3 0 0 1 0 5.5`,`M21 20a6 6 0 0 0-4-5.6`],hub:[`M12 9a3 3 0 1 0 0 6a3 3 0 0 0 0-6z`,`M12 3v6`,`M12 15v6`,`M3 12h6`,`M15 12h6`],reset:[`M4 9V4h5`,`M20 9V4h-5`,`M4 15v5h5`,`M20 15v5h-5`],pause:[`M8 5v14`,`M16 5v14`],play:[`M7 5l12 7-12 7z`],search:[`M11 4a7 7 0 1 0 0 14a7 7 0 0 0 0-14z`,`M20 20l-4-4`],close:[`M6 6l12 12`,`M18 6L6 18`],more:[`M5 12h.01`,`M12 12h.01`,`M19 12h.01`]};function hn(e){return(()=>{var n=an();return S(n,t(r,{get each(){return[...mn[e.name]]},children:e=>(()=>{var t=on();return w(t,`d`,e),t})()})),f(()=>w(n,`class`,`wt-glyph wt-glyph-${e.name}`)),n})()}function gn(e){let n,a,[o,s]=c(!!e.search),[l,u]=c(!1),[d,p]=c(Date.now()),[m,h]=c(Date.now()),[_,x]=c(!1),[ee,C]=c(!1),T=()=>J({now:m(),lastActivity:d(),panelOpen:e.panelOpen,focusInside:ee(),hover:_()}),E,D=()=>{let e=Date.now();e-d()<150&&!T()||(p(e),h(e),clearTimeout(E),E=setTimeout(()=>h(Date.now()),gt+50))},O=!1;v(()=>{let e=[`pointermove`,`pointerdown`,`touchstart`,`keydown`,`wheel`];for(let t of e)window.addEventListener(t,D,{passive:!0});let t=e=>{O&&(O=!1,e.preventDefault(),e.stopPropagation())};n.addEventListener(`click`,t,!0),D(),A();let r=n.parentElement,i=r?new ResizeObserver(()=>u(r.clientWidth<=540)):void 0;r&&i.observe(r),g(()=>i?.disconnect()),g(()=>{n.removeEventListener(`click`,t,!0);for(let t of e)window.removeEventListener(t,D);clearTimeout(E)})});let k=()=>[...n.querySelectorAll(`.wt-dock-item`)].filter(e=>e.offsetParent!==null&&!e.disabled),A=e=>{let t=k(),r=e&&t.includes(e)?e:t.find(e=>e.tabIndex===0)??t[0];for(let e of n.querySelectorAll(`.wt-dock-item`))e.tabIndex=e===r?0:-1},j=e=>{let t=e.target;if(t.tagName===`INPUT`||!t.classList.contains(`wt-dock-item`))return;let n=k(),r=ht(n.indexOf(t),e.key,n.length);r!==void 0&&(e.preventDefault(),n[r].focus())},M=!1,N=()=>{M=!0,s(!0)},te=()=>{s(!1),queueMicrotask(()=>a?.focus())},P=e=>(()=>{var n=sn(),r=n.firstChild;return n.$$click=()=>e.onClick(),S(n,t(i,{get when(){return e.glyph},children:e=>t(hn,{get name(){return e()}})}),r),S(r,()=>e.text),S(n,()=>e.badge,null),f(t=>{var r=e.id,i=!!e.wide,a=e.label,o=e.title??e.label,s=e.pressed,c=e.expanded,l=e.expanded?e.controls:void 0,u=e.disabled;return r!==t.e&&w(n,`id`,t.e=r),i!==t.t&&n.classList.toggle(`wt-dock-wide`,t.t=i),a!==t.a&&w(n,`aria-label`,t.a=a),o!==t.o&&w(n,`title`,t.o=o),s!==t.i&&w(n,`aria-pressed`,t.i=s),c!==t.n&&w(n,`aria-expanded`,t.n=c),l!==t.s&&w(n,`aria-controls`,t.s=l),u!==t.h&&(n.disabled=t.h=u),t},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0}),n})();return(()=>{var s=un(),c=s.firstChild,u=c.firstChild,d=u.nextSibling.nextSibling;c.$$focusout=e=>{n.contains(e.relatedTarget)||C(!1)},c.$$focusin=e=>{C(!0),e.target.classList.contains(`wt-dock-item`)&&A(e.target)},c.$$pointerdown=e=>{O=T()&&e.pointerType===`touch`},c.addEventListener(`pointerleave`,()=>x(!1)),c.addEventListener(`pointerenter`,()=>x(!0)),c.$$keydown=j;var p=n;return typeof p==`function`?b(p,c):n=c,S(u,t(r,{each:[[`3d`,`3D`],[`2d`,`2D`],[`list`,`List`]],children:([t,n])=>(()=>{var r=dn();return r.$$click=()=>e.setView(t),S(r,n),f(()=>w(r,`aria-pressed`,e.view===t)),r})()})),S(c,()=>P({id:`wt-dock-filters`,label:e.filterCount?`Filters (${e.filterCount} active)`:`Filters`,text:`Filters`,glyph:`filters`,expanded:e.filtersOpen,controls:`wt-filters`,onClick:e.onFilters,badge:t(i,{get when(){return e.filterCount},get children(){var t=fn();return S(t,()=>e.filterCount),t}})}),d),S(c,()=>P({id:`wt-dock-legend`,label:`Legend`,text:`Legend`,glyph:`legend`,expanded:e.legendOpen,controls:`wt-legend`,onClick:e.onLegend}),d),S(c,()=>P({id:`wt-dock-teams`,label:`Teams`,text:`Teams`,glyph:`teams`,pressed:e.teamsOpen,onClick:e.onTeams}),d),S(c,()=>P({label:`Hub details`,text:`Hub`,glyph:`hub`,wide:!0,onClick:e.onHub}),d),S(c,()=>P({label:`Reset view`,text:`Reset`,glyph:`reset`,wide:!0,disabled:!e.drawn,onClick:e.onReset}),d),S(c,()=>P({label:e.paused?`Resume motion`:`Pause motion`,text:e.paused?`Resume`:`Pause`,glyph:e.paused?`play`:`pause`,wide:!0,pressed:e.paused,disabled:e.reduced,...e.reduced?{title:`Motion is off: your system asks for reduced motion`}:{},onClick:e.onPause}),d),S(d,t(y,{label:`More controls`,class:`wt-dock-item`,up:!0,align:`right`,items:()=>[...l()?[{label:`Hub details`,run:e.onHub},{label:`Reset view`,run:e.onReset,disabled:!e.drawn},{label:e.paused?`Resume motion`:`Pause motion`,run:e.onPause,disabled:e.reduced}]:[],{label:`Re-layout`,run:()=>e.onRelayout?.(),disabled:!e.canRelayout}],get text(){return t(hn,{name:`more`})}})),S(c,t(i,{get when(){return o()},get fallback(){return(()=>{var e=pn();e.$$click=N;var n=a;return typeof n==`function`?b(n,e):a=e,S(e,t(hn,{name:`search`})),e})()},get children(){var n=ln(),r=n.firstChild,a=r.nextSibling;return S(n,t(hn,{name:`search`}),r),r.$$keydown=t=>{t.key===`Enter`?(t.preventDefault(),e.onSearchEnter()):t.key===`Escape`&&(t.preventDefault(),te())},r.$$input=t=>e.onSearch(t.currentTarget.value),b(e=>{M&&(M=!1,queueMicrotask(()=>e.focus()))},r),S(n,t(i,{get when(){return e.search.trim()},get children(){var t=cn(),n=t.firstChild;return S(t,()=>e.matches??0,n),S(t,()=>e.matches===1?`match`:`matches`,null),t}}),a),a.$$click=te,S(a,t(hn,{name:`close`})),f(()=>r.value=e.search),n}}),null),f(e=>{var t=T()?`true`:`false`,n=o()?`open`:void 0;return t!==e.e&&w(c,`data-faded`,e.e=t),n!==e.t&&w(c,`data-search`,e.t=n),e},{e:void 0,t:void 0}),s})()}x([`click`,`keydown`,`pointerdown`,`focusin`,`focusout`,`input`]);var _n=j(`<label class=wt-field><span></span><input type=text class=wt-meta aria-label=Metadata aria-describedby=wt-meta-help placeholder="key=value"list=wt-meta-keys><datalist id=wt-meta-keys></datalist><span id=wt-meta-help class=sr-only>Launch labels and team metadata: key=value or key, several separated by spaces (all must match).`),vn=j(`<option>`),yn=j(`<fieldset class=wt-fs><legend>View</legend><div class=wt-fs-row><label class=wt-field><span>Time window</span><select aria-label="Time window"></select></label><label class=wt-field><span>Group by</span><select aria-label="Group by"></select></label><label class=wt-check><input type=checkbox><span>Session tree`),bn=j(`<div class=wt-scope>`),xn=j(`<select class=wt-add aria-label="Add filter"><option value selected>+ Add filter`),Sn=j(`<fieldset class=wt-fs><legend>Scope`),Cn=j(`<fieldset class=wt-fs><legend>Show</legend><div class=wt-kinds>`),wn=j(`<form class=wt-preset-form><input type=text aria-label="Preset name"placeholder="Preset name"maxlength=60><button type=submit class="btn small">Save</button><button type=button class="btn small">Cancel`),Tn=j(`<button type=button class="btn small">Delete preset`),En=j(`<footer class=wt-panel-foot role=group aria-label=Presets><select aria-label="Filter presets"><option value></option></select><span class=wt-foot-gap></span><button type=button class="btn small">Clear filters</button><button type=button class="btn small">Copy link</button><span class="muted wt-copied"role=status>`),Dn=j(`<p class="muted wt-fs-empty">Everything is shown. Add a filter to narrow it.`),On=j(`<div class=wt-scope-row><button type=button class=wt-x>×`),kn=j(`<label class=wt-toggle><input type=checkbox><span>`),An=j(`<button type=button class="btn small">Save preset`),jn=j(`<button type=button class=wt-chip-clear>Clear all`),Mn=j(`<div class=wt-chipbar><ul class=wt-chips aria-label="Active filters">`),Nn=j(`<li class=wt-chip><span><span class=wt-chip-label>:</span> </span><button type=button class=wt-x title=Remove>×`),Pn=j(`<label class=wt-field><span></span><select><option value>`),Fn={machine:void 0,harness:void 0,state:void 0,team:void 0,role:void 0,project:void 0,workspace:void 0,tag:void 0,meta:void 0,q:void 0,kinds:void 0,tree:void 0},In={get(e){try{return localStorage.getItem(e)}catch{return null}},set(e,t){try{localStorage.setItem(e,t)}catch{}}};function Ln(e){let[n,a]=c([]),o=()=>ft(e.url,n()),s=()=>pt(e.url,n()),l=()=>ie(e.url).kinds,u=(t,n)=>e.setURL({[t]:n.trim()?n:void 0}),d=e=>{a([...n(),e]),queueMicrotask(()=>document.getElementById(`wt-scope-${e}`)?.focus())},p=t=>{a(n().filter(e=>e!==t)),e.setURL({[t]:void 0})},m=(t,n)=>{let r=new Set(l());n?r.add(t):r.delete(t),e.setURL({kinds:be.filter(e=>r.has(e))})},[h,g]=c(je(In.get(oe))),[_,v]=c(``),[y,x]=c(!1),[ee,C]=c(``),[T,E]=c(``),D=e=>{g(e),In.set(oe,JSON.stringify(e))},O=t=>{v(t);let n=h().find(e=>e.name===t);n&&e.go(se(e.url,n.search))},k=()=>{let t=ee().trim();t&&(D(Oe(h(),t,qe(e.url))),v(t),x(!1),C(``))},A=async()=>{try{await navigator.clipboard.writeText(location.href),E(`Link copied`)}catch{E(`Copy the address bar to share these filters`)}setTimeout(()=>E(``),3e3)},j=n=>{let i=q[n],a=`wt-scope-${n}`;switch(n){case`machine`:return t(Y,{id:a,label:i,all:`All machines`,get value(){return e.url.machine},get options(){return e.machines},onChange:e=>u(n,e)});case`harness`:return t(Y,{id:a,label:i,all:`All harnesses`,get value(){return e.url.harness},get options(){return e.harnesses},onChange:e=>u(n,e)});case`state`:return t(Y,{id:a,label:i,all:`Any state`,get value(){return e.url.state},get options(){return he.map(e=>({value:e,label:R[e]}))},onChange:t=>e.setURL({state:t||void 0})});case`team`:return t(Y,{id:a,label:i,all:`All teams`,get value(){return e.teamValue},get options(){return e.choices.teams.map(e=>({value:e.id,label:e.label}))},onChange:e=>u(n,e)});case`role`:return t(Y,{id:a,label:i,all:`Any role`,get value(){return e.url.role},get options(){return e.choices.roles.map(e=>({value:e,label:e}))},onChange:e=>u(n,e)});case`project`:return t(Y,{id:a,label:i,all:`All projects`,get value(){return e.url.project},get options(){return e.choices.projects.map(e=>({value:e,label:e}))},onChange:e=>u(n,e)});case`workspace`:return t(Y,{id:a,label:i,all:`All workspaces`,get value(){return e.url.workspace},get options(){return e.choices.workspaces.map(e=>({value:e,label:e}))},onChange:e=>u(n,e)});case`tag`:return t(Y,{id:a,label:i,all:`Any tag`,get value(){return e.url.tag},get options(){return e.choices.tags.map(e=>({value:e,label:e}))},onChange:e=>u(n,e)});case`meta`:return(()=>{var n=_n(),o=n.firstChild,s=o.nextSibling,c=s.nextSibling;return w(n,`for`,a),S(o,i),s.$$input=e=>u(`meta`,e.currentTarget.value),s.addEventListener(`change`,e=>u(`meta`,e.currentTarget.value)),w(s,`id`,a),S(c,t(r,{get each(){return[...e.choices.metaKeys]},children:e=>(()=>{var t=vn();return t.value=`${e}=`,t})()})),f(()=>s.value=e.url.meta??``),n})()}};return t(xt,{id:`wt-filters`,title:`Filters`,class:`wt-pop wt-pop-filters`,get phone(){return e.phone},get autoFocus(){return e.autoFocus},opener:`wt-dock-filters`,get onClose(){return e.onClose},get children(){return[(()=>{var n=yn(),i=n.firstChild.nextSibling.firstChild,a=i.firstChild.nextSibling,o=i.nextSibling,s=o.firstChild.nextSibling,c=o.nextSibling.firstChild;return a.addEventListener(`change`,t=>e.setURL({window:t.currentTarget.value})),S(a,t(r,{get each(){return Object.entries(ge)},children:([t,n])=>(()=>{var r=vn();return r.value=t,S(r,()=>n.label),f(()=>r.selected=e.url.window===t),r})()})),s.addEventListener(`change`,t=>e.setURL({groupBy:t.currentTarget.value})),S(s,t(r,{get each(){return Object.entries(H)},children:([t,n])=>(()=>{var r=vn();return r.value=t,S(r,n),f(()=>r.selected=e.url.groupBy===t),r})()})),c.addEventListener(`change`,t=>e.setURL({tree:t.currentTarget.checked?void 0:!1})),f(()=>c.checked=e.url.tree!==!1),n})(),(()=>{var e=Sn();return e.firstChild,S(e,t(i,{get when(){return o().length},get fallback(){return Dn()},get children(){var e=bn();return S(e,t(r,{get each(){return o()},children:e=>(()=>{var t=On(),n=t.firstChild;return S(t,()=>j(e),n),n.$$click=()=>p(e),f(t=>{var r=`Remove ${q[e]} filter`,i=`Remove ${q[e]} filter`;return r!==t.e&&w(n,`aria-label`,t.e=r),i!==t.t&&w(n,`title`,t.t=i),t},{e:void 0,t:void 0}),t})()})),e}}),null),S(e,t(i,{get when(){return s().length},get children(){var e=xn();return e.firstChild,e.addEventListener(`change`,e=>{let t=e.currentTarget.value;e.currentTarget.value=``,t&&d(t)}),S(e,t(r,{get each(){return s()},children:e=>(()=>{var t=vn();return t.value=e,S(t,()=>q[e]),t})()}),null),e}}),null),e})(),(()=>{var e=Cn(),n=e.firstChild.nextSibling;return S(n,t(r,{get each(){return[...ce()]},children:e=>(()=>{var t=kn(),n=t.firstChild,r=n.nextSibling;return n.addEventListener(`change`,t=>m(e.kind,t.currentTarget.checked)),S(r,()=>e.label),f(()=>w(t,`title`,e.description)),f(()=>n.checked=l().has(e.kind)),t})()})),e})(),(()=>{var n=En(),o=n.firstChild,s=o.firstChild,c=o.nextSibling,l=c.nextSibling,u=l.nextSibling,d=u.nextSibling;return o.addEventListener(`change`,e=>O(e.currentTarget.value)),S(s,()=>h().length?`Choose a preset…`:`No presets yet`),S(o,t(r,{get each(){return h()},children:e=>(()=>{var t=vn();return S(t,()=>e.name),f(()=>t.selected=_()===e.name),f(()=>t.value=e.name),t})()}),null),S(n,t(i,{get when(){return y()},get fallback(){return(()=>{var e=An();return e.$$click=()=>x(!0),e})()},get children(){var e=wn(),t=e.firstChild,n=t.nextSibling,r=n.nextSibling;return e.addEventListener(`submit`,e=>{e.preventDefault(),k()}),b(e=>queueMicrotask(()=>e.focus()),t),t.$$input=e=>C(e.currentTarget.value),r.$$click=()=>x(!1),f(()=>n.disabled=!ee().trim()),f(()=>t.value=ee()),e}}),c),S(n,t(i,{get when(){return _()},get children(){var e=Tn();return e.$$click=()=>{D(fe(h(),_())),v(``)},e}}),c),l.$$click=()=>{a([]),e.setURL(Fn)},u.$$click=()=>void A(),S(d,T),f(t=>{var n=_()===``,r=!ut(e.url).length;return n!==t.e&&(s.selected=t.e=n),r!==t.t&&(l.disabled=t.t=r),t},{e:void 0,t:void 0}),n})()]}})}function Rn(e){return t(i,{get when(){return e.chips.length},get children(){var n=Mn(),a=n.firstChild;return S(a,t(r,{get each(){return e.chips},children:t=>(()=>{var n=Nn(),r=n.firstChild,i=r.firstChild,a=i.firstChild;i.nextSibling;var o=r.nextSibling;return S(i,()=>t.label,a),S(r,()=>t.value,null),o.$$click=()=>e.onRemove(t),f(()=>w(o,`aria-label`,`Remove filter ${t.label}: ${t.value}`)),n})()})),S(n,t(i,{get when(){return e.chips.length>1},get children(){var t=jn();return t.$$click=()=>e.onClear(),t}}),null),n}})}function Y(e){let n=()=>e.value&&!e.options.some(t=>t.value===e.value)?[...e.options,{value:e.value,label:e.value}]:e.options;return(()=>{var i=Pn(),a=i.firstChild,o=a.nextSibling,s=o.firstChild;return S(a,()=>e.label),o.addEventListener(`change`,t=>e.onChange(t.currentTarget.value)),S(s,()=>e.all),S(o,t(r,{get each(){return n()},children:t=>(()=>{var n=vn();return S(n,()=>t.label),f(()=>n.selected=e.value===t.value),f(()=>n.value=t.value),n})()}),null),f(t=>{var n=e.id,r=e.id,a=e.label,c=!e.value;return n!==t.e&&w(i,`for`,t.e=n),r!==t.t&&w(o,`id`,t.t=r),a!==t.a&&w(o,`aria-label`,t.a=a),c!==t.o&&(s.selected=t.o=c),t},{e:void 0,t:void 0,a:void 0,o:void 0}),i})()}x([`input`,`click`]);var zn=j(`<div class="wt-canvas wt-2d"><div class=wt-2d-host tabindex=0 role=application aria-roledescription="graph canvas"aria-label="Interaction graph (2D)"aria-describedby=wt-2d-help></div><p id=wt-2d-help class=sr-only>Arrow keys move between nodes, Enter opens the focused node, Home goes to the hub, Shift and arrow keys pan, plus and minus zoom, 0 fits everything. The list view shows the same as a table.</p><p class="sr-only wt-2d-live"role=status aria-live=polite>`);function Bn(e){let t,n,r=!1,i,[a,o]=c(``);return v(()=>{L(()=>import(`./renderer2d-DAr4IHM8.js`).then(a=>{if(r)return;try{n=a.createRenderer2D(t,{onNode:t=>e.onNode(t),onLink:t=>e.onLink(t),onBackground:()=>e.onBackground(),announce:o})}catch(t){e.onFail(t);return}n.resize(t.clientWidth,t.clientHeight),i=e.onRenderer?.(n,t),l(()=>n?.update(e.view,e.palette,{motion:e.motion,...e.selected===void 0?{}:{selected:e.selected},...e.look?{look:e.look}:{}})),l(()=>{let t=e.focus;t&&n?.focus(t.id,e.motion)});let s=!0;l(()=>{e.resetSeq,s?s=!1:n?.reset(e.motion)})}),__vite__mapDeps([0,1,2,3,4,5,6,7,8])).catch(t=>!r&&e.onFail(t));let a=new ResizeObserver(()=>n?.resize(t.clientWidth,t.clientHeight));a.observe(t),g(()=>{r=!0,a.disconnect(),i?.(),n?.destroy(),n=void 0})}),(()=>{var e=zn(),n=e.firstChild,r=n.nextSibling.nextSibling,i=t;return typeof i==`function`?b(i,n):t=n,S(r,a),e})()}var Vn=j(`<div class=wt-canvas>`);function Hn(){try{let e=document.createElement(`canvas`);return!!(e.getContext(`webgl2`)??e.getContext(`webgl`))}catch{return!1}}function Un(e){let t,n,r=!1,i;return v(()=>{L(()=>import(`./renderer3d-DWZj595u.js`).then(a=>{if(r)return;try{n=a.createRenderer(t,{onNode:t=>e.onNode(t),onLink:t=>e.onLink(t),onBackground:()=>e.onBackground()},{motion:e.motion,...e.options?{options:e.options}:{}})}catch(t){e.onFail(t);return}n.resize(t.clientWidth,t.clientHeight),i=e.onRenderer?.(n)??void 0,l(()=>e.options&&n?.setOptions(e.options)),l(()=>n?.setSelected(e.selected));let o=!1;l(()=>{n?.update(e.view,e.palette,e.motion),o||(o=!0,setTimeout(()=>n?.reset(!1),250))}),l(()=>{let t=e.focus;t&&n?.focus(t.id,e.motion)});let s=!0;l(()=>{e.resetSeq,s?s=!1:n?.reset(e.motion)})}),__vite__mapDeps([9,1,2,3,4,5,6,7,8])).catch(t=>!r&&e.onFail(t));let a=new ResizeObserver(()=>n?.resize(t.clientWidth,t.clientHeight));a.observe(t);let o=()=>document.visibilityState===`hidden`?n?.pause():n?.resume();document.addEventListener(`visibilitychange`,o),g(()=>{r=!0,i?.(),a.disconnect(),document.removeEventListener(`visibilitychange`,o),n?.destroy(),n=void 0})}),(()=>{var e=Vn(),n=t;return typeof n==`function`?b(n,e):t=e,e})()}var Wn={sphere:`circle`,cube:`square`,octahedron:`diamond`,tetrahedron:`triangle`,dodecahedron:`pentagon`};function Gn(e){switch(e.kind){case`hub`:return`hub`;case`machine`:return`hexagon`;case`user`:return`ring`;case`app`:return`hollow-triangle`;case`team`:case`cluster`:return`hollow-square`;case`role`:return e.vacant?`dashed-ring`:`pill`;case`aggregate`:return`dashed-ring`;default:return Wn[e.shape??`dodecahedron`]??`pentagon`}}var Kn=e=>e===`hexagon`||e===`ring`||e===`hollow-triangle`||e===`hollow-square`||e===`dashed-ring`||e===`pill`;function qn(e,t,n,r,i,a=-Math.PI/2){e.beginPath();for(let o=0;o<i;o++){let s=a+o*2*Math.PI/i;o===0?e.moveTo(t+r*Math.cos(s),n+r*Math.sin(s)):e.lineTo(t+r*Math.cos(s),n+r*Math.sin(s))}e.closePath()}function Jn(e,t,n,r,i){switch(t){case`square`:case`hollow-square`:e.beginPath(),e.roundRect(n-i*.82,r-i*.82,i*1.64,i*1.64,i*.28);return;case`diamond`:qn(e,n,r,i*1.08,4);return;case`triangle`:case`hollow-triangle`:qn(e,n,r+i*.15,i*1.12,3);return;case`pentagon`:qn(e,n,r,i,5);return;case`hexagon`:qn(e,n,r,i,6,0);return;case`pill`:e.beginPath(),e.roundRect(n-i*1.4,r-i*.6,i*2.8,i*1.2,i*.6);return;default:e.beginPath(),e.arc(n,r,i,0,Math.PI*2)}}function Yn(e,t,n,r,i,a,o=`#ffffff`){if(e.save(),Jn(e,t,n,r,i),Kn(t))e.lineWidth=Math.max(1.2,i*.24),e.strokeStyle=a,t===`dashed-ring`&&e.setLineDash([i*.5,i*.35]),e.stroke(),e.setLineDash([]),e.beginPath(),e.arc(n,r,i*.24,0,Math.PI*2),e.fillStyle=a,e.fill();else{let s=e.createRadialGradient(n-i*.25,r-i*.3,i*.05,n,r,i*1.1);s.addColorStop(0,o),s.addColorStop(t===`hub`?.45:.3,a),s.addColorStop(1,a),e.fillStyle=s,e.fill()}e.restore()}function Xn(e,t,n,r,i,a){if(a<=0||r<=0)return;e.save(),e.globalAlpha=Math.min(1,a);let o=e.createRadialGradient(t,n,0,t,n,r);o.addColorStop(0,Zn(i,.9)),o.addColorStop(.3,Zn(i,.32)),o.addColorStop(1,Zn(i,0)),e.fillStyle=o,e.beginPath(),e.arc(t,n,r,0,Math.PI*2),e.fill(),e.restore()}function Zn(e,t){let n=/^#([0-9a-f]{3}|[0-9a-f]{6})$/i.exec(e.trim());if(!n)return e;let r=n[1].length===3?[...n[1]].map(e=>e+e).join(``):n[1],[i,a,o]=[0,2,4].map(e=>parseInt(r.slice(e,e+2),16));return`rgba(${i}, ${a}, ${o}, ${Math.max(0,Math.min(1,t))})`}function Qn(e){let t=/^#([0-9a-f]{6})$/i.exec(e.trim());if(!t)return!1;let[n,r,i]=[0,2,4].map(e=>parseInt(t[1].slice(e,e+2),16)/255);return .2126*n+.7152*r+.0722*i<.4}var $n=j(`<canvas class=wt-glyph-swatch aria-hidden=true>`),er=j(`<details class=wt-legend-sec open><summary>Teams</summary><ul><li><span class="wt-hull wt-hull-open"aria-hidden=true></span><span>Open team <span class=muted>· solid hull: everyone may message everyone, so no lines are drawn</span></span></li><li><span class="wt-hull wt-hull-restricted"aria-hidden=true></span><span>Restricted team <span class=muted>· dashed hull: only its team paths</span></span></li><li><span class="wt-role wt-role-entry"aria-hidden=true>★</span><span>Entry role <span class=muted>· ★, bold and tinted: receives the team's work</span></span></li><li><span class=wt-role aria-hidden=true></span><span>Role <span class=muted>· a row of its members, each tied to it by a violet tether</span></span></li><li><span class="wt-role wt-role-vacant"aria-hidden=true></span><span>Vacant role <span class=muted>· hollow and dashed, labelled “vacant”: nobody holds it</span></span></li><li><span class="wt-line wt-line-solid wt-line-tether"aria-hidden=true></span><span>Staffed <span class=muted>· a tether from a role to each session that holds it</span></span></li><li><span class=wt-multi aria-hidden=true>×2</span><span>In several teams <span class=muted>· dotted outer ring and ×N, drawn once; a dashed bridge reaches each other seat`),tr=j(`<div class=wt-legend-body><details class=wt-legend-sec open><summary>Machines (color)</summary><ul></ul></details><details class=wt-legend-sec open><summary>Harness (glyph)</summary><ul></ul></details><details class=wt-legend-sec open><summary>Markers</summary><ul><li><span class=wt-region aria-hidden=true></span><span>Region <span class=muted>· a soft tinted area per group of the current Group by (a machine keeps its colour)</span></span></li></ul></details><details class=wt-legend-sec open><summary>State (ring)</summary><ul></ul></details><details class=wt-legend-sec open><summary>Interactions (line)</summary><ul><li><span class="wt-line wt-line-solid wt-line-structure"aria-hidden=true></span><span>Structure <span class=muted>· thin grey: hub → group → session → subsession</span></span></li></ul><p class="muted wt-legend-note">Fibers brighten towards the receiver; brighter fibers carry more messages. Pulses travel along a fiber after a message, fade with its age, and stop once nothing on it is working or waiting.`),nr=j(`<button type=button class="btn small wt-compact"title="Hide the explanations">Compact`),rr=j(`<li><span class=wt-swatch role=img></span><span><span class=muted> · <!> sessions`),ir=j(`<li><span> <span class=muted>· <!> · `),ar=j(`<li><span> <span class=muted>· `),or=j(`<li><span aria-hidden=true></span><span> <span class=muted>· `),sr={sphere:`circle`,cube:`square`,octahedron:`diamond`,tetrahedron:`triangle`,dodecahedron:`pentagon`},cr={policy:`dotted; in 2D an arrowhead at one end is one-way, at both ends two-way`,denied:`dashed red with ✕ and the count`},lr=[{glyph:`hub`,color:`--accent`,label:`Hub`,text:`the bright core in the middle`},{glyph:`ring`,color:`--text`,label:`You`,text:`hollow circle`},{glyph:`hollow-triangle`,color:`--text`,label:`App`,text:`hollow triangle`},{glyph:`hexagon`,color:`--muted`,label:`Machine`,text:`hollow hexagon, at the head of its region`},{glyph:`hollow-square`,color:`--violet`,label:`Team or cluster`,text:`hollow square`},{glyph:`dashed-ring`,color:`--muted`,label:`Folded sessions`,text:`dashed ring with the count`}];function ur(e){let t,n=()=>e.size??14,[r,i]=c(0);return v(()=>{let e=matchMedia(`(prefers-color-scheme: dark)`),t=()=>i(e=>e+1);e.addEventListener(`change`,t),g(()=>e.removeEventListener(`change`,t))}),l(()=>{ne(),r();let i=window.devicePixelRatio||1,a=n();t.width=Math.round(a*i),t.height=Math.round(a*i);let o=t.getContext(`2d`);if(!o)return;o.setTransform(i,0,0,i,0,0),o.clearRect(0,0,a,a);let s=getComputedStyle(t).getPropertyValue(e.color).trim()||`#888888`;Yn(o,e.glyph,a/2,a/2,a*.36,s,`#ffffff`)}),(()=>{var e=$n(),r=t;return typeof r==`function`?b(r,e):t=e,f(t=>{var r=`${n()}px`,i=`${n()}px`;return r!==t.e&&C(e,`width`,t.e=r),i!==t.t&&C(e,`height`,t.t=i),t},{e:void 0,t:void 0}),e})()}var dr={pulse:`pulsing ring`,thin:`thin ring`,thick:`thick ring`,double:`double ring`,broken:`broken ring`,none:`no ring`},fr=`watchtower.legendCompact`;function pr(e){let n=()=>e.view.teams.length>0||e.view.nodes.some(e=>e.teams||e.kind===`role`),[a,o]=c(mr(fr)===`1`),s=e=>{o(e);try{localStorage.setItem(fr,e?`1`:`0`)}catch{}};return t(xt,{id:`wt-legend`,title:`Legend`,get class(){return e.mode===`list`&&!e.phone?`wt-legend wt-panel-inline`:`wt-legend wt-pop wt-pop-legend`},get phone(){return e.phone},get autoFocus(){return e.autoFocus},opener:`wt-dock-legend`,get onClose(){return e.onClose},get actions(){return(()=>{var e=nr();return e.$$click=()=>s(!a()),f(()=>w(e,`aria-pressed`,a())),e})()},get children(){var o=tr(),s=o.firstChild,c=s.firstChild.nextSibling,l=s.nextSibling,u=l.firstChild.nextSibling,d=l.nextSibling,p=d.firstChild.nextSibling,m=p.firstChild,h=d.nextSibling,g=h.firstChild.nextSibling,_=h.nextSibling,v=_.firstChild.nextSibling,y=v.firstChild;return S(c,t(r,{get each(){return e.view.machines},children:e=>(()=>{var t=rr(),n=t.firstChild,r=n.nextSibling,i=r.firstChild,a=i.firstChild.nextSibling;return a.nextSibling,S(n,()=>e.symbol),S(r,()=>e.label,i),S(i,()=>e.sessions,a),S(i,()=>e.online?``:` · offline`,null),f(t=>{var r=`var(${e.color})`,i=`Marker ${e.symbol}`;return r!==t.e&&C(n,`color`,t.e=r),i!==t.t&&w(n,`aria-label`,t.t=i),t},{e:void 0,t:void 0}),t})()})),S(u,t(r,{get each(){return e.view.harnesses},children:e=>(()=>{var n=ir(),r=n.firstChild,i=r.firstChild,a=i.nextSibling,o=a.firstChild.nextSibling;return o.nextSibling,S(n,t(ur,{get glyph(){return sr[e.shape]},color:`--muted`}),r),S(r,()=>e.label,i),S(a,()=>pe[e.shape],o),S(a,()=>e.sessions,null),n})()})),S(p,t(r,{get each(){return[...lr]},children:e=>(()=>{var n=ar(),r=n.firstChild,i=r.firstChild,a=i.nextSibling;return a.firstChild,S(n,t(ur,{get glyph(){return e.glyph},get color(){return e.color}}),r),S(r,()=>e.label,i),S(a,()=>e.text,null),n})()}),m),S(g,t(r,{get each(){return[...he]},children:e=>(()=>{var t=or(),n=t.firstChild,r=n.nextSibling,i=r.firstChild,a=i.nextSibling;return a.firstChild,S(r,()=>R[e],i),S(a,()=>dr[Le[e]],null),f(t=>{var r=`wt-ring wt-ring-${Le[e]}`,i=`var(${z[e]})`;return r!==t.e&&A(n,t.e=r),i!==t.t&&C(n,`border-color`,t.t=i),t},{e:void 0,t:void 0}),t})()})),S(o,t(i,{get when(){return n()},get children(){return er()}}),_),S(v,t(r,{get each(){return[...ce()]},children:e=>(()=>{var t=or(),n=t.firstChild,r=n.nextSibling,i=r.firstChild,a=i.nextSibling;return a.firstChild,S(r,()=>e.label,i),S(a,()=>cr[e.kind]??`solid, dashed while waiting`,null),f(r=>{var i=e.description,a=`wt-line wt-line-${e.style}`,o=`var(${e.color})`;return i!==r.e&&w(t,`title`,r.e=i),a!==r.t&&A(n,r.t=a),o!==r.a&&C(n,`border-color`,r.a=o),r},{e:void 0,t:void 0,a:void 0}),t})()}),y),f(()=>o.classList.toggle(`wt-legend-compact`,!!a())),o}})}function mr(e){try{return localStorage.getItem(e)}catch{return null}}x([`click`]);var hr=j(`<p class=muted>No sessions match.`),gr=j(`<p class=muted>No interactions match.`),_r=j(`<div class=wt-list><table class=wt-table aria-label=Sessions><thead><tr><th scope=col>Session</th><th scope=col>Machine</th><th scope=col>Harness</th><th scope=col>State</th><th scope=col>Sent</th><th scope=col>Received</th></tr></thead><tbody></tbody></table><table class=wt-table aria-label=Interactions><thead><tr><th scope=col>Kind</th><th scope=col>From → to</th><th scope=col>Messages</th><th scope=col>Last</th></tr></thead><tbody>`),vr=j(`<span class=muted aria-hidden=true>↳ `),yr=j(`<tr><td><button type=button class=wt-link></button></td><td></td><td></td><td></td><td></td><td>`),br=j(`<span class=muted> (<!>)`),xr=j(`<tr><td></td><td><button type=button class=wt-link> → </button></td><td></td><td>`);function Sr(e){return(()=>{var n=_r(),a=n.firstChild,o=a.firstChild.nextSibling,s=a.nextSibling,c=s.firstChild.nextSibling;return S(n,()=>e.children,a),S(o,t(r,{get each(){return e.nodes},children:n=>(()=>{var r=yr(),a=r.firstChild,o=a.firstChild,s=a.nextSibling,c=s.nextSibling,l=c.nextSibling,u=l.nextSibling,d=u.nextSibling;return S(a,t(i,{get when(){return n.depth>0},get children(){return vr()}}),o),o.$$click=()=>e.onNode(n.id),S(o,()=>n.label),S(s,()=>n.machine),S(c,()=>n.harness),S(l,()=>n.state),S(u,()=>n.sent),S(d,()=>n.received),f(t=>{var i=e.selected===n.id,o=`${8+n.depth*16}px`;return i!==t.e&&r.classList.toggle(`selected`,t.e=i),o!==t.t&&C(a,`padding-left`,t.t=o),t},{e:void 0,t:void 0}),r})()})),S(n,t(i,{get when(){return!e.nodes.length},get children(){return hr()}}),s),S(c,t(r,{get each(){return e.edges},children:n=>(()=>{var r=xr(),a=r.firstChild,o=a.nextSibling,s=o.firstChild,c=s.firstChild,l=o.nextSibling,u=l.nextSibling;return S(a,()=>n.kind,null),S(a,t(i,{get when(){return n.style!==`solid`},get children(){var e=br(),t=e.firstChild.nextSibling;return t.nextSibling,S(e,()=>n.style===`dashed`?`waiting`:`permitted path`,t),e}}),null),s.$$click=()=>e.onEdge(n.id),S(s,()=>n.from,c),S(s,()=>n.to,null),S(l,()=>n.count),S(u,(()=>{var e=D(()=>!!n.lastAt);return()=>e()?k(n.lastAt):`—`})()),f(t=>{var i=e.selected===n.id,a=`${n.kind} from ${n.from} to ${n.to}`;return i!==t.e&&r.classList.toggle(`selected`,t.e=i),a!==t.t&&w(s,`aria-label`,t.t=a),t},{e:void 0,t:void 0}),r})()})),S(n,t(i,{get when(){return!e.edges.length},get children(){return gr()}}),null),n})()}x([`click`]);var[Cr,wr]=c(),[Tr,Er]=c(),[Dr,Or]=c(),kr=0,X=Cr,Z=Tr,Ar=Dr,Q=(e=`pick`)=>wr(e);function jr(){wr(void 0),Er(void 0)}var Mr=Er,Nr=e=>Or({...e,seq:++kr}),Pr=(e,t)=>getComputedStyle(document.documentElement).getPropertyValue(e).trim()||t;function Fr(e,t,n,r){let i=Math.atan2(n.y-t.y,n.x-t.x);e.beginPath(),e.moveTo(n.x,n.y),e.lineTo(n.x-r*Math.cos(i-.4),n.y-r*Math.sin(i-.4)),e.lineTo(n.x-r*Math.cos(i+.4),n.y-r*Math.sin(i+.4)),e.closePath(),e.fill()}function Ir(e,t,n){let r=Math.hypot(t.x-e.x,t.y-e.y)||1,i=(t.x-e.x)/r,a=(t.y-e.y)/r;return[{x:e.x+i*n,y:e.y+a*n},{x:t.x-i*n,y:t.y-a*n}]}function Lr(e,t,n){let r,i,a=(t,n)=>{let a=Z(),o=e.layout();if(!a||!o)return;c(a.id,o.positions,n);let s=e=>o.positions.get(`role:${a.id}:${e}`),l=Pr(`--accent`,`#3b82f6`);if(t.lineWidth=2/Math.max(.5,n.k),t.strokeStyle=l,t.fillStyle=l,t.font=`${11/Math.max(.6,n.k)}px system-ui, sans-serif`,t.textAlign=`center`,a.spec.mode===`restricted`)for(let e of a.spec.edges){let n=s(e.from),r=s(e.to);if(!n||!r)continue;let[i,a]=Ir(n,r,16);t.setLineDash([6,4]),t.beginPath(),t.moveTo(i.x,i.y),t.lineTo(a.x,a.y),t.stroke(),t.setLineDash([]),Fr(t,i,a,9),e.direction===`two-way`&&Fr(t,a,i,9),t.fillText(`${e.kinds.join(`+`)}${e.direction===`two-way`?` ⇄`:``}`,(i.x+a.x)/2,(i.y+a.y)/2-6)}if(r?.moved&&r.at){let e=o.positions.get(r.from);if(e){let a=i?o.positions.get(i)??r.at:r.at;t.setLineDash([]),t.lineWidth=3/Math.max(.5,n.k),t.beginPath(),t.moveTo(e.x,e.y),t.lineTo(a.x,a.y),t.stroke(),Fr(t,e,a,11),i&&(t.beginPath(),t.arc(a.x,a.y,20,0,Math.PI*2),t.stroke())}}},o=``,c=(e,n,r)=>{let i=t.getBoundingClientRect(),a={};for(let[t,o]of n)(Ze(t,e)!==void 0||t.startsWith(`ses_`))&&(a[t]=[Math.round(i.left+o.x*r.k+r.x),Math.round(i.top+o.y*r.k+r.y)]);let s=JSON.stringify(a);s!==o&&(t.dataset.editorPoints=o=s)},u=e=>{let t=Z();return!!t&&(Ze(e,t.id)!==void 0||e.startsWith(`ses_`))},d=n=>{if(n.button!==0||!Z())return;let i=e.hitTest(n.clientX,n.clientY);i?.type===`node`&&u(i.id)&&(n.stopPropagation(),n.preventDefault(),n.target.setPointerCapture?.(n.pointerId),r={from:i.id,start:{x:n.clientX,y:n.clientY},moved:!1,pointer:n.pointerId},t.dataset.editorDrag=`pending`)},f=n=>{if(!r||n.pointerId!==r.pointer||(n.stopPropagation(),!r.moved&&Math.hypot(n.clientX-r.start.x,n.clientY-r.start.y)>5&&(r.moved=!0),!r.moved))return;r.at=e.toWorld(n.clientX,n.clientY);let o=e.hitTest(n.clientX,n.clientY),s=Z();i=o?.type===`node`&&s&&Ae(s.id,r.from,o.id)?o.id:void 0,t.dataset.editorDrag=i?`over`:`dragging`,e.setOverlay(a)},p=o=>{if(!r||o.pointerId!==r.pointer)return;o.stopPropagation();let s=r;r=void 0;let c=i;if(i=void 0,delete t.dataset.editorDrag,e.setOverlay(a),!s.moved)return n(s.from);let l=Z(),u=l&&c?Ae(l.id,s.from,c):void 0;u&&Nr(u)},m=()=>{r=void 0,i=void 0,delete t.dataset.editorDrag,e.setOverlay(a)};t.addEventListener(`pointerdown`,d,!0),t.addEventListener(`pointermove`,f,!0),t.addEventListener(`pointerup`,p,!0),t.addEventListener(`pointercancel`,m,!0);let h=s(n=>(l(()=>{let n=Z();t.dataset.editorPaths=n?String(n.spec.mode===`restricted`?n.spec.edges.length:0):``,e.setOverlay(n?a:void 0)}),n));return()=>{h(),t.removeEventListener(`pointerdown`,d,!0),t.removeEventListener(`pointermove`,f,!0),t.removeEventListener(`pointerup`,p,!0),t.removeEventListener(`pointercancel`,m,!0),e.setOverlay(void 0)}}var Rr=j(`<aside class="wt-slider wt-sheetable te-panel"aria-label="Team editor">`),zr=j(`<div class=wt-slider-head><h2>Teams`),Br=j(`<p role=alert class=wt-error>`),Vr=j(`<ul class="te-list te-team-list">`),Hr=j(`<section class=wt-section aria-labelledby=te-teams><div class="te-row te-picker-head"><h3 id=te-teams>Open a team</h3><button type=button class="btn small primary">New team</button></div><p class=muted>Teams also have their own page: <a href=/teams>Teams</a>.`),Ur=j(`<div class=wt-slider-body>`),Wr=j(`<p class=muted>No teams yet. Create one to staff roles and give it work.`),Gr=j(`<li><button type=button class=te-team-open><strong></strong><span class=muted>#`),Kr=j(`<div class=wt-slider-head><h2>`),qr=j(`<button type=button class="btn small">All teams`),Jr=j(`<div class="te-row te-panel-links"><span class=muted> #</span><a class="btn small">Open team page`),Yr=j(`<section class=wt-section aria-labelledby=te-members><h3 id=te-members>Members`),Xr=j(`<section class=wt-section aria-labelledby=te-intake><h3 id=te-intake>Submit a task to the team</h3><h4 class=te-sub>Recent tasks`),Zr=j(`<section class="wt-section te-draft"aria-labelledby=te-draft><h3 id=te-draft>Edit the team (draft)</h3><h4 class=te-sub id=te-details>Details</h4><h4 class=te-sub id=te-roles>Roles</h4><h4 class=te-sub id=te-paths>Communication paths`),Qr=j(`<section class=wt-section aria-labelledby=te-life><h3 id=te-life>Team</h3><div class=te-row><button type=button class="btn small"></button><button type=button class="btn small">All teams`),$r=j(`<div class="wt-slider-body te-body">`),ei=j(`<dt>Paths`),ti=j(`<dd>`),ni=j(`<dt>Tags`),ri=j(`<section class=wt-section aria-label="Team overview"><dl class=wt-facts><dt>Communication</dt><dd></dd><dt>Entry role</dt><dd></dd><dt>Roles</dt><dd></dd></dl><h3>Members</h3><button type=button class=btn>Edit with form`);function ii(e){return(()=>{var n=Rr();return S(n,t(St,{onClose:jr}),null),S(n,t(i,{get when(){return X()===`pick`},get fallback(){return t(i,{get when(){return X()},keyed:!0,children:n=>t(oi,_({id:n},e))})},get children(){return t(ai,e)}}),null),n})()}function ai(n){let[a,o]=c(),[s,l]=c(``),[u,d]=c(!1);return v(async()=>{try{o(await Qe())}catch(t){l(t instanceof e&&t.status===404?`This hub doesn't have teams yet.`:B(t).message)}}),[(()=>{var e=zr();return e.firstChild,S(e,t(T,{icon:`close`,label:`Close the team editor`,onClick:jr}),null),e})(),(()=>{var e=Ur();return S(e,t(i,{get when(){return s()},get children(){var e=Br();return S(e,s),e}}),null),S(e,t(i,{get when(){return a()},get children(){var e=Hr(),n=e.firstChild,o=n.firstChild.nextSibling,s=n.nextSibling;return o.$$click=()=>d(!0),S(e,t(i,{get when(){return a().length},get fallback(){return Wr()},get children(){var e=Vr();return S(e,t(r,{get each(){return a()},children:e=>(()=>{var t=Gr(),n=t.firstChild,r=n.firstChild,i=r.nextSibling;return i.firstChild,n.$$click=()=>Q(e.id),S(r,()=>e.title),S(i,()=>e.name,null),S(i,()=>e.paused?` · paused`:``,null),S(i,()=>e.hasDraft?` · draft`:``,null),f(()=>w(n,`aria-label`,`Edit ${e.title}`)),t})()})),e}}),s),e}}),null),e})(),t(Be,{get open(){return u()},onClose:()=>d(!1),onCreated:e=>{n.onChanged(),Q(e)}})]}function oi(e){let n=Pe(e.id,{intake:!0,onChanged:e.onChanged}),[r,a]=c(e.phone);v(()=>void n.load()),Je(()=>n.refresh(),n.openWork),l(()=>{let e=n.team(),t=n.spec();e&&t&&Mr({id:e.id,name:e.name,spec:t,...n.roster()?{seats:n.roster().seats}:{}})}),g(()=>Mr(void 0));let s,u,d=new Map,p=t=>e.snap?.nodes.find(e=>e.id===t)?.label??t;return l(o(Ar,e=>{if(e&&n.spec()&&!r()){if(e.type===`connect`)u?.prefill(e.from,e.to),n.setNotice({kind:`ok`,text:`Path ${e.from} → ${e.to}: choose its direction and kinds, then Add path.`});else if(e.type===`attach`){if(!n.publishedRoles().has(e.role))return n.setNotice({kind:`error`,text:`${e.role} isn't published yet: publish the draft, then staff it.`});n.setNotice({kind:`ok`,text:`Add ${p(e.sessionID)} to ${e.role}? Check its other teams, then confirm.`}),s?.add(e.role,e.sessionID)}else e.type===`role`&&queueMicrotask(()=>d.get(e.role)?.focus())}},{defer:!0})),[(()=>{var e=Kr(),r=e.firstChild;return S(r,(()=>{var e=D(()=>!!n.team());return()=>e()?`Team: ${n.spec()?.title||n.team().title}`:`Team`})()),S(e,t(T,{icon:`close`,label:`Close the team editor`,onClick:jr}),null),e})(),(()=>{var o=$r();return E(o,`keydown`,n.onKey,!0),S(o,t(i,{get when(){return n.loadError()},get children(){return[(()=>{var e=Br();return S(e,()=>n.loadError()),e})(),(()=>{var e=qr();return e.$$click=()=>Q(`pick`),e})()]}}),null),S(o,t(i,{get when(){return D(()=>!!n.team())()&&n.spec()},get children(){return[(()=>{var e=Jr(),r=e.firstChild;r.firstChild;var i=r.nextSibling;return S(e,t(ze,{c:n}),r),S(r,()=>n.team().name,null),f(()=>w(i,`href`,Ke(n.team().id))),e})(),t(Re,{get notice(){return n.notice()}}),t(i,{get when(){return!r()},get fallback(){return t(si,{c:n,get snap(){return e.snap},onEdit:()=>a(!1)})},get children(){return[(()=>{var r=Yr();return r.firstChild,S(r,t(V,{c:n,get snap(){return e.snap},canvasHint:!0,handle:e=>s=e}),null),r})(),(()=>{var r=Xr(),i=r.firstChild.nextSibling;return S(r,t(We,{c:n}),i),S(r,t(He,{c:n,get snap(){return e.snap},limit:5}),null),r})(),(()=>{var e=Zr(),r=e.firstChild.nextSibling,i=r.nextSibling,a=i.nextSibling;return S(e,t(De,{c:n}),r),S(e,t(Fe,{c:n,withMode:!0}),i),S(e,t(Me,{c:n,roleInput:(e,t)=>d.set(e,t)}),a),S(e,t(Xe,{c:n,canvasHint:!0,handle:e=>u=e}),null),e})()]}}),(()=>{var e=Qr(),t=e.firstChild.nextSibling.firstChild,r=t.nextSibling;return t.$$click=()=>void n.togglePause(),S(t,()=>n.team().paused?`Resume team`:`Pause team`),r.$$click=()=>Q(`pick`),f(()=>t.disabled=n.busy()),e})()]}}),null),o})()]}function si(e){let n=()=>e.c.read().published;return(()=>{var r=ri(),a=r.firstChild,o=a.firstChild.nextSibling,s=o.nextSibling.nextSibling,c=s.nextSibling.nextSibling,l=a.nextSibling.nextSibling;return S(o,()=>n().mode===`open`?`Open: everyone may message everyone`:`Restricted: only the drawn paths`),S(s,()=>n().entryRole),S(c,()=>n().roles.map(e=>e.label?`${e.name} (${e.label})`:e.name).join(`, `)),S(a,t(i,{get when(){return n().mode===`restricted`},get children(){return[ei(),(()=>{var e=ti();return S(e,()=>n().edges.map(e=>`${e.from} ${e.direction===`two-way`?`⇄`:`→`} ${e.to} (${e.kinds.join(`+`)})`).join(`, `)||`none`),e})()]}}),null),S(a,t(i,{get when(){return n().tags?.length},get children(){return[ni(),(()=>{var e=ti();return S(e,()=>n().tags.join(`, `)),e})()]}}),null),S(r,t(V,{get c(){return e.c},get snap(){return e.snap}}),l),E(l,`click`,e.onEdit,!0),r})()}x([`click`,`keydown`]);var ci=G({default:()=>Mi}),li=j(`<p role=status class=wt-notice>Older interactions may have been evicted: the hub keeps only the most recent messages.`),ui=j(`<p role=status class=wt-notice>The hub cut this graph at its limits. Narrow the time window to see everything.`),di=j(`<p role=status class=wt-notice> messages with archived or deleted sessions are left out.`),fi=j(`<p role=status class=wt-notice>Subsessions are folded into their root to keep the picture readable. The list shows every session.`),pi=j(`<p role=status class=wt-notice>Sessions are folded per group to keep the picture readable. Narrow the filters or pick another grouping to see them; the list shows every session.`),mi=j(`<p role=status class=wt-notice>3D needs WebGL, which this browser can't use, so here's the 2D view.`),hi=j(`<p role=status class=wt-notice>This graph is too large to draw, so here's the list. Narrow the filters or group by machine.`),gi=j(`<p role=alert class="wt-notice wt-error">Couldn't refresh: <!>. Showing the last snapshot. <button type=button class="btn small">Retry`),_i=j(`<p role=alert class=wt-error>Could not load the interaction graph: `),vi=j(`<button type=button class=btn>Retry`),yi=j(`<div class=wt-center>`),bi=j(`<div class=wt-center><p class=muted>Loading…`),xi=j(`<a class="btn primary wt-empty-cta"href=/settings#machines>Connect a machine`),Si=j(`<p class="muted small">In OpenCode run /hub → Connect to a hub…, then approve the machine in Settings.`),Ci=j(`<div class=wt-empty><p class=muted>No sessions or interactions in this window yet.`),wi=j(`<div class=wt-page><header class="topbar wt-top"><h1 class=title>Watchtower</h1><span class="wt-live muted"role=status></span></header><div class=wt-notices></div><div class=wt-stage><div class=wt-overlay>`),Ti=j(`<p class=muted>`),Ei=j(`<p class="muted small">Start a session on a machine, or pick a longer time window in Filters.`),Di=3e3,Oi=3e4;function ki(){let e=matchMedia(`(prefers-color-scheme: dark)`),[t,n]=c(0),r=()=>n(e=>e+1);return e.addEventListener(`change`,r),g(()=>e.removeEventListener(`change`,r)),u(()=>{ne(),t();let e=getComputedStyle(document.documentElement),n=new Map;return t=>{let r=n.get(t);return r===void 0&&n.set(t,r=e.getPropertyValue(t).trim()||`#888888`),r}})}function Ai(){let e=matchMedia(`(prefers-reduced-motion: reduce)`),[t,n]=c(e.matches),r=()=>n(e.matches);return e.addEventListener(`change`,r),g(()=>e.removeEventListener(`change`,r)),t}var $={get(e){try{return localStorage.getItem(e)}catch{return null}},set(e,t){try{localStorage.setItem(e,t)}catch{}}},ji=1100;function Mi(e){try{Ee(localStorage)}catch{}let[r,s]=c(Ve($.get(me))),m=u(()=>Ye(p().search,r()),void 0,{equals:(e,t)=>Ue(e)===Ue(t)}),y=e=>n(`/watchtower${Ue(e,r()??`3d`)}`,{replace:!0}),x=e=>y({...m(),...e}),E=e=>{$.set(me,e),s(e),x({view:e})},O=()=>m().q??``,[k,A]=c(!1),[j,M]=c(innerWidth),N=()=>!F()&&j()>=ji,[P,ne]=c(!F()&&mt($.get(`watchtower.filtersOpen`),!1)),[I,L]=c(!F()&&mt($.get(`watchtower.legendOpen`),innerWidth>=1280));P()&&I()&&innerWidth<1280&&L(!1);let[R,oe]=c(),se=e=>{oe(e?`filters`:void 0),ne(e),$.set(ct,e?`1`:`0`),e&&fe(`filters`)},ce=e=>{oe(e?`legend`:void 0),L(e),$.set(lt,e?`1`:`0`),e&&fe(`legend`)},fe=e=>{e!==`filters`&&!N()&&ne(!1),e!==`legend`&&!N()&&L(!1),e!==`side`&&F()&&(a(m).selected&&K(void 0),X()&&jr())},pe=Ai(),he=()=>!pe()&&!k(),ge=ki(),[ve]=c(Hn()),[be,Se]=c(!1),[De,Oe]=c(!1),[ke,Ae]=c(),[je,Me]=c(0),[Pe,Fe]=c(),Le=u(()=>m().window),[z,Re]=c(),[B,ze]=c(),[Be,He]=c(!0),We=0,Ke,qe=0,V=async()=>{clearTimeout(Ke),Ke=void 0;let e=++qe;We=Date.now(),He(!0);try{let t=await ye(de({window:a(Le)},Date.now()));if(e!==qe)return;Re(t),ze(void 0)}catch(t){if(e!==qe)return;ze(ae(t))}finally{e===qe&&He(!1)}},Je=()=>{Ke||document.visibilityState===`hidden`||(Ke=setTimeout(()=>void V(),Math.max(0,We+Di-Date.now())))};l(o(Le,()=>void V())),v(()=>{let e=te(e=>Te(e)&&Je()),t=setInterval(()=>document.visibilityState===`visible`&&Date.now()-We>=Oi&&void V(),5e3),n=()=>document.visibilityState===`visible`&&Date.now()-We>=Oi&&void V();document.addEventListener(`visibilitychange`,n),g(()=>{e(),clearInterval(t),clearTimeout(Ke),document.removeEventListener(`visibilitychange`,n)})});let Xe=u(()=>{let e=z(),t=Z();return e&&t?Ne(e,t,t.spec,t.seats):e});g(jr),v(()=>{let e=p().searchParams.get(`edit`);e&&Q(e)}),l(o(X,e=>e&&e!==`pick`&&a(m).groupBy!==`team`&&x({groupBy:`team`})));let Qe=u(()=>ie(m())),H=u(()=>{let e=Xe();return e?le(e,Qe(),{now:e.at,reducedMotion:!he()}):void 0}),U=u(()=>{let e=Ie({webgl:ve()&&!be(),tooLarge:H()?.tooLarge??!1,chosen:m().view});return e.mode===`2d`&&De()?{mode:`list`,reason:`chosen`}:e}),$e=()=>U().reason,et=()=>U().mode===`3d`||U().mode===`2d`,W=u(()=>{let e=z();return e?Ce(e):{teams:[],roles:[],projects:[],workspaces:[],tags:[],metaKeys:[]}}),tt=u(()=>(z()?.nodes??[]).filter(e=>e.kind===`team`)),nt=u(()=>ut(m(),{machine:e=>H()?.machines.find(t=>t.id===e)?.label??e,harness:ue,team:e=>W().teams.find(t=>t.id===e)?.label??e})),rt=u(()=>{let e=Xe(),t=H();return e&&t&&U().mode===`list`?we(e,t):{nodes:[],edges:[]}}),it=u(()=>[...new Set((z()?.nodes??[]).filter(e=>e.kind===`session`).map(Ge))].sort((e,t)=>ue(e).localeCompare(ue(t)))),at=u(()=>{let e=z();return!!e&&!e.nodes.some(e=>e.kind===`session`)&&!e.edges.length}),G=()=>m().selected,K=e=>x({selected:e}),ot=u(()=>{let e=z(),t=G();return e&&t?.type===`node`?_e(e,t.id):void 0}),st=u(()=>{let e=z(),t=G();return e&&t?.type===`edge`?xe(e,t.id):void 0});l(o([G,X],([e,t])=>(e||t)&&F()&&fe(`side`)));let q=e=>{if(e.startsWith(`agg:`)||e.startsWith(`group:`))return;let t=Z(),n=t?Ze(e,t.id):void 0;if(n!==void 0)return Nr({type:`role`,role:n});let r=/^role:([^:]+):/.exec(e);K({type:`node`,id:r?r[1]:e})},ft=e=>{let t=z(),n=[...e.edgeIDs].sort((e,n)=>(t?.edges.find(e=>e.id===n)?.count??0)-(t?.edges.find(t=>t.id===e)?.count??0))[0];n&&K({type:`edge`,id:n})},pt=()=>{let e=H()?.nodes.find(e=>e.match&&!e.id.startsWith(`agg:`)&&!e.id.startsWith(`group:`)&&!e.id.startsWith(`role:`));e&&(K({type:`node`,id:e.id}),Ae({id:e.id,seq:(ke()?.seq??0)+1}))},ht=()=>!!(z()&&G())||!!X(),gt=()=>F()?`0px`:X()?`min(440px, 100%)`:z()&&G()?`min(380px, 100%)`:`0px`,J;return v(()=>{let e=new ResizeObserver(()=>M(J.clientWidth));e.observe(J),M(J.clientWidth),P()&&I()&&!N()&&L(!1);let t=e=>{e.key!==`Escape`||e.defaultPrevented||ee()||G()||X()||(P()?se(!1):I()&&ce(!1))};document.addEventListener(`keydown`,t),g(()=>{e.disconnect(),document.removeEventListener(`keydown`,t)})}),(()=>{var e=wi(),n=e.firstChild,r=n.firstChild,a=r.nextSibling,o=n.nextSibling,s=o.nextSibling,c=s.firstChild;S(n,t(i,{get when(){return F()},get children(){return t(T,{icon:`menu`,label:`Open sidebar`,onClick:re})}}),r),S(a,()=>Be()&&z()?`Updating…`:``),S(n,t(i,{get when(){return!F()},get children(){return t(T,{icon:`sidebar`,label:`Toggle sidebar (⌘B)`,onClick:re})}}),null),S(o,t(i,{get when(){return z()?.truncated},get children(){return li()}}),null),S(o,t(i,{get when(){return z()?.capped},get children(){return ui()}}),null),S(o,t(i,{get when(){return(z()?.hiddenMessages??0)>0},get children(){var e=di(),t=e.firstChild;return S(e,()=>z().hiddenMessages,t),e}}),null),S(o,t(i,{get when(){return D(()=>H()?.lod===`roots`)()&&et()},get children(){return fi()}}),null),S(o,t(i,{get when(){return D(()=>H()?.lod===`groups`)()&&et()},get children(){return pi()}}),null),S(o,t(i,{get when(){return D(()=>U().mode===`2d`)()&&$e()===`webgl`},get children(){return mi()}}),null),S(o,t(i,{get when(){return D(()=>U().mode===`list`)()&&$e()===`large`},get children(){return hi()}}),null),S(o,t(i,{get when(){return D(()=>!!B())()&&z()},get children(){var e=gi(),t=e.firstChild.nextSibling,n=t.nextSibling.nextSibling;return S(e,()=>B().message,t),n.$$click=()=>void V(),e}}),null);var l=J;return typeof l==`function`?b(l,s):J=s,S(s,t(d,{get children(){return[t(h,{get when(){return D(()=>!z())()&&B()},get children(){var e=yi();return S(e,t(i,{get when(){return B().kind!==`missing`},get fallback(){return(()=>{var e=Ti();return S(e,()=>B().message),e})()},get children(){return[(()=>{var e=_i();return e.firstChild,S(e,()=>B().message,null),e})(),(()=>{var e=vi();return e.$$click=()=>void V(),e})()]}})),e}}),t(h,{get when(){return!z()},get children(){return bi()}}),t(h,{get when(){return D(()=>U().mode===`3d`)()&&H()},children:e=>t(Un,_({get view(){return e()},get palette(){return ge()},get motion(){return he()},get focus(){return ke()},get resetSeq(){return je()},onNode:q,onLink:ft,onBackground:()=>void 0,onFail:()=>Se(!0)},()=>G()?.type===`node`?{selected:G().id}:{},{onRenderer:e=>(Fe(e),()=>Fe(void 0))}))}),t(h,{get when(){return D(()=>U().mode===`2d`)()&&H()},children:e=>t(Bn,_({get view(){return e()},get palette(){return ge()},get motion(){return he()}},()=>G()?.type===`node`?{selected:G().id}:{},{get focus(){return ke()},get resetSeq(){return je()},onNode:q,onLink:ft,onBackground:()=>void 0,onFail:()=>Oe(!0),onRenderer:(e,t)=>Lr(e,t,q)}))}),t(h,{get when(){return U().mode===`list`},get children(){return t(Sr,{get nodes(){return rt().nodes},get edges(){return rt().edges},get selected(){return G()?.id},onNode:q,onEdge:e=>K({type:`edge`,id:e}),get children(){return t(i,{get when(){return D(()=>!(!I()||F()))()&&H()},children:e=>t(pr,{get view(){return e()},mode:`list`,phone:!1,get autoFocus(){return R()===`legend`},onClose:()=>ce(!1)})})}})}})]}}),c),S(s,t(i,{get when(){return at()},get children(){var e=Ci();return e.firstChild,S(e,t(i,{get when(){return!z().nodes.some(e=>e.kind===`machine`)},get fallback(){return Ei()},get children(){return[xi(),Si()]}}),null),f(()=>e.classList.toggle(`wt-empty-drawn`,!!et())),e}}),c),S(c,t(Rn,{get chips(){return nt()},onRemove:e=>x(e.clear),onClear:()=>x(Fn)}),null),S(c,t(i,{get when(){return D(()=>!!(I()&&H()))()&&(et()||F())},get children(){return t(pr,{get view(){return H()},get mode(){return D(()=>U().mode===`2d`)()?`2d`:U().mode===`list`?`list`:`3d`},get phone(){return F()},get autoFocus(){return R()===`legend`},onClose:()=>ce(!1)})}}),null),S(c,t(i,{get when(){return D(()=>!!P())()&&z()},get children(){return t(Ln,{get url(){return m()},get phone(){return F()},get autoFocus(){return R()===`filters`},get machines(){return(H()?.machines??[]).map(e=>({value:e.id,label:e.label}))},get harnesses(){return it().map(e=>({value:e,label:ue(e)}))},get choices(){return W()},get teamValue(){return tt().find(e=>e.id===m().team||e.name===m().team)?.id??m().team},setURL:x,go:y,onClose:()=>se(!1)})}}),null),S(c,t(gn,_({get view(){return m().view},get drawn(){return et()},get filtersOpen(){return P()},get filterCount(){return dt(m())},get legendOpen(){return I()},get teamsOpen(){return!!X()},get paused(){return k()},get reduced(){return pe()},get panelOpen(){return P()||I()&&F()||F()&&ht()},get search(){return O()}},()=>O().trim()?{matches:H()?.matches??0}:{},{setView:E,onFilters:()=>se(!P()),onLegend:()=>ce(!I()),onTeams:()=>X()?jr():Q(),onHub:()=>K({type:`node`,id:`hub`}),onReset:()=>Me(e=>e+1),onPause:()=>A(!k()),get canRelayout(){return D(()=>U().mode===`3d`)()&&!!Pe()},onRelayout:()=>Pe()?.relayout(),onSearch:e=>x({q:e.trim()?e:void 0}),onSearchEnter:pt})),null),S(s,t(i,{get when(){return D(()=>!!(z()&&G()))()&&!X()},get children(){return t(Zt,{get snap(){return z()},get selection(){return G()},get node(){return ot()},get edge(){return st()},get window(){return m().window},onSelect:K,onClose:()=>K(void 0),onEditTeam:e=>Q(e)})}}),null),S(s,t(i,{get when(){return X()},get children(){return t(ii,{get snap(){return Xe()},get phone(){return F()},onChanged:()=>void V()})}}),null),f(e=>{var t=U().mode,n=he()?`live`:`static`,r=nt().length?``:void 0,i=gt();return t!==e.e&&w(s,`data-mode`,e.e=t),n!==e.t&&w(s,`data-motion`,e.t=n),r!==e.a&&w(s,`data-chips`,e.a=r),i!==e.o&&C(s,`--wt-side`,e.o=i),e},{e:void 0,t:void 0,a:void 0,o:void 0}),e})()}x([`click`]);export{Qn as a,ot as c,Mi as default,Gn as i,Xn as n,Zn as o,Yn as r,at as s,ci as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.awb{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex}.av-page{height:100%}.awb.resizing{cursor:col-resize;-webkit-user-select:none;user-select:none}.awb.resizing iframe{pointer-events:none}.awb-side{border-left:1px solid var(--line);background:var(--bg);flex-direction:column;flex:none;min-height:0;display:flex;position:relative}.awb-side[hidden]{display:none}.awb-side>.aai{flex:1}.awb-resize{z-index:2;cursor:col-resize;touch-action:none;width:8px;position:absolute;top:0;bottom:0;left:-4px}.awb-resize:after{content:"";background:0 0;width:2px;transition:background .15s;position:absolute;top:0;bottom:0;left:3px}.awb-resize:hover:after,.awb-resize:focus-visible:after,.awb.resizing .awb-resize:after{background:var(--accent)}.awb-resize:focus-visible{outline:none}.awb-side.sheet{z-index:25;border:1px solid var(--line-2);height:min(78%,680px);box-shadow:0 -12px 40px var(--shadow);border-bottom:0;border-radius:16px 16px 0 0;position:absolute;bottom:0;left:0;right:0;overflow:hidden}.awb-grab{background:var(--line-2);border-radius:2px;flex:none;width:36px;height:4px;margin:6px auto 0}.awb-scrim{z-index:24;background:color-mix(in srgb, var(--bg) 45%, transparent);position:absolute;inset:0}.awb-ai-toggle{border:1px solid var(--line-2);background:var(--raise);height:30px;color:var(--text);font:600 .75rem/1 var(--sans);cursor:pointer;border-radius:999px;flex:none;align-items:center;gap:5px;margin-left:4px;padding:0 10px 0 8px;display:inline-flex}.awb-ai-toggle .icon{color:var(--accent)}.awb-ai-toggle:hover{background:var(--raise-2)}.awb-ai-toggle[aria-pressed=true]{background:color-mix(in srgb, var(--accent) 14%, var(--raise));border-color:color-mix(in srgb, var(--accent) 45%, var(--line-2))}.awb-ai-toggle:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.awb-badge{background:var(--accent);min-width:16px;height:16px;color:var(--accent-ink);border-radius:999px;place-items:center;padding:0 4px;font-size:.625rem;display:inline-grid}.awb.narrow .awb-ai-toggle{height:34px}.cmp-interactive{flex-direction:column;display:flex}.cmp-interactive .artifact-host{gap:0}.cmp-interactive .artifact-host-note{display:none}.cmp-interactive .artifact-host-status{padding:12px 16px}.cmp-interactive .artifact-host-frame{border:0;border-radius:0;min-height:360px}.cmp-disclose{border-top:1px solid var(--line);background:var(--side);color:var(--faint);align-items:flex-start;gap:8px;margin:0;padding:8px 14px;font-size:.75rem;display:flex}.cmp-disclose .icon{flex:none;width:14px;height:14px;margin-top:2px}.cmp-disclose strong{color:var(--muted);font-weight:600}.cmp-consent{flex-direction:column;gap:10px;display:flex}.cmp-card{border:1px solid color-mix(in srgb, var(--accent) 55%, var(--line));background:var(--raise);box-shadow:0 2px 8px var(--shadow);border-radius:14px;flex-direction:column;gap:8px;padding:10px 12px 12px;font-size:.8125rem;display:flex}.cmp-card-head{align-items:center;gap:8px;margin:0;display:flex}.cmp-card-icon{background:color-mix(in srgb, var(--accent) 12%, transparent);width:24px;height:24px;color:var(--accent);border-radius:6px;flex:none;place-items:center;display:inline-grid}.cmp-instruction{border-left:3px solid var(--accent);background:var(--side);white-space:pre-wrap;overflow-wrap:anywhere;border-radius:0 8px 8px 0;max-height:12em;margin:0;padding:6px 10px;font-family:inherit;font-size:.875rem;overflow:auto}.cmp-note{color:var(--muted);margin:0;font-size:.75rem}.cmp-note.err{color:var(--err)}.cmp-row{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.cmp-card .aai-picker{flex:none}.cmp-actions{flex-wrap:wrap;justify-content:flex-end;gap:8px;display:flex}.cmp-done{color:var(--muted);align-items:flex-start;gap:6px;margin:0;font-size:.75rem;display:flex}.cmp-done .icon{width:14px;height:14px;color:var(--faint);flex:none;margin-top:2px}.cmp-quote{overflow-wrap:anywhere;font-style:italic}.cmp-page-actions{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.cmp-start{flex-direction:column;gap:10px;display:flex}.cmp-start label{flex-direction:column;gap:2px;display:flex}.cmp-empty{flex-direction:column;gap:8px;padding:24px;display:flex}@media (max-width:640px){.cmp-actions .btn{min-height:40px}}.awb.pane .pane-tools{border-left:1px solid var(--line);align-items:center;margin-left:2px;padding-left:4px;display:inline-flex}.ws-section .link-btn{color:var(--accent);cursor:pointer;font:inherit;background:0 0;border:0;padding:0;text-decoration:underline}.ws-list{margin:0;padding:0;list-style:none}.ws-item{margin:2px 0 6px}.ws-head{width:100%;min-height:30px;color:var(--text);cursor:pointer;text-align:left;font:inherit;background:0 0;border:0;border-radius:6px;align-items:center;gap:6px;padding:0 8px;display:flex}.ws-head:hover{background:var(--raise-2)}.ws-head .icon{width:14px;height:14px;color:var(--muted);flex:none}.ws-title{text-overflow:ellipsis;white-space:nowrap;font-weight:600;overflow:hidden}.ws-goal{color:var(--muted);-webkit-line-clamp:2;-webkit-box-orient:vertical;margin:0 8px 2px 28px;font-size:.75rem;display:-webkit-box;overflow:hidden}.ws-panel{padding:2px 0 2px 8px}.ws-notice{min-height:0;color:var(--muted);margin:0 8px;font-size:.7188rem}.ws-notice:empty{display:none}.ws-tree{margin:0;padding:0;list-style:none}.ws-node{--ws-depth:0;padding-left:calc(var(--ws-depth) * 14px);border-radius:6px;outline:none;position:relative}.ws-node:focus-visible>.ws-row{box-shadow:0 0 0 2px var(--accent) inset}.ws-node.away .ws-member{color:var(--muted)}.ws-node.dragged{opacity:.5}.ws-node.drop-inside>.ws-row{background:var(--raise-2);box-shadow:0 0 0 1px var(--accent) inset}.ws-node.drop-before>.ws-row{box-shadow:0 -2px 0 var(--accent)}.ws-node.drop-after>.ws-row{box-shadow:0 2px 0 var(--accent)}.ws-node[draggable=true]>.ws-row{cursor:grab}.ws-row{border-radius:6px;align-items:center;gap:6px;min-height:28px;padding:0 2px 0 8px;display:flex}.ws-row:hover{background:var(--raise-2)}.ws-member{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--text);flex:auto;font-size:.8125rem;text-decoration:none;overflow:hidden}.ws-meta{color:var(--faint);flex-wrap:wrap;align-items:center;gap:3px 4px;margin:0 8px 2px 30px;font-size:.6875rem;display:flex}.ws-badge{border:1px solid var(--line-2);color:var(--muted);white-space:nowrap;border-radius:6px;padding:2px 4px;font-size:.625rem;line-height:1}.ws-badge.master{color:var(--accent);border-color:var(--accent)}.ws-badge.offline{color:var(--err);border-color:var(--err)}.ws-keys{color:var(--faint);margin:0 8px 2px 30px;font-size:.6875rem}.ws-rel a{color:inherit}.ws-assignments{color:var(--muted);margin:0 8px 2px 30px;padding:0;font-size:.7188rem;list-style:none}.ws-assignment-status{color:var(--faint)}.ws-assignment.blocked .ws-assignment-status{color:var(--warn)}.ws-controls{color:var(--muted);margin:0 8px 4px 30px;font-size:.6875rem}.ws-controls summary{cursor:pointer;color:var(--faint)}.ws-controls p,.ws-controls ul{margin:4px 0}.ws-controls ul{padding-left:14px}.ws-root-drop{border:1px dashed var(--line-2);text-align:center;color:var(--muted);border-radius:6px;margin:4px 8px;padding:6px;font-size:.7188rem}.ws-root-drop.over{border-color:var(--accent);color:var(--accent)}.ws-keys{margin-left:8px}.feature-nav ul,.nav-rail-links ul{margin:0;padding:0;list-style:none}.nav-link .icon{flex:none}.nav-link:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.nav-link.active{color:var(--text)}.nav-link.disabled{opacity:.5;cursor:default}.nav-link.disabled:hover{background:0 0}.side-sessions{flex-direction:column;flex:1;min-height:0;display:flex}.nav-rail{background:var(--side);border-right:1px solid var(--line);flex-direction:column;flex:none;align-items:center;gap:6px;width:48px;padding:9px 0;display:flex}.nav-rail-links ul{flex-direction:column;gap:2px;display:flex}.nav-rail .nav-link{justify-content:center;width:32px;height:32px;margin:0;padding:0}.feature-page{flex-direction:column;flex:1;min-height:0;display:flex}.feature-scroll{flex:1;min-height:0;overflow:auto}.feature-body{max-width:980px;margin:0 auto;padding:16px 20px 40px}.feature-note{color:var(--muted)}@media (max-width:760px){.feature-body{padding:12px 14px 40px}}.side-top-actions{align-items:center;gap:2px;display:flex}.concierge-btn{position:relative}.concierge-btn.on{background:var(--raise-2);color:var(--accent)}.concierge-btn.ind-off{color:var(--muted)}.concierge-btn.ind-running{color:var(--accent)}.concierge-ind{border:1px solid var(--side);pointer-events:none;border-radius:50%;width:8px;height:8px;position:absolute;top:4px;right:4px}.concierge-ind.ind-off{background:var(--muted);opacity:.7}.concierge-ind.ind-busy{background:var(--warn)}.concierge-ind.ind-attention{background:var(--err);color:#fff;place-items:center;width:14px;height:14px;font-size:10px;font-weight:700;line-height:1;display:grid;top:1px;right:1px}.side-top{container:side-top/inline-size}.concierge-btn.labelled{align-items:center;gap:4px;width:auto;min-width:30px;padding-inline:6px;display:inline-flex}.concierge-btn-text{font-size:.8125rem;font-weight:500;display:none}@container side-top (width>=200px){.concierge-btn-text{display:inline}.concierge-btn.labelled .concierge-ind{left:16px;right:auto}.concierge-btn.labelled .concierge-ind.ind-attention{top:-1px;left:12px}}.concierge-panel{background:var(--bg);outline:none;flex-direction:column;min-height:0;display:flex}.concierge-panel.side{height:100%;width:var(--concierge-w,min(440px, 40vw));border-left:1px solid var(--line);min-width:0;box-shadow:-12px 0 32px var(--shadow);flex:none;position:relative}.concierge-panel.page{flex:1;width:100%}.concierge-head{border-bottom:1px solid var(--line);flex:none;align-items:center;gap:8px;min-height:max(48px,2.4rem);padding:8px 10px 8px 14px;display:flex}.concierge-head .title{margin:0;font-size:.9375rem;font-weight:600}.concierge-title{min-width:0}.concierge-status{text-overflow:ellipsis;white-space:nowrap;margin:0;overflow:hidden}.concierge-mark{color:var(--accent);flex:none}.concierge-notice{border-radius:var(--r);border:1px solid color-mix(in srgb, var(--warn) 40%, var(--line));color:var(--warn);background:color-mix(in srgb, var(--warn) 8%, var(--bg));margin:8px 12px 0;padding:8px 10px;font-size:.8125rem}.concierge-notice.err{border-color:color-mix(in srgb, var(--err) 40%, var(--line));color:var(--err);background:color-mix(in srgb, var(--err) 7%, var(--bg))}.concierge-asked{flex-direction:column;gap:8px;margin-top:8px;padding:0 12px;display:flex}.concierge-scroll{overscroll-behavior:contain;flex:1;min-height:0;padding:8px 12px;overflow-y:auto}.concierge-scroll .transcript{max-width:none}.concierge-idle{flex-direction:column;flex:1;justify-content:flex-end;display:flex}.concierge-dock{border-top:1px solid var(--line);padding:8px 12px calc(8px + env(safe-area-inset-bottom));flex-direction:column;flex:none;gap:6px;display:flex}.concierge-idle .concierge-composer{margin:8px 12px calc(8px + env(safe-area-inset-bottom))}.concierge-composer{align-items:flex-end;gap:6px;display:flex}.concierge-composer textarea{resize:none;min-height:36px;max-height:200px;font:inherit;flex:1;line-height:1.4}.concierge-composer textarea:disabled{opacity:.6}.concierge-composer .btn.primary:disabled{background:var(--raise-2);color:var(--faint);border-color:var(--line);opacity:1;cursor:not-allowed}.concierge-voice.on{background:var(--accent);color:var(--accent-ink);border-radius:var(--r)}.armed-decision{border-color:color-mix(in srgb, var(--accent) 55%, var(--line));box-shadow:0 0 0 1px color-mix(in srgb, var(--accent) 30%, transparent);margin:8px 12px 0}.armed-question{white-space:pre-wrap;overflow-wrap:anywhere;margin:6px 0;font-size:.9375rem}.armed-options{flex-wrap:wrap;gap:8px;margin:8px 0 4px;display:flex}.armed-options .btn{min-height:40px;padding:0 18px}.armed-hint{margin:4px 0 0}.armed-left{font-variant-numeric:tabular-nums}@media (max-width:760px){.concierge-head{padding-left:6px}.armed-options .btn{flex:1}}#concierge-quiet .row,#concierge-digests li.row{flex-wrap:wrap;align-items:center;gap:8px}#concierge-quiet .text-field{flex-direction:row;align-items:center;gap:6px}.digest-days{flex-wrap:wrap;flex:1;gap:4px 10px;display:flex}.digest-days .check{align-items:center;gap:3px;display:inline-flex}#concierge-watchlist input[type=number]{width:6em}.concierge-panel .decision.flash{animation:1.2s ease-out 2 concierge-flash}@keyframes concierge-flash{0%{box-shadow:0 0 0 3px color-mix(in srgb, var(--accent) 60%, transparent)}to{box-shadow:0 0 #0000}}.concierge-panel .hub-update .fold-head{text-align:start;font-size:.8125rem}.concierge-panel .hub-msg-text a{color:var(--accent);text-underline-offset:2px;text-decoration:underline}.concierge-panel .hub-update .fold-body{white-space:pre-wrap;font-size:.8125rem}#concierge{padding-bottom:72px}#concierge .stack>label.text-field{flex-direction:column;align-items:stretch;gap:4px;display:flex}#concierge .stack>label.text-field>input:not([type=number]),#concierge .stack>label.text-field>textarea,#concierge .stack>label.text-field>select,#concierge-directory>input,#concierge-model>input{box-sizing:border-box;width:100%;max-width:44rem}#concierge-model [data-concierge-models-state]:empty{display:none}#concierge #concierge-time-zone>input{max-width:20rem}#concierge-quiet .text-field input:placeholder-shown{color:var(--muted)}.closed-decision{opacity:.92;margin:8px 12px 0}.closed-decision .decision-head{align-items:center;gap:6px;display:flex}.concierge-panel a[href^="/concierge#decision-"]{-webkit-box-decoration-break:clone;box-decoration-break:clone;padding:2px 0;display:inline}.prof-page{flex-direction:column;height:100%;min-height:0;display:flex}.prof-body{flex:1;min-height:0;display:flex}.prof-list{border-right:1px solid var(--line);flex-direction:column;flex:none;gap:8px;width:280px;padding:10px 8px;display:flex;overflow:auto}.prof-filter{gap:4px;display:flex}.prof-filter .btn[aria-pressed=true]{background:var(--raise-2);border-color:var(--line-2);font-weight:600}.prof-items{flex-direction:column;gap:2px;margin:0;padding:0;list-style:none;display:flex}.prof-item{color:var(--text);border-radius:6px;flex-direction:column;gap:2px;padding:7px 9px;text-decoration:none;display:flex}.prof-item:hover{background:var(--raise-2)}.prof-item[aria-current=page]{background:var(--raise-2);box-shadow:0 0 0 1px var(--line-2) inset}.prof-item .prof-sub{color:var(--muted);font-size:.75rem}.prof-detail{flex:1;min-width:0;padding:16px 24px 48px;overflow:auto}.prof-detail h2{font:400 1.25rem var(--serif);margin:0}.prof-detail h3{color:var(--muted);margin:18px 0 6px;font-size:.8125rem;font-weight:500}.prof-head{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.prof-tag{border:1px solid var(--line-2);color:var(--muted);border-radius:6px;padding:1px 6px;font-size:.6875rem}.prof-tag.archived{color:var(--warn);border-color:var(--warn)}.prof-note{color:var(--muted);margin:6px 0;font-size:.75rem}.prof-tabs{gap:4px;margin:12px 0 4px;display:flex}.prof-tabs .btn[aria-selected=true]{background:var(--raise-2);font-weight:600}.prof-editor{flex-direction:column;gap:10px;max-width:760px;display:flex}.prof-editor label{color:var(--muted);flex-direction:column;gap:4px;font-size:.7812rem;display:flex}.prof-editor textarea,.prof-editor input{color:var(--text);font:inherit;box-sizing:border-box;width:100%;font-size:.8125rem}.prof-editor textarea{font-family:var(--mono);resize:vertical;min-height:64px}.prof-part{border:1px solid var(--line);border-radius:var(--r);flex-direction:column;gap:6px;padding:8px 10px;display:flex}.prof-part-head{align-items:flex-end;gap:6px;display:flex}.prof-part-head label{flex:1;min-width:0}.prof-preview{color:var(--muted);margin:0;font-size:.7188rem}.prof-preview.bad{color:var(--err)}.prof-history{flex-direction:column;gap:4px;max-width:760px;margin:0;padding:0;list-style:none;display:flex}.prof-history li{border:1px solid var(--line);border-radius:6px;flex-wrap:wrap;align-items:center;gap:8px;padding:6px 8px;font-size:.8125rem;display:flex}.prof-history .mono{font-family:var(--mono);color:var(--faint);font-size:.7188rem}.prof-history pre{white-space:pre-wrap;background:var(--side);border-radius:6px;flex-basis:100%;max-height:240px;margin:4px 0 0;padding:6px 8px;font-size:.75rem;overflow:auto}.prof-detail .prof-back{display:none}.prof-filters{flex-wrap:wrap;gap:4px;display:flex}.prof-filters select{font:inherit;color:var(--text);max-width:100%;font-size:.75rem}.prof-item .prof-desc{color:var(--muted);white-space:nowrap;text-overflow:ellipsis;font-size:.75rem;overflow:hidden}.prof-chips{flex-wrap:wrap;gap:4px;margin-top:2px;display:flex}.prof-use{background:var(--raise-2);color:var(--text);border-radius:9px;padding:1px 6px;font-size:.6875rem}.prof-use.unused{color:var(--faint);border:1px dashed var(--line-2);background:0 0}.prof-use.older{color:var(--warn);background:color-mix(in srgb, var(--warn) 12%, transparent)}.prof-details{border:1px solid var(--line);border-radius:var(--r);flex-direction:column;align-items:flex-start;gap:8px;max-width:760px;margin:10px 0 4px;padding:8px 12px;display:flex}.prof-facts{grid-template-columns:max-content 1fr;gap:3px 14px;margin:0;font-size:.8125rem;display:grid}.prof-facts dt{color:var(--muted)}.prof-facts dd{overflow-wrap:anywhere;margin:0}.prof-details .prof-editor{width:100%}.prof-meta-row{align-items:center;gap:6px;display:flex}.prof-meta-row input{flex:1;min-width:0}.prof-usage{max-width:760px}.prof-uses{flex-direction:column;gap:4px;margin:0;padding:0;list-style:none;display:flex}.prof-uses li{border:1px solid var(--line);border-radius:6px;flex-wrap:wrap;align-items:center;gap:8px;padding:6px 8px;font-size:.8125rem;display:flex}.prof-uses .mono{font-family:var(--mono);font-size:.7188rem}.prof-dot{background:var(--faint);border-radius:50%;flex:none;width:8px;height:8px}.prof-dot.on{background:var(--ok)}.prof-chip{color:var(--muted);border:1px solid var(--line);white-space:nowrap;cursor:pointer;text-overflow:ellipsis;background:0 0;border-radius:13px;align-items:center;gap:4px;max-width:260px;padding:2px 10px;font-size:.75rem;display:inline-flex;overflow:hidden}.prof-chip:hover{background:var(--raise-2)}.prof-chip.ok{color:var(--ok);border-color:color-mix(in srgb, var(--ok) 45%, var(--line))}.prof-chip.warn,.prof-chip.pending{color:var(--warn);border-color:color-mix(in srgb, var(--warn) 45%, var(--line))}.prof-chip.pending{border-style:dashed}.prof-chip.err{color:var(--err);border-color:color-mix(in srgb, var(--err) 45%, var(--line))}.prof-chip .prof-up{color:var(--accent);font-weight:600}.prof-dialog .dialog-body{flex-direction:column;gap:10px;display:flex}.prof-dialog h3{margin:4px 0;font-size:.8125rem;font-weight:600}.prof-dialog label{color:var(--muted);flex-direction:column;gap:4px;font-size:.7812rem;display:flex}.prof-dialog select,.prof-dialog input,.prof-dialog textarea{color:var(--text);font:inherit;font-size:.8125rem}.prof-guidance{flex-direction:column;gap:2px;margin:0;padding-left:18px;font-size:.8125rem;display:flex}.prof-status{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.prof-status .prof-chip{cursor:default}.prof-upgrade{border:1px solid color-mix(in srgb, var(--accent) 45%, var(--line));border-radius:var(--r);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px;padding:8px 10px;font-size:.8125rem;display:flex}.prof-palette .dialog-body{flex-direction:column;gap:8px;display:flex}.prof-commands{flex-direction:column;gap:2px;max-height:46vh;margin:0;padding:0;list-style:none;display:flex;overflow:auto}.prof-command{cursor:pointer;border-radius:6px;flex-direction:column;gap:1px;padding:6px 8px;display:flex}.prof-command[aria-selected=true]{background:var(--raise-2);box-shadow:0 0 0 1px var(--accent) inset}.prof-command .prof-sub{color:var(--muted);font-size:.75rem}.prof-secret{color:var(--muted);border-left:3px solid var(--warn);margin:0;padding:4px 8px;font-size:.75rem}@media (max-width:760px){.prof-list{border-right:0;flex:1;width:auto}.prof-body.has-detail .prof-list,.prof-body:not(.has-detail) .prof-detail{display:none}.prof-detail{padding:12px 14px 48px}.prof-detail .prof-back{margin-bottom:8px;display:inline-flex}.prof-chip{max-width:140px}}.pane-drop{z-index:8;outline:1px dashed color-mix(in srgb, var(--accent) 45%, transparent);outline-offset:-4px;background:color-mix(in srgb, var(--bg,#000) 18%, transparent);border-radius:6px;min-width:0;min-height:0;position:relative}.pane-drop-area{pointer-events:none;background:color-mix(in srgb, var(--accent) 22%, transparent);box-shadow:inset 0 0 0 2px var(--accent);border-radius:6px;transition:inset .12s ease-out;position:absolute}.pane-drop-area[data-zone=center]{inset:10%}.pane-drop-area[data-zone=left]{inset:0 50% 0 0}.pane-drop-area[data-zone=right]{inset:0 0 0 50%}.pane-drop-area[data-zone=top]{inset:0 0 50%}.pane-drop-area[data-zone=bottom]{inset:50% 0 0}.pane-drop[data-refused] .pane-drop-area{background:color-mix(in srgb, var(--warn) 18%, transparent);box-shadow:inset 0 0 0 2px var(--warn)}.pane-drop-hint{pointer-events:none;background:var(--raise-2);border:1px solid var(--line-2);box-shadow:0 6px 18px var(--shadow);white-space:nowrap;text-overflow:ellipsis;border-radius:999px;max-width:90%;padding:4px 12px;font-size:.8125rem;position:absolute;top:50%;left:50%;overflow:hidden;transform:translate(-50%,-50%)}.pane-drop[data-refused] .pane-drop-hint{color:var(--warn)}.pane-drop-label{pointer-events:none;color:var(--muted);white-space:nowrap;text-overflow:ellipsis;font-size:.75rem;position:absolute;top:6px;left:8px;right:8px;overflow:hidden}.cmp-empty.pane-empty-drop{flex:1;position:relative}.cmp-empty .pane-drop{position:absolute;inset:8px}.pane-dock{z-index:25;background:color-mix(in srgb, var(--bg,#000) 55%, transparent);justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.pane-dock-card{background:var(--raise);border:1px solid var(--line-2);width:min(520px,90%);box-shadow:0 16px 48px var(--shadow);border-radius:12px;padding:14px}.pane-dock-title{white-space:nowrap;text-overflow:ellipsis;margin:0 0 10px;font-weight:500;overflow:hidden}.pane-dock-map{gap:6px;height:260px;display:grid}.pane-dock-pane{background:var(--raise-2)}.pane-dock-empty{justify-content:center;align-items:center;height:200px;display:flex}.pane-dock-empty .pane-drop-label{text-align:center;position:static}.pane-dock-note{margin:10px 0 0;font-size:.75rem}.pane-grip{width:24px;height:24px;color:var(--faint);cursor:grab;border-radius:6px;justify-content:center;align-items:center;display:inline-flex}.pane-grip:hover{color:var(--text);background:var(--raise-2)}.pane-grip:active{cursor:grabbing}.pane-grip .icon{width:14px;height:14px}.side-row-link[draggable=true],.lib-row[draggable=true]{-webkit-user-drag:element}.wt-drag{cursor:grab}.seg{border:1px solid var(--line);background:var(--side,transparent);border-radius:8px;gap:2px;padding:2px;display:inline-flex}.seg button{width:30px;height:24px;color:var(--muted);cursor:pointer;background:0 0;border:0;border-radius:6px;justify-content:center;align-items:center;display:inline-flex}.seg button:hover{color:var(--text)}.seg button[aria-pressed=true]{background:var(--raise-2);color:var(--text);box-shadow:0 0 0 1px var(--line-2)}.seg button:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.seg .icon{width:16px;height:16px}@media (prefers-reduced-motion:reduce){.pane-drop-area{transition:none}}.pane-grip .icon{stroke-width:3.2px}:root{--bg:#f6f7f9;--side:#eef0f3;--raise:#fff;--raise-2:#e8ebef;--line:#d9dde3;--line-2:#c9ced6;--text:#22252a;--muted:#69707b;--faint:#9299a3;--accent:#0e7268;--accent-ink:#fff;--ok:#16834a;--warn:#9a5b08;--err:#b42318;--add:#16834a;--del:#b42318;--violet:#8954c7;--orange:#b96508;--blue:#2769b4;--mark:#22252a;--shadow:#1018281f;--serif:ui-serif, "Iowan Old Style", "Palatino Linotype", Palatino, Georgia, serif;--sans:system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--mono:ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace;--side-w:235px;--rail-w:260px;--col:680px;--r:8px;--font-scale:1;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}:root[data-theme=dark]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg:#101214;--side:#171a1e;--raise:#1b1f24;--raise-2:#22272d;--line:#2d333b;--line-2:#3a424d;--text:#e7e5e0;--muted:#9ca3ad;--faint:#6f7782;--accent:#3ad3bf;--accent-ink:#04201c;--ok:#50d890;--warn:#efb851;--err:#ff8e82;--add:#50d890;--del:#ff8e82;--violet:#b68cff;--orange:#f2a340;--blue:#64a8ef;--mark:#e7e5e0;--shadow:#0006}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg:#101214;--side:#171a1e;--raise:#1b1f24;--raise-2:#22272d;--line:#2d333b;--line-2:#3a424d;--text:#e7e5e0;--muted:#9ca3ad;--faint:#6f7782;--accent:#3ad3bf;--accent-ink:#04201c;--ok:#50d890;--warn:#efb851;--err:#ff8e82;--add:#50d890;--del:#ff8e82;--violet:#b68cff;--orange:#f2a340;--blue:#64a8ef;--mark:#e7e5e0;--shadow:#0006}}*{box-sizing:border-box}html{font-size:calc(100% * var(--font-scale,1));-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%}html,body{background:var(--bg);height:100%;color:var(--text);-webkit-font-smoothing:antialiased;margin:0}body{font:.875rem/1.5 var(--sans)}#root{height:100%}a{color:inherit;text-decoration:none}button,input,select,textarea{font:inherit;color:inherit}.sr-only{clip:rect(0 0 0 0);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.muted{color:var(--muted)}.small{font-size:.7812rem}.mono,code,pre{font-family:var(--mono)}.display{font-family:var(--serif);letter-spacing:-.01em;font-weight:400}.grow{flex:1}.row{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.stack{flex-direction:column;gap:12px;display:flex}.pad{padding:12px 16px}.error{color:var(--err)}.ok{color:var(--ok)}.icon{fill:none;stroke:currentColor;stroke-width:1.8px;stroke-linecap:round;stroke-linejoin:round;flex:none;width:16px;height:16px}kbd{font:.6875rem var(--mono);color:var(--faint);border:1px solid var(--line-2);border-radius:4px;padding:0 4px}:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.btn{border-radius:var(--r);border:1px solid var(--line-2);background:var(--raise);cursor:pointer;white-space:nowrap;align-items:center;gap:6px;min-height:32px;padding:0 12px;display:inline-flex}.btn:hover:not(:disabled){background:var(--raise-2)}.btn:disabled{opacity:.45;cursor:default}.btn.small{height:auto;min-height:26px;padding:0 9px;font-size:.7812rem}.btn.primary{background:var(--accent);color:var(--accent-ink);border-color:#0000;font-weight:600}.btn.primary:hover:not(:disabled){background:color-mix(in srgb, var(--accent) 88%, var(--text))}.btn.danger{color:var(--err)}.icon-btn{width:30px;height:30px;color:var(--muted);cursor:pointer;background:0 0;border:0;border-radius:6px;place-items:center;display:inline-grid}.icon-btn:hover:not(:disabled){background:var(--raise-2);color:var(--text)}.icon-btn:disabled{opacity:.4;cursor:default}.icon-btn.small{width:24px;height:24px}.icon-btn.on,.icon-btn[aria-pressed=true]{color:var(--accent)}.icon-btn.recording{color:var(--err)}input[type=search],input[type=text],input[type=password],select,textarea{background:var(--raise);border:1px solid var(--line);border-radius:var(--r);min-height:32px;padding:6px 10px}input:focus,select:focus,textarea:focus{border-color:var(--line-2);box-shadow:0 0 0 1px var(--line-2);outline:none}.chips{flex-wrap:wrap;gap:6px;display:flex}.chip{border:1px solid var(--line);min-height:26px;color:var(--muted);cursor:pointer;background:0 0;border-radius:13px;padding:0 10px;font-size:.7812rem}.chip[aria-pressed=true]{background:var(--raise-2);color:var(--text);border-color:var(--line-2)}.chip .count{color:var(--accent);margin-left:4px}.card{background:var(--raise);border:1px solid var(--line);border-radius:10px;padding:14px}.banner{border:1px solid var(--line);background:var(--side);border-radius:var(--r);justify-content:space-between;align-items:center;gap:12px;margin:8px 0;padding:8px 12px;display:flex}.banner.warn{border-color:color-mix(in srgb, var(--warn) 45%, var(--line));color:var(--warn);border-width:0 0 1px;border-radius:0;margin:0}.badge{background:var(--accent);min-width:18px;height:18px;color:var(--accent-ink);border-radius:9px;place-items:center;padding:0 5px;font-size:.6875rem;font-weight:700;display:inline-grid}.badge-pill{border:1px solid var(--line-2);color:var(--muted);border-radius:8px;margin-left:6px;padding:1px 6px;font-size:.6875rem}.badge-pill.off{color:var(--err)}.status{flex:none;place-items:center;width:14px;height:14px;display:inline-grid}.status-dot{background:var(--faint);border-radius:50%;width:7px;height:7px}.status.blocked .status-dot{background:var(--warn);box-shadow:0 0 0 3px color-mix(in srgb, var(--warn) 14%, transparent)}.status.error .status-dot{background:var(--err)}.spinner{border:1.6px solid color-mix(in srgb, var(--accent) 27%, transparent);border-top-color:var(--accent);border-radius:50%;flex:none;width:12px;height:12px;animation:.8s linear infinite spin;display:inline-block}.spinner.small{width:10px;height:10px}@keyframes spin{to{transform:rotate(360deg)}}.unread-dot{background:var(--accent);border-radius:50%;flex:none;width:6px;height:6px;margin-left:6px;display:inline-block}.online-dot{background:var(--faint);vertical-align:middle;border-radius:50%;width:6px;height:6px;margin-right:6px;display:inline-block}.online-dot.on{background:var(--ok)}.voice-dot{background:var(--ok);vertical-align:middle;border-radius:50%;flex:none;width:8px;height:8px;margin-right:6px;animation:1.8s ease-in-out infinite voice-dot-pulse;display:inline-block}@keyframes voice-dot-pulse{0%,to{box-shadow:0 0 0 0 color-mix(in srgb, var(--ok) 55%, transparent)}50%{box-shadow:0 0 0 4px color-mix(in srgb, var(--ok) 0%, transparent)}}@media (prefers-reduced-motion:reduce){.voice-dot{animation:none}}.shell{height:100%;display:flex;overflow:hidden}.sidebar{width:var(--side-w);background:var(--side);border-right:1px solid var(--line);flex-direction:column;flex:none;min-height:0;display:flex}.main{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex;position:relative}.conn-banner{background:color-mix(in srgb, var(--warn) 16%, var(--bg));color:var(--warn);text-align:center;padding:3px;font-size:.7812rem}.side-top{justify-content:space-between;align-items:center;padding:10px 8px 6px 14px;display:flex}.brand{align-items:center;gap:8px;display:flex}.brand-mark{flex:none}.hub-mark{color:var(--mark);--mark-gap:var(--bg)}.hub-mark-gap{fill:var(--mark-gap)}.hub-mark-hub{fill:var(--accent)}.sidebar .hub-mark{--mark-gap:var(--side)}.brand-name{font-family:var(--serif);font-size:1.0625rem}.side-search{border:1px solid var(--line);border-radius:var(--r);color:var(--faint);background:var(--bg);align-items:center;gap:6px;margin:4px 10px;padding:0 8px;display:flex}.side-search input{width:100%;min-height:30px;box-shadow:none;background:0 0;border:0;padding:0}.side-new,.side-link{color:var(--text);border-radius:6px;align-items:center;gap:8px;margin:2px 8px;padding:6px 8px;display:flex}.side-new:hover,.side-link:hover,.side-link.active{background:var(--raise-2)}.side-link{color:var(--muted)}.side-head{color:var(--faint);justify-content:space-between;align-items:center;padding:10px 8px 0 16px;font-size:.75rem;display:flex}.side-scroll{flex:1;min-height:0;padding:0 6px 12px;overflow:auto}.side-section{margin-top:10px}.side-section-head{justify-content:space-between;align-items:center;height:24px;padding:0 4px 2px 10px;display:flex}.side-section-title{color:var(--faint);text-transform:none;letter-spacing:.02em;text-overflow:ellipsis;white-space:nowrap;font-size:.7188rem;overflow:hidden}.side-section.needs .side-section-title{color:var(--warn)}.side-section-head .icon-btn{opacity:0}.side-section-head:has(.side-section-toggle){padding-left:2px}.side-section-toggle{min-width:0;height:22px;color:inherit;font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;border-radius:5px;flex:1;align-items:center;gap:4px;padding:0 6px 0 4px;display:flex}.side-section-toggle:hover{background:var(--raise-2)}.side-section-toggle:hover .side-section-title{color:var(--muted)}.side-section-toggle:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.side-section-caret{width:12px;height:12px;color:var(--faint);flex:none}.side-count{background:var(--raise-2);min-width:16px;color:var(--muted);text-align:center;font-variant-numeric:tabular-nums;border-radius:8px;flex:none;padding:0 5px;font-size:.6562rem;line-height:16px}.side-count.needs{background:color-mix(in srgb, var(--warn) 22%, transparent);color:var(--warn);font-weight:600}.side-section.needs .side-section-toggle .side-section-title{color:var(--warn)}.side-section:hover .side-section-head .icon-btn,.side-section-head .icon-btn:focus-visible{opacity:1}.side-list{margin:0;padding:0;list-style:none}.side-row{border-radius:6px;align-items:center;display:flex;position:relative}.side-row:hover,.side-row.active{background:var(--raise-2)}.side-row-link{min-width:0;color:var(--muted);flex:1;align-items:center;gap:8px;padding:5px 4px 5px 8px;display:flex}.side-row.active .side-row-link,.side-row.unread .side-row-link{color:var(--text)}.side-title{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.row-more{opacity:0;margin-right:2px}.side-row:hover .row-more,.side-row.active .row-more,.row-more[aria-expanded=true],.row-more:focus-visible{opacity:1}.side-empty{color:var(--faint);padding:12px;font-size:.7812rem}.side-foot{border-top:1px solid var(--line);padding:8px}.account{color:var(--muted);border-radius:6px;align-items:center;gap:8px;padding:6px;display:flex}.account:hover{background:var(--raise-2);color:var(--text)}.account-name{text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.avatar{background:var(--raise-2);width:24px;height:24px;color:var(--text);border-radius:50%;flex:none;place-items:center;font-size:.75rem;font-weight:600;display:inline-grid}.avatar.admin{box-shadow:0 0 0 1.5px var(--accent)}.avatar.large{width:40px;height:40px;font-size:1.0625rem}.menu{z-index:50;background:var(--raise);border:1px solid var(--line-2);min-width:200px;max-width:320px;box-shadow:0 12px 32px var(--shadow);border-radius:10px;padding:4px;position:fixed}.menu-item{text-align:left;cursor:pointer;background:0 0;border:0;border-radius:6px;align-items:center;gap:6px;width:100%;padding:6px 8px;display:flex}.menu-item:hover:not(:disabled){background:var(--raise-2)}.menu-item.danger{color:var(--err)}.menu-check{width:14px;color:var(--accent)}.menu-label{text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.menu-hint{color:var(--faint);font-size:.75rem}.menu-section{color:var(--faint);padding:6px 8px 2px;font-size:.7188rem}.menu-sep{background:var(--line);height:1px;margin:4px 0}.mic-picker{width:280px}.level{background:var(--bg);border-radius:3px;height:6px;margin:8px;overflow:hidden}.level span{background:var(--ok);height:100%;transition:width 80ms linear;display:block}.dialog{background:var(--raise);color:var(--text);border:1px solid var(--line-2);border-radius:12px;width:min(520px,94vw);max-height:84vh;padding:0}.dialog::backdrop{background:#0009}.dialog-head{justify-content:space-between;align-items:center;padding:12px 14px 6px;display:flex}.dialog-head h2{margin:0;font-size:.9375rem;font-weight:600}.confirm-dialog{width:min(440px,94vw)}.confirm-dialog .dialog-head{padding-bottom:8px}.confirm-message{white-space:pre-line;overflow-wrap:anywhere;color:var(--muted);margin:0 0 14px;font-size:.8438rem}.btn.primary.danger{background:var(--err);color:var(--bg)}.btn.primary.danger:hover:not(:disabled){background:color-mix(in srgb, var(--err) 88%, var(--text))}@media (pointer:coarse){.confirm-dialog .dialog-actions .btn{min-width:44px;min-height:44px;padding-inline:16px}}.dialog-body{max-height:calc(84vh - 56px);padding:4px 14px 14px;overflow:auto}.add-app-body{gap:10px;display:grid}.add-app .qr{width:min(260px,70vw);height:auto;image-rendering:pixelated;border-radius:8px;margin:4px auto;display:block}.add-app-link{word-break:break-all;background:var(--bg);border:1px solid var(--line-2);-webkit-user-select:all;user-select:all;border-radius:6px;padding:6px 8px;font-size:.7188rem}.add-app-countdown{font-variant-numeric:tabular-nums}.add-app-expired{justify-items:center;gap:8px;padding:24px 0;display:grid}.picker-search{width:100%;margin-bottom:8px}.picker-list{max-height:55vh;margin:0;padding:0;list-style:none;overflow:auto}.picker-group{text-transform:none;padding:8px 8px 2px;font-weight:600}.picker-note{margin:0 0 6px}.picker-opt{cursor:pointer;text-align:left;background:0 0;border:0;border-radius:6px;align-items:center;gap:8px;width:100%;padding:7px 8px;display:flex}.picker-opt:hover,.picker-opt.active{background:var(--raise-2)}.picker-opt[aria-selected=true] .po-name{color:var(--accent)}.po-name{text-overflow:ellipsis;flex:1;min-width:0;overflow:hidden}.po-mark{color:var(--accent);font-size:.75rem}.toast{left:50%;bottom:calc(24px + env(safe-area-inset-bottom));z-index:60;background:var(--raise-2);border:1px solid var(--line-2);box-shadow:0 8px 24px var(--shadow);border-radius:10px;align-items:center;gap:10px;max-width:92vw;padding:8px 12px;display:flex;position:fixed;transform:translate(-50%)}.toast.err{border-color:#6a3036}.toast.warn{border-color:#5a4a2a}.topbar{border-bottom:1px solid var(--line);flex:none;align-items:center;gap:8px;height:max(48px,2.4rem);padding:0 12px;display:flex}.topbar-title{flex:1;align-items:center;gap:8px;min-width:0;display:flex}.topbar .title{text-overflow:ellipsis;white-space:nowrap;margin:0;font-size:.875rem;font-weight:500;overflow:hidden}.title-btn{all:unset;cursor:text;text-overflow:ellipsis;white-space:nowrap;border-radius:4px;display:block;overflow:hidden}.title-btn:hover,.title-btn:focus-visible{box-shadow:0 0 0 1px var(--line-2)}input[type=text].rename-field{width:100%;min-width:0;min-height:26px;font:inherit;color:var(--text);flex:1;padding:2px 6px}.topbar input.rename-field.title{max-width:520px}.rename-wrap{vertical-align:middle;flex:1;align-items:center;gap:4px;width:100%;min-width:0;max-width:100%;display:inline-flex}.topbar .rename-wrap{max-width:560px}.auto-name-btn{flex:none;font-size:14px;line-height:1}.naming{white-space:nowrap;flex:none;align-items:center;gap:4px;margin-left:6px;font-weight:400;display:inline-flex}.chip-server{color:var(--muted);border:1px solid var(--line);white-space:nowrap;border-radius:13px;align-items:center;gap:4px;max-width:420px;padding:2px 10px;font-size:.75rem;display:inline-flex;overflow:hidden}.chip-server .place-where{text-overflow:ellipsis;min-width:0;overflow:hidden}.session-place{color:var(--muted);border-bottom:1px solid var(--line);white-space:nowrap;flex:none;align-items:center;gap:4px;padding:4px 12px;font-size:.75rem;display:flex;overflow:hidden}.session-place .place-machine{color:var(--text,inherit);font-weight:500}.session-place .place-where,.session-place .place-branch{text-overflow:ellipsis;min-width:0;overflow:hidden}.session-place .icon{flex:none;width:12px;height:12px;margin-left:4px}.chip-server .icon{width:12px;height:12px;margin-left:6px}.chip-evidence{color:var(--muted);border:1px dashed var(--line);white-space:nowrap;cursor:help;border-radius:13px;align-items:center;padding:2px 10px;font-size:.75rem;display:inline-flex}.chip-evidence.screen,.chip-evidence.unknown{color:var(--warn);border-color:#5a4a2a}.btn.changes{font-family:var(--mono)}.add{color:var(--add)}.del{color:var(--del)}.home-shell{flex-direction:column;height:100%;min-height:0;display:flex}.home-scroll{flex:1;overflow:auto}.home{max-width:1180px;margin:0 auto;padding:24px 28px 48px}.home-head{justify-content:space-between;align-items:center;margin-bottom:12px;display:flex}.home-head h1{margin:0;font-size:1.75rem}.home-tools{gap:8px;margin:12px 0 8px;display:flex}.search{border:1px solid var(--line);border-radius:var(--r);background:var(--raise);color:var(--faint);flex:1;align-items:center;gap:8px;padding:0 10px;display:flex}.search input{width:100%;box-shadow:none;background:0 0;border:0}.count{margin:10px 0 4px;font-size:.75rem}.sessions-table{border-collapse:collapse;table-layout:fixed;width:100%}.sessions-table th{text-align:left;color:var(--faint);border-bottom:1px solid var(--line);padding:0;font-size:.75rem;font-weight:500}.th-btn{color:inherit;cursor:pointer;background:0 0;border:0;gap:4px;padding:8px 6px;display:inline-flex}.th-btn:hover{color:var(--text)}.sort-mark{color:var(--accent)}.sessions-table td{border-bottom:1px solid var(--line);text-overflow:ellipsis;white-space:nowrap;color:var(--muted);padding:7px 6px;overflow:hidden}.sessions-table tbody tr{cursor:pointer}.sessions-table tbody tr:hover{background:var(--side)}.sessions-table .col-title a{color:var(--text)}.sessions-table tr.unread .col-title a{font-weight:600}.col-status{width:64px}.col-pick{text-align:center;width:32px}.col-pick input{vertical-align:middle;cursor:pointer;margin:0}.home-tools .btn.small{min-height:32px}.bulk-bar{border:1px solid var(--line);border-radius:var(--r);background:var(--raise);align-items:center;gap:8px;margin:8px 0 0;padding:6px 10px;font-size:.8125rem;display:flex}.bulk-bar span{margin-right:auto}.archive-inactive{flex-direction:column;gap:12px;display:flex}.archive-inactive input[type=number]{background:var(--raise);border:1px solid var(--line);border-radius:var(--r);width:120px;min-height:32px;padding:6px 10px}.dialog-actions{justify-content:flex-end;gap:8px;display:flex}.col-title{width:30%}.col-project{width:16%}.col-server,.col-source{width:9%}.col-activity{width:10%}.col-actions{text-align:right;width:40px}.empty-cell{text-align:center;padding:24px!important}.home-list{margin:0;padding:0;list-style:none}.home-item{border-bottom:1px solid var(--line);align-items:center;display:flex}.home-item-link{flex:1;align-items:center;gap:10px;min-width:0;padding:10px 4px;display:flex}.home-item-text{flex-direction:column;flex:1;min-width:0;display:flex}.home-item-title,.home-item-meta{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.home-item.unread .home-item-title{font-weight:600}.home-item-meta{font-size:.7812rem}.offline-line{margin-top:10px}.empty{text-align:center;padding:48px 16px}.empty .display{margin:0 0 6px;font-size:1.375rem}.session-layout{height:100%;min-height:0;display:flex}.session-main{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex;position:relative}.scroller{overflow-anchor:none;flex:1;min-height:0;overflow:auto}.history-sentinel{height:1px}.history-edge{text-align:center;justify-content:center;align-items:center;gap:8px;margin:16px 0 0;display:flex}.history-edge.error{color:var(--err)}.column{max-width:var(--col);margin:0 auto;padding:0 20px}.column.narrow{max-width:560px;padding-top:40px}.transcript{flex-direction:column;gap:14px;padding:24px 0 8px;display:flex}.msg.user{align-self:flex-end;align-items:flex-end;gap:6px;max-width:85%;display:flex}.user-body{flex-direction:column;align-items:flex-end;gap:6px;min-width:0;display:flex}.msg-images{flex-wrap:wrap;justify-content:flex-end;gap:6px;display:flex}.msg-image{border:1px solid var(--line-2);background:var(--raise-2);border-radius:10px;display:block;overflow:hidden}.msg-image img{object-fit:contain;max-width:min(220px,60vw);max-height:220px;display:block}.file-chip{background:var(--raise-2);color:var(--muted);text-overflow:ellipsis;white-space:nowrap;border-radius:999px;align-items:center;gap:6px;max-width:240px;padding:4px 10px;font-size:.7812rem;display:inline-flex;overflow:hidden}.file-chip .icon{flex:none;width:14px;height:14px}.pill{background:var(--raise-2);white-space:pre-wrap;overflow-wrap:anywhere;border-radius:14px;padding:8px 14px}.msg-note{text-align:right;overflow-wrap:anywhere;margin:0}.tick{color:var(--faint);font-size:.6875rem}.tick.heard{color:var(--ok)}.tick.failed{color:var(--err)}.tick.queued{color:var(--warn)}.user-body{position:relative}.msg-tools{z-index:2;background:var(--raise);border:1px solid var(--line-2);opacity:0;pointer-events:none;border-radius:8px;gap:2px;margin-top:2px;padding:2px;transition:opacity .12s;display:flex;position:absolute;top:100%;right:0;box-shadow:0 2px 8px #0000001f}.msg-tools .icon-btn{width:28px;height:28px}.msg-tools .icon-btn[aria-disabled=true]{opacity:.4;cursor:default}.msg.user:hover .msg-tools,.msg.user:focus-within .msg-tools,.msg.user.tools-open .msg-tools{opacity:1;pointer-events:auto}.msg-more{opacity:.35;align-self:center;width:26px;height:26px;display:inline-grid}.msg.user:hover .msg-more,.msg.user:focus-within .msg-more,.msg.user.tools-open .msg-more{opacity:1}@media (hover:none){.msg-more{opacity:1}.msg.user:hover:not(.tools-open):not(:focus-within) .msg-tools{opacity:0;pointer-events:none}}.revert-banner{background:var(--raise-2);border:1px solid var(--line-2);border-radius:10px;align-items:center;gap:8px;margin:0 0 8px;padding:6px 8px 6px 12px;font-size:.8125rem;display:flex}.revert-banner .icon{width:16px;height:16px;color:var(--muted);flex:none}.revert-banner .revert-text{flex:1;min-width:0}.hub-msg-delivery{color:var(--warn);font-size:.6875rem}.composer-unavailable{align-items:center;gap:10px;padding:10px 2px;display:flex}.composer-unavailable p{flex:1;margin:0}.msg.assistant{overflow-wrap:anywhere;line-height:1.6}.msg.assistant.live .md>:is(p,h3,h4,h5,h6):last-child:after,.msg.assistant.live .md>:is(ul,ol):last-child>li:last-child>p:last-child:after{content:"▍";color:var(--accent);animation:1s steps(2,end) infinite blink}@keyframes blink{50%{opacity:0}}.md>:first-child{margin-top:0}.md>:last-child{margin-bottom:0}.md{min-width:0}.md p{margin:0 0 .7em}.md h3,.md h4,.md h5,.md h6{letter-spacing:-.005em;color:var(--violet);margin:1.15em 0 .45em;font-weight:600;line-height:1.35}.md h3{border-bottom:1px solid var(--line);padding-bottom:.25em;font-size:1.14em}.md h4{font-size:1.05em}.md h5,.md h6{color:color-mix(in srgb, var(--violet) 72%, var(--muted));font-size:1em}.md ul,.md ol{margin:0 0 .7em;padding-left:1.5em}.md li{margin:.15em 0}.md li::marker{color:var(--orange)}.md li>p{margin:0}.md li>:is(ul,ol){margin:.15em 0 .2em}.md :is(ul,ol).loose>li{margin:.35em 0}.md :is(ul,ol).loose>li>p{margin:0 0 .5em}.md :is(ul,ol).loose>li>p:last-child{margin-bottom:0}.md li.task{list-style:none;position:relative}.md li.task>input[type=checkbox]{width:.95em;height:.95em;accent-color:var(--accent);margin:0;position:absolute;top:.3em;left:-1.35em}.md li.task>input:checked~p{color:var(--muted)}.md .inline-code{color:var(--ok);background:color-mix(in srgb, var(--accent) 9%, var(--raise-2));border:1px solid color-mix(in srgb, var(--accent) 24%, var(--line));overflow-wrap:anywhere;border-radius:5px;padding:.05em .35em;font-size:.88em}.md a .inline-code{color:inherit}.md :is(th,td) .inline-code{white-space:nowrap;overflow-wrap:normal}.md strong{color:var(--orange);font-weight:600}.md del{color:var(--faint)}.md mark{background:color-mix(in srgb, var(--orange) 18%, transparent);color:var(--orange);-webkit-box-decoration-break:clone;box-decoration-break:clone;border-radius:3px;padding:0 .15em}.md .md-image{color:var(--accent)}.md .md-image:before{content:"🖼 "}.md blockquote{border-left:3px solid var(--line-2);color:var(--muted);margin:0 0 .7em;padding:.15em 0 .15em .85em}.md blockquote>:last-child{margin-bottom:0}.md a{color:var(--ok);text-decoration:underline;-webkit-text-decoration-color:color-mix(in srgb, var(--ok) 40%, transparent);text-decoration-color:color-mix(in srgb, var(--ok) 40%, transparent);text-underline-offset:2px;overflow-wrap:anywhere}.md a:hover{text-decoration-color:currentColor}.md hr{border:0;border-top:1px solid var(--line);margin:1em 0}.md .table-wrap{border:1px solid var(--line);border-radius:var(--r);max-width:100%;margin:0 0 .8em;overflow-x:auto}.md table{border-collapse:collapse;min-width:100%;font-size:.93em;line-height:1.45}.md th,.md td{border-bottom:1px solid var(--line);text-align:left;vertical-align:top;overflow-wrap:normal;padding:.4em .75em}.md th{background:var(--side);color:var(--text);white-space:nowrap;font-weight:600}.md tbody tr:last-child td{border-bottom:0}.md tbody tr:nth-child(2n) td{background:color-mix(in srgb, var(--text) 3%, transparent)}.md th+th,.md td+td{border-left:1px solid var(--line)}.md .code-block{border:1px solid var(--line);border-radius:var(--r);background:var(--side);margin:0 0 .8em;overflow:hidden}.md .code-head{border-bottom:1px solid var(--line);color:var(--faint);align-items:center;gap:2px;padding:2px 4px 2px 10px;font-size:.8em;display:flex}.md .code-lang{font-family:var(--mono);text-transform:lowercase;flex:1}.md .code-btn{color:var(--muted);cursor:pointer;font-size:inherit;background:0 0;border:0;border-radius:5px;min-height:24px;padding:3px 8px}.md .code-btn:hover{background:var(--raise-2);color:var(--text)}.md .code-btn[aria-pressed=true]{color:var(--accent)}.md pre.code{background:0 0;border:0;border-radius:0;margin:0;padding:.7em .9em;line-height:1.5;overflow:auto}.md .code-block.wrap pre.code{white-space:pre-wrap;overflow-wrap:anywhere}.md pre code{background:0 0;padding:0}.tok-comment{color:var(--faint);font-style:italic}.tok-string{color:var(--ok)}.tok-number{color:var(--orange)}.tok-keyword{color:var(--violet)}.tok-type,.tok-attr{color:var(--orange)}.tok-fn,.tok-meta{color:var(--blue)}.tok-prop,.tok-tag{color:var(--err)}.tok-add{color:var(--add);background:color-mix(in srgb, var(--add) 10%, transparent)}.tok-del{color:var(--del);background:color-mix(in srgb, var(--del) 10%, transparent)}pre.code{white-space:pre;font-size:.75rem}.fold-head{color:var(--muted);cursor:pointer;background:0 0;border:0;align-items:center;gap:6px;padding:2px 0;font-size:.8125rem;display:inline-flex}.fold-head:hover:not(:disabled){color:var(--text)}.fold-head:disabled{cursor:default}.fold-head .chev{width:13px;height:13px;transition:transform .15s}.fold-head[aria-expanded=true] .chev{transform:rotate(90deg)}.fold.has-failed .fold-head{color:#c9a0a4}.fold-body{border-left:1px solid var(--line);margin:6px 0 0 2px;padding-left:12px}.reasoning{color:var(--muted);white-space:pre-wrap;max-height:320px;font-size:.8125rem;overflow:auto}.reasoning.hidden-reasoning{font-style:italic}.tool-list{list-style:none}.tool-head{cursor:pointer;text-align:left;background:0 0;border:0;align-items:center;gap:8px;width:100%;padding:3px 0;font-size:.8125rem;display:flex}.tool-mark{width:14px;color:var(--ok);font-size:.6875rem}.tool.failed .tool-mark{color:var(--err)}.tool-name{font-family:var(--mono);font-size:.7812rem}.tool-summary{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-size:.7812rem;overflow:hidden}.tool-detail pre{background:var(--side);border:1px solid var(--line);border-radius:6px;max-height:360px;padding:8px;overflow:auto}.hub-msg{border:1px solid var(--line);border-left:3px solid var(--accent);border-radius:var(--r);max-width:85%;padding:6px 10px}.hub-msg.out{align-self:flex-end}.hub-msg-head{color:var(--muted);align-items:center;gap:6px;margin-bottom:2px;font-size:.7812rem;display:flex}.hub-msg-mark{color:var(--accent)}.hub-msg-kind{font-family:var(--mono);text-transform:uppercase;font-size:.7188rem}.hub-msg-label{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.hub-msg-text{white-space:pre-wrap;overflow-wrap:anywhere;font-size:.875rem}.hub-note .fold-body{color:var(--muted)}.subagent{border:1px solid var(--line);border-radius:var(--r);color:var(--muted);align-items:center;gap:8px;padding:8px 10px;display:flex}.subagent:hover{background:var(--side);color:var(--text)}.sub-mark{color:var(--accent);place-items:center;width:14px;display:inline-grid}.sub-label{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.sub-label strong{color:var(--text);font-weight:500}.subagent .chev{width:14px;height:14px}.note{color:var(--muted);margin:6px 0;font-size:.7812rem}.note.err{color:var(--err)}.working-line{align-items:center;gap:8px;margin:10px 0;font-size:.8125rem;display:flex}.idle-line{margin:12px 0 20px}.empty-session{text-align:center;padding-top:18vh}.blocker{border-color:#5a4a2a;margin:12px 0}.blocker-head{color:var(--warn);margin:0 0 4px}.blocker-text{white-space:pre-wrap;overflow-wrap:anywhere;margin:0 0 10px;font-size:.7812rem}.decisions{margin:12px 0}.decisions .section-title{color:var(--warn);margin:0 0 6px;font-size:.875rem}.decision{border-color:#5a4a2a;margin:12px 0}.decision.urgency-high{border-color:var(--err)}.decision.targeted{box-shadow:0 0 0 2px var(--accent)}.decision-question{font-size:.875rem}.decision-deadline{color:var(--warn);margin:0 0 8px}.decision-deadline.overdue{color:var(--err)}.decision .badge-pill.urgency.high{color:var(--err);border-color:var(--err)}.decision .badge-pill.recommended{color:var(--accent);border-color:var(--accent)}.decision .badge-pill.safe{color:var(--ok);border-color:var(--ok)}.decision .choice.recommended>span:first-of-type{font-weight:600}.decision-why{margin:6px 0}.decision-note,.decision textarea{width:100%;margin:6px 0}.decision-tier{margin:4px 0 8px}.decision .badge-pill.agent-request{color:var(--warn);border-color:var(--warn)}.escalation-details{grid-template-columns:max-content 1fr;gap:2px 12px;margin:0 0 10px;display:grid}.escalation-details dt{color:var(--muted)}.escalation-details dd{overflow-wrap:anywhere;min-width:0;margin:0}.escalation-resource{margin:0 6px 2px 0;display:inline-block}.decision-details dd{white-space:pre-wrap}.decision-details .escalation-resource,.decision-prompt{white-space:pre-wrap;overflow-wrap:anywhere}.decision-prompt{margin:0}.decision-answer-field{display:block}.cut-note{color:var(--warn);margin:0 0 4px;display:block}.escalation-resource,.decision-answer-value{unicode-bidi:isolate}.decision-prompt,.blocker.permission .blocker-text{unicode-bidi:plaintext}.clamp-toggle{color:var(--accent);cursor:pointer;font:inherit;background:0 0;border:0;padding:0 2px;font-size:.75rem;text-decoration:underline;display:inline}.blocker-text+.clamp-toggle{margin:-8px 0 10px;display:block}.blocker-recommendation{color:var(--accent);margin:-4px 0 10px}.answered-by{margin:6px 0}.blocker .answered-by{margin:8px 0 0}.grant-row .grant-facts{grid-template-columns:max-content 1fr;gap:2px 12px;margin:4px 0 0;display:grid}.grant-row .grant-facts dt{color:var(--muted)}.grant-row .grant-facts dd{overflow-wrap:anywhere;min-width:0;margin:0}.grant-row.ended{opacity:.6}.badge-pill.active{color:var(--ok);border-color:var(--ok)}.grant-form{flex-direction:column;gap:12px;display:flex}.grant-form label.text-field{flex-direction:column;gap:4px;display:flex}.grant-form textarea,.grant-form input[type=text]{width:100%}.grant-verbs{border:0;flex-wrap:wrap;gap:4px 14px;margin:0;padding:0;display:flex}.audit-row .audit-result.ok{color:var(--ok)}.audit-row .audit-result.warn{color:var(--warn)}.audit-row .audit-result.err{color:var(--err)}.form-card fieldset{border:0;min-width:0;margin:0;padding:0}.form-card fieldset:disabled{opacity:.6}.form-field{flex-direction:column;gap:4px;margin:0 0 12px;display:flex}.field-title{font-weight:500}.field-desc{display:block}.choice-group{flex-direction:column;gap:4px;display:flex}.choice,.check{cursor:pointer;align-items:baseline;gap:8px;display:flex}.choice-group input[type=text],.form-field>input[type=text]{width:100%}.field-error{color:var(--err);margin:0}.dock{padding:8px 0 calc(12px + env(safe-area-inset-bottom));background:linear-gradient(transparent, var(--bg) 18px);flex:none}.composer-box{border:1px solid var(--line-2);background:var(--raise);border-radius:14px;padding:10px 10px 6px 14px}.composer-box:focus-within{border-color:var(--line-2)}.composer textarea{resize:none;width:100%;min-height:24px;max-height:280px;box-shadow:none;background:0 0;border:0;padding:0;line-height:1.5}.composer.dragging .composer-box{border-color:var(--accent);border-style:dashed}.attachments{flex-wrap:wrap;gap:8px;margin:0 0 8px;padding:0;list-style:none;display:flex}.attachment{border:1px solid var(--line-2);background:var(--raise-2);border-radius:10px;justify-content:center;align-items:center;width:64px;height:64px;display:flex;position:relative;overflow:hidden}.attachment img{object-fit:cover;width:100%;height:100%;display:block}.attachment-remove{color:#fff;cursor:pointer;background:#000000a6;border:0;border-radius:50%;justify-content:center;align-items:center;width:22px;height:22px;padding:0;display:flex;position:absolute;top:3px;right:3px}.attachment-remove .icon{width:13px;height:13px}.composer-actions{align-items:center;gap:4px;margin-top:4px;display:flex}.composer-meta{align-items:center;gap:6px;padding:6px 4px 0;display:flex}.composer-meta>.muted{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.composer-error{color:var(--err);margin:0 0 6px;font-size:.7812rem}.composer-hint{margin:0 0 6px}.btn.send{border-radius:8px;min-width:30px;height:30px;padding:0 9px}.btn.send.steer{padding:0 12px}.btn.stop{height:30px;color:var(--text)}.split{border:1px solid var(--line-2);border-radius:8px;height:30px;display:inline-flex;overflow:hidden}.split button{color:var(--muted);cursor:pointer;background:0 0;border:0;place-items:center;display:grid}.split button:hover:not(:disabled){background:var(--raise-2);color:var(--text)}.split button:disabled{opacity:.4;cursor:default}.split-main{width:32px}.split.on .split-main{background:var(--accent);color:var(--accent-ink)}.split.on .split-main:hover:not(:disabled){background:var(--accent);color:var(--accent-ink);filter:brightness(1.08)}.voice-pill{border:1px solid var(--accent);min-height:28px;color:var(--accent);border-radius:999px;align-items:center;gap:6px;min-width:0;max-width:320px;padding:0 4px 0 8px;font-size:.75rem;display:inline-flex}.voice-pill .icon{flex:none;width:14px;height:14px}.voice-pill-link{color:inherit;text-overflow:ellipsis;white-space:nowrap;min-width:0;text-decoration:none;overflow:hidden}.voice-pill-link strong{color:var(--text);font-weight:500}.voice-pill .btn.small{height:22px;padding:0 8px}.voice-strip{justify-content:flex-end;padding:8px 12px 0;display:flex}.side-row.voice-here .side-title{color:var(--accent)}.voice-error{margin:0 0 8px}.split-chev{width:20px;border-left:1px solid var(--line-2)!important}.split-chev .icon{width:12px;height:12px}.split.on{border-color:var(--accent)}.split.on .split-main{color:var(--accent)}.model-chip{color:var(--faint);cursor:pointer;text-overflow:ellipsis;white-space:nowrap;background:0 0;border:0;border-radius:6px;max-width:220px;padding:2px 6px;font-size:.75rem;overflow:hidden}.model-chip:hover{background:var(--raise-2);color:var(--text)}.voice-bar{border:1px solid var(--line-2);background:var(--side);border-radius:12px;align-items:center;gap:10px;margin-bottom:8px;padding:6px 8px 6px 12px;display:flex}.voice-bar.paused{opacity:.8}.voice-bar.suspended{border-color:#5a4a2a;flex-wrap:wrap}.voice-bar.suspended .voice-state{color:var(--warn);flex:12em;min-width:0}.voice-bar.suspended .wave span{background:var(--warn)}.wave{align-items:center;gap:3px;height:22px;display:flex}.wave span{background:var(--accent);transform-origin:50%;border-radius:2px;width:3px;height:22px;transition:transform 80ms linear}.voice-bar.speaking .wave span{animation:.9s ease-in-out infinite talk}.voice-bar.speaking .wave span:nth-child(2){animation-delay:.15s}.voice-bar.speaking .wave span:nth-child(3){animation-delay:.3s}.voice-bar.speaking .wave span:nth-child(4){animation-delay:.45s}@keyframes talk{50%{transform:scaleY(.25)}}.voice-state{font-size:.8125rem}.voice-ignored{color:var(--faint);font-style:italic}.btn.end{color:var(--err)}.rail{width:var(--rail-w);border-left:1px solid var(--line);background:var(--bg);flex:none;padding:0 12px 24px;overflow:auto}.panel-handle{z-index:6;cursor:col-resize;touch-action:none;outline:none;flex:none;width:6px;margin:0 -3px;position:relative}.panel-handle:before{content:"";background:0 0;width:1px;transition:background .12s;position:absolute;top:0;bottom:0;left:50%;transform:translate(-50%)}.panel-handle:hover:before,.panel-handle.dragging:before,.panel-handle:focus-visible:before{background:var(--accent);width:2px}html.resizing,html.resizing *{cursor:col-resize!important;-webkit-user-select:none!important;user-select:none!important}html.resizing iframe{pointer-events:none}.workspace{flex-direction:column;flex:1;min-height:0;display:flex}.pane-grid{flex:1;min-height:0;display:grid}.pane{outline:none;flex-direction:column;min-width:0;min-height:0;display:flex;container-type:inline-size}.pane[hidden]{display:none}.pane>.session-layout{flex:1;height:auto;min-height:0}.workspace.ws-split .pane{box-shadow:inset 0 0 0 1px var(--line)}.workspace.ws-split .pane[data-focused]{box-shadow:inset 0 2px 0 var(--accent), inset 0 0 0 1px var(--line)}.pane:focus-visible{box-shadow:inset 0 0 0 2px var(--accent)!important}.pane-bar{border-bottom:1px solid var(--line);flex:none;align-items:center;gap:6px;padding:4px 12px;display:flex}.pane-count{margin-left:auto;font-size:.75rem}.pane-tools{flex:none;gap:2px;display:inline-flex}@container (width<=720px){.pane .chip-server{display:none}}.icon-btn.flip svg{transform:rotate(180deg)}.pane-handle{width:auto;margin:0}.pane-handle[data-axis=rows]{cursor:row-resize}.pane-handle[data-axis=rows]:before{width:auto;height:1px;inset:50% 0 auto;transform:translateY(-50%)}.pane-handle[data-axis=rows]:hover:before,.pane-handle[data-axis=rows].dragging:before,.pane-handle[data-axis=rows]:focus-visible:before{width:auto;height:2px}html.resizing-rows,html.resizing-rows *{cursor:row-resize!important;-webkit-user-select:none!important;user-select:none!important}.pane-tabs{border-bottom:1px solid var(--line);scrollbar-width:none;flex:none;display:flex;overflow-x:auto}.pane-tab{border-bottom:2px solid #0000;flex:none;align-items:center;min-width:0;max-width:60%;padding-right:4px;display:flex}.pane-tab.selected{border-bottom-color:var(--accent)}.pane-tab [role=tab]{min-height:40px;color:var(--muted);white-space:nowrap;text-overflow:ellipsis;cursor:pointer;background:0 0;border:0;padding:0 4px 0 12px;overflow:hidden}.pane-tab.selected [role=tab]{color:var(--text)}.rail-head{justify-content:space-between;align-items:center;height:48px;display:flex}.rail-title{color:var(--muted);font-size:.8125rem}.rail-card{border-top:1px solid var(--line);padding:12px 0}.rail-card h3{color:var(--faint);justify-content:space-between;margin:0 0 8px;font-size:.75rem;font-weight:500;display:flex}.kv{grid-template-columns:64px 1fr;gap:4px 8px;margin:0;font-size:.7812rem;display:grid}.kv dt{color:var(--faint)}.kv dd{text-overflow:ellipsis;white-space:nowrap;margin:0;overflow:hidden}.kv dd.kv-path{align-items:center;gap:4px;display:flex}.kv-path .path-tail{text-overflow:ellipsis;white-space:nowrap;text-align:left;direction:rtl;flex:1;min-width:0;overflow:hidden}.kv-path .icon-btn{flex:none;width:22px;height:22px}.meter{background:var(--raise-2);border-radius:3px;height:6px;margin-bottom:6px;overflow:hidden}.meter span{background:var(--accent);height:100%;display:block}.meter span.hot{background:var(--warn)}.mcp-list,.file-list{margin:0;padding:0;list-style:none}.mcp-list li{align-items:center;gap:8px;padding:2px 0;font-size:.7812rem;display:flex}.mcp-name{text-overflow:ellipsis;flex:1;overflow:hidden}.mcp-dot{background:var(--faint);border-radius:50%;width:6px;height:6px}.mcp-dot.connected{background:var(--ok)}.mcp-dot.failed,.mcp-dot.needs_auth{background:var(--err)}.mcp-dot.pending{background:var(--warn)}.diffstat{font-family:var(--mono);font-size:.75rem}.file{cursor:pointer;text-align:left;background:0 0;border:0;border-radius:5px;align-items:center;gap:6px;width:100%;padding:3px 4px;font-size:.7812rem;display:flex}.file:hover{background:var(--raise-2)}.file-status{font:600 .6562rem var(--mono);width:14px;color:var(--warn)}.file-status.added{color:var(--add)}.file-status.deleted{color:var(--del)}.file-name{text-overflow:ellipsis;white-space:nowrap;text-align:left;min-width:0;font-family:var(--mono);direction:rtl;flex:1;overflow:hidden}.diff-panel{z-index:20;background:var(--side);border:1px solid var(--line-2);border-radius:12px;flex-direction:column;display:flex;position:absolute;inset:48px 12px 12px;box-shadow:0 16px 48px #000a}.diff-head{border-bottom:1px solid var(--line);align-items:center;gap:10px;padding:8px 10px;display:flex}.diff-head select{min-width:0;font-family:var(--mono);flex:1;font-size:.7812rem}.wrap-toggle{align-items:center;gap:4px;display:inline-flex}.diff-body{flex:1;overflow:auto}table.diff{border-collapse:collapse;width:100%;font:.75rem/1.55 var(--mono)}table.diff td{vertical-align:top;padding:0 8px}table.diff .ln{width:1%;color:var(--faint);text-align:right;-webkit-user-select:none;user-select:none;white-space:nowrap}table.diff .code-line{white-space:pre}.diff-body.wrap table.diff .code-line{white-space:pre-wrap;overflow-wrap:anywhere}table.diff tr.add{background:#7fb68518}table.diff tr.del{background:#e06c7518}table.diff tr.hunk td{color:var(--faint);background:var(--raise);padding:3px 8px}table.diff .sign{color:var(--faint);margin-right:8px}.settings,.new-session{flex-direction:column;height:100%;min-height:0;display:flex}.settings-body{flex:1;gap:28px;padding:0 24px;display:flex;overflow:auto}.settings-nav{flex-direction:column;flex:none;align-self:flex-start;gap:2px;width:200px;padding-top:20px;display:flex;position:sticky;top:0}.settings-nav a{color:var(--muted);border-radius:6px;padding:6px 10px}.settings-nav a:hover{background:var(--raise-2);color:var(--text)}.settings-nav a[aria-current=page]{background:var(--raise-2);color:var(--text);box-shadow:inset 2px 0 0 var(--accent);font-weight:500}.settings-search{margin-bottom:10px}.settings-search input{width:100%}.settings-content{flex:1;min-width:0;max-width:720px;padding:12px 0 48px}.settings-page-title{font:400 1.5rem var(--serif);margin:10px 0 4px}.settings-section{border-bottom:1px solid var(--line);padding:16px 0;scroll-margin-top:8px}.settings-section:last-child{border-bottom:0}.settings-section .section-title{font:400 1.125rem var(--serif);color:var(--text);margin:0 0 10px}.settings-section h3{color:var(--muted);font-size:.8125rem;font-weight:500}.settings-footer{margin-top:24px}.settings-results,.settings-list{border:1px solid var(--line);border-radius:10px;margin:8px 0;padding:0;list-style:none}.settings-results li,.settings-list li{border-bottom:1px solid var(--line)}.settings-results li:last-child,.settings-list li:last-child{border-bottom:0}.settings-results a,.settings-list a{color:inherit;align-items:center;gap:10px;padding:10px 12px;display:flex}.settings-results a{flex-direction:column;align-items:flex-start;gap:2px}.settings-results a:hover,.settings-list a:hover{background:var(--raise-2)}.settings-list .grow{flex-direction:column;gap:2px;min-width:0;display:flex}.settings-list .icon{color:var(--faint);flex:none}.settings-empty{padding:12px 0}.settings-hit{border-radius:6px;animation:2.4s ease-out settings-hit}@keyframes settings-hit{0%,40%{background:color-mix(in srgb, var(--accent) 22%, transparent);box-shadow:0 0 0 2px var(--accent)}to{background:0 0;box-shadow:0 0 0 2px #0000}}.list{border:1px solid var(--line);border-radius:10px;margin:0;padding:0;list-style:none}.list li{border-bottom:1px solid var(--line);flex-wrap:wrap;align-items:center;gap:8px;padding:10px 12px;display:flex}.list li:last-child{border-bottom:0}.list li.disabled{opacity:.6}.name{font-weight:500}.switches{flex-direction:column;gap:10px;margin:10px 0 0;padding:0;list-style:none;display:flex}.appearance-theme{justify-content:space-between;align-items:center;gap:12px;display:flex}.theme-toggle{border:1px solid var(--line);background:var(--raise-2);border-radius:999px;gap:2px;padding:3px;display:inline-flex}.theme-choice{min-height:28px;color:var(--muted);cursor:pointer;background:0 0;border:0;border-radius:999px;align-items:center;gap:5px;padding:2px 9px;font-size:.75rem;display:inline-flex}.theme-choice:hover{color:var(--text)}.theme-choice[aria-checked=true]{background:var(--raise);color:var(--text);box-shadow:0 1px 3px var(--shadow)}.switch{cursor:pointer;justify-content:space-between;align-items:center;gap:12px;display:flex}.speed{align-items:center;gap:12px;display:flex}.speed input{accent-color:var(--accent);flex:1}.account-card{align-items:center;gap:12px;display:flex}.field{flex-direction:column;gap:4px;display:flex}.field label,.field-label{color:var(--muted);font-size:.7812rem}.field .row input{flex:1}.field-error{color:var(--err);margin:0;font-size:.75rem}.inherit{color:var(--faint);margin:0}.speech-card{flex-direction:column;gap:10px;display:flex}.speech-card legend{color:var(--muted);padding:0 6px}.key-summary{margin:0;font-size:.8125rem}.entry{flex-direction:column;gap:14px;max-width:440px;margin:0 auto;padding:12vh 20px 40px;display:flex}.brand-big{align-items:center;gap:12px;margin:0;font-size:1.875rem;display:flex}.pair-code{font-family:var(--mono);letter-spacing:.3em;font-size:1.25rem}.greeting{margin:0 0 18px;font-size:1.625rem}details.card summary{cursor:pointer;color:var(--muted)}.drawer-backdrop,.sheet-backdrop{z-index:30;background:#0009;position:fixed;inset:0}@media (max-width:760px){.shell.phone .sidebar{z-index:40;width:min(86vw,320px);padding-top:env(safe-area-inset-top);position:fixed;inset:0 auto 0 0;box-shadow:8px 0 32px #000a}.topbar{padding-top:env(safe-area-inset-top);height:calc(48px + env(safe-area-inset-top))}.home{padding:16px 14px 40px}.home-head h1{font-size:1.5rem}.column{padding:0 14px}.chip-server,.btn.changes{display:none}.rail{z-index:40;border:1px solid var(--line-2);width:auto;max-height:72vh;padding-bottom:calc(24px + env(safe-area-inset-bottom));border-radius:16px 16px 0 0;position:fixed;bottom:0;left:0;right:0;box-shadow:0 -12px 40px #000a}.diff-panel{inset:calc(48px + env(safe-area-inset-top)) 0 0;border-radius:0}.settings-nav{display:none}.settings-body{padding:0 14px}.settings-page-title{display:none}.composer-meta .model-chip{max-width:40vw}.msg.user{max-width:92%}}.notify-status{border-radius:var(--r);border:1px solid var(--line);margin:8px 0;padding:8px 12px}.notify-status.warn{color:var(--warn);border-color:#5a4a2a}.notify-status.ok{color:var(--ok,inherit)}.notify-facts{grid-template-columns:max-content 1fr;gap:2px 12px;margin:0 0 8px;display:grid}.notify-facts dd{margin:0}.row-actions{flex-wrap:wrap;gap:8px;display:flex}.quiet-hours{flex-wrap:wrap;align-items:center;gap:8px;margin-top:6px;display:flex}.notify-summary{margin:4px 0 8px}.notify-status-row{flex-wrap:wrap;align-items:baseline;gap:4px 12px;margin:8px 0;display:flex}.notify-status-row .notify-status{flex:260px;margin:0}.notify-details summary{cursor:pointer;color:var(--muted)}.notify-details[open]{flex-basis:100%}.notify-details .notify-facts{margin:6px 0 0}.notify-group{border:1px solid var(--line);border-radius:10px;margin:8px 0 0}.notify-group>summary{cursor:pointer;flex-wrap:wrap;align-items:baseline;gap:4px 10px;padding:10px 12px;list-style:none;display:flex}.notify-group>summary::-webkit-details-marker{display:none}.notify-group>summary:before{content:"▸";color:var(--faint);width:.8em}.notify-group[open]>summary:before{content:"▾"}#notifications .notify-group>summary h4{margin:0}.notify-group-summary{text-align:right;flex:1;min-width:0}.notify-group>.switches{padding:0 12px 8px}.notify-group h4,#notifications h4{color:var(--muted);text-transform:uppercase;letter-spacing:.04em;margin:14px 0 0;font-size:.8125rem;font-weight:500}.notify-kind{flex-direction:column;gap:2px;min-width:0;display:flex}.notify-kind .small{line-height:1.35}.switch input[type=checkbox]{flex:none}.notify-test{flex-wrap:wrap;align-items:center;gap:6px;display:inline-flex}.notify-test select{max-width:60vw}p.small.warn{color:var(--warn)}p.small.err{color:var(--err,#e5484d)}p.small.ok{color:var(--ok,inherit)}.voice-bar{flex-wrap:wrap}.voice-hint{color:var(--muted,inherit);flex-basis:100%;margin:2px 0 0}button.link{color:var(--accent,#fab283);cursor:pointer;font:inherit;background:0 0;border:0;padding:0;text-decoration:underline}.tap-to-start{width:100%;margin-bottom:8px;padding:14px;font-size:1.05em;display:block}.new-column{max-width:720px;padding-top:12vh}.new-composer .composer-box{padding:14px 12px 8px 16px}.new-composer textarea{resize:none;width:100%;min-height:72px;color:inherit;font:inherit;background:0 0;border:0;outline:0;font-size:.9375rem}.icon-send{background:var(--accent);width:32px;height:32px;color:var(--accent-ink);cursor:pointer;border:0;border-radius:50%;justify-content:center;align-items:center;display:inline-flex}.icon-send:disabled{background:var(--raise-2);color:var(--faint);cursor:not-allowed}.env-meta{flex-wrap:wrap;align-items:center;gap:4px;margin-top:8px;display:flex}.new-dir{overflow-wrap:anywhere;margin:6px 4px 0}.meta-chip{color:var(--faint);cursor:pointer;background:0 0;border:0;border-radius:6px;align-items:center;gap:6px;max-width:280px;padding:4px 8px;font-size:.7812rem;display:inline-flex}.meta-chip:hover:not(:disabled):not(.readonly){background:var(--raise-2);color:var(--text)}.meta-chip.readonly{cursor:default}.meta-chip .icon{flex:none;width:14px;height:14px}.meta-chip .online-dot{margin:0}.chip-text{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.meta-chip.folder-chip.unset{color:var(--text);box-shadow:inset 0 0 0 1px var(--line-2)}.meta-chip.folder-chip.unset.asked{color:var(--warn);box-shadow:inset 0 0 0 1px var(--warn)}.new-need-project{color:var(--warn);margin:6px 4px 0}.chip-caret{opacity:.6}.toggle-chip input{margin:0}.folder-menu{width:360px;max-width:calc(100vw - 16px);padding:6px}.folder-search{box-sizing:border-box;width:100%;margin-bottom:4px}.folder-list{max-height:50vh;overflow:auto}.folder-list .menu-hint{text-overflow:ellipsis;white-space:nowrap;max-width:160px;overflow:hidden}.rail-card h3{align-items:center}.card-toggle{color:inherit;font:inherit;cursor:pointer;background:0 0;border:0;align-items:center;gap:4px;padding:0;display:inline-flex}.card-toggle:hover{color:var(--text)}.card-chevron{width:12px;height:12px;transition:transform .15s;transform:rotate(90deg)}.rail-card.collapsed .card-chevron{transform:rotate(0)}.rail-card.collapsed h3{margin-bottom:0}.new-column{box-sizing:border-box;width:100%}.menu-label{flex:1 0 auto;max-width:100%}.menu-hint{text-overflow:ellipsis;white-space:nowrap;flex:0 auto;min-width:0;overflow:hidden}.crumb{white-space:nowrap;text-overflow:ellipsis;align-items:center;gap:4px;max-width:30%;font-size:.8125rem;text-decoration:none;display:inline-flex;overflow:hidden}.crumb:hover{color:var(--text)}.crumb-chev{width:12px;height:12px;transform:rotate(180deg)}.crumb-sep{margin:0 4px}.sync-note{z-index:30;pointer-events:none;background:var(--side);color:var(--muted,var(--faint));border:1px solid var(--line);border-radius:999px;padding:2px 10px;font-size:.857rem;position:absolute;top:6px;left:50%;transform:translate(-50%)}.sync-note.updated{color:var(--accent)}.jobs-badge{background:var(--line);min-width:16px;height:16px;color:var(--text);border-radius:8px;flex:none;justify-content:center;align-items:center;margin-left:4px;padding:0 4px;font-size:.75rem;line-height:1;display:inline-flex}.job-list{flex-direction:column;gap:6px;margin:0;padding:0;list-style:none;display:flex}.job{grid-template-columns:auto 1fr;align-items:center;column-gap:8px;display:grid}.job .muted{grid-column:2}.job-command{text-overflow:ellipsis;white-space:nowrap;font-size:.893rem;overflow:hidden}.job-dot{background:var(--faint);border-radius:50%;width:7px;height:7px}.job-dot.on{background:var(--accent)}.job-dot.bad{background:var(--warn)}.retry-note{color:var(--warn);margin:0 0 6px}.activity-hint{border:1px solid var(--accent);border-radius:var(--r);background:color-mix(in srgb, var(--accent) 10%, transparent);margin:6px 0 10px;padding:8px 10px;font-size:.929rem}.scroller,.home-scroll{touch-action:pan-x pan-y}@media (pointer:coarse){input[type=search],input[type=text],input[type=password],input[type=number],select,textarea,.composer textarea,.new-composer textarea{font-size:max(16px,1rem)}}.banner.session-error{border-width:0 0 1px;border-color:color-mix(in srgb, var(--err) 45%, var(--line));background:color-mix(in srgb, var(--err) 10%, var(--bg));color:var(--text);border-radius:0;justify-content:flex-start;align-items:flex-start;margin:0}.session-error-mark,.turn-error-mark{color:var(--err);flex:none;font-weight:600;line-height:1.4}.session-error-body,.turn-error-body{flex-direction:column;gap:2px;min-width:0;display:flex}.session-error-head,.turn-error-head{color:var(--err);flex-wrap:wrap;align-items:baseline;gap:4px 8px;display:flex}.session-error-status,.turn-error-status{border:1px solid;border-radius:999px;padding:0 6px;font-size:.75rem}.session-error-where{font-size:.8125rem}.session-error-message,.turn-error-message{overflow-wrap:anywhere;white-space:pre-wrap;max-height:8em;font-size:.8125rem;overflow:auto}.msg.turn-error{border:1px solid color-mix(in srgb, var(--err) 45%, var(--line));border-radius:var(--r);background:color-mix(in srgb, var(--err) 8%, transparent);align-items:flex-start;gap:8px;padding:8px 12px;display:flex}.msg.turn-retry{color:var(--muted);overflow-wrap:anywhere;align-items:baseline;gap:8px;margin:6px 0;font-size:.8125rem;display:flex}.msg.turn-retry.waiting{color:var(--warn)}.turn-retry-mark{flex:none}.error-badge{background:var(--err);min-width:16px;height:16px;color:var(--bg);border-radius:8px;flex:none;justify-content:center;align-items:center;margin-left:4px;font-size:.75rem;font-weight:700;line-height:1;display:inline-flex}.col-now.error,.home-item-meta.error{color:var(--err)}.rail-error{color:var(--err);border:1px solid color-mix(in srgb, var(--err) 45%, var(--line));border-radius:var(--r);overflow-wrap:anywhere;margin:0 0 10px;padding:6px 10px}@media (max-width:760px){.banner.session-error{padding:8px 14px}.session-error-message{max-height:5.5em}}
|