teapot-coding-agent 0.29.13 → 0.29.14

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "teapot-coding-agent",
3
- "version": "0.29.13",
3
+ "version": "0.29.14",
4
4
  "description": "A lightweight, always-on multi-agent harness for AI coding agents",
5
5
  "type": "module",
6
6
  "license": "AGPL-3.0-or-later",
@@ -0,0 +1 @@
1
+ :root{--bg-darkest:#1a1c22;--bg-dark:#232630;--bg-mid:#2b2e39;--bg-light:#343845;--fg:#dcdee4;--dim:#9298a5;--line:#1d2027;--acc:#5865f2;--ok:#3ba55d;--warn:#faa81a;--err:#ed4245;--tool:#3ba0c9;--term-bg:#0d0e12;--term-fg:#dcdee4;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;font-family:gg sans,ui-sans-serif,system-ui,-apple-system,Segoe UI,sans-serif}[data-theme=midnight]{--bg-darkest:#0d0f18;--bg-dark:#12141f;--bg-mid:#1b1f31;--bg-light:#252a42;--fg:#dfe2f2;--dim:#8a90ad;--line:#0a0c14;--acc:#8b7cf7;--ok:#54c08a;--warn:#e5b567;--err:#ef6a6a;--tool:#6aa9e9;--term-bg:#0a0c13;--term-fg:#dfe2f2}[data-theme=tea]{--bg-darkest:#241c16;--bg-dark:#2e241c;--bg-mid:#3b2f24;--bg-light:#493b2d;--fg:#f0e4d2;--dim:#b39d82;--line:#1b140f;--acc:#d98e32;--ok:#7fa653;--warn:#e0b058;--err:#cf5b47;--tool:#c9975f;--term-bg:#1d1712;--term-fg:#ecdcc3}[data-theme=coffee]{--bg-darkest:#191410;--bg-dark:#211a14;--bg-mid:#30271e;--bg-light:#403527;--fg:#ede3d0;--dim:#a89478;--line:#120d07;--acc:#c68a4b;--ok:#8aa15c;--warn:#d9a441;--err:#c25450;--tool:#a67c52;--term-bg:#15100c;--term-fg:#e8dcc5}[data-theme=matcha]{--bg-darkest:#1b2217;--bg-dark:#232b1e;--bg-mid:#2f3a28;--bg-light:#3c4a33;--fg:#e8eeda;--dim:#9aab84;--line:#131a10;--acc:#8db64e;--ok:#6fae4e;--warn:#d8b13c;--err:#cd5c50;--tool:#5da88f;--term-bg:#151b11;--term-fg:#dfe8cb}[data-theme=matrix]{--bg-darkest:#060a06;--bg-dark:#0a0f0a;--bg-mid:#122116;--bg-light:#18301d;--fg:#c9f2cf;--dim:#6fa075;--line:#030603;--acc:#2fd558;--ok:#39c95f;--warn:#b8d977;--err:#ff6b6b;--tool:#57c99b;--term-bg:#030503;--term-fg:#3f7}[data-theme=sunset]{--bg-darkest:#1c1422;--bg-dark:#241b2b;--bg-mid:#33253e;--bg-light:#452f52;--fg:#f2e6ea;--dim:#ab93a8;--line:#150e1b;--acc:#f2784b;--ok:#63b46f;--warn:#eda63d;--err:#e25563;--tool:#b06ac9;--term-bg:#170f1d;--term-fg:#f0dfe4}[data-theme=light]{--bg-darkest:#eceef4;--bg-dark:#f6f7fa;--bg-mid:#e2e5ee;--bg-light:#fff;--fg:#24272f;--dim:#5d6470;--line:#d8dbe4;--acc:#4757d8;--ok:#2b8a4b;--warn:#b97a0f;--err:#d83c3f;--tool:#2278a8;--term-bg:#fff;--term-fg:#24272f;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}[data-theme=strawberry]{--bg-darkest:#fbe4ea;--bg-dark:#fdf0f3;--bg-mid:#f7d4de;--bg-light:#fffafb;--fg:#4a2733;--dim:#96707e;--line:#f0ccd6;--acc:#e05575;--ok:#4d9e63;--warn:#c98a2d;--err:#d43d51;--tool:#b05687;--term-bg:#fff5f8;--term-fg:#4a2733;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}[data-theme=ramune]{--bg-darkest:#ddeff7;--bg-dark:#ecf7fb;--bg-mid:#c9e7f4;--bg-light:#fbfeff;--fg:#173342;--dim:#5b7d90;--line:#c2e2ef;--acc:#1d86ae;--ok:#3a9e6e;--warn:#cf9a2a;--err:#d64f5c;--tool:#3a9db8;--term-bg:#f4fbfd;--term-fg:#173342;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{background:var(--bg-dark);color:var(--fg);font-size:15px}.layout{grid-template-columns:250px 1fr 370px;height:100dvh;display:grid;overflow:hidden}.layout.right-hidden{grid-template-columns:250px 1fr}.layout.right-hidden .rightbar{display:none}@media (width<=1100px){.layout,.layout.right-hidden{grid-template-columns:220px 1fr}.layout.right-hidden .rightbar,.layout .rightbarbackdrop{display:block}.rightbar .rightbarhead{z-index:1;display:flex;position:sticky;top:0}.rightbar{z-index:5;width:min(420px,92vw);box-shadow:none;transition:transform .18s,box-shadow .18s;position:fixed;top:0;bottom:0;right:0;transform:translate(100%)}.rightbar.open{transform:none;box-shadow:-8px 0 24px #0007}}.sidebar{background:var(--bg-darkest);flex-direction:column;padding:10px 8px;display:flex;overflow:hidden auto}.themepop{background:var(--bg-mid);border:1px solid var(--bg-light);border-radius:8px;flex-direction:column;gap:8px;padding:10px;display:flex;position:static}.trow{color:var(--fg);cursor:pointer;align-items:center;gap:6px;font-size:12.5px;display:flex}.trow select{background:var(--bg-darkest);color:var(--fg);border:none;border-radius:5px;outline:none;padding:3px 6px}.themegrid{grid-template-columns:1fr 1fr;gap:4px;display:grid}.themebtn{background:var(--bg-light);color:var(--fg);cursor:pointer;text-align:left;border:1px solid #0000;border-radius:6px;align-items:center;gap:6px;min-width:0;padding:5px 8px;font-size:12px;display:flex;overflow:hidden}.themebtn>:last-child{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.themebtn:hover{filter:brightness(1.15)}.themebtn.on{border-color:var(--acc)}.swdots{flex-shrink:0;gap:2px;display:inline-flex}.swdots i{border-radius:50%;width:9px;height:9px;display:inline-block;box-shadow:inset 0 0 0 1px #0004}.agent-list{flex:1;min-width:0;min-height:0;overflow-y:auto}.wsheader{letter-spacing:.04em;text-transform:uppercase;color:var(--dim);cursor:pointer;-webkit-user-select:none;user-select:none;border-top:1px solid var(--line);align-items:center;gap:6px;margin-top:6px;padding:10px 10px 4px;font-size:11px;font-weight:600;display:flex}.wsheader:first-child{border-top:none;margin-top:0}.wsheader:hover{color:var(--fg)}.wsheader .wscaret{flex-shrink:0;width:12px;font-size:9px}.wsheader .wscount{background:var(--bg-light);color:var(--dim);letter-spacing:0;border-radius:999px;flex-shrink:0;margin-left:auto;padding:0 6px;font-size:10px;font-weight:600;line-height:15px}.agent-item{cursor:pointer;color:var(--fg);border-radius:6px;align-items:center;gap:8px;min-width:0;margin-bottom:2px;padding:7px 10px;display:flex}.agent-item>span:not(.dot):not(.caret):not(.caret-spacer):not(.notifbadge):not(.subcount):not(.subtag):not(.ghosttag):not(.mini-cron):not(.goaldone){text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.agent-item .subtag{color:var(--dim);font-size:10px}.agent-item .goaldone{flex-shrink:0}.caret{cursor:pointer;width:12px;color:var(--dim);text-align:center;-webkit-user-select:none;user-select:none;flex-shrink:0;font-size:9px}.caret:hover{color:var(--fg)}.caret-spacer{flex-shrink:0;width:12px}.agent-item:hover{background:var(--bg-mid)}.agent-item.collapsed{cursor:pointer}.agent-item.sel{background:var(--bg-mid)}.agent-item.sub-row{color:var(--dim)}.agent-item.sub-row.sel{color:var(--fg)}.dot{border-radius:50%;flex-shrink:0;width:9px;height:9px}.dot.running{background:var(--ok);box-shadow:0 0 6px var(--ok)}.dot.waiting{background:var(--acc);box-shadow:0 0 6px var(--acc);animation:1.6s ease-in-out infinite pulse}.badge.waiting{color:var(--acc)}.dot.idle{background:var(--warn)}.dot.stopped{background:var(--dim)}.dot.error{background:var(--err);box-shadow:0 0 6px var(--err)}.sidebar .metrics{color:var(--dim);border-top:1px solid var(--line);margin-top:12px;padding:8px 10px;font-size:11px;line-height:1.7}.sidebar-footer{border-top:1px solid var(--line);flex-direction:column;gap:2px;margin-top:auto;padding-top:8px;display:flex}.footer-row{align-items:center;gap:8px;display:flex}.footer-row .conn{margin-left:0}.sidebar-footer .metrics{border-top:none;margin-top:4px;padding:0}.brand{color:var(--fg);align-items:center;gap:8px;font-size:14px;display:flex}.version{color:var(--dim);font-family:ui-monospace,Menlo,monospace;font-size:11px}.channel{flex-direction:column;min-width:0;min-height:0;display:flex;position:relative;overflow:hidden}.chan-head{border-bottom:2px solid var(--line);background:var(--bg-dark);flex-shrink:0;align-items:center;gap:10px;padding:10px 16px;display:flex}.chan-head .hash{color:var(--dim);font-size:20px}.chan-head .title{font-weight:700}.chan-head .sub{color:var(--dim);text-overflow:ellipsis;white-space:nowrap;margin-left:8px;font-size:12px;overflow:hidden}.badge{background:var(--bg-light);vertical-align:middle;border-radius:10px;padding:1px 8px;font-size:11px}.badge.running{color:var(--ok)}.badge.error{color:var(--err)}.badge.idle{color:var(--warn)}.badge.done{color:var(--acc)}.badge.queued{color:var(--warn);white-space:nowrap;background:#faa81a1a;border:1px solid #faa81a44}.feed{overscroll-behavior:contain;flex:1;min-height:0;padding:14px 0 8px;overflow-y:auto}.msg{gap:14px;padding:3px 18px;display:flex}.msg:hover{background:#ffffff08}.msg.pending{opacity:.75}.msg.pending .ts{color:var(--warn);font-weight:600}.msg.pending .avatar{animation:1.6s ease-in-out infinite pulse}.msg.pending .editbtn.cancel{color:var(--err)}.msg.withdrawn{opacity:.55}.msg.withdrawn .msg-body{text-decoration:line-through;-webkit-text-decoration-color:var(--muted);text-decoration-color:var(--muted)}.msg.withdrawn .msg-head{text-decoration:none}.msg.withdrawn .ts{color:var(--muted);font-weight:600}.msg.grouped{padding-top:0}.avatar{border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;width:38px;height:38px;margin-top:2px;font-size:17px;display:flex}.msg-body{flex:1;min-width:0}.msg-head{align-items:baseline;gap:8px;display:flex}.actor{color:var(--warn);white-space:nowrap;font-size:11px}.runcard{flex-direction:column;gap:8px;display:flex}.statgrid{grid-template-columns:repeat(3,1fr);gap:6px;display:grid}.stat{background:var(--bg-mid);border-radius:6px;flex-direction:column;gap:1px;min-width:0;padding:5px 8px;display:flex}.stat span{color:var(--dim);text-transform:uppercase;letter-spacing:.05em;font-size:10px}.stat b{text-overflow:ellipsis;font-size:15px;overflow:hidden}.statrow{align-items:center;gap:8px;min-width:0;font-size:12.5px;display:flex}.statrow .k{color:var(--dim);text-transform:uppercase;letter-spacing:.05em;white-space:nowrap;flex-shrink:0;width:auto;min-width:58px;font-size:10px}.pill{background:var(--bg-mid);white-space:nowrap;border-radius:999px;margin-left:auto;padding:1px 8px;font-size:11px}.pill.ok{color:var(--ok)}.pill.warn{color:var(--warn)}.pill.crit{color:var(--err);background:#ed42451a}.bartrack{background:var(--bg-light);border-radius:3px;height:6px;margin-top:2px;overflow:hidden}.barfill{background:var(--ok);border-radius:3px;min-width:2px;height:100%;transition:width .3s}.barfill.warn{background:var(--warn)}.barfill.crit{background:var(--err)}.author{font-size:14.5px;font-weight:600}.ts{color:var(--dim);font-size:11px}.content{white-space:pre-wrap;word-break:break-word;line-height:1.45}.content p{margin:2px 0}.content pre{background:var(--bg-darkest);border-radius:6px;padding:8px;overflow-x:auto}.content pre>code{white-space:pre-wrap;overflow-wrap:anywhere}.content code{background:var(--bg-darkest);border-radius:4px;padding:1px 4px;font-size:13px}.content pre code{background:0 0;padding:0}.content h1,.content h2,.content h3,.content h4,.content h5,.content h6{margin:8px 0 2px;font-size:15px}.content h1{font-size:16.5px}.content h2{font-size:15.5px}.content blockquote{border-left:3px solid var(--bg-light);color:var(--dim);background:#ffffff05;border-radius:0 4px 4px 0;margin:4px 0;padding:2px 10px}.content blockquote p{margin:2px 0}.content hr{border:none;border-top:1px solid var(--bg-light);margin:8px 0}.content del{color:var(--dim)}.content img{border-radius:6px;max-width:100%}.content li.task{margin-left:-18px;list-style:none}.content li:has(>input[type=checkbox]){margin-left:-18px;list-style:none}.content li input[type=checkbox]{accent-color:var(--ok);margin-right:6px}input[type=checkbox]{accent-color:var(--acc)}.content a{color:var(--tool);text-decoration:underline;-webkit-text-decoration-color:color-mix(in srgb, var(--tool) 45%, transparent);text-decoration-color:color-mix(in srgb, var(--tool) 45%, transparent);text-underline-offset:2px}.content a:hover{filter:brightness(1.15)}.themebtn.on{background:var(--acc);color:#fff}.trow select:focus{outline:1px solid var(--acc)}.tbl{margin:6px 0;overflow-x:auto}.tbl table{border-collapse:collapse;font-size:13px}.tbl th,.tbl td{border:1px solid var(--bg-light);text-align:left;padding:3px 9px}.tbl th{background:var(--bg-darkest);font-weight:600}.embed{border-left:3px solid var(--tool);background:var(--bg-darkest);border-radius:4px;margin-top:3px;padding:6px 10px;font-size:13.5px}.embed.fail{border-color:var(--err)}.embed.warn-embed{border-color:var(--warn)}.embed.warn-embed .mono{color:var(--warn)}.embed.done{border-color:var(--ok)}.embed.running{border-color:var(--warn)}.embed.running summary .meta:after{content:"⋯";color:var(--warn);margin-left:6px;animation:1s step-end infinite blink;display:inline-block}.embed summary{gap:8px}.embed summary .mono{font-family:ui-monospace,Menlo,monospace}.toolbody{background:var(--bg-darkest);white-space:pre-wrap;word-break:break-word;border-radius:4px;max-height:340px;margin:4px 0;padding:6px 8px;font-size:12.5px;overflow-y:auto}.toolbody.del{border-left:2px solid var(--err);color:#f0a5a6;background:#ed424514}.toolbody.add{border-left:2px solid var(--ok);color:#9fd8ae;background:#3ba55d14}.toolbody.patch{padding:4px 8px}.toolbody.patch .pline{white-space:pre-wrap;word-break:break-word}.toolbody.patch .pline.add{color:#9fd8ae;border-left:2px solid var(--ok);background:#3ba55d14;padding-left:4px}.toolbody.patch .pline.del{color:#f0a5a6;border-left:2px solid var(--err);background:#ed424514;padding-left:4px}.toolbody.patch .pline.meta{color:var(--dim)}.embed.question{border-color:var(--acc);background:#5865f20f}.qopts{flex-wrap:wrap;gap:6px;margin-top:6px;display:flex}.qopt{background:var(--acc);color:#fff;cursor:pointer;border:none;border-radius:999px;padding:3px 12px;font-size:12.5px}.qopt:hover{filter:brightness(1.15)}.qopt:disabled{opacity:.45;cursor:default;filter:none}.embed.question.answered{opacity:.75}.qfree{gap:6px;margin-top:8px;display:flex}.qfree input{background:var(--bg-mid);border:1px solid var(--bg-light);color:var(--fg);border-radius:6px;outline:none;flex:1;padding:4px 10px;font-size:13px}.qfree input:focus{border-color:var(--acc)}.qfree button{background:var(--bg-light);color:var(--fg);cursor:pointer;border:none;border-radius:6px;padding:4px 12px;font-size:12.5px}.qfree button:disabled{opacity:.45;cursor:default}.bashelapsed{color:var(--warn);margin-left:8px;font-size:11px}.embed.question .meta{margin-top:6px}.embed.decision{border-color:var(--acc);background:#5865f20f}.embed.decision summary .meta{margin-left:6px}.embed.decision .content{margin-top:3px;font-size:13px}.embed summary{cursor:pointer;-webkit-user-select:none;user-select:none;list-style-position:outside}.embed summary::marker{color:var(--dim)}.embed[open] summary{margin-bottom:4px}.embed .mono{white-space:pre-wrap;word-break:break-word;max-height:340px;font-family:ui-monospace,Menlo,monospace;font-size:12.5px;overflow-y:auto}.embed .meta{color:var(--dim);margin-top:3px;font-size:11px}.reasoning{border-left:3px dashed var(--bg-light);color:var(--dim);background:#ffffff05;border-radius:4px;margin:2px 0;padding:2px 10px;font-size:12.5px}.reasoning summary{cursor:pointer;-webkit-user-select:none;user-select:none;opacity:.75}.reasoning summary:hover{opacity:1;color:var(--fg)}.reasoning[open] summary{margin-bottom:4px}.reasoning .mono{white-space:pre-wrap;word-break:break-word;max-height:260px;overflow-y:auto}.msg.live .avatar{animation:1.6s ease-in-out infinite pulse}.cursor{color:var(--acc);animation:1s step-end infinite blink}.interrupted{color:var(--warn);margin-top:3px;font-size:11.5px}@keyframes blink{50%{opacity:0}}@keyframes pulse{50%{opacity:.55}}.conn{background:var(--err);vertical-align:middle;width:8px;height:8px;box-shadow:0 0 6px var(--err);border-radius:50%;display:inline-block}.conn.ok{background:var(--ok);box-shadow:0 0 6px var(--ok)}.copybtn{border:1px solid var(--bg-light);color:var(--dim);cursor:pointer;background:0 0;border-radius:4px;flex-shrink:0;padding:0 5px;font-size:11px;line-height:16px}.copybtn:hover{color:var(--fg);filter:brightness(1.3)}.embed summary{align-items:center;gap:6px;display:flex}.embed summary .iconmeta{flex-shrink:0;font-size:11px}.toolcopy{flex-shrink:0;gap:4px;margin-left:auto;display:flex}.msgfoot{color:var(--dim);align-items:center;gap:6px;margin-top:4px;font-size:11px;display:flex}.imgstage{flex-wrap:wrap;gap:6px;margin-bottom:6px;display:flex}.imgchip{display:inline-flex;position:relative}.imgchip img{object-fit:cover;border:1px solid var(--line);border-radius:6px;width:64px;height:64px}.imgchip .imgx{background:var(--err);color:#fff;cursor:pointer;border:none;border-radius:50%;justify-content:center;align-items:center;width:16px;height:16px;padding:0;font-size:9px;line-height:1;display:inline-flex;position:absolute;top:-5px;right:-5px}.promptimgs{flex-wrap:wrap;gap:6px;margin-top:4px;display:flex}img.promptimg{border:1px solid var(--line);border-radius:6px;max-width:180px;max-height:120px}.bgjob-note{color:var(--warn)}.bgjob-note b{color:var(--fg);font-family:ui-monospace,Menlo,monospace}details.reasoning .thinkscroll{white-space:pre-wrap;word-break:break-word;scrollbar-gutter:stable;max-height:220px;overflow-y:auto}.thinktimer{color:var(--dim);margin-left:6px;font-size:11px;font-weight:400}.termdrawer{background:var(--term-bg);border-top:2px solid var(--line);flex-direction:column;display:flex}.termgrip{cursor:ns-resize;background:var(--bg-light);opacity:.6;border-bottom:1px solid var(--line);height:6px}.termgrip:hover{opacity:1}.termbar{color:var(--dim);border-bottom:1px solid var(--line);background:var(--bg-darkest);justify-content:space-between;align-items:center;padding:4px 10px;font-size:11.5px;display:flex}.termtabs{flex:1;align-items:center;gap:2px;min-width:0;display:flex;overflow-x:auto}.termtab{cursor:pointer;color:var(--dim);white-space:nowrap;background:var(--bg-mid);border-radius:5px;align-items:center;gap:6px;padding:2px 8px;font-size:11.5px;display:inline-flex}.termtab.active{color:var(--fg);outline:1px solid var(--acc)}.termtab:hover{filter:brightness(1.15)}.tabx{color:inherit;opacity:.5;cursor:pointer;background:0 0;border:none;padding:0;font-size:10px}.tabx:hover{opacity:1;color:var(--err)}.termbody{background:var(--term-bg);flex:1;gap:4px;min-height:0;padding:4px;display:flex}.termbody.split .termpane{width:50%}.termpane{background:var(--term-bg);border-radius:6px;flex:1;min-width:0;position:relative;overflow:hidden}.termpane:not(.focused){opacity:.9}.termpane.focused{box-shadow:inset 0 0 0 2px var(--acc)}.termhost{position:absolute;inset:0}.termsession{padding:4px 6px;position:absolute;inset:0}.termsplit{background:var(--line);cursor:col-resize;border-radius:2px;flex-shrink:0;width:3px}.termempty{color:var(--dim);place-items:center;font-size:12px;display:grid;position:absolute;inset:0}.jump{background:var(--acc);color:#fff;cursor:pointer;z-index:2;border:none;border-radius:999px;padding:6px 14px;font-size:12.5px;font-weight:600;position:absolute;top:-34px;left:50%;transform:translate(-50%);box-shadow:0 4px 14px #0008}.channel:has(.termdrawer) .composer:not(.maximized) .jump{top:auto;bottom:calc(var(--termh,300px) + 100% + 6px);left:50%}.channel:has(.termdrawer) div.composer.maximized .jump{inset:10px 16px auto auto;transform:none}.divider-msg{color:var(--dim);align-items:center;gap:10px;padding:4px 18px;font-size:11.5px;display:flex}.divider-msg:before,.divider-msg:after{content:"";background:var(--line);flex:1;height:1px}.divider-msg.err{color:var(--err)}.divider-msg.compacting{color:var(--acc);animation:1.6s ease-in-out infinite pulse}.goalline{color:var(--dim);padding:4px 18px;font-size:11.5px}.goalline-label{color:var(--dim);display:block}.goalline.warn .goalline-label{color:var(--warn)}.goalline.err .goalline-label{color:var(--err)}.goalline .card{text-align:left;margin-top:6px}.day-divider{align-items:center;gap:10px;padding:14px 18px 6px;display:flex}.day-divider:before,.day-divider:after{content:"";background:var(--bg-light);flex:1;height:1px}.day-divider span{color:var(--dim);font-size:11px}.composer{padding:0 16px 18px;position:relative}.composer form{background:var(--bg-light);border-radius:10px;align-items:flex-end;gap:8px;padding:10px 12px;display:flex}.composer textarea{color:var(--fg);font:inherit;resize:none;background:0 0;border:none;outline:none;flex:1;max-height:160px;line-height:1.4;overflow-y:auto}.cmds{background:var(--bg-mid);border:1px solid var(--bg-light);z-index:3;border-radius:8px;position:absolute;bottom:calc(100% - 8px);left:16px;right:16px;overflow:hidden;box-shadow:0 -6px 20px #0007}.cmdrow{cursor:pointer;align-items:baseline;gap:10px;padding:7px 12px;font-size:13.5px;display:flex}.cmdrow:hover{background:var(--bg-light)}.cmdrow.active{background:var(--acc);color:#fff}.cmdrow.active .muted{color:#e6e9ff}.cmdrow .muted{font-size:12px}.composer button{background:var(--acc);color:#fff;cursor:pointer;border:none;border-radius:8px;padding:7px 14px;font-weight:600}.composer button:hover{opacity:.9}.composer label{color:var(--dim);white-space:nowrap;align-items:center;gap:4px;font-size:12px;display:flex}.hint{color:var(--dim);margin-top:5px;font-size:11px}.rightbarbackdrop{z-index:4;background:#0004;display:none;position:fixed;inset:0}.rightbarhead{background:var(--bg-dark);border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;gap:8px;margin:-14px -14px 0;padding:10px 14px;display:none}.rightbarhead .muted{text-transform:uppercase;letter-spacing:.04em;font-size:11px}.rightbar{background:var(--bg-dark);border-left:2px solid var(--line);scrollbar-gutter:stable;flex-direction:column;min-height:0;padding:14px;font-size:13px;display:flex;overflow-y:auto}.rightbar>*{flex-shrink:0}.rightbar h3{text-transform:uppercase;letter-spacing:.04em;color:var(--dim);margin:14px 0 6px;font-size:11px}.rightbar h3:first-of-type{margin-top:0}.card{background:var(--bg-darkest);white-space:pre-wrap;word-break:break-word;border-radius:8px;max-height:200px;padding:10px;overflow-y:auto}.card.runcard{max-height:none;overflow-y:visible}.muted{color:var(--dim)}.prog .progrow{gap:8px;margin-bottom:4px;display:flex}.prog .progrow b{color:var(--dim);text-transform:uppercase;letter-spacing:.05em;flex-shrink:0;min-width:62px;padding-top:2px;font-size:10px}.embed .progrow{gap:8px;margin-bottom:4px;display:flex}.embed .progrow b{color:var(--dim);text-transform:uppercase;letter-spacing:.05em;flex-shrink:0;min-width:62px;padding-top:2px;font-size:10px}.embed .progrow span{min-width:0}.inline-md{display:inline}.inline-md>:first-child{margin-top:0}.inline-md>:last-child{margin-bottom:0}.prog .progrow.warn span{color:var(--err)}.msg-head .editbtn{color:var(--dim);cursor:pointer;opacity:0;background:0 0;border:none;padding:0 2px;font-size:11px;transition:opacity .12s}.msg:hover .msg-head .editbtn,.msg.pending .msg-head .editbtn{opacity:1}.msg-head .editbtn:focus-visible{opacity:1;outline:2px solid var(--acc);outline-offset:1px}.msg-head .editbtn:hover{color:var(--acc)}.branch-row{color:var(--dim);cursor:pointer;justify-content:space-between;padding:3px 0;font-size:12px;display:flex}.branch-row:hover,.branch-row.cur{color:var(--fg)}.mini-cron{opacity:.75;margin-left:auto;font-size:10px}.sched-row{cursor:pointer;border-radius:6px;margin-bottom:2px;padding:6px 8px}.sched-row:hover,.sched-row.cur{background:var(--bg-mid)}.sched-top{align-items:baseline;gap:6px;font-size:12.5px;display:flex}.sched-row .sched-meta{color:var(--dim);margin-top:2px;font-size:11px}.sched-row .sched-prompt{color:var(--dim);text-overflow:ellipsis;white-space:nowrap;margin-top:2px;font-size:11.5px;overflow:hidden}.badge.cron{color:var(--tool);white-space:nowrap;background:#3ba0c91a;border:1px solid #3ba0c944}.sesscard{flex-direction:column;gap:6px;font-size:12.5px;display:flex}.sessrow{align-items:center;gap:8px;display:flex}.filebox{background:var(--bg-darkest);border-radius:8px;height:260px;padding:4px;overflow-y:auto}.filerow{cursor:pointer;color:var(--fg);border-radius:4px;align-items:center;gap:6px;padding:3px 8px;font-size:12.5px;display:flex}.filerow:hover{background:var(--bg-mid)}.filerow .ficon{width:10px;color:var(--dim);text-align:center;flex-shrink:0;font-size:9px}.filerow.isdir .fname{font-weight:600}.fname{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.fsize{color:var(--dim);flex-shrink:0;margin-left:auto;font-size:10px}.sessrow .k{color:var(--dim);text-transform:uppercase;letter-spacing:.05em;flex-shrink:0;width:74px;font-size:10px}.ellip{text-overflow:ellipsis;white-space:nowrap;text-align:left;direction:rtl;overflow:hidden}.modelbox{background:var(--bg-darkest);border-radius:8px;flex-direction:column;gap:6px;padding:10px;display:flex}.modelbox select,.modelbox input[type=text]{background:var(--bg-mid);color:var(--fg);font:inherit;border:none;border-radius:6px;outline:none;min-width:0;padding:6px 8px}.modelbox button{background:var(--acc);color:#fff;cursor:pointer;white-space:nowrap;border:none;border-radius:6px;padding:6px 10px;font-size:12.5px;font-weight:600}.modelbox button:hover{opacity:.9}.modelbox .meta{color:var(--dim);font-size:11px}.btnrow{gap:6px;margin:8px 0;display:flex}.btnrow button{background:var(--bg-light);color:var(--fg);cursor:pointer;border:none;border-radius:6px;padding:6px 10px;font-size:13px}.btnrow button:hover{filter:brightness(1.2)}.btnrow .runbtn{background:var(--ok);color:#fff;font-weight:600}.btnrow .runbtn,.btnrow .danger{min-width:74px}.btnrow .danger{background:var(--err);color:#fff;font-weight:600}.ctrlrow{align-items:center;gap:8px;margin-top:6px;font-size:12.5px;display:flex}.ctrlrow label{cursor:pointer;color:var(--fg);white-space:nowrap;align-items:center;gap:5px;display:flex}.ctrlrow .muted{font-size:11.5px}.goalstate{background:var(--bg-light);color:var(--fg);cursor:pointer;border:none;border-radius:6px;padding:3px 10px;font-size:12px}.goalstate.on.active{background:var(--ok);color:#fff;font-weight:600}.goalstate.on.done{background:var(--acc);color:#fff;font-weight:600}.goalstate.on.paused{background:var(--warn);color:#fff;font-weight:600}.goalstate:disabled{cursor:default;filter:none}.verifycard{border-left:3px solid var(--tool);margin-top:6px}.auditcard{border-left:3px solid var(--warn);margin-top:6px}.auditcard.ok{border-left-color:var(--ok)}.vtitle{color:var(--dim);text-transform:uppercase;letter-spacing:.04em;align-items:center;gap:6px;margin-bottom:4px;font-size:12px;font-weight:600;display:flex}.iconbtn{background:var(--bg-light);color:var(--fg);cursor:pointer;border:none;border-radius:6px;flex:none;justify-content:center;align-self:flex-end;align-items:center;width:26px;height:24px;padding:0;font-size:13px;display:inline-flex}.iconbtn-glyph{justify-content:center;align-items:center;width:100%;height:100%;line-height:1;display:inline-flex}.iconbtn:hover{filter:brightness(1.3)}.iconbtn.active{background:var(--acc);color:#fff}.overlay{z-index:10;background:#0009;place-items:center;display:grid;position:fixed;inset:0}.modal{background:var(--bg-mid);border-radius:10px;width:min(620px,92vw);max-height:88vh;padding:16px 18px;overflow-y:auto}.modal-head{justify-content:space-between;align-items:center;margin-bottom:12px;font-size:16px;display:flex}.modal label{color:var(--dim);flex-direction:column;gap:4px;font-size:12.5px;display:flex}.modal input[type=text],.modal input[type=number],.modal input[type=password],.modal input[type=url],.modal input[type=email],.modal select,.modal textarea{background:var(--bg-darkest);color:var(--fg);font:inherit;border:1px solid #0000;border-radius:6px;outline:none;min-width:0;padding:7px 9px}.modal input:focus,.modal select:focus,.modal textarea:focus{border-color:var(--acc)}.modal ::placeholder{color:#7c818f;opacity:1}.modal select option{background:var(--bg-darkest);color:var(--fg)}.modal input.compact{padding:5px 8px;font-size:12.5px}.modal textarea{resize:vertical}.w100{width:100%}.mono{font-family:ui-monospace,Menlo,monospace;font-size:13px}.modal fieldset{border:1px solid var(--bg-light);border-radius:8px;margin:0 0 4px;padding:10px}.modal fieldset legend{color:var(--dim);text-transform:uppercase;letter-spacing:.05em;padding:0 6px;font-size:11px}.cfgrow{flex-wrap:wrap;align-items:center;gap:6px;margin-bottom:6px;display:flex}.cfgrow input{background:var(--bg-darkest);border:1px solid var(--bg-light);color:var(--fg);border-radius:5px;flex:1;min-width:0;padding:5px 8px;font-size:12.5px}.cfgrow select{background:var(--bg-darkest);border:1px solid var(--bg-light);color:var(--fg);border-radius:5px;padding:5px 8px;font-size:12.5px}.cfgrow .cfgname{width:90px;color:var(--warn);flex:none;font-weight:600}.cfgrow button{background:var(--bg-mid);border:1px solid var(--bg-light);color:var(--fg);cursor:pointer;border-radius:5px;padding:4px 8px;font-size:12px}.cfgrow button:hover{background:var(--bg-light)}.cfgrow button.danger{background:var(--err);border-color:var(--err);color:#fff}.cfggrid{grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:8px;display:grid}.cfggrid label,.cfgcol label{color:var(--dim);flex-direction:column;gap:3px;font-size:11px;display:flex}.cfggrid input{background:var(--bg-darkest);border:1px solid var(--bg-light);color:var(--fg);border-radius:5px;width:100%;padding:5px 8px}.cfgcol{margin-bottom:8px}.cfgcol textarea{background:var(--bg-darkest);border:1px solid var(--bg-light);color:var(--fg);font:inherit;border-radius:5px;width:100%;margin-top:4px;padding:5px 8px;font-size:12.5px}.presetbtn{background:var(--bg-light);color:var(--fg);cursor:pointer;border:1px solid #0000;border-radius:6px;flex:1;padding:7px 10px;font-size:13px}.presetbtn.active{background:var(--acc);color:#fff}.wizmodels{border:1px solid var(--bg-light);background:var(--bg-darkest);border-radius:6px;flex-direction:column;gap:2px;max-height:190px;padding:4px;display:flex;overflow-y:auto}.wizmodel{text-align:left;width:100%;color:var(--fg);cursor:pointer;background:0 0;border:1px solid #0000;border-radius:4px;align-items:baseline;gap:8px;padding:4px 7px;font-size:12.5px;display:flex}.wizmodel:hover{background:var(--bg-light)}.wizmodel.active{border-color:var(--acc)}.wizmodel .muted{white-space:nowrap;margin-left:auto;font-size:11px}.forkchip{white-space:nowrap;color:var(--dim);cursor:pointer;align-items:center;gap:4px;font-size:11.5px;display:flex}.dirlist{background:var(--bg-darkest);border-radius:6px;max-height:160px;padding:4px;overflow-y:auto}.direntry{cursor:pointer;border-radius:4px;padding:4px 8px;font-size:14px}.direntry:hover{background:var(--bg-light)}.filepreview{border-radius:8px;max-height:62vh;overflow:auto}.filetoolbar{gap:6px;margin-bottom:8px;display:flex}.filetoolbar button{background:var(--bg-light);color:var(--dim);cursor:pointer;border:none;border-radius:6px;padding:4px 12px;font-size:12.5px}.filetoolbar button:hover{color:var(--fg);filter:brightness(1.15)}.filetoolbar button.on{background:var(--acc);color:#fff;font-weight:600}.fileeditor{flex-direction:column;gap:8px;display:flex}.fileeditor textarea{background:var(--bg-darkest);min-height:55vh;max-height:65vh;color:var(--fg);border:1px solid var(--bg-light);white-space:pre;border-radius:8px;padding:10px;font-size:12.5px;line-height:1.45;overflow:auto}.filerow-actions{justify-content:flex-end;align-items:center;gap:10px;display:flex}.savebtn{background:var(--ok);color:#fff;cursor:pointer;border:none;border-radius:6px;padding:5px 14px;font-size:13px;font-weight:600}.savebtn:disabled{opacity:.4;cursor:default}.mdpreview{background:var(--bg-darkest);border-radius:8px;max-height:62vh;padding:14px 16px;overflow:auto}.filepreview .shiki,.filepreview .shiki span{color:var(--shiki-light);font-family:ui-monospace,Menlo,monospace;font-size:12.5px}html[data-appearance=dark] .filepreview .shiki,html[data-appearance=dark] .filepreview .shiki span{color:var(--shiki-dark)}.filepreview .shiki{background-color:var(--shiki-dark-bg);white-space:pre-wrap;word-break:break-word;overflow-wrap:anywhere;margin:0;padding:10px 12px;font-size:12.5px}html[data-appearance=light] .filepreview .shiki{background-color:var(--shiki-light-bg)}.notifbtn{position:relative}.notifbtn.has-unread{color:var(--acc)}.notifdot{background:var(--err);color:#fff;border-radius:999px;padding:2px 4px;font-size:9px;font-style:normal;font-weight:700;line-height:1;position:absolute;top:-4px;right:-4px}.brand-row{align-items:center;margin-top:2px;display:flex}.notifbackdrop{z-index:7;position:fixed;inset:0}.notifpanel{z-index:8;background:var(--bg-mid);border:1px solid var(--bg-light);border-radius:10px;width:min(360px,88vw);position:absolute;bottom:8px;left:8px;overflow:hidden;box-shadow:0 8px 30px #000a}.notifhead{border-bottom:1px solid var(--line);text-transform:uppercase;letter-spacing:.04em;color:var(--dim);justify-content:space-between;align-items:center;padding:8px 12px;font-size:11px;display:flex}.notiflist{max-height:46vh;overflow-y:auto}.notifitem{border-bottom:1px solid var(--line);cursor:pointer;padding:8px 12px}.notifitem:last-child{border-bottom:none}.notifitem:hover{background:var(--bg-light)}.notifitem .nhead{align-items:baseline;gap:6px;min-width:0;display:flex}.notifitem .ntitle{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-size:13px;font-weight:600;overflow:hidden}.notifitem.error .ntitle{color:var(--err)}.notifitem.finish .ntitle{color:var(--ok)}.notifitem.question .ntitle{color:var(--acc)}.notifitem .nbody{color:var(--dim);word-break:break-word;margin-top:3px;font-size:12px}.subcount{color:var(--dim);background:var(--bg-light);white-space:nowrap;border-radius:999px;flex-shrink:0;padding:1px 7px;font-size:10px}.subcount.live{color:var(--ok)}.mediapreview{flex-direction:column;align-items:center;gap:8px;display:flex}.mediapreview img{background:var(--bg-darkest);border-radius:8px;max-width:100%;max-height:65vh}.mediapreview video{background:#000;border-radius:8px;max-width:100%;max-height:65vh}.mediapreview audio{width:100%}.composer{flex-direction:column;display:flex}.composer .hint{flex-shrink:0}.composer.maximized{z-index:5;background:var(--bg-dark);padding:16px 16px 18px;position:absolute;inset:0}.composer.maximized:before{content:"";background:var(--bg-dark);z-index:-1;position:absolute;inset:0}.composer.maximized form{flex:1;align-items:stretch;min-height:0}.composer.maximized textarea{resize:none;flex:1;max-height:none;height:auto!important}.composer.maximized .maxbtn,.composer.maximized form>button[type=submit]{align-self:flex-end}.maxbtn{justify-content:center;align-items:center;font-size:12px;line-height:1;display:inline-flex;padding:0!important}.filerow.gitignored .fname,.filerow.gitignored .ficon,.filerow.gitignored .fsize{opacity:.38}.embed.compaction{border-left-color:var(--tool)}.embed.compaction summary .meta{color:var(--tool)}.avatar.ghosted{opacity:.35;transition:opacity .15s}.msg:hover .avatar.ghosted{opacity:1}.grouptime{display:none}.notifitem{opacity:1}.notifitem.read{opacity:.55}.notifitem.read .ntitle{font-weight:400}.nreadbtn{flex-shrink:0;width:auto;padding:0 6px;font-size:11px}.flash-target{outline:2px solid var(--acc);border-radius:8px;transition:outline-color .6s}.msg.flash-target{background:color-mix(in srgb, var(--acc) 12%, transparent)}.agent-item .ghost{opacity:.55}.ghosttag{flex-shrink:0;font-size:10px}.filetoggle{text-align:center;flex-shrink:0;width:26px;padding:0}h3 .filetoggle{margin-left:0}.notifbadge{color:var(--acc);background:var(--bg-light);white-space:nowrap;border-radius:999px;flex-shrink:0;margin-left:auto;padding:1px 6px;font-size:10px}.agent-item.sel .notifbadge{background:var(--bg-darkest)}input[type=checkbox]{background-color:var(--bg-darkest);border:1px solid var(--dim);border-radius:3px}input[type=number]{appearance:textfield}input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}input[type=number]::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield}.modal>button,.modal button:not(.iconbtn):not([class]){background:var(--bg-light);color:var(--fg);border:1px solid var(--dim);font:inherit;cursor:pointer;border-radius:6px;padding:6px 10px}.modal>button:hover,.modal button:not(.iconbtn):not([class]):hover{background:var(--bg-mid);border-color:var(--acc)}.modal>button:focus-visible,.modal button:not(.iconbtn):not([class]):focus-visible{outline:2px solid var(--acc);outline-offset:1px}.todopane,.todopane-edit{box-sizing:border-box;background:var(--bg-darkest);width:100%;height:11.5em;min-height:7em;max-height:40vh;color:var(--fg);resize:vertical;border:none;border-radius:6px;padding:6px 8px;font-family:ui-monospace,Menlo,monospace;font-size:12.5px;line-height:1.45;display:block;overflow-y:auto}.xterm{cursor:text;-webkit-user-select:none;user-select:none;position:relative}.xterm.focus,.xterm:focus{outline:none}.xterm .xterm-helpers{z-index:5;position:absolute;top:0}.xterm .xterm-helper-textarea{opacity:0;z-index:-5;white-space:nowrap;resize:none;border:0;width:0;height:0;margin:0;padding:0;position:absolute;top:0;left:-9999em;overflow:hidden}.xterm .composition-view{color:#fff;white-space:nowrap;z-index:1;background:#000;display:none;position:absolute}.xterm .composition-view.active{display:block}.xterm .xterm-viewport{cursor:default;background-color:#000;position:absolute;inset:0;overflow-y:scroll}.xterm .xterm-screen{position:relative}.xterm .xterm-screen canvas{position:absolute;top:0;left:0}.xterm-char-measure-element{visibility:hidden;line-height:normal;display:inline-block;position:absolute;top:0;left:-9999em}.xterm.enable-mouse-events{cursor:default}.xterm.xterm-cursor-pointer,.xterm .xterm-cursor-pointer{cursor:pointer}.xterm.column-select.focus{cursor:crosshair}.xterm .xterm-accessibility:not(.debug),.xterm .xterm-message{z-index:10;color:#0000;pointer-events:none;position:absolute;inset:0}.xterm .xterm-accessibility-tree:not(.debug) ::selection{color:#0000}.xterm .xterm-accessibility-tree{-webkit-user-select:text;user-select:text;white-space:pre;font-family:monospace}.xterm .xterm-accessibility-tree>div{transform-origin:0;width:fit-content}.xterm .live-region{width:1px;height:1px;position:absolute;left:-9999px;overflow:hidden}.xterm-dim{opacity:1!important}.xterm-underline-1{text-decoration:underline}.xterm-underline-2{-webkit-text-decoration:underline double;text-decoration:underline double}.xterm-underline-3{-webkit-text-decoration:underline wavy;text-decoration:underline wavy}.xterm-underline-4{-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.xterm-underline-5{-webkit-text-decoration:underline dashed;text-decoration:underline dashed}.xterm-overline{text-decoration:overline}.xterm-overline.xterm-underline-1{text-decoration:underline overline}.xterm-overline.xterm-underline-2{-webkit-text-decoration:overline double underline;text-decoration:overline double underline}.xterm-overline.xterm-underline-3{-webkit-text-decoration:overline wavy underline;text-decoration:overline wavy underline}.xterm-overline.xterm-underline-4{-webkit-text-decoration:overline dotted underline;text-decoration:overline dotted underline}.xterm-overline.xterm-underline-5{-webkit-text-decoration:overline dashed underline;text-decoration:overline dashed underline}.xterm-strikethrough{text-decoration:line-through}.xterm-screen .xterm-decoration-container .xterm-decoration{z-index:6;position:absolute}.xterm-screen .xterm-decoration-container .xterm-decoration.xterm-decoration-top-layer{z-index:7}.xterm-decoration-overview-ruler{z-index:8;pointer-events:none;position:absolute;top:0;right:0}.xterm-decoration-top{z-index:2;position:relative}.xterm .xterm-scrollable-element>.scrollbar{cursor:default}.xterm .xterm-scrollable-element>.scrollbar>.scra{cursor:pointer;font-size:11px!important}.xterm .xterm-scrollable-element>.visible{opacity:1;z-index:11;background:0 0;transition:opacity .1s linear}.xterm .xterm-scrollable-element>.invisible{opacity:0;pointer-events:none}.xterm .xterm-scrollable-element>.invisible.fade{transition:opacity .8s linear}.xterm .xterm-scrollable-element>.shadow{display:none;position:absolute}.xterm .xterm-scrollable-element>.shadow.top{width:100%;height:3px;box-shadow:var(--vscode-scrollbar-shadow,#000) 0 6px 6px -6px inset;display:block;top:0;left:3px}.xterm .xterm-scrollable-element>.shadow.left{width:3px;height:100%;box-shadow:var(--vscode-scrollbar-shadow,#000) 6px 0 6px -6px inset;display:block;top:3px;left:0}.xterm .xterm-scrollable-element>.shadow.top-left-corner{width:3px;height:3px;display:block;top:0;left:0}.xterm .xterm-scrollable-element>.shadow.top.left{box-shadow:var(--vscode-scrollbar-shadow,#000) 6px 0 6px -6px inset}
@@ -21,10 +21,10 @@ WARNING: This link could potentially be dangerous`)){let e=window.open();if(e){t
21
21
  - task two"title="shared with the agent \\u2014 it may check items off via set_todo; your unsaved edits win until you save">`),Yf=I(`<span class=fsize>`),Xf=I(`<div><span class=ficon></span><span class=fname>`),Zf=I(`<h3 title="the agent's workspace — lazy-loaded, dotfiles hidden; click a folder to expand, a file to preview"style=display:flex;align-items:center;gap:6px>🗂 files <span class=muted style=text-transform:none;letter-spacing:0>· `),Qf=I(`<div class=filebox>`),$f=I(`<div class=muted style=padding:6px>`),ep=I(`<img>`),tp=I(`<div class=mediapreview><div class="meta muted"> preview`),np=I(`<button title="rendered markdown">👁 preview`),rp=I(`<button title="edit and save back to the workspace">✎ edit`),ip=I(`<div class=filetoolbar><button title="syntax-highlighted source">&lt;/> code`),ap=I(`<div class=fileeditor><textarea class=mono></textarea><div class=filerow-actions><span class=muted> bytes</span><button class=savebtn>`),op=I(`<div class=mono style=margin:0;color:var(--dim)>(binary file — inspect it from the terminal)`),sp=I(`<div class="content mdpreview">`),cp=I(`<video controls>`),lp=I(`<audio controls>`),up=I(`<div class=filepreview>`),dp=I(`<div class=muted style=padding-top:6px;font-size:11.5px>… truncated (first 100 KB)`),fp=I(`<div class=muted style=padding:8px;font-size:12px>✨ highlighting <!>…`),pp=I(`<pre class=mono style=max-height:62vh;overflow:auto;white-space:pre-wrap;margin:0>`),mp=I(`<div class=muted style=font-size:11.5px;margin-top:-6px>`),hp=I(`<div class=wizmodels>`),gp=I(`<span style=color:var(--fg)>`),_p=I(`<div class=muted style=font-size:11.5px;margin-top:-6px> model`),vp=I(`<div class=overlay style=background:var(--bg-darkest)><div class=modal style=max-width:560px><div class=modal-head><b>🫖 welcome to teapot</b></div><p class=muted style="margin:0 0 10px;font-size:13px">first run — pick an OpenAI-compatible provider and you're done. everything below can be changed later in ⚙ settings.</p><form style=display:flex;flex-direction:column;gap:12px><div style=display:flex;gap:6px;flex-wrap:wrap></div><label>base url<input type=text class="w100 mono"list=wiz-preset-urls><datalist id=wiz-preset-urls></datalist></label><label>api key <input type=password class=w100 placeholder="(local providers may not need one)"></label><label>model<input type=text class="w100 mono"list=wiz-model-list><datalist id=wiz-model-list></datalist></label><fieldset><legend>first agent</legend><label>workspace directory<input type=text class="w100 mono"></label><label title="asks for this password when opening the UI or API from another machine — plain-HTTP LAN traffic is NOT encrypted"style=margin-top:4px>protect the API with a password? <input type=password class=w100 placeholder="(optional — LAN traffic is still plain HTTP)"></label></fieldset><button type=submit style="background:var(--acc);border:none;border-radius:8px;color:#fff;padding:9px 14px;font-weight:600;cursor:pointer">`),yp=I(`<button type=button>`),bp=I(`<div class=muted style=font-size:11.5px;margin-top:-8px>`),xp=I(`<button type=button><span class=mono>`),Sp=I(`<label><input type=number min=0>`),Cp=I(`<div class=muted style=font-size:11.5px;margin-top:4px>⚠ configured default provider <code></code> has no provider row here<!> Add a provider named <code></code> or pick a default below; otherwise agents fall back to the first provider.`),wp=I(`<form style=display:flex;flex-direction:column;gap:14px><fieldset><legend>providers</legend><button type=button>+ add custom</button><div style=display:flex;gap:6px;flex-wrap:wrap;margin-top:6px><span class=muted style=font-size:11.5px>quick-add:</span></div><div><label title="agents without an explicit provider use this one"style=display:flex;align-items:center;gap:6px;margin-top:6px>default provider<select><option value>(none — first provider wins)</option></select></label></div></fieldset><fieldset><legend>agent runtime</legend><div class=cfggrid><label title="auto-compact threshold in k tokens. Leave EMPTY to derive per model (75% of its context window) — recommended, since models differ wildly in window size. Set only to force an absolute cap across all models.">compact budget (k tok)<input type=number min=0 placeholder="(derive: 75% of window)"></label></div></fieldset><fieldset><legend>scheduled tasks</legend><button type=button>+ add task</button></fieldset><fieldset><legend>agents (read-only — edit config file or use +)</legend></fieldset><fieldset><legend>live update</legend><div class=cfgrow><span class=muted>current version: </span><button type=button style="background:var(--acc);border:none;border-radius:6px;color:#fff;padding:6px 14px;cursor:pointer">update & restart</button><span class=muted style=margin-left:8px;font-size:12px>gracefully stops all agents, spawns new process, then reloads this page</span></div></fieldset><button type=submit style="align-self:flex-end;background:var(--acc);border:none;border-radius:6px;color:#fff;padding:6px 14px;cursor:pointer">save settings`),Tp=I(`<div class=cfgrow><input class=cfgname placeholder=name><input placeholder=https://…/v1><input placeholder="api key"type=password><input placeholder="default model"><button type=button class=danger title="remove provider">✕`),Ep=I(`<button type=button>+ `),Dp=I(`<div class=cfgcol><div class=cfgrow><input placeholder=id><input placeholder="agent id"><input placeholder="every 30m / cron"><label style=display:flex;gap:3px;align-items:center;white-space:nowrap;color:var(--dim);font-size:11px><input type=checkbox>fork</label><button type=button class=danger>✕</button></div><textarea rows=2 placeholder="prompt to send">`),Op=I(`<span class=muted>🧩 sub of @`),kp=I(`<div class=cfgrow><b></b><span class=muted>`),Ap=new Map;function jp(e){let t=Ap.get(e);if(t!==void 0)return t;let n=Fe(e);return Ap.set(e,n),Ap.size>500&&Ap.delete(Ap.keys().next().value),n}var Mp=[`minimal`,`low`,`medium`,`high`],Np=1100,Pp={prompt:{name:`you`,icon:`🟧`,color:`#faa81a`},user:{name:`you`,icon:`🟧`,color:`#faa81a`},message:{name:`agent`,icon:`🫖`,color:`#5865f2`},progress:{name:`progress`,icon:`📈`,color:`#3ba55d`},question:{name:`agent`,icon:`❓`,color:`#5865f2`}},Fp={name:`harness`,icon:`📣`,color:`#3ba55d`},[Ip,Lp]=v(``),Rp,Q=e=>{Lp(e),clearTimeout(Rp),Rp=setTimeout(()=>Lp(``),3200)},zp=!1,Bp=[{key:`dark`,label:`Dark`,mode:`dark`,sw:[`#1a1c22`,`#2b2e39`,`#5865f2`]},{key:`midnight`,label:`Midnight`,mode:`dark`,sw:[`#0d0f18`,`#252a42`,`#8b7cf7`]},{key:`tea`,label:`Milk Tea`,mode:`dark`,sw:[`#241c16`,`#493b2d`,`#d98e32`]},{key:`coffee`,label:`Coffee`,mode:`dark`,sw:[`#191410`,`#403527`,`#c68a4b`]},{key:`matcha`,label:`Matcha`,mode:`dark`,sw:[`#1b2217`,`#3c4a33`,`#8db64e`]},{key:`matrix`,label:`Matrix`,mode:`dark`,sw:[`#060a06`,`#18301d`,`#2fd558`]},{key:`sunset`,label:`Sunset`,mode:`dark`,sw:[`#1c1422`,`#452f52`,`#f2784b`]},{key:`light`,label:`Light`,mode:`light`,sw:[`#eceef4`,`#ffffff`,`#4757d8`]},{key:`strawberry`,label:`Strawberry`,mode:`light`,sw:[`#fbe4ea`,`#fffafb`,`#e05575`]},{key:`ramune`,label:`Ramune`,mode:`light`,sw:[`#ddeff7`,`#fbfeff`,`#1d86ae`]}],Vp=e=>{if(e.data?.actor)return{name:`@${String(e.data.actor)}`,icon:`🧩`,color:`#3ba0c9`};if(e.type===`tool_call`||e.type===`tool_result`)return{name:String(e.data?.name??`tool`),icon:`⚙`,color:`#3ba0c9`};if(e.type===`prompt`){let t=String(e.data?.source??`user`);return t===`user`?Pp.prompt:t.startsWith(`scheduler:`)?{name:t.slice(10),icon:`📣`,color:`#3ba55d`}:Fp}return Pp[e.type]??{name:e.type,icon:`•`,color:`#9298a5`}},Hp=new Set([`user`,`message`,`prompt`,`tool_call`,`tool_result`,`progress`,`state`,`error`,`fork`,`goal`,`todo`,`question`,`decision`,`compaction`,`system_note`]),Up=new Set([`system_note`]),Wp=e=>{let t=new Date(e);return`${String(t.getHours()).padStart(2,`0`)}:${String(t.getMinutes()).padStart(2,`0`)}`};async function $(e,t){let n=localStorage.getItem(`teapot.token`),r=new Headers(t?.headers);n&&!r.has(`authorization`)&&r.set(`authorization`,`Bearer ${n}`);let i=await fetch(e,{...t,headers:r});if(!i.ok){i.status===401&&window.dispatchEvent(new CustomEvent(`teapot:unauthorized`));let t=null;try{t=await i.json()}catch{}let n=(t&&typeof t==`object`&&`error`in t?String(t.error):``)||`${e}: HTTP ${i.status}`;throw Object.assign(Error(n),{payload:t})}return i.json()}var Gp=location.hash.match(/[#&]token=([^&]+)/);Gp&&(localStorage.setItem(`teapot.token`,decodeURIComponent(Gp[1])),history.replaceState(null,``,location.pathname+location.search));var Kp=()=>{let e=localStorage.getItem(`teapot.token`);return e?`?token=${encodeURIComponent(e)}`:``};function qp(){let[e,t]=v([]),[n,r]=v(null),[i,a]=v(``),[o,s]=v(new Map),[c,l]=v(new Map),u=!1;async function d(e=!1){if(!u||e){u=!0;try{let e=await $(`/api/sessions`),t=new Map,n=new Map;for(let r of e.sessions??[]){t.set(r.id,r.agentId);let e=n.get(r.agentId)??[];e.push(r.id),n.set(r.agentId,e)}s(t),l(n)}catch{}}}let[f,p]=v([]),[m,h]=v(0),[g,_]=v([]),[ee,te]=v(null),T=new Map,[ne,E]=v(T.get(n()??``)??``),D=e=>{E(e);let t=n();t&&(e?T.set(t,e):T.delete(t))},[O,re]=v({providers:{}}),[k,ie]=v(!1),[ae,oe]=v(!1),se=()=>window.innerWidth<=Np,[ce,A]=v(se());C(()=>{let e=()=>A(se());window.addEventListener(`resize`,e),w(()=>window.removeEventListener(`resize`,e)),e()}),C(()=>{let e=0,t=()=>{e||=requestAnimationFrame(()=>{e=0;let t=pr();if(!t)return;let n=ut(),r=n||!t.scrollHeight?null:le(t);(n||r)&&requestAnimationFrame(()=>{if(!t.isConnected)return;if(n){t.scrollTop=t.scrollHeight,pt(0);return}let e=r&&t.querySelector(r.sel);if(e){let n=e.getBoundingClientRect().top-r.top;n&&(t.scrollTop+=n)}})})};window.addEventListener(`resize`,t),w(()=>{window.removeEventListener(`resize`,t),e&&cancelAnimationFrame(e)})});function le(e){let t=e.querySelectorAll(`[data-eid]`),n=e.getBoundingClientRect().top;for(let e of t){let t=e.getBoundingClientRect();if(t.bottom>n){let n=e.dataset.eid??``;return n?{sel:`[data-eid="${CSS.escape(n)}"]`,top:t.top}:null}}return null}let[j,ue]=v(localStorage.getItem(`teapot.panel`)===null?window.innerWidth>Np:localStorage.getItem(`teapot.panel`)===`1`),de=e=>{ue(e),localStorage.setItem(`teapot.panel`,e?`1`:`0`)},fe=()=>de(!j()),pe=()=>{j()&&de(!1)},[me,he]=v(!1),[ge,_e]=v(localStorage.getItem(`teapot.theme`)??`dark`),[ve,ye]=v(localStorage.getItem(`teapot.theme.auto`)===`1`),[be,xe]=v(localStorage.getItem(`teapot.theme.light`)??`light`),[Se,I]=v(localStorage.getItem(`teapot.theme.dark`)??`dark`),Ce=typeof window.matchMedia==`function`?window.matchMedia(`(prefers-color-scheme: light)`):null,[Oe,ke]=v(Ce?.matches??!1);C(()=>{let e=e=>ke(e.matches);Ce?.addEventListener(`change`,e),w(()=>Ce?.removeEventListener(`change`,e))}),b(()=>{let e=ve()?Oe()?be():Se():ge();document.documentElement.dataset.theme=e,document.documentElement.dataset.appearance=Bp.find(t=>t.key===e)?.mode??`dark`});let[Ae,je]=v(``),[Me,Ne]=v(``),[Pe,Ie]=v(``);b(()=>{let t=n();Ie(S(()=>e().find(e=>e.id===t)?.reasoningEffort??``))});let[Le,Re]=v([]),ze=()=>Object.keys(O().providers??{});async function Be(e){if(e)try{let t=await $(`/api/models?provider=${encodeURIComponent(e)}`);Re(t.models??[])}catch{Re([])}}let We=e=>{let t={text:`📄`,image:`🖼️`,audio:`🔊`,video:`🎬`,file:`📎`},n=e=>(e??[`text`]).map(e=>t[e]??e).join(``);return e?.modalities?`${n(e.modalities.input)} → ${n(e.modalities.output)}`:``},Ge=()=>{let e=Me().trim()||H()?.model||``;if(!e)return``;let t=Le().find(t=>t.id===e);if(!t)return``;let n=[],r=We(t);r&&r!==`📄 → 📄`&&n.push(r),t.contextLength&&n.push(`ctx ${rm(t.contextLength)} tok`);let i=e=>e===void 0?``:`${e*1e6>=10?Math.round(e*1e6):+(e*1e6).toFixed(1)}/M`;if(t.pricing){let e=i(t.pricing.prompt),r=i(t.pricing.completion);e&&r?n.push(`${e} in · ${r} out`):(e||r)&&n.push(i(t.pricing.prompt??t.pricing.completion))}return n.join(` · `)},Qe=null,et=!1;b(()=>{let t=n();if(!t)return;let r=e().find(e=>e.id===t),i=r?.provider||O().defaultProvider||ze()[0]||``;if(r){if(t!==Qe)Qe=t,et=!1,S(()=>Ae())!==i&&(je(i),Be(i)),S(()=>Me())&&Ne(``);else{let e=S(()=>Ae());!S(()=>Me())&&e!==i&&At(et)&&(je(i),Be(i))}}});let[tt,rt]=v(!1),[ut,dt]=v(!0),[ft,pt]=v(0),[_t,Ct]=v(null),wt=()=>B().startsWith(`[compact] `),Tt=()=>wt()?B().slice(10):B();b(()=>{_t()||It(e=>e?.text.startsWith(`[compact] `)?null:e)}),b(()=>{_t(),ut()&&requestAnimationFrame(()=>requestAnimationFrame(()=>{ut()&&hr(!0)}))});let[Dt,Pt]=v(new Map),Ft=()=>{let e=n();return e?Dt().get(e)??null:null},It=e=>{let t=n();t&&Pt(n=>{let r=new Map(n),i=typeof e==`function`?e(n.get(t)??null):e;return i?r.set(t,{...i,at:Date.now()}):r.delete(t),r})},[B,V]=v(``),[Lt,Rt]=v(0),zt=()=>Lt(),[Bt,Vt]=v(``),Ht;b(()=>{Ft()?Ht||=setTimeout(()=>{Ht=void 0,V(Ft()?.text??``),Vt(Ft()?.reasoning??``)},(Ft()?.text.length??0)>2e4?250:(Ft()?.text.length??0)>6e3?120:60):(clearTimeout(Ht),Ht=void 0,V(``),Vt(``))}),w(()=>clearTimeout(Ht)),b(()=>{let t=e();Pt(e=>qe(e,e=>t.find(t=>t.id===e)?.status)),Rt(0)}),b(()=>{let e=B(),t=Ft()?.reasoning??``;(e||t)&&ut()&&requestAnimationFrame(()=>{ut()&&hr(!0)})}),b(()=>{let e=H()?.pendingPrompts??0,t=H()?.pendingPromptIds,n=Xt(),r=Zt(n),i=ht(r,e,t);i!==r&&Qt(n,i)}),b(()=>{let e=H()?.pendingPromptQueue;if(!e?.length)return;let t=Xt(),n=new Set(Zt(t).map(e=>e.promptId).filter(Boolean)),r=e.filter(e=>e.id&&!n.has(e.id));r.length&&Qt(t,[...r.map(e=>({id:`p${e.id}`,text:e.text,at:Number(e.at)||Date.now(),promptId:e.id,images:e.images?.map(e=>e.url),...e.source?{source:e.source}:{}})),...Zt(t)])}),b(()=>{if(!n())return;let e=()=>{document.visibilityState===`visible`&&requestAnimationFrame(()=>{K()&&(dt(!0),pt(0),hr(!0))})};document.addEventListener(`visibilitychange`,e),w(()=>document.removeEventListener(`visibilitychange`,e))});let H=x(()=>e().find(e=>e.id===n())),Ut=()=>{let e=H();return e?e.live??(e.status===`running`||e.status===`waiting`):!1},Wt=()=>bt(H(),i(),Ut()),[Gt,Kt]=v(null);x(()=>{let e=new Set;for(let t of f())t.type===`tool_result`&&t.data?.name===`ask_user`&&e.add(String(t.data.callId));return e});let qt=new Map,[Jt,Yt]=v([]),Xt=()=>i()||n()||`?`,Zt=e=>qt.get(e)??[],Qt=(e,t)=>{let n=new Set,r=[];for(let e=t.length-1;e>=0;e--){let i=t[e],a=i.promptId;a?n.has(a)||(n.add(a),r.push(i)):r.push(i)}r.reverse(),r.length===0?qt.delete(e):qt.set(e,r),Xt()===e&&Yt(r)},[$t,en]=v([]),[tn,nn]=v(localStorage.getItem(`teapot.hideGhosts`)===`1`),[rn,an]=v(!1),on=()=>$t().filter(e=>!e.read).length,sn=e=>{en(t=>{let n=!1,r=t.map(t=>t.read||t.agentId!==e?t:(n=!0,{...t,read:!0}));return n?r:t})},cn=t=>{let n=$t().filter(e=>!e.read&&e.agentId===t).length;for(let r of e())r.parent===t&&(n+=cn(r.id));return n},ln=0,un=e=>{en(t=>[{...e,id:`n${++ln}`,at:Date.now(),read:!1},...t].slice(0,50))},dn=(t,n)=>{let r=e().find(e=>e.id===t)?.id??t,i=typeof n.id==`string`?n.id:void 0;n.type===`message`&&n.data?.final===!0?un({agentId:t,kind:`finish`,title:`${r} finished`,body:String(n.data.content??``).slice(0,300),eventId:i}):n.type===`question`?un({agentId:t,kind:`question`,title:`${r} asks a question`,body:String(n.data.question??``).slice(0,300),eventId:i}):n.type===`error`?un({agentId:t,kind:`error`,title:`${r} hit an error`,body:String(n.data.message??``).slice(0,300),eventId:i}):n.type===`progress`&&un({agentId:t,kind:`progress`,title:`${r}: ${String(n.data.doing??`progress`)}`.slice(0,120),body:[n.data.recent&&`recent: ${n.data.recent}`,n.data.next&&`next: ${n.data.next}`].filter(Boolean).join(` · `).slice(0,300),eventId:i})},fn=e=>{let t=document.querySelector(`[data-eid="${e}"]`);t&&(t.scrollIntoView({behavior:`smooth`,block:`center`}),t.classList.add(`flash-target`),setTimeout(()=>t.classList.remove(`flash-target`),1600))},pn=x(()=>{let e=new Map,t=new Set,n=new Map,r=new Map;for(let i of f())if(Hp.has(i.type)){if(i.type===`tool_call`){let e=n.get(i.data.callId)??[];e.push(i),n.set(i.data.callId,e)}else if(i.type===`tool_result`){let a=n.get(i.data.callId)?.shift();a?(e.set(a.id,i),t.add(i.id)):r.set(i.id,i)}}return{resFor:e,consumed:t,orphanCalls:r}}),[mn,hn]=v(new Set),gn=e=>{e&&hn(t=>{if(t.has(e))return t;let n=new Set(t);return n.add(e),n})},_n=()=>hn(new Set),vn=x(()=>mt(f(),mn())),yn=x(()=>{let{consumed:e}=pn(),t=``;for(let e of f()){if(e._prevKind=t,!Hp.has(e.type))continue;let n=e.data??{};(e.type!==`message`||String(n.content??``).trim()!==``||String(n.reasoning??``).trim()===``)&&(t=e.type===`tool_result`?`tool`:e.type)}let n=f().filter(t=>{if(t.type===`sub`)return!0;if(!Hp.has(t.type))return!1;let n=t.type===`tool_call`||t.type===`tool_result`?String(t.data?.name??``):``;if(n===`report_progress`||n===`ask_user`||n===`record_decision`)return!1;if(t.type===`tool_result`)return!e.has(t.id);if(t.type===`message`){let e=String(t.data?.content??``);return e.trim()===``&&String(t.data?.reasoning??``).trim()!==``&&t._prevKind===`tool`||t.data?.progressEcho||!t.data?.final&&e.trim()===`(tool call)`?!1:e.trim()!==``||String(t.data?.reasoning??``).trim()!==``||!!t.data?.final}return!0}),r=[];for(let e of n)if(e.type===`sub`){let t=e.data,n=String(t?.type??`message`);if(n===`state`)continue;r.push({...e,type:n,data:{...t?.data,actor:t?.sub}})}else r.push(e);let i=e=>String(e??``).replace(/\s+/g,` `).trim().toLowerCase(),a=[];for(let e=0;e<r.length;e++){let t=r[e];if(t.type===`message`&&t.data?.role===`assistant`){let n=r[e-1],a=i(t.data.content);if(n?.type===`progress`){let e=n.data;if((a.includes(i(e.doing))||e.recent&&a.includes(i(e.recent)))&&a.length<=Math.max(200,i(e.doing).length*3))continue}if(n?.type===`decision`){let e=n.data,t=i(e.decision);if(t&&a.includes(t)&&a.length<=Math.max(300,t.length*3))continue}}a.push(t)}let o=new Set,s=new Set,c=new Map,l=new Map;for(let e of a){let t=e.data?.promptId;t&&(e.type===`prompt`&&e.data?.source===`user`&&s.add(String(t)),e.type===`system_note`&&e.data?.event===`prompt-delivered`&&(o.add(String(t)),c.set(String(t),e.seq)),e.type===`system_note`&&e.data?.event===`prompt-cancelled`&&l.set(String(t),e.seq))}let u=new Set;for(let e of Jt())e.promptId&&!o.has(e.promptId)&&u.add(e.promptId);let d=a.filter(e=>{if(e.type!==`prompt`||e.data?.source!==`user`)return!0;let t=String(e.data?.promptId??``);return t===``||!u.has(t)});for(let e=0;e<d.length;e++){let t=d[e];if(t.type!==`prompt`||t.data?.source!==`user`)continue;let n=String(t.data?.promptId??``),r=l.get(n);r!==void 0&&t.data&&(t.data.cancelled=!0);let i=c.get(n)??0,a=Math.max(i,r??0)||void 0;d[e]=a===void 0?{...t,seq:Ze(d)}:Xe(t,a)}return Ye(d,Jt().filter(e=>!e.promptId||!(o.has(e.promptId)&&s.has(e.promptId))).map(e=>xn(e)))}),bn=new Map;function xn(e){let t=`${e.id}:${e.sent?`s`:`p`}`,n=bn.get(t);if(n)return n;bn.size>64&&bn.clear();let r={id:e.id,seq:2**53-1,ts:new Date(e.at).toISOString(),session:H()?.session??``,branch:H()?.branch??`br0`,parent:null,type:`prompt`,data:{source:e.source??`user`,text:e.text,pending:!e.sent,...e.images?.length?{images:e.images}:{},...e.promptId?{promptId:e.promptId}:{}}};return bn.set(t,r),r}let Sn=()=>$(`/api/config`).then(re).catch(()=>{}),[Cn,wn]=v(!1);C(()=>{let e=()=>wn(!0);window.addEventListener(`teapot:unauthorized`,e),w(()=>window.removeEventListener(`teapot:unauthorized`,e))});let[Tn,En]=v(``),[Dn,On]=v(!0),[kn,An]=v(!1),jn=``;b(()=>{let t=n(),r=e().find(e=>e.id===t)?.todo??``;t&&t!==jn?(jn=t,An(!1),En(r)):t&&!kn()&&En(r)});let Mn=async()=>{let e=document.getElementById(`todo-notify`)?.checked??!0;if(n())try{await $(`/api/agents/${n()}/todo`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({text:Tn(),notify:e})}),An(!1),On(!0),Q(`tasks saved${e&&Tn().trim()?` & notification queued`:``}`),Fn()}catch(e){Q(`save failed: ${e.message}`)}},Nn=x(()=>{let e=0,t=0;for(let n of Tn().split(`
22
22
  `)){let r=n.match(/^\s*[-*+] \[([ xX])\]/);r&&(e++,r[1].toLowerCase()===`x`&&t++)}return{total:e,done:t}});function Pn(e,t){let n=new Map(e.map(e=>[e.id,e]));return t.map(e=>{let t=n.get(e.id);return t&&JSON.stringify(t)===JSON.stringify(e)?t:e})}let Fn=()=>$(`/api/agents`).then(e=>{let n=!1;t(t=>(t.length!==(e.agents??[]).length&&(n=!0),(e.agents??[]).some(e=>!t.some(t=>t.id===e.id))&&(n=!0),Pn(t,e.agents??[]))),n&&d()}).catch(()=>{}),In=()=>$(`/api/metrics`).then(te).catch(()=>{}),[Ln,Rn]=v([]),zn=()=>$(`/api/tasks`).then(e=>Rn(e.tasks)).catch(()=>{}),Bn=e=>Ln().filter(t=>t.agent===e),[Vn,Hn]=v((()=>{try{let e=JSON.parse(localStorage.getItem(`teapot.collapsed`)??`[]`);return new Set(e.filter(e=>typeof e==`string`&&!e.startsWith(`chat:`)))}catch{return new Set}})()),Un=e=>{let t=new Set(Vn());t.has(e)?t.delete(e):t.add(e),Hn(t),localStorage.setItem(`teapot.collapsed`,JSON.stringify([...t]))},Wn=t=>st(e(),t),[Gn,Kn]=v((()=>{try{let e=JSON.parse(localStorage.getItem(`teapot.wsCollapsed`)??`[]`),t=Array.isArray(e)?e.filter(e=>typeof e==`string`):[];if(Number(localStorage.getItem(`teapot.wsCollapsed.v`)??`0`)<2){let e=t.filter(e=>!e.startsWith(`chat:`));return t.length-e.length>0&&localStorage.setItem(`teapot.wsCollapsed`,JSON.stringify(e)),localStorage.setItem(`teapot.wsCollapsed.v`,`2`),new Set(e)}return new Set(t)}catch{return new Set}})()),qn=x(()=>{let e=new Set;for(let t of Gn())t.startsWith(`chat:`)&&e.add(t);return e}),Jn=x(()=>nt(e(),Vn(),tn(),qn())),U=(t,r,i,a)=>{let o=new Set(Gn());if(i)o.delete(t),a&&o.delete(a);else{o.add(t),a&&o.delete(a);let i=n();i&&(t===`chat:${i}`||Wn(e().find(e=>e.id===i))===t)&&Q(`hid ${r} — click the header to show it`)}Kn(o);try{localStorage.setItem(`teapot.wsCollapsed`,JSON.stringify([...o]))}catch{}},Yn=e=>e.replace(/\/+$/,``).split(/[/\\]/).pop()||e,Xn=e=>{let t=W().get(e)??0;return`${t} chat${t===1?``:`s`}`},W=x(()=>ct(e())),Zn=x(()=>lt(e(),Jn(),Gn())),Qn=2e3,[$n,G]=v(null),er=new Map;function tr(e){return`${i()||(n()??`?`)}:${e.id}`}function nr(e){let t=Array.from({length:e.length});for(let n=0;n<e.length;n++){let r=e[n],i=tr(r),a=er.get(i);if(t[n]=a??r,!a&&(er.set(i,r),er.size>6e3)){let e=er.keys().next().value;e!==void 0&&er.delete(e)}}return t}let[rr,ir]=v(!1),[ar,or]=v(!1),sr=0,cr=-1;function lr(e){p(t=>{let n=new Map;for(let e of t)n.set(e.id,e);for(let t of nr(e))n.has(t.id)||n.set(t.id,t);return[...n.values()].sort((e,t)=>e.seq-t.seq)})}async function ur(){let e=n();if(!e||ar()||rr())return;if(f().length>=m()){or(!0);return}let t=()=>{let e=pr();return e&&e.clientHeight>0?e:null},r=0;for(;r++<20&&!ar()&&n()===e;){let r=t();if(r&&r.scrollHeight>r.clientHeight+40)return;if(f().length>=m()){or(!0);return}let i=f().length;if(await dr(),f().length===i)return;ut()&&n()===e&&hr(!0)}}async function dr(){let e=n(),t=f()[0];if(e&&t&&!rr()&&!ar()){ir(!0);try{let r=pr(),a=r?.scrollHeight??0,o=r?.scrollTop??0,s=$n(),c=i(),l=c&&c!==e?`&session=${encodeURIComponent(c)}`:``,u=(await $(`/api/agents/${e}/events?limit=${Qn}&before=${encodeURIComponent(t.id)}${l}${s?`&branch=${encodeURIComponent(s)}&lineage=true`:``}`)).events??[];if(u.length===0){or(!0);return}if(n()!==e||f()[0]?.id!==t.id)return;lr(u),requestAnimationFrame(()=>{if(n()===e){let e=pr();e&&(e.scrollTop=o+(e.scrollHeight-a))}})}catch{}finally{ir(!1)}}}async function fr(e,t){let r=sr,a=t??i()??``;try{let t=$n(),i=r!==cr||!g().length,o=a&&a!==e?`&session=${encodeURIComponent(a)}`:``,[s,c,l]=await Promise.all([$(`/api/agents/${e}/events?limit=${Qn}${o}${t?`&branch=${encodeURIComponent(t)}&lineage=true`:``}`),i?$(`/api/agents/${e}/branches`):Promise.resolve({branches:g()}),$(`/api/agents/${e}/skills`).catch(()=>({skills:[]}))]);if(i&&(cr=r),r!==sr||n()!==e)return;p(e=>{let t=new Map;for(let n of e)t.set(n.id,n);for(let e of nr(s.events))t.set(e.id,e);return[...t.values()].sort((e,t)=>e.seq-t.seq)}),h(s.total??s.events.length),_(c.branches),vi(l.skills??[])}catch{}}function pr(){return document.querySelector(`.feed`)}function mr(){let e=document.querySelector(`.composer textarea`);return 24+Math.min(Math.max((e?.scrollHeight??0)-(e?.clientHeight??0),0),160)}function K(){let e=pr();return!e||e.scrollHeight-e.scrollTop-e.clientHeight<mr()}function hr(e=!1){let t=pr();t&&(e||ut())&&(t.scrollTop=t.scrollHeight,pt(0))}let gr=new Map,_r=(t,n)=>gt(c().get(t),e().find(e=>e.id===t)?.session,n);async function vr(e,t=!0,o){let s=n(),l=i(),u=f(),g=m();sr++,c().size||d();let _=_r(e,o)??e;if(s!==e||_!==l){if(l&&u.length&&(gr.set(l,{events:u,total:g,at:Date.now()}),gr.size>6)){let e=[...gr.entries()].sort((e,t)=>e[1].at-t[1].at)[0];e&&gr.delete(e[0])}p([]),er.clear(),_n(),Ct(null),pt(0),dt(!0),Ti=!1,Ei=void 0}r(e),a(_),D(T.get(e)??``),G(null),or(!1),ir(!1),Qt(l||s||`?`,Jt()),Yt(Zt(_||e)),localStorage.setItem(`teapot.session`,e),Ar(_,t);let v=gr.get(_);v?.events.length&&(nr(v.events),p(nr(v.events)),h(v.total),requestAnimationFrame(()=>{n()===e&&hr(!0)})),$(`/api/agents/${e}/load`,{method:`POST`}).then(Fn).catch(()=>{}),await fr(e,_),n()===e&&(Pt(t=>{let n=t.get(e)??null,r=Je(n,f(),H()?.status);if(r===n)return t;let i=new Map(t);return r?i.set(e,r):i.delete(e),i}),Ct(H()?.ctx?.compacting?{phase:String(H().ctx.compacting)}:null),requestAnimationFrame(()=>{n()===e&&hr(!0)}),ur())}let[yr,br]=v(!1),xr=null,Sr=null;w(()=>xr?.close());let Cr=!1,wr=null;document.addEventListener(`visibilitychange`,()=>wr?.()),w(()=>{wr=null});let Tr=!0,Er=null;async function Dr(){let e=n(),t=f().at(-1)?.id,r=i(),a=document.visibilityState===`hidden`;if(!e||!t)Cr=!0,a||Er?.();else try{let n=r&&r!==e?`&session=${encodeURIComponent(r)}`:``,i=$n(),o=await $(`/api/agents/${e}/events?after=${encodeURIComponent(t)}${n}${i?`&branch=${encodeURIComponent(i)}&lineage=true`:``}`),s=o.events??[];o.gap?(p(nr(s)),h(s.length)):s.length&&(lr(s),h(e=>e+s.length)),await Fn(),s.length&&!a&&In()}catch{Cr=!0}}function Or(){Tr=!0;let r=location.protocol===`https:`?`wss://`:`ws://`,a=new WebSocket(`${r}${location.host}/api/ws${Kp()}`);xr=a,a.onopen=()=>{br(!0),Tr?Tr=!1:Dr()},a.onclose=()=>{br(!1),setTimeout(Or,1500)},a.onerror=()=>a.close();let o=new Set([`state`,`usage`,`session_start`]);a.onmessage=r=>{let c=JSON.parse(r.data);if(c.kind===`ping`)try{a.send(JSON.stringify({kind:`pong`}))}catch{}else if(c.kind!==`pong`){if(c.kind===`hello`&&Array.isArray(c.agents)){t(e=>Pn(e,c.agents));let n=e();Pt(e=>qe(e,e=>n.find(t=>t.id===e)?.status))}else if(c.kind===`event`&&Ue(c.event))Pt(e=>He(e,c.agentId));else if(c.kind===`llm-delta`){if(!yt(c,n(),i()))return;if(Pt(e=>Ve(e,c.agentId,c)),c.agentId===n()){let e=String(c.reasoning??``),t=String(c.text??``);e&&!t?Lt()||Rt(Date.now()):t&&Rt(0)}}else if(c.kind===`compaction-progress`){if(c.agentId!==n())return;c.phase===`done`?Ct(null):Ct({phase:c.phase,summarized:c.summarized})}else if(c.kind===`agent-update`&&c.snapshot)t(e=>{let t=e.findIndex(e=>e.id===c.snapshot.id),n=c.snapshot;return t===-1?[...e,n]:Pn(e,e.map((e,n)=>n===t?c.snapshot:e))});else{if(c.kind===`event`){let e=c.event?.type,t=c.event?.data??{};if((e===`system_note`&&t.event===`prompt-delivered`&&c.agentId===n()||e===`system_note`&&t.event===`prompt-cancelled`&&c.agentId===n())&&Qt(Xt(),Jt().filter(e=>e.promptId!==t.promptId)),o.has(e)&&!Up.has(e)||(dn(c.agentId,c.event),c.event?.agent!==n())||!vt(c.event,n(),i())||(lr([c.event]),Cr=!0,document.visibilityState!==`visible`)||Sr)return;Sr=setTimeout(s,60)}document.visibilityState===`hidden`?Cr=!0:Sr||=setTimeout(s,120)}}},Cr=!1;let s=async()=>{if(Sr=null,await Fn(),await In(),n()){let e=f().at(-1)?.id,t=m();await fr(n());let r=Ft();r&&!Je(r,f(),H()?.status)&&It(null),f().at(-1)?.id!==e&&(ut()?(hr(!0),sn(n())):pt(ft()+Math.max(0,m()-t)))}};Er=s,wr=()=>{document.visibilityState===`visible`&&n()&&(Cr?(Cr=!1,s()):f().at(-1)?.id?Dr():(Cr=!0,s()))}}let kr=()=>decodeURIComponent(location.pathname.split(`/`)[2]??``);function Ar(e,t=!0){let n=`/session/${encodeURIComponent(e)}`;t?history.pushState(null,``,n):history.replaceState(null,``,n)}window.addEventListener(`popstate`,()=>{let e=kr(),t=o().get(e);t&&(t!==n()||e!==i())&&vr(t,!1,e||null)}),b(()=>{let e=H(),t=e?`${Ut()?`▶ `:e.status===`error`?`⚠ `:``}${e.id} · teapot`:`teapot`;document.title=on()>0?`(${on()}) ${t}`:t});let jr=()=>k()||ae()||me()||Gt()!==null||se()&&j();window.addEventListener(`keydown`,e=>{let t=e.target;if(t&&(t.tagName===`INPUT`||t.tagName===`TEXTAREA`||t.isContentEditable))e.key===`Escape`&&t.blur();else if(e.key===`Escape`){if(k()){ie(!1);return}if(ae()){oe(!1);return}if(me()){he(!1);return}if(Gt()){Kt(null);return}if(se()&&j()){pe();return}let e=H();if(e&&Ut()){$(`/api/agents/${e.id}/stop`,{method:`POST`}).then(Fn);return}}else if(!jr()){if(e.key===`/`)e.preventDefault(),document.querySelector(`.composer textarea`)?.focus();else if(e.key===`d`)fe();else if(e.key===`t`)Pr();else if(e.key===`ArrowDown`||e.key===`ArrowUp`){let t=Jn().map(e=>e.a);if(t.length===0)return;e.preventDefault();let r=t.findIndex(e=>e.id===n()),i=e.key===`ArrowDown`?Math.min(r+1,t.length-1):Math.max(r-1,0);i!==r&&vr(t[i].id)}}});let[Mr,Nr]=v(localStorage.getItem(`teapot.term`)===`1`),Pr=()=>{let e=!Mr();Nr(e),localStorage.setItem(`teapot.term`,e?`1`:`0`)},[Fr,Ir]=v([]),[Lr,Rr]=v(0),[zr,Br]=v(-1),[Vr,Hr]=v(!1),[Ur,Wr]=v(0),[Gr,Kr]=v(Number(localStorage.getItem(`teapot.termH`))||Math.max(220,Math.round(window.innerHeight*.35))),qr=new Map,Jr=0,Yr=[null,null],Xr=()=>Fr()[Ur()===0?Lr():zr()]??null;function Zr(e){if(!Fr()[e])return;let t=Ur(),n=t===0?Lr():zr(),r=t===0?zr():Lr(),i=e=>t===0?Rr(e):Br(e);r===e?((e=>t===0?Br(e):Rr(e))(n),i(e)):n!==e&&i(e)}let Qr=()=>$r();function $r(e){let t=e??n();if(!t)return;let r=Fr().filter(e=>e.agentId===t).length;if(r>=10){Q(`max 10 shells per agent (${t}) — that's already a lot`);return}let i={key:`${t}#${++Jr}`,agentId:t,title:r===0?t:`${t}·${r+1}`};Ir(e=>[...e,i]);let a=Fr().length;Ur()===0?Rr(a):Br(a)}function ei(e){let t=Fr()[e];if(!t)return;let n=qr.get(t.key);if(n){n.ro?.disconnect();try{n.ws.close()}catch{}n.term.dispose(),qr.delete(t.key)}let r=Fr().filter((t,n)=>n!==e);Ir(r);let i=t=>t===e?-1:t>e?t-1:t;Rr(e=>Math.min(i(e),r.length-1)),Br(e=>e===-1?-1:Math.min(i(e),r.length-1))}b(()=>{ve(),ge(),Oe(),be(),Se();for(let[,e]of qr)St(e.term)});function ti(){for(let[,e]of qr){e.ro?.disconnect();try{e.ws.close()}catch{}e.term.dispose()}qr.clear()}function ni(e,t){let n=qr.get(e.key);if(n&&St(n.term),n)n.el.parentElement!==t&&(t.appendChild(n.el),setTimeout(()=>{try{n.fit()}catch{}},30));else{let r=document.createElement(`div`);r.className=`termsession`,t.appendChild(r);let i=new Cl({cursorBlink:!0,fontSize:12.5,fontFamily:`ui-monospace, Menlo, Consolas, monospace`,theme:xt()}),a=new El;i.loadAddon(a),i.open(r);let o=location.protocol===`https:`?`wss://`:`ws://`,s=new WebSocket(`${o}${location.host}/api/agents/${e.agentId}/term${Kp()}`);s.onmessage=e=>{let t=JSON.parse(e.data);t.kind===`data`?i.write(t.data):t.kind===`exit`&&i.write(`\r\n\x1b[2m[terminal exited ${t.code??``}]\x1b[0m\r\n`)},i.onData(e=>{s.readyState===WebSocket.OPEN&&s.send(JSON.stringify({kind:`input`,data:e}))});let c={cols:0,rows:0},l=[],u=()=>{try{a.fit()}catch{}(i.cols!==c.cols||i.rows!==c.rows)&&s.readyState===WebSocket.OPEN&&(c={cols:i.cols,rows:i.rows},s.send(JSON.stringify({kind:`resize`,cols:i.cols,rows:i.rows})))},d=new ResizeObserver(()=>{l[0]&&clearTimeout(l[0]),l[0]=setTimeout(u,250)});d.observe(r),setTimeout(u,60),n={el:r,term:i,fit:a,ws:s,ro:d},qr.set(e.key,n)}return n}function ri(e){let t=Yr[e];if(!t)return;let n=Fr()[e===0?Lr():zr()];if(!n){[...qr.values()].some(e=>e.el.parentElement===t)&&t.replaceChildren();return}let r=ni(n,t);for(let[e,r]of qr)e!==n.key&&r.el.parentElement===t&&r.el.remove();requestAnimationFrame(()=>{r.el.parentElement!==t&&t.appendChild(r.el);try{r.fit()}catch{}if(Ur()===(e===0?0:1))try{r.term.focus()}catch{}})}b(()=>{Fr(),Vr(),Lr(),zr(),Gr(),requestAnimationFrame(()=>{ri(0),Vr()&&ri(1)})});let ii=null;b(()=>{if(!Mr())return;let e=n();if(e&&e!==ii){if(ii=e,!Fr().some(t=>t.agentId===e))$r(e);else{let t=-1;Fr().forEach((n,r)=>{n.agentId===e&&(t=r)}),t>=0&&Zr(t)}}});let ai=e=>{e.preventDefault();let t=e.clientY,n=Gr(),r=e=>{let r=Math.min(Math.max(n-(e.clientY-t),140),Math.round(window.innerHeight*.85));Kr(r)},i=()=>{window.removeEventListener(`pointermove`,r),window.removeEventListener(`pointerup`,i),localStorage.setItem(`teapot.termH`,String(Gr())),requestAnimationFrame(()=>{ri(0),Vr()&&ri(1)})};window.addEventListener(`pointermove`,r),window.addEventListener(`pointerup`,i)},oi=()=>{let e=!Vr();if(Hr(e),e){let e=Fr().map((e,t)=>t).filter(e=>e!==Lr());(zr()<0||zr()===Lr()||zr()>=Fr().length)&&Br(e[0]??-1)}requestAnimationFrame(()=>{ri(0),Vr()&&ri(1)})};w(ti);let si=e=>t=>{Yr[e]=t,t&&requestAnimationFrame(()=>{ri(e),Vr()&&ri(1),setTimeout(()=>ri(e),200)})};C(()=>{Sn(),Fn().then(async()=>{await d();let t=kr(),n=t?o().get(t):void 0,r=(n?e().find(e=>e.id===n):void 0)??e().find(e=>e.id===t&&!o().has(t))??e().find(e=>e.id===localStorage.getItem(`teapot.session`))??e()[0];r&&vr(r.id,!1,t||null)}),In(),zn(),di(),Or();let t=setInterval(()=>{In(),zn()},3e4);w(()=>clearInterval(t))});let ci=[{cmd:`/start`,desc:`start working toward the goal`},{cmd:`/stop`,desc:`interrupt the running agent`},{cmd:`/fork`,desc:`branch the conversation here`},{cmd:`/goal`,desc:`/goal <text> — set goal & notify the agent`},{cmd:`/compact`,desc:`force a context compaction now`},{cmd:`/skill`,desc:`/skill <name> — force-load a skill and follow it`}],[li,ui]=v([]),di=()=>$(`/api/personas`).then(e=>ui(e.personas)).catch(()=>{}),[fi,pi]=v(!1),mi=()=>{let e=ne().match(/^@([A-Za-z0-9._-]*)$/);return e?e[1].toLowerCase():null},hi=()=>{let t=mi();return t===null?[]:[...li().map(e=>({key:e.key,label:`${e.label} — spawns a sub-agent`,kind:`persona`})),...e().filter(e=>e.id!==n()).map(e=>({key:e.id,label:`${e.status} — send directly`,kind:`agent`}))].filter(e=>e.key.toLowerCase().startsWith(t))},gi=new Set([`start`,`stop`,`fork`,`compact`]),[_i,vi]=v([]),[yi,bi]=v(-1),xi=()=>{let e=ne();if(!e.startsWith(`/`)||e.includes(`
23
23
  `))return[];let t=e.match(/^\/([a-z]*)(?:\s+(.*))?$/i);if(!t)return[];let n=t[1].toLowerCase(),r=(t[2]??``).trim();if(!r&&n!==`skill`){let e=ci.filter(e=>e.cmd.slice(1).startsWith(n));return e.find(e=>e.cmd.slice(1)===n)&&gi.has(n)?[]:e.map(e=>({insert:e.cmd+` `,title:e.desc}))}if(n===`skill`){let e=_i().filter(e=>e.name.toLowerCase().startsWith(r.toLowerCase()));return e.length===1&&e[0].name.toLowerCase()===r.toLowerCase()?[]:e.map(e=>({insert:`/skill ${e.name} `,title:e.description||`(bundled skill)`}))}return[]},Si,Ci=()=>{if(!Si)return;wi=!0;let e=ut();Si.style.height=`auto`,Si.style.height=tt()?``:`${Math.min(Si.scrollHeight,360)}px`,requestAnimationFrame(()=>{let t=pr();e&&t&&(t.scrollTop=t.scrollHeight),wi=!1})},wi=!1,Ti=!1,Ei;b(()=>{let e=ne();Si&&jt(zp)&&(Mt(Si.value,e)&&(Si.value=e),Ci())});let[Di,Oi]=v([]),ki=e=>{let t=Array.from(e).filter(e=>e.type.startsWith(`image/`));for(let e of t){if(e.size>8e6){Q(`"${e.name}" is over 8 MB — skipped`);continue}let t=new FileReader;t.onload=()=>{Oi(n=>[...n,{url:String(t.result),name:e.name}].slice(0,4))},t.readAsDataURL(e)}},Ai=async(e,t)=>{let r=t??n();if(!r)return;let i=Di();try{let t=await $(`/api/agents/${r}/prompt`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({text:e,start:!0,...i.length?{images:i}:{}})});Qt(Xt(),[...Jt(),{id:`@p${Date.now()}${Math.random().toString(36).slice(2,6)}`,text:e,at:Date.now(),promptId:t.promptId,...i.length?{images:i.map(e=>e.url)}:{}}]),Oi([]),tt()&&(rt(!1),requestAnimationFrame(()=>Ci())),requestAnimationFrame(()=>requestAnimationFrame(()=>hr(!0)))}catch(t){D(e),console.error(`send failed:`,t)}},ji=async t=>{t.preventDefault();let r=n(),i=ne().trim();if(r&&i){if(i.startsWith(`@`)){let t=i.indexOf(` `),r=(t===-1?i.slice(1):i.slice(1,t)).toLowerCase(),a=t===-1?``:i.slice(t+1).trim(),o=li().some(e=>e.key.toLowerCase()===r),s=e().some(e=>e.id.toLowerCase()===r);try{if(o){if(!a){Q(`usage: @${r} <task>`);return}Q(`🧩 spawned ${(await $(`/api/agents/${n()}/spawn`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({persona:r,task:a,context:fi()?`fork`:`none`})})).id}${fi()?` (forked context)`:``}`),Fn(),D(``)}else if(s){if(!a){Q(`usage: @${r} <message>`);return}await $(`/api/agents/${encodeURIComponent(r)}/prompt`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({text:a,start:!0})}),Q(`→ delivered to @${r}`),D(``)}else{Q(`unknown @${r} — personas: ${li().map(e=>e.key).join(`, `)||`(none)`}`);return}}catch(e){Q(`@${r} failed: ${e.message}`)}}else if(i.startsWith(`/`)){let e=i.indexOf(` `),t=(e===-1?i.slice(1):i.slice(1,e)).toLowerCase(),n=e===-1?``:i.slice(e+1).trim();if(t===`goal`&&!n){D(`/goal `);return}if(t===`skill`&&!n){D(`/skill `);return}D(``);try{await Mi(t,n)}catch(e){throw D(ne()?`${i}\n${ne()}`:i),e}}else D(``),await Ai(i)}},Mi=async(e,t)=>{let r=n();if(!r)return;let i=(e,t)=>$(`/api/agents/${r}${e}`,{method:`POST`,headers:{"content-type":`application/json`},...t===void 0?{}:{body:JSON.stringify(t)}}).then(Fn);try{if(e===`start`)await i(`/start`);else if(e===`stop`)await i(`/stop`);else if(e===`fork`)await i(`/fork`,{}),await vr(r);else if(e===`compact`)Q((await i(`/compact`))?.ran?`context compacted`:`nothing to compact yet`);else if(e===`goal`){if(!t){Q(`usage: /goal <text>`);return}await i(`/goal`,{text:t,notify:!0}),Q(`goal saved & notification queued`)}else if(e===`skill`){if(!t){Q(`usage: /skill <name>`);return}await Ai(`[harness] Force-load and follow the skill "${t}" now: call load_skill("${t}") and execute its playbook for the current task.`),Q(`skill "${t}" dispatched`)}else Q(`unknown command "${e}" — /start /stop /fork /goal /skill /compact`)}catch(t){Q(`/${e} failed: ${t.message}`)}},Ni,Pi=0;b(()=>{e(),requestAnimationFrame(()=>{requestAnimationFrame(()=>{if(!Ni)return;let e=Math.min(Pi,Ni.scrollHeight);Math.abs(Ni.scrollTop-e)>1&&(Ni.scrollTop=e)})})});let Fi=e=>()=>n()&&$(`/api/agents/${n()}${e}`,{method:`POST`}).then(Fn),[Ii,Li]=v(``),[Ri,q]=v(``),[zi,Bi]=v(!1),[Vi,Hi]=v(!0),Ui=``;b(()=>{let e=n();e&&(H()?.goal,e!==Ui&&(Ui=e,Bi(!1),Li(``),q(``)))});let Wi=async e=>{if(e.preventDefault(),n()&&Ii().trim())try{await $(`/api/agents/${n()}/goal`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({text:Ii(),notify:Vi(),...Ri().trim()?{verify:Ri()}:{}})}),Li(``),q(``),Bi(!1),Fn()}catch(e){Q(`goal save failed: ${e.message}`)}};return[M(P,{get when(){return O()?.needsSetup},fallback:null,get children(){return M(Sm,{onDone:()=>location.reload()})}}),M(P,{get when(){return Cn()},get children(){var e=Nl();return e.firstChild.firstChild.nextSibling.addEventListener(`submit`,e=>{e.preventDefault();let t=document.getElementById(`pw-input`);localStorage.setItem(`teapot.token`,t.value),location.reload()}),e}}),M(P,{get when(){return!O()?.needsSetup},get children(){var i=su(),a=i.firstChild,o=a.firstChild,s=o.nextSibling,c=s.firstChild,l=c.firstChild;l.firstChild;var u=c.nextSibling,m=u.firstChild.firstChild.nextSibling;m.firstChild;var _=m.nextSibling,v=u.nextSibling,S=a.nextSibling,C=S.nextSibling,w=C.firstChild;w.firstChild,z(o,M(N,{get each(){return Zn()},children:t=>[M(P,{get when(){return F(()=>t.wsHeader!==void 0)()&&t.wsHeader!==``},get children(){var e=pu(),n=e.firstChild;return e.$$click=()=>U(`ws:${t.wsHeader}`,Yn(t.wsHeader),t.wsCollapsedGroup===!0,t.collapsedVia),z(n,()=>t.wsCollapsedGroup?`▸`:`▾`),z(e,()=>Yn(t.wsHeader),null),z(e,M(P,{get when(){return(W().get(t.wsHeader)??0)>1||t.wsCollapsedGroup},get children(){var e=fu();return z(e,()=>W().get(t.wsHeader)??0),e}}),null),y(()=>L(e,`title`,t.wsCollapsedGroup?`${t.wsHeader} — collapsed (${Xn(t.wsHeader)} hidden). Click to show.`:(W().get(t.wsHeader)??0)>1?`${t.wsHeader} — ${Xn(t.wsHeader)} in this directory`:t.wsHeader||``)),e}}),M(P,{get when(){return F(()=>!t.headerOnly)()&&!t.wsCollapsedGroup},get children(){var r=vu(),i=r.firstChild,a=i.nextSibling;return r.$$click=()=>vr(t.a.id),z(r,M(P,{get when(){return it({isSub:!!t.a.parent,collapsed:t.chatCollapsedGroup===!0,hasChildren:e().some(e=>e.parent===t.a.id)})},get fallback(){return yu()},get children(){return(()=>{let e=!t.a.parent,n=e&&qn().has(`chat:${t.a.id}`)||Vn().has(t.a.id);return(()=>{var r=bu();return r.$$click=r=>{if(r.stopPropagation(),e){if(Vn().has(t.a.id)){let e=new Set(Vn());e.delete(t.a.id),Hn(e),localStorage.setItem(`teapot.collapsed`,JSON.stringify([...e]))}U(`chat:${t.a.id}`,t.a.id,n)}else Un(t.a.id)},z(r,n?`▸`:`▾`),y(()=>L(r,`title`,e?n?`show ${t.a.id}`:`hide ${t.a.id} and its sub-agents`:n?`expand sub-agents`:`collapse sub-agents`)),r})()})()}}),i),z(a,()=>t.a.id),z(r,(()=>{var e=F(()=>!!t.a.workspaceMissing);return()=>e()?xu():null})(),null),z(r,M(P,{get when(){return cn(t.a.id)>0},get children(){var e=mu();return e.firstChild,z(e,()=>cn(t.a.id),null),y(()=>L(e,`title`,`${cn(t.a.id)} unread notification${cn(t.a.id)>1?`s`:``} (including sub-agents)`)),e}}),null),z(r,M(P,{get when(){return Vn().has(t.a.id)||t.chatCollapsedGroup===!0&&qn().has(`chat:${t.a.id}`)},get children(){return(()=>{let n=ot(e(),t.a.id),r=n.filter(e=>e.live??(e.status===`running`||e.status===`waiting`)).length;return n.length>0?(()=>{var e=Su();return e.firstChild,R(e,`subcount`+(r>0?` live`:``)),z(e,()=>n.length,null),z(e,r>0?` · ▶${r}`:``,null),y(()=>L(e,`title`,`${n.length} sub-agent${n.length>1?`s`:``} (${r} active)`)),e})():null})()}}),null),z(r,M(P,{get when(){return t.a.parent},get children(){return hu()}}),null),z(r,M(P,{get when(){return Bn(t.a.id).length>0},get children(){var e=gu();return y(()=>L(e,`title`,Bn(t.a.id).map(e=>`${e.id}: ${e.schedule}`).join(`
24
- `))),e}}),null),z(r,M(P,{get when(){return t.a.goal.status===`done`},get children(){return _u()}}),null),y(e=>{var o=`agent-item`+(t.a.id===n()?` sel`:``)+(t.depth>0?` sub-row`:``)+(t.chatCollapsedGroup?` collapsed`:``),s=t.depth>0?`padding-left:${10+t.depth*14}px`:``,c=t.a.parent?(()=>{let e=at(t.a.id,li().map(e=>e.key));return e?`sub-agent of @${t.a.parent} — "${e}"`:`sub-agent of @${t.a.parent}`})():void 0,l=`dot ${t.a.status}`,u=t.a.workspaceMissing?` ghost`:``,d=t.a.workspaceMissing?`workspace not found on disk (${t.a.workspace}) — it will be created when this session runs`:void 0;return o!==e.e&&R(r,e.e=o),e.t=Te(r,s,e.t),c!==e.a&&L(r,`title`,e.a=c),l!==e.o&&R(i,e.o=l),u!==e.i&&R(a,e.i=u),d!==e.n&&L(a,`title`,e.n=d),e},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0}),r}})]})),z(s,M(P,{get when(){return me()},get children(){var e=Fl(),t=e.firstChild.firstChild;return t.addEventListener(`change`,e=>{let t=e.currentTarget.checked;ye(t),localStorage.setItem(`teapot.theme.auto`,t?`1`:`0`)}),z(e,M(P,{get when(){return!ve()},get fallback(){return[(()=>{var e=Cu(),t=e.firstChild.nextSibling;return t.addEventListener(`change`,e=>{xe(e.currentTarget.value),localStorage.setItem(`teapot.theme.light`,e.currentTarget.value)}),z(t,M(N,{get each(){return Bp.filter(e=>e.mode===`light`)},children:e=>(()=>{var t=Tu();return z(t,()=>e.label),y(()=>t.value=e.key),t})()})),y(()=>t.value=be()),e})(),(()=>{var e=wu(),t=e.firstChild.nextSibling;return t.addEventListener(`change`,e=>{I(e.currentTarget.value),localStorage.setItem(`teapot.theme.dark`,e.currentTarget.value)}),z(t,M(N,{get each(){return Bp.filter(e=>e.mode===`dark`)},children:e=>(()=>{var t=Tu();return z(t,()=>e.label),y(()=>t.value=e.key),t})()})),y(()=>t.value=Se()),e})()]},get children(){var e=Pl();return z(e,M(N,{each:Bp,children:e=>(()=>{var t=Eu(),n=t.firstChild;return t.$$click=()=>{_e(e.key),localStorage.setItem(`teapot.theme`,e.key)},z(n,()=>e.sw.map(e=>(()=>{var t=Du();return Ee(t,`background`,e),t})())),z(t,()=>e.label,null),y(n=>{var r=`themebtn`+(ge()===e.key?` on`:``),i=`${e.label} (${e.mode})`;return r!==n.e&&R(t,n.e=r),i!==n.t&&L(t,`title`,n.t=i),n},{e:void 0,t:void 0}),t})()})),e}}),null),y(()=>t.checked=ve()),e}}),c),l.$$click=e=>{e.stopPropagation(),an(!rn()),rn()||en(e=>e.map(e=>({...e,read:!0})))},z(l,M(P,{get when(){return on()>0},get children(){var e=Il();return z(e,on),e}}),null),z(c,M(om,{icon:`👻`,get active(){return tn()},get title(){return tn()?`show ghost sessions again (👻 workspace missing on disk)`:`hide ghost sessions (👻 — their workspace directory no longer exists)`},onClick:t=>{t.stopPropagation();let r=!tn();if(nn(r),localStorage.setItem(`teapot.hideGhosts`,r?`1`:`0`),r&&n()&&H()?.workspaceMissing){let t=e().find(e=>!e.workspaceMissing);t&&vr(t.id)}}}),null),z(c,M(om,{icon:`+`,title:`new agent`,onClick:()=>{Sn(),ie(!0)}}),null),z(c,M(om,{icon:`🎨`,title:`themes`,onClick:()=>he(!me())}),null),z(c,M(om,{icon:`⚙`,title:`settings`,onClick:()=>{Sn(),oe(!0)}}),null),z(m,`0.29.13`,null),z(v,M(P,{get when(){return ee()},get children(){return[`master rss `,F(()=>ee().rssMb),`MB · heap `,F(()=>ee().heapUsedMb),`MB`,Ll(),`load1 `,F(()=>ee().loadavg1),` · up `,F(()=>Math.floor(ee().uptimeSec/60)),`m`]}})),z(S,M(P,{get when(){return H()?.id},keyed:!0,get fallback(){return Ou()},get children(){return[(()=>{var e=Vl(),t=e.firstChild.nextSibling,n=t.nextSibling,r=n.nextSibling,i=r.firstChild,a=i.nextSibling,o=a.nextSibling.nextSibling,s=o.nextSibling.nextSibling;s.nextSibling;var c=r.nextSibling;return z(t,()=>H().id),z(n,()=>H().status),z(e,M(P,{get when(){return(H().pendingPromptIds?.length??H().pendingPrompts??0)>0},get children(){var e=Rl(),t=e.firstChild.nextSibling;return t.nextSibling,z(e,()=>H().pendingPromptIds?.length??H().pendingPrompts,t),z(e,()=>H().status===`stopped`?` (stopped)`:``,null),y(()=>L(e,`title`,H().status===`stopped`?`${H().pendingPromptIds?.length??H().pendingPrompts??0} message${(H().pendingPromptIds?.length??H().pendingPrompts??0)>1?`s`:``} from you are still queued, but this agent is STOPPED — nothing will run until you press start (or it is resumed). Each can be withdrawn with ✕ cancel while it is still queued.`:`${H().pendingPromptIds?.length??H().pendingPrompts??0} message${(H().pendingPromptIds?.length??H().pendingPrompts??0)>1?`s`:``} from you waiting in the queue. They will be handed to the model at its next turn boundary — the timeline shows them as "pending (queued)…" until then, and each can be withdrawn with ✕ cancel while it's still queued.`)),e}}),r),z(e,M(P,{get when(){return Bn(H().id).length>0},get children(){var e=zl();return e.firstChild,z(e,()=>Bn(H().id).length,null),y(()=>L(e,`title`,`scheduled tasks:\n${Bn(H().id).map(e=>`${e.schedule} · ${e.id}${e.forked?` (forked)`:``}`).join(`
24
+ `))),e}}),null),z(r,M(P,{get when(){return t.a.goal.status===`done`},get children(){return _u()}}),null),y(e=>{var o=`agent-item`+(t.a.id===n()?` sel`:``)+(t.depth>0?` sub-row`:``)+(t.chatCollapsedGroup?` collapsed`:``),s=t.depth>0?`padding-left:${10+t.depth*14}px`:``,c=t.a.parent?(()=>{let e=at(t.a.id,li().map(e=>e.key));return e?`sub-agent of @${t.a.parent} — "${e}"`:`sub-agent of @${t.a.parent}`})():void 0,l=`dot ${t.a.status}`,u=t.a.workspaceMissing?` ghost`:``,d=t.a.workspaceMissing?`workspace not found on disk (${t.a.workspace}) — it will be created when this session runs`:void 0;return o!==e.e&&R(r,e.e=o),e.t=Te(r,s,e.t),c!==e.a&&L(r,`title`,e.a=c),l!==e.o&&R(i,e.o=l),u!==e.i&&R(a,e.i=u),d!==e.n&&L(a,`title`,e.n=d),e},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0}),r}})]})),z(s,M(P,{get when(){return me()},get children(){var e=Fl(),t=e.firstChild.firstChild;return t.addEventListener(`change`,e=>{let t=e.currentTarget.checked;ye(t),localStorage.setItem(`teapot.theme.auto`,t?`1`:`0`)}),z(e,M(P,{get when(){return!ve()},get fallback(){return[(()=>{var e=Cu(),t=e.firstChild.nextSibling;return t.addEventListener(`change`,e=>{xe(e.currentTarget.value),localStorage.setItem(`teapot.theme.light`,e.currentTarget.value)}),z(t,M(N,{get each(){return Bp.filter(e=>e.mode===`light`)},children:e=>(()=>{var t=Tu();return z(t,()=>e.label),y(()=>t.value=e.key),t})()})),y(()=>t.value=be()),e})(),(()=>{var e=wu(),t=e.firstChild.nextSibling;return t.addEventListener(`change`,e=>{I(e.currentTarget.value),localStorage.setItem(`teapot.theme.dark`,e.currentTarget.value)}),z(t,M(N,{get each(){return Bp.filter(e=>e.mode===`dark`)},children:e=>(()=>{var t=Tu();return z(t,()=>e.label),y(()=>t.value=e.key),t})()})),y(()=>t.value=Se()),e})()]},get children(){var e=Pl();return z(e,M(N,{each:Bp,children:e=>(()=>{var t=Eu(),n=t.firstChild;return t.$$click=()=>{_e(e.key),localStorage.setItem(`teapot.theme`,e.key)},z(n,()=>e.sw.map(e=>(()=>{var t=Du();return Ee(t,`background`,e),t})())),z(t,()=>e.label,null),y(n=>{var r=`themebtn`+(ge()===e.key?` on`:``),i=`${e.label} (${e.mode})`;return r!==n.e&&R(t,n.e=r),i!==n.t&&L(t,`title`,n.t=i),n},{e:void 0,t:void 0}),t})()})),e}}),null),y(()=>t.checked=ve()),e}}),c),l.$$click=e=>{e.stopPropagation(),an(!rn()),rn()||en(e=>e.map(e=>({...e,read:!0})))},z(l,M(P,{get when(){return on()>0},get children(){var e=Il();return z(e,on),e}}),null),z(c,M(om,{icon:`👻`,get active(){return tn()},get title(){return tn()?`show ghost sessions again (👻 workspace missing on disk)`:`hide ghost sessions (👻 — their workspace directory no longer exists)`},onClick:t=>{t.stopPropagation();let r=!tn();if(nn(r),localStorage.setItem(`teapot.hideGhosts`,r?`1`:`0`),r&&n()&&H()?.workspaceMissing){let t=e().find(e=>!e.workspaceMissing);t&&vr(t.id)}}}),null),z(c,M(om,{icon:`+`,title:`new agent`,onClick:()=>{Sn(),ie(!0)}}),null),z(c,M(om,{icon:`🎨`,title:`themes`,onClick:()=>he(!me())}),null),z(c,M(om,{icon:`⚙`,title:`settings`,onClick:()=>{Sn(),oe(!0)}}),null),z(m,`0.29.14`,null),z(v,M(P,{get when(){return ee()},get children(){return[`master rss `,F(()=>ee().rssMb),`MB · heap `,F(()=>ee().heapUsedMb),`MB`,Ll(),`load1 `,F(()=>ee().loadavg1),` · up `,F(()=>Math.floor(ee().uptimeSec/60)),`m`]}})),z(S,M(P,{get when(){return H()?.id},keyed:!0,get fallback(){return Ou()},get children(){return[(()=>{var e=Vl(),t=e.firstChild.nextSibling,n=t.nextSibling,r=n.nextSibling,i=r.firstChild,a=i.nextSibling,o=a.nextSibling.nextSibling,s=o.nextSibling.nextSibling;s.nextSibling;var c=r.nextSibling;return z(t,()=>H().id),z(n,()=>H().status),z(e,M(P,{get when(){return(H().pendingPromptIds?.length??H().pendingPrompts??0)>0},get children(){var e=Rl(),t=e.firstChild.nextSibling;return t.nextSibling,z(e,()=>H().pendingPromptIds?.length??H().pendingPrompts,t),z(e,()=>H().status===`stopped`?` (stopped)`:``,null),y(()=>L(e,`title`,H().status===`stopped`?`${H().pendingPromptIds?.length??H().pendingPrompts??0} message${(H().pendingPromptIds?.length??H().pendingPrompts??0)>1?`s`:``} from you are still queued, but this agent is STOPPED — nothing will run until you press start (or it is resumed). Each can be withdrawn with ✕ cancel while it is still queued.`:`${H().pendingPromptIds?.length??H().pendingPrompts??0} message${(H().pendingPromptIds?.length??H().pendingPrompts??0)>1?`s`:``} from you waiting in the queue. They will be handed to the model at its next turn boundary — the timeline shows them as "pending (queued)…" until then, and each can be withdrawn with ✕ cancel while it's still queued.`)),e}}),r),z(e,M(P,{get when(){return Bn(H().id).length>0},get children(){var e=zl();return e.firstChild,z(e,()=>Bn(H().id).length,null),y(()=>L(e,`title`,`scheduled tasks:\n${Bn(H().id).map(e=>`${e.schedule} · ${e.id}${e.forked?` (forked)`:``}`).join(`
25
25
  `)}`)),e}}),r),z(r,()=>H().model,i),z(r,()=>H().session,a),z(r,()=>H().branch,o),z(r,()=>H().stats.turns,s),z(r,()=>H().stats.toolCalls,null),z(c,M(P,{get when(){return H().statusReason},get children(){var e=Bl();return y(()=>L(e,`title`,H().statusReason)),e}}),null),z(c,M(om,{icon:`⌨`,title:`terminal (t)`,onClick:Pr}),null),z(c,M(om,{icon:`▤`,title:`toggle details panel (d)`,onClick:fe}),null),y(()=>R(n,`badge ${H().status}`)),e})(),(()=>{var e=Jl();return e.addEventListener(`scroll`,e=>{if(wi)return;let t=e.currentTarget,r=K(),i=t.scrollHeight-t.scrollTop-t.clientHeight,a=t.scrollTop,o=Nt({gap:i,top:a},Ei);Ei={gap:i,top:a},r?Ti=!1:o&&(Ti=!0),a<=4&&n()&&!rr()&&!ar()&&f().length>0&&dr(),Ti&&!r?dt(!1):(r&&ft()&&pt(0),r?dt(!0):o&&dt(!1))}),z(e,M(P,{get when(){return _t()},children:e=>(()=>{var t=ku();return t.firstChild,z(t,(()=>{var t=F(()=>e().phase===`harvesting`);return()=>t()?`saving durable lessons…`:`summarizing ${e().summarized?rm(e().summarized)+` `:``}older messages…`})(),null),t})()}),null),z(e,M(P,{get when(){return F(()=>!!ar())()&&yn().length>0},get children(){return Hl()}}),null),z(e,M(P,{get when(){return rr()},get children(){return Ul()}}),null),z(e,M(P,{get when(){return yn().length>0},get fallback(){return Au()},get children(){return[M(N,{get each(){return yn()},children:(e,t)=>M(Qp,{e,get prev(){return yn()[t()-1]},get res(){return pn().resFor.get(e.id)},get orphan(){return pn().orphanCalls.has(e.id)},onOption:e=>void Ai(e),answeredIds:vn,onAnswered:gn,get agentActive(){return F(()=>!!Wt())()&&Ke(e)},onResize:()=>{ut()&&requestAnimationFrame(()=>hr(!0))},get onCancel(){return e.data?.source===`user`&&e.data?.pending&&e.data?.promptId&&e.data?.sent!==!0?()=>{let t=String(e.data.promptId);$(`/api/agents/${n()}/prompt/cancel`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({promptId:t})}).then(e=>{let n=String(e.text??``);D(ne()?`${n}\n\n${ne()}`:n),Qt(Xt(),Jt().filter(e=>e.promptId!==t)),Q(`message withdrawn — draft restored`)}).catch(()=>Q(`withdraw failed — it may have already been sent`))}:void 0},get onEdit(){return e.type===`prompt`&&e.data?.source===`user`&&!(e.data?.pending&&e.data?.sent!==!0)&&!e.data?.cancelled&&!Ut()?()=>Kt({eventId:e.id,text:String(e.data?.text??``)}):void 0}})}),M(P,{get when(){return F(()=>!!Wt())()&&Ft()},get children(){var e=ql(),t=e.firstChild.nextSibling;return t.firstChild,z(t,M(P,{get when(){return Bt()},get children(){var e=Wl(),t=e.firstChild;t.firstChild;var n=t.nextSibling;return z(t,M(Yp,{get startedAt(){return zt()}}),null),De(e=>{let t=!0;e.addEventListener(`scroll`,()=>{t=e.scrollHeight-e.scrollTop-e.clientHeight<24}),b(()=>{Bt(),t&&(e.scrollTop=e.scrollHeight)})},n),z(n,Bt),e}}),null),z(t,M(P,{get when(){return B()},get fallback(){return ju()},get children(){return M(P,{get when(){return wt()},get fallback(){return(()=>{var e=Kl();return y(()=>e.innerHTML=Fe(B()+`▍`)),e})()},get children(){return[Gl(),(()=>{var e=Kl();return y(()=>e.innerHTML=Fe(Tt()+`▍`)),e})()]}})}}),null),e}})]}}),null),e})(),M(P,{get when(){return Mr()},get children(){var t=$l(),n=t.firstChild,r=n.nextSibling,i=r.firstChild,a=i.nextSibling,o=a.firstChild,s=r.nextSibling,c=s.firstChild;n.$$dblclick=()=>{Kr(Math.max(220,Math.round(window.innerHeight*.35))),localStorage.setItem(`teapot.termH`,String(Gr()))},n.$$pointerdown=ai,z(i,M(N,{get each(){return Fr()},children:(e,t)=>(()=>{var n=Mu(),r=n.firstChild.nextSibling;return n.$$click=()=>Zr(t()),z(n,()=>e.title,r),r.$$click=e=>{e.stopPropagation(),ei(t())},y(r=>{var i=`termtab`+(Ur()===0&&Lr()===t()?` active`:``)+(Vr()&&Ur()===1&&zr()===t()?` active`:``),a=`${e.title} — click to show in focused pane`;return i!==r.e&&R(n,r.e=i),a!==r.t&&L(n,`title`,r.t=a),r},{e:void 0,t:void 0}),n})()}),null),z(i,M(om,{icon:`+`,title:`new shell in this workspace`,onClick:Qr}),null),z(o,(()=>{var t=F(()=>!!Xr());return()=>t()?e().find(e=>e.id===Xr().agentId)?.workspace.split(`/`).filter(Boolean).pop():H()?.workspace})()),z(a,M(om,{icon:`◫`,get title(){return Vr()?`single pane`:`split panes (50/50)`},onClick:oi}),null),z(a,M(om,{icon:`▾`,title:`hide the terminal (shells keep running; reopen with t) — close individual shells with their ✕ tab buttons`,onClick:Pr}),null);var l=si(0);return typeof l==`function`&&De(l,c),c.$$pointerdown=()=>Wr(0),z(c,M(P,{get when(){return Lr()<0||Lr()>=Fr().length},get children(){return Yl()}})),z(s,M(P,{get when(){return Vr()},get children(){return[Xl(),(()=>{var e=Ql(),t=si(1);return typeof t==`function`&&De(t,e),e.$$pointerdown=()=>Wr(1),z(e,M(P,{get when(){return zr()<0||zr()>=Fr().length},get children(){return Zl()}})),y(()=>e.classList.toggle(`focused`,Ur()===1)),e})()]}}),null),y(e=>{var n={height:`${Gr()}px`},r=!!Vr(),i=Ur()===0;return e.e=Te(t,n,e.e),r!==e.t&&s.classList.toggle(`split`,e.t=r),i!==e.a&&c.classList.toggle(`focused`,e.a=i),e},{e:void 0,t:void 0,a:void 0}),t}}),(()=>{var e=au(),t=e.firstChild,n=t.firstChild,r=n.nextSibling,i=r.nextSibling,a=i.nextSibling,o=t.nextSibling;return z(e,M(P,{get when(){return!ut()||ft()>0},get children(){var e=eu();return e.firstChild,e.$$click=()=>hr(!0),z(e,(()=>{var e=F(()=>ft()>0);return()=>e()?`${ft()} new message${ft()>1?`s`:``}`:`jump to present`})(),null),e}}),t),z(e,M(P,{get when(){return xi().length>0},get children(){var e=tu();return z(e,M(N,{get each(){return xi()},children:(e,t)=>(()=>{var n=Nu(),r=n.firstChild,i=r.nextSibling;return n.$$click=()=>{D(e.insert),bi(-1)},z(r,()=>e.insert.trim()),z(i,()=>e.title),y(r=>{var i=`cmdrow`+(t()===yi()?` active`:``),a=e.title;return i!==r.e&&R(n,r.e=i),a!==r.t&&L(n,`title`,r.t=a),r},{e:void 0,t:void 0}),n})()})),e}}),t),z(e,M(P,{get when(){return hi().length>0},get children(){var e=tu();return z(e,M(N,{get each(){return hi()},children:e=>(()=>{var t=Pu(),n=t.firstChild;n.firstChild;var r=n.nextSibling;return t.$$click=()=>{D(`@${e.key} `),bi(-1)},z(n,()=>e.key,null),z(r,()=>e.label),y(()=>L(t,`title`,e.label)),t})()})),e}}),t),t.addEventListener(`submit`,ji),z(t,M(P,{get when(){return Di().length>0},get children(){var e=nu(),t=e.firstChild,n=t.firstChild,r=n.nextSibling;return r.nextSibling,z(e,M(N,{get each(){return Di()},children:(e,t)=>(()=>{var n=Fu(),r=n.firstChild,i=r.nextSibling;return i.$$click=()=>Oi(e=>e.filter((e,n)=>n!==t())),y(t=>{var i=e.name,a=e.url,o=e.name;return i!==t.e&&L(n,`title`,t.e=i),a!==t.t&&L(r,`src`,t.t=a),o!==t.a&&L(r,`alt`,t.a=o),t},{e:void 0,t:void 0,a:void 0}),n})()}),t),z(t,()=>Di().length,n),z(t,()=>Di().length>1?`s`:``,r),e}}),n),n.$$keydown=e=>{let t=xi();t.length>0&&e.key===`ArrowDown`?(e.preventDefault(),bi(e=>Math.min(e+1,t.length-1))):t.length>0&&e.key===`ArrowUp`?(e.preventDefault(),bi(e=>Math.max(e-1,0))):t.length>0&&(e.key===`Tab`||e.key===`Enter`)&&!e.shiftKey&&yi()>=0&&!zp?(e.preventDefault(),D(t[yi()].insert),bi(-1)):e.key===`Escape`&&t.length>0?bi(-1):e.key===`Enter`&&!e.shiftKey&&!zp&&!tt()&&(e.preventDefault(),ji(e))},n.$$input=e=>{D(e.currentTarget.value),bi(0),Ci()},n.addEventListener(`paste`,e=>{let t=Array.from(e.clipboardData?.files??[]).filter(e=>e.type.startsWith(`image/`));t.length&&(e.preventDefault(),ki(t))}),n.addEventListener(`compositionend`,()=>{requestAnimationFrame(()=>{zp=!1}),D(Si?.value??``)}),n.addEventListener(`compositionstart`,()=>{zp=!0}),De(e=>{Si=e,e.value=ne()},n),z(t,M(P,{get when(){return F(()=>!!ne().startsWith(`@`))()&&ne().includes(` `)},get children(){var e=ru(),t=e.firstChild;return t.addEventListener(`change`,e=>pi(e.currentTarget.checked)),y(()=>t.checked=fi()),e}}),r),r.$$click=()=>{let e=!tt();rt(e),requestAnimationFrame(()=>Ci())},z(r,()=>tt()?`⤡`:`⤢`),z(t,M(om,{icon:`📎`,title:`attach images (or paste them straight into the box)`,onClick:()=>document.getElementById(`composer-file`)?.click()}),i),z(t,M(P,{get when(){return Di().length},get children(){var e=iu();return e.firstChild,z(e,()=>Di().length,null),e}}),i),a.addEventListener(`change`,e=>{e.currentTarget.files?.length&&ki(e.currentTarget.files),e.currentTarget.value=``}),z(o,()=>Ip()||`enter send · shift+enter newline · ↑↓ sessions · / commands & focus · t terminal · d panel · esc interrupt · messages sent while the agent works queue up and land at the next turn boundary`),y(t=>{var i=`composer`+(tt()?` maximized`:``),a=`message #${H().id} — / for commands · paste or 📎 to attach images`,o=tt()?`restore composer (hide timeline)`:`maximize composer — hide the timeline and fill the main column`;return i!==t.e&&R(e,t.e=i),a!==t.t&&L(n,`placeholder`,t.t=a),o!==t.a&&L(r,`title`,t.a=o),t},{e:void 0,t:void 0,a:void 0}),e})()]}})),z(i,M(P,{get when(){return F(()=>!!ce())()&&j()},get children(){var e=ou();return e.$$click=()=>de(!1),e}}),C),C.addEventListener(`scroll`,e=>{Pi=e.currentTarget.scrollTop});var te=Ni;return typeof te==`function`?De(te,C):Ni=C,z(w,M(om,{icon:`✕`,title:`close details panel (esc)`,onClick:pe}),null),z(C,M(P,{get when(){return H()?.id},keyed:!0,fallback:null,children:i=>[Iu(),(()=>{var e=Lu(),t=e.firstChild,n=t.firstChild.nextSibling,r=n.nextSibling,i=t.nextSibling,a=i.firstChild.nextSibling,o=i.nextSibling.firstChild.nextSibling,s=o.firstChild;return z(n,()=>H().id),z(r,()=>H().status),z(a,()=>H().workspace),z(o,()=>H().session,s),z(o,()=>H().branch,null),y(e=>{var t=`badge ${H().status}`,n=H().workspace;return t!==e.e&&R(r,e.e=t),n!==e.t&&L(a,`title`,e.t=n),e},{e:void 0,t:void 0}),e})(),M(P,{get when(){return H().id},keyed:!0,fallback:null,children:e=>M(vm,{agentId:e,get workspace(){return H().workspace}})}),Ru(),(()=>{var t=Vu(),r=t.firstChild,i=r.nextSibling,a=i.firstChild,o=a.nextSibling,s=o.nextSibling,c=i.nextSibling;return c.firstChild,r.addEventListener(`change`,t=>{let r=t.currentTarget.value;et=!0,je(r),Ne(Ot(O().providers,r,e().find(e=>e.id===n()))),Be(r)}),z(r,M(N,{get each(){return ze()},children:e=>(()=>{var t=Tu();return t.value=e,z(t,e,null),z(t,()=>e===O().defaultProvider?` ★`:``,null),t})()})),a.$$input=e=>Ne(e.currentTarget.value),z(o,M(N,{get each(){return Le()},children:e=>(()=>{var t=Tu();return y(()=>t.value=e.id),t})()})),s.$$click=async e=>{if(!n())return;let t=e.currentTarget;t.disabled=!0;try{await $(`/api/agents/${n()}/model`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({provider:Ae(),model:Me().trim()||void 0,contextWindowTokens:Le().find(e=>e.id===(Me().trim()||void 0))?.contextLength})}),t.textContent=`✓ applied`,Fn()}catch(e){alert(`model switch failed: ${e.message}`)}finally{setTimeout(()=>{t.textContent=`apply`,t.disabled=!1},1200)}},z(t,M(P,{get when(){return H().effortSupported},get children(){var e=zu(),t=e.firstChild.nextSibling;t.firstChild;var r=t.nextSibling;return t.addEventListener(`change`,e=>Ie(e.currentTarget.value)),z(t,M(N,{get each(){return F(()=>!!H().effortOptions?.length)()?H().effortOptions:Mp},children:e=>(()=>{var t=Tu();return t.value=e,z(t,e),t})()}),null),r.$$click=async e=>{if(!n())return;let t=e.currentTarget;t.disabled=!0;try{await $(`/api/agents/${n()}/model`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({reasoningEffort:Pe()})}),t.textContent=`✓ applied`,Fn()}catch(e){alert(`effort change failed: ${e.message}`)}finally{setTimeout(()=>{t.textContent=`apply`,t.disabled=!1},1200)}},y(()=>t.value=Pe()),e}}),c),z(c,()=>H().model,null),z(c,M(P,{get when(){return Le().length},get children(){return[` · `,F(()=>Le().length),` models loaded`]}}),null),z(t,M(P,{get when(){return Ge()},get children(){var e=Bu();return z(e,Ge),e}}),null),y(()=>L(a,`placeholder`,kt(O().providers,Ae(),H(),Et(H(),O().providers,O().defaultProvider)))),y(()=>r.value=Ae()),y(()=>a.value=Me()),t})(),Hu(),(()=>{var i=Wu(),a=i.firstChild,o=a.nextSibling,s=o.nextSibling;return we(a,`click`,Ut()?Fi(`/stop`):Fi(`/start`),!0),z(a,()=>Ut()?`■ stop`:`▶ start`),o.$$click=()=>$(`/api/agents/${H().id}/fork`,{method:`POST`,headers:{"content-type":`application/json`},body:`{}`}).then(async()=>{await d(!0),await vr(H().id)}),s.$$click=async()=>{let i=n();if(!i||!confirm(`remove agent ${i}? (log is kept)`))return;await $(`/api/agents/${i}`,{method:`DELETE`}).catch(()=>{});let a=e().filter(e=>e.id!==i);t(a),d(!0),a[0]?vr(a[0].id):(r(null),p([]))},z(i,M(P,{get when(){return e().some(e=>e.parent===n())},get children(){var e=Uu();return e.$$click=async()=>{n()&&(Q(`stopped: ${((await $(`/api/agents/${n()}/stop-children`,{method:`POST`})).stopped??[]).join(`, `)||`(none)`}`),Fn())},e}}),null),y(e=>{var t=Ut()?`danger`:`runbtn`,n=Ut()?`interrupt: aborts the current LLM call; the running tool finishes first`:`run toward the goal (starts the loop)`;return t!==e.e&&R(a,e.e=t),n!==e.t&&L(a,`title`,e.t=n),e},{e:void 0,t:void 0}),i})(),(()=>{var e=Gu(),t=e.firstChild.firstChild;return t.addEventListener(`change`,e=>{n()&&$(`/api/agents/${n()}/auto-continue`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({value:e.currentTarget.checked})}).then(Fn)}),y(()=>t.checked=H().autoContinue??!0),e})(),(()=>{var e=qu();return e.firstChild,z(e,M(P,{get when(){return!!H().goal.text.trim()},get fallback(){return dd()},get children(){var e=Ku();return z(e,()=>H().goal.status),y(()=>R(e,`badge ${H().goal.status===`active`?`running`:H().goal.status}`)),e}}),null),e})(),(()=>{var e=Ju();return e.firstChild,z(e,M(N,{each:[`active`,`done`,`paused`],children:e=>(()=>{var t=fd();return t.$$click=()=>{n()&&$(`/api/agents/${n()}/goal`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({status:e})}).then(Fn)},L(t,`title`,e===`active`?`agent keeps working toward the goal (with auto-continue)`:e===`done`?`mark achieved — auto-continue stops`:`parked on purpose — resume by setting active again`),z(t,e===`active`?`▶ working`:e===`done`?`✓ done`:`⏸ paused`),y(n=>{var r=`goalstate`+(H().goal.text.trim()&&H().goal.status===e?` on ${e}`:``),i=!!H().goal.text.trim()&&H().goal.status===e;return r!==n.e&&R(t,n.e=r),i!==n.t&&(t.disabled=n.t=i),n},{e:void 0,t:void 0}),t})()}),null),e})(),M(P,{get when(){return H().goal.text},get fallback(){return pd()},get children(){return[(()=>{var e=Yu(),t=e.firstChild;return y(()=>t.innerHTML=Fe(String(H().goal.text))),e})(),M(P,{get when(){return H().goal.verify},get children(){var e=Xu(),t=e.firstChild.nextSibling;return y(()=>t.innerHTML=Fe(String(H().goal.verify))),e}}),M(P,{get when(){return H().goal.audit},children:e=>(()=>{var t=md(),n=t.firstChild,r=n.firstChild,i=n.nextSibling;return z(n,()=>e().verdict===`approved`?`✅ audit: approved`:`⚠ audit: changes required`,r),z(r,()=>nm(e().at)),y(n=>{var r=`card auditcard `+(e().verdict===`approved`?`ok`:`warn`),a=$e(e().feedback)?Fe(`_the auditor returned a verdict with no detail_`):Fe(e().feedback);return r!==n.e&&R(t,n.e=r),a!==n.t&&(i.innerHTML=n.t=a),n},{e:void 0,t:void 0}),t})()})]}}),Zu(),(()=>{var e=Qu(),t=e.firstChild,n=t.nextSibling,r=n.nextSibling.firstChild.firstChild;return e.addEventListener(`submit`,Wi),t.$$input=e=>{Li(e.currentTarget.value),Bi(!0)},n.$$input=e=>{q(e.currentTarget.value),Bi(!0)},r.addEventListener(`change`,e=>Hi(e.currentTarget.checked)),y(()=>t.value=Ii()),y(()=>n.value=Ri()),y(()=>r.checked=Vi()),e})(),(()=>{var e=ed(),t=e.firstChild.nextSibling;return z(e,M(P,{get when(){return Nn().total>0},get children(){var e=$u(),t=e.firstChild,n=t.nextSibling;return n.nextSibling,z(e,()=>Nn().done,t),z(e,()=>Nn().total,n),y(t=>Te(e,Nn().done===Nn().total?`color:var(--ok)`:`color:var(--warn)`,t)),e}}),t),e})(),M(P,{get when(){return Nn().total>0},get children(){var e=td(),t=e.firstChild;return y(e=>{var n=`barfill `+(Nn().done===Nn().total?``:`warn`),r=`${Math.round(Nn().done/Nn().total*100)}%`;return n!==e.e&&R(t,e.e=n),r!==e.t&&Ee(t,`width`,e.t=r),e},{e:void 0,t:void 0}),e}}),M(_m,{get draft(){return Tn()},get preview(){return Dn()},onDraft:e=>{En(e),An(!0)}}),(()=>{var e=nd(),t=e.firstChild,n=t.nextSibling;return z(e,M(om,{get icon(){return Dn()?`✎`:`👁`},get title(){return Dn()?`edit markdown`:`rendered checklist`},onClick:()=>On(!Dn())}),t),n.$$click=Mn,e})(),rd(),M(P,{get when(){return H().latestProgress},get fallback(){return hd()},children:e=>(()=>{var t=bd(),n=t.firstChild,r=n.firstChild.nextSibling,i=n.nextSibling;return z(t,M(P,{get when(){return e().recent},get children(){var t=gd(),n=t.firstChild.nextSibling;return y(()=>n.innerHTML=jp(e().recent)),t}}),i),z(t,M(P,{get when(){return e().problems},get children(){var t=_d(),n=t.firstChild.nextSibling;return y(()=>n.innerHTML=jp(e().problems)),t}}),i),z(t,M(P,{get when(){return e().next},get children(){var t=vd(),n=t.firstChild.nextSibling;return y(()=>n.innerHTML=jp(e().next)),t}}),i),z(t,M(P,{get when(){return e().goalStatus},get children(){var t=yd(),n=t.firstChild.nextSibling;return z(n,()=>e().goalStatus),t}}),i),z(i,()=>nm(e().ts)),y(()=>r.innerHTML=jp(e().doing)),t})()}),id(),(()=>{var e=sd(),t=e.firstChild,r=t.firstChild,i=r.firstChild.nextSibling,a=r.nextSibling,o=a.firstChild.nextSibling,s=a.nextSibling.firstChild.nextSibling,c=t.nextSibling,l=c.firstChild.nextSibling,u=l.firstChild,d=u.nextSibling;return d.nextSibling,z(i,()=>H().stats.turns),z(o,()=>H().stats.toolCalls),z(s,()=>H().stats.compactions??0),z(l,()=>rm(H().stats.inputTokens),u),z(l,()=>rm(H().stats.outputTokens),d),z(c,M(P,{get when(){return(H().stats.cachedInputTokens??0)>0},get children(){var e=ad(),t=e.firstChild.nextSibling;return t.nextSibling,z(e,()=>Math.round(H().stats.cachedInputTokens/Math.max(1,H().stats.inputTokens)*1e3)/10,t),y(()=>L(e,`title`,`${rm(H().stats.cachedInputTokens)} tokens were served from the provider's prompt cache — billed far cheaper than fresh input`)),e}}),null),z(e,M(P,{get when(){return(H().stats.costUsd??0)>0},get children(){var e=od(),t=e.firstChild.nextSibling;return t.firstChild,z(t,()=>im(H().stats.costUsd??0),null),y(()=>L(e,`title`,`≈ ${(H().stats.costUsd??0).toFixed(4)} this session, from the model's USD/token pricing and per-turn usage. Cached input is estimated at ~10% of the prompt rate; treat as an approximation, not an invoice.`)),e}}),null),z(e,M(P,{get when(){return H().ctx},keyed:!0,get fallback(){return xd()},children:e=>{let t=x(()=>{let t=e,n=Le().find(e=>e.id===H().model),r=t.window||n?.contextLength||0,i=r?Math.min(999,t.usedTokens/r*100):0;return{usedTokens:t.usedTokens,compactAt:t.compactAt,compacting:t.compacting,window:t.window,effectiveWindow:r,pct:i,cls:r?i>=85?`crit`:i>=70?`warn`:`ok`:``,derivedBudget:r?Math.round(r*.75):0,usingDerived:t.compactAtIsManual!==!0}}),r=()=>t(),i=e=>{let t=Math.round(e*10)/10;return Number.isInteger(t)?String(t):t.toFixed(1)};return(()=>{var e=Ed(),t=e.firstChild,a=t.firstChild.nextSibling,o=a.firstChild.nextSibling;o.nextSibling;var s=t.nextSibling,c=s.firstChild.nextSibling,l=c.firstChild,u=c.nextSibling,d=s.nextSibling,f=d.firstChild.firstChild,p=d.nextSibling,m=p.firstChild.nextSibling;return m.nextSibling,z(a,()=>rm(r().usedTokens),o),z(t,M(P,{get when(){return r().effectiveWindow},get children(){var e=Sd(),t=e.firstChild;return z(e,()=>i(r().pct),t),z(e,()=>rm(r().effectiveWindow),null),y(()=>R(e,`pill ${r().cls}`)),e}}),null),z(e,M(P,{get when(){return r().effectiveWindow},get children(){var e=Cd(),t=e.firstChild;return y(e=>{var n=`barfill ${r().cls}`,i=`${Math.min(100,r().pct)}%`;return n!==e.e&&R(t,e.e=n),i!==e.t&&Ee(t,`width`,e.t=i),e},{e:void 0,t:void 0}),e}}),s),z(c,()=>rm(r().usingDerived?r().derivedBudget:r().compactAt),l),z(u,()=>r().usingDerived?` (75% of window)`:` (manual override)`),z(e,M(P,{get when(){return r().effectiveWindow},get children(){var e=wd(),t=e.firstChild;return y(e=>{var n=`barfill ${r().cls}`,i=`${Math.min(100,Math.round(r().usedTokens/r().derivedBudget*100))}%`;return n!==e.e&&R(t,e.e=n),i!==e.t&&Ee(t,`width`,e.t=i),e},{e:void 0,t:void 0}),e}}),d),z(e,M(P,{get when(){return _t()||r().compacting},get children(){var e=Td(),t=e.firstChild.nextSibling.nextSibling;return z(t,()=>_t()?.phase??String(r().compacting)),e}}),d),f.addEventListener(`change`,e=>{n()&&$(`/api/agents/${n()}/auto-compact`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({value:e.currentTarget.checked})}).then(Fn)}),z(p,()=>rm(r().compactAt),m),y(()=>f.checked=H().autoCompact!==!1),e})()}}),null),e})(),(()=>{var e=ld();return e.firstChild.nextSibling,z(e,M(P,{get when(){return $n()},get children(){var e=cd(),t=e.firstChild.nextSibling;return z(t,$n),e}}),null),e})(),M(N,{get each(){return g()},children:e=>(()=>{var t=Dd(),r=t.firstChild,i=r.nextSibling,a=i.firstChild;return t.$$click=()=>{let t=$n()===e.branch?null:e.branch,r=t!==$n();G(t),n()&&(r&&(sr++,p([]),h(0),or(!1)),fr(n()))},z(r,()=>e.branch,null),z(r,()=>e.branch===H().branch?` (current)`:``,null),z(i,()=>e.events,a),y(n=>{var r=`branch-row`+(e.branch===H().branch||e.branch===$n()?` cur`:``),i=e.branch===$n()?`click to show all branches again`:`show only ${e.branch}`;return r!==n.e&&R(t,n.e=r),i!==n.t&&L(t,`title`,n.t=i),n},{e:void 0,t:void 0}),t})()}),ud(),M(P,{get when(){return Ln().length>0},get fallback(){return Od()},get children(){return M(N,{get each(){return Ln()},children:e=>(()=>{var t=Ad(),r=t.firstChild,i=r.firstChild,a=i.nextSibling;a.firstChild;var o=r.nextSibling,s=o.firstChild,c=o.nextSibling;return t.$$click=()=>vr(e.agent),z(i,()=>e.id),z(a,()=>e.agent,null),z(r,M(P,{get when(){return e.forked},get children(){return kd()}}),null),z(o,()=>e.schedule,s),z(o,(()=>{var t=F(()=>!!e.next);return()=>t()?nm(e.next):`—`})(),null),z(o,(()=>{var t=F(()=>!!e.last);return()=>t()?` · last ${nm(e.last)}`:` · never ran`})(),null),z(c,()=>am(e.prompt,90)),y(r=>{var i=`sched-row`+(e.agent===n()?` cur`:``),a=`${am(e.prompt,200)}\nclick to open #${e.agent}`;return i!==r.e&&R(t,r.e=i),a!==r.t&&L(t,`title`,r.t=a),r},{e:void 0,t:void 0}),t})()})}})]}),null),y(e=>{var t=`layout`+(j()?``:` right-hidden`),n=`iconbtn notifbtn`+(on()>0?` has-unread`:``),r=on()>0?`${on()} unread notifications`:`notifications`,a=`conn`+(yr()?` ok`:``),o=yr()?`live (websocket)`:`reconnecting…`,s={"--termh":`${Gr()}px`},c=`rightbar`+(j()?` open`:``);return t!==e.e&&R(i,e.e=t),n!==e.t&&R(l,e.t=n),r!==e.a&&L(l,`title`,e.a=r),a!==e.o&&R(_,e.o=a),o!==e.i&&L(_,`title`,e.i=o),e.n=Te(S,s,e.n),c!==e.s&&R(C,e.s=c),e},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0}),i}}),M(P,{get when(){return rn()},get children(){return[(()=>{var e=cu();return e.$$click=()=>an(!1),e})(),(()=>{var t=du(),r=t.firstChild.firstChild.nextSibling,i=r.firstChild;return z(r,M(P,{get when(){return $t().length>0},get children(){var e=lu();return e.$$click=()=>en([]),e}}),i),i.$$click=()=>an(!1),z(t,M(P,{get when(){return $t().length>0},get fallback(){return jd()},get children(){var t=uu();return z(t,M(N,{get each(){return $t()},children:t=>(()=>{var r=Nd(),i=r.firstChild.firstChild,a=i.nextSibling,o=a.nextSibling,s=o.nextSibling;return r.$$click=()=>{en(e=>e.map(e=>e.id===t.id?{...e,read:!0}:e)),n()!==t.agentId&&e().some(e=>e.id===t.agentId)&&vr(t.agentId),an(!1),t.eventId&&setTimeout(()=>fn(t.eventId),n()===t.agentId?60:350)},z(i,(()=>{var e=F(()=>t.kind===`finish`);return()=>e()?`✅`:F(()=>t.kind===`question`)()?`❓`:t.kind===`error`?`⚠️`:`📈`})()),z(a,()=>t.title),z(o,()=>nm(new Date(t.at).toISOString())),s.$$click=e=>{e.stopPropagation(),en(e=>e.map(e=>e.id===t.id?{...e,read:!0}:e))},z(s,()=>t.read?`✓`:`○`),z(r,M(P,{get when(){return t.body},get children(){var e=Md();return z(e,()=>tm(t.body,160)),e}}),null),y(e=>{var n=`notifitem `+t.kind+(t.read?` read`:``),i=`from ${t.agentId}`,a=t.read?`already read`:`mark as read`;return n!==e.e&&R(r,e.e=n),i!==e.t&&L(r,`title`,e.t=i),a!==e.a&&L(s,`title`,e.a=a),e},{e:void 0,t:void 0,a:void 0}),r})()})),t}}),null),t})()]}}),M(P,{get when(){return k()},get children(){return M(lm,{get providers(){return Object.keys(O().providers??{})},onClose:()=>ie(!1),onCreated:e=>{ie(!1),Fn(),vr(e)}})}}),M(P,{get when(){return ae()},get children(){return M(Cm,{get cfg(){return O()},onClose:()=>oe(!1),onSaved:()=>{Sn(),zn()}})}}),M(P,{get when(){return Gt()},fallback:null,children:e=>{let t=()=>f().findIndex(t=>t.id===e().eventId),r=()=>Math.max(0,f().length-t()-1),[i,a]=v(r()>0?`summarize`:`discard`);return M(cm,{title:`edit prompt — forks the conversation`,onClose:()=>Kt(null),get children(){var t=Fd(),o=t.firstChild,s=o.nextSibling,c=s.firstChild;return t.addEventListener(`submit`,async t=>{t.preventDefault();let r=document.getElementById(`edit-text`);try{await $(`/api/agents/${n()}/edit-prompt`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({eventId:e().eventId,text:r.value,tail:i()})}),Kt(null),Fn();let t=n();t&&await vr(t)}catch(e){alert(`edit failed: ${e.message}`)}}),z(t,M(P,{get when(){return r()>0},get children(){var e=Pd(),t=e.firstChild,n=t.firstChild,o=t.nextSibling,s=o.firstChild,c=o.nextSibling.firstChild;return z(t,r,n),s.addEventListener(`change`,()=>a(`summarize`)),c.addEventListener(`change`,()=>a(`discard`)),y(()=>s.checked=i()===`summarize`),y(()=>c.checked=i()===`discard`),e}}),s),c.$$click=()=>Kt(null),y(()=>o.value=e().text),t}})}})]}function Jp(e){let t=new Date(e.startedAt).getTime(),[n,r]=v(Date.now());C(()=>{let e=setInterval(()=>r(Date.now()),500);w(()=>clearInterval(e))});let i=()=>Be(Math.max(0,n()-t));return e.inline?(()=>{var t=Id();return t.firstChild,z(t,i,null),z(t,(()=>{var t=F(()=>!!e.timeoutMs);return()=>t()?` · timeout ${Math.round(e.timeoutMs/1e3)}s`:``})(),null),t})():(()=>{var e=Ld(),t=e.firstChild;return z(e,i,t),e})()}function Yp(e){let[t,n]=v(Date.now());return C(()=>{let e=setInterval(()=>n(Date.now()),500);w(()=>clearInterval(e))}),e.startedAt?(()=>{var n=Rd();return z(n,()=>Be(Math.max(0,t()-e.startedAt))),n})():null}function Xp(e){let t=e.e,n=()=>e.res,r=()=>!e.agentActive&&!n(),i=t.data??{},a=String(i.name??`tool`),o=()=>String(n()?.data?.result??``),s=e=>String(i.args?.[e]??``),c=()=>a===`bash`?s(`command`):s(`path`)||JSON.stringify(i.args??{},null,1),l=()=>a===`bash`?Number(s(`timeout_ms`))||void 0:a===`wait_children`?Number(s(`timeout_ms`))||3e5:Number(s(`timeout_ms`))||void 0,u=(e,t=1500)=>(()=>{var n=zd();return z(n,()=>tm(e,t)),n})(),d=(e=4e3)=>(()=>{let t=n();return t?[F(()=>u(o(),e)),(()=>{var e=Bd();return z(e,()=>Be(t.data?.durationMs),null),z(e,()=>a===`bash`?wt(Ct(t.data?.ok,String(t.data?.result??``))):t.data?.ok===!1?` · FAILED`:``,null),z(e,M(sm,{get text(){return o()}}),null),e})()]:Vd()})(),f=x(()=>{let e=a,t=``,r=(()=>{var e=Hd();return z(e,()=>tm(JSON.stringify(i.args??{},null,1),2e3)),e})();try{switch(a){case`bash`:{let a=s(`command`),c=i.args?.background===!0,l=c?String(o()).match(/job (bg\d+)/)?.[1]??``:``;e=(c?`⏳ `:`$ `)+am(a,96);let f=s(`timeout_ms`)?Number(s(`timeout_ms`)):void 0,p=n(),m=Ct(p?.data?.ok,p?String(p.data?.result??``):``);t=p?c?`background job${l?` ${l}`:``}${f?` · timeout ${Math.round(f/1e3)}s`:``}`:Tt({outcome:m,durationMs:p.data?.durationMs,timeoutMs:f,fmtDur:Be}):null,r=[c?(()=>{var e=Ud(),t=e.firstChild.nextSibling,n=t.firstChild.nextSibling;return n.nextSibling,z(t,l||`?`,n),z(e,l?[` · kill with `,Wd()]:null,null),e})():null,F(()=>F(()=>a!==e.slice(2))()?u(a,800):null),F(()=>d(6e3))];break}case`read_file`:{e=s(`path`)||`(no path)`;let n=[];s(`pattern`)&&n.push(`grep /${am(s(`pattern`),40)}/`),Number(i.args?.offset)<0?n.push(`last ${-Number(i.args.offset)} lines`):i.args?.offset&&n.push(`from L${i.args.offset}`),i.args?.limit&&n.push(`≤${i.args.limit} lines`),t=n.join(` · `),r=d(6e3);break}case`write_file`:{let a=String(i.args?.content??``);e=s(`path`)||`(no path)`,t=`${rm(a.length)} bytes`,r=[F(()=>u(a,1500)),F(()=>F(()=>a.length>1500)()?(()=>{var e=Gd(),t=e.firstChild;return z(e,()=>rm(a.length),t),e})():null),F(()=>F(()=>!!n())()?(()=>{var e=Bd();return z(e,()=>am(o(),160)),e})():Kd())];break}case`edit_file`:e=s(`path`)||`(no path)`,t=i.args?.replace_all===!0?`replace all`:`unique spot`,r=[(()=>{var e=qd();return z(e,()=>tm(`- `+s(`old_text`),900)),e})(),(()=>{var e=Jd();return z(e,()=>`+ `+tm(s(`new_text`),900)),e})(),F(()=>F(()=>!!n())()?(()=>{var e=Yd(),t=e.firstChild;return z(e,()=>am(o(),120),t),z(e,()=>Be(n().data?.durationMs),null),e})():Xd())];break;case`apply_patch`:{let t=s(`patch`).split(`
26
26
  `).filter(e=>e&&!/^---$/.test(e.trim())),i=t.map(e=>e.match(/^\*\*\* (?:Add|Update|Delete) File: (.+)$/)?.[1]).filter(Boolean);e=i.length?`${i.length} file${i.length>1?`s`:``}: ${am(i.join(`, `),80)}`:`patch`;let a=t.slice(0,60);r=[(()=>{var e=Zd();return z(e,()=>a.map(e=>{let t=e.startsWith(`+`)?` add`:e.startsWith(`-`)?` del`:/^\*\*\*|^@@/.test(e)?` meta`:``;return(()=>{var n=Qd();return R(n,`pline`+t),z(n,(()=>{var t=F(()=>e.length>240);return()=>t()?e.slice(0,240)+`…`:e})()),n})()}),null),z(e,(()=>{var e=F(()=>t.length>60);return()=>e()?(()=>{var e=$d(),n=e.firstChild.nextSibling;return n.nextSibling,z(e,()=>t.length-60,n),e})():null})(),null),e})(),F(()=>F(()=>!!n())()?(()=>{var e=Bd();return z(e,()=>am(o().split(`
27
- `)[0]??``,140),null),z(e,()=>n().data?.ok===!1?` · FAILED`:``,null),e})():ef())];break}case`list_dir`:e=s(`path`)||`.`,r=d(4e3);break;case`read_url`:{let n=s(`url`);try{let e=new URL(n);n=e.host+e.pathname}catch{}e=am(n,70),t=`web`,r=[(()=>{var e=Bd();return z(e,M(P,{get when(){return/^https?:/i.test(s(`url`))},get fallback(){return(()=>{var e=nf();return z(e,()=>am(s(`url`),80)),e})()},get children(){var e=tf();return y(()=>L(e,`href`,s(`url`))),e}})),e})(),F(()=>d(3e3))];break}case`bash_output`:{let n=s(`action`)||`read`;e=`bash_output ${s(`job_id`)||`(?)`}`,t=n,r=d(4e3);break}case`load_skill`:{e=`skill: ${s(`name`)}`;let t=o().replace(/^---\r?\n[\s\S]*?\r?\n---\r?\n?/,``);r=n()?[(()=>{var e=Kl();return y(()=>e.innerHTML=Fe(t)),e})(),(()=>{var e=Bd();return z(e,()=>Be(n().data?.durationMs)),e})()]:rf();break}case`save_skill`:{e=`skill: ${s(`name`)}`,t=am(s(`description`),60);let a=Array.isArray(i.args?.files)?i.args.files.map(e=>e?.name).filter(Boolean):[];r=[F(()=>F(()=>!!a.length)()?(()=>{var e=af();return e.firstChild,z(e,()=>a.join(`, `),null),e})():null),F(()=>F(()=>!!n())()?(()=>{var e=Yd(),t=e.firstChild;return z(e,()=>am(o(),160),t),z(e,()=>Be(n().data?.durationMs),null),e})():of())];break}}}catch{}return{icon:`⚙`,label:e,hint:t,body:r}});return(()=>{var i=cf(),s=i.firstChild,u=s.firstChild,d=u.firstChild,p=u.nextSibling,m=p.nextSibling;return i.addEventListener(`toggle`,t=>{t.target.open&&e.onResize?.()}),z(u,()=>f().icon,d),z(u,()=>f().label,null),z(s,M(P,{get when(){return t.data?.actor},get children(){var e=sf();return e.firstChild,z(e,()=>String(t.data.actor),null),e}}),p),z(p,(()=>{var e=F(()=>!!n());return()=>e()?f().hint||``:F(()=>!!r())()?`(result missed)`:F(()=>!!(a===`bash`||l()))()?M(Jp,{get startedAt(){return t.ts},inline:!0,get timeoutMs(){return l()}}):`running…`})()),z(m,M(sm,{get text(){return c()},label:`⧉ cmd`,title:`copy the ${a} arguments`}),null),z(m,M(P,{get when(){return n()},get children(){return M(sm,{get text(){return o()},label:`⧉ out`,title:`copy this tool's full output`})}}),null),z(i,()=>f().body,null),y(e=>{var t=`embed`+(n()?n().data?.ok===!1?` fail`:` done`:r()?` done`:` running`),o=`${a}${f().hint?` — `+f().hint:``}`;return t!==e.e&&R(i,e.e=t),o!==e.t&&L(i,`title`,e.t=o),e},{e:void 0,t:void 0}),i})()}function Zp(e){let t=e.data??{};return e.type===`prompt`?String(t.text??``):e.type===`message`?`${typeof t.reasoning==`string`&&t.reasoning.trim()?`<reasoning>\n${t.reasoning}\n</reasoning>\n\n`:``}${String(t.content??``)}`:(e.type,``)}function Qp(e){let t=e.e,n=Vp(t),r=pt(e.prev,t);if(t.type===`fork`){let e=t.data??{};return(()=>{var n=lf(),r=n.firstChild.nextSibling;return r.nextSibling,z(n,()=>String(e.fromBranch??`?`),r),z(n,()=>String(e.newBranch??t.branch),null),n})()}if(t.type===`goal`){let e=tt(t.data??{});return(()=>{var t=uf(),n=t.firstChild;return z(n,()=>e.label),z(t,M(P,{get when(){return e.hasCard},get children(){var t=Qd();return y(n=>{var r=`card `+(e.tone===`ok`?`auditcard ok`:e.tone===`warn`?`auditcard`:`verifycard`),i=e.markdown?Fe(e.detail):Fe(`\`\`\`\n${e.detail}\n\`\`\``);return r!==n.e&&R(t,n.e=r),i!==n.t&&(t.innerHTML=n.t=i),n},{e:void 0,t:void 0}),t}}),null),y(()=>R(t,`goalline `+(e.tone===`err`?`err`:e.tone===`warn`?`warn`:``))),t})()}if(t.type===`todo`)return(()=>{var e=df(),n=e.firstChild.nextSibling;return n.nextSibling,z(e,()=>String(t.data?.by??`human`),n),e})();if(t.type===`state`)return t.data.from===t.data.to?null:(()=>{var e=ff(),n=e.firstChild;return z(e,()=>t.data.from,n),z(e,()=>t.data.to,null),z(e,(()=>{var e=F(()=>!!t.data.reason);return()=>e()?` — ${t.data.reason}`:``})(),null),y(()=>R(e,`divider-msg`+(t.data.to===`error`?` err`:``))),e})();if(t.type===`system_note`){let e=String(t.data?.event??``);if(e===`runaway-detected`)return(()=>{var e=pf(),n=e.firstChild,r=n.firstChild.nextSibling,i=r.nextSibling.nextSibling;i.nextSibling;var a=n.nextSibling,o=a.firstChild.nextSibling;return o.nextSibling,z(n,()=>String(t.data?.failures),r),z(n,()=>String(t.data?.limit),i),z(a,()=>String(t.data?.lastTool),o),z(a,()=>String(t.data?.lastError??``).slice(0,200),null),y(()=>L(e,`title`,`${t.data?.failures} consecutive tool failures hit the configured limit (${t.data?.limit})`)),e})();if(e===`error-retry`)return(()=>{var e=mf(),n=e.firstChild,r=n.firstChild.nextSibling,i=r.nextSibling.nextSibling;return i.nextSibling,z(n,()=>String(t.data?.attempt),r),z(n,()=>Math.round(Number(t.data?.waitMs)/1e3),i),e})();if(e===`background-exit`){let e=t.data?.failed===!0,n=Math.round(Number(t.data?.durationMs??0)/1e3);return(()=>{var r=Qd();return R(r,`divider-msg`+(e?` err`:``)),z(r,()=>(e?`⚠ background job `:`✓ background job `)+String(t.data?.jobId??`?`)+` `+(e?`FAILED (exit ${String(t.data?.code??`?`)})`:`finished (${n}s)`)),y(()=>L(r,`title`,String(t.data?.cmd??``))),r})()}return e===`context-compacted`?(()=>{var e=hf(),n=e.firstChild.nextSibling,r=n.nextSibling.nextSibling,i=r.nextSibling.nextSibling;return i.nextSibling,z(e,()=>String(t.data?.tokensBefore??`?`),n),z(e,()=>String(t.data?.tokensAfter??`?`),r),z(e,()=>String(t.data?.mode??``),i),e})():e===`context-compaction-started`?(()=>{var e=gf(),n=e.firstChild.nextSibling,r=n.nextSibling.nextSibling,i=r.nextSibling.nextSibling;return i.nextSibling,z(e,()=>String(t.data?.messages??`?`),n),z(e,()=>String(t.data?.tokensBefore??`?`),r),z(e,()=>String(t.data?.reason??`auto`),i),e})():null}return(()=>{var i=bf(),a=i.firstChild,o=a.nextSibling;return R(a,`avatar avghost`+(r?` ghosted`:``)),z(a,()=>r?``:n.icon),z(o,r&&(()=>{var e=xf();return y(()=>L(e,`title`,`${Wp(t.ts)} · ${t.branch}`)),e})(),null),z(o,M(P,{when:!r,get children(){var r=yf(),i=r.firstChild,a=i.nextSibling,o=a.nextSibling;return z(i,()=>n.name),z(r,M(P,{get when(){return t.data?.actor},get children(){var e=sf();return e.firstChild,z(e,()=>String(t.data.actor),null),e}}),a),z(a,(()=>{var e=F(()=>!!t.data?.pending);return()=>e()?`queued…`:F(()=>!!t.data?.cancelled)()?`withdrawn`:Wp(t.ts)})()),z(o,()=>t.branch),z(r,M(P,{get when(){return e.onCancel},get children(){var t=_f();return t.$$click=t=>{t.stopPropagation(),e.onCancel()},t}}),null),z(r,M(P,{get when(){return t.type!==`tool_call`},get children(){return M(sm,{get text(){return Zp(t)},label:`⧉ copy`,title:`copy the RAW text of this message (no markdown rendering)`})}}),null),z(r,M(P,{get when(){return e.onEdit},get children(){var t=vf();return t.$$click=t=>{t.stopPropagation(),e.onEdit()},t}}),null),y(e=>Ee(i,`color`,n.color)),r}}),null),z(o,M(em,{e:t,get res(){return e.res},get orphan(){return e.orphan},get onOption(){return e.onOption},get answeredIds(){return e.answeredIds},get onAnswered(){return e.onAnswered},get agentActive(){return e.agentActive},get onResize(){return e.onResize}}),null),y(e=>{var o=`msg`+(r?` grouped`:``)+(t.data?.pending?` pending`:``)+(t.data?.cancelled?` withdrawn`:``),s=t.id,c=r?`transparent`:n.color+`33`,l=r?`1px solid transparent`:`1px solid ${n.color}66`,u=r?`${Wp(t.ts)} · ${t.branch}`:void 0;return o!==e.e&&R(i,e.e=o),s!==e.t&&L(i,`data-eid`,e.t=s),c!==e.a&&Ee(a,`background`,e.a=c),l!==e.o&&Ee(a,`border`,e.o=l),u!==e.i&&L(a,`title`,e.i=u),e},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),i})()}function $p(e){let[t,n]=v(``),r=()=>{let r=t().trim();r&&!e.answered&&(n(``),e.onOption?.(r))};return(()=>{var i=Sf(),a=i.firstChild,o=a.nextSibling;return a.$$keydown=e=>{e.key===`Enter`&&!e.isComposing&&(e.preventDefault(),r())},a.$$input=e=>n(e.currentTarget.value),o.$$click=r,y(n=>{var r=e.answered?`answered`:`or type your own answer…`,i=e.answered,s=e.answered||!t().trim();return r!==n.e&&L(a,`placeholder`,n.e=r),i!==n.t&&(a.disabled=n.t=i),s!==n.a&&(o.disabled=n.a=s),n},{e:void 0,t:void 0,a:void 0}),y(()=>a.value=t()),i})()}function em(e){let t=e.e;switch(t.type){case`prompt`:{let e=t.data?.images??[];return[(()=>{var e=Kl();return y(()=>e.innerHTML=jp(String(t.data.text??``))),e})(),M(P,{get when(){return e.length},get children(){var t=Cf();return z(t,M(N,{each:e,children:e=>(()=>{var t=wf();return L(t,`src`,e),t})()})),t}})]}case`message`:return[M(P,{get when(){return F(()=>typeof t.data.reasoning==`string`)()&&t.data.reasoning.trim()},get children(){var e=Tf(),n=e.firstChild;n.firstChild;var r=n.nextSibling;return z(n,(()=>{var e=F(()=>String(t.data.reasoning).length>4e3);return()=>e()?` (${rm(String(t.data.reasoning).length)} — truncated)`:``})(),null),z(r,()=>tm(String(t.data.reasoning),8e3)),e}}),(()=>{var e=Kl();return y(()=>e.innerHTML=jp(String(t.data.content??``))),e})(),M(P,{get when(){return t.data.interrupted},get children(){return Ef()}}),M(P,{get when(){return t.data.final},get children(){var e=Df(),n=e.firstChild;return z(e,M(sm,{get text(){return String(t.data.content??``)}}),n),e}})];case`tool_call`:return M(Xp,{e:t,get res(){return e.res},get orphan(){return e.orphan},get agentActive(){return e.agentActive},get onResize(){return e.onResize}});case`tool_result`:{let n=String(t.data.result??``),r=String(t.data.name??`tool`),i=t.data.ok!==!1;return(()=>{var a=kf(),o=a.firstChild,s=o.firstChild.nextSibling,c=o.nextSibling,l=c.nextSibling;return R(a,`embed `+(i?``:`fail`)),z(s,r===`bash`?`$ (bash, call evicted)`:r),z(o,M(sm,{text:n}),null),z(c,()=>tm(n,4e3)),z(l,()=>Be(t.data.durationMs),null),z(l,()=>r===`bash`?wt(Ct(t.data.ok,n)):i?``:` · FAILED`,null),z(a,M(P,{get when(){return e.orphan},get children(){return Of()}}),null),y(()=>a.open=e.orphan),a})()}case`decision`:{let e=Array.isArray(t.data?.alternatives)?t.data.alternatives:[];return(()=>{var n=jf(),r=n.firstChild,i=r.firstChild.firstChild.nextSibling,a=r.nextSibling;return z(n,M(P,{get when(){return e.length},get children(){var t=Af();return t.firstChild,z(t,()=>e.join(` / `),null),t}}),null),y(e=>{var n=jp(String(t.data?.decision??``)),r=jp(String(t.data?.rationale??``));return n!==e.e&&(i.innerHTML=e.e=n),r!==e.t&&(a.innerHTML=e.t=r),e},{e:void 0,t:void 0}),n})()}case`question`:{let n=Array.isArray(t.data?.options)?t.data.options:[],r=t.data?.callId?String(t.data.callId):``,i=()=>e.answeredIds?.().has(r)??!1;return(()=>{var a=Pf(),o=a.firstChild.firstChild.nextSibling;return z(a,M(P,{get when(){return i()},get children(){return Mf()}}),null),z(a,M(P,{get when(){return n.length>0},get children(){var a=Nf();return z(a,M(N,{each:n,children:n=>(()=>{var a=Ff();return a.$$click=()=>{e.onAnswered?.(r);let i=t.data?.actor;i?$(`/api/agents/${encodeURIComponent(String(i))}/prompt`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({text:n,start:!0})}).then(()=>Q(`→ answered @${String(t.data.actor)}`)).catch(()=>Q(`answer failed`)):e.onOption?.(n)},z(a,n),y(()=>a.disabled=i()),a})()})),a}}),null),z(a,M($p,{get answered(){return i()},get onOption(){return e.onOption}}),null),y(e=>{var n=`embed question`+(i()?` answered`:``),r=jp(String(t.data?.question??``));return n!==e.e&&R(a,e.e=n),r!==e.t&&(o.innerHTML=e.t=r),e},{e:void 0,t:void 0}),a})()}case`progress`:return(()=>{var e=If(),n=e.firstChild.firstChild.nextSibling;return z(e,M(P,{get when(){return t.data.goalStatus},get children(){var e=yd(),n=e.firstChild.nextSibling;return z(n,()=>String(t.data.goalStatus)),e}}),null),z(e,M(P,{get when(){return t.data.recent},get children(){var e=gd(),n=e.firstChild.nextSibling;return y(()=>n.innerHTML=jp(String(t.data.recent))),e}}),null),z(e,M(P,{get when(){return t.data.problems},get children(){var e=_d(),n=e.firstChild.nextSibling;return y(()=>n.innerHTML=jp(String(t.data.problems))),e}}),null),z(e,M(P,{get when(){return t.data.next},get children(){var e=vd(),n=e.firstChild.nextSibling;return y(()=>n.innerHTML=jp(String(t.data.next))),e}}),null),y(()=>n.innerHTML=jp(String(t.data.doing??``))),e})();case`error`:return(()=>{var e=Lf(),n=e.firstChild;return n.firstChild,z(n,()=>String(t.data.message??``),null),e})();case`compaction`:return(()=>{var e=zf(),n=e.firstChild.firstChild.nextSibling,r=n.firstChild,i=r.nextSibling,a=i.nextSibling.nextSibling;return a.nextSibling,z(n,()=>String(t.data.mode??``),r),z(n,()=>rm(Number(t.data.tokensBefore??0)),i),z(n,()=>rm(Number(t.data.tokensAfter??0)),a),z(n,(()=>{var e=F(()=>!!t.data.summarized);return()=>e()?`${t.data.summarized} summarized`:`${t.data.dropped} dropped`})(),null),z(e,M(P,{get when(){return t.data.summary},get children(){return[Rf(),(()=>{var e=Kl();return y(()=>e.innerHTML=jp(String(t.data.summary))),e})()]}}),null),e})();default:return(()=>{var e=Bf();return z(e,()=>tm(JSON.stringify(t.data),200)),e})()}}function tm(e,t){return e.length>t?e.slice(0,t)+` …`:e}function nm(e){let t=new Date(e).getTime()-Date.now(),n=Math.abs(t),r=n<9e4?`${Math.round(n/1e3)}s`:n<54e5?`${Math.round(n/6e4)}m`:`${(n/36e5).toFixed(1)}h`;return t>=0?`in ${r}`:`${r} ago`}function rm(e){return e>=1e9?`${+(e/1e9).toFixed(1)}b`:e>=1e6?`${+(e/1e6).toFixed(1)}m`:e>=1e4?`${Math.round(e/1e3)}k`:e>=1e3?`${(e/1e3).toFixed(1)}k`:String(e)}function im(e){return e>=100?Math.round(e).toLocaleString():e>=10?e.toFixed(1):e>=1?e.toFixed(2):e>=.01?e.toFixed(3):e.toFixed(4)}function am(e,t){return tm(e.replace(/\s+/g,` `).trim(),t)}function om(e){return(()=>{var t=Vf(),n=t.firstChild;return we(t,`click`,e.onClick,!0),z(n,()=>e.icon),y(n=>{var r=`iconbtn`+(e.active?` active`:``)+(e.class?` `+e.class:``),i=e.title,a=e.style;return r!==n.e&&R(t,n.e=r),i!==n.t&&L(t,`title`,n.t=i),n.a=Te(t,a,n.a),n},{e:void 0,t:void 0,a:void 0}),t})()}function sm(e){let[t,n]=v(!1),[r,i]=v(!1),a=t=>{t.preventDefault(),t.stopPropagation(),ut(e.text??``).then(e=>{e===`unsupported`||e===`failed`?(i(!0),setTimeout(()=>i(!1),1200)):(n(!0),setTimeout(()=>n(!1),900))})};return(()=>{var n=Hf();return n.$$click=a,z(n,(()=>{var n=F(()=>!!t());return()=>n()?`✓`:F(()=>!!r())()?`✗`:e.label??`⧉`})()),y(()=>L(n,`title`,e.title??`copy to clipboard`)),n})()}function cm(e){return(()=>{var t=Uf(),n=t.firstChild,r=n.firstChild.firstChild,i=r.nextSibling;return t.$$click=t=>t.target===t.currentTarget&&e.onClose(),z(r,()=>e.title),we(i,`click`,e.onClose,!0),z(n,()=>e.children,null),t})()}function lm(e){let[t,n]=v(`~`),[r,i]=v([]),[a,o]=v(``),[s,c]=v(e.providers[0]??``),[l,u]=v(``),[d,f]=v(``);async function p(e){let r=await $(`/api/fs?path=${encodeURIComponent(e??t())}`);n(r.path),h(r.parent??``),i(r.entries??[])}C(()=>p(t()));let[m,h]=v(``),g=async n=>{n.preventDefault(),f(``);try{let n=await $(`/api/agents`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({workspace:t(),id:a(),provider:s()||void 0,model:l()||void 0,start:!1})});e.onCreated(n.agent.id)}catch(e){f(String(e.message))}};return M(cm,{title:`new agent`,get onClose(){return e.onClose},get children(){var i=Gf(),f=i.firstChild,h=f.firstChild.nextSibling.firstChild,_=h.nextSibling,v=_.nextSibling,b=f.nextSibling,x=b.nextSibling,S=x.firstChild,C=S.firstChild.nextSibling,w=S.nextSibling,ee=w.firstChild.nextSibling,te=w.nextSibling.firstChild.nextSibling,T=x.nextSibling;return i.addEventListener(`submit`,g),h.$$input=e=>n(e.currentTarget.value),_.$$click=()=>p(t()),v.$$click=()=>m()?p(m()):p(`..`),z(b,M(N,{get each(){return r()},children:e=>(()=>{var n=Kf();return n.firstChild,n.$$click=()=>p(`${t()}/${e}`.replace(/\/+/g,`/`)),z(n,e,null),n})()})),C.$$input=e=>o(e.currentTarget.value),ee.addEventListener(`change`,e=>c(e.currentTarget.value)),z(ee,M(N,{get each(){return e.providers},children:e=>(()=>{var t=Tu();return z(t,e),t})()})),te.$$input=e=>u(e.currentTarget.value),z(i,M(P,{get when(){return d()},get children(){var e=Wf();return z(e,d),e}}),T),y(()=>h.value=t()),y(()=>C.value=a()),y(()=>ee.value=s()),y(()=>te.value=l()),i}})}var um=new Set([`png`,`jpg`,`jpeg`,`gif`,`webp`,`svg`,`bmp`,`ico`,`avif`]),dm=new Set([`mp4`,`webm`,`mov`,`mkv`,`avi`,`m4v`]),fm=new Set([`mp3`,`wav`,`ogg`,`m4a`,`flac`,`aac`,`opus`]);function pm(e){let t=e.split(`.`).pop()?.toLowerCase()??``,n=mm(e);return n===`image`?`🖼`:n===`video`?`🎬`:n===`audio`?`🎵`:[`ts`,`tsx`,`mts`,`cts`].includes(t)?`🟦`:[`js`,`mjs`,`cjs`,`jsx`].includes(t)?`🟨`:t===`json`||t===`jsonc`?`🧾`:t===`md`||t===`mdx`||t===`markdown`?`📝`:t===`css`||t===`scss`||t===`less`?`🎨`:t===`html`||t===`htm`||t===`svg`?`🌐`:[`py`,`pyi`].includes(t)?`🐍`:t===`rs`?`🦀`:t===`go`?`🐹`:t===`java`||t===`kt`||t===`kts`?`☕`:t===`rb`?`💎`:t===`php`?`🐘`:t===`c`||t===`h`||t===`cpp`||t===`hpp`||t===`cc`?`🧩`:t===`sh`||t===`bash`||t===`zsh`||t===`fish`?`🐚`:t===`sql`?`🗄`:t===`yml`||t===`yaml`||t===`toml`||t===`ini`||t===`conf`?`⚙`:t===`lock`?`🔒`:e===`Dockerfile`||t===`dockerfile`?`🐳`:t===`zip`||t===`gz`||t===`tar`||t===`tgz`||t===`bz2`?`📦`:t===`pdf`?`📕`:t===`txt`||t===`log`?`📄`:`·`}function mm(e){let t=e.split(`.`).pop()?.toLowerCase()??``;return um.has(t)?`image`:dm.has(t)?`video`:fm.has(t)?`audio`:null}var hm=new Map,gm=e=>{let t=hm.get(e);return t||(t={expanded:new Set,preview:null,media:null,viewMode:`code`},hm.set(e,t)),t};function _m(e){return M(P,{get when(){return e.preview},get fallback(){return(()=>{var t=Jf();return t.$$input=t=>e.onDraft(t.currentTarget.value),y(()=>t.value=e.draft),t})()},get children(){var t=qf();return y(()=>t.innerHTML=jp(e.draft)),t}})}function vm(e){let t=gm(e.agentId),[n,r]=v(new Map),[i,a]=v(t.expanded),[o,s]=v(t.preview),c=e=>{t.preview=e,s(e)},l=e=>{t.expanded=e,a(e)},[u,d]=v(t.media),f=e=>{t.media=e,d(e)},[p,m]=v(t.viewMode),h=e=>{t.viewMode=e,m(e)},[g,_]=v(``),[x,S]=v(localStorage.getItem(`teapot.ignoreMode`)??`dim`),C=()=>{let e=[`dim`,`hide`,`show`],t=e[(e.indexOf(x())+1)%3];S(t),localStorage.setItem(`teapot.ignoreMode`,t)},ee=e=>x()!==`hide`||!e.ignored,[te,T]=v(localStorage.getItem(`teapot.showHidden`)===`1`),ne=()=>{let e=!te(),t=[``,...i()];Promise.all(t.map(async t=>({p:t,rows:await O(t,e)}))).then(t=>{T(e),localStorage.setItem(`teapot.showHidden`,e?`1`:`0`);for(let{p:e,rows:n}of t)n&&re(e,n)})},E=(e,t)=>t.map(t=>({name:String(t.name),path:e?`${e}/${t.name}`:String(t.name),dir:!!t.dir,...typeof t.size==`number`?{size:t.size}:{},...t.ignored?{ignored:!0}:{}}));async function D(e){return O(e,te())}async function O(t,n){try{let r=new URLSearchParams;t&&r.set(`path`,t),n&&r.set(`hidden`,`1`);let i=await $(`/api/agents/${e.agentId}/tree?${r.toString()}`);return E(t,i.entries??[])}catch(e){return _(e.message),null}}let re=(e,n)=>r(r=>{let i=r.get(e);if(!i)return new Map(r).set(e,n);let a=i.map(e=>{let t=n.find(t=>t.path===e.path);return t&&t.dir===e.dir&&t.size===e.size&&t.ignored===e.ignored&&t.name===e.name?e:t??e});for(let e of n)i.some(t=>t.path===e.path)||a.push(e);let o=a.filter(e=>n.some(t=>t.path===e.path)||t.preview?.path===e.path),s=new Map(r);return s.set(e,o),s}),k=``;b(()=>{let t=e.agentId;t!==k&&(k=t,l(new Set),c(null),f(null),r(new Map),D(``).then(e=>{e&&k===t&&r(new Map([[``,e]]))}))});let ie=async e=>{let t=new Set(i());if(t.has(e.path))t.delete(e.path),l(t);else if(t.add(e.path),l(t),!n().has(e.path)){let t=await D(e.path);t&&re(e.path,t)}},[ae,oe]=v(``),[se,ce]=v(!1),[A,le]=v(``),[j,ue]=v(!1),de=e=>/\.(md|markdown|mdx)$/i.test(e),fe=0,pe=async e=>{let t=++fe;oe(``),ce(!0);try{let{highlightChunks:n}=await Ml(async()=>{let{highlightChunks:e}=await import(`./shiki-DaM9kZsQ.js`);return{highlightChunks:e}},[]);for await(let r of n(e.path,e.content)){if(fe!==t)return;oe(e=>e+r)}}catch{fe===t&&oe(``)}finally{fe===t&&ce(!1)}};w(()=>{fe++});let me=async(t,n)=>{let r=mm(t.path);if(r)c({path:t.path,content:``,binary:!0}),f({path:t.path,kind:r}),h(`media`);else try{let r=await $(`/api/agents/${e.agentId}/file?path=${encodeURIComponent(t.path)}`);f(null),c({path:t.path,content:r.content??``,binary:r.binary,truncated:r.truncated}),le(r.content??``),h(r.binary?`code`:n),!r.binary&&n!==`md`&&pe({path:t.path,content:r.content??``,truncated:r.truncated})}catch(e){Q(`open failed: ${e.message}`)}},he=async()=>{let t=o();if(t&&!j()){ue(!0);try{await $(`/api/agents/${e.agentId}/file?path=${encodeURIComponent(t.path)}`,{method:`PUT`,headers:{"content-type":`application/json`},body:JSON.stringify({content:A(),baseContent:t.content})}),c({...t,content:A()}),Q(`saved ${t.path}`)}catch(e){let n=e.payload,r=n&&typeof n==`object`&&n.error===`file changed on disk`?n:null;r?.current===void 0?Q(`save failed: ${e.message}`):confirm(`This file changed on disk since you opened it.
27
+ `)[0]??``,140),null),z(e,()=>n().data?.ok===!1?` · FAILED`:``,null),e})():ef())];break}case`list_dir`:e=s(`path`)||`.`,r=d(4e3);break;case`read_url`:{let n=s(`url`);try{let e=new URL(n);n=e.host+e.pathname}catch{}e=am(n,70),t=`web`,r=[(()=>{var e=Bd();return z(e,M(P,{get when(){return/^https?:/i.test(s(`url`))},get fallback(){return(()=>{var e=nf();return z(e,()=>am(s(`url`),80)),e})()},get children(){var e=tf();return y(()=>L(e,`href`,s(`url`))),e}})),e})(),F(()=>d(3e3))];break}case`bash_output`:{let n=s(`action`)||`read`;e=`bash_output ${s(`job_id`)||`(?)`}`,t=n,r=d(4e3);break}case`load_skill`:{e=`skill: ${s(`name`)}`;let t=o().replace(/^---\r?\n[\s\S]*?\r?\n---\r?\n?/,``);r=n()?[(()=>{var e=Kl();return y(()=>e.innerHTML=Fe(t)),e})(),(()=>{var e=Bd();return z(e,()=>Be(n().data?.durationMs)),e})()]:rf();break}case`save_skill`:{e=`skill: ${s(`name`)}`,t=am(s(`description`),60);let a=Array.isArray(i.args?.files)?i.args.files.map(e=>e?.name).filter(Boolean):[];r=[F(()=>F(()=>!!a.length)()?(()=>{var e=af();return e.firstChild,z(e,()=>a.join(`, `),null),e})():null),F(()=>F(()=>!!n())()?(()=>{var e=Yd(),t=e.firstChild;return z(e,()=>am(o(),160),t),z(e,()=>Be(n().data?.durationMs),null),e})():of())];break}}}catch{}return{icon:`⚙`,label:e,hint:t,body:r}});return(()=>{var i=cf(),s=i.firstChild,u=s.firstChild,d=u.firstChild,p=u.nextSibling,m=p.nextSibling;return i.addEventListener(`toggle`,t=>{t.target.open&&e.onResize?.()}),z(u,()=>f().icon,d),z(u,()=>f().label,null),z(s,M(P,{get when(){return t.data?.actor},get children(){var e=sf();return e.firstChild,z(e,()=>String(t.data.actor),null),e}}),p),z(p,(()=>{var e=F(()=>!!n());return()=>e()?f().hint||``:F(()=>!!r())()?`(result missed)`:F(()=>!!(a===`bash`||l()))()?M(Jp,{get startedAt(){return t.ts},inline:!0,get timeoutMs(){return l()}}):`running…`})()),z(m,M(sm,{get text(){return c()},label:`⧉ cmd`,title:`copy the ${a} arguments`}),null),z(m,M(P,{get when(){return n()},get children(){return M(sm,{get text(){return o()},label:`⧉ out`,title:`copy this tool's full output`})}}),null),z(i,()=>f().body,null),y(e=>{var t=`embed`+(n()?n().data?.ok===!1?` fail`:` done`:r()?` done`:` running`),o=`${a}${f().hint?` — `+f().hint:``}`;return t!==e.e&&R(i,e.e=t),o!==e.t&&L(i,`title`,e.t=o),e},{e:void 0,t:void 0}),i})()}function Zp(e){let t=e.data??{};return e.type===`prompt`?String(t.text??``):e.type===`message`?`${typeof t.reasoning==`string`&&t.reasoning.trim()?`<reasoning>\n${t.reasoning}\n</reasoning>\n\n`:``}${String(t.content??``)}`:(e.type,``)}function Qp(e){let t=e.e,n=Vp(t),r=pt(e.prev,t);if(t.type===`fork`){let e=t.data??{};return(()=>{var n=lf(),r=n.firstChild.nextSibling;return r.nextSibling,z(n,()=>String(e.fromBranch??`?`),r),z(n,()=>String(e.newBranch??t.branch),null),n})()}if(t.type===`goal`){let e=tt(t.data??{});return(()=>{var t=uf(),n=t.firstChild;return z(n,()=>e.label),z(t,M(P,{get when(){return e.hasCard},get children(){var t=Qd();return y(n=>{var r=`card `+(e.tone===`ok`?`auditcard ok`:e.tone===`warn`?`auditcard`:`verifycard`),i=e.markdown?Fe(e.detail):Fe(`\`\`\`\n${e.detail}\n\`\`\``);return r!==n.e&&R(t,n.e=r),i!==n.t&&(t.innerHTML=n.t=i),n},{e:void 0,t:void 0}),t}}),null),y(()=>R(t,`goalline `+(e.tone===`err`?`err`:e.tone===`warn`?`warn`:``))),t})()}if(t.type===`todo`)return(()=>{var e=df(),n=e.firstChild.nextSibling;return n.nextSibling,z(e,()=>String(t.data?.by??`human`),n),e})();if(t.type===`state`)return t.data.from===t.data.to?null:(()=>{var e=ff(),n=e.firstChild;return z(e,()=>t.data.from,n),z(e,()=>t.data.to,null),z(e,(()=>{var e=F(()=>!!t.data.reason);return()=>e()?` — ${t.data.reason}`:``})(),null),y(()=>R(e,`divider-msg`+(t.data.to===`error`?` err`:``))),e})();if(t.type===`system_note`){let e=String(t.data?.event??``);if(e===`runaway-detected`)return(()=>{var e=pf(),n=e.firstChild,r=n.firstChild.nextSibling,i=r.nextSibling.nextSibling;i.nextSibling;var a=n.nextSibling,o=a.firstChild.nextSibling;return o.nextSibling,z(n,()=>String(t.data?.failures),r),z(n,()=>String(t.data?.limit),i),z(a,()=>String(t.data?.lastTool),o),z(a,()=>String(t.data?.lastError??``).slice(0,200),null),y(()=>L(e,`title`,`${t.data?.failures} consecutive tool failures hit the configured limit (${t.data?.limit})`)),e})();if(e===`error-retry`)return(()=>{var e=mf(),n=e.firstChild,r=n.firstChild.nextSibling,i=r.nextSibling.nextSibling;return i.nextSibling,z(n,()=>String(t.data?.attempt),r),z(n,()=>Math.round(Number(t.data?.waitMs)/1e3),i),e})();if(e===`background-exit`){let e=t.data?.failed===!0,n=Math.round(Number(t.data?.durationMs??0)/1e3);return(()=>{var r=Qd();return R(r,`divider-msg`+(e?` err`:``)),z(r,()=>(e?`⚠ background job `:`✓ background job `)+String(t.data?.jobId??`?`)+` `+(e?`FAILED (exit ${String(t.data?.code??`?`)})`:`finished (${n}s)`)),y(()=>L(r,`title`,String(t.data?.cmd??``))),r})()}return e===`context-compacted`?(()=>{var e=hf(),n=e.firstChild.nextSibling,r=n.nextSibling.nextSibling,i=r.nextSibling.nextSibling;return i.nextSibling,z(e,()=>String(t.data?.tokensBefore??`?`),n),z(e,()=>String(t.data?.tokensAfter??`?`),r),z(e,()=>String(t.data?.mode??``),i),e})():e===`context-compaction-started`?(()=>{var e=gf(),n=e.firstChild.nextSibling,r=n.nextSibling.nextSibling,i=r.nextSibling.nextSibling;return i.nextSibling,z(e,()=>String(t.data?.messages??`?`),n),z(e,()=>String(t.data?.tokensBefore??`?`),r),z(e,()=>String(t.data?.reason??`auto`),i),e})():null}return(()=>{var i=bf(),a=i.firstChild,o=a.nextSibling;return R(a,`avatar avghost`+(r?` ghosted`:``)),z(a,()=>r?``:n.icon),z(o,r&&(()=>{var e=xf();return y(()=>L(e,`title`,`${Wp(t.ts)} · ${t.branch}`)),e})(),null),z(o,M(P,{when:!r,get children(){var r=yf(),i=r.firstChild,a=i.nextSibling,o=a.nextSibling;return z(i,()=>n.name),z(r,M(P,{get when(){return t.data?.actor},get children(){var e=sf();return e.firstChild,z(e,()=>String(t.data.actor),null),e}}),a),z(a,(()=>{var e=F(()=>!!t.data?.pending);return()=>e()?`queued…`:F(()=>!!t.data?.cancelled)()?`withdrawn`:Wp(t.ts)})()),z(o,()=>t.branch),z(r,M(P,{get when(){return e.onCancel},get children(){var t=_f();return t.$$click=t=>{t.stopPropagation(),e.onCancel()},t}}),null),z(r,M(P,{get when(){return t.type!==`tool_call`},get children(){return M(sm,{get text(){return Zp(t)},label:`⧉ copy`,title:`copy the RAW text of this message (no markdown rendering)`})}}),null),z(r,M(P,{get when(){return e.onEdit},get children(){var t=vf();return t.$$click=t=>{t.stopPropagation(),e.onEdit()},t}}),null),y(e=>Ee(i,`color`,n.color)),r}}),null),z(o,M(em,{e:t,get res(){return e.res},get orphan(){return e.orphan},get onOption(){return e.onOption},get answeredIds(){return e.answeredIds},get onAnswered(){return e.onAnswered},get agentActive(){return e.agentActive},get onResize(){return e.onResize}}),null),y(e=>{var o=`msg`+(r?` grouped`:``)+(t.data?.pending?` pending`:``)+(t.data?.cancelled?` withdrawn`:``),s=t.id,c=r?`transparent`:n.color+`33`,l=r?`1px solid transparent`:`1px solid ${n.color}66`,u=r?`${Wp(t.ts)} · ${t.branch}`:void 0;return o!==e.e&&R(i,e.e=o),s!==e.t&&L(i,`data-eid`,e.t=s),c!==e.a&&Ee(a,`background`,e.a=c),l!==e.o&&Ee(a,`border`,e.o=l),u!==e.i&&L(a,`title`,e.i=u),e},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),i})()}function $p(e){let[t,n]=v(``),r=()=>{let r=t().trim();r&&!e.answered&&(n(``),e.onOption?.(r))};return(()=>{var i=Sf(),a=i.firstChild,o=a.nextSibling;return a.$$keydown=e=>{e.key===`Enter`&&!e.isComposing&&(e.preventDefault(),r())},a.$$input=e=>n(e.currentTarget.value),o.$$click=r,y(n=>{var r=e.answered?`answered`:`or type your own answer…`,i=e.answered,s=e.answered||!t().trim();return r!==n.e&&L(a,`placeholder`,n.e=r),i!==n.t&&(a.disabled=n.t=i),s!==n.a&&(o.disabled=n.a=s),n},{e:void 0,t:void 0,a:void 0}),y(()=>a.value=t()),i})()}function em(e){let t=e.e;switch(t.type){case`prompt`:{let e=t.data?.images??[];return[(()=>{var e=Kl();return y(()=>e.innerHTML=jp(String(t.data.text??``))),e})(),M(P,{get when(){return e.length},get children(){var t=Cf();return z(t,M(N,{each:e,children:e=>(()=>{var t=wf();return L(t,`src`,e),t})()})),t}})]}case`message`:return[M(P,{get when(){return F(()=>typeof t.data.reasoning==`string`)()&&t.data.reasoning.trim()},get children(){var e=Tf(),n=e.firstChild;n.firstChild;var r=n.nextSibling;return z(n,(()=>{var e=F(()=>String(t.data.reasoning).length>4e3);return()=>e()?` (${rm(String(t.data.reasoning).length)} — truncated)`:``})(),null),z(r,()=>tm(String(t.data.reasoning),8e3)),e}}),(()=>{var e=Kl();return y(()=>e.innerHTML=jp(String(t.data.content??``))),e})(),M(P,{get when(){return t.data.interrupted},get children(){return Ef()}}),M(P,{get when(){return t.data.final},get children(){var e=Df(),n=e.firstChild;return z(e,M(sm,{get text(){return String(t.data.content??``)}}),n),e}})];case`tool_call`:return M(Xp,{e:t,get res(){return e.res},get orphan(){return e.orphan},get agentActive(){return e.agentActive},get onResize(){return e.onResize}});case`tool_result`:{let n=String(t.data.result??``),r=String(t.data.name??`tool`),i=t.data.ok!==!1;return(()=>{var a=kf(),o=a.firstChild,s=o.firstChild.nextSibling,c=o.nextSibling,l=c.nextSibling;return R(a,`embed `+(i?``:`fail`)),z(s,r===`bash`?`$ (bash, call evicted)`:r),z(o,M(sm,{text:n}),null),z(c,()=>tm(n,4e3)),z(l,()=>Be(t.data.durationMs),null),z(l,()=>r===`bash`?wt(Ct(t.data.ok,n)):i?``:` · FAILED`,null),z(a,M(P,{get when(){return e.orphan},get children(){return Of()}}),null),y(()=>a.open=e.orphan),a})()}case`decision`:{let e=Array.isArray(t.data?.alternatives)?t.data.alternatives:[];return(()=>{var n=jf(),r=n.firstChild,i=r.firstChild.firstChild.nextSibling,a=r.nextSibling;return z(n,M(P,{get when(){return e.length},get children(){var t=Af();return t.firstChild,z(t,()=>e.join(` / `),null),t}}),null),y(e=>{var n=jp(String(t.data?.decision??``)),r=jp(String(t.data?.rationale??``));return n!==e.e&&(i.innerHTML=e.e=n),r!==e.t&&(a.innerHTML=e.t=r),e},{e:void 0,t:void 0}),n})()}case`question`:{let n=Array.isArray(t.data?.options)?t.data.options:[],r=t.data?.callId?String(t.data.callId):``,i=()=>e.answeredIds?.().has(r)??!1;return(()=>{var a=Pf(),o=a.firstChild.firstChild.nextSibling;return z(a,M(P,{get when(){return i()},get children(){return Mf()}}),null),z(a,M(P,{get when(){return n.length>0},get children(){var a=Nf();return z(a,M(N,{each:n,children:n=>(()=>{var a=Ff();return a.$$click=()=>{e.onAnswered?.(r);let i=t.data?.actor;i?$(`/api/agents/${encodeURIComponent(String(i))}/prompt`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({text:n,start:!0})}).then(()=>Q(`→ answered @${String(t.data.actor)}`)).catch(()=>Q(`answer failed`)):e.onOption?.(n)},z(a,n),y(()=>a.disabled=i()),a})()})),a}}),null),z(a,M($p,{get answered(){return i()},get onOption(){return e.onOption}}),null),y(e=>{var n=`embed question`+(i()?` answered`:``),r=jp(String(t.data?.question??``));return n!==e.e&&R(a,e.e=n),r!==e.t&&(o.innerHTML=e.t=r),e},{e:void 0,t:void 0}),a})()}case`progress`:return(()=>{var e=If(),n=e.firstChild.firstChild.nextSibling;return z(e,M(P,{get when(){return t.data.goalStatus},get children(){var e=yd(),n=e.firstChild.nextSibling;return z(n,()=>String(t.data.goalStatus)),e}}),null),z(e,M(P,{get when(){return t.data.recent},get children(){var e=gd(),n=e.firstChild.nextSibling;return y(()=>n.innerHTML=jp(String(t.data.recent))),e}}),null),z(e,M(P,{get when(){return t.data.problems},get children(){var e=_d(),n=e.firstChild.nextSibling;return y(()=>n.innerHTML=jp(String(t.data.problems))),e}}),null),z(e,M(P,{get when(){return t.data.next},get children(){var e=vd(),n=e.firstChild.nextSibling;return y(()=>n.innerHTML=jp(String(t.data.next))),e}}),null),y(()=>n.innerHTML=jp(String(t.data.doing??``))),e})();case`error`:return(()=>{var e=Lf(),n=e.firstChild;return n.firstChild,z(n,()=>String(t.data.message??``),null),e})();case`compaction`:return(()=>{var e=zf(),n=e.firstChild.firstChild.nextSibling,r=n.firstChild,i=r.nextSibling,a=i.nextSibling.nextSibling;return a.nextSibling,z(n,()=>String(t.data.mode??``),r),z(n,()=>rm(Number(t.data.tokensBefore??0)),i),z(n,()=>rm(Number(t.data.tokensAfter??0)),a),z(n,(()=>{var e=F(()=>!!t.data.summarized);return()=>e()?`${t.data.summarized} summarized`:`${t.data.dropped} dropped`})(),null),z(e,M(P,{get when(){return t.data.summary},get children(){return[Rf(),(()=>{var e=Kl();return y(()=>e.innerHTML=jp(String(t.data.summary))),e})()]}}),null),e})();default:return(()=>{var e=Bf();return z(e,()=>tm(JSON.stringify(t.data),200)),e})()}}function tm(e,t){return e.length>t?e.slice(0,t)+` …`:e}function nm(e){let t=new Date(e).getTime()-Date.now(),n=Math.abs(t),r=n<9e4?`${Math.round(n/1e3)}s`:n<54e5?`${Math.round(n/6e4)}m`:`${(n/36e5).toFixed(1)}h`;return t>=0?`in ${r}`:`${r} ago`}function rm(e){return e>=1e9?`${+(e/1e9).toFixed(1)}b`:e>=1e6?`${+(e/1e6).toFixed(1)}m`:e>=1e4?`${Math.round(e/1e3)}k`:e>=1e3?`${(e/1e3).toFixed(1)}k`:String(e)}function im(e){return e>=100?Math.round(e).toLocaleString():e>=10?e.toFixed(1):e>=1?e.toFixed(2):e>=.01?e.toFixed(3):e.toFixed(4)}function am(e,t){return tm(e.replace(/\s+/g,` `).trim(),t)}function om(e){return(()=>{var t=Vf(),n=t.firstChild;return we(t,`click`,e.onClick,!0),z(n,()=>e.icon),y(n=>{var r=`iconbtn`+(e.active?` active`:``)+(e.class?` `+e.class:``),i=e.title,a=e.style;return r!==n.e&&R(t,n.e=r),i!==n.t&&L(t,`title`,n.t=i),n.a=Te(t,a,n.a),n},{e:void 0,t:void 0,a:void 0}),t})()}function sm(e){let[t,n]=v(!1),[r,i]=v(!1),a=t=>{t.preventDefault(),t.stopPropagation(),ut(e.text??``).then(e=>{e===`unsupported`||e===`failed`?(i(!0),setTimeout(()=>i(!1),1200)):(n(!0),setTimeout(()=>n(!1),900))})};return(()=>{var n=Hf();return n.$$click=a,z(n,(()=>{var n=F(()=>!!t());return()=>n()?`✓`:F(()=>!!r())()?`✗`:e.label??`⧉`})()),y(()=>L(n,`title`,e.title??`copy to clipboard`)),n})()}function cm(e){return(()=>{var t=Uf(),n=t.firstChild,r=n.firstChild.firstChild,i=r.nextSibling;return t.$$click=t=>t.target===t.currentTarget&&e.onClose(),z(r,()=>e.title),we(i,`click`,e.onClose,!0),z(n,()=>e.children,null),t})()}function lm(e){let[t,n]=v(`~`),[r,i]=v([]),[a,o]=v(``),[s,c]=v(e.providers[0]??``),[l,u]=v(``),[d,f]=v(``);async function p(e){let r=await $(`/api/fs?path=${encodeURIComponent(e??t())}`);n(r.path),h(r.parent??``),i(r.entries??[])}C(()=>p(t()));let[m,h]=v(``),g=async n=>{n.preventDefault(),f(``);try{let n=await $(`/api/agents`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({workspace:t(),id:a(),provider:s()||void 0,model:l()||void 0,start:!1})});e.onCreated(n.agent.id)}catch(e){f(String(e.message))}};return M(cm,{title:`new agent`,get onClose(){return e.onClose},get children(){var i=Gf(),f=i.firstChild,h=f.firstChild.nextSibling.firstChild,_=h.nextSibling,v=_.nextSibling,b=f.nextSibling,x=b.nextSibling,S=x.firstChild,C=S.firstChild.nextSibling,w=S.nextSibling,ee=w.firstChild.nextSibling,te=w.nextSibling.firstChild.nextSibling,T=x.nextSibling;return i.addEventListener(`submit`,g),h.$$input=e=>n(e.currentTarget.value),_.$$click=()=>p(t()),v.$$click=()=>m()?p(m()):p(`..`),z(b,M(N,{get each(){return r()},children:e=>(()=>{var n=Kf();return n.firstChild,n.$$click=()=>p(`${t()}/${e}`.replace(/\/+/g,`/`)),z(n,e,null),n})()})),C.$$input=e=>o(e.currentTarget.value),ee.addEventListener(`change`,e=>c(e.currentTarget.value)),z(ee,M(N,{get each(){return e.providers},children:e=>(()=>{var t=Tu();return z(t,e),t})()})),te.$$input=e=>u(e.currentTarget.value),z(i,M(P,{get when(){return d()},get children(){var e=Wf();return z(e,d),e}}),T),y(()=>h.value=t()),y(()=>C.value=a()),y(()=>ee.value=s()),y(()=>te.value=l()),i}})}var um=new Set([`png`,`jpg`,`jpeg`,`gif`,`webp`,`svg`,`bmp`,`ico`,`avif`]),dm=new Set([`mp4`,`webm`,`mov`,`mkv`,`avi`,`m4v`]),fm=new Set([`mp3`,`wav`,`ogg`,`m4a`,`flac`,`aac`,`opus`]);function pm(e){let t=e.split(`.`).pop()?.toLowerCase()??``,n=mm(e);return n===`image`?`🖼`:n===`video`?`🎬`:n===`audio`?`🎵`:[`ts`,`tsx`,`mts`,`cts`].includes(t)?`🟦`:[`js`,`mjs`,`cjs`,`jsx`].includes(t)?`🟨`:t===`json`||t===`jsonc`?`🧾`:t===`md`||t===`mdx`||t===`markdown`?`📝`:t===`css`||t===`scss`||t===`less`?`🎨`:t===`html`||t===`htm`||t===`svg`?`🌐`:[`py`,`pyi`].includes(t)?`🐍`:t===`rs`?`🦀`:t===`go`?`🐹`:t===`java`||t===`kt`||t===`kts`?`☕`:t===`rb`?`💎`:t===`php`?`🐘`:t===`c`||t===`h`||t===`cpp`||t===`hpp`||t===`cc`?`🧩`:t===`sh`||t===`bash`||t===`zsh`||t===`fish`?`🐚`:t===`sql`?`🗄`:t===`yml`||t===`yaml`||t===`toml`||t===`ini`||t===`conf`?`⚙`:t===`lock`?`🔒`:e===`Dockerfile`||t===`dockerfile`?`🐳`:t===`zip`||t===`gz`||t===`tar`||t===`tgz`||t===`bz2`?`📦`:t===`pdf`?`📕`:t===`txt`||t===`log`?`📄`:`·`}function mm(e){let t=e.split(`.`).pop()?.toLowerCase()??``;return um.has(t)?`image`:dm.has(t)?`video`:fm.has(t)?`audio`:null}var hm=new Map,gm=e=>{let t=hm.get(e);return t||(t={expanded:new Set,preview:null,media:null,viewMode:`code`},hm.set(e,t)),t};function _m(e){return M(P,{get when(){return e.preview},get fallback(){return(()=>{var t=Jf();return t.$$input=t=>e.onDraft(t.currentTarget.value),y(()=>t.value=e.draft),t})()},get children(){var t=qf();return y(()=>t.innerHTML=jp(e.draft)),t}})}function vm(e){let t=gm(e.agentId),[n,r]=v(new Map),[i,a]=v(t.expanded),[o,s]=v(t.preview),c=e=>{t.preview=e,s(e)},l=e=>{t.expanded=e,a(e)},[u,d]=v(t.media),f=e=>{t.media=e,d(e)},[p,m]=v(t.viewMode),h=e=>{t.viewMode=e,m(e)},[g,_]=v(``),[x,S]=v(localStorage.getItem(`teapot.ignoreMode`)??`dim`),C=()=>{let e=[`dim`,`hide`,`show`],t=e[(e.indexOf(x())+1)%3];S(t),localStorage.setItem(`teapot.ignoreMode`,t)},ee=e=>x()!==`hide`||!e.ignored,[te,T]=v(localStorage.getItem(`teapot.showHidden`)===`1`),ne=()=>{let e=!te(),t=[``,...i()];Promise.all(t.map(async t=>({p:t,rows:await O(t,e)}))).then(t=>{T(e),localStorage.setItem(`teapot.showHidden`,e?`1`:`0`);for(let{p:e,rows:n}of t)n&&re(e,n)})},E=(e,t)=>t.map(t=>({name:String(t.name),path:e?`${e}/${t.name}`:String(t.name),dir:!!t.dir,...typeof t.size==`number`?{size:t.size}:{},...t.ignored?{ignored:!0}:{}}));async function D(e){return O(e,te())}async function O(t,n){try{let r=new URLSearchParams;t&&r.set(`path`,t),n&&r.set(`hidden`,`1`);let i=await $(`/api/agents/${e.agentId}/tree?${r.toString()}`);return E(t,i.entries??[])}catch(e){return _(e.message),null}}let re=(e,n)=>r(r=>{let i=r.get(e);if(!i)return new Map(r).set(e,n);let a=i.map(e=>{let t=n.find(t=>t.path===e.path);return t&&t.dir===e.dir&&t.size===e.size&&t.ignored===e.ignored&&t.name===e.name?e:t??e});for(let e of n)i.some(t=>t.path===e.path)||a.push(e);let o=a.filter(e=>n.some(t=>t.path===e.path)||t.preview?.path===e.path),s=new Map(r);return s.set(e,o),s}),k=``;b(()=>{let t=e.agentId;t!==k&&(k=t,l(new Set),c(null),f(null),r(new Map),D(``).then(e=>{e&&k===t&&r(new Map([[``,e]]))}))});let ie=async e=>{let t=new Set(i());if(t.has(e.path))t.delete(e.path),l(t);else if(t.add(e.path),l(t),!n().has(e.path)){let t=await D(e.path);t&&re(e.path,t)}},[ae,oe]=v(``),[se,ce]=v(!1),[A,le]=v(``),[j,ue]=v(!1),de=e=>/\.(md|markdown|mdx)$/i.test(e),fe=0,pe=async e=>{let t=++fe;oe(``),ce(!0);try{let{highlightChunks:n}=await Ml(async()=>{let{highlightChunks:e}=await import(`./shiki-B3_nSW8O.js`);return{highlightChunks:e}},[]);for await(let r of n(e.path,e.content)){if(fe!==t)return;oe(e=>e+r)}}catch{fe===t&&oe(``)}finally{fe===t&&ce(!1)}};w(()=>{fe++});let me=async(t,n)=>{let r=mm(t.path);if(r)c({path:t.path,content:``,binary:!0}),f({path:t.path,kind:r}),h(`media`);else try{let r=await $(`/api/agents/${e.agentId}/file?path=${encodeURIComponent(t.path)}`);f(null),c({path:t.path,content:r.content??``,binary:r.binary,truncated:r.truncated}),le(r.content??``),h(r.binary?`code`:n),!r.binary&&n!==`md`&&pe({path:t.path,content:r.content??``,truncated:r.truncated})}catch(e){Q(`open failed: ${e.message}`)}},he=async()=>{let t=o();if(t&&!j()){ue(!0);try{await $(`/api/agents/${e.agentId}/file?path=${encodeURIComponent(t.path)}`,{method:`PUT`,headers:{"content-type":`application/json`},body:JSON.stringify({content:A(),baseContent:t.content})}),c({...t,content:A()}),Q(`saved ${t.path}`)}catch(e){let n=e.payload,r=n&&typeof n==`object`&&n.error===`file changed on disk`?n:null;r?.current===void 0?Q(`save failed: ${e.message}`):confirm(`This file changed on disk since you opened it.
28
28
  OK = load the disk version into the editor (your edits are discarded)
29
- Cancel = keep editing your copy`)?(le(r.current),c({...t,content:r.current}),Q(`loaded the current file from disk`)):Q(`kept your edits — use Save As via bash to force-write`)}finally{ue(!1)}}},ge=e=>!e.binary&&!e.truncated,_e=(e,t)=>[(()=>{var n=Xf(),r=n.firstChild,a=r.nextSibling;return n.$$click=()=>e.dir?void ie(e):void me(e,`code`),z(r,(()=>{var t=F(()=>!!e.dir);return()=>t()?i().has(e.path)?`▾`:`▸`:pm(e.name)})()),z(a,()=>e.name),z(n,M(P,{get when(){return F(()=>!e.dir)()&&e.size!==void 0},get children(){var t=Yf();return z(t,()=>rm(e.size)),t}}),null),y(r=>{var i=`filerow`+(e.dir?` isdir`:``)+(e.ignored&&x()===`dim`?` gitignored`:``),a=`padding-left:${t*13+8}px`,o=e.dir?`browse ${e.path}`:`preview ${e.path}`;return i!==r.e&&R(n,r.e=i),r.t=Te(n,a,r.t),o!==r.a&&L(n,`title`,r.a=o),r},{e:void 0,t:void 0,a:void 0}),n})(),M(P,{get when(){return F(()=>!!e.dir)()&&i().has(e.path)},get children(){return M(N,{get each(){return(n().get(e.path)??[]).filter(ee)},children:e=>_e(e,t+1)})}})],ve=()=>e.workspace.split(`/`).filter(Boolean).pop()??e.workspace,[ye,be]=v(!1),xe=async()=>{if(!ye()){be(!0);try{let e=[``,...i()],t=await Promise.all(e.map(async e=>({p:e,rows:await O(e,te())})));for(let{p:e,rows:n}of t)n&&re(e,n)}finally{be(!1)}}};return[(()=>{var e=Zf(),t=e.firstChild.nextSibling;return t.firstChild,z(t,ve,null),z(e,M(om,{class:`filetoggle`,get icon(){return ye()?`…`:`⟳`},title:`refresh the tree (root + expanded folders) — open popups are kept`,onClick:()=>void xe()}),null),z(e,M(om,{class:`filetoggle`,style:`margin-left:auto`,get icon(){return F(()=>x()===`hide`)()?`🙈`:x()===`dim`?`👁`:`✨`},get title(){return`gitignored files: ${x()} — click to cycle (dim → hidden → shown)`},onClick:C}),null),z(e,M(om,{class:`filetoggle`,get icon(){return te()?`◉.`:`○.`},get title(){return te()?`dotfiles shown — click to hide`:`dotfiles hidden — click to show`},onClick:ne}),null),e})(),(()=>{var e=Qf();return z(e,M(P,{get when(){return(n().get(``)??[]).length>0},get fallback(){return(()=>{var e=$f();return z(e,()=>g()||`empty workspace`),e})()},get children(){return M(N,{get each(){return(n().get(``)??[]).filter(ee)},children:e=>_e(e,0)})}})),e})(),M(P,{get when(){return o()},children:t=>M(cm,{get title(){return`🗂 ${t().path}`},onClose:()=>{fe++,c(null),f(null)},get children(){return M(P,{get when(){return u()},get fallback(){return[(()=>{var e=ip(),n=e.firstChild;return z(e,M(P,{get when(){return F(()=>!!de(t().path))()&&!t().binary},get children(){var e=np();return e.$$click=()=>h(`md`),y(()=>R(e,p()===`md`?`on`:``)),e}}),n),n.$$click=()=>{h(`code`),ae()||pe({path:t().path,content:t().content,truncated:t().truncated})},z(e,M(P,{get when(){return ge(t())},get children(){var e=rp();return e.$$click=()=>h(`edit`),y(()=>R(e,p()===`edit`?`on`:``)),e}}),null),y(()=>R(n,p()===`code`?`on`:``)),e})(),M(P,{get when(){return!t().binary},get fallback(){return op()},get children(){return M(P,{get when(){return p()===`edit`},get fallback(){return M(P,{get when(){return F(()=>p()===`md`)()&&de(t().path)},get fallback(){return M(ym,{get path(){return t().path},get content(){return t().content},get html(){return ae()},get pending(){return se()},get truncated(){return!!t().truncated}})},get children(){var e=sp();return y(()=>e.innerHTML=Fe(t().content)),e}})},get children(){var e=ap(),n=e.firstChild,r=n.nextSibling.firstChild,i=r.firstChild,a=r.nextSibling;return n.$$input=e=>le(e.currentTarget.value),L(n,`spellcheck`,!1),z(r,()=>rm(A().length),i),a.$$click=()=>void he(),z(a,()=>j()?`saving…`:`💾 save`),y(()=>a.disabled=j()||A()===t().content),y(()=>n.value=A()),e}})}})]},get children(){var t=tp(),n=t.firstChild,r=n.firstChild;return z(t,M(P,{get when(){return u().kind===`image`},get fallback(){return M(P,{get when(){return u().kind===`video`},get fallback(){return(()=>{var t=lp();return y(()=>L(t,`src`,`/api/agents/${e.agentId}/raw?path=${encodeURIComponent(u().path)}`)),t})()},get children(){var t=cp();return y(()=>L(t,`src`,`/api/agents/${e.agentId}/raw?path=${encodeURIComponent(u().path)}`)),t}})},get children(){var t=ep();return y(n=>{var r=`/api/agents/${e.agentId}/raw?path=${encodeURIComponent(u().path)}`,i=u().path.split(`/`).pop();return r!==n.e&&L(t,`src`,n.e=r),i!==n.t&&L(t,`alt`,n.t=i),n},{e:void 0,t:void 0}),t}}),n),z(n,()=>u().kind,r),t}})}})})]}function ym(e){return[M(P,{get when(){return e.html},get fallback(){return F(()=>!!e.pending)()?(()=>{var t=fp(),n=t.firstChild.nextSibling;return n.nextSibling,z(t,()=>e.path.split(`/`).pop(),n),t})():(()=>{var t=pp();return z(t,()=>e.content),t})()},get children(){var t=up();return y(()=>t.innerHTML=e.html),t}}),M(P,{get when(){return e.truncated},get children(){return dp()}})]}var bm=[{key:`openrouter`,label:`OpenRouter`,url:`https://openrouter.ai/api/v1`,model:``,hint:`400+ models behind one key — teapot sends app-attribution headers automatically`},{key:`orcarouter`,label:`OrcaRouter`,url:`https://api.orcarouter.ai/v1`,model:``,hint:`zero-markup routing gateway — 'orcarouter/auto' grades each prompt and picks the model`},{key:`openai`,label:`OpenAI`,url:`https://api.openai.com/v1`,model:``,hint:`your account's models — pick from the list once the endpoint answers`},{key:`opencode-go`,label:`OpenCode Go`,url:`https://opencode.ai/zen/go/v1`,model:``,hint:`OpenCode's open-model subscription — teapot sends the required x-opencode-session header; choose a chat/completions model`},{key:`llamacpp`,label:`llama.cpp server`,url:`http://localhost:8080/v1`,model:``,hint:`free & local — start it with: llama-server -m ./model.gguf (any model name works)`}],xm={key:`custom`,label:`Custom`,url:``,model:``,hint:`any OpenAI-compatible /v1 endpoint — vLLM, LM Studio, llama.cpp, a company gateway… fill the fields below`};function Sm(e){let[t,n]=v(bm[0]),[r,i]=v(bm[0].url),[a,o]=v(``),[s,c]=v(bm[0].model),[l,u]=v([]),[d,f]=v(`~/teapot-workspace`),[p,m]=v(``),[h,g]=v(!1),[_,x]=v(``),S=e=>{n(e),e.key!==`custom`&&e.url&&(i(e.url),e.model&&c(e.model))};b(()=>{let e=r().trim(),t=a();if(!/^https?:\/\//.test(e)){u([]);return}let n=setTimeout(async()=>{try{let n=await $(`/api/setup/models?baseUrl=${encodeURIComponent(e)}${t?`&apiKey=${encodeURIComponent(t)}`:``}`);u(n.models??[])}catch{u([])}},600);w(()=>clearTimeout(n))});let C=e=>{let t=l().find(t=>t.id===e.trim());if(!t)return``;let n=[];t.contextLength&&n.push(`ctx ${rm(t.contextLength)} tok`);let r=e=>e===void 0?``:`$${e*1e6>=10?Math.round(e*1e6):+(e*1e6).toFixed(1)}/M`;if(t.pricing){let e=r(t.pricing.prompt),i=r(t.pricing.completion);e&&i?n.push(`${e} in · ${i} out`):(e||i)&&n.push(r(t.pricing.prompt??t.pricing.completion))}return n.join(` · `)},ee=()=>C(s()),te=()=>{let e=s().trim().toLowerCase();return e?l().filter(t=>t.id.toLowerCase().includes(e)):l()},T=async t=>{if(t.preventDefault(),x(``),!s().trim())x(l().length?`pick a model — choose one from the list, or type its id`:`pick a model — type its id (the endpoint has not listed any yet)`);else{g(!0);try{await $(`/api/setup`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({baseUrl:r(),apiKey:a()||void 0,model:s(),workspace:d(),...p()?{password:p()}:{}})}),e.onDone()}catch(e){x(e.message),g(!1)}}};return(()=>{var e=vp(),n=e.firstChild.firstChild.nextSibling.nextSibling,u=n.firstChild,g=u.nextSibling,v=g.firstChild.nextSibling,b=v.nextSibling,x=g.nextSibling,w=x.firstChild.nextSibling,ne=x.nextSibling,E=ne.firstChild.nextSibling,D=E.nextSibling,O=ne.nextSibling,re=O.firstChild.nextSibling,k=re.firstChild.nextSibling,ie=re.nextSibling.firstChild.nextSibling,ae=O.nextSibling;return n.addEventListener(`submit`,T),z(u,()=>[...bm,xm].map(e=>(()=>{var n=yp();return n.$$click=()=>S(e),z(n,()=>e.label),y(r=>{var i=`presetbtn`+(t().key===e.key?` active`:``),a=e.hint||e.url;return i!==r.e&&R(n,r.e=i),a!==r.t&&L(n,`title`,r.t=a),r},{e:void 0,t:void 0}),n})())),z(n,M(P,{get when(){return t().hint},get children(){var e=mp();return z(e,()=>t().hint),e}}),g),v.$$input=e=>i(e.currentTarget.value),z(b,()=>bm.map(e=>(()=>{var t=Tu();return y(()=>t.value=e.url),t})())),w.$$input=e=>o(e.currentTarget.value),E.$$input=e=>c(e.currentTarget.value),z(D,()=>l().map(e=>(()=>{var t=Tu();return y(()=>t.value=e.id),t})())),z(n,M(P,{get when(){return te().length>0},get fallback(){return(()=>{var e=bp();return z(e,()=>l().length?`no model matches that — clear the field to see them all`:`models appear here automatically once the endpoint answers GET /models`),e})()},get children(){return[(()=>{var e=hp();return z(e,()=>te().slice(0,40).map(e=>(()=>{var t=xp(),n=t.firstChild;return t.$$click=()=>c(e.id),z(n,()=>e.id),z(t,M(P,{get when(){return C(e.id)},get children(){var t=nf();return z(t,()=>C(e.id)),t}}),null),y(n=>{var r=`wizmodel`+(s()===e.id?` active`:``),i=C(e.id)||e.id;return r!==n.e&&R(t,n.e=r),i!==n.t&&L(t,`title`,n.t=i),n},{e:void 0,t:void 0}),t})())),e})(),(()=>{var e=_p(),t=e.firstChild;return z(e,()=>te().length,t),z(e,()=>te().length>1?`s`:``,null),z(e,M(P,{get when(){return te().length>40},children:` (showing the first 40 — keep typing to narrow)`}),null),z(e,M(P,{get when(){return ee()},get children(){return[` · selected: `,(()=>{var e=gp();return z(e,ee),e})()]}}),null),e})()]}}),O),k.$$input=e=>f(e.currentTarget.value),ie.$$input=e=>m(e.currentTarget.value),z(n,M(P,{get when(){return _()},get children(){var e=Wf();return z(e,_),e}}),ae),z(ae,()=>h()?`saving…`:`finish setup`),y(e=>{var n=t().key===`llamacpp`?`(any name — serves whichever gguf is loaded)`:`(pick from the list below, or type an id)`,r=h();return n!==e.e&&L(E,`placeholder`,e.e=n),r!==e.t&&(ae.disabled=e.t=r),e},{e:void 0,t:void 0}),y(()=>v.value=r()),y(()=>w.value=a()),y(()=>E.value=s()),y(()=>k.value=d()),y(()=>ie.value=p()),e})()}function Cm(e){let[t,n]=v(Object.entries(e.cfg.providers??{}).map(([e,t])=>({name:e,baseUrl:t.baseUrl??``,apiKey:t.apiKey??``,model:t.model??``}))),[r,i]=v(e.cfg.defaultProvider??``),a=()=>e.cfg.defaultProvider??``,o=()=>{let e=[...new Set(t().map(e=>e.name.trim()).filter(Boolean))],n=r();return n&&!e.includes(n)&&e.push(n),e},s=()=>{let e=r();return e?t().some(t=>t.name.trim()===e)?``:e:``},[c,l]=v(Math.round((e.cfg.progressIntervalMs??6e5)/6e4)),[u,d]=v(e.cfg.progressMinChars??4e3),[f,p]=v(e.cfg.contextTokenBudget==null?null:Math.round(e.cfg.contextTokenBudget/1e3)),[m,h]=v(e.cfg.contextWindowTokens?Math.round(e.cfg.contextWindowTokens/1e3):0),[g,_]=v(e.cfg.maxSpawnDepth??3),[b,x]=v((e.cfg.tasks??[]).map(e=>({...e}))),[S,C]=v(``),w=()=>(e.cfg.agents??[]).map(e=>e.id),ee=()=>{let e={};for(let n of t()){if(!n.name.trim())return C(`provider name is required`),null;if(n.baseUrl&&!/^https?:\/\//.test(n.baseUrl))return C(`provider ${n.name}: baseUrl must start with http(s)://`),null;e[n.name.trim()]={baseUrl:n.baseUrl,...n.apiKey?{apiKey:n.apiKey}:{},...n.model?{model:n.model}:{}}}return e},te=async t=>{t.preventDefault(),C(``);let n=ee();if(!n)return;let i=b().filter(e=>e.id?.trim()||e.prompt?.trim()).map((e,t)=>({id:e.id?.trim()||`task-${t+1}`,agent:e.agent,schedule:e.schedule,prompt:e.prompt,...e.forked?{forked:!0}:{}}));for(let e of i){if(!e.agent){C(`task "${e.id}": agent is required`);return}if(!e.schedule?.trim()){C(`task "${e.id}": schedule is required`);return}}try{await $(`/api/config`,{method:`PUT`,headers:{"content-type":`application/json`},body:JSON.stringify({providers:n,defaultProvider:r()||void 0,progressIntervalMs:Math.max(1,c())*6e4,progressMinChars:Math.max(100,u()),...f()==null?{}:{contextTokenBudget:Math.max(1,f())*1e3},...m()>0?{contextWindowTokens:m()*1e3}:{},maxSpawnDepth:Math.max(0,g()),tasks:i})}),e.onSaved(),e.onClose()}catch(e){C(e.message)}},T=(e,t,n,r)=>(()=>{var i=Sp(),a=i.firstChild;return L(i,`title`,r),z(i,e,a),a.$$input=e=>n(Number(e.currentTarget.value)),a.value=t,i})();return M(cm,{title:`settings`,get onClose(){return e.onClose},get children(){var v=wp(),ee=v.firstChild,ne=ee.firstChild.nextSibling,E=ne.nextSibling;E.firstChild;var D=E.nextSibling.firstChild.firstChild.nextSibling;D.firstChild;var O=ee.nextSibling,re=O.firstChild.nextSibling,k=re.firstChild,ie=k.firstChild.nextSibling,ae=O.nextSibling,oe=ae.firstChild.nextSibling,se=ae.nextSibling;se.firstChild;var ce=se.nextSibling,A=ce.firstChild.nextSibling.firstChild;A.firstChild;var le=A.nextSibling,j=ce.nextSibling;return v.addEventListener(`submit`,te),z(ee,M(ye,{get each(){return t()},children:(e,r)=>(()=>{var i=Tp(),a=i.firstChild,o=a.nextSibling,s=o.nextSibling,c=s.nextSibling,l=c.nextSibling;return a.$$input=e=>n(t().map((t,n)=>n===r?{...t,name:e.currentTarget.value}:t)),o.$$input=e=>n(t().map((t,n)=>n===r?{...t,baseUrl:e.currentTarget.value}:t)),s.$$input=e=>n(t().map((t,n)=>n===r?{...t,apiKey:e.currentTarget.value}:t)),c.$$input=e=>n(t().map((t,n)=>n===r?{...t,model:e.currentTarget.value}:t)),l.$$click=()=>n(t().filter((e,t)=>t!==r)),y(()=>a.value=e().name),y(()=>o.value=e().baseUrl),y(()=>s.value=e().apiKey),y(()=>c.value=e().model),i})()}),ne),ne.$$click=()=>n([...t(),{name:``,baseUrl:``,apiKey:``,model:``}]),z(E,M(N,{each:bm,children:e=>(()=>{var a=Ep();return a.firstChild,a.$$click=()=>{let a=t().filter(t=>t.name!==e.key);n([...a,{name:e.key,baseUrl:e.url,apiKey:``,model:e.model}]),r()||i(e.key)},z(a,()=>e.label,null),y(()=>L(a,`title`,`fill a ${e.label} row — ${e.url}${e.model?` (model: ${e.model})`:``}`)),a})()}),null),D.addEventListener(`change`,e=>i(e.currentTarget.value)),z(D,M(N,{get each(){return o()},children:e=>(()=>{var t=Tu();return t.value=e,z(t,e),t})()}),null),z(ee,M(P,{get when(){return s()},get children(){var e=Cp(),t=e.firstChild.nextSibling,n=t.nextSibling.nextSibling,r=n.nextSibling.nextSibling;return z(t,s),z(e,()=>s()===a()?` — the dropdown above cannot show it.`:` — it was replaced by your selection.`,n),z(r,s),e}}),null),z(re,()=>T(`progress interval (min)`,c(),e=>l(e),`how often the harness asks for a progress report`),k),z(re,()=>T(`progress min chars`,u(),e=>d(e),`progress prompts wait for this much real output`),k),ie.$$input=e=>p(e.currentTarget.value===``?null:Number(e.currentTarget.value)),z(re,()=>T(`context window (k tok)`,m(),e=>h(e),`model's real window — 0/blank hides the % gauge`),null),z(re,()=>T(`max spawn depth`,g(),e=>_(e),`sub-agent nesting limit (0 = no spawning)`),null),z(ae,M(P,{get when(){return b().length>0},get children(){return M(ye,{get each(){return b()},children:(e,t)=>(()=>{var n=Dp(),r=n.firstChild,i=r.firstChild,a=i.nextSibling,o=a.nextSibling,s=o.nextSibling,c=s.firstChild,l=s.nextSibling,u=r.nextSibling;return i.$$input=e=>x(b().map((n,r)=>r===t?{...n,id:e.currentTarget.value}:n)),a.$$input=e=>x(b().map((n,r)=>r===t?{...n,agent:e.currentTarget.value}:n)),o.$$input=e=>x(b().map((n,r)=>r===t?{...n,schedule:e.currentTarget.value}:n)),c.addEventListener(`change`,e=>x(b().map((n,r)=>r===t?{...n,forked:e.currentTarget.checked}:n))),l.$$click=()=>x(b().filter((e,n)=>n!==t)),u.$$input=e=>x(b().map((n,r)=>r===t?{...n,prompt:e.currentTarget.value}:n)),y(()=>i.value=e().id),y(()=>a.value=e().agent),y(()=>o.value=e().schedule),y(()=>c.checked=!!e().forked),y(()=>u.value=e().prompt),n})()})}}),oe),oe.$$click=()=>x([...b(),{id:``,agent:w()[0]??``,schedule:`every 30m`,prompt:``}]),z(se,M(N,{get each(){return e.cfg.agents??[]},children:e=>(()=>{var t=kp(),n=t.firstChild,r=n.nextSibling;return z(n,()=>e.id),z(r,()=>e.workspace),z(t,M(P,{get when(){return e.parent},get children(){var t=Op();return t.firstChild,z(t,()=>e.parent,null),t}}),null),t})()}),null),z(A,()=>e.cfg.version??`unknown`,null),le.$$click=async e=>{try{C(``);let t=e.currentTarget;t.disabled=!0,t.textContent=`updating…`;let n=await $(`/api/update/restart`,{method:`POST`});if(!n.ok)throw Error((await n.json()).error??`restart failed`);t.textContent=`restarting…`;let r=!1;for(let e=0;e<90&&!r;e++){await new Promise(e=>setTimeout(e,1e3));try{let e=await $(`/api/version`);e.version&&e.version!==`0.29.13`&&(r=!0,window.location.reload())}catch{}}if(!r)throw Error(`restart timeout — new server did not come up`)}catch(e){C(e.message)}finally{e.currentTarget.disabled=!1,e.currentTarget.textContent=`update & restart`}},z(v,M(P,{get when(){return S()},get children(){var e=Wf();return z(e,S),e}}),j),y(()=>D.value=r()),y(()=>ie.value=f()??``),v}})}Ce([`click`,`pointerdown`,`dblclick`,`input`,`keydown`]),Se(()=>M(qp,{}),document.getElementById(`root`));export{Ml as t};
30
- //# sourceMappingURL=index-CPTRuBGN.js.map
29
+ Cancel = keep editing your copy`)?(le(r.current),c({...t,content:r.current}),Q(`loaded the current file from disk`)):Q(`kept your edits — use Save As via bash to force-write`)}finally{ue(!1)}}},ge=e=>!e.binary&&!e.truncated,_e=(e,t)=>[(()=>{var n=Xf(),r=n.firstChild,a=r.nextSibling;return n.$$click=()=>e.dir?void ie(e):void me(e,`code`),z(r,(()=>{var t=F(()=>!!e.dir);return()=>t()?i().has(e.path)?`▾`:`▸`:pm(e.name)})()),z(a,()=>e.name),z(n,M(P,{get when(){return F(()=>!e.dir)()&&e.size!==void 0},get children(){var t=Yf();return z(t,()=>rm(e.size)),t}}),null),y(r=>{var i=`filerow`+(e.dir?` isdir`:``)+(e.ignored&&x()===`dim`?` gitignored`:``),a=`padding-left:${t*13+8}px`,o=e.dir?`browse ${e.path}`:`preview ${e.path}`;return i!==r.e&&R(n,r.e=i),r.t=Te(n,a,r.t),o!==r.a&&L(n,`title`,r.a=o),r},{e:void 0,t:void 0,a:void 0}),n})(),M(P,{get when(){return F(()=>!!e.dir)()&&i().has(e.path)},get children(){return M(N,{get each(){return(n().get(e.path)??[]).filter(ee)},children:e=>_e(e,t+1)})}})],ve=()=>e.workspace.split(`/`).filter(Boolean).pop()??e.workspace,[ye,be]=v(!1),xe=async()=>{if(!ye()){be(!0);try{let e=[``,...i()],t=await Promise.all(e.map(async e=>({p:e,rows:await O(e,te())})));for(let{p:e,rows:n}of t)n&&re(e,n)}finally{be(!1)}}};return[(()=>{var e=Zf(),t=e.firstChild.nextSibling;return t.firstChild,z(t,ve,null),z(e,M(om,{class:`filetoggle`,get icon(){return ye()?`…`:`⟳`},title:`refresh the tree (root + expanded folders) — open popups are kept`,onClick:()=>void xe()}),null),z(e,M(om,{class:`filetoggle`,style:`margin-left:auto`,get icon(){return F(()=>x()===`hide`)()?`🙈`:x()===`dim`?`👁`:`✨`},get title(){return`gitignored files: ${x()} — click to cycle (dim → hidden → shown)`},onClick:C}),null),z(e,M(om,{class:`filetoggle`,get icon(){return te()?`◉.`:`○.`},get title(){return te()?`dotfiles shown — click to hide`:`dotfiles hidden — click to show`},onClick:ne}),null),e})(),(()=>{var e=Qf();return z(e,M(P,{get when(){return(n().get(``)??[]).length>0},get fallback(){return(()=>{var e=$f();return z(e,()=>g()||`empty workspace`),e})()},get children(){return M(N,{get each(){return(n().get(``)??[]).filter(ee)},children:e=>_e(e,0)})}})),e})(),M(P,{get when(){return o()},children:t=>M(cm,{get title(){return`🗂 ${t().path}`},onClose:()=>{fe++,c(null),f(null)},get children(){return M(P,{get when(){return u()},get fallback(){return[(()=>{var e=ip(),n=e.firstChild;return z(e,M(P,{get when(){return F(()=>!!de(t().path))()&&!t().binary},get children(){var e=np();return e.$$click=()=>h(`md`),y(()=>R(e,p()===`md`?`on`:``)),e}}),n),n.$$click=()=>{h(`code`),ae()||pe({path:t().path,content:t().content,truncated:t().truncated})},z(e,M(P,{get when(){return ge(t())},get children(){var e=rp();return e.$$click=()=>h(`edit`),y(()=>R(e,p()===`edit`?`on`:``)),e}}),null),y(()=>R(n,p()===`code`?`on`:``)),e})(),M(P,{get when(){return!t().binary},get fallback(){return op()},get children(){return M(P,{get when(){return p()===`edit`},get fallback(){return M(P,{get when(){return F(()=>p()===`md`)()&&de(t().path)},get fallback(){return M(ym,{get path(){return t().path},get content(){return t().content},get html(){return ae()},get pending(){return se()},get truncated(){return!!t().truncated}})},get children(){var e=sp();return y(()=>e.innerHTML=Fe(t().content)),e}})},get children(){var e=ap(),n=e.firstChild,r=n.nextSibling.firstChild,i=r.firstChild,a=r.nextSibling;return n.$$input=e=>le(e.currentTarget.value),L(n,`spellcheck`,!1),z(r,()=>rm(A().length),i),a.$$click=()=>void he(),z(a,()=>j()?`saving…`:`💾 save`),y(()=>a.disabled=j()||A()===t().content),y(()=>n.value=A()),e}})}})]},get children(){var t=tp(),n=t.firstChild,r=n.firstChild;return z(t,M(P,{get when(){return u().kind===`image`},get fallback(){return M(P,{get when(){return u().kind===`video`},get fallback(){return(()=>{var t=lp();return y(()=>L(t,`src`,`/api/agents/${e.agentId}/raw?path=${encodeURIComponent(u().path)}`)),t})()},get children(){var t=cp();return y(()=>L(t,`src`,`/api/agents/${e.agentId}/raw?path=${encodeURIComponent(u().path)}`)),t}})},get children(){var t=ep();return y(n=>{var r=`/api/agents/${e.agentId}/raw?path=${encodeURIComponent(u().path)}`,i=u().path.split(`/`).pop();return r!==n.e&&L(t,`src`,n.e=r),i!==n.t&&L(t,`alt`,n.t=i),n},{e:void 0,t:void 0}),t}}),n),z(n,()=>u().kind,r),t}})}})})]}function ym(e){return[M(P,{get when(){return e.html},get fallback(){return F(()=>!!e.pending)()?(()=>{var t=fp(),n=t.firstChild.nextSibling;return n.nextSibling,z(t,()=>e.path.split(`/`).pop(),n),t})():(()=>{var t=pp();return z(t,()=>e.content),t})()},get children(){var t=up();return y(()=>t.innerHTML=e.html),t}}),M(P,{get when(){return e.truncated},get children(){return dp()}})]}var bm=[{key:`openrouter`,label:`OpenRouter`,url:`https://openrouter.ai/api/v1`,model:``,hint:`400+ models behind one key — teapot sends app-attribution headers automatically`},{key:`orcarouter`,label:`OrcaRouter`,url:`https://api.orcarouter.ai/v1`,model:``,hint:`zero-markup routing gateway — 'orcarouter/auto' grades each prompt and picks the model`},{key:`openai`,label:`OpenAI`,url:`https://api.openai.com/v1`,model:``,hint:`your account's models — pick from the list once the endpoint answers`},{key:`opencode-go`,label:`OpenCode Go`,url:`https://opencode.ai/zen/go/v1`,model:``,hint:`OpenCode's open-model subscription — teapot sends the required x-opencode-session header; choose a chat/completions model`},{key:`llamacpp`,label:`llama.cpp server`,url:`http://localhost:8080/v1`,model:``,hint:`free & local — start it with: llama-server -m ./model.gguf (any model name works)`}],xm={key:`custom`,label:`Custom`,url:``,model:``,hint:`any OpenAI-compatible /v1 endpoint — vLLM, LM Studio, llama.cpp, a company gateway… fill the fields below`};function Sm(e){let[t,n]=v(bm[0]),[r,i]=v(bm[0].url),[a,o]=v(``),[s,c]=v(bm[0].model),[l,u]=v([]),[d,f]=v(`~/teapot-workspace`),[p,m]=v(``),[h,g]=v(!1),[_,x]=v(``),S=e=>{n(e),e.key!==`custom`&&e.url&&(i(e.url),e.model&&c(e.model))};b(()=>{let e=r().trim(),t=a();if(!/^https?:\/\//.test(e)){u([]);return}let n=setTimeout(async()=>{try{let n=await $(`/api/setup/models?baseUrl=${encodeURIComponent(e)}${t?`&apiKey=${encodeURIComponent(t)}`:``}`);u(n.models??[])}catch{u([])}},600);w(()=>clearTimeout(n))});let C=e=>{let t=l().find(t=>t.id===e.trim());if(!t)return``;let n=[];t.contextLength&&n.push(`ctx ${rm(t.contextLength)} tok`);let r=e=>e===void 0?``:`$${e*1e6>=10?Math.round(e*1e6):+(e*1e6).toFixed(1)}/M`;if(t.pricing){let e=r(t.pricing.prompt),i=r(t.pricing.completion);e&&i?n.push(`${e} in · ${i} out`):(e||i)&&n.push(r(t.pricing.prompt??t.pricing.completion))}return n.join(` · `)},ee=()=>C(s()),te=()=>{let e=s().trim().toLowerCase();return e?l().filter(t=>t.id.toLowerCase().includes(e)):l()},T=async t=>{if(t.preventDefault(),x(``),!s().trim())x(l().length?`pick a model — choose one from the list, or type its id`:`pick a model — type its id (the endpoint has not listed any yet)`);else{g(!0);try{await $(`/api/setup`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({baseUrl:r(),apiKey:a()||void 0,model:s(),workspace:d(),...p()?{password:p()}:{}})}),e.onDone()}catch(e){x(e.message),g(!1)}}};return(()=>{var e=vp(),n=e.firstChild.firstChild.nextSibling.nextSibling,u=n.firstChild,g=u.nextSibling,v=g.firstChild.nextSibling,b=v.nextSibling,x=g.nextSibling,w=x.firstChild.nextSibling,ne=x.nextSibling,E=ne.firstChild.nextSibling,D=E.nextSibling,O=ne.nextSibling,re=O.firstChild.nextSibling,k=re.firstChild.nextSibling,ie=re.nextSibling.firstChild.nextSibling,ae=O.nextSibling;return n.addEventListener(`submit`,T),z(u,()=>[...bm,xm].map(e=>(()=>{var n=yp();return n.$$click=()=>S(e),z(n,()=>e.label),y(r=>{var i=`presetbtn`+(t().key===e.key?` active`:``),a=e.hint||e.url;return i!==r.e&&R(n,r.e=i),a!==r.t&&L(n,`title`,r.t=a),r},{e:void 0,t:void 0}),n})())),z(n,M(P,{get when(){return t().hint},get children(){var e=mp();return z(e,()=>t().hint),e}}),g),v.$$input=e=>i(e.currentTarget.value),z(b,()=>bm.map(e=>(()=>{var t=Tu();return y(()=>t.value=e.url),t})())),w.$$input=e=>o(e.currentTarget.value),E.$$input=e=>c(e.currentTarget.value),z(D,()=>l().map(e=>(()=>{var t=Tu();return y(()=>t.value=e.id),t})())),z(n,M(P,{get when(){return te().length>0},get fallback(){return(()=>{var e=bp();return z(e,()=>l().length?`no model matches that — clear the field to see them all`:`models appear here automatically once the endpoint answers GET /models`),e})()},get children(){return[(()=>{var e=hp();return z(e,()=>te().slice(0,40).map(e=>(()=>{var t=xp(),n=t.firstChild;return t.$$click=()=>c(e.id),z(n,()=>e.id),z(t,M(P,{get when(){return C(e.id)},get children(){var t=nf();return z(t,()=>C(e.id)),t}}),null),y(n=>{var r=`wizmodel`+(s()===e.id?` active`:``),i=C(e.id)||e.id;return r!==n.e&&R(t,n.e=r),i!==n.t&&L(t,`title`,n.t=i),n},{e:void 0,t:void 0}),t})())),e})(),(()=>{var e=_p(),t=e.firstChild;return z(e,()=>te().length,t),z(e,()=>te().length>1?`s`:``,null),z(e,M(P,{get when(){return te().length>40},children:` (showing the first 40 — keep typing to narrow)`}),null),z(e,M(P,{get when(){return ee()},get children(){return[` · selected: `,(()=>{var e=gp();return z(e,ee),e})()]}}),null),e})()]}}),O),k.$$input=e=>f(e.currentTarget.value),ie.$$input=e=>m(e.currentTarget.value),z(n,M(P,{get when(){return _()},get children(){var e=Wf();return z(e,_),e}}),ae),z(ae,()=>h()?`saving…`:`finish setup`),y(e=>{var n=t().key===`llamacpp`?`(any name — serves whichever gguf is loaded)`:`(pick from the list below, or type an id)`,r=h();return n!==e.e&&L(E,`placeholder`,e.e=n),r!==e.t&&(ae.disabled=e.t=r),e},{e:void 0,t:void 0}),y(()=>v.value=r()),y(()=>w.value=a()),y(()=>E.value=s()),y(()=>k.value=d()),y(()=>ie.value=p()),e})()}function Cm(e){let[t,n]=v(Object.entries(e.cfg.providers??{}).map(([e,t])=>({name:e,baseUrl:t.baseUrl??``,apiKey:t.apiKey??``,model:t.model??``}))),[r,i]=v(e.cfg.defaultProvider??``),a=()=>e.cfg.defaultProvider??``,o=()=>{let e=[...new Set(t().map(e=>e.name.trim()).filter(Boolean))],n=r();return n&&!e.includes(n)&&e.push(n),e},s=()=>{let e=r();return e?t().some(t=>t.name.trim()===e)?``:e:``},[c,l]=v(Math.round((e.cfg.progressIntervalMs??6e5)/6e4)),[u,d]=v(e.cfg.progressMinChars??4e3),[f,p]=v(e.cfg.contextTokenBudget==null?null:Math.round(e.cfg.contextTokenBudget/1e3)),[m,h]=v(e.cfg.contextWindowTokens?Math.round(e.cfg.contextWindowTokens/1e3):0),[g,_]=v(e.cfg.maxSpawnDepth??3),[b,x]=v((e.cfg.tasks??[]).map(e=>({...e}))),[S,C]=v(``),w=()=>(e.cfg.agents??[]).map(e=>e.id),ee=()=>{let e={};for(let n of t()){if(!n.name.trim())return C(`provider name is required`),null;if(n.baseUrl&&!/^https?:\/\//.test(n.baseUrl))return C(`provider ${n.name}: baseUrl must start with http(s)://`),null;e[n.name.trim()]={baseUrl:n.baseUrl,...n.apiKey?{apiKey:n.apiKey}:{},...n.model?{model:n.model}:{}}}return e},te=async t=>{t.preventDefault(),C(``);let n=ee();if(!n)return;let i=b().filter(e=>e.id?.trim()||e.prompt?.trim()).map((e,t)=>({id:e.id?.trim()||`task-${t+1}`,agent:e.agent,schedule:e.schedule,prompt:e.prompt,...e.forked?{forked:!0}:{}}));for(let e of i){if(!e.agent){C(`task "${e.id}": agent is required`);return}if(!e.schedule?.trim()){C(`task "${e.id}": schedule is required`);return}}try{await $(`/api/config`,{method:`PUT`,headers:{"content-type":`application/json`},body:JSON.stringify({providers:n,defaultProvider:r()||void 0,progressIntervalMs:Math.max(1,c())*6e4,progressMinChars:Math.max(100,u()),...f()==null?{}:{contextTokenBudget:Math.max(1,f())*1e3},...m()>0?{contextWindowTokens:m()*1e3}:{},maxSpawnDepth:Math.max(0,g()),tasks:i})}),e.onSaved(),e.onClose()}catch(e){C(e.message)}},T=(e,t,n,r)=>(()=>{var i=Sp(),a=i.firstChild;return L(i,`title`,r),z(i,e,a),a.$$input=e=>n(Number(e.currentTarget.value)),a.value=t,i})();return M(cm,{title:`settings`,get onClose(){return e.onClose},get children(){var v=wp(),ee=v.firstChild,ne=ee.firstChild.nextSibling,E=ne.nextSibling;E.firstChild;var D=E.nextSibling.firstChild.firstChild.nextSibling;D.firstChild;var O=ee.nextSibling,re=O.firstChild.nextSibling,k=re.firstChild,ie=k.firstChild.nextSibling,ae=O.nextSibling,oe=ae.firstChild.nextSibling,se=ae.nextSibling;se.firstChild;var ce=se.nextSibling,A=ce.firstChild.nextSibling.firstChild;A.firstChild;var le=A.nextSibling,j=ce.nextSibling;return v.addEventListener(`submit`,te),z(ee,M(ye,{get each(){return t()},children:(e,r)=>(()=>{var i=Tp(),a=i.firstChild,o=a.nextSibling,s=o.nextSibling,c=s.nextSibling,l=c.nextSibling;return a.$$input=e=>n(t().map((t,n)=>n===r?{...t,name:e.currentTarget.value}:t)),o.$$input=e=>n(t().map((t,n)=>n===r?{...t,baseUrl:e.currentTarget.value}:t)),s.$$input=e=>n(t().map((t,n)=>n===r?{...t,apiKey:e.currentTarget.value}:t)),c.$$input=e=>n(t().map((t,n)=>n===r?{...t,model:e.currentTarget.value}:t)),l.$$click=()=>n(t().filter((e,t)=>t!==r)),y(()=>a.value=e().name),y(()=>o.value=e().baseUrl),y(()=>s.value=e().apiKey),y(()=>c.value=e().model),i})()}),ne),ne.$$click=()=>n([...t(),{name:``,baseUrl:``,apiKey:``,model:``}]),z(E,M(N,{each:bm,children:e=>(()=>{var a=Ep();return a.firstChild,a.$$click=()=>{let a=t().filter(t=>t.name!==e.key);n([...a,{name:e.key,baseUrl:e.url,apiKey:``,model:e.model}]),r()||i(e.key)},z(a,()=>e.label,null),y(()=>L(a,`title`,`fill a ${e.label} row — ${e.url}${e.model?` (model: ${e.model})`:``}`)),a})()}),null),D.addEventListener(`change`,e=>i(e.currentTarget.value)),z(D,M(N,{get each(){return o()},children:e=>(()=>{var t=Tu();return t.value=e,z(t,e),t})()}),null),z(ee,M(P,{get when(){return s()},get children(){var e=Cp(),t=e.firstChild.nextSibling,n=t.nextSibling.nextSibling,r=n.nextSibling.nextSibling;return z(t,s),z(e,()=>s()===a()?` — the dropdown above cannot show it.`:` — it was replaced by your selection.`,n),z(r,s),e}}),null),z(re,()=>T(`progress interval (min)`,c(),e=>l(e),`how often the harness asks for a progress report`),k),z(re,()=>T(`progress min chars`,u(),e=>d(e),`progress prompts wait for this much real output`),k),ie.$$input=e=>p(e.currentTarget.value===``?null:Number(e.currentTarget.value)),z(re,()=>T(`context window (k tok)`,m(),e=>h(e),`model's real window — 0/blank hides the % gauge`),null),z(re,()=>T(`max spawn depth`,g(),e=>_(e),`sub-agent nesting limit (0 = no spawning)`),null),z(ae,M(P,{get when(){return b().length>0},get children(){return M(ye,{get each(){return b()},children:(e,t)=>(()=>{var n=Dp(),r=n.firstChild,i=r.firstChild,a=i.nextSibling,o=a.nextSibling,s=o.nextSibling,c=s.firstChild,l=s.nextSibling,u=r.nextSibling;return i.$$input=e=>x(b().map((n,r)=>r===t?{...n,id:e.currentTarget.value}:n)),a.$$input=e=>x(b().map((n,r)=>r===t?{...n,agent:e.currentTarget.value}:n)),o.$$input=e=>x(b().map((n,r)=>r===t?{...n,schedule:e.currentTarget.value}:n)),c.addEventListener(`change`,e=>x(b().map((n,r)=>r===t?{...n,forked:e.currentTarget.checked}:n))),l.$$click=()=>x(b().filter((e,n)=>n!==t)),u.$$input=e=>x(b().map((n,r)=>r===t?{...n,prompt:e.currentTarget.value}:n)),y(()=>i.value=e().id),y(()=>a.value=e().agent),y(()=>o.value=e().schedule),y(()=>c.checked=!!e().forked),y(()=>u.value=e().prompt),n})()})}}),oe),oe.$$click=()=>x([...b(),{id:``,agent:w()[0]??``,schedule:`every 30m`,prompt:``}]),z(se,M(N,{get each(){return e.cfg.agents??[]},children:e=>(()=>{var t=kp(),n=t.firstChild,r=n.nextSibling;return z(n,()=>e.id),z(r,()=>e.workspace),z(t,M(P,{get when(){return e.parent},get children(){var t=Op();return t.firstChild,z(t,()=>e.parent,null),t}}),null),t})()}),null),z(A,()=>e.cfg.version??`unknown`,null),le.$$click=async e=>{try{C(``);let t=e.currentTarget;t.disabled=!0,t.textContent=`updating…`;let n=await $(`/api/update/restart`,{method:`POST`});if(!n.ok)throw Error((await n.json()).error??`restart failed`);t.textContent=`restarting…`;let r=!1;for(let e=0;e<90&&!r;e++){await new Promise(e=>setTimeout(e,1e3));try{let e=await $(`/api/version`);e.version&&e.version!==`0.29.14`&&(r=!0,window.location.reload())}catch{}}if(!r)throw Error(`restart timeout — new server did not come up`)}catch(e){C(e.message)}finally{e.currentTarget.disabled=!1,e.currentTarget.textContent=`update & restart`}},z(v,M(P,{get when(){return S()},get children(){var e=Wf();return z(e,S),e}}),j),y(()=>D.value=r()),y(()=>ie.value=f()??``),v}})}Ce([`click`,`pointerdown`,`dblclick`,`input`,`keydown`]),Se(()=>M(qp,{}),document.getElementById(`root`));export{Ml as t};
30
+ //# sourceMappingURL=index-D0iN3Fa9.js.map