@ls-stack/agent-eval 0.3.0 → 0.5.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.
- package/dist/{app-DXYLqlWb.mjs → app-C5CJ1sX6.mjs} +3 -3
- package/dist/apps/web/dist/assets/index-CBvHVkE7.js +109 -0
- package/dist/apps/web/dist/assets/index-Dd7I28ts.css +1 -0
- package/dist/apps/web/dist/index.html +2 -2
- package/dist/bin.mjs +1 -1
- package/dist/{cli-Dw9et3_Z.mjs → cli-C5FL7C4G.mjs} +190 -47
- package/dist/index.d.mts +126 -99
- package/dist/index.mjs +3 -3
- package/dist/{runner-CToL8eJs.mjs → runner-Cdlvk56X.mjs} +1 -1
- package/dist/{runner-kSiHsl91.mjs → runner-K2bN8KRS.mjs} +2 -2
- package/dist/src-gqm1z1Nu.mjs +2 -0
- package/package.json +1 -1
- package/dist/apps/web/dist/assets/index-Bq4Dz6AV.js +0 -109
- package/dist/apps/web/dist/assets/index-b2k20tzL.css +0 -1
- package/dist/src-CXclO9ZI.mjs +0 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@import"https://fonts.googleapis.com/css2?family=Geist:wght@300;400;500;600;700&family=Geist+Mono:wght@400;500;600&display=swap";.json-view{display:block;color:#4d4d4d;text-align:left;--json-property: #009033;--json-index: #676dff;--json-number: #676dff;--json-string: #b2762e;--json-boolean: #dc155e;--json-null: #dc155e}.json-view .json-view--property{color:var(--json-property)}.json-view .json-view--index{color:var(--json-index)}.json-view .json-view--number{color:var(--json-number)}.json-view .json-view--string{color:var(--json-string)}.json-view .json-view--boolean{color:var(--json-boolean)}.json-view .json-view--null{color:var(--json-null)}.json-view .jv-indent{padding-left:1em}.json-view .jv-chevron{display:inline-block;vertical-align:-20%;cursor:pointer;opacity:.4;width:1em;height:1em}:is(.json-view .jv-chevron:hover,.json-view .jv-size:hover+.jv-chevron){opacity:.8}.json-view .jv-size{cursor:pointer;opacity:.4;font-size:.875em;font-style:italic;margin-left:.5em;vertical-align:-5%;line-height:1}.json-view :is(.json-view--copy,.json-view--edit),.json-view .json-view--link svg{display:none;width:1em;height:1em;margin-left:.25em;cursor:pointer}.json-view .json-view--input{width:120px;margin-left:.25em;border-radius:4px;border:1px solid currentColor;padding:0 4px;font-size:87.5%;line-height:1.25;background:transparent}.json-view .json-view--deleting{outline:1px solid #da0000;background-color:#da000011;text-decoration-line:line-through}:is(.json-view:hover,.json-view--pair:hover)>:is(.json-view--copy,.json-view--edit),:is(.json-view:hover,.json-view--pair:hover)>.json-view--link svg{display:inline-block}.json-view .jv-button{background:transparent;outline:none;border:none;cursor:pointer;color:inherit}.json-view .cursor-pointer{cursor:pointer}.json-view svg{vertical-align:-10%}.jv-size-chevron~svg{vertical-align:-16%}.json-view_a11y{color:#545454;--json-property: #aa5d00;--json-index: #007299;--json-number: #007299;--json-string: #008000;--json-boolean: #d91e18;--json-null: #d91e18}.json-view_github{color:#005cc5;--json-property: #005cc5;--json-index: #005cc5;--json-number: #005cc5;--json-string: #032f62;--json-boolean: #005cc5;--json-null: #005cc5}.json-view_vscode{color:#005cc5;--json-property: #0451a5;--json-index: #0000ff;--json-number: #0000ff;--json-string: #a31515;--json-boolean: #0000ff;--json-null: #0000ff}.json-view_atom{color:#383a42;--json-property: #e45649;--json-index: #986801;--json-number: #986801;--json-string: #50a14f;--json-boolean: #0184bc;--json-null: #0184bc}.json-view_winter-is-coming{color:#0431fa;--json-property: #3a9685;--json-index: #ae408b;--json-number: #ae408b;--json-string: #8123a9;--json-boolean: #0184bc;--json-null: #0184bc}.json-view_vitesse{color:#393a34;--json-property: #998418;--json-index: #2f798a;--json-number: #2f798a;--json-string: #b56959;--json-boolean: #1e754f;--json-null: #ab5959}.vh724ok-1{display:flex;align-items:stretch;justify-content:flex-start;height:100vh;overflow:hidden;background:#fcfcfc}.vh724ok-2{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;flex:1;min-width:0;overflow-x:hidden;overflow-y:hidden}.vh724ok-2.vwx8nfh{overflow-x:auto}.vh724ok-3{width:100%;height:100%}.vh724ok-3.vwx8nfh{min-width:600px}.v9f9dyw-1{border-left:1px solid #e8e8eb;background:#f7f7f8;display:flex;align-items:center;justify-content:center;color:#6b6e76;font-size:12px;flex-shrink:0}.v9f9dyw-2{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;position:relative;flex-shrink:0;border-left:1px solid #e8e8eb;background:#f7f7f8;overflow:hidden}.v9f9dyw-3{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;gap:10px;padding:14px 18px 12px;border-bottom:1px solid #e8e8eb;background:#f7f7f8;flex-shrink:0}.v9f9dyw-4{display:flex;align-items:center;justify-content:space-between;gap:10px}.v9f9dyw-5{display:flex;align-items:center;justify-content:flex-start;gap:2px}.v9f9dyw-6{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-size:10px;letter-spacing:.1em;text-transform:uppercase;font-weight:500;color:#6b6e76}.v9f9dyw-7{display:flex;align-items:center;justify-content:flex-start;gap:10px;min-width:0}.v9f9dyw-8{display:flex;align-items:center;justify-content:flex-start;gap:12px;min-width:0}.v9f9dyw-9{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";font-size:17px;color:#0a0b0d;font-weight:600;letter-spacing:-.01em}.v9f9dyw-10{display:flex;align-items:center;justify-content:flex-start;gap:4px;border-bottom:1px solid #e8e8eb;padding:10px 14px 0;flex-shrink:0;overflow-x:auto}.v9f9dyw-11{position:relative;padding:8px 12px;background:transparent;border:none;font-size:12px;font-weight:500;color:#6b6e76;white-space:nowrap;margin-bottom:-1px;border-bottom:1.5px solid transparent;text-transform:capitalize}.v9f9dyw-11:hover{color:#0a0b0d}.v9f9dyw-11.v18pp08p{color:#0a0b0d;border-bottom-color:#22d3ee}.v9f9dyw-12{flex:1;overflow:auto;padding:18px 20px}.v9f9dyw-13{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start}.v9f9dyw-14{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;gap:8px;padding:14px 0;border-bottom:1px solid #e8e8eb}.v9f9dyw-14:first-child{padding-top:0}.v9f9dyw-14:last-child{border-bottom:none;padding-bottom:0}.v9f9dyw-15{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-size:10px;letter-spacing:.1em;text-transform:uppercase;font-weight:500;color:#6b6e76}.v9f9dyw-16{font-size:13px;color:#0a0b0d}.v9f9dyw-17{color:#dc2626}.v9f9dyw-18{font-weight:600;margin-bottom:8px}.v9f9dyw-19{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";font-size:11px;white-space:pre-wrap;opacity:.8;background:#f0f0f2;border:1px solid #e8e8eb;border-radius:var(--radius-sm);padding:10px}.v9f9dyw-20{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;gap:14px}.v9f9dyw-21{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-size:10px;letter-spacing:.1em;text-transform:uppercase;font-weight:500;color:#6b6e76;margin-bottom:8px}.v9f9dyw-22{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";font-size:13px;color:#0a0b0d;word-break:break-word}.v9f9dyw-23{color:#dc2626}.v9f9dyw-24{color:#16a34a}.v9f9dyw-25{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;gap:12px}.v9f9dyw-26{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;gap:8px;padding:12px 14px;background:#fcfcfc;border:1px solid #e8e8eb;border-radius:var(--radius-md)}.v9f9dyw-27{display:flex;align-items:center;justify-content:space-between;gap:10px}.v9f9dyw-28{font-size:12.5px;font-weight:600;color:#0a0b0d;letter-spacing:-.005em}.v9f9dyw-29{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";font-size:13px;font-weight:500;color:#0a0b0d}.v9f9dyw-30{position:relative;height:6px;border-radius:4px;background:#f0f0f2;overflow:hidden}.v9f9dyw-31{position:absolute;left:0;top:0;bottom:0;border-radius:4px;background:#a4a7af}.v9f9dyw-31.vbz8yk8{background:#16a34a}.v9f9dyw-31.v173w9ek{background:#dc2626}.v9f9dyw-32{display:flex;align-items:center;justify-content:flex-start;gap:10px;font-size:11px;color:#6b6e76}.v9f9dyw-33{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-size:10px;letter-spacing:.1em;text-transform:uppercase;font-weight:500;padding:2px 6px;border-radius:var(--radius-sm);background:#f0f0f2;color:#6b6e76;font-size:9.5px;letter-spacing:.04em;line-height:1.2}.v9f9dyw-33.vbz8yk8{background:#16a34a1f;color:#16a34a}.v9f9dyw-33.v173w9ek{background:#dc26261f;color:#dc2626}.v9f9dyw-34{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;gap:18px}.v9f9dyw-35{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;gap:10px}.v9f9dyw-36{display:flex;align-items:center;justify-content:space-between;gap:10px}.v9f9dyw-37{font-size:12.5px;font-weight:600;color:#0a0b0d}.v9f9dyw-38{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;gap:10px;list-style:none;padding:0;margin:0}.v9f9dyw-39{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;gap:6px;padding:12px;background:#fcfcfc;border:1px solid #e8e8eb;border-radius:var(--radius-md)}.v9f9dyw-40{color:#dc2626;font-size:12.5px;line-height:1.5}.v1f0s106-1{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14px;flex:1;height:100%;text-align:center;padding:48px}.v1f0s106-2{width:56px;height:56px;border-radius:var(--radius-md);background:#f7f7f8;border:1px solid #e8e8eb;display:flex;align-items:center;justify-content:center;color:#22d3ee;margin-bottom:4px}.v1f0s106-2>svg{width:24px;height:24px}.v1f0s106-3{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-size:10px;letter-spacing:.1em;text-transform:uppercase;font-weight:500;color:#6b6e76}.v1f0s106-4{color:#0a0b0d;font-size:18px;font-weight:600;letter-spacing:-.01em}.v1f0s106-5{color:#6b6e76;font-size:12.5px;max-width:360px;line-height:1.55}.v1460r1i-1{white-space:pre-wrap;margin:0;font-size:13px;line-height:1.55}.v1460r1i-2{color:#0a0b0d;font-size:13px;line-height:1.55}.v1460r1i-2>:first-child{margin-top:0}.v1460r1i-2>:last-child{margin-bottom:0}.v1460r1i-2 p,.v1460r1i-2 ul,.v1460r1i-2 ol,.v1460r1i-2 blockquote,.v1460r1i-2 pre,.v1460r1i-2 table{margin:0 0 10px}.v1460r1i-2 h1,.v1460r1i-2 h2,.v1460r1i-2 h3,.v1460r1i-2 h4,.v1460r1i-2 h5,.v1460r1i-2 h6{margin:0 0 10px;color:#0a0b0d;line-height:1.25}.v1460r1i-2 h1{font-size:18px}.v1460r1i-2 h2{font-size:15px}.v1460r1i-2 h3{font-size:13.5px}.v1460r1i-2 ul,.v1460r1i-2 ol{padding-left:20px}.v1460r1i-2 li+li{margin-top:4px}.v1460r1i-2 code{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";font-size:12px;background:#f0f0f2;border:1px solid #e8e8eb;border-radius:6px;padding:1px 5px}.v1460r1i-2 pre{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";font-size:12px;overflow-x:auto;background:#f0f0f2;border:1px solid #e8e8eb;border-radius:var(--radius-sm);padding:12px}.v1460r1i-2 pre code{background:transparent;border:none;padding:0;font-size:inherit}.v1460r1i-2 blockquote{padding-left:12px;border-left:3px solid #e8e8eb;color:#6b6e76}.v1460r1i-2 a{color:#22d3ee;text-decoration:underline;text-underline-offset:2px}.v1460r1i-2 table{width:100%;border-collapse:collapse}.v1460r1i-2 th,.v1460r1i-2 td{border:1px solid #e8e8eb;padding:8px 10px;text-align:left;vertical-align:top}.v1460r1i-2 th{background:#f0f0f2}.v1460r1i-3{max-width:100%;border-radius:var(--radius-md)}.v1460r1i-4{width:100%}.v1460r1i-5{max-width:100%;border-radius:var(--radius-md)}.v1460r1i-6{color:#22d3ee}.vqnpbvz-1{position:relative;min-width:0}.vqnpbvz-2{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";font-size:12px;line-height:1.6;color:#0a0b0d;background:#fcfcfc;border:1px solid #e8e8eb;border-radius:var(--radius-md);padding:12px 14px;overflow:auto;min-width:0}.vqnpbvz-2.vh8ay32{font-size:11px;padding:10px 12px}.vqnpbvz-2.v14y6o4h{max-height:200px}.vqnpbvz-2.valvosx{max-height:320px}.vqnpbvz-2.vzt48hw{max-height:none}.vqnpbvz-2 .json-view{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";color:#0a0b0d;font-size:inherit;line-height:inherit;--json-property: #0e7490;--json-index: #22d3ee;--json-number: #22d3ee;--json-string: #ea580c;--json-boolean: #dc2626;--json-null: #a4a7af}.vqnpbvz-2 .jv-size,.vqnpbvz-2 .jv-chevron{color:#a4a7af}.vqnpbvz-2 .json-view--copy,.vqnpbvz-2 .json-view--edit,.vqnpbvz-2 .json-view--link svg{color:#a4a7af}.vqnpbvz-2 .json-view--input{color:#0a0b0d}.vqnpbvz-3{display:flex;align-items:center;justify-content:flex-start;gap:4px;transition:.12s cubic-bezier(.4,0,.2,1);transition-property:background,color,border-color;position:absolute;bottom:6px;right:6px;font-family:inherit;font-size:10px;letter-spacing:.04em;text-transform:uppercase;font-weight:500;color:#6b6e76;background:#f7f7f8;border:1px solid #e8e8eb;border-radius:var(--radius-sm);padding:3px 7px;cursor:pointer}.vqnpbvz-3:hover{color:#0a0b0d;background:#ececee;border-color:#d4d4d8}.v4yt9wa-1{display:flex;align-items:center;justify-content:center;transition:.24s cubic-bezier(.4,0,.2,1);transition-property:background,color;width:28px;height:28px;border-radius:var(--radius-sm);border:none;background:transparent;color:#6b6e76;flex-shrink:0}.v4yt9wa-1.van04w6{width:32px;height:32px;border-radius:var(--radius-md)}.v4yt9wa-1:hover:not(:disabled){background:#f0f0f2;color:#0a0b0d}.v4yt9wa-1:disabled{cursor:not-allowed;opacity:.5}.v4yt9wa-1>svg{width:14px;height:14px}.v4yt9wa-1.van04w6>svg{width:16px;height:16px}.vpbub9f-1{position:absolute;top:0;bottom:0;width:7px;right:-3px;cursor:col-resize;z-index:5;-webkit-user-select:none;user-select:none;touch-action:none}.vpbub9f-1.v1xij6d4{right:auto;left:-3px}.vpbub9f-1:after{content:"";position:absolute;top:0;bottom:0;left:3px;width:1px;background:transparent;transition:background .15s ease}.vpbub9f-1:hover:after,.vpbub9f-1.veyzh35:after{background:#22d3ee}.vno9i23-1{display:flex;align-items:center;justify-content:flex-start;gap:6px;font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";display:inline-flex;font-size:11px;font-weight:500;letter-spacing:.01em;padding:3px 8px;border-radius:20px;color:#6b6e76;background:#f0f0f2}.vno9i23-1.v1bls63k{color:#16a34a;background:#16a34a1a}.vno9i23-1.v1843cka{color:#dc2626;background:#dc26261a}.vno9i23-1.v1w33htl{color:#0e7490;background:#22d3ee1f}.vno9i23-1.v1o7znqr{color:#ea580c;background:#ea580c1a}.vno9i23-1.v1ptx2rj{color:#6b6e76;background:#e4e4e7}.vno9i23-1.vwlrmf0{color:#ea580c;background:#ea580c24}.vno9i23-1.v1mlprpv{color:#0e7490;background:#22d3ee1a}.vno9i23-2{width:5px;height:5px;border-radius:5px;flex-shrink:0;background:#a4a7af;@keyframes pulseDot{0%,to{opacity:1}50%{opacity:.4}}}.vno9i23-2.v1bls63k{background:#16a34a}.vno9i23-2.v1843cka{background:#dc2626}.vno9i23-2.v1w33htl{background:#22d3ee;animation:pulseDot 1.6s ease-in-out infinite}.vno9i23-2.v1o7znqr{background:#ea580c}.vno9i23-2.v1ptx2rj{background:#d4d4d8}.vno9i23-2.vwlrmf0{background:#ea580c}.vno9i23-2.v1mlprpv{background:#22d3ee}.vxv787s-1{display:flex;gap:12px;height:100%;align-items:stretch;position:relative;min-width:0}.vxv787s-2{display:flex;flex-direction:column;flex:1;min-width:0;border:1px solid #e8e8eb;border-radius:var(--radius-md);background:#fcfcfc;overflow:hidden}.vxv787s-3{flex:1 1 0;min-width:300px;max-width:460px;overflow:auto;border:1px solid #e8e8eb;border-radius:var(--radius-md);background:#fcfcfc;padding:14px 16px}.vxv787s-4{position:absolute;inset:0 0 0 auto;width:min(420px,85%);display:flex;flex-direction:column;background:#f7f7f8;border:1px solid #d4d4d8;border-radius:var(--radius-md);box-shadow:-10px 0 28px #0a0b0d24;z-index:2}.vxv787s-5{display:flex;align-items:center;justify-content:space-between;padding:6px 8px 6px 12px;border-bottom:1px solid #e8e8eb;flex-shrink:0}.vxv787s-6{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";font-size:10px;letter-spacing:.1em;text-transform:uppercase;color:#6b6e76}.vxv787s-7{overflow:auto;padding:14px 16px}.vxv787s-8{transition:.24s cubic-bezier(.4,0,.2,1);transition-property:background,color;background:none;border:none;padding:4px;border-radius:4px;display:inline-flex;align-items:center;justify-content:center;color:#6b6e76;cursor:pointer}.vxv787s-8:hover{background:#f0f0f2;color:#0a0b0d}.vxv787s-8>svg{width:14px;height:14px}.vxv787s-9{flex:1;overflow:auto;min-width:0}.vxv787s-10{display:flex;flex-direction:column;min-width:560px;padding-right:14px}.vxv787s-10.v1qsea3x{min-width:0;padding-right:0}.vxv787s-11{display:grid;grid-template-columns:minmax(200px,40%) 1fr;flex-shrink:0;border-bottom:1px solid #e8e8eb;background:#f7f7f8;height:24px;position:sticky;top:0;z-index:1}.vxv787s-11.v1qsea3x{grid-template-columns:1fr}.vxv787s-12{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:0 6px 0 10px;height:100%}.vxv787s-13{transition:.24s cubic-bezier(.4,0,.2,1);transition-property:background,color;background:none;border:none;padding:3px;border-radius:4px;display:inline-flex;align-items:center;justify-content:center;color:#6b6e76;cursor:pointer;flex-shrink:0}.vxv787s-13:hover{background:#f0f0f2;color:#0a0b0d}.vxv787s-13>svg{width:14px;height:14px}.vxv787s-14{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";font-size:9.5px;letter-spacing:.1em;text-transform:uppercase;color:#a4a7af}.vxv787s-15{position:relative;padding-right:12px}.vxv787s-16{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";position:absolute;top:50%;transform:translate(-50%,-50%);font-size:9.5px;font-variant-numeric:tabular-nums;color:#a4a7af;white-space:nowrap}.vxv787s-17{padding:4px 0}.vxv787s-18{transition:.24s cubic-bezier(.4,0,.2,1);transition-property:background,color;display:grid;grid-template-columns:minmax(200px,40%) 1fr;align-items:stretch;cursor:pointer;font-size:11.5px;min-height:26px;border-left:2px solid transparent;color:#6b6e76}.vxv787s-18.v1qsea3x{grid-template-columns:1fr}.vxv787s-18:hover{background:#f7f7f8;color:#0a0b0d}.vxv787s-18.vkduw8x{background:#f0f0f2;color:#0a0b0d;border-left-color:#22d3ee}.vxv787s-19{display:flex;align-items:center;justify-content:flex-start;gap:7px;min-width:0;padding-right:10px}.vxv787s-20{position:relative;height:26px;padding-right:12px;background-image:linear-gradient(to right,transparent calc(25% - 1px),#e8e8ebb3 calc(25% - 1px),#e8e8ebb3 25%,transparent 25%),linear-gradient(to right,transparent calc(50% - 1px),#e8e8ebb3 calc(50% - 1px),#e8e8ebb3 50%,transparent 50%),linear-gradient(to right,transparent calc(75% - 1px),#e8e8ebb3 calc(75% - 1px),#e8e8ebb3 75%,transparent 75%)}.vxv787s-21{position:absolute;top:7px;height:12px;min-width:2px;border-radius:3px;background:var(--trace-kind-bar-bg, #d4d4d8);border:1px solid transparent}.vxv787s-21.v1z0zxx1{background:repeating-linear-gradient(45deg,var(--trace-kind-running-strong, #22d3ee66) 0,var(--trace-kind-running-strong, #22d3ee66) 6px,var(--trace-kind-running-soft, #22d3ee26) 6px,var(--trace-kind-running-soft, #22d3ee26) 12px)}.vxv787s-21.v12vnxco{border-color:#dc2626}.vxv787s-22{position:absolute;top:50%;width:10px;height:10px;border-radius:2px;background:var(--trace-kind-bar-bg, #d4d4d8);box-shadow:0 0 0 2px #fcfcfc;transform:translate(-50%,-50%) rotate(45deg);pointer-events:none}.vxv787s-23{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";position:absolute;top:5px;font-size:9.5px;font-variant-numeric:tabular-nums;color:#6b6e76;white-space:nowrap;pointer-events:none}.vxv787s-23.inside{color:#fff;font-weight:500;letter-spacing:.02em;background:#0003;padding:0 5px;line-height:12px;top:7px;height:12px;margin-right:-4px;border-radius:3px}.vxv787s-24{transition:.24s cubic-bezier(.4,0,.2,1);transition-property:transform;background:none;border:none;padding:0;display:inline-flex;width:14px;height:14px;align-items:center;justify-content:center;color:#a4a7af;flex-shrink:0;cursor:pointer}.vxv787s-24>svg{width:12px;height:12px}.vxv787s-24.v1sa0q0h>svg{transform:rotate(90deg)}.vxv787s-25{width:14px;flex-shrink:0}.vxv787s-26{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";padding:2px 6px;border-radius:4px;font-size:9.5px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--trace-kind-badge-text, #6b6e76);background:var(--trace-kind-badge-bg, #f0f0f2);flex-shrink:0}.vxv787s-27{font-weight:500;font-size:11.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:1;min-width:0}.vxv787s-28{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";padding:1px 5px;border-radius:3px;font-size:9.5px;font-weight:500;letter-spacing:.04em;text-transform:uppercase;flex-shrink:0;background:#d4d4d8;color:#6b6e76}.vxv787s-28.vquhj6c{background:#16a34a26;color:#16a34a}.vxv787s-28.v1bt5ce3{background:#ea580c26;color:#ea580c}.vxv787s-28.vgubnqx{background:#22d3ee26;color:#22d3ee}.vxv787s-28.vk5fxpe{background:#d4d4d8;color:#6b6e76}.vxv787s-29{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";color:#dc2626;font-size:10px;flex-shrink:0}.vxv787s-30{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";font-size:9.5px;letter-spacing:.04em;flex-shrink:0;color:#a4a7af}.vxv787s-31{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";font-size:10px;color:#6b6e76;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:1 1 auto;min-width:0}.vxv787s-31:before{content:"→";color:#a4a7af;margin-right:4px}.vxv787s-32{padding:16px;color:#6b6e76;font-size:12px;text-align:center}.vn93px5-1{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;gap:14px;font-size:12px}.vn93px5-2{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";font-size:13px;font-weight:600;letter-spacing:-.005em;color:#0a0b0d}.vn93px5-3{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;gap:6px}.vn93px5-4{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:8px 10px;background:#fcfcfc;border:1px solid #e8e8eb;border-radius:var(--radius-sm)}.vn93px5-5{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-size:10px;letter-spacing:.1em;text-transform:uppercase;font-weight:500;color:#6b6e76}.vn93px5-6{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";font-size:11.5px;color:#0a0b0d;text-align:right;max-width:60%;word-break:break-all}.vn93px5-7{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;gap:8px;min-width:0;color:#dc2626;background:#dc26260f;border:1px solid #dc262638;border-radius:var(--radius-sm);padding:10px 12px;overflow-wrap:anywhere}.vn93px5-8{font-weight:600;min-width:0;overflow-wrap:anywhere}.vn93px5-9{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";font-size:10px;color:#dc2626b8;min-width:0;overflow-wrap:anywhere}.vn93px5-10{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-size:10px;letter-spacing:.1em;text-transform:uppercase;font-weight:500;color:#dc2626}.vn93px5-11{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;gap:4px;min-width:0}.vn93px5-11+.vn93px5-11{border-top:1px solid #dc26262e;padding-top:8px}.vn93px5-12{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";font-size:10px;max-width:100%;white-space:pre-wrap;word-break:break-word;overflow-wrap:anywhere;opacity:.8}.vn93px5-13{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;gap:6px}.vn93px5-14{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-size:10px;letter-spacing:.1em;text-transform:uppercase;font-weight:500;color:#6b6e76}.vn93px5-15{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";font-size:11px;line-height:1.55;white-space:pre-wrap;word-break:break-word;color:#6b6e76;background:#f7f7f8;border:1px solid #e8e8eb;padding:10px 12px;border-radius:var(--radius-sm);max-height:200px;overflow:auto}.vmn9mpb-1{height:100%;overflow:auto}.vmn9mpb-2{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;gap:6px;padding:22px 32px 18px;border-bottom:1px solid #e8e8eb;background:#fcfcfc;position:sticky;top:0;z-index:3}.vmn9mpb-3{display:flex;align-items:center;justify-content:space-between;gap:14px}.vmn9mpb-4{display:flex;align-items:center;justify-content:flex-start;gap:12px}.vmn9mpb-5{display:flex;align-items:center;justify-content:flex-start;gap:6px;flex-wrap:wrap}.vmn9mpb-6{display:flex;align-items:center;justify-content:flex-start;gap:5px;font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-size:10px;letter-spacing:.1em;text-transform:uppercase;font-weight:500;padding:3px 9px;border-radius:999px;background:#f0f0f2;color:#6b6e76;font-size:9.5px;line-height:1;letter-spacing:.04em}.vmn9mpb-7{font-size:11px;font-weight:600;color:#0a0b0d;letter-spacing:-.01em}.vmn9mpb-8{display:flex;align-items:center;justify-content:flex-start;gap:5px;transition:.24s cubic-bezier(.4,0,.2,1);transition-property:background,border-color,color;appearance:none;padding:3px 9px;border-radius:999px;font-size:9.5px;line-height:1;letter-spacing:.04em;text-transform:uppercase;font-weight:500;color:#6b6e76;background:#f0f0f2;border:1px solid transparent;cursor:pointer}.vmn9mpb-8:hover{background:#ececee;color:#0a0b0d}.vmn9mpb-8.v124n73o{color:#fcfcfc;background:#0a0b0d;border-color:#0a0b0d}.vmn9mpb-8.v18aowuu:not(.v124n73o){color:#16a34a;background:#16a34a14;border-color:#16a34a2e}.vmn9mpb-8.vind66p:not(.v124n73o){color:#dc2626;background:#dc262614;border-color:#dc26262e}.vmn9mpb-8.v11id82e:not(.v124n73o){color:#0e7490;background:#22d3ee1a;border-color:#22d3ee38}.vmn9mpb-8.v1i2guj2:not(.v124n73o){color:#ea580c;background:#ea580c14;border-color:#ea580c2e}.vmn9mpb-8.v12gavlj:not(.v124n73o){color:#6b6e76;background:#e4e4e7;border-color:#e8e8eb}.vmn9mpb-8.v9duj39:not(.v124n73o){color:#ea580c;background:#ea580c1a;border-color:#ea580c38}.vmn9mpb-8.vjtgbed:not(.v124n73o){color:#0e7490;background:#22d3ee17;border-color:#22d3ee33}.vmn9mpb-8.vt17xas:not(.v124n73o){color:#6b6e76;background:#f0f0f2;border-color:#e8e8eb}.vmn9mpb-9{font-size:11px;font-weight:600;letter-spacing:-.01em}.vmn9mpb-10{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;gap:20px;padding:24px 32px 40px}.v1d1autj-1{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;background:transparent}.v1d1autj-1.vra3f9d{border:1px solid #e8e8eb;border-radius:var(--radius-lg);overflow:hidden;background:#fcfcfc}.v1d1autj-1.v1ofnfk9{height:100%;overflow:hidden}.v1d1autj-2{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;padding:22px 32px;border-bottom:1px solid #e8e8eb;background:#fcfcfc}.v1d1autj-2.v16nf7cu{position:sticky;top:0;z-index:3}.v1d1autj-2.vp8tseb{cursor:pointer;padding:16px 24px}.v1d1autj-3{display:flex;align-items:center;justify-content:space-between;gap:12px;width:100%}.v1d1autj-4{margin-bottom:14px}.v1d1autj-5{display:flex;align-items:center;justify-content:flex-start;gap:12px;min-width:0;flex:1}.v1d1autj-6{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;gap:8px;min-width:0;flex:1}.v1d1autj-7{display:flex;align-items:center;justify-content:flex-start;gap:12px;min-width:0}.v1d1autj-8{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:16px;font-weight:600;color:#0a0b0d;letter-spacing:-.02em;margin:0}.v1d1autj-8.v8omtap{font-size:30px;font-weight:600;letter-spacing:-.025em;line-height:1.1}.v1d1autj-9{font-size:12.5px;color:#6b6e76;max-width:720px;line-height:1.5}.v1d1autj-10{display:inline-flex}.v1d1autj-11{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:11.5px;color:#6b6e76}.v1d1autj-12{display:flex;align-items:center;justify-content:flex-start;gap:8px;flex-shrink:0}.v1d1autj-13{transition:.24s cubic-bezier(.4,0,.2,1);transition-property:transform;display:inline-flex;width:18px;height:18px;align-items:center;justify-content:center;color:#a4a7af;transform:rotate(-90deg)}.v1d1autj-13.v12vk5oa{transform:rotate(0)}.v1d1autj-13>svg{width:14px;height:14px}.v1d1autj-14{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start}.v1d1autj-14.v1dyggfg{flex:1;min-height:0;overflow:hidden}.v1d1autj-15{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:1px;background:#e8e8eb;border-bottom:1px solid #e8e8eb}.v1d1autj-16{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;gap:6px;padding:12px 16px 13px;background:#fcfcfc}.v1d1autj-17{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-size:10px;letter-spacing:.1em;text-transform:uppercase;font-weight:500;font-size:9px;color:#6b6e76}.v1d1autj-18{font-variant-numeric:tabular-nums;font-size:20px;font-weight:500;color:#0a0b0d;letter-spacing:-.02em;line-height:1.1}.v1d1autj-18.vsjzv4v{color:#0e7490}.v1d1autj-19{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;padding:20px 32px 24px}.v1d1autj-19:not(:last-child){border-bottom:1px solid #e8e8eb}.v1d1autj-19.v1i7hsdh{flex:1;min-height:0}.v1d1autj-20{display:flex;align-items:center;justify-content:space-between;margin-bottom:14px}.v1d1autj-20.vskhn2m{margin-bottom:0}.v1d1autj-21{display:flex;align-items:center;justify-content:flex-start;gap:8px;background:none;border:none;padding:0;margin:0;cursor:pointer;color:inherit;font:inherit;text-align:left}.v1d1autj-22{transition:.24s cubic-bezier(.4,0,.2,1);transition-property:transform;display:inline-flex;width:16px;height:16px;align-items:center;justify-content:center;color:#a4a7af;transform:rotate(-90deg)}.v1d1autj-22.v12vk5oa{transform:rotate(0)}.v1d1autj-22>svg{width:14px;height:14px}.v1d1autj-23{font-size:13.5px;font-weight:600;color:#0a0b0d;letter-spacing:-.01em}.v1d1autj-24{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";font-size:10.5px;color:#6b6e76}.v1d1autj-25{display:flex;align-items:center;justify-content:flex-start;gap:4px}.vzvspbh-1{height:150px;padding:10px 14px 8px;border:1px solid #e8e8eb;border-radius:var(--radius-lg);background:#fcfcfc}.vzvspbh-2{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-size:10px;letter-spacing:.1em;text-transform:uppercase;font-weight:500;color:#6b6e76;padding:0 2px 4px}.vzvspbh-3{display:flex;flex-direction:column;gap:4px}.vzvspbh-3+.vzvspbh-3{margin-top:16px}.vzvspbh-4{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";padding:10px 12px;font-size:11px;line-height:1.5;color:#0a0b0d;min-width:160px}.vzvspbh-5{display:flex;justify-content:space-between;gap:14px}.vzvspbh-5+.vzvspbh-5{margin-top:4px}.vzvspbh-6{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-size:10px;letter-spacing:.1em;text-transform:uppercase;font-weight:500;color:#6b6e76}.vzvspbh-7{color:#0e7490}.v1v3ddx1-1{padding:30px 24px;border:1px dashed #e8e8eb;border-radius:var(--radius-lg);text-align:center;color:#6b6e76;font-size:12.5px}.v1v3ddx1-2{border:1px solid #e8e8eb;border-radius:var(--radius-lg);background:#fcfcfc;overflow:auto}.v1v3ddx1-2.v72uwfi{flex:1;min-height:0}.v1v3ddx1-3{width:max-content;min-width:100%;border-collapse:collapse;font-size:12px;table-layout:auto}.v1v3ddx1-4{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-size:10px;letter-spacing:.1em;text-transform:uppercase;font-weight:500;position:sticky;top:0;z-index:1;padding:10px 16px;background:#f7f7f8;box-shadow:inset 0 -1px #e8e8eb;color:#6b6e76;text-align:left;white-space:nowrap}.v1v3ddx1-4.v10rcuqw{text-align:right}.v1v3ddx1-4.vl7rjcc{padding-left:36px}.v1v3ddx1-5{transition:.24s cubic-bezier(.4,0,.2,1);transition-property:background;cursor:pointer;border-top:1px solid #e8e8eb;border-left:3px solid transparent;background:#f7f7f8}.v1v3ddx1-5:first-child{border-top:none}.v1v3ddx1-5:hover{background:#f0f0f2}.v1v3ddx1-5.v9wbf1x{background:#22d3ee0f}.v1v3ddx1-5.v9wbf1x:hover{background:#22d3ee1a}.v1v3ddx1-5.v1wi22g7{border-left-color:#22d3ee}.v1v3ddx1-6{padding:12px 16px;vertical-align:middle;white-space:nowrap;color:#0a0b0d;font-size:12px}.v1v3ddx1-6.v10rcuqw{text-align:right}.v1v3ddx1-6.vh68gi{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";font-variant-numeric:tabular-nums;font-size:11.5px;color:#6b6e76}.v1v3ddx1-7{display:flex;align-items:center;justify-content:flex-start;gap:8px}.v1v3ddx1-8{transition:.24s cubic-bezier(.4,0,.2,1);transition-property:color;display:inline-flex;align-items:center;justify-content:center;padding:2px;background:transparent;border:none;cursor:pointer;color:#6b6e76}.v1v3ddx1-8:hover{color:#0a0b0d}.v1v3ddx1-9{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;letter-spacing:.1em;text-transform:uppercase;font-weight:500;padding:3px 6px;border-radius:var(--radius-sm);background:#22d3ee1f;color:#0e7490;font-size:10px;letter-spacing:.04em;line-height:1}.v1v3ddx1-10{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";padding:3px 6px;border-radius:var(--radius-sm);background:#f0f0f2;color:#6b6e76;font-size:10.5px;line-height:1}.v1v3ddx1-11{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;letter-spacing:.1em;text-transform:uppercase;font-weight:500;padding:3px 6px;border-radius:var(--radius-sm);background:#f0f0f2;color:#6b6e76;font-size:10px;letter-spacing:.04em;line-height:1}.v1v3ddx1-12{font-size:12.5px;font-weight:500;color:#0a0b0d;letter-spacing:-.005em}.v1v3ddx1-12.v9wbf1x{color:#0e7490}.v1v3ddx1-13{transition:.24s cubic-bezier(.4,0,.2,1);transition-property:background;cursor:pointer;border-top:1px solid #e8e8eb;border-left:3px solid transparent}.v1v3ddx1-13:hover{background:#f7f7f8}.v1v3ddx1-13.v1wi22g7{border-left-color:#22d3ee}.v1v3ddx1-14{padding:10px 16px;vertical-align:middle;white-space:nowrap;color:#0a0b0d;font-size:12px}.v1v3ddx1-14.v10rcuqw{text-align:right}.v1v3ddx1-14.vh68gi{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";font-variant-numeric:tabular-nums;font-size:11.5px;color:#6b6e76}.v1v3ddx1-14.vl7rjcc{padding-left:36px}.v1v3ddx1-15{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";font-size:12px;color:#0a0b0d;max-width:260px}.v1v3ddx1-16{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block;max-width:320px}.v1v3ddx1-17{color:#a4a7af}.v1v3ddx1-18{border-top:1px solid #e8e8eb}.v1v3ddx1-19{padding:18px;text-align:center;font-size:12px;color:#6b6e76}.v6nngvf-1{color:#a4a7af}.v6nngvf-2{display:inline-block;width:40px;height:3px;border-radius:4px;background:#f0f0f2;position:relative;overflow:hidden;margin-right:8px;vertical-align:middle}.v6nngvf-3{position:absolute;left:0;top:0;bottom:0;border-radius:4px;background:#a4a7af}.v6nngvf-3.vj3xmch{background:#16a34a}.v6nngvf-3.v1b0sr1n{background:#ea580c}.v6nngvf-3.v3vjwcw{background:#dc2626}.v6nngvf-4{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";font-variant-numeric:tabular-nums;font-size:12px;color:#0a0b0d;font-weight:500}.v6nngvf-5{display:flex;align-items:center;justify-content:flex-start;display:inline-flex}.v6nngvf-6{display:flex;align-items:center;justify-content:flex-start;gap:5px;display:inline-flex;justify-content:center;min-width:54px;padding:3px 7px;border-radius:var(--radius-sm);color:#6b6e76;background:#f0f0f2;font-size:11px;font-weight:600}.v6nngvf-6.vj3xmch{color:#16a34a;background:#16a34a1a}.v6nngvf-6.v3vjwcw{color:#dc2626;background:#dc26261a}.v6nngvf-7{display:flex;align-items:center;justify-content:flex-start;gap:1px;display:inline-flex;color:#a4a7af}.v6nngvf-7>svg{width:13px;height:13px}.v6nngvf-7>.filled{color:#ea580c;fill:currentColor}.v6nngvf-8{display:flex;align-items:center;justify-content:flex-end;gap:4px}.v6nngvf-9{display:flex;align-items:center;justify-content:flex-start;gap:4px;justify-content:center;height:24px;min-width:28px;padding:0 7px;border:1px solid #d4d4d8;border-radius:var(--radius-sm);background:#fcfcfc;color:#6b6e76;font-size:11px;font-weight:600}.v6nngvf-9>svg{width:12px;height:12px}.v6nngvf-9:hover:not(:disabled){border-color:#22d3ee80;background:#f0f0f2;color:#0a0b0d}.v6nngvf-9:disabled{opacity:.6}.v6nngvf-9.vrka86m{color:#16a34a;border-color:#16a34a80;background:#16a34a1a}.v6nngvf-9.v14fx5bw{color:#dc2626;border-color:#dc262680;background:#dc26261a}.v6nngvf-10{display:flex;align-items:center;justify-content:center;width:20px;height:24px;padding:0;border:none;border-radius:var(--radius-sm);background:transparent;color:#a4a7af}.v6nngvf-10>svg{width:14px;height:14px}.v6nngvf-10:hover:not(:disabled),.v6nngvf-10.v3c191l{color:#ea580c}.v6nngvf-10.v3c191l>svg{fill:currentColor}.v6nngvf-10:disabled{opacity:.6}.v1fkevfp-1{background:#000;color:#fff;font-size:12px;line-height:1.4;padding:4px 8px;border-radius:4px;box-shadow:0 2px 8px #0006;pointer-events:none;z-index:10000;max-width:300px;white-space:pre-line;overflow-wrap:break-word}.v1it1iyw-1{position:relative;display:inline-flex}.v1it1iyw-2{display:flex;align-items:center;justify-content:center;transition:.24s cubic-bezier(.4,0,.2,1);transition-property:background,color,border-color;appearance:none;padding:0;width:32px;height:32px;border-radius:var(--radius-md);border:1px solid #e8e8eb;background:#fcfcfc;color:#6b6e76;line-height:0;box-shadow:0 1px 2px #00000014}.v1it1iyw-2:hover:not(:disabled){background:#f0f0f2;color:#0a0b0d;border-color:#d4d4d8}.v1it1iyw-2:disabled{cursor:not-allowed;opacity:.5}.v1it1iyw-2>svg{width:16px;height:16px}.v1it1iyw-3{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;position:absolute;top:calc(100% + 6px);right:0;min-width:210px;background:#f7f7f8;border:1px solid #d4d4d8;box-shadow:0 14px 30px -12px #22d3ee40;z-index:40;padding:6px 0}.v1it1iyw-4{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;gap:2px;transition:.24s cubic-bezier(.4,0,.2,1);transition-property:background,color;text-align:left;background:transparent;border:0;padding:8px 14px;color:#0a0b0d;cursor:pointer}.v1it1iyw-4:hover{background:#ececee}.v1it1iyw-4.vp2z70{color:#dc2626}.v1it1iyw-4.vp2z70:hover{background:#dc26261a}.v1it1iyw-5{font-size:12px;font-weight:600;letter-spacing:.02em}.v1it1iyw-6{font-size:11px;color:#6b6e76}.v1it1iyw-7{height:1px;background:#e8e8eb;margin:4px 0}.v1gbsfzf-1{position:relative;display:inline-flex}.v1gbsfzf-2{display:flex;align-items:center;justify-content:flex-start}.v1gbsfzf-3{display:flex;align-items:center;justify-content:flex-start;gap:8px;transition:.24s cubic-bezier(.4,0,.2,1);transition-property:background,border-color,color,box-shadow;display:inline-flex;height:28px;padding:0 14px;border-radius:0;border:1px solid transparent;font-size:11px;font-weight:600;line-height:1;white-space:nowrap;-webkit-user-select:none;user-select:none;text-transform:uppercase;letter-spacing:.14em;background:#22d3ee;color:#0a0b0d;box-shadow:0 0 0 1px #0e7490,0 6px 16px -8px #22d3ee8c}.v1gbsfzf-3>svg{width:13px;height:13px;flex-shrink:0}.v1gbsfzf-3:hover:not(:disabled){background:#06b6d4}.v1gbsfzf-3:active:not(:disabled){background:#0e7490}.v1gbsfzf-3:disabled{cursor:not-allowed;opacity:.4}.v1gbsfzf-4{transition:.24s cubic-bezier(.4,0,.2,1);transition-property:background,border-color,color;display:inline-flex;align-items:center;justify-content:center;height:28px;width:26px;margin-left:1px;border-radius:0;border:1px solid transparent;background:#22d3ee;color:#0a0b0d;box-shadow:0 0 0 1px #0e7490}.v1gbsfzf-4>svg{width:13px;height:13px;transition:transform .18s ease}.v1gbsfzf-4.v9mb724>svg{transform:rotate(180deg)}.v1gbsfzf-4:hover:not(:disabled){background:#06b6d4}.v1gbsfzf-4:disabled{cursor:not-allowed;opacity:.4}.v1gbsfzf-5{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;position:absolute;top:calc(100% + 6px);right:0;min-width:220px;background:#f7f7f8;border:1px solid #d4d4d8;box-shadow:0 14px 30px -12px #22d3ee59;z-index:40;padding:6px 0}.v1gbsfzf-6{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;gap:2px;transition:.24s cubic-bezier(.4,0,.2,1);transition-property:background,color;text-align:left;background:transparent;border:0;padding:8px 14px;color:#0a0b0d;cursor:pointer}.v1gbsfzf-6:hover{background:#ececee}.v1gbsfzf-6.v1g7o2ge{color:#dc2626}.v1gbsfzf-6.v1g7o2ge:hover{background:#dc26261a}.v1gbsfzf-7{font-size:12px;font-weight:600;letter-spacing:.02em}.v1gbsfzf-8{font-size:11px;color:#6b6e76}.v1gbsfzf-9{height:1px;background:#e8e8eb;margin:4px 0}.v1eplm6x-1{display:flex;align-items:center;justify-content:flex-start;gap:8px;font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";font-size:13px;color:#6b6e76}.v1eplm6x-2{color:#a4a7af;margin:0 6px}.v1eplm6x-3{transition:.24s cubic-bezier(.4,0,.2,1);transition-property:color;font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";appearance:none;background:transparent;border:none;padding:0;color:#6b6e76;cursor:pointer}.v1eplm6x-3:hover,.v1eplm6x-4{color:#0a0b0d}.vgxz95z-1{border-left:1px solid #e8e8eb;background:#f7f7f8;display:flex;align-items:center;justify-content:center;color:#6b6e76;font-size:12px;flex-shrink:0}.vgxz95z-2{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;position:relative;flex-shrink:0;border-left:1px solid #e8e8eb;background:#f7f7f8;overflow:hidden}.vgxz95z-3{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;gap:10px;padding:14px 18px 12px;border-bottom:1px solid #e8e8eb;background:#f7f7f8;flex-shrink:0}.vgxz95z-4{display:flex;align-items:center;justify-content:space-between;gap:10px}.vgxz95z-5{display:flex;align-items:center;justify-content:flex-start;gap:6px}.vgxz95z-6{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-size:10px;letter-spacing:.1em;text-transform:uppercase;font-weight:500;color:#6b6e76}.vgxz95z-7{display:flex;align-items:center;justify-content:flex-start;gap:10px;min-width:0}.vgxz95z-8{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";font-size:9.5px;font-weight:600;padding:3px 8px;border-radius:4px;color:#0a0b0d;background:#22d3ee}.vgxz95z-9{font-size:15px;font-weight:600;color:#0a0b0d;letter-spacing:-.01em;font-variant-numeric:tabular-nums}.vgxz95z-10{flex:1;overflow:auto;padding:16px;display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;gap:18px}.vgxz95z-11{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;gap:8px}.vgxz95z-12{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-size:10px;letter-spacing:.1em;text-transform:uppercase;font-weight:500;color:#6b6e76}.vgxz95z-13{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}.vgxz95z-14{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;gap:6px;padding:12px 14px;background:#fcfcfc;border:1px solid #e8e8eb;border-radius:var(--radius-md)}.vgxz95z-15{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-size:10px;letter-spacing:.1em;text-transform:uppercase;font-weight:500;color:#6b6e76}.vgxz95z-16{font-variant-numeric:tabular-nums;font-size:18px;font-weight:500;color:#0a0b0d;letter-spacing:-.02em}.vgxz95z-16.v15guhoh{color:#0e7490}.vgxz95z-16.v1amf7no{color:#dc2626}.vgxz95z-17{display:grid;grid-template-columns:110px 1fr;gap:6px 12px;margin:0}.vgxz95z-18{font-size:12px;color:#6b6e76}.vgxz95z-19{margin:0;font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";font-variant-numeric:tabular-nums;font-size:11.5px;color:#0a0b0d;word-break:break-all}.vgxz95z-20{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;border:1px solid #e8e8eb;border-radius:var(--radius-md);overflow:hidden;background:#fcfcfc}.vgxz95z-21{transition:.24s cubic-bezier(.4,0,.2,1);transition-property:background;display:flex;align-items:center;justify-content:flex-start;gap:10px;width:100%;padding:10px 12px;background:transparent;border:none;border-top:1px solid #e8e8eb;cursor:pointer;text-align:left}.vgxz95z-21:first-child{border-top:none}.vgxz95z-21:hover{background:#f0f0f2}.vgxz95z-22{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;gap:2px;flex:1;min-width:0}.vgxz95z-23{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";font-size:12px;color:#0a0b0d}.vgxz95z-24{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";font-size:10.5px;color:#6b6e76}.vgxz95z-25{display:flex;align-items:center;justify-content:flex-start;gap:10px;flex-shrink:0}.vgxz95z-26{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";font-variant-numeric:tabular-nums;font-size:11px;color:#6b6e76;min-width:44px;text-align:right}.vgxz95z-27{padding:18px 14px;text-align:center;font-size:11.5px;color:#6b6e76;border:1px dashed #e8e8eb;border-radius:var(--radius-md)}.vgxz95z-28{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";font-size:11.5px;line-height:1.55;white-space:pre-wrap;word-break:break-word;color:#dc2626;background:#dc26260f;border:1px solid #dc26264d;border-radius:var(--radius-md);padding:12px 14px;margin:0}.v11wyrim-1{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;flex-shrink:0;border-right:1px solid #e8e8eb;background:#f7f7f8;overflow:hidden;position:relative}.v11wyrim-2{display:flex;align-items:center;justify-content:flex-start;gap:10px;padding:14px 16px;border-bottom:1px solid #e8e8eb}.v11wyrim-3{width:26px;height:26px;background:linear-gradient(135deg,#22d3ee,#0e7490);border-radius:7px;display:grid;place-items:center;color:#0a0b0d;font-weight:700;font-size:12.5px;letter-spacing:-.02em;box-shadow:0 0 20px #22d3ee33}.v11wyrim-4{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;gap:1px;flex:1;min-width:0}.v11wyrim-5{font-size:13px;font-weight:600;letter-spacing:-.01em;color:#0a0b0d}.v11wyrim-6{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-size:10px;color:#6b6e76;font-variant-numeric:tabular-nums}.v11wyrim-7{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:12px 16px 6px}.v11wyrim-8{display:flex;align-items:center;justify-content:flex-start;gap:6px;flex-wrap:wrap;padding:10px 12px 0}.v11wyrim-9{display:flex;align-items:center;justify-content:flex-start;gap:5px;transition:.24s cubic-bezier(.4,0,.2,1);transition-property:background,border-color,color;appearance:none;border:1px solid #e8e8eb;border-radius:999px;background:#f0f0f2;color:#6b6e76;padding:4px 8px;font-size:10px;line-height:1;font-weight:500;text-transform:uppercase;cursor:pointer}.v11wyrim-9:hover{background:#ececee;color:#0a0b0d}.v11wyrim-9.v6lqv3n{background:#0a0b0d;border-color:#0a0b0d;color:#fcfcfc}.v11wyrim-9.v19qld18:not(.v6lqv3n){color:#16a34a;background:#16a34a14;border-color:#16a34a2e}.v11wyrim-9.v1cg0dpp:not(.v6lqv3n){color:#dc2626;background:#dc262614;border-color:#dc26262e}.v11wyrim-9.v87wrzh:not(.v6lqv3n){color:#0e7490;background:#22d3ee1a;border-color:#22d3ee38}.v11wyrim-9.vs27jp:not(.v6lqv3n){color:#ea580c;background:#ea580c14;border-color:#ea580c2e}.v11wyrim-9.vyxbtsk:not(.v6lqv3n){background:#e4e4e7}.v11wyrim-9.vfa0aud:not(.v6lqv3n){color:#ea580c;background:#ea580c1a;border-color:#ea580c38}.v11wyrim-9.vrfu41b:not(.v6lqv3n){color:#0e7490;background:#22d3ee17;border-color:#22d3ee33}.v11wyrim-9.v177364w:not(.v6lqv3n){color:#6b6e76;background:#f0f0f2;border-color:#e8e8eb}.v11wyrim-10{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-size:10px;font-weight:650;font-variant-numeric:tabular-nums}.v11wyrim-11{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-size:10px;letter-spacing:.1em;text-transform:uppercase;font-weight:500;transition:.24s cubic-bezier(.4,0,.2,1);transition-property:color;appearance:none;background:transparent;border:none;padding:0;color:#6b6e76;cursor:pointer}.v11wyrim-11:hover,.v11wyrim-11.v6lqv3n{color:#0a0b0d}.v11wyrim-12{display:flex;align-items:center;justify-content:flex-start;gap:4px}.v11wyrim-13{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-size:10px;color:#a4a7af;font-variant-numeric:tabular-nums}.v11wyrim-14{display:flex;align-items:center;justify-content:center;transition:.24s cubic-bezier(.4,0,.2,1);transition-property:background,color;width:22px;height:22px;background:transparent;border:none;border-radius:var(--radius-sm);padding:0;color:#a4a7af;cursor:pointer}.v11wyrim-14:hover{background:#f0f0f2;color:#0a0b0d}.v11wyrim-14:disabled{opacity:.4;cursor:default}.v11wyrim-14>svg{width:14px;height:14px}.v11wyrim-15{flex:1;overflow:auto;padding-bottom:10px}.vwomtc5-1{padding:2px 0 10px}.vwomtc5-2{padding:20px;display:flex;flex-direction:column;align-items:flex-start;justify-content:flex-start;gap:10px}.vwomtc5-3{color:#6b6e76;font-size:11.5px;font-weight:600;letter-spacing:-.005em}.vwomtc5-4{color:#6b6e76;font-size:12px;line-height:1.5;white-space:pre-wrap}.vwomtc5-5{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";display:block;width:100%;overflow:auto;color:#0a0b0d;background:#f0f0f2;border:1px solid #e8e8eb;border-radius:var(--radius-sm);padding:10px 12px}.vwomtc5-6{display:flex;align-items:center;justify-content:flex-start;gap:8px;transition:.24s cubic-bezier(.4,0,.2,1);transition-property:background,color;position:relative;width:calc(100% - 16px);margin:1px 8px;background:transparent;border:none;border-radius:var(--radius-sm);text-align:left;color:#6b6e76;font-size:12.5px;line-height:20px;min-height:30px;padding-top:5px;padding-bottom:5px;padding-right:10px;overflow:hidden}.vwomtc5-6.depth0{padding-left:10px}.vwomtc5-6.depth1{padding-left:24px}.vwomtc5-6.depth2{padding-left:38px}.vwomtc5-6.depth3{padding-left:52px}.vwomtc5-6.active{background:#f0f0f2;color:#0a0b0d}.vwomtc5-6.active:before{content:"";position:absolute;left:-8px;top:6px;bottom:6px;width:2px;background:#22d3ee;border-radius:2px}.vwomtc5-7{display:flex;align-items:center;justify-content:flex-start;gap:8px;transition:.24s cubic-bezier(.4,0,.2,1);transition-property:background,color;position:relative;width:calc(100% - 16px);margin:1px 8px;background:transparent;border:none;border-radius:var(--radius-sm);text-align:left;color:#6b6e76;font-size:12.5px;line-height:20px;min-height:30px;padding-top:5px;padding-bottom:5px;padding-right:10px;overflow:hidden;cursor:pointer}.vwomtc5-7.vhb7hne{padding-left:10px}.vwomtc5-7.v1dycipb{padding-left:24px}.vwomtc5-7.v1qfp5hv{padding-left:38px}.vwomtc5-7.v5btrph{padding-left:52px}.vwomtc5-7.viu82ah{background:#f0f0f2;color:#0a0b0d}.vwomtc5-7.viu82ah:before{content:"";position:absolute;left:-8px;top:6px;bottom:6px;width:2px;background:#22d3ee;border-radius:2px}.vwomtc5-7:not(.viu82ah):hover{background:#fcfcfc;color:#0a0b0d}.vwomtc5-8{transition:.24s cubic-bezier(.4,0,.2,1);transition-property:transform,background,color;display:inline-flex;width:18px;height:18px;align-items:center;justify-content:center;background:transparent;border:none;border-radius:var(--radius-sm);padding:0;color:#a4a7af;opacity:.8;flex-shrink:0;cursor:pointer}.vwomtc5-8:hover{background:#f0f0f2;color:#0a0b0d;opacity:1}.vwomtc5-8>svg{transition:.24s cubic-bezier(.4,0,.2,1);transition-property:transform;width:12px;height:12px}.vwomtc5-8.vk7wfis>svg{transform:rotate(90deg)}.vwomtc5-9{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;font-weight:600;font-size:12.5px;color:#0a0b0d}.vwomtc5-10{color:#a4a7af;font-weight:400}.vwomtc5-11{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;font-weight:500;font-size:12.5px}.vwomtc5-12{color:#a4a7af;font-weight:400}.vwomtc5-13{color:#a4a7af;font-weight:400;margin:0 4px}.vwomtc5-14{display:flex;align-items:center;justify-content:flex-start;gap:6px;flex-shrink:0}.vwomtc5-15{font-family:Geist Mono,JetBrains Mono,SF Mono,ui-monospace,monospace;font-feature-settings:"tnum","zero";font-size:10px;color:#a4a7af;font-variant-numeric:tabular-nums;flex-shrink:0}.v15ec1hr-1{height:100%;overflow:hidden;background:transparent}:root{color-scheme:light;--radius-sm: 6px;--radius-md: 8px;--radius-lg: 12px}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html,body{height:100%;font-family:Geist,-apple-system,BlinkMacSystemFont,Inter,Segoe UI,system-ui,sans-serif;font-feature-settings:"ss01","ss03","cv11";background:#fcfcfc;color:#0a0b0d;font-size:16px;line-height:1.5;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility;letter-spacing:-.005em}#root{height:100%}::selection{background:#22d3ee4d;color:#0a0b0d}button{cursor:pointer;font-family:inherit;font-size:inherit;color:inherit;letter-spacing:inherit}input,select,textarea{font-family:inherit;font-size:inherit;color:inherit}a{color:#0e7490;text-decoration:none}a:hover{color:#22d3ee;text-decoration:underline;text-underline-offset:3px}
|
|
@@ -25,8 +25,8 @@
|
|
|
25
25
|
href="https://fonts.googleapis.com/css2?family=Geist:wght@400;500;600&family=JetBrains+Mono:wght@400;500&display=swap"
|
|
26
26
|
rel="stylesheet"
|
|
27
27
|
/>
|
|
28
|
-
<script type="module" crossorigin src="/assets/index-
|
|
29
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
28
|
+
<script type="module" crossorigin src="/assets/index-CBvHVkE7.js"></script>
|
|
29
|
+
<link rel="stylesheet" crossorigin href="/assets/index-Dd7I28ts.css">
|
|
30
30
|
</head>
|
|
31
31
|
<body>
|
|
32
32
|
<div id="root"></div>
|
package/dist/bin.mjs
CHANGED
|
@@ -191,10 +191,36 @@ function evalAssert(condition, message) {
|
|
|
191
191
|
//#endregion
|
|
192
192
|
//#region ../sdk/src/tracer.ts
|
|
193
193
|
let spanIdCounter = 0;
|
|
194
|
+
const errorCoreFields = new Set([
|
|
195
|
+
"name",
|
|
196
|
+
"message",
|
|
197
|
+
"stack",
|
|
198
|
+
"capturedAt"
|
|
199
|
+
]);
|
|
194
200
|
function generateSpanId() {
|
|
195
201
|
spanIdCounter++;
|
|
196
202
|
return `span_${String(Date.now())}_${String(spanIdCounter)}`;
|
|
197
203
|
}
|
|
204
|
+
function isRecord$2(value) {
|
|
205
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
206
|
+
}
|
|
207
|
+
function formatUnknownErrorMessage(error) {
|
|
208
|
+
if (typeof error === "string") return error;
|
|
209
|
+
if (typeof error === "number" || typeof error === "boolean") return String(error);
|
|
210
|
+
if (typeof error === "bigint") return String(error);
|
|
211
|
+
if (typeof error === "symbol") return error.description ?? "Symbol";
|
|
212
|
+
if (typeof error === "function") return error.name ? `[function ${error.name}]` : "[function]";
|
|
213
|
+
if (error === void 0) return "undefined";
|
|
214
|
+
if (error === null) return "null";
|
|
215
|
+
try {
|
|
216
|
+
return JSON.stringify(error);
|
|
217
|
+
} catch {
|
|
218
|
+
return "Unknown error";
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
function getErrorExtraFields(error) {
|
|
222
|
+
return Object.fromEntries(Object.entries(error).filter(([key]) => !errorCoreFields.has(key)));
|
|
223
|
+
}
|
|
198
224
|
function updateCurrentSpan(update) {
|
|
199
225
|
const currentSpan = getCurrentScope()?.activeSpanStack.at(-1);
|
|
200
226
|
if (!currentSpan) return;
|
|
@@ -222,6 +248,50 @@ function mergeSpanAttributes(span, attributes) {
|
|
|
222
248
|
...attributes
|
|
223
249
|
};
|
|
224
250
|
}
|
|
251
|
+
function normalizeTraceError(error, capturedAt = void 0) {
|
|
252
|
+
if (error instanceof Error) return {
|
|
253
|
+
...getErrorExtraFields(error),
|
|
254
|
+
name: error.name,
|
|
255
|
+
message: error.message,
|
|
256
|
+
stack: error.stack,
|
|
257
|
+
capturedAt
|
|
258
|
+
};
|
|
259
|
+
if (isRecord$2(error)) {
|
|
260
|
+
const extraFields = getErrorExtraFields(error);
|
|
261
|
+
const name = typeof error.name === "string" ? error.name : void 0;
|
|
262
|
+
const stack = typeof error.stack === "string" ? error.stack : void 0;
|
|
263
|
+
const message = error.message === void 0 ? formatUnknownErrorMessage(error) : formatUnknownErrorMessage(error.message);
|
|
264
|
+
return {
|
|
265
|
+
...extraFields,
|
|
266
|
+
...name === void 0 ? {} : { name },
|
|
267
|
+
message,
|
|
268
|
+
...stack === void 0 ? {} : { stack },
|
|
269
|
+
capturedAt
|
|
270
|
+
};
|
|
271
|
+
}
|
|
272
|
+
return {
|
|
273
|
+
message: String(error),
|
|
274
|
+
capturedAt
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
function normalizeTraceErrors(errorOrErrors, additionalErrors, capturedAt) {
|
|
278
|
+
return (additionalErrors.length > 0 ? [errorOrErrors, ...additionalErrors] : Array.isArray(errorOrErrors) ? errorOrErrors : [errorOrErrors]).map((error) => normalizeTraceError(error, capturedAt));
|
|
279
|
+
}
|
|
280
|
+
function appendSpanErrors(span, errors) {
|
|
281
|
+
if (errors.length === 0) return;
|
|
282
|
+
const latestError = errors.at(-1);
|
|
283
|
+
if (latestError === void 0) return;
|
|
284
|
+
span.errors = [...span.errors ?? [], ...errors];
|
|
285
|
+
span.error = latestError;
|
|
286
|
+
span.status = "error";
|
|
287
|
+
}
|
|
288
|
+
function hasSpanError(span) {
|
|
289
|
+
return span.error !== void 0 || (span.errors?.length ?? 0) > 0;
|
|
290
|
+
}
|
|
291
|
+
function finishSpanWithoutThrownError(span) {
|
|
292
|
+
span.status = hasSpanError(span) ? "error" : "ok";
|
|
293
|
+
span.endedAt = (/* @__PURE__ */ new Date()).toISOString();
|
|
294
|
+
}
|
|
225
295
|
function createSpanHandle(span) {
|
|
226
296
|
return {
|
|
227
297
|
setName(value) {
|
|
@@ -378,6 +448,18 @@ const evalSpan = {
|
|
|
378
448
|
});
|
|
379
449
|
}
|
|
380
450
|
};
|
|
451
|
+
/**
|
|
452
|
+
* Attach one or more recoverable errors to the active eval span.
|
|
453
|
+
*
|
|
454
|
+
* The active span is marked as `error` even if its callback later completes
|
|
455
|
+
* without throwing. Calls outside `evalTracer.span(...)` are ignored.
|
|
456
|
+
*/
|
|
457
|
+
function captureEvalSpanError(errorOrErrors, ...additionalErrors) {
|
|
458
|
+
const errors = normalizeTraceErrors(errorOrErrors, additionalErrors, (/* @__PURE__ */ new Date()).toISOString());
|
|
459
|
+
updateCurrentSpan((currentSpan) => {
|
|
460
|
+
appendSpanErrors(currentSpan, errors);
|
|
461
|
+
});
|
|
462
|
+
}
|
|
381
463
|
async function traceSpan(info, fn) {
|
|
382
464
|
const scope = getCurrentScope();
|
|
383
465
|
if (!scope) return await fn(noopActiveSpan());
|
|
@@ -422,7 +504,7 @@ async function traceSpan(info, fn) {
|
|
|
422
504
|
"cache.age": Date.now() - new Date(storedAt).getTime()
|
|
423
505
|
});
|
|
424
506
|
replayRecording(scope, spanRecord, hit.recording);
|
|
425
|
-
spanRecord.status = "ok";
|
|
507
|
+
spanRecord.status = hit.recording.finalStatus ?? (hasSpanError(spanRecord) ? "error" : "ok");
|
|
426
508
|
spanRecord.endedAt = (/* @__PURE__ */ new Date()).toISOString();
|
|
427
509
|
return hit.recording.returnValue;
|
|
428
510
|
}
|
|
@@ -442,10 +524,14 @@ async function traceSpan(info, fn) {
|
|
|
442
524
|
scope.recordingStack.pop();
|
|
443
525
|
}
|
|
444
526
|
appendSubSpanOps(scope, frame);
|
|
527
|
+
finishSpanWithoutThrownError(spanRecord);
|
|
445
528
|
if (ctx.mode !== "bypass") {
|
|
446
529
|
const recording = {
|
|
447
530
|
returnValue: toJsonSafe(bodyResult),
|
|
448
531
|
finalAttributes: stripCacheAttributes(spanRecord.attributes),
|
|
532
|
+
finalStatus: spanRecord.status,
|
|
533
|
+
finalError: spanRecord.error,
|
|
534
|
+
finalErrors: spanRecord.errors,
|
|
449
535
|
ops: frame.ops
|
|
450
536
|
};
|
|
451
537
|
const entry = {
|
|
@@ -460,23 +546,15 @@ async function traceSpan(info, fn) {
|
|
|
460
546
|
};
|
|
461
547
|
await ctx.adapter.write(entry);
|
|
462
548
|
}
|
|
463
|
-
spanRecord.status = "ok";
|
|
464
|
-
spanRecord.endedAt = (/* @__PURE__ */ new Date()).toISOString();
|
|
465
549
|
return bodyResult;
|
|
466
550
|
}
|
|
467
551
|
const result = await fn(activeSpan);
|
|
468
|
-
spanRecord
|
|
469
|
-
spanRecord.endedAt = (/* @__PURE__ */ new Date()).toISOString();
|
|
552
|
+
finishSpanWithoutThrownError(spanRecord);
|
|
470
553
|
return result;
|
|
471
554
|
} catch (error) {
|
|
472
555
|
spanRecord.status = "error";
|
|
473
556
|
spanRecord.endedAt = (/* @__PURE__ */ new Date()).toISOString();
|
|
474
|
-
|
|
475
|
-
name: error.name,
|
|
476
|
-
message: error.message,
|
|
477
|
-
stack: error.stack
|
|
478
|
-
};
|
|
479
|
-
else spanRecord.error = { message: String(error) };
|
|
557
|
+
spanRecord.error = normalizeTraceError(error);
|
|
480
558
|
throw error;
|
|
481
559
|
} finally {
|
|
482
560
|
scope.spanStack.pop();
|
|
@@ -688,6 +766,7 @@ function serializeSubSpanTree(scope, spanId) {
|
|
|
688
766
|
attributes: void 0,
|
|
689
767
|
status: "ok",
|
|
690
768
|
error: void 0,
|
|
769
|
+
errors: void 0,
|
|
691
770
|
children: []
|
|
692
771
|
};
|
|
693
772
|
const children = scope.spans.filter((s) => s.parentId === spanId).map((child) => serializeSubSpanTree(scope, child.id));
|
|
@@ -697,6 +776,7 @@ function serializeSubSpanTree(scope, spanId) {
|
|
|
697
776
|
attributes: original.attributes,
|
|
698
777
|
status: original.status,
|
|
699
778
|
error: original.error,
|
|
779
|
+
errors: original.errors,
|
|
700
780
|
children
|
|
701
781
|
};
|
|
702
782
|
}
|
|
@@ -714,6 +794,8 @@ function replayRecording(scope, parentSpan, recording) {
|
|
|
714
794
|
try {
|
|
715
795
|
for (const op of recording.ops) applyRecordingOp(scope, parentSpan, op);
|
|
716
796
|
if (Object.keys(recording.finalAttributes).length > 0) mergeSpanAttributes(parentSpan, recording.finalAttributes);
|
|
797
|
+
if (recording.finalError !== void 0) parentSpan.error = recording.finalError;
|
|
798
|
+
if (recording.finalErrors !== void 0) parentSpan.errors = recording.finalErrors;
|
|
717
799
|
} finally {
|
|
718
800
|
scope.replayingDepth--;
|
|
719
801
|
}
|
|
@@ -749,7 +831,8 @@ function replaySerializedSpan(scope, parentId, serialized) {
|
|
|
749
831
|
endedAt: now,
|
|
750
832
|
status: serialized.status,
|
|
751
833
|
attributes: serialized.attributes,
|
|
752
|
-
error: serialized.error
|
|
834
|
+
error: serialized.error,
|
|
835
|
+
errors: serialized.errors
|
|
753
836
|
};
|
|
754
837
|
scope.spans.push(replayed);
|
|
755
838
|
for (const child of serialized.children) replaySerializedSpan(scope, id, child);
|
|
@@ -831,17 +914,13 @@ const columnDefSchema = z.object({
|
|
|
831
914
|
const cellValueSchema = z.union([jsonCellSchema, fileRefSchema]);
|
|
832
915
|
//#endregion
|
|
833
916
|
//#region ../shared/src/schemas/trace.ts
|
|
834
|
-
/**
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
"scorer",
|
|
842
|
-
"checkpoint",
|
|
843
|
-
"custom"
|
|
844
|
-
]);
|
|
917
|
+
/**
|
|
918
|
+
* Schema for span categories recorded in traces.
|
|
919
|
+
*
|
|
920
|
+
* The value is intentionally open-ended so external tracers can preserve their
|
|
921
|
+
* native span kinds instead of collapsing them into the built-in categories.
|
|
922
|
+
*/
|
|
923
|
+
const traceSpanKindSchema = z.string().min(1);
|
|
845
924
|
/** Schema for the supported presentation formats of trace attributes. */
|
|
846
925
|
const traceAttributeDisplayFormatSchema = z.enum([
|
|
847
926
|
"string",
|
|
@@ -890,6 +969,13 @@ const traceAttributeDisplayInputSchema = z.object({
|
|
|
890
969
|
});
|
|
891
970
|
/** Schema for authored trace display config in eval or workspace config. */
|
|
892
971
|
const traceDisplayInputConfigSchema = z.object({ attributes: z.array(traceAttributeDisplayInputSchema).optional() });
|
|
972
|
+
/** Schema for an error attached to a trace span. */
|
|
973
|
+
const traceSpanErrorSchema = z.object({
|
|
974
|
+
name: z.string().optional(),
|
|
975
|
+
message: z.string(),
|
|
976
|
+
stack: z.string().optional(),
|
|
977
|
+
capturedAt: z.string().optional()
|
|
978
|
+
}).catchall(z.unknown());
|
|
893
979
|
/** Schema for a persisted trace span captured during case execution. */
|
|
894
980
|
const traceSpanSchema = z.object({
|
|
895
981
|
id: z.string(),
|
|
@@ -906,11 +992,8 @@ const traceSpanSchema = z.object({
|
|
|
906
992
|
"cancelled"
|
|
907
993
|
]),
|
|
908
994
|
attributes: z.record(z.string(), z.unknown()).optional(),
|
|
909
|
-
error:
|
|
910
|
-
|
|
911
|
-
message: z.string(),
|
|
912
|
-
stack: z.string().optional()
|
|
913
|
-
}).optional()
|
|
995
|
+
error: traceSpanErrorSchema.optional(),
|
|
996
|
+
errors: z.array(traceSpanErrorSchema).optional()
|
|
914
997
|
});
|
|
915
998
|
//#endregion
|
|
916
999
|
//#region ../shared/src/schemas/chart.ts
|
|
@@ -1192,11 +1275,8 @@ const serializedCacheSpanSchema = z.object({
|
|
|
1192
1275
|
"error",
|
|
1193
1276
|
"cancelled"
|
|
1194
1277
|
]),
|
|
1195
|
-
error:
|
|
1196
|
-
|
|
1197
|
-
message: z.string(),
|
|
1198
|
-
stack: z.string().optional()
|
|
1199
|
-
}).optional()
|
|
1278
|
+
error: traceSpanErrorSchema.optional(),
|
|
1279
|
+
errors: z.array(traceSpanErrorSchema).optional()
|
|
1200
1280
|
}).extend({ children: z.lazy(() => z.array(serializedCacheSpanSchema)) });
|
|
1201
1281
|
/**
|
|
1202
1282
|
* One captured operation performed while a cached span's body executed.
|
|
@@ -1229,6 +1309,14 @@ const cacheRecordingOpSchema = z.discriminatedUnion("kind", [
|
|
|
1229
1309
|
const cacheRecordingSchema = z.object({
|
|
1230
1310
|
returnValue: z.unknown(),
|
|
1231
1311
|
finalAttributes: z.record(z.string(), z.unknown()),
|
|
1312
|
+
finalStatus: z.enum([
|
|
1313
|
+
"running",
|
|
1314
|
+
"ok",
|
|
1315
|
+
"error",
|
|
1316
|
+
"cancelled"
|
|
1317
|
+
]).optional(),
|
|
1318
|
+
finalError: traceSpanErrorSchema.optional(),
|
|
1319
|
+
finalErrors: z.array(traceSpanErrorSchema).optional(),
|
|
1232
1320
|
ops: z.array(cacheRecordingOpSchema)
|
|
1233
1321
|
});
|
|
1234
1322
|
/** Persisted cache file containing metadata and a recording. */
|
|
@@ -3040,6 +3128,39 @@ function toLastRunStatus(status) {
|
|
|
3040
3128
|
}
|
|
3041
3129
|
//#endregion
|
|
3042
3130
|
//#region ../runner/src/runner.ts
|
|
3131
|
+
const globMagicCharacters = new Set([
|
|
3132
|
+
"*",
|
|
3133
|
+
"?",
|
|
3134
|
+
"[",
|
|
3135
|
+
"]",
|
|
3136
|
+
"{",
|
|
3137
|
+
"}",
|
|
3138
|
+
"(",
|
|
3139
|
+
")",
|
|
3140
|
+
"!",
|
|
3141
|
+
"+",
|
|
3142
|
+
"@"
|
|
3143
|
+
]);
|
|
3144
|
+
function hasGlobMagic(value) {
|
|
3145
|
+
for (const char of value) if (globMagicCharacters.has(char)) return true;
|
|
3146
|
+
return false;
|
|
3147
|
+
}
|
|
3148
|
+
function getWatchRootForIncludePattern(params) {
|
|
3149
|
+
const segments = params.pattern.replaceAll("\\", "/").split("/").filter((part) => part !== "");
|
|
3150
|
+
const firstGlobSegmentIndex = segments.findIndex(hasGlobMagic);
|
|
3151
|
+
if (firstGlobSegmentIndex === -1) return dirname(resolve(params.workspaceRoot, params.pattern));
|
|
3152
|
+
if (firstGlobSegmentIndex === 0) return params.workspaceRoot;
|
|
3153
|
+
return resolve(params.workspaceRoot, segments.slice(0, firstGlobSegmentIndex).join("/"));
|
|
3154
|
+
}
|
|
3155
|
+
function getWatchRootsForIncludePatterns(params) {
|
|
3156
|
+
const roots = /* @__PURE__ */ new Set();
|
|
3157
|
+
for (const pattern of params.patterns) roots.add(getWatchRootForIncludePattern({
|
|
3158
|
+
pattern,
|
|
3159
|
+
workspaceRoot: params.workspaceRoot
|
|
3160
|
+
}));
|
|
3161
|
+
if (roots.size === 0) return [params.workspaceRoot];
|
|
3162
|
+
return [...roots];
|
|
3163
|
+
}
|
|
3043
3164
|
/** Create an in-memory eval runner bound to the current workspace config. */
|
|
3044
3165
|
function createRunner({ watchForChanges = true } = {}) {
|
|
3045
3166
|
let config;
|
|
@@ -3052,6 +3173,8 @@ function createRunner({ watchForChanges = true } = {}) {
|
|
|
3052
3173
|
const latestRunInfoMap = /* @__PURE__ */ new Map();
|
|
3053
3174
|
const discoveryListeners = /* @__PURE__ */ new Set();
|
|
3054
3175
|
let nextShortIdNum = 0;
|
|
3176
|
+
let discoveryWatcher;
|
|
3177
|
+
let discoveryRefreshTimer;
|
|
3055
3178
|
function toWorkspaceRelativePath(filePath) {
|
|
3056
3179
|
return relative(workspaceRoot, filePath).replaceAll("\\", "/");
|
|
3057
3180
|
}
|
|
@@ -3080,7 +3203,7 @@ function createRunner({ watchForChanges = true } = {}) {
|
|
|
3080
3203
|
});
|
|
3081
3204
|
await loadPersistedRuns();
|
|
3082
3205
|
await runner.refreshDiscovery();
|
|
3083
|
-
if (watchForChanges) setupWatcher();
|
|
3206
|
+
if (watchForChanges) await setupWatcher();
|
|
3084
3207
|
},
|
|
3085
3208
|
async listCache() {
|
|
3086
3209
|
return cacheStore.list();
|
|
@@ -3405,6 +3528,16 @@ function createRunner({ watchForChanges = true } = {}) {
|
|
|
3405
3528
|
discoveryListeners.delete(listener);
|
|
3406
3529
|
};
|
|
3407
3530
|
},
|
|
3531
|
+
async close() {
|
|
3532
|
+
if (discoveryRefreshTimer !== void 0) {
|
|
3533
|
+
clearTimeout(discoveryRefreshTimer);
|
|
3534
|
+
discoveryRefreshTimer = void 0;
|
|
3535
|
+
}
|
|
3536
|
+
const watcher = discoveryWatcher;
|
|
3537
|
+
if (watcher === void 0) return;
|
|
3538
|
+
discoveryWatcher = void 0;
|
|
3539
|
+
await watcher.close();
|
|
3540
|
+
},
|
|
3408
3541
|
getWorkspaceRoot() {
|
|
3409
3542
|
return workspaceRoot;
|
|
3410
3543
|
},
|
|
@@ -3412,19 +3545,29 @@ function createRunner({ watchForChanges = true } = {}) {
|
|
|
3412
3545
|
return resolveArtifactPath(join(localStateDir, "runs"), artifactId_);
|
|
3413
3546
|
}
|
|
3414
3547
|
};
|
|
3415
|
-
function setupWatcher() {
|
|
3416
|
-
const watcher = watch(
|
|
3548
|
+
async function setupWatcher() {
|
|
3549
|
+
const watcher = watch(getWatchRootsForIncludePatterns({
|
|
3550
|
+
patterns: config.include,
|
|
3551
|
+
workspaceRoot
|
|
3552
|
+
}), {
|
|
3417
3553
|
ignoreInitial: true,
|
|
3418
3554
|
persistent: true
|
|
3419
3555
|
});
|
|
3420
|
-
|
|
3421
|
-
|
|
3422
|
-
|
|
3423
|
-
|
|
3424
|
-
|
|
3425
|
-
|
|
3426
|
-
|
|
3427
|
-
|
|
3556
|
+
discoveryWatcher = watcher;
|
|
3557
|
+
const scheduleRefresh = () => {
|
|
3558
|
+
if (discoveryRefreshTimer !== void 0) clearTimeout(discoveryRefreshTimer);
|
|
3559
|
+
discoveryRefreshTimer = setTimeout(() => {
|
|
3560
|
+
discoveryRefreshTimer = void 0;
|
|
3561
|
+
runner.refreshDiscovery();
|
|
3562
|
+
}, 50);
|
|
3563
|
+
};
|
|
3564
|
+
watcher.on("change", scheduleRefresh);
|
|
3565
|
+
watcher.on("add", scheduleRefresh);
|
|
3566
|
+
watcher.on("unlink", scheduleRefresh);
|
|
3567
|
+
watcher.on("addDir", scheduleRefresh);
|
|
3568
|
+
watcher.on("unlinkDir", scheduleRefresh);
|
|
3569
|
+
await new Promise((ready) => {
|
|
3570
|
+
watcher.once("ready", ready);
|
|
3428
3571
|
});
|
|
3429
3572
|
}
|
|
3430
3573
|
function emitDiscoveryEvent() {
|
|
@@ -3616,8 +3759,8 @@ async function commandApp(args) {
|
|
|
3616
3759
|
const { serve } = await import("@hono/node-server");
|
|
3617
3760
|
const bundledWebDist = resolve(currentDir, "apps/web/dist");
|
|
3618
3761
|
if (existsSync(bundledWebDist)) process.env.AGENT_EVALS_WEB_DIST = bundledWebDist;
|
|
3619
|
-
const appModule = await import("./app-
|
|
3620
|
-
const runnerModule = await import("./runner-
|
|
3762
|
+
const appModule = await import("./app-C5CJ1sX6.mjs");
|
|
3763
|
+
const runnerModule = await import("./runner-Cdlvk56X.mjs");
|
|
3621
3764
|
if (!isHonoAppModule(appModule)) throw new Error("Server app module is invalid");
|
|
3622
3765
|
if (!isServerRunnerModule(runnerModule)) throw new Error("Server runner module is invalid");
|
|
3623
3766
|
await runnerModule.initRunner();
|
|
@@ -3852,4 +3995,4 @@ Options:
|
|
|
3852
3995
|
`);
|
|
3853
3996
|
}
|
|
3854
3997
|
//#endregion
|
|
3855
|
-
export {
|
|
3998
|
+
export { columnKindSchema as $, evalSummarySchema as A, evalChartsConfigSchema as B, assertionFailureSchema as C, evalStatAggregateSchema as D, evalFreshnessStatusSchema as E, evalChartColorSchema as F, traceDisplayConfigSchema as G, traceAttributeDisplayInputSchema as H, evalChartConfigSchema as I, traceSpanKindSchema as J, traceDisplayInputConfigSchema as K, evalChartMetricSchema as L, evalChartAggregateSchema as M, evalChartAxisSchema as N, evalStatItemSchema as O, evalChartBuiltinMetricSchema as P, columnFormatSchema as Q, evalChartTooltipExtraSchema as R, spanCacheOptionsSchema as S, caseRowSchema as T, traceAttributeDisplayPlacementSchema as U, traceAttributeDisplayFormatSchema as V, traceAttributeDisplaySchema as W, cellValueSchema as X, traceSpanSchema as Y, columnDefSchema as Z, cacheListItemSchema as _, setEvalOutput as _t, sseEnvelopeSchema as a, buildTraceTree as at, cacheRecordingSchema as b, defineEval as bt, deriveScopedSummaryFromCases as c, evalTracer as ct, runManifestSchema as d, EvalAssertionError as dt, fileRefSchema as et, runSummarySchema as f, evalAssert as ft, cacheFileSchema as g, runInEvalScope as gt, cacheEntrySchema as h, isInEvalScope as ht, updateManualScoreRequestSchema as i, runArtifactRefSchema as it, scoreTraceSchema as j, evalStatsConfigSchema as k, deriveStatusFromCaseRows as l, hashCacheKey as lt, trialSelectionModeSchema as m, incrementEvalOutput as mt, createRunner as n, numberDisplayOptionsSchema as nt, getEvalTitle as o, captureEvalSpanError as ot, agentEvalsConfigSchema as p, getCurrentScope as pt, traceSpanErrorSchema as q, createRunRequestSchema as r, repoFileRefSchema as rt, getEvalDisplayStatus as s, evalSpan as st, runCli as t, jsonCellSchema as tt, deriveStatusFromChildStatuses as u, hashCacheKeySync as ut, cacheModeSchema as v, setScopeCacheContext as vt, caseDetailSchema as w, serializedCacheSpanSchema as x, getEvalRegistry as xt, cacheRecordingOpSchema as y, repoFile as yt, evalChartTypeSchema as z };
|