@ailog/cli 0.2.6 → 0.3.0

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.
@@ -0,0 +1 @@
1
+ *{box-sizing:border-box}:root{--bg-0: oklch(.145 .005 264);--bg-1: oklch(.175 .006 264);--bg-2: oklch(.205 .007 264);--bg-3: oklch(.235 .008 264);--bg-4: oklch(.265 .009 264);--bg-input: oklch(.195 .007 264);--border: oklch(.27 .01 264);--border-strong: oklch(.34 .012 264);--border-subtle: oklch(.22 .008 264);--fg: oklch(.965 .002 264);--fg-muted: oklch(.74 .006 264);--fg-dim: oklch(.55 .008 264);--fg-faint: oklch(.42 .008 264);--accent: oklch(.72 .16 254);--accent-soft: oklch(.72 .16 254 / .14);--accent-fg: oklch(.78 .13 254);--tool: oklch(.74 .16 305);--tool-soft: oklch(.74 .16 305 / .14);--text-out: oklch(.78 .14 165);--text-out-soft: oklch(.78 .14 165 / .14);--reasoning: oklch(.82 .13 80);--reasoning-soft: oklch(.82 .13 80 / .14);--subagent: oklch(.78 .13 200);--subagent-soft: oklch(.78 .13 200 / .14);--error: oklch(.7 .18 25);--error-soft: oklch(.7 .18 25 / .16);--warn: oklch(.78 .13 80);--warn-soft: oklch(.78 .13 80 / .14);--ok: oklch(.74 .13 152);--ok-soft: oklch(.74 .13 152 / .14);--radius-sm: 4px;--radius: 6px;--radius-md: 8px;--radius-lg: 10px;--shadow-card: 0 1px 0 0 oklch(1 0 0 / .03) inset, 0 1px 2px oklch(0 0 0 / .4);--mono: ui-monospace, "JetBrains Mono", "SF Mono", Menlo, Consolas, monospace;--sans: ui-sans-serif, "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif}html,body,#root{height:100%;margin:0}body{background:var(--bg-0);color:var(--fg);font-family:var(--sans);font-size:13px;line-height:1.5;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;overflow:hidden;font-feature-settings:"cv11","ss01","ss03"}.dot-bg{background-image:radial-gradient(oklch(1 0 0 / .025) 1px,transparent 1px);background-size:24px 24px;background-position:-1px -1px}.app{display:grid;grid-template-rows:44px 1fr;height:100vh}.topbar{display:flex;align-items:center;gap:12px;padding:0 12px;border-bottom:1px solid var(--border);background:var(--bg-1);-webkit-app-region:drag}.brand{display:flex;align-items:center;gap:8px;font-family:var(--mono);font-size:12px;letter-spacing:.02em;color:var(--fg)}.brand .logo{width:22px;height:22px;border-radius:var(--radius-sm);background:linear-gradient(135deg,var(--accent),var(--tool));display:grid;place-items:center;color:#0f1216;font-weight:700;font-size:11px;letter-spacing:0}.brand .sep{width:1px;height:14px;background:var(--border-strong);margin:0 4px}.brand .ver{color:var(--fg-faint);font-size:11px}.topbar .url{font-family:var(--mono);font-size:11px;color:var(--fg-dim);padding:3px 8px;border-radius:999px;background:var(--bg-2);border:1px solid var(--border);display:inline-flex;align-items:center;gap:6px}.topbar .url .dot{width:6px;height:6px;border-radius:999px;background:var(--ok);box-shadow:0 0 8px var(--ok)}.topbar-spacer{flex:1}.topbar-actions{display:flex;gap:4px;align-items:center;-webkit-app-region:no-drag}.btn{display:inline-flex;align-items:center;gap:6px;padding:5px 10px;border-radius:var(--radius);font-family:var(--sans);font-size:12px;background:transparent;border:1px solid transparent;color:var(--fg-muted);cursor:pointer;transition:.1s ease;-webkit-user-select:none;user-select:none;white-space:nowrap}.btn:hover{background:var(--bg-2);color:var(--fg)}.btn:active{background:var(--bg-3)}.btn.ghost-border{border-color:var(--border);background:var(--bg-2)}.btn.ghost-border:hover{background:var(--bg-3);border-color:var(--border-strong)}.btn.danger:hover{color:var(--error);border-color:var(--error-soft);background:var(--error-soft)}.btn .sh{font-family:var(--mono);font-size:10px;color:var(--fg-faint);padding:1px 4px;border-radius:3px;background:#ffffff0a;border:1px solid var(--border-subtle);margin-left:4px}.btn.icon{padding:5px 6px}.tabs{display:flex;padding:2px;background:var(--bg-2);border-radius:var(--radius);border:1px solid var(--border)}.tabs button{background:transparent;border:0;color:var(--fg-dim);font-size:12px;padding:4px 10px;border-radius:4px;cursor:pointer;display:inline-flex;align-items:center;gap:6px;font-family:var(--sans)}.tabs button.active{background:var(--bg-3);color:var(--fg);box-shadow:0 0 0 1px var(--border-strong)}.body{display:grid;grid-template-columns:260px 1fr 1.35fr;grid-template-rows:auto 1fr;height:100%;min-height:0}.body .sidebar{grid-row:1 / 3;grid-column:1}.body .thread-head-full{grid-column:2 / 4;grid-row:1}.body .middle{grid-column:2;grid-row:2;min-height:0;overflow:hidden;display:grid;grid-template-rows:1fr;background:var(--bg-0);border-right:1px solid var(--border)}.body .middle>*{min-height:0}.body .run-details-pane{grid-column:3;grid-row:2;min-height:0;border-left:1px solid var(--border);display:grid;grid-template-rows:1fr;overflow:hidden}.body .run-details-pane>*{min-height:0;min-width:0}.body>.empty-spread{grid-column:2 / 4;grid-row:2}.app.focus-thread .sidebar .run-card.active,.app.focus-step .middle .step-group.selected,.app.focus-step .middle .run-row-compact.selected,.app.focus-step .middle .ttl-runline.selected{background:var(--accent-soft)}.focus-hint{position:fixed;bottom:12px;left:50%;transform:translate(-50%);display:inline-flex;align-items:center;gap:6px;padding:5px 10px;background:var(--bg-2);border:1px solid var(--border);border-radius:999px;font-family:var(--mono);font-size:10.5px;color:var(--fg-muted);pointer-events:none;opacity:0;transition:opacity .18s;z-index:50}.focus-hint.visible{opacity:1}.focus-hint .kbd{font-family:var(--mono);font-size:9.5px;background:var(--bg-3);border:1px solid var(--border-strong);border-radius:3px;padding:1px 4px;color:var(--fg)}.thread-head-full{display:flex;flex-direction:column;gap:4px;padding:6px 18px;border-bottom:1px solid var(--border);background:var(--bg-1)}.th-row1{display:flex;align-items:center;gap:12px;min-height:22px}.thread-head-title{font-size:13px;font-weight:600;color:var(--fg);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:1;min-width:0;line-height:22px}.th-row1 .tabs{flex-shrink:0;padding:1px;border-radius:4px}.th-row1 .tabs button{font-size:10.5px;padding:2px 7px;gap:4px;border-radius:3px}.th-row1 .tabs button svg{width:10px;height:10px}.th-row2{display:flex;align-items:center;gap:8px;font-family:var(--mono);font-size:10.5px;color:var(--fg-faint);white-space:nowrap;overflow-x:auto;overflow-y:hidden;min-height:18px;scrollbar-width:none}.th-row2::-webkit-scrollbar{display:none}.th-row2>*{flex-shrink:0}.th-sep{width:1px;height:11px;background:var(--border)}.th-id{cursor:pointer;border-radius:3px;padding:1px 4px;margin:0 -4px;transition:background .1s}.th-id:hover{background:var(--bg-2)}.th-id .mono.auto{color:var(--fg-faint);font-style:italic}.th-stat{color:var(--fg-faint)}.th-stat .v{color:var(--fg-muted)}.th-stat .th-k{color:var(--fg-faint);opacity:.7;margin-right:1px}.th-bad{color:var(--error);background:var(--error-soft);border-radius:3px;padding:1px 5px;font-size:10px}.th-meta-label{color:var(--fg-faint);letter-spacing:.04em;font-size:9.5px;text-transform:uppercase}.th-meta-empty{color:var(--fg-faint);opacity:.55;font-style:italic}.th-meta-pills{display:inline-flex;gap:4px}.th-pill{background:var(--bg-2);border:1px solid var(--border);border-radius:3px;padding:0 5px;font-size:10px;display:inline-flex;gap:3px;align-items:baseline;line-height:14px}.th-pill .k{color:var(--fg-faint)}.th-pill .v{color:var(--fg-muted)}.sidebar{border-right:1px solid var(--border);background:var(--bg-1);display:grid;grid-template-rows:36px 36px 1fr;min-height:0}.sidebar-head{display:flex;align-items:center;justify-content:space-between;padding:0 12px;font-size:11px;font-family:var(--mono);letter-spacing:.08em;color:var(--fg-faint);text-transform:uppercase;border-bottom:1px solid var(--border)}.sidebar-head .count{font-family:var(--mono);font-size:11px;color:var(--fg-dim);background:var(--bg-2);padding:1px 6px;border-radius:999px;border:1px solid var(--border)}.sidebar-search{display:flex;align-items:center;gap:6px;padding:0 10px;border-bottom:1px solid var(--border)}.sidebar-search input{flex:1;background:transparent;border:0;color:var(--fg);font:inherit;outline:none;padding:6px 0}.sidebar-search input::placeholder{color:var(--fg-faint)}.sidebar-search .kbd{font-family:var(--mono);font-size:10px;color:var(--fg-faint);border:1px solid var(--border);padding:1px 5px;border-radius:3px;background:var(--bg-2)}.runs{overflow-y:auto;padding:4px}.run-card{display:block;padding:9px 10px;border-radius:var(--radius);cursor:pointer;position:relative;border:1px solid transparent}.run-card+.run-card{margin-top:1px}.run-card:hover{background:var(--bg-2)}.run-card.active{border-color:transparent}.run-card.active:before{content:"";position:absolute;left:-1px;top:8px;bottom:8px;width:2px;border-radius:2px;background:var(--accent)}.run-status{display:none}@keyframes pulse{0%,to{box-shadow:0 0 0 3px #5da7ff29;box-shadow:0 0 0 3px oklch(.72 .16 254 / .16)}50%{box-shadow:0 0 0 6px #5da7ff05;box-shadow:0 0 0 6px oklch(.72 .16 254 / .02)}}.run-main{min-width:0}.run-title{font-size:12.5px;color:var(--fg);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.35}.run-meta{font-family:var(--mono);font-size:10.5px;color:var(--fg-faint);display:flex;gap:8px;margin-top:4px;align-items:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.run-meta .fn{color:var(--fg-dim)}.run-meta .sep{color:var(--fg-faint);opacity:.6}.run-meta .err{color:var(--error)}.run-meta .warn{color:var(--warn)}.run-time{font-family:var(--mono);font-size:10.5px;color:var(--fg-faint);align-self:start;padding-top:1px}.type-badge{font-family:var(--mono);font-size:9.5px;letter-spacing:.05em;padding:1px 5px;border-radius:3px;border:1px solid var(--border);color:var(--fg-dim);background:var(--bg-2);text-transform:uppercase}.type-badge.stream{color:#59e0ad;border-color:#49d3a159;background:#49d3a11a}.type-badge.generate{color:#d5b1ff;color:oklch(.82 .14 305);border-color:#c28efb59;background:#c28efb1a}.chat-scroll{overflow-y:auto;padding:14px 16px 80px}.chat-inner{display:grid;gap:8px}.run-divider{text-align:center;font-family:var(--mono);font-size:10.5px;color:var(--fg-faint);margin:12px 0 6px;position:relative}.run-divider:before,.run-divider:after{content:"";position:absolute;top:50%;width:calc(50% - 36px);height:1px;background:var(--border)}.run-divider:before{left:0}.run-divider:after{right:0}.run-divider span{background:var(--bg-0);padding:0 8px;position:relative;z-index:1}.chat-scroll .md pre{white-space:pre-wrap;word-break:break-word;overflow-x:hidden}.chat-scroll .cm-tool-line,.chat-scroll .cm-body{overflow-wrap:anywhere;word-break:break-word}.step-group{position:relative;padding:6px 10px 6px 14px;border-radius:8px;border-left:2px solid transparent;display:grid;gap:6px;cursor:pointer;transition:background .12s,border-color .12s}.step-group:hover{border-left-color:var(--border-strong);background:#ffffff04}.step-group.selected{border-left-color:var(--accent)}.step-group .cm{cursor:pointer}.step-group .cm.focused{outline:1px dashed var(--accent);outline-offset:-1px}.cm{border-radius:8px;padding:8px 12px;border:1px solid var(--border);background:var(--bg-1);cursor:pointer;font-size:13px;line-height:1.55;transition:border-color .1s ease,background .1s ease}.cm:hover{border-color:var(--border-strong)}.cm.selected{border-color:var(--accent);box-shadow:0 0 0 2px var(--accent-soft)}.cm-meta{display:flex;align-items:center;gap:6px;font-family:var(--mono);font-size:10px;color:var(--fg-faint);margin-bottom:4px;text-transform:uppercase;letter-spacing:.04em}.cm-meta>*{white-space:nowrap}.cm-meta .sep{opacity:.55;text-transform:none}.cm-meta .tc-id{font-family:var(--mono);font-size:9.5px;padding:0 5px;border-radius:3px;background:#c28efb29;color:#d5b1ff;color:oklch(.82 .14 305);text-transform:none;letter-spacing:0}.cm-meta .tc-id.matched{background:#49d3a129;color:#70e9b9}.cm-body{color:var(--fg)}.cm-body .md{font-size:13px}.cm-user{justify-self:end;max-width:86%;background:var(--accent-soft);border-color:#5da7ff59;border-color:oklch(.72 .16 254 / .35);margin-left:14%}.cm-user .cm-meta{color:#83bbff;color:oklch(.78 .13 254)}.cm-user .cm-body{color:var(--fg);white-space:pre-wrap}.cm-text{background:var(--bg-1)}.cm-tool-call{background:#c28efb12;border-color:#c28efb40}.cm-tool-call .cm-meta{color:var(--tool)}.cm-tool-call .cm-tool-line{font-family:var(--mono);font-size:12.5px;color:var(--fg)}.cm-tool-call .tc-name{color:#dcbfff;color:oklch(.85 .14 305);font-weight:600}.cm-tool-call .tc-args{color:var(--fg-muted)}.cm-tool-result{background:#49d3a10f;border-color:#49d3a138}.cm-tool-result .cm-meta{color:var(--text-out)}.cm-tool-result .cm-tool-line{font-family:var(--mono);font-size:12.5px;color:var(--fg)}.cm-tool-result .tc-name{color:#70e9b9;font-weight:600}.cm-tool-result .tc-args{color:var(--fg-muted)}.cm-reasoning{background:#f0ba590d;border-color:#f0ba5938}.cm-reasoning .cm-meta{color:var(--reasoning)}.cm-reasoning-text{color:var(--fg-muted);font-style:italic;font-size:12.5px;line-height:1.5}.cm-error{background:#fa686314;border-color:#fa68634d}.cm-error .cm-meta{color:var(--error)}.cm-error .cm-body{color:var(--error);font-family:var(--mono);font-size:12px}.cm-aborted{background:#e3ad4b12;border-color:#e3ad4b4d}.cm-aborted .cm-meta{color:var(--warn)}.cm-aborted .cm-body{color:var(--warn);font-family:var(--mono);font-size:12px}.rv{display:grid;grid-template-rows:auto 1fr;min-height:0;min-width:0;height:100%;background:var(--bg-0);overflow:hidden}.rv.rv-inspector{grid-template-rows:auto auto 1fr auto}.rh{padding:12px 16px 10px;border-bottom:1px solid var(--border);background:var(--bg-1);display:grid;gap:8px;min-width:0}.rh-row1{display:flex;align-items:center;gap:10px;min-width:0}.rh-title{font-size:14px;font-weight:600;color:var(--fg);flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.rh-row2{display:flex;flex-wrap:wrap;gap:12px;font-family:var(--mono);font-size:10.5px;color:var(--fg-faint);align-items:center}.rh-row2>span{white-space:nowrap}.rh-row2 .k{color:var(--fg-faint);margin-right:3px}.rh-row2 .v{color:var(--fg-muted)}.rh-more{background:transparent;border:1px solid var(--border);color:var(--fg-faint);font-family:var(--mono);font-size:10px;padding:2px 8px;border-radius:3px;cursor:pointer;margin-left:auto}.rh-more:hover{color:var(--fg-muted);border-color:var(--border-strong)}.rh-meta{display:flex;flex-wrap:wrap;gap:6px;align-items:center;padding-top:4px}.rh-id{font-family:var(--mono);font-size:10.5px;color:var(--fg-dim);padding:2px 6px;background:var(--bg-2);border:1px solid var(--border);border-radius:3px;cursor:pointer;display:inline-flex;align-items:center;gap:4px}.rh-id:hover{color:var(--fg)}.rv-body{overflow-y:auto;min-height:0}.rv-toolbar{display:flex;align-items:center;gap:4px;margin-bottom:10px;padding:0 2px}.rv-toolbar-muted{font-family:var(--mono);font-size:11px;color:var(--fg-faint)}.rv-mini-btn{background:var(--bg-2);border:1px solid var(--border);color:var(--fg-dim);font-family:var(--mono);font-size:10.5px;padding:3px 9px;border-radius:4px;cursor:pointer;display:inline-flex;align-items:center;gap:4px}.rv-mini-btn:hover{color:var(--fg);border-color:var(--border-strong)}.rv-mini-btn:disabled{opacity:.4;cursor:not-allowed}.rv-compact-body{padding:14px 14px 60px;display:grid;gap:4px}.rv-compact-body .step-body{grid-template-columns:1fr}.rv-compact-body .step-pane+.step-pane{border-left:0;border-top:1px solid var(--border)}.rv-compact-body .step-summary-aside{gap:8px;font-size:10.5px}.rv-notebook-body{padding:14px 14px 60px;display:grid;gap:12px}.nb-cell{display:grid;grid-template-columns:28px 1fr;gap:12px;position:relative}.nb-cell-rail{display:grid;justify-content:center;position:relative}.nb-cell-rail:after{content:"";position:absolute;top:28px;bottom:-12px;left:50%;transform:translate(-50%);width:2px;background:var(--border)}.nb-cell:last-child .nb-cell-rail:after{display:none}.nb-cell-rail .step-num{width:24px;height:24px;font-size:11px;z-index:1}.nb-cell-card{background:var(--bg-1);border:1px solid var(--border);border-radius:var(--radius-md);overflow:hidden;transition:border-color .12s,box-shadow .12s}.nb-cell.focused .nb-cell-card{border-color:var(--accent);box-shadow:0 0 0 2px var(--accent-soft)}.nb-cell.err .nb-cell-card{border-color:#fa686366}.nb-cell.ab .nb-cell-card{border-color:#e3ad4b66}.nb-cell-head{display:flex;align-items:center;gap:8px;padding:9px 12px;background:var(--bg-2);border-bottom:1px solid var(--border)}.nb-cell.sub .nb-cell-head{background:#17d0d80f}.nb-meta{font-family:var(--mono);font-size:10.5px;color:var(--fg-faint);white-space:nowrap}.nb-meta .k{color:var(--fg-faint)}.nb-cell-sec{padding:12px 14px}.nb-cell-sec+.nb-cell-sec{border-top:1px dashed var(--border-subtle)}.nb-sec-head{display:flex;align-items:center;gap:8px;font-family:var(--mono);font-size:10.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--fg-faint);margin-bottom:8px}.nb-sec-aside{color:var(--fg-dim);font-family:var(--mono);text-transform:none;letter-spacing:0}.rv-inspector{grid-template-rows:auto 1fr}.rv-inspector-body{padding:14px 14px 60px;display:grid;grid-template-columns:minmax(0,1fr);gap:8px}.rv-inspector-body>*{min-width:0}.ic{border:1px solid var(--border);border-radius:var(--radius-md);background:var(--bg-1);overflow:hidden;transition:border-color .12s}.ic:hover{border-color:var(--border-strong)}.ic.focused{border-color:var(--accent);box-shadow:0 0 0 2px var(--accent-soft)}.ic.err{border-color:#fa686366}.ic.ab{border-color:#e3ad4b66}.ic.sub .ic-head{background:linear-gradient(90deg,oklch(.78 .13 200 / .06),transparent 240px)}.ic-head{display:flex;align-items:center;gap:8px;padding:8px 12px;cursor:pointer;-webkit-user-select:none;user-select:none;min-width:0}.ic-head:hover{background:var(--bg-2)}.ic.open .ic-head{border-bottom:1px solid var(--border)}.ic-chev{color:var(--fg-faint);transition:transform .12s;flex-shrink:0}.ic-chev.open{transform:rotate(90deg)}.ic-meta{font-family:var(--mono);font-size:10.5px;color:var(--fg-faint);white-space:nowrap;flex-shrink:0}.ic-summary{font-size:12px;color:var(--fg-dim);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0;flex:1;font-family:var(--sans);margin-left:6px}.ic-body{background:var(--bg-0)}.ic-finish{padding:8px 14px;font-family:var(--mono);font-size:10.5px;color:var(--fg-muted);border-bottom:1px dashed var(--border-subtle);background:var(--bg-1);display:flex;gap:5px;flex-wrap:wrap;align-items:center}.ic-finish .k{color:var(--fg-faint);margin-right:2px}.ic-finish .sep{opacity:.5}.ic-io{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr))}.ic-io>.ic-section{padding:12px 14px}.ic-io>.ic-section+.ic-section{border-top:1px solid var(--border);border-left:0}@supports (selector(:has(*))){.ic-io:has(>.ic-section:nth-child(2))>.ic-section+.ic-section{border-top:1px solid var(--border)}}@container (min-width: 580px){.ic-io>.ic-section+.ic-section{border-top:0;border-left:1px solid var(--border)}}.ic-body{container-type:inline-size}.ic-section{padding:12px 14px}.ic-section-head{display:flex;gap:8px;align-items:center;font-family:var(--mono);font-size:10.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--fg-faint);margin-bottom:10px}.ic-section-aside{color:var(--fg-dim);text-transform:none;letter-spacing:0;font-size:10.5px}.rv-mini-btn.icon-only{padding:4px 6px;width:28px;justify-content:center}.step-pane-root{display:grid;grid-template-rows:auto auto 1fr;min-height:0;background:var(--bg-0);overflow:hidden}.step-pane-head{padding:7px 12px;background:var(--bg-1);border-bottom:1px solid var(--border);display:grid;gap:0}.sph-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap;min-height:26px}.sph-row-main{gap:14px}.sph-row-crumb{gap:6px 10px;font-size:11.5px;color:var(--fg-muted);min-width:0;justify-content:space-between}.sph-row-left,.sph-row-right{display:flex;align-items:center;gap:7px;flex-wrap:nowrap;min-width:0}.sph-row-left{flex:0 1 auto;min-width:0}.sph-row-right{flex:0 0 auto}.sph-sep{width:1px;height:14px;background:var(--border);display:inline-block}.sph-row-crumb svg{color:var(--fg-faint);flex-shrink:0}.sph-crumb-thread{color:var(--fg);font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:240px}.sph-crumb-run,.sph-crumb-step{color:var(--fg-muted);white-space:nowrap}.sph-crumb-run .mono,.sph-crumb-step .mono{color:var(--fg);font-variant-numeric:tabular-nums;font-weight:500}.sph-crumb-of{color:var(--fg-faint);font-family:var(--mono);font-variant-numeric:tabular-nums}.sph-crumb-fn{font-family:var(--mono);font-size:10.5px;color:var(--fg-muted);background:var(--bg-2);border:1px solid var(--border);padding:1px 5px;border-radius:3px;white-space:nowrap;max-width:160px;overflow:hidden;text-overflow:ellipsis}.sph-status{display:inline-flex;align-items:center;gap:4px;font-size:10.5px;text-transform:uppercase;letter-spacing:.05em;font-weight:500;padding:2px 6px;border-radius:3px;margin-left:4px}.sph-status.err{background:var(--error-soft);color:var(--error)}.sph-status.ab{background:var(--warn-soft);color:var(--warn)}.sph-ts{font-family:var(--mono);font-size:11px;color:var(--fg-faint);white-space:nowrap;margin-left:4px}.sph-id-btn{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;background:transparent;border:1px solid var(--border);color:var(--fg-muted);border-radius:4px;cursor:pointer;padding:0;margin-left:2px;transition:color .12s,background .12s,border-color .12s}.sph-id-btn:hover{color:var(--fg);background:var(--bg-2);border-color:var(--border-strong)}.sph-title{display:inline-flex;align-items:center;gap:7px;min-width:0;color:var(--fg-muted)}.sph-step-label{font-size:12px;font-weight:500;color:var(--fg-muted);letter-spacing:.01em;line-height:1;white-space:nowrap}.sph-step-n{color:var(--fg);font-family:var(--mono);font-variant-numeric:tabular-nums;font-weight:600}.sph-step-of{color:var(--fg-faint);font-family:var(--mono);font-variant-numeric:tabular-nums}.sph-metric{display:inline-flex;align-items:baseline;gap:5px;font-family:var(--mono);font-size:12.5px;color:var(--fg);white-space:nowrap;font-variant-numeric:tabular-nums;letter-spacing:-.005em}.sph-metric-l{font-size:9.5px;color:var(--fg-faint);text-transform:uppercase;letter-spacing:.06em;font-weight:500}.sph-metric-v{color:var(--fg);font-weight:500}.sph-row-sub{gap:8px;font-family:var(--mono);font-size:10.5px;color:var(--fg-faint)}.sph-sub{display:inline-flex;align-items:center;gap:4px}.sph-sub svg{color:var(--fg-faint)}.sph-sub-sep{color:var(--fg-faint);opacity:.5}.sph-id{cursor:pointer;color:var(--fg-dim);border-radius:3px;padding:1px 4px;margin:-1px -4px;transition:color .12s,background .12s}.sph-id:hover{color:var(--fg-muted);background:var(--bg-2)}.sph-id svg{color:var(--fg-faint);opacity:.7}.sph-id:hover svg{opacity:1}.sph-meta{font-family:var(--mono);font-size:10.5px;color:var(--fg-faint);white-space:nowrap}.sph-tabs{background:var(--bg-1);border-bottom:1px solid var(--border);padding:0 12px}.step-pane-body{overflow-y:auto;min-height:0}.sp-io{padding:14px;display:grid;gap:12px}.sp-meta-strip{display:flex;align-items:center;flex-wrap:wrap;gap:8px;padding:2px 0 0}.sp-meta-item{font-family:var(--mono);font-size:11px;color:var(--fg-muted);white-space:nowrap}.sp-meta-item .sp-meta-k{color:var(--fg-faint);text-transform:uppercase;letter-spacing:.05em;font-size:9.5px;margin-right:4px}.sp-section{background:var(--bg-1);border:1px solid var(--border);border-radius:var(--radius-md);padding:12px 14px}.sp-section-head{display:flex;align-items:center;gap:8px;font-family:var(--mono);font-size:10.5px;text-transform:uppercase;letter-spacing:.06em;color:var(--fg-faint);margin-bottom:10px}.sp-padded{padding:14px 18px 60px}.sp-meta-grid{margin-top:12px;padding:10px 12px;background:var(--bg-2);border:1px solid var(--border);border-radius:6px;font-family:var(--mono);font-size:11.5px;color:var(--fg-muted);display:grid;grid-template-columns:auto 1fr;gap:6px 14px}.sp-meta-grid .k{color:var(--fg-faint)}.sp-block-head{margin-top:18px;margin-bottom:6px;font-family:var(--mono);font-size:10.5px;color:var(--fg-faint);letter-spacing:.04em;text-transform:uppercase}.sp-empty{font-family:var(--mono);font-size:11.5px;color:var(--fg-faint);font-style:italic;padding:6px 10px;background:var(--bg-2);border:1px dashed var(--border);border-radius:4px;width:fit-content}.sp-raw-grid{display:flex;flex-direction:column;gap:4px}.raw-row{display:flex;align-items:center;gap:10px;padding:5px 10px;background:var(--bg-2);border:1px solid var(--border);border-radius:4px;font-family:var(--mono);font-size:11.5px}.raw-row.blob{border-left:2px solid var(--accent)}.raw-row-k{color:var(--fg-faint);min-width:110px;flex-shrink:0}.raw-row-empty{color:var(--fg-faint);opacity:.6;font-style:italic}.raw-blob-chip{display:inline-flex;align-items:center;gap:4px;color:var(--fg-muted);background:var(--accent-soft);padding:2px 6px;border-radius:3px;font-size:11px}.raw-row-inline{display:flex;gap:8px;align-items:baseline;color:var(--fg-muted);flex:1;min-width:0}.raw-inline-len{color:var(--fg-faint);font-size:10.5px;flex-shrink:0}.raw-inline-peek{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;color:var(--fg-muted);opacity:.85}.run-meta .mono.tiny{font-family:var(--mono);font-size:9.5px;color:var(--fg-faint);letter-spacing:-.01em}.run-meta .mono.tiny.auto{font-style:italic;opacity:.7}.step-list{overflow-y:auto;padding:12px 14px 60px;display:grid;gap:14px}.step-list-run{border:1px solid var(--border);border-radius:var(--radius-md);background:var(--bg-1);overflow:hidden}.step-list-run-head{padding:9px 12px;border-bottom:1px solid var(--border);background:var(--bg-2);display:flex;align-items:center;gap:10px}.step-list-run-title{font-size:12.5px;color:var(--fg);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:1}.step-list-run-meta{display:flex;align-items:center;gap:6px;font-family:var(--mono);font-size:10.5px;color:var(--fg-faint);flex-shrink:0}.step-list-run-meta .sep{opacity:.5}.step-list-rows{display:grid}.step-list-row{display:flex;align-items:center;gap:8px;padding:8px 12px;border-top:1px solid var(--border-subtle);cursor:pointer;transition:background .1s;min-width:0}.step-list-row:first-child{border-top:0}.step-list-row:hover{background:var(--bg-2)}.step-list-row.selected{background:var(--accent-soft);box-shadow:inset 2px 0 0 var(--accent)}.step-list-row.errored{box-shadow:inset 2px 0 0 var(--error)}.step-list-row.aborted{box-shadow:inset 2px 0 0 var(--warn)}.step-list-row .step-num{width:20px;height:20px;font-size:10.5px;border-radius:4px}.step-list-row .model-badge{flex-shrink:0;color:var(--fg-dim)}.step-list-summary{font-size:12px;color:var(--fg-muted);flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}.step-list-aside{display:inline-flex;gap:4px;font-family:var(--mono);font-size:10.5px;color:var(--fg-faint);white-space:nowrap;flex-shrink:0}.step-list-aside .sep{opacity:.5}.step-num.small{width:18px;height:18px;font-size:10px;border-radius:4px}.step-num.err{background:var(--error-soft);color:var(--error);border-color:#fa686380}.step-num.ab{background:var(--warn-soft);color:var(--warn);border-color:#e3ad4b80}.step-num.sub{background:var(--subagent-soft);color:var(--subagent);border-color:#17d0d880}.run-list-mid{overflow-y:auto;padding:8px 12px 60px;display:flex;flex-direction:column;gap:1px;align-content:flex-start}.run-row-compact{display:grid;grid-template-columns:20px 1fr auto auto auto;gap:10px;align-items:center;padding:3px 10px;height:26px;border-radius:4px;cursor:pointer;border-left:2px solid transparent;min-width:0;line-height:1}.run-row-compact:hover{background:var(--bg-2)}.run-row-compact.selected{border-left-color:var(--accent)}.run-row-compact.errored{border-left-color:var(--error)}.run-row-compact.aborted{border-left-color:var(--warn)}.rrc-idx{font-family:var(--mono);font-size:10.5px;color:var(--fg-faint);text-align:right}.rrc-title{font-size:12.5px;color:var(--fg);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}.rrc-meta{font-family:var(--mono);font-size:10.5px;color:var(--fg-dim);white-space:nowrap}.rrc-time{font-family:var(--mono);font-size:10.5px;color:var(--fg-faint);white-space:nowrap}.ttl-scroll{overflow-y:auto;padding:12px 16px 60px;display:flex;flex-direction:column;gap:14px}.ttl-axis-wrap{position:sticky;top:0;background:var(--bg-0);padding-bottom:6px;z-index:2}.ttl-axis{position:relative;height:18px;border-bottom:1px solid var(--border)}.ttl-tick{position:absolute;top:0;height:18px;font-family:var(--mono);font-size:10px;color:var(--fg-faint);padding-left:4px;border-left:1px solid var(--border)}.ttl-runs{display:flex;flex-direction:column;gap:4px}.ttl-runline{display:grid;grid-template-columns:180px 1fr auto;gap:10px;align-items:center;flex-shrink:0;cursor:pointer;padding:3px 6px;border-radius:4px;border-left:2px solid transparent}.ttl-runline:hover{background:var(--bg-2)}.ttl-runline.selected{border-left-color:var(--accent)}.ttl-rl-label{display:flex;align-items:center;gap:6px;min-width:0}.ttl-rl-idx{font-family:var(--mono);font-size:10px;color:var(--fg-faint);background:var(--bg-2);border:1px solid var(--border);padding:0 5px;border-radius:3px;flex-shrink:0}.ttl-rl-title{font-size:12px;color:var(--fg);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}.ttl-rl-track{position:relative;height:22px;background:linear-gradient(90deg,var(--border-subtle) 1px,transparent 1px) 0 0 / 10% 100% repeat-x,var(--bg-1);border:1px solid var(--border);border-radius:4px}.ttl-rl-bar{position:absolute;top:2px;bottom:2px;background:var(--accent);border-radius:3px;min-width:4px;cursor:pointer;display:flex;align-items:center;padding:0 6px;gap:6px;overflow:hidden;transition:filter .1s}.ttl-rl-bar:hover{filter:brightness(1.2)}.ttl-rl-bar.has-sub{background:linear-gradient(90deg,var(--accent) 60%,var(--subagent))}.ttl-rl-bar.err{background:var(--error)}.ttl-rl-bar.ab{background:var(--warn)}.ttl-rl-bar.selected{outline:2px solid var(--accent-fg);outline-offset:1px;z-index:2}.ttl-rl-bar-inner{display:flex;align-items:center;gap:6px;font-family:var(--mono);font-size:9.5px;font-weight:700;color:#0a0b0d;white-space:nowrap;pointer-events:none}.ttl-rl-bar-steps{opacity:.75;font-weight:600}.ttl-rl-meta{font-family:var(--mono);font-size:10px;color:var(--fg-faint);white-space:nowrap}.ttl-legend{display:flex;gap:14px;flex-wrap:wrap;padding:8px 0 0;border-top:1px solid var(--border);font-family:var(--mono);font-size:10px;color:var(--fg-faint)}.ttl-legend span{display:inline-flex;align-items:center;gap:6px}.ttl-legend .dot{width:10px;height:10px;border-radius:2px}.ttl-legend .dot.orch{background:var(--accent)}.ttl-legend .dot.sub{background:var(--subagent)}.ttl-legend .dot.err{background:var(--error)}.ttl-legend .dot.ab{background:var(--warn)}.run-row{background:var(--bg-1);border:1px solid var(--border);border-radius:var(--radius-md);padding:10px 12px;cursor:pointer;transition:border-color .1s,background .1s}.run-row:hover{border-color:var(--border-strong);background:var(--bg-2)}.run-row.selected{border-color:var(--accent);box-shadow:0 0 0 2px var(--accent-soft)}.run-row.errored{border-color:#fa686366}.run-row.aborted{border-color:#e3ad4b66}.run-row-head{display:flex;align-items:center;gap:8px;margin-bottom:4px}.run-row-idx{font-family:var(--mono);font-size:11px;color:var(--fg-faint);background:var(--bg-3);border:1px solid var(--border);padding:1px 6px;border-radius:4px;flex-shrink:0}.run-row-title{font-size:12.5px;color:var(--fg);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:1}.run-row-meta{display:flex;gap:6px;align-items:center;font-family:var(--mono);font-size:10.5px;color:var(--fg-faint)}.run-row-meta .sep{opacity:.5}.details{display:grid;grid-template-rows:auto 1fr;min-height:0;background:var(--bg-0);overflow:hidden}.details.empty{display:grid;place-items:center;background:var(--bg-0)}.details-head{padding:12px 18px;border-bottom:1px solid var(--border);background:var(--bg-1);min-height:78px;display:grid;gap:6px;align-content:center}.d-kind{display:flex;align-items:center;gap:6px;font-size:13px;font-weight:600;white-space:nowrap}.d-bread{margin-top:4px;display:flex;align-items:center;gap:4px;font-family:var(--mono);font-size:11px;color:var(--fg-faint);white-space:nowrap;overflow:hidden}.d-bread>*{flex-shrink:0}.d-bread .d-bread-item:first-child{flex-shrink:1;overflow:hidden;text-overflow:ellipsis;min-width:0}.d-bread svg{color:var(--fg-faint)}.d-bread-item.mono{color:var(--fg-dim)}.details-scroll{overflow-y:auto;padding:14px 18px 60px;display:grid;gap:12px}.d-section{background:var(--bg-1);border:1px solid var(--border);border-radius:var(--radius-md);padding:12px 14px}.d-section-head{display:flex;align-items:center;gap:6px;font-family:var(--mono);font-size:10.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--fg-faint);margin-bottom:10px;min-width:0}.d-section-head .model-badge{text-transform:none;letter-spacing:0;margin-left:auto}.d-section-head svg{color:var(--fg-faint);flex-shrink:0}.d-section-head .d-small{overflow:hidden;text-overflow:ellipsis;min-width:0;white-space:nowrap}.d-section-head .d-small .copy-btn{flex-shrink:0}.d-quote{font-size:14px;line-height:1.55;color:var(--fg);padding-left:10px;border-left:2px solid var(--accent);white-space:pre-wrap}.d-prose{font-size:13px;line-height:1.6;color:var(--fg)}.d-prose.d-reasoning{color:var(--fg-muted);font-style:italic}.d-kv{display:flex;gap:8px;align-items:baseline;margin-bottom:8px;font-size:12px}.d-kv .k{color:var(--fg-faint);font-family:var(--mono);font-size:10px;text-transform:uppercase;letter-spacing:.06em;width:60px}.d-kv .v{color:var(--fg)}.d-kv .v.mono{font-family:var(--mono);font-size:12px}.d-sub-label{font-family:var(--mono);font-size:10px;text-transform:uppercase;letter-spacing:.06em;color:var(--fg-faint);margin-bottom:4px}.d-grid{display:grid;grid-template-columns:1fr 1fr;gap:6px 14px;font-family:var(--mono);font-size:11.5px}.d-grid>div{display:flex;justify-content:space-between;padding:2px 0;border-bottom:1px dashed var(--border-subtle)}.d-grid .k{color:var(--fg-faint)}.d-grid .v{color:var(--fg)}.d-jump{margin-top:10px;display:inline-flex}.d-note{font-size:11.5px;color:var(--fg-faint);font-style:italic;padding:6px 0}.d-pre{font-family:var(--mono);font-size:12px;background:var(--bg-4);border:1px solid var(--border);border-radius:var(--radius-sm);padding:10px 12px;white-space:pre-wrap;color:var(--fg);max-height:360px;overflow-y:auto;margin:0}.d-small{font-family:var(--mono);font-size:10.5px;color:var(--fg-muted);display:inline-flex;align-items:center}.d-small-btn{background:var(--bg-3);border:1px solid var(--border);color:var(--fg-dim);font-family:var(--mono);font-size:10px;padding:1px 6px;border-radius:3px;cursor:pointer}.d-small-btn:hover{color:var(--fg);border-color:var(--border-strong)}.d-prompt{margin-top:8px}.run-detail-embedded{display:grid;grid-template-rows:auto 1fr}.run-detail-embedded .detail-head{padding:12px 16px;background:var(--bg-1)}.run-detail-embedded .detail-title{font-size:13.5px}.run-detail-embedded .stat-row{gap:10px}.run-detail-embedded .steps-scroll{padding:12px 14px 60px}.run-detail-embedded .step-summary{padding:8px 10px;gap:8px}.run-detail-embedded .timeline{padding:12px 14px 60px}.run-detail-embedded .tl-head,.run-detail-embedded .tl-row{grid-template-columns:140px 1fr}.run-detail-embedded .step-summary-aside{display:none}.main{min-height:0;display:grid;grid-template-rows:auto 1fr;background:var(--bg-0)}.empty{display:grid;place-items:center;height:100%}.empty-card{max-width:480px;padding:32px;text-align:center}.empty-card h2{margin:0 0 6px;font-size:16px;font-weight:600;color:var(--fg)}.empty-card p{margin:0;color:var(--fg-dim);font-size:13px}.empty-card .install{margin-top:18px;text-align:left;background:var(--bg-1);border:1px solid var(--border);border-radius:var(--radius-md);padding:10px 12px;font-family:var(--mono);font-size:12px;color:var(--fg-muted)}.empty-card .install .c{color:var(--accent-fg)}.empty-card .install .d{color:var(--fg-faint)}.detail-head{padding:16px 24px 14px;border-bottom:1px solid var(--border);background:var(--bg-1);display:grid;gap:8px}.detail-title-row{display:flex;align-items:flex-start;gap:12px;justify-content:space-between}.detail-title{font-size:16px;font-weight:600;color:var(--fg);line-height:1.4;flex:1;text-wrap:pretty}.detail-title .quote{color:var(--fg-muted);font-weight:500}.detail-id{font-family:var(--mono);font-size:11px;color:var(--fg-faint);display:inline-flex;align-items:center;gap:6px}.detail-id .copy-btn{color:var(--fg-faint);cursor:pointer;padding:2px;border-radius:3px}.detail-id .copy-btn:hover{color:var(--fg);background:var(--bg-3)}.stat-row{display:flex;gap:18px;flex-wrap:wrap;align-items:center}.stat{display:inline-flex;align-items:center;gap:6px;font-family:var(--mono);font-size:11.5px;color:var(--fg-muted);white-space:nowrap}.stat .l{color:var(--fg-faint)}.stat .v{color:var(--fg)}.stat svg{color:var(--fg-faint)}.pill-row{display:flex;gap:6px;flex-wrap:wrap}.pill{font-family:var(--mono);font-size:11px;padding:2px 8px;border-radius:999px;background:var(--bg-2);border:1px solid var(--border);color:var(--fg-muted);display:inline-flex;gap:4px}.pill .k{color:var(--fg-faint)}.pill .v{color:var(--fg)}.state-chip{display:inline-flex;align-items:center;gap:6px;font-size:11px;font-family:var(--mono);padding:2px 9px;border-radius:999px;border:1px solid var(--border);color:var(--fg-muted);background:var(--bg-2);text-transform:uppercase;letter-spacing:.04em}.state-chip .d{display:none}.state-chip.ok{color:var(--ok);border-color:#65c28159;background:var(--ok-soft)}.state-chip.err{color:var(--error);border-color:#fa686359;background:var(--error-soft)}.state-chip.warn{color:var(--warn);border-color:#e3ad4b59;background:var(--warn-soft)}.state-chip.running{color:var(--accent-fg);border-color:#5da7ff66;border-color:oklch(.72 .16 254 / .4);background:var(--accent-soft)}.steps-scroll{overflow-y:auto;padding:18px 24px 80px}.step{position:relative}.step+.step{margin-top:4px}.step-num{width:22px;height:22px;border-radius:6px;background:var(--bg-3);border:1px solid var(--border);color:var(--fg-muted);font-family:var(--mono);font-size:11px;display:grid;place-items:center;flex-shrink:0}.step.subagent .step-num{border-color:#17d0d880;color:var(--subagent);background:var(--subagent-soft)}.step.errored .step-num{border-color:#fa686380;color:var(--error);background:var(--error-soft)}.step.aborted .step-num{border-color:#e3ad4b80;color:var(--warn);background:var(--warn-soft)}.step-card{background:var(--bg-1);border:1px solid var(--border);border-radius:var(--radius-md);overflow:hidden;transition:border-color .1s ease}.step-card:hover{border-color:var(--border-strong)}.step.errored .step-card{border-color:#fa686359}.step-summary{display:grid;grid-template-columns:auto auto 1fr auto;gap:10px;align-items:center;padding:9px 12px;cursor:pointer;-webkit-user-select:none;user-select:none}.step-summary:hover{background:var(--bg-2)}.step.subagent .step-card{background:linear-gradient(90deg,oklch(.78 .13 200 / .06) 0%,var(--bg-1) 220px);border-left:2px solid oklch(.78 .13 200 / .5)}.chev{width:14px;height:14px;color:var(--fg-faint);transition:transform .12s ease;flex-shrink:0}.step.open .chev{transform:rotate(90deg)}.step-summary-main{display:flex;align-items:center;gap:10px;min-width:0}.fn-badge{font-family:var(--mono);font-size:10.5px;color:var(--fg-muted);background:var(--bg-3);border:1px solid var(--border);padding:1px 6px;border-radius:4px;white-space:nowrap}.fn-badge.subagent{color:var(--subagent);background:var(--subagent-soft);border-color:#17d0d84d}.model-badge{font-family:var(--mono);font-size:11px;color:var(--fg-muted);display:inline-flex;align-items:center;gap:5px;flex-shrink:0;white-space:nowrap}.model-badge .dot{display:none}.snip{font-size:12px;color:var(--fg-dim);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-family:var(--sans);min-width:0}.snip .arrow{color:var(--fg-faint);margin:0 4px}.snip .out{color:var(--fg-muted)}.snip .tag{color:var(--tool);font-family:var(--mono);font-size:11px}.snip .tag.text{color:var(--text-out)}.snip .tag.reason{color:var(--reasoning)}.step-summary-aside{display:flex;align-items:center;gap:12px;font-family:var(--mono);font-size:11px;color:var(--fg-faint);flex-shrink:0}.step-summary-aside .v{color:var(--fg-muted)}.step-body{border-top:1px solid var(--border);display:grid;grid-template-columns:1fr 1fr;gap:0}.step-pane{padding:14px;min-width:0}.step-pane+.step-pane{border-left:1px solid var(--border)}.pane-head{display:flex;align-items:center;justify-content:space-between;font-family:var(--mono);font-size:10.5px;letter-spacing:.08em;text-transform:uppercase;color:var(--fg-faint);margin-bottom:10px}.pane-head .actions{display:flex;gap:4px}.pane-head .actions button{color:var(--fg-faint);background:transparent;border:0;font:inherit;cursor:pointer;padding:2px 4px;border-radius:3px}.pane-head .actions button:hover{color:var(--fg);background:var(--bg-3)}.msg{border-radius:var(--radius);background:var(--bg-2);border:1px solid var(--border);padding:8px 10px;margin-bottom:6px;font-size:12.5px}.msg.system{background:#23262c66}.msg-role{font-family:var(--mono);font-size:10px;letter-spacing:.08em;color:var(--fg-faint);text-transform:uppercase;margin-bottom:4px;display:flex;align-items:center;gap:6px}.msg-content{font-family:var(--sans);color:var(--fg);line-height:1.5;white-space:pre-wrap;word-break:break-word}.msg.system .msg-content{color:var(--fg-muted);font-size:12px}.part{background:var(--bg-2);border:1px solid var(--border);border-radius:var(--radius);margin-bottom:6px;overflow:hidden}.part-head{display:flex;align-items:center;gap:8px;padding:7px 10px;cursor:pointer;font-family:var(--mono);font-size:10.5px;letter-spacing:.06em;text-transform:uppercase}.part-head .ico{width:12px;height:12px}.part-head .name{color:var(--fg);font-weight:500}.part-head .tail{margin-left:auto;font-family:var(--mono);font-size:10px;color:var(--fg-faint);text-transform:none;letter-spacing:0}.part-head .chev{width:11px;height:11px;color:var(--fg-faint)}.part.tool-call .part-head{background:#c28efb14;color:var(--tool);border-bottom:1px solid oklch(.74 .16 305 / .15)}.part.tool-result .part-head{background:#49d3a112;color:var(--text-out);border-bottom:1px solid oklch(.78 .14 165 / .15)}.part.reasoning .part-head{background:#f0ba5912;color:var(--reasoning);border-bottom:1px solid oklch(.82 .13 80 / .18)}.part.text-out .part-head{background:#49d3a10f;color:var(--text-out);border-bottom:1px solid oklch(.78 .14 165 / .15)}.part.collapsed .part-head{border-bottom:0}.part-body{padding:10px 12px;font-size:12.5px;color:var(--fg)}.part-body .reasoning-text{color:var(--fg-muted);font-style:italic;line-height:1.6;white-space:pre-wrap}.tool-call-id{font-family:var(--mono);font-size:10px;padding:1px 5px;border-radius:3px;background:#c28efb24;color:#d5b1ff;color:oklch(.82 .14 305);cursor:pointer;border:1px solid transparent}.tool-call-id.matched{background:#49d3a129;color:#70e9b9}.tool-call-id:hover{border-color:currentColor}.tool-call-id.highlight{outline:2px solid var(--accent);outline-offset:1px}.json{font-family:var(--mono);font-size:11.5px;color:var(--fg);background:var(--bg-4);border-radius:var(--radius-sm);padding:8px 10px;white-space:pre;overflow-x:auto;line-height:1.55;max-height:360px;overflow-y:auto}.json .k{color:#83bbff;color:oklch(.78 .13 254)}.json .s{color:#7fdc9a}.json .n{color:#f0ba59}.json .b{color:#cc9fff;color:oklch(.78 .16 305)}.json .nu,.json .p{color:var(--fg-faint)}.md{font-size:13px;line-height:1.6;color:var(--fg)}.md p{margin:0 0 8px}.md p:last-child{margin-bottom:0}.md strong{color:var(--fg);font-weight:600}.md em{color:var(--fg-muted)}.md code{font-family:var(--mono);font-size:12px;background:var(--bg-4);border:1px solid var(--border);padding:0 5px;border-radius:3px;color:#f0ba59}.md pre{font-family:var(--mono);font-size:12px;background:var(--bg-4);border:1px solid var(--border);border-radius:var(--radius-sm);padding:10px 12px;margin:8px 0;overflow-x:auto;color:var(--fg);line-height:1.55}.md pre code{background:transparent;border:0;padding:0;color:inherit}.md ul,.md ol{margin:0 0 8px 18px;padding:0}.md li{margin-bottom:2px}.md h2,.md h3{margin:8px 0 6px;font-size:14px;font-weight:600}.stream-cursor{display:inline-block;width:7px;height:14px;background:var(--accent);margin-left:2px;vertical-align:text-bottom;animation:blink 1s steps(2,end) infinite}@keyframes blink{50%{opacity:0}}.usage-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px}.usage-card{background:var(--bg-2);border:1px solid var(--border);border-radius:var(--radius);padding:10px 12px}.usage-card .l{font-family:var(--mono);font-size:10px;text-transform:uppercase;letter-spacing:.08em;color:var(--fg-faint)}.usage-card .v{font-family:var(--mono);font-size:18px;color:var(--fg);margin-top:4px}.usage-card .bd{margin-top:6px;font-family:var(--mono);font-size:10.5px;color:var(--fg-dim);display:flex;flex-direction:column;gap:2px}.error-pane{margin-top:8px;border:1px solid oklch(.7 .18 25 / .35);background:var(--error-soft);border-radius:var(--radius);padding:10px 12px;display:flex;gap:10px;align-items:flex-start;color:var(--error);font-family:var(--mono);font-size:12px}.error-pane.warn{border-color:#e3ad4b59;background:var(--warn-soft);color:var(--warn)}.error-pane svg{flex-shrink:0;margin-top:1px}.step-tabs{display:flex;gap:0;border-bottom:1px solid var(--border);padding:0 12px;background:var(--bg-1)}.step-tabs button{background:transparent;border:0;font-family:var(--sans);font-size:11.5px;color:var(--fg-dim);padding:8px 12px;cursor:pointer;position:relative;display:inline-flex;align-items:center;gap:6px;border-bottom:2px solid transparent;margin-bottom:-1px}.step-tabs button:hover{color:var(--fg)}.step-tabs button.active{color:var(--fg);border-bottom-color:var(--accent)}.step-tabs button .ct{font-family:var(--mono);font-size:10px;color:var(--fg-faint);background:var(--bg-3);padding:0 5px;border-radius:999px}.step-single{padding:14px}*::-webkit-scrollbar{width:10px;height:10px}*::-webkit-scrollbar-track{background:transparent}*::-webkit-scrollbar-thumb{background:#ffffff0f;border-radius:999px;border:2px solid transparent;background-clip:padding-box}*::-webkit-scrollbar-thumb:hover{background:#ffffff1f;border:2px solid transparent;background-clip:padding-box}.timeline{padding:16px 24px 80px;overflow-y:auto}.tl-head{display:grid;grid-template-columns:200px 1fr;gap:12px;position:sticky;top:0;background:var(--bg-0);z-index:2;padding-bottom:8px;border-bottom:1px solid var(--border)}.tl-axis{position:relative;height:22px}.tl-tick{position:absolute;top:0;font-family:var(--mono);font-size:10px;color:var(--fg-faint);padding-left:4px;border-left:1px solid var(--border);height:22px}.tl-rows{display:grid;gap:6px;padding-top:12px}.tl-row{display:grid;grid-template-columns:200px 1fr;gap:12px;align-items:center;min-height:32px}.tl-label{font-size:12px;color:var(--fg-muted);display:flex;align-items:center;gap:8px;min-width:0}.tl-label .step-num{width:22px;height:22px;font-size:10.5px}.tl-label .nm{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-family:var(--mono);font-size:11px}.tl-track{position:relative;height:28px;background:linear-gradient(90deg,var(--border-subtle) 1px,transparent 1px) 0 0 / 10% 100% repeat-x,var(--bg-1);border-radius:var(--radius-sm);border:1px solid var(--border)}.tl-bar{position:absolute;top:4px;bottom:4px;border-radius:3px;background:var(--accent);border:1px solid oklch(1 0 0 / .1);cursor:pointer;transition:filter .1s ease}.tl-bar:hover{filter:brightness(1.15)}.tl-bar.subagent{background:var(--subagent)}.tl-bar.errored{background:var(--error)}.tl-bar.aborted{background:var(--warn)}.tl-bar.running{background:linear-gradient(90deg,var(--accent),oklch(.72 .16 254 / .3));animation:shimmer 2s ease-in-out infinite}@keyframes shimmer{0%,to{opacity:.95}50%{opacity:.6}}.tl-bar-label{position:absolute;left:6px;top:50%;transform:translateY(-50%);font-family:var(--mono);font-size:10px;color:#0a0b0d;white-space:nowrap;pointer-events:none;font-weight:600;letter-spacing:.02em}.tweaks-anchor{position:fixed;bottom:16px;right:16px;z-index:50}.chat-scroll{overflow-y:auto;padding:18px 24px 80px}.chat-inner{max-width:820px;margin:0 auto;display:grid;gap:14px}.chat-turn{display:grid;gap:6px}.chat-bubble{border-radius:10px;padding:10px 14px;background:var(--bg-1);border:1px solid var(--border);font-size:13px;line-height:1.55;max-width:92%}.chat-bubble.user{justify-self:end;background:var(--accent-soft);border-color:#5da7ff59;border-color:oklch(.72 .16 254 / .35);color:var(--fg);max-width:72%}.chat-bubble.assistant{justify-self:start;background:var(--bg-1);width:100%}.chat-bubble.assistant.error{border-color:#fa68634d}.chat-bubble.assistant.aborted{border-color:#e3ad4b4d}.bubble-meta{display:flex;align-items:center;gap:6px;font-family:var(--mono);font-size:10.5px;color:var(--fg-faint);margin-bottom:6px;flex-wrap:wrap}.bubble-meta>*{white-space:nowrap}.bubble-meta .sep{opacity:.55}.bubble-meta .model-extra{color:var(--fg-dim);background:var(--bg-3);padding:0 5px;border-radius:999px;font-size:10px}.chat-bubble.user .bubble-meta{color:#83bbff;color:oklch(.78 .13 254)}.bubble-body{color:var(--fg)}.bubble-body .md{font-size:13px}.bubble-empty{color:var(--fg-faint);font-style:italic;font-size:12.5px;display:inline-flex;align-items:center;gap:6px}.bubble-empty.err{color:var(--error);font-style:normal}.bubble-foot{margin-top:10px;padding-top:8px;border-top:1px dashed var(--border);display:flex;align-items:center;gap:6px;font-family:var(--mono);font-size:10.5px;color:var(--fg-faint);cursor:pointer;-webkit-user-select:none;user-select:none}.bubble-foot:hover{color:var(--fg-muted)}.bubble-foot .run-id-chip{margin-left:auto;font-size:10px;color:var(--fg-faint);background:var(--bg-3);border:1px solid var(--border);padding:0 6px;border-radius:999px}.inline-steps{margin-top:12px;padding-top:12px;border-top:1px solid var(--border);display:grid;gap:4px}.thread-run{background:var(--bg-1);border:1px solid var(--border);border-radius:var(--radius-md);margin-bottom:6px}.thread-run:hover,.thread-run.open{border-color:var(--border-strong)}.thread-run.errored{border-color:#fa68634d}.thread-run-head{display:grid;grid-template-columns:auto auto 1fr auto;gap:10px;align-items:center;padding:10px 14px;cursor:pointer;-webkit-user-select:none;user-select:none}.thread-run-head .chev{color:var(--fg-faint);transition:transform .12s ease}.thread-run.open .thread-run-head .chev{transform:rotate(90deg)}.thread-run-title{font-size:12.5px;color:var(--fg);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.thread-run-aside{display:flex;gap:14px;font-family:var(--mono);font-size:11px;color:var(--fg-faint)}.thread-run .inline-steps{margin:0;padding:12px 14px;border-top:1px solid var(--border)}.kbd-inline{font-family:var(--mono);font-size:10.5px;background:var(--bg-3);border:1px solid var(--border-strong);border-radius:3px;padding:0 4px;color:var(--fg-muted)}.dialog-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000080;display:grid;place-items:center;z-index:100;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.dialog{background:var(--bg-1);border:1px solid var(--border-strong);border-radius:var(--radius-lg);padding:20px;width:380px;box-shadow:0 16px 40px #00000080}.dialog h3{margin:0 0 6px;font-size:14px;font-weight:600}.dialog p{margin:0 0 16px;color:var(--fg-muted);font-size:13px}.dialog .actions{display:flex;justify-content:flex-end;gap:8px}.btn.primary{background:var(--accent);color:#0f1216;border-color:var(--accent);font-weight:500}.btn.primary:hover{background:#77b4ff;background:oklch(.76 .16 254)}.btn.dangerous{background:var(--error);color:#0f1216;border-color:var(--error);font-weight:500}.btn.dangerous:hover{background:#ff7e77;background:oklch(.74 .18 25)}.app.dense .run-card{padding:7px 10px 7px 6px}.app.dense .step+.step{margin-top:2px}.app.dense .steps-scroll{padding:12px 18px 60px}.app.dense .detail-head{padding:12px 18px}.sidebar-load-more{display:block;width:calc(100% - 16px);margin:8px;padding:8px 10px;font-family:var(--mono);font-size:11px;color:var(--fg-muted);background:var(--bg-2);border:1px dashed var(--border);border-radius:6px;cursor:pointer;text-align:center;letter-spacing:.04em;text-transform:uppercase}.sidebar-load-more:hover:not(:disabled){border-style:solid;border-color:var(--border-strong);color:var(--fg)}.sidebar-load-more:disabled{opacity:.5;cursor:progress}.cm.subagent{border-left:2px solid var(--subagent)}.cm.subagent .cm-meta{color:var(--subagent)}.sub-badge{font-family:var(--mono);font-size:9px;padding:0 5px;border-radius:3px;background:var(--subagent-soft);color:var(--subagent);letter-spacing:.04em;text-transform:uppercase}.run-row-compact.subagent .rrc-idx{background:var(--subagent-soft);color:var(--subagent);border-color:#17d0d880}.run-row-compact.subagent .rrc-title{color:var(--subagent)}.ttl-rl-idx.subagent{background:var(--subagent-soft);color:var(--subagent);border-color:#17d0d880}.ttl-rl-bar.subagent{background:var(--subagent-soft);border-color:var(--subagent)}.ttl-rl-bar.subagent .ttl-rl-bar-dur,.ttl-rl-bar.subagent .ttl-rl-bar-steps{color:var(--subagent)}
@@ -3,15 +3,15 @@
3
3
  <head>
4
4
  <meta charset="UTF-8" />
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
- <title>ailog</title>
6
+ <title>ailog — LLM viewer</title>
7
7
  <link rel="preconnect" href="https://fonts.googleapis.com" />
8
8
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
9
9
  <link
10
- href="https://fonts.googleapis.com/css2?family=Geist:wght@400;500;600;700&family=Geist+Mono:wght@400;500;600;700&display=swap"
10
+ href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500;600&display=swap"
11
11
  rel="stylesheet"
12
12
  />
13
- <script type="module" crossorigin src="/assets/index-BMqO0rJT.js"></script>
14
- <link rel="stylesheet" crossorigin href="/assets/index-CdQ1JjwT.css">
13
+ <script type="module" crossorigin src="/assets/index-BBTm7Mxn.js"></script>
14
+ <link rel="stylesheet" crossorigin href="/assets/index-x-B7u97h.css">
15
15
  </head>
16
16
  <body>
17
17
  <div id="root"></div>
package/dist/index.d.ts CHANGED
@@ -1,69 +1,53 @@
1
1
  import { LanguageModelV4Middleware } from '@ai-sdk/provider';
2
2
 
3
3
  interface AiSdkMiddlewareOptions {
4
- /**
5
- * Optional run id. If provided, every step recorded by this middleware
6
- * instance is appended to the run with this id. Multiple middleware /
7
- * `createLogger` instances that share the same `runId` will write into
8
- * the same run — that's how an orchestrator and its subagents end up
9
- * grouped together. Auto-generated when omitted.
10
- */
11
- runId?: string;
12
- /**
13
- * Caller-supplied metadata stored on the run (e.g. `userId`,
14
- * `organizationId`). Honored only when the run is created (first
15
- * writer wins). Ignored when reusing an existing `runId`.
16
- */
17
- metadata?: Record<string, unknown> | null;
18
4
  /**
19
5
  * Optional label stored on the run, surfaced as `function_id` in the
20
6
  * viewer. Honored only when the run is created (first writer wins).
21
7
  */
22
8
  functionId?: string;
23
9
  /**
24
- * Optional thread id. When provided, the run is tagged with this id
25
- * and a `Thread` record is created (or updated) so multiple runs can
26
- * later be grouped/listed together. Honored only when the run is
27
- * created (first writer wins).
10
+ * Optional thread id. When provided, every run produced by this
11
+ * middleware instance is tagged with this thread, so orchestrator and
12
+ * subagent runs that share the same `threadId` show up side-by-side
13
+ * under one Thread in the viewer. **If omitted**, an `auto-<short>`
14
+ * thread is generated for each run.
28
15
  */
29
16
  threadId?: string;
17
+ /**
18
+ * Caller-supplied metadata stored on the **Thread** (e.g. `userId`,
19
+ * `organizationId`, `topic`, `persona`). First-writer-wins: only the
20
+ * call that creates the Thread record sets this; subsequent runs
21
+ * joining the same thread can't change it.
22
+ */
23
+ metadata?: Record<string, unknown> | null;
30
24
  }
31
25
  /**
32
26
  * AI SDK `LanguageModelV4Middleware` that records every `generateText`
33
27
  * / `streamText` call to ailog.
34
28
  *
35
- * Pass `{ runId }` to control which run the recorded steps go into.
36
- * Two middleware instances with the same `runId` will append their
37
- * steps to a single shared run that's how to group orchestrator and
38
- * subagent calls together.
29
+ * Each middleware instance owns one Run. Within a single `generateText`
30
+ * invocation (incl. multi-step tool-calling) every step lands in that
31
+ * Run. To group multiple Runs (e.g. orchestrator + subagent calls that
32
+ * each construct their own wrapped model), share a `threadId`:
39
33
  *
40
34
  * ```ts
41
- * import { generateRunId, aiSdkMiddleware } from '@ailog/cli';
42
- *
43
- * const runId = generateRunId();
35
+ * import { aiSdkMiddleware } from '@ailog/cli';
44
36
  *
45
37
  * const orchestrator = wrapLanguageModel({
46
- * middleware: aiSdkMiddleware({ runId, functionId: 'plan-trip' }),
38
+ * middleware: aiSdkMiddleware({ threadId: 'tokyo', functionId: 'plan-trip' }),
47
39
  * model,
48
40
  * });
49
41
  *
50
- * // Inside a tool's execute callback, reuse the same runId:
42
+ * // Inside a tool's execute callback — share the threadId, not the run:
51
43
  * const subagent = wrapLanguageModel({
52
- * middleware: aiSdkMiddleware({ runId }),
44
+ * middleware: aiSdkMiddleware({ threadId: 'tokyo' }),
53
45
  * model,
54
46
  * });
55
47
  * ```
56
48
  */
57
49
  declare const aiSdkMiddleware: (options?: AiSdkMiddlewareOptions) => LanguageModelV4Middleware;
58
50
 
59
- /**
60
- * Generate a fresh runId. Callers can pre-generate one with this helper
61
- * and pass the same value to multiple `aiSdkMiddleware({ runId })` /
62
- * `createLogger({ runId })` instances to make them write into the same
63
- * run (orchestrator + subagents share one run).
64
- */
65
- declare const generateRunId: () => string;
66
-
67
51
  interface StartStepInput {
68
52
  type?: 'generate' | 'stream';
69
53
  modelId: string;
@@ -88,38 +72,32 @@ interface RunHandle {
88
72
  step(input: StartStepInput): Promise<StepHandle>;
89
73
  }
90
74
  interface CreateLoggerOptions {
91
- /**
92
- * Reuse an existing run by id. When provided, every step created
93
- * through this logger is appended to that run (orchestrator and
94
- * subagents pass the same `runId` to group their calls together).
95
- * Auto-generated when omitted.
96
- */
97
- runId?: string;
98
75
  /**
99
76
  * Run label shown in the viewer. Honored only when the run is being
100
77
  * created (first writer wins).
101
78
  */
102
79
  functionId?: string;
103
- /**
104
- * Metadata stored on the run. Honored only when the run is being
105
- * created; ignored when reusing an existing `runId`.
106
- */
107
- metadata?: Record<string, unknown> | null;
108
80
  /**
109
81
  * Optional thread id. When provided, the run is tagged with this id
110
- * and a `Thread` record is created or updated so the viewer (and
111
- * future thread-list features) can group runs together. Honored
112
- * only when the run is being created; ignored when reusing an
113
- * existing `runId`.
82
+ * and a `Thread` record is created or updated. **If omitted**, an
83
+ * `auto-<short>` thread is generated. Two loggers that share a
84
+ * `threadId` create two distinct Runs that show up side-by-side in
85
+ * the same Thread (run-level merging across loggers is intentionally
86
+ * not supported — share a Thread, not a Run).
114
87
  */
115
88
  threadId?: string;
89
+ /**
90
+ * Caller-supplied metadata stored on the **Thread** (e.g. `userId`,
91
+ * `topic`, `persona`). First-writer-wins — only the call that
92
+ * actually creates the Thread record sets this.
93
+ */
94
+ metadata?: Record<string, unknown> | null;
116
95
  }
117
96
  /**
118
97
  * Provider-agnostic logger. Use this to record LLM calls from any SDK
119
- * or provider, not just the Vercel AI SDK. Each call to `createLogger()`
120
- * either creates a fresh run, or when a `runId` is passed appends to
121
- * an existing run so multiple call sites (e.g. orchestrator + subagent)
122
- * can share one run.
98
+ * or provider, not just the Vercel AI SDK. Each `createLogger()` call
99
+ * creates a fresh Run; pass a shared `threadId` to group several Runs
100
+ * (orchestrator + subagent loggers) under one Thread in the viewer.
123
101
  *
124
102
  * ```ts
125
103
  * import { createLogger } from '@ailog/cli';
@@ -141,4 +119,4 @@ interface CreateLoggerOptions {
141
119
  */
142
120
  declare function createLogger(options?: CreateLoggerOptions): Promise<RunHandle>;
143
121
 
144
- export { aiSdkMiddleware, createLogger, generateRunId };
122
+ export { aiSdkMiddleware, createLogger };