@netlify/axis 1.11.0 → 1.13.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/adapters/base/acp-adapter.d.ts +5 -0
- package/dist/adapters/base/acp-adapter.d.ts.map +1 -1
- package/dist/adapters/base/acp-adapter.js +1 -0
- package/dist/adapters/base/acp-adapter.js.map +1 -1
- package/dist/adapters/base/agent-adapter.d.ts +5 -0
- package/dist/adapters/base/agent-adapter.d.ts.map +1 -1
- package/dist/adapters/base/agent-adapter.js +1 -0
- package/dist/adapters/base/agent-adapter.js.map +1 -1
- package/dist/adapters/claude-code.d.ts.map +1 -1
- package/dist/adapters/claude-code.js +31 -1
- package/dist/adapters/claude-code.js.map +1 -1
- package/dist/adapters/codex.d.ts.map +1 -1
- package/dist/adapters/codex.js +9 -0
- package/dist/adapters/codex.js.map +1 -1
- package/dist/adapters/utils/local-session.d.ts +46 -0
- package/dist/adapters/utils/local-session.d.ts.map +1 -0
- package/dist/adapters/utils/local-session.js +123 -0
- package/dist/adapters/utils/local-session.js.map +1 -0
- package/dist/cli.js +38 -0
- package/dist/cli.js.map +1 -1
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js +16 -0
- package/dist/config/loader.js.map +1 -1
- package/dist/config/validator.d.ts.map +1 -1
- package/dist/config/validator.js +32 -0
- package/dist/config/validator.js.map +1 -1
- package/dist/report-ui/index.html +111 -106
- package/dist/runner/runner.d.ts.map +1 -1
- package/dist/runner/runner.js +0 -0
- package/dist/runner/runner.js.map +1 -1
- package/dist/scoring/deep-eval.d.ts +6 -1
- package/dist/scoring/deep-eval.d.ts.map +1 -1
- package/dist/scoring/deep-eval.js +3 -2
- package/dist/scoring/deep-eval.js.map +1 -1
- package/dist/scoring/goal-achievement.d.ts +2 -1
- package/dist/scoring/goal-achievement.d.ts.map +1 -1
- package/dist/scoring/goal-achievement.js +7 -5
- package/dist/scoring/goal-achievement.js.map +1 -1
- package/dist/scoring/index.d.ts.map +1 -1
- package/dist/scoring/index.js +12 -4
- package/dist/scoring/index.js.map +1 -1
- package/dist/scoring/judge.d.ts +26 -1
- package/dist/scoring/judge.d.ts.map +1 -1
- package/dist/scoring/judge.js +29 -3
- package/dist/scoring/judge.js.map +1 -1
- package/dist/types/agent.d.ts +9 -0
- package/dist/types/agent.d.ts.map +1 -1
- package/dist/types/config.d.ts +24 -0
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/scoring.d.ts +14 -1
- package/dist/types/scoring.d.ts.map +1 -1
- package/dist/ui/format.d.ts.map +1 -1
- package/dist/ui/format.js +4 -0
- package/dist/ui/format.js.map +1 -1
- package/package.json +4 -1
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
<!DOCTYPE html><html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>AXIS Report</title><style>:root{--bg: #fafbf9;--bg-card: #ffffff;--bg-alt: #f3f4f6;--text: #1a1a2e;--text-secondary: #4a5568;--text-muted: #637083;--mid-gray: #6b7280;--light-gray: #e5e7eb;--border: #e5e7eb;--accent: #016867;--accent-hover: #015554;--accent-bright: #2dd4bf;--accent-light: rgba(1, 104, 103, .07);--success: #059669;--success-light: #ecfdf5;--yellow: #d97706;--yellow-light: #fffbeb;--warning: #d97706;--warning-light: #fffbeb;--danger: #dc2626;--danger-light: #fef2f2;--cat-env: #059669;--cat-svc: #2563eb;--cat-agent: #6b7280;--radius: 8px;--radius-lg: 12px;--shadow: 0 1px 3px rgba(0, 0, 0, .04), 0 2px 8px rgba(0, 0, 0, .03);--shadow-lg: 0 4px 16px rgba(0, 0, 0, .06), 0 0 40px rgba(1, 104, 103, .04);--font: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, Roboto, sans-serif;--font-mono: "SF Mono", SFMono-Regular, Menlo, Consolas, monospace;--transition: .15s ease}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html{font-size:15px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body{font-family:var(--font);color:var(--text);background:var(--bg);line-height:1.6;min-height:100vh}.container{max-width:1120px;margin:0 auto;padding:32px 24px 64px}h1{font-size:2rem;font-weight:800;letter-spacing:-.02em;background:linear-gradient(135deg,var(--text) 0%,var(--accent) 100%);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}h2{font-size:1.375rem;font-weight:700;letter-spacing:-.01em;color:var(--text)}h3{font-size:1.0625rem;font-weight:600;color:var(--text)}.report-header{display:flex;align-items:flex-start;justify-content:space-between;gap:32px;margin-bottom:32px}.header-left{flex:1;min-width:0}.report-branding{display:flex;align-items:baseline;gap:12px;margin-bottom:16px}.site-logo-mark{font-size:2.0625rem;font-weight:800;letter-spacing:.12em;color:var(--accent)}.logo-ax{letter-spacing:-.06em}.logo-i{display:inline-block;font-style:italic;transform:skew(-20deg);margin-left:2px;margin-right:-2px}.report-badge{font-size:2.0625rem;font-weight:800;letter-spacing:.02em;color:var(--accent)}.report-meta{margin:0}.report-meta-row{font-size:.875rem;line-height:1.8;color:var(--text-secondary)}.report-meta-label{font-weight:600;color:var(--text)}.report-meta-value{color:var(--text-secondary)}.report-meta-id{font-family:var(--font-mono);font-size:.8125rem}.summary-card{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius-lg);padding:24px 28px;box-shadow:var(--shadow);flex-shrink:0;display:flex;align-items:center;gap:24px}.summary-hero{text-align:center;padding:0 8px}.summary-hero .hero-score{font-size:2.5rem;font-weight:800;line-height:1;color:var(--accent)}.summary-hero .hero-label{font-size:.6875rem;text-transform:uppercase;letter-spacing:.06em;color:var(--text-muted);font-weight:600;margin-top:4px;white-space:nowrap}.summary-divider{width:1px;align-self:stretch;background:var(--border)}.summary-stats{display:flex;gap:20px;align-items:flex-start}.summary-stat{text-align:center;min-width:48px}.summary-stat .stat-value{font-size:1.25rem;font-weight:700;color:var(--text);line-height:1.2;margin-bottom:2px}.summary-stat .stat-label{font-size:.625rem;text-transform:uppercase;letter-spacing:.05em;color:var(--text-muted);font-weight:500;white-space:nowrap}.summary-stat.stat-passed .stat-value{color:var(--success)}.summary-stat.stat-failed .stat-value{color:var(--danger)}.summary-stat.stat-skipped .stat-value{color:var(--text-muted)}.score-badge{display:inline-flex;align-items:center;justify-content:center;min-width:36px;height:28px;padding:0 8px;border-radius:14px;font-size:.8125rem;font-weight:700;color:#fff;line-height:1}.score-badge.score-green{background:var(--success)}.score-badge.score-yellow{background:var(--yellow)}.score-badge.score-orange{background:#ea580c}.score-badge.score-red{background:var(--danger)}.score-badge.score-na{background:var(--mid-gray);font-weight:500}.score-badge-lg{min-width:64px;height:64px;border-radius:32px;font-size:1.5rem;padding:0 16px}.results-section{margin-top:32px}.results-table{width:100%;border-collapse:collapse;font-size:.875rem;table-layout:fixed}.results-table thead th{text-align:left;padding:10px 12px;font-size:.6875rem;text-transform:uppercase;letter-spacing:.06em;color:var(--text-muted);font-weight:600;white-space:nowrap;position:sticky;top:0;background:var(--bg);box-shadow:inset 0 -2px 0 var(--light-gray);z-index:2}.results-table thead th:first-child{width:36px}.results-table thead th.col-score{text-align:center;width:60px}.results-table thead th.col-right{text-align:right;width:90px}.results-table td.col-agent,.results-table td.col-scenario-header{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.result-row{cursor:pointer;transition:background var(--transition)}.result-row:hover,.result-row.expanded{background:var(--accent-light)}.result-row td{padding:12px;border-bottom:1px solid var(--light-gray);vertical-align:middle}.result-row td.col-score{text-align:center}.result-row td.col-right{text-align:right;font-family:var(--font-mono);font-size:.8125rem;color:var(--text-secondary)}.result-row td.col-scenario{font-weight:500;max-width:240px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.result-row td.col-agent{color:var(--text-secondary);font-family:var(--font-mono);font-size:.8125rem}.result-row .expand-icon{display:inline-block;width:16px;color:var(--text-muted);transition:transform var(--transition);font-size:.625rem;opacity:.5}.result-row.expanded .expand-icon{transform:rotate(90deg)}.error-btn{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;margin-left:6px;border:1px solid var(--light-gray);border-radius:50%;background:var(--bg-card);color:var(--danger);font-size:.75rem;font-weight:600;cursor:pointer;vertical-align:middle;line-height:1;transition:background var(--transition),border-color var(--transition)}.error-btn:hover{background:var(--danger-light);border-color:var(--danger)}.modal-error-text{border-color:var(--danger)!important;background:var(--danger-light)!important}.scenario-header-row{cursor:pointer;background:#e8ebe5;transition:background var(--transition)}.scenario-header-row:hover{background:#e0e3dc}.scenario-header-row td{padding:14px 12px;vertical-align:middle;border-bottom:1px solid var(--border)}.scenario-header-row td.col-scenario-header{font-size:.9375rem;font-weight:700;letter-spacing:-.01em;color:var(--text);padding-left:0}.scenario-header-row .expand-icon{display:inline-block;width:16px;color:var(--text-muted);transition:transform var(--transition);font-size:.75rem}.scenario-header-row.expanded .expand-icon{transform:rotate(90deg)}.agent-row td.col-expand-indent{text-align:center}.agent-row.scenario-collapsed,.detail-row.scenario-collapsed,.detail-row{display:none}.detail-row.visible{display:table-row}.detail-row td{padding:0;border-bottom:2px solid var(--light-gray)}.detail-panel{padding:24px;background:var(--bg)}.score-overview{display:flex;align-items:flex-start;gap:32px;margin-bottom:32px;padding-bottom:24px;border-bottom:1px solid var(--light-gray)}.score-overview .big-score{flex-shrink:0}.category-bars{flex:1;display:flex;flex-direction:column;gap:8px;padding-top:4px}.category-bar-row{display:flex;align-items:center;gap:12px}.category-bar-label{width:120px;font-size:.8125rem;font-weight:500;color:var(--text-secondary);flex-shrink:0}.category-bar-value{font-size:.8125rem;font-weight:600;width:32px;text-align:right;flex-shrink:0}.progress-bar{flex:1;height:8px;background:var(--light-gray);border-radius:4px;overflow:hidden;min-width:80px}.progress-bar .fill{height:100%;border-radius:4px;transition:width .4s ease}.progress-bar .fill.fill-green{background:var(--success)}.progress-bar .fill.fill-yellow{background:var(--yellow)}.progress-bar .fill.fill-orange{background:#ea580c}.progress-bar .fill.fill-red{background:var(--danger)}.detail-sections{display:flex;flex-direction:column;gap:20px}.detail-section{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius-lg);padding:20px;box-shadow:var(--shadow)}.section-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px}.section-header h3{display:flex;align-items:center;gap:8px}.section-score{font-size:.875rem;font-weight:600;color:var(--text-secondary)}.section-description{font-size:.8125rem;color:var(--text-muted);line-height:1.5;margin:-8px 0 16px;max-width:70ch}.section-description code{font-family:var(--font-mono);font-size:.75rem;background:var(--bg-alt);color:var(--text-secondary);padding:1px 5px;border-radius:3px}.criteria-list{display:flex;flex-direction:column;gap:12px}.criterion-item{padding:12px;background:var(--bg);border-radius:var(--radius);border:1px solid var(--light-gray)}.criterion-top{display:flex;align-items:center;gap:8px;margin-bottom:6px}.criterion-icon{font-size:.875rem;width:20px;text-align:center;flex-shrink:0}.criterion-icon.high{color:var(--success)}.criterion-icon.good{color:var(--yellow)}.criterion-icon.medium{color:#ea580c}.criterion-icon.low{color:var(--danger)}.criterion-name{flex:1;font-size:.8125rem;font-weight:500}.criterion-score{font-size:.8125rem;font-weight:600;color:var(--text-secondary);flex-shrink:0}.criterion-weight{font-size:.6875rem;color:var(--text-muted);background:var(--light-gray);padding:1px 6px;border-radius:3px;flex-shrink:0}.criterion-bar{margin-bottom:8px}.criterion-rationale{font-size:.8125rem;color:var(--text-secondary);line-height:1.5;font-style:italic}.criterion-perfect{padding:8px 12px;background:var(--success-light);border-left:3px solid var(--success)}.criterion-perfect .criterion-bar{display:none}.criterion-imperfect{border-left:3px solid var(--warning)}.dim-tags{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:10px}.dim-tag{font-size:.6875rem;font-weight:600;font-family:var(--font-mono);padding:2px 8px;border-radius:10px;color:#fff}.dim-tag.fill-green{background:var(--success)}.dim-tag.fill-yellow{background:var(--yellow)}.dim-tag.fill-orange{background:#ea580c}.dim-tag.fill-red{background:var(--danger)}.cat-deduction-item{padding:8px 0;border-bottom:1px solid rgba(217,119,6,.15)}.cat-deduction-item:last-child{border-bottom:none;padding-bottom:0}.cat-deduction-id{font-family:var(--font-mono);font-size:.75rem;font-weight:600;color:var(--text);margin-right:8px}.interaction-link{cursor:pointer;color:var(--accent);text-decoration:none;border-bottom:1px dashed transparent;transition:border-color var(--transition),color var(--transition)}.interaction-link:hover{border-bottom-color:var(--accent)}a.cat-deduction-id.interaction-link,a.wf-id.interaction-link{color:var(--accent)}@keyframes interaction-flash{0%,35%{background:var(--yellow-light);box-shadow:inset 3px 0 0 var(--yellow)}to{background:transparent;box-shadow:inset 3px 0 0 transparent}}.sparse-line.interaction-flash{animation:interaction-flash 1.8s ease-out}.cat-deduction-scores{display:inline-flex;gap:4px}.dim-score-tag{font-size:.625rem;font-family:var(--font-mono);background:var(--light-gray);padding:1px 5px;border-radius:3px;color:var(--text-secondary)}.speed-tag{position:relative;cursor:help}.speed-tooltip{display:none;position:absolute;bottom:calc(100% + 6px);left:50%;transform:translate(-50%);background:var(--text);color:var(--bg-card);padding:8px 10px;border-radius:6px;width:max-content;max-width:260px;z-index:30;pointer-events:none;box-shadow:0 6px 16px #0003;font-family:var(--font-sans, inherit);text-transform:none;letter-spacing:normal;text-align:left;font-weight:400}.speed-tag:hover .speed-tooltip,.speed-tag:focus-within .speed-tooltip{display:block}.speed-tooltip-header{display:flex;align-items:baseline;justify-content:space-between;gap:10px;font-size:.75rem;margin-bottom:6px;color:var(--bg-card)}.speed-tooltip-header strong{font-weight:600}.speed-tooltip-actual{font-family:var(--font-mono);font-size:.6875rem;color:var(--bg-alt)}.speed-tooltip-tiers{display:flex;flex-direction:column;gap:2px;font-family:var(--font-mono);font-size:.6875rem}.speed-tooltip-row{display:flex;justify-content:space-between;gap:14px;padding:2px 6px;border-radius:3px;color:var(--bg-alt)}.speed-tooltip-row-active{background:#ffffff1f;color:var(--bg-card);font-weight:600}.speed-tooltip-range{white-space:nowrap}.speed-tooltip-score{font-variant-numeric:tabular-nums}.cat-deduction-rationale{display:block;font-size:.75rem;color:var(--text-secondary);line-height:1.5;font-style:italic;margin-top:4px}.cat-deduction-note{font-size:.75rem;color:var(--text-muted);font-style:italic}.deductions-baseline{background:var(--bg);border-color:var(--light-gray)}.deductions-baseline .deductions-header{color:var(--text-muted)}.dimensions-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:10px;margin-bottom:16px}.dimension-item{display:flex;align-items:center;gap:8px}.dimension-label{width:72px;font-size:.75rem;font-weight:500;color:var(--text-secondary);flex-shrink:0}.dimension-value{font-size:.75rem;font-weight:600;width:28px;text-align:right;flex-shrink:0}.interaction-meta{font-size:.75rem;color:var(--text-muted);margin-bottom:12px}.category-empty-state{font-size:.8125rem;color:var(--text-muted);font-style:italic;padding:12px 14px;background:var(--bg-alt);border-radius:6px}.audits-section{margin-top:12px}.audits-toggle{font-size:.75rem;color:var(--accent);background:none;border:none;cursor:pointer;font-family:var(--font);padding:4px 0;font-weight:500}.audits-toggle:hover{color:var(--accent-hover)}.audits-list{display:none;margin-top:8px}.audits-list.visible{display:block}.audit-item{padding:10px 12px;background:var(--bg);border-radius:var(--radius);margin-bottom:6px;border-left:3px solid var(--mid-gray)}.audit-header{display:flex;align-items:center;gap:8px;margin-bottom:4px;flex-wrap:wrap}.audit-id{font-family:var(--font-mono);font-size:.75rem;font-weight:600;color:var(--text)}.audit-scores{font-family:var(--font-mono);font-size:.6875rem;color:var(--text-muted)}.audit-rationale{font-size:.8125rem;color:var(--text-secondary);line-height:1.5}.necessity-section{margin-top:12px;padding-top:12px;border-top:1px solid var(--light-gray)}.necessity-header{display:flex;align-items:center;gap:8px;margin-bottom:4px}.necessity-label{font-size:.75rem;font-weight:600;color:var(--text-secondary)}.necessity-score{font-size:.75rem;font-weight:600}.necessity-rationale{font-size:.8125rem;color:var(--text-secondary);font-style:italic}.waterfall{font-size:.8125rem}.waterfall-header{display:flex;align-items:flex-end;border-bottom:1px solid var(--light-gray);padding-bottom:6px;margin-bottom:2px}.wf-label-col{width:200px;flex-shrink:0;display:flex;align-items:center;gap:6px;overflow:hidden}.waterfall-header .wf-label-col,.waterfall-header .wf-dur-col{font-size:.6875rem;text-transform:uppercase;letter-spacing:.06em;color:var(--text-muted);font-weight:600}.wf-timeline-col{flex:1;min-width:0;position:relative}.wf-dur-col{width:64px;flex-shrink:0;text-align:right;font-family:var(--font-mono);font-size:.75rem;color:var(--text-secondary)}.wf-ticks{position:relative;height:18px}.wf-tick{position:absolute;transform:translate(-50%);font-family:var(--font-mono);font-size:.625rem;color:var(--text-muted);white-space:nowrap;top:0}.wf-tick:after{content:"";position:absolute;left:50%;top:100%;width:1px;height:4px;background:var(--light-gray)}.waterfall-body{position:relative}.wf-row{display:flex;align-items:center;height:26px;border-bottom:1px solid rgba(0,0,0,.03)}.wf-row:hover{background:var(--accent-light)}.wf-id{font-family:var(--font-mono);font-size:.6875rem;color:var(--text-muted);width:28px;flex-shrink:0}.wf-cat{font-size:.625rem;text-transform:uppercase;letter-spacing:.04em;color:var(--text-muted);width:36px;flex-shrink:0}.wf-tool{font-size:.75rem;color:var(--text-secondary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.wf-track{position:relative;height:14px;background:#00000004;border-radius:2px}.wf-bar{position:absolute;top:2px;height:10px;border-radius:2px;min-width:3px;cursor:default;transition:opacity var(--transition)}.wf-row:hover .wf-bar{opacity:.8}.wf-env .wf-bar{background:var(--cat-env)}.wf-svc .wf-bar{background:var(--cat-svc)}.wf-agent .wf-bar{background:var(--cat-agent)}.wf-bar-error{background:var(--danger)!important}.wf-track{position:relative}.wf-tooltip{position:absolute;bottom:calc(100% + 8px);left:0;display:none;background:var(--text);color:var(--bg-card);padding:10px 12px;border-radius:6px;width:max-content;max-width:360px;z-index:20;pointer-events:none;box-shadow:0 6px 16px #0003;font-family:var(--font-sans, inherit);text-transform:none;letter-spacing:normal;text-align:left;font-weight:400}.wf-bar:hover .wf-tooltip{display:block}.wf-track .wf-bar.wf-tip-right .wf-tooltip{left:auto;right:0}.wf-tooltip-header{display:flex;align-items:center;gap:8px;margin-bottom:6px;font-size:.8125rem}.wf-tooltip-id{font-family:var(--font-mono);color:var(--bg-alt);font-size:.75rem}.wf-tooltip-tool{font-family:var(--font-mono);font-weight:600;color:var(--bg-card);word-break:break-all}.wf-tooltip-cat{font-size:.625rem;font-weight:600;padding:1px 6px;border-radius:3px;margin-left:auto;flex-shrink:0}.wf-tooltip-cat-env{background:var(--cat-env);color:var(--text)}.wf-tooltip-cat-svc{background:var(--cat-svc);color:var(--text)}.wf-tooltip-cat-agent{background:var(--cat-agent);color:var(--text)}.wf-tooltip-meta{display:flex;flex-wrap:wrap;gap:8px 14px;font-size:.75rem;color:var(--bg-alt);margin-bottom:4px}.wf-tooltip-meta strong{color:var(--bg-card);font-weight:600;margin-right:4px}.wf-tooltip-error{color:#fca5a5;font-weight:600}.wf-tooltip-snippet{font-family:var(--font-mono);font-size:.6875rem;margin:6px 0 0;padding:6px 8px;background:#ffffff0f;border-radius:4px;white-space:pre-wrap;max-height:120px;overflow:hidden;line-height:1.45;color:var(--bg-card)}.wf-lifecycle .wf-bar{background:repeating-linear-gradient(45deg,var(--mid-gray),var(--mid-gray) 4px,var(--light-gray) 4px,var(--light-gray) 8px);opacity:.7}.wf-lifecycle .wf-tool{font-style:italic;color:var(--text-muted)}.wf-lifecycle .wf-cat{color:var(--text-muted)}.wf-show-all{display:block;width:100%;margin-top:4px;padding:6px;font-size:.75rem;color:var(--accent);background:none;border:1px dashed var(--light-gray);border-radius:var(--radius);cursor:pointer;font-family:var(--font);font-weight:500}.wf-show-all:hover{background:var(--accent-light);border-color:var(--accent)}.wf-legend{display:flex;gap:16px;margin-top:10px;padding-top:8px;border-top:1px solid var(--light-gray)}.wf-legend-item{display:flex;align-items:center;gap:5px;font-size:.6875rem;color:var(--text-muted)}.wf-legend-dot{width:10px;height:10px;border-radius:2px}.wf-legend-dot.wf-env{background:var(--cat-env)}.wf-legend-dot.wf-svc{background:var(--cat-svc)}.wf-legend-dot.wf-agent{background:var(--cat-agent)}.sparse-index-section{margin-top:16px}.sparse-index-toggle{font-size:.75rem;color:var(--accent);background:none;border:none;cursor:pointer;font-family:var(--font);padding:4px 0;font-weight:500}.sparse-index-content{display:none;margin-top:8px}.sparse-index-content.visible{display:block}.sparse-line{font-family:var(--font-mono);font-size:.75rem;line-height:1.8;padding:3px 10px;border-left:3px solid var(--cat-agent);white-space:pre;overflow-x:auto}.sparse-line.cat-env{border-left-color:var(--cat-env);background:#0596690a}.sparse-line.cat-svc{border-left-color:var(--cat-svc);background:#2563eb0a}.sparse-line.cat-agent{border-left-color:var(--cat-agent)}.sparse-line-expandable{cursor:pointer;position:relative}.sparse-line-expandable:after{content:"▶";position:absolute;right:8px;top:4px;font-size:.6rem;color:var(--text-secondary);transition:transform .15s ease}.sparse-line-expandable.expanded:after{transform:rotate(90deg)}.sparse-line-expandable:hover{background:var(--accent-light)}.sparse-line-content{display:none;margin:4px 0 8px 12px;padding:8px 12px;background:var(--bg-alt);border-radius:4px;border:1px solid var(--border)}.sparse-line-expandable.expanded .sparse-line-content{display:block}.sparse-line-content pre{margin:0;font-family:var(--font-mono);font-size:.7rem;line-height:1.5;white-space:pre-wrap;word-break:break-word;color:var(--text)}.sparse-expand-all{font-size:.75rem;color:var(--accent);background:none;border:none;cursor:pointer;font-family:var(--font);padding:4px 0;font-weight:500;margin-left:12px}.info-btn{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;margin-left:6px;border:1px solid var(--light-gray);border-radius:50%;background:var(--bg-card);color:var(--accent);font-size:.75rem;font-weight:600;cursor:pointer;vertical-align:middle;line-height:1;transition:background var(--transition),border-color var(--transition)}.info-btn:hover{background:var(--accent-light);border-color:var(--accent)}.info-btn[data-tooltip]{position:relative}.info-btn[data-tooltip]:hover:after,.info-btn[data-tooltip]:focus-visible:after{content:attr(data-tooltip);position:absolute;top:calc(100% + 8px);left:50%;transform:translate(-50%);background:var(--text);color:var(--bg-card);font-size:.75rem;font-weight:400;font-family:var(--font-sans, inherit);text-transform:none;letter-spacing:normal;line-height:1.5;padding:8px 12px;border-radius:6px;width:max-content;max-width:320px;white-space:normal;text-align:left;z-index:10;pointer-events:none;box-shadow:0 4px 12px #00000026}.modal-backdrop{display:none;position:fixed;inset:0;z-index:100;background:#1a1a2e73;align-items:center;justify-content:center;padding:24px}.modal-backdrop.visible{display:flex}.modal{background:var(--bg-card);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg),0 8px 32px #0000001f;max-width:640px;width:100%;max-height:80vh;overflow-y:auto;animation:modal-in .15s ease}@keyframes modal-in{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.modal-header{display:flex;align-items:flex-start;justify-content:space-between;padding:20px 24px 16px;border-bottom:1px solid var(--light-gray)}.modal-header h3{font-size:1.0625rem;font-weight:600;margin-bottom:2px}.modal-subtitle{display:block;font-size:.75rem;font-family:var(--font-mono);color:var(--text-muted)}.modal-close{background:none;border:none;font-size:1.5rem;line-height:1;color:var(--text-muted);cursor:pointer;padding:0 4px;flex-shrink:0;transition:color var(--transition)}.modal-close:hover{color:var(--text)}.modal-body{padding:20px 24px 24px}.modal-section{margin-bottom:20px}.modal-section:last-child{margin-bottom:0}.modal-section h4{font-size:.875rem;color:var(--text);font-weight:600;margin-bottom:10px}.modal-prompt{font-family:var(--font-mono);font-size:.8125rem;line-height:1.6;background:var(--bg);border:1px solid var(--light-gray);border-radius:var(--radius);padding:12px 16px;white-space:pre-wrap;word-break:break-word;max-height:240px;overflow-y:auto}.modal-judge-table{width:100%;border-collapse:collapse;font-size:.8125rem}.modal-judge-table thead th{text-align:left;padding:6px 10px;font-size:.6875rem;text-transform:uppercase;letter-spacing:.06em;color:var(--text-muted);font-weight:600;border-bottom:1px solid var(--light-gray)}.modal-judge-table tbody td{padding:8px 10px;border-bottom:1px solid var(--light-gray);color:var(--text-secondary)}.modal-judge-weight{width:60px;text-align:right;font-family:var(--font-mono);font-weight:600;color:var(--text)!important}.modal-config-table{width:100%;border-collapse:collapse;font-size:.8125rem}.modal-config-table tbody td{padding:6px 10px;border-bottom:1px solid var(--light-gray);color:var(--text-secondary);vertical-align:top}.modal-config-table tbody tr:last-child td{border-bottom:none}.modal-config-label{width:140px;font-weight:600;color:var(--text)!important}.modal-config-table code{font-family:var(--font-mono);font-size:.75rem;background:var(--bg-alt);padding:2px 6px;border-radius:3px;color:var(--text);word-break:break-all}.modal-section-value{font-family:var(--font-mono);font-size:.875rem;font-weight:600;background:var(--bg-alt);color:var(--text);padding:2px 8px;border-radius:4px}.modal-config-line{font-size:.8125rem;color:var(--text-secondary);margin:0}.modal-config-line code{font-family:var(--font-mono);font-size:.75rem;background:var(--bg-alt);padding:2px 6px;border-radius:3px;color:var(--text);margin:0 2px}.modal-config-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:6px}.modal-config-list li{font-size:.8125rem;color:var(--text-secondary);display:flex;flex-wrap:wrap;gap:8px;align-items:baseline}.modal-config-list code{font-family:var(--font-mono);font-size:.75rem;background:var(--bg-alt);padding:2px 6px;border-radius:3px;color:var(--text);word-break:break-all}.modal-config-label-inline{font-weight:600;color:var(--text);font-size:.8125rem}.modal-config{display:flex;flex-direction:column;gap:6px}.modal-config-item{display:flex;align-items:baseline;gap:12px;font-size:.8125rem;padding:6px 10px;background:var(--bg);border-radius:var(--radius)}.modal-config-key{font-family:var(--font-mono);font-weight:600;color:var(--text);flex-shrink:0}.modal-config-val{font-family:var(--font-mono);color:var(--text-secondary);word-break:break-all}.error-banner{background:var(--danger-light);border:1px solid var(--danger);border-radius:var(--radius);padding:12px 16px;color:var(--danger);font-size:.875rem;font-weight:500;margin-bottom:16px}.loading{text-align:center;padding:80px 24px;color:var(--text-muted);font-size:1.125rem}.empty-state{text-align:center;padding:60px 24px;color:var(--text-muted)}@media(max-width:768px){.container{padding:16px 12px 48px}.report-header{flex-direction:column;gap:16px}.report-branding{gap:8px;margin-bottom:8px}.site-logo-mark,.report-badge{font-size:1.5rem}.report-meta-row{font-size:.8125rem;line-height:1.7}.summary-card{padding:16px;flex-direction:column;gap:16px;width:100%}.summary-hero .hero-score{font-size:2rem}.summary-divider{width:100%;height:1px;align-self:auto}.summary-stats{flex-wrap:wrap;gap:16px;justify-content:center}.results-table{font-size:.8125rem}.results-table thead th{padding:8px 6px}.results-table thead th.hide-mobile,.results-table tbody td.hide-mobile{display:none}.result-row td{padding:10px 6px}.result-row td:first-child{padding-left:4px;padding-right:0;width:20px}.result-row .expand-icon{width:12px;font-size:.625rem}.result-row td.col-scenario{max-width:120px;font-size:.75rem}.result-row td.col-agent{max-width:70px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.6875rem}.scenario-header-row td{padding:10px 6px}.scenario-header-row td.col-scenario-header{font-size:.8125rem}.agent-row td.col-agent{padding-left:16px}.detail-panel{padding:16px 12px}.score-overview{flex-direction:column;align-items:center;gap:16px}.category-bars{width:100%}.category-bar-label{width:80px;font-size:.75rem}.dimensions-grid{grid-template-columns:1fr}.criterion-top{flex-wrap:wrap}.criterion-name{min-width:0;word-break:break-word}.cat-deduction-item{flex-direction:column;gap:4px;align-items:flex-start}.waterfall{overflow-x:auto;-webkit-overflow-scrolling:touch}.wf-label-col{width:100px}.wf-dur-col{width:48px;font-size:.6875rem}.wf-tool{font-size:.625rem;max-width:50px;overflow:hidden;text-overflow:ellipsis}.wf-id,.wf-cat{font-size:.5625rem}.wf-legend{flex-wrap:wrap;gap:8px}.sparse-line{font-size:.6875rem;word-break:break-all}.modal-backdrop{padding:12px}.modal{max-height:90vh;border-radius:var(--radius)}.modal-header{padding:16px}.modal-header h3{font-size:1rem}.modal-body{padding:16px}.modal-prompt{font-size:.75rem}.audit-header{flex-direction:column;gap:4px}.necessity-header{flex-wrap:wrap;gap:4px}}.artifacts-section{margin-top:20px}.artifacts-count{font-size:.8125rem;font-weight:500;color:var(--text-muted)}.artifacts-actions{display:flex;gap:8px;align-items:center}.artifacts-toggle,.artifacts-download-all{font-size:.75rem;font-weight:500;padding:6px 12px;border-radius:var(--radius-sm);border:1px solid var(--border);background:var(--bg-card);color:var(--text-primary);cursor:pointer;transition:background .1s ease,border-color .1s ease}.artifacts-toggle:hover,.artifacts-download-all:hover{background:var(--bg-hover, var(--border))}.art-tree-root{list-style:none;margin:12px 0 0;padding:4px 0 0;font-size:.8125rem;border-top:1px solid var(--border)}.art-tree-root[hidden]{display:none}.art-tree-root ul{list-style:none;margin:0;padding:0}.art-tree-row,.art-tree-folder-toggle{display:flex;align-items:center;gap:6px;width:100%;padding:4px 8px 4px 0;font-size:.8125rem;color:var(--text-primary);background:transparent;border:none;border-radius:4px;cursor:default;text-align:left;font-family:inherit}.art-tree-folder-toggle{cursor:pointer}.art-tree-row:hover,.art-tree-folder-toggle:hover{background:var(--bg-hover, rgba(0, 0, 0, .04))}.art-tree-chevron{display:inline-flex;align-items:center;justify-content:center;width:18px;font-size:1.05rem;line-height:1;color:var(--text-secondary);transition:transform .1s ease;flex-shrink:0}.art-tree-dir:not(.collapsed)>.art-tree-folder-toggle .art-tree-chevron{transform:rotate(90deg)}.art-tree-icon{display:inline-block;width:14px;text-align:center;color:var(--text-muted);font-family:var(--font-mono, ui-monospace, "SF Mono", Menlo, Consolas, monospace);font-size:.75rem;flex-shrink:0}.art-tree-dir-icon{color:var(--accent, var(--text-secondary))}.art-tree-name{flex:1;font-family:var(--font-mono, ui-monospace, "SF Mono", Menlo, Consolas, monospace);font-size:.75rem;color:var(--text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.art-tree-size{color:var(--text-muted);font-size:.7rem;font-variant-numeric:tabular-nums;white-space:nowrap;margin-left:auto;padding-left:12px}.art-tree-eye,.art-tree-download{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;padding:0;border-radius:4px;border:1px solid transparent;background:transparent;color:var(--text-secondary);cursor:pointer;transition:background .1s ease,border-color .1s ease,color .1s ease}.art-tree-eye:hover,.art-tree-download:hover{background:var(--bg-card, transparent);border-color:var(--border);color:var(--text-primary)}.art-tree-dir.collapsed>.art-tree-children{display:none}.modal-backdrop.artifact-modal .modal.artifact-modal-content{width:min(900px,92vw);max-height:85vh;display:flex;flex-direction:column}.artifact-modal .modal-header h3{display:flex;flex-direction:column;gap:2px;align-items:flex-start;font-family:var(--font-mono, ui-monospace, "SF Mono", Menlo, Consolas, monospace);font-size:.9rem;word-break:break-all}.artifact-modal-meta{font-size:.7rem!important;color:var(--text-muted);font-weight:400}.artifact-modal .modal-body{display:flex;flex-direction:column;gap:12px;min-height:0;flex:1;overflow:hidden}.artifact-modal-toolbar{display:flex;justify-content:flex-end;flex-shrink:0}.artifact-modal-download{display:inline-flex;align-items:center;gap:6px;font-size:.75rem;font-weight:500;padding:6px 12px;border-radius:var(--radius-sm);border:1px solid var(--border);background:var(--bg-card);color:var(--text-primary);cursor:pointer;transition:background .1s ease}.artifact-modal-download:hover{background:var(--bg-hover, var(--border))}.artifact-modal-preview{flex:1;min-height:0;overflow:auto;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg-card)}.artifact-text{margin:0;padding:12px 16px;font-family:var(--font-mono, ui-monospace, "SF Mono", Menlo, Consolas, monospace);font-size:.75rem;line-height:1.5;color:var(--text-primary);white-space:pre;overflow:auto}.artifact-image{display:block;max-width:100%;max-height:70vh;height:auto;margin:0 auto;padding:12px}.artifact-not-previewable{padding:32px 16px;text-align:center;color:var(--text-muted)}.artifact-not-previewable p{margin:0 0 4px}.artifact-not-previewable-meta{font-family:var(--font-mono, ui-monospace, "SF Mono", Menlo, Consolas, monospace);font-size:.75rem}@media print{.detail-row{display:table-row!important}.audits-list,.sparse-index-content{display:block!important}.result-row{cursor:default}.wf-overflow{display:block!important}.wf-show-all,.expand-icon,.audits-toggle,.sparse-index-toggle,.info-btn{display:none!important}.agent-row.scenario-collapsed{display:table-row!important}.modal-backdrop,.artifacts-toggle,.artifacts-download-all,.art-tree-eye,.art-tree-download{display:none!important}.art-tree-root[hidden]{display:block!important}.art-tree-dir.collapsed>.art-tree-children{display:block!important}}.lifecycle-notes{margin-top:20px}.notes-body{padding:12px 16px;background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius-sm);font-size:.875rem;line-height:1.55;color:var(--text-primary);overflow-x:auto}.markdown-body :first-child{margin-top:0}.markdown-body :last-child{margin-bottom:0}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4{margin:1em 0 .4em;font-weight:600;line-height:1.3}.markdown-body h1{font-size:1.1rem}.markdown-body h2{font-size:1rem}.markdown-body h3,.markdown-body h4{font-size:.9375rem}.markdown-body p,.markdown-body ul,.markdown-body ol,.markdown-body blockquote,.markdown-body pre,.markdown-body table{margin:.5em 0}.markdown-body ul,.markdown-body ol{padding-left:1.4em}.markdown-body code{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.85em;background:var(--border);padding:.1em .35em;border-radius:3px}.markdown-body pre{background:var(--border);padding:10px 12px;border-radius:var(--radius-sm);overflow-x:auto}.markdown-body pre code{background:transparent;padding:0;font-size:.8125rem}.markdown-body blockquote{border-left:3px solid var(--border);padding-left:.8em;color:var(--text-secondary)}.markdown-body table{border-collapse:collapse;font-size:.8125rem}.markdown-body th,.markdown-body td{border:1px solid var(--border);padding:4px 8px;text-align:left}.markdown-body a{color:var(--link, #4099ff);text-decoration:underline}
|
|
2
|
-
</style></head> <body> <div id="app"> <div class="loading">Loading report…</div> </div> <script id="axis-data" type="application/json">__AXIS_REPORT_DATA__</script> <script type="module">function
|
|
3
|
-
]`).replace("lheading",
|
|
1
|
+
<!DOCTYPE html><html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>AXIS Report</title><style>:root{--bg: #fafbf9;--bg-card: #ffffff;--bg-alt: #f3f4f6;--text: #1a1a2e;--text-secondary: #4a5568;--text-muted: #637083;--mid-gray: #6b7280;--light-gray: #e5e7eb;--border: #e5e7eb;--accent: #016867;--accent-hover: #015554;--accent-bright: #2dd4bf;--accent-light: rgba(1, 104, 103, .07);--success: #059669;--success-light: #ecfdf5;--yellow: #d97706;--yellow-light: #fffbeb;--warning: #d97706;--warning-light: #fffbeb;--danger: #dc2626;--danger-light: #fef2f2;--cat-env: #059669;--cat-svc: #2563eb;--cat-agent: #6b7280;--radius: 8px;--radius-lg: 12px;--shadow: 0 1px 3px rgba(0, 0, 0, .04), 0 2px 8px rgba(0, 0, 0, .03);--shadow-lg: 0 4px 16px rgba(0, 0, 0, .06), 0 0 40px rgba(1, 104, 103, .04);--font: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, Roboto, sans-serif;--font-mono: "SF Mono", SFMono-Regular, Menlo, Consolas, monospace;--transition: .15s ease}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html{font-size:15px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body{font-family:var(--font);color:var(--text);background:var(--bg);line-height:1.6;min-height:100vh}.container{max-width:1120px;margin:0 auto;padding:32px 24px 64px}h1{font-size:2rem;font-weight:800;letter-spacing:-.02em;background:linear-gradient(135deg,var(--text) 0%,var(--accent) 100%);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}h2{font-size:1.375rem;font-weight:700;letter-spacing:-.01em;color:var(--text)}h3{font-size:1.0625rem;font-weight:600;color:var(--text)}.report-header{display:flex;align-items:flex-start;justify-content:space-between;gap:32px;margin-bottom:32px}.header-left{flex:1;min-width:0}.report-branding{display:flex;align-items:baseline;gap:12px;margin-bottom:16px}.site-logo-mark{font-size:2.0625rem;font-weight:800;letter-spacing:.12em;color:var(--accent)}.logo-ax{letter-spacing:-.06em}.logo-i{display:inline-block;font-style:italic;transform:skew(-20deg);margin-left:2px;margin-right:-2px}.report-badge{font-size:2.0625rem;font-weight:800;letter-spacing:.02em;color:var(--accent)}.report-meta{margin:0}.report-meta-row{font-size:.875rem;line-height:1.8;color:var(--text-secondary)}.report-meta-label{font-weight:600;color:var(--text)}.report-meta-value{color:var(--text-secondary)}.report-meta-id{font-family:var(--font-mono);font-size:.8125rem}.summary-card{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius-lg);padding:24px 28px;box-shadow:var(--shadow);flex-shrink:0;display:flex;align-items:center;gap:24px}.summary-hero{text-align:center;padding:0 8px}.summary-hero .hero-score{font-size:2.5rem;font-weight:800;line-height:1;color:var(--accent)}.summary-hero .hero-label{font-size:.6875rem;text-transform:uppercase;letter-spacing:.06em;color:var(--text-muted);font-weight:600;margin-top:4px;white-space:nowrap}.summary-divider{width:1px;align-self:stretch;background:var(--border)}.summary-stats{display:flex;gap:20px;align-items:flex-start}.summary-stat{text-align:center;min-width:48px}.summary-stat .stat-value{font-size:1.25rem;font-weight:700;color:var(--text);line-height:1.2;margin-bottom:2px}.summary-stat .stat-label{font-size:.625rem;text-transform:uppercase;letter-spacing:.05em;color:var(--text-muted);font-weight:500;white-space:nowrap}.summary-stat.stat-passed .stat-value{color:var(--success)}.summary-stat.stat-failed .stat-value{color:var(--danger)}.summary-stat.stat-skipped .stat-value{color:var(--text-muted)}.score-badge{display:inline-flex;align-items:center;justify-content:center;min-width:36px;height:28px;padding:0 8px;border-radius:14px;font-size:.8125rem;font-weight:700;color:#fff;line-height:1}.score-badge.score-green{background:var(--success)}.score-badge.score-yellow{background:var(--yellow)}.score-badge.score-orange{background:#ea580c}.score-badge.score-red{background:var(--danger)}.score-badge.score-na{background:var(--mid-gray);font-weight:500}.score-badge-lg{min-width:64px;height:64px;border-radius:32px;font-size:1.5rem;padding:0 16px}.results-section{margin-top:32px}.results-table{width:100%;border-collapse:collapse;font-size:.875rem;table-layout:fixed}.results-table thead th{text-align:left;padding:10px 12px;font-size:.6875rem;text-transform:uppercase;letter-spacing:.06em;color:var(--text-muted);font-weight:600;white-space:nowrap;position:sticky;top:0;background:var(--bg);box-shadow:inset 0 -2px 0 var(--light-gray);z-index:2}.results-table thead th:first-child{width:36px}.results-table thead th.col-score{text-align:center;width:60px}.results-table thead th.col-right{text-align:right;width:90px}.results-table td.col-agent,.results-table td.col-scenario-header{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.result-row{cursor:pointer;transition:background var(--transition)}.result-row:hover,.result-row.expanded{background:var(--accent-light)}.result-row td{padding:12px;border-bottom:1px solid var(--light-gray);vertical-align:middle}.result-row td.col-score{text-align:center}.result-row td.col-right{text-align:right;font-family:var(--font-mono);font-size:.8125rem;color:var(--text-secondary)}.result-row td.col-scenario{font-weight:500;max-width:240px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.result-row td.col-agent{color:var(--text-secondary);font-family:var(--font-mono);font-size:.8125rem}.result-row .expand-icon{display:inline-block;width:16px;color:var(--text-muted);transition:transform var(--transition);font-size:.625rem;opacity:.5}.result-row.expanded .expand-icon{transform:rotate(90deg)}.error-btn{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;margin-left:6px;border:1px solid var(--light-gray);border-radius:50%;background:var(--bg-card);color:var(--danger);font-size:.75rem;font-weight:600;cursor:pointer;vertical-align:middle;line-height:1;transition:background var(--transition),border-color var(--transition)}.error-btn:hover{background:var(--danger-light);border-color:var(--danger)}.modal-error-text{border-color:var(--danger)!important;background:var(--danger-light)!important}.scenario-header-row{cursor:pointer;background:#e8ebe5;transition:background var(--transition)}.scenario-header-row:hover{background:#e0e3dc}.scenario-header-row td{padding:14px 12px;vertical-align:middle;border-bottom:1px solid var(--border)}.scenario-header-row td.col-scenario-header{font-size:.9375rem;font-weight:700;letter-spacing:-.01em;color:var(--text);padding-left:0}.scenario-header-row .expand-icon{display:inline-block;width:16px;color:var(--text-muted);transition:transform var(--transition);font-size:.75rem}.scenario-header-row.expanded .expand-icon{transform:rotate(90deg)}.agent-row td.col-expand-indent{text-align:center}.agent-row.scenario-collapsed,.detail-row.scenario-collapsed,.detail-row{display:none}.detail-row.visible{display:table-row}.detail-row td{padding:0;border-bottom:2px solid var(--light-gray)}.detail-panel{padding:24px;background:var(--bg)}.score-overview{display:flex;align-items:flex-start;gap:32px;margin-bottom:32px;padding-bottom:24px;border-bottom:1px solid var(--light-gray)}.score-overview .big-score{flex-shrink:0}.category-bars{flex:1;display:flex;flex-direction:column;gap:8px;padding-top:4px}.category-bar-row{display:flex;align-items:center;gap:12px}.category-bar-label{width:120px;font-size:.8125rem;font-weight:500;color:var(--text-secondary);flex-shrink:0}.category-bar-value{font-size:.8125rem;font-weight:600;width:32px;text-align:right;flex-shrink:0}.progress-bar{flex:1;height:8px;background:var(--light-gray);border-radius:4px;overflow:hidden;min-width:80px}.progress-bar .fill{height:100%;border-radius:4px;transition:width .4s ease}.progress-bar .fill.fill-green{background:var(--success)}.progress-bar .fill.fill-yellow{background:var(--yellow)}.progress-bar .fill.fill-orange{background:#ea580c}.progress-bar .fill.fill-red{background:var(--danger)}.detail-sections{display:flex;flex-direction:column;gap:20px}.detail-section{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius-lg);padding:20px;box-shadow:var(--shadow)}.section-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px}.section-header h3{display:flex;align-items:center;gap:8px}.section-score{font-size:.875rem;font-weight:600;color:var(--text-secondary)}.section-description{font-size:.8125rem;color:var(--text-muted);line-height:1.5;margin:-8px 0 16px;max-width:70ch}.section-description code{font-family:var(--font-mono);font-size:.75rem;background:var(--bg-alt);color:var(--text-secondary);padding:1px 5px;border-radius:3px}.criteria-list{display:flex;flex-direction:column;gap:12px}.criterion-item{padding:12px;background:var(--bg);border-radius:var(--radius);border:1px solid var(--light-gray)}.criterion-top{display:flex;align-items:center;gap:8px;margin-bottom:6px}.criterion-icon{font-size:.875rem;width:20px;text-align:center;flex-shrink:0}.criterion-icon.high{color:var(--success)}.criterion-icon.good{color:var(--yellow)}.criterion-icon.medium{color:#ea580c}.criterion-icon.low{color:var(--danger)}.criterion-name{flex:1;font-size:.8125rem;font-weight:500}.criterion-score{font-size:.8125rem;font-weight:600;color:var(--text-secondary);flex-shrink:0}.criterion-weight{font-size:.6875rem;color:var(--text-muted);background:var(--light-gray);padding:1px 6px;border-radius:3px;flex-shrink:0}.criterion-bar{margin-bottom:8px}.criterion-rationale{font-size:.8125rem;color:var(--text-secondary);line-height:1.5;font-style:italic}.criterion-perfect{padding:8px 12px;background:var(--success-light);border-left:3px solid var(--success)}.criterion-perfect .criterion-bar{display:none}.criterion-imperfect{border-left:3px solid var(--warning)}.dim-tags{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:10px}.dim-tag{font-size:.6875rem;font-weight:600;font-family:var(--font-mono);padding:2px 8px;border-radius:10px;color:#fff}.dim-tag.fill-green{background:var(--success)}.dim-tag.fill-yellow{background:var(--yellow)}.dim-tag.fill-orange{background:#ea580c}.dim-tag.fill-red{background:var(--danger)}.cat-deduction-item{padding:8px 0;border-bottom:1px solid rgba(217,119,6,.15)}.cat-deduction-item:last-child{border-bottom:none;padding-bottom:0}.cat-deduction-id{font-family:var(--font-mono);font-size:.75rem;font-weight:600;color:var(--text);margin-right:8px}.interaction-link{cursor:pointer;color:var(--accent);text-decoration:none;border-bottom:1px dashed transparent;transition:border-color var(--transition),color var(--transition)}.interaction-link:hover{border-bottom-color:var(--accent)}a.cat-deduction-id.interaction-link,a.wf-id.interaction-link{color:var(--accent)}@keyframes interaction-flash{0%,35%{background:var(--yellow-light);box-shadow:inset 3px 0 0 var(--yellow)}to{background:transparent;box-shadow:inset 3px 0 0 transparent}}.sparse-line.interaction-flash{animation:interaction-flash 1.8s ease-out}.cat-deduction-scores{display:inline-flex;gap:4px}.dim-score-tag{font-size:.625rem;font-family:var(--font-mono);background:var(--light-gray);padding:1px 5px;border-radius:3px;color:var(--text-secondary)}.speed-tag{position:relative;cursor:help}.speed-tooltip{display:none;position:absolute;bottom:calc(100% + 6px);left:50%;transform:translate(-50%);background:var(--text);color:var(--bg-card);padding:8px 10px;border-radius:6px;width:max-content;max-width:260px;z-index:30;pointer-events:none;box-shadow:0 6px 16px #0003;font-family:var(--font-sans, inherit);text-transform:none;letter-spacing:normal;text-align:left;font-weight:400}.speed-tag:hover .speed-tooltip,.speed-tag:focus-within .speed-tooltip{display:block}.speed-tooltip-header{display:flex;align-items:baseline;justify-content:space-between;gap:10px;font-size:.75rem;margin-bottom:6px;color:var(--bg-card)}.speed-tooltip-header strong{font-weight:600}.speed-tooltip-actual{font-family:var(--font-mono);font-size:.6875rem;color:var(--bg-alt)}.speed-tooltip-tiers{display:flex;flex-direction:column;gap:2px;font-family:var(--font-mono);font-size:.6875rem}.speed-tooltip-row{display:flex;justify-content:space-between;gap:14px;padding:2px 6px;border-radius:3px;color:var(--bg-alt)}.speed-tooltip-row-active{background:#ffffff1f;color:var(--bg-card);font-weight:600}.speed-tooltip-range{white-space:nowrap}.speed-tooltip-score{font-variant-numeric:tabular-nums}.cat-deduction-rationale{display:block;font-size:.75rem;color:var(--text-secondary);line-height:1.5;font-style:italic;margin-top:4px}.cat-deduction-note{font-size:.75rem;color:var(--text-muted);font-style:italic}.deductions-baseline{background:var(--bg);border-color:var(--light-gray)}.deductions-baseline .deductions-header{color:var(--text-muted)}.dimensions-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:10px;margin-bottom:16px}.dimension-item{display:flex;align-items:center;gap:8px}.dimension-label{width:72px;font-size:.75rem;font-weight:500;color:var(--text-secondary);flex-shrink:0}.dimension-value{font-size:.75rem;font-weight:600;width:28px;text-align:right;flex-shrink:0}.interaction-meta{font-size:.75rem;color:var(--text-muted);margin-bottom:12px}.category-empty-state{font-size:.8125rem;color:var(--text-muted);font-style:italic;padding:12px 14px;background:var(--bg-alt);border-radius:6px}.audits-section{margin-top:12px}.audits-toggle{font-size:.75rem;color:var(--accent);background:none;border:none;cursor:pointer;font-family:var(--font);padding:4px 0;font-weight:500}.audits-toggle:hover{color:var(--accent-hover)}.audits-list{display:none;margin-top:8px}.audits-list.visible{display:block}.audit-item{padding:10px 12px;background:var(--bg);border-radius:var(--radius);margin-bottom:6px;border-left:3px solid var(--mid-gray)}.audit-header{display:flex;align-items:center;gap:8px;margin-bottom:4px;flex-wrap:wrap}.audit-id{font-family:var(--font-mono);font-size:.75rem;font-weight:600;color:var(--text)}.audit-scores{font-family:var(--font-mono);font-size:.6875rem;color:var(--text-muted)}.audit-rationale{font-size:.8125rem;color:var(--text-secondary);line-height:1.5}.necessity-section{margin-top:12px;padding-top:12px;border-top:1px solid var(--light-gray)}.necessity-header{display:flex;align-items:center;gap:8px;margin-bottom:4px}.necessity-label{font-size:.75rem;font-weight:600;color:var(--text-secondary)}.necessity-score{font-size:.75rem;font-weight:600}.necessity-rationale{font-size:.8125rem;color:var(--text-secondary);font-style:italic}.waterfall{font-size:.8125rem}.waterfall-header{display:flex;align-items:flex-end;border-bottom:1px solid var(--light-gray);padding-bottom:6px;margin-bottom:2px}.wf-label-col{width:200px;flex-shrink:0;display:flex;align-items:center;gap:6px;overflow:hidden}.waterfall-header .wf-label-col,.waterfall-header .wf-dur-col{font-size:.6875rem;text-transform:uppercase;letter-spacing:.06em;color:var(--text-muted);font-weight:600}.wf-timeline-col{flex:1;min-width:0;position:relative}.wf-dur-col{width:64px;flex-shrink:0;text-align:right;font-family:var(--font-mono);font-size:.75rem;color:var(--text-secondary)}.wf-ticks{position:relative;height:18px}.wf-tick{position:absolute;transform:translate(-50%);font-family:var(--font-mono);font-size:.625rem;color:var(--text-muted);white-space:nowrap;top:0}.wf-tick:after{content:"";position:absolute;left:50%;top:100%;width:1px;height:4px;background:var(--light-gray)}.waterfall-body{position:relative}.wf-row{display:flex;align-items:center;height:26px;border-bottom:1px solid rgba(0,0,0,.03)}.wf-row:hover{background:var(--accent-light)}.wf-id{font-family:var(--font-mono);font-size:.6875rem;color:var(--text-muted);width:28px;flex-shrink:0}.wf-cat{font-size:.625rem;text-transform:uppercase;letter-spacing:.04em;color:var(--text-muted);width:36px;flex-shrink:0}.wf-tool{font-size:.75rem;color:var(--text-secondary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.wf-track{position:relative;height:14px;background:#00000004;border-radius:2px}.wf-bar{position:absolute;top:2px;height:10px;border-radius:2px;min-width:3px;cursor:default;transition:opacity var(--transition)}.wf-row:hover .wf-bar{opacity:.8}.wf-env .wf-bar{background:var(--cat-env)}.wf-svc .wf-bar{background:var(--cat-svc)}.wf-agent .wf-bar{background:var(--cat-agent)}.wf-bar-error{background:var(--danger)!important}.wf-track{position:relative}.wf-tooltip{position:absolute;bottom:calc(100% + 8px);left:0;display:none;background:var(--text);color:var(--bg-card);padding:10px 12px;border-radius:6px;width:max-content;max-width:360px;z-index:20;pointer-events:none;box-shadow:0 6px 16px #0003;font-family:var(--font-sans, inherit);text-transform:none;letter-spacing:normal;text-align:left;font-weight:400}.wf-bar:hover .wf-tooltip{display:block}.wf-track .wf-bar.wf-tip-right .wf-tooltip{left:auto;right:0}.wf-tooltip-header{display:flex;align-items:center;gap:8px;margin-bottom:6px;font-size:.8125rem}.wf-tooltip-id{font-family:var(--font-mono);color:var(--bg-alt);font-size:.75rem}.wf-tooltip-tool{font-family:var(--font-mono);font-weight:600;color:var(--bg-card);word-break:break-all}.wf-tooltip-cat{font-size:.625rem;font-weight:600;padding:1px 6px;border-radius:3px;margin-left:auto;flex-shrink:0}.wf-tooltip-cat-env{background:var(--cat-env);color:var(--text)}.wf-tooltip-cat-svc{background:var(--cat-svc);color:var(--text)}.wf-tooltip-cat-agent{background:var(--cat-agent);color:var(--text)}.wf-tooltip-meta{display:flex;flex-wrap:wrap;gap:8px 14px;font-size:.75rem;color:var(--bg-alt);margin-bottom:4px}.wf-tooltip-meta strong{color:var(--bg-card);font-weight:600;margin-right:4px}.wf-tooltip-error{color:#fca5a5;font-weight:600}.wf-tooltip-snippet{font-family:var(--font-mono);font-size:.6875rem;margin:6px 0 0;padding:6px 8px;background:#ffffff0f;border-radius:4px;white-space:pre-wrap;max-height:120px;overflow:hidden;line-height:1.45;color:var(--bg-card)}.wf-lifecycle .wf-bar{background:repeating-linear-gradient(45deg,var(--mid-gray),var(--mid-gray) 4px,var(--light-gray) 4px,var(--light-gray) 8px);opacity:.7}.wf-lifecycle .wf-tool{font-style:italic;color:var(--text-muted)}.wf-lifecycle .wf-cat{color:var(--text-muted)}.wf-show-all{display:block;width:100%;margin-top:4px;padding:6px;font-size:.75rem;color:var(--accent);background:none;border:1px dashed var(--light-gray);border-radius:var(--radius);cursor:pointer;font-family:var(--font);font-weight:500}.wf-show-all:hover{background:var(--accent-light);border-color:var(--accent)}.wf-legend{display:flex;gap:16px;margin-top:10px;padding-top:8px;border-top:1px solid var(--light-gray)}.wf-legend-item{display:flex;align-items:center;gap:5px;font-size:.6875rem;color:var(--text-muted)}.wf-legend-dot{width:10px;height:10px;border-radius:2px}.wf-legend-dot.wf-env{background:var(--cat-env)}.wf-legend-dot.wf-svc{background:var(--cat-svc)}.wf-legend-dot.wf-agent{background:var(--cat-agent)}.sparse-index-section{margin-top:16px}.sparse-index-toggle{font-size:.75rem;color:var(--accent);background:none;border:none;cursor:pointer;font-family:var(--font);padding:4px 0;font-weight:500}.sparse-index-content{display:none;margin-top:8px}.sparse-index-content.visible{display:block}.sparse-line{font-family:var(--font-mono);font-size:.75rem;line-height:1.8;padding:3px 10px;border-left:3px solid var(--cat-agent);white-space:pre;overflow-x:auto}.sparse-line.cat-env{border-left-color:var(--cat-env);background:#0596690a}.sparse-line.cat-svc{border-left-color:var(--cat-svc);background:#2563eb0a}.sparse-line.cat-agent{border-left-color:var(--cat-agent)}.sparse-line-expandable{cursor:pointer;position:relative}.sparse-line-expandable:after{content:"▶";position:absolute;right:8px;top:4px;font-size:.6rem;color:var(--text-secondary);transition:transform .15s ease}.sparse-line-expandable.expanded:after{transform:rotate(90deg)}.sparse-line-expandable:hover{background:var(--accent-light)}.sparse-line-content{display:none;margin:4px 0 8px 12px;padding:8px 12px;background:var(--bg-alt);border-radius:4px;border:1px solid var(--border)}.sparse-line-expandable.expanded .sparse-line-content{display:block}.sparse-line-content pre{margin:0;font-family:var(--font-mono);font-size:.7rem;line-height:1.5;white-space:pre-wrap;word-break:break-word;color:var(--text)}.sparse-expand-all{font-size:.75rem;color:var(--accent);background:none;border:none;cursor:pointer;font-family:var(--font);padding:4px 0;font-weight:500;margin-left:12px}.info-btn{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;margin-left:6px;border:1px solid var(--light-gray);border-radius:50%;background:var(--bg-card);color:var(--accent);font-size:.75rem;font-weight:600;cursor:pointer;vertical-align:middle;line-height:1;transition:background var(--transition),border-color var(--transition)}.info-btn:hover{background:var(--accent-light);border-color:var(--accent)}.info-btn[data-tooltip]{position:relative}.info-btn[data-tooltip]:hover:after,.info-btn[data-tooltip]:focus-visible:after{content:attr(data-tooltip);position:absolute;top:calc(100% + 8px);left:50%;transform:translate(-50%);background:var(--text);color:var(--bg-card);font-size:.75rem;font-weight:400;font-family:var(--font-sans, inherit);text-transform:none;letter-spacing:normal;line-height:1.5;padding:8px 12px;border-radius:6px;width:max-content;max-width:320px;white-space:normal;text-align:left;z-index:10;pointer-events:none;box-shadow:0 4px 12px #00000026}.modal-backdrop{display:none;position:fixed;inset:0;z-index:100;background:#1a1a2e73;align-items:center;justify-content:center;padding:24px}.modal-backdrop.visible{display:flex}.modal{background:var(--bg-card);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg),0 8px 32px #0000001f;max-width:640px;width:100%;max-height:80vh;overflow-y:auto;animation:modal-in .15s ease}@keyframes modal-in{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.modal-header{display:flex;align-items:flex-start;justify-content:space-between;padding:20px 24px 16px;border-bottom:1px solid var(--light-gray)}.modal-header h3{font-size:1.0625rem;font-weight:600;margin-bottom:2px}.modal-subtitle{display:block;font-size:.75rem;font-family:var(--font-mono);color:var(--text-muted)}.modal-close{background:none;border:none;font-size:1.5rem;line-height:1;color:var(--text-muted);cursor:pointer;padding:0 4px;flex-shrink:0;transition:color var(--transition)}.modal-close:hover{color:var(--text)}.modal-body{padding:20px 24px 24px}.modal-section{margin-bottom:20px}.modal-section:last-child{margin-bottom:0}.modal-section h4{font-size:.875rem;color:var(--text);font-weight:600;margin-bottom:10px}.modal-prompt{font-family:var(--font-mono);font-size:.8125rem;line-height:1.6;background:var(--bg);border:1px solid var(--light-gray);border-radius:var(--radius);padding:12px 16px;white-space:pre-wrap;word-break:break-word;max-height:240px;overflow-y:auto}.modal-judge-agent{margin:0;font-size:.8125rem;color:var(--text-secondary)}.modal-judge-agent code{font-family:var(--font-mono);font-size:.8125rem;color:var(--text-primary)}.modal-judge-table{width:100%;border-collapse:collapse;font-size:.8125rem}.modal-judge-table thead th{text-align:left;padding:6px 10px;font-size:.6875rem;text-transform:uppercase;letter-spacing:.06em;color:var(--text-muted);font-weight:600;border-bottom:1px solid var(--light-gray)}.modal-judge-table tbody td{padding:8px 10px;border-bottom:1px solid var(--light-gray);color:var(--text-secondary)}.modal-judge-weight{width:60px;text-align:right;font-family:var(--font-mono);font-weight:600;color:var(--text)!important}.modal-config-table{width:100%;border-collapse:collapse;font-size:.8125rem}.modal-config-table tbody td{padding:6px 10px;border-bottom:1px solid var(--light-gray);color:var(--text-secondary);vertical-align:top}.modal-config-table tbody tr:last-child td{border-bottom:none}.modal-config-label{width:140px;font-weight:600;color:var(--text)!important}.modal-config-table code{font-family:var(--font-mono);font-size:.75rem;background:var(--bg-alt);padding:2px 6px;border-radius:3px;color:var(--text);word-break:break-all}.modal-section-value{font-family:var(--font-mono);font-size:.875rem;font-weight:600;background:var(--bg-alt);color:var(--text);padding:2px 8px;border-radius:4px}.modal-config-line{font-size:.8125rem;color:var(--text-secondary);margin:0}.modal-config-line code{font-family:var(--font-mono);font-size:.75rem;background:var(--bg-alt);padding:2px 6px;border-radius:3px;color:var(--text);margin:0 2px}.modal-config-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:6px}.modal-config-list li{font-size:.8125rem;color:var(--text-secondary);display:flex;flex-wrap:wrap;gap:8px;align-items:baseline}.modal-config-list code{font-family:var(--font-mono);font-size:.75rem;background:var(--bg-alt);padding:2px 6px;border-radius:3px;color:var(--text);word-break:break-all}.modal-config-label-inline{font-weight:600;color:var(--text);font-size:.8125rem}.modal-config{display:flex;flex-direction:column;gap:6px}.modal-config-item{display:flex;align-items:baseline;gap:12px;font-size:.8125rem;padding:6px 10px;background:var(--bg);border-radius:var(--radius)}.modal-config-key{font-family:var(--font-mono);font-weight:600;color:var(--text);flex-shrink:0}.modal-config-val{font-family:var(--font-mono);color:var(--text-secondary);word-break:break-all}.error-banner{background:var(--danger-light);border:1px solid var(--danger);border-radius:var(--radius);padding:12px 16px;color:var(--danger);font-size:.875rem;font-weight:500;margin-bottom:16px}.loading{text-align:center;padding:80px 24px;color:var(--text-muted);font-size:1.125rem}.empty-state{text-align:center;padding:60px 24px;color:var(--text-muted)}@media(max-width:768px){.container{padding:16px 12px 48px}.report-header{flex-direction:column;gap:16px}.report-branding{gap:8px;margin-bottom:8px}.site-logo-mark,.report-badge{font-size:1.5rem}.report-meta-row{font-size:.8125rem;line-height:1.7}.summary-card{padding:16px;flex-direction:column;gap:16px;width:100%}.summary-hero .hero-score{font-size:2rem}.summary-divider{width:100%;height:1px;align-self:auto}.summary-stats{flex-wrap:wrap;gap:16px;justify-content:center}.results-table{font-size:.8125rem}.results-table thead th{padding:8px 6px}.results-table thead th.hide-mobile,.results-table tbody td.hide-mobile{display:none}.result-row td{padding:10px 6px}.result-row td:first-child{padding-left:4px;padding-right:0;width:20px}.result-row .expand-icon{width:12px;font-size:.625rem}.result-row td.col-scenario{max-width:120px;font-size:.75rem}.result-row td.col-agent{max-width:70px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.6875rem}.scenario-header-row td{padding:10px 6px}.scenario-header-row td.col-scenario-header{font-size:.8125rem}.agent-row td.col-agent{padding-left:16px}.detail-panel{padding:16px 12px}.score-overview{flex-direction:column;align-items:center;gap:16px}.category-bars{width:100%}.category-bar-label{width:80px;font-size:.75rem}.dimensions-grid{grid-template-columns:1fr}.criterion-top{flex-wrap:wrap}.criterion-name{min-width:0;word-break:break-word}.cat-deduction-item{flex-direction:column;gap:4px;align-items:flex-start}.waterfall{overflow-x:auto;-webkit-overflow-scrolling:touch}.wf-label-col{width:100px}.wf-dur-col{width:48px;font-size:.6875rem}.wf-tool{font-size:.625rem;max-width:50px;overflow:hidden;text-overflow:ellipsis}.wf-id,.wf-cat{font-size:.5625rem}.wf-legend{flex-wrap:wrap;gap:8px}.sparse-line{font-size:.6875rem;word-break:break-all}.modal-backdrop{padding:12px}.modal{max-height:90vh;border-radius:var(--radius)}.modal-header{padding:16px}.modal-header h3{font-size:1rem}.modal-body{padding:16px}.modal-prompt{font-size:.75rem}.audit-header{flex-direction:column;gap:4px}.necessity-header{flex-wrap:wrap;gap:4px}}.artifacts-section{margin-top:20px}.artifacts-count{font-size:.8125rem;font-weight:500;color:var(--text-muted)}.artifacts-actions{display:flex;gap:8px;align-items:center}.artifacts-toggle,.artifacts-download-all{font-size:.75rem;font-weight:500;padding:6px 12px;border-radius:var(--radius-sm);border:1px solid var(--border);background:var(--bg-card);color:var(--text-primary);cursor:pointer;transition:background .1s ease,border-color .1s ease}.artifacts-toggle:hover,.artifacts-download-all:hover{background:var(--bg-hover, var(--border))}.art-tree-root{list-style:none;margin:12px 0 0;padding:4px 0 0;font-size:.8125rem;border-top:1px solid var(--border)}.art-tree-root[hidden]{display:none}.art-tree-root ul{list-style:none;margin:0;padding:0}.art-tree-row,.art-tree-folder-toggle{display:flex;align-items:center;gap:6px;width:100%;padding:4px 8px 4px 0;font-size:.8125rem;color:var(--text-primary);background:transparent;border:none;border-radius:4px;cursor:default;text-align:left;font-family:inherit}.art-tree-folder-toggle{cursor:pointer}.art-tree-row:hover,.art-tree-folder-toggle:hover{background:var(--bg-hover, rgba(0, 0, 0, .04))}.art-tree-chevron{display:inline-flex;align-items:center;justify-content:center;width:18px;font-size:1.05rem;line-height:1;color:var(--text-secondary);transition:transform .1s ease;flex-shrink:0}.art-tree-dir:not(.collapsed)>.art-tree-folder-toggle .art-tree-chevron{transform:rotate(90deg)}.art-tree-icon{display:inline-block;width:14px;text-align:center;color:var(--text-muted);font-family:var(--font-mono, ui-monospace, "SF Mono", Menlo, Consolas, monospace);font-size:.75rem;flex-shrink:0}.art-tree-dir-icon{color:var(--accent, var(--text-secondary))}.art-tree-name{flex:1;font-family:var(--font-mono, ui-monospace, "SF Mono", Menlo, Consolas, monospace);font-size:.75rem;color:var(--text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.art-tree-size{color:var(--text-muted);font-size:.7rem;font-variant-numeric:tabular-nums;white-space:nowrap;margin-left:auto;padding-left:12px}.art-tree-eye,.art-tree-download{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;padding:0;border-radius:4px;border:1px solid transparent;background:transparent;color:var(--text-secondary);cursor:pointer;transition:background .1s ease,border-color .1s ease,color .1s ease}.art-tree-eye:hover,.art-tree-download:hover{background:var(--bg-card, transparent);border-color:var(--border);color:var(--text-primary)}.art-tree-dir.collapsed>.art-tree-children{display:none}.modal-backdrop.artifact-modal .modal.artifact-modal-content{width:min(900px,92vw);max-height:85vh;display:flex;flex-direction:column}.artifact-modal .modal-header h3{display:flex;flex-direction:column;gap:2px;align-items:flex-start;font-family:var(--font-mono, ui-monospace, "SF Mono", Menlo, Consolas, monospace);font-size:.9rem;word-break:break-all}.artifact-modal-meta{font-size:.7rem!important;color:var(--text-muted);font-weight:400}.artifact-modal .modal-body{display:flex;flex-direction:column;gap:12px;min-height:0;flex:1;overflow:hidden}.artifact-modal-toolbar{display:flex;justify-content:flex-end;flex-shrink:0}.artifact-modal-download{display:inline-flex;align-items:center;gap:6px;font-size:.75rem;font-weight:500;padding:6px 12px;border-radius:var(--radius-sm);border:1px solid var(--border);background:var(--bg-card);color:var(--text-primary);cursor:pointer;transition:background .1s ease}.artifact-modal-download:hover{background:var(--bg-hover, var(--border))}.artifact-modal-preview{flex:1;min-height:0;overflow:auto;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg-card)}.artifact-text{margin:0;padding:12px 16px;font-family:var(--font-mono, ui-monospace, "SF Mono", Menlo, Consolas, monospace);font-size:.75rem;line-height:1.5;color:var(--text-primary);white-space:pre;overflow:auto}.artifact-image{display:block;max-width:100%;max-height:70vh;height:auto;margin:0 auto;padding:12px}.artifact-not-previewable{padding:32px 16px;text-align:center;color:var(--text-muted)}.artifact-not-previewable p{margin:0 0 4px}.artifact-not-previewable-meta{font-family:var(--font-mono, ui-monospace, "SF Mono", Menlo, Consolas, monospace);font-size:.75rem}@media print{.detail-row{display:table-row!important}.audits-list,.sparse-index-content{display:block!important}.result-row{cursor:default}.wf-overflow{display:block!important}.wf-show-all,.expand-icon,.audits-toggle,.sparse-index-toggle,.info-btn{display:none!important}.agent-row.scenario-collapsed{display:table-row!important}.modal-backdrop,.artifacts-toggle,.artifacts-download-all,.art-tree-eye,.art-tree-download{display:none!important}.art-tree-root[hidden]{display:block!important}.art-tree-dir.collapsed>.art-tree-children{display:block!important}}.lifecycle-notes{margin-top:20px}.notes-body{padding:12px 16px;background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius-sm);font-size:.875rem;line-height:1.55;color:var(--text-primary);overflow-x:auto}.markdown-body :first-child{margin-top:0}.markdown-body :last-child{margin-bottom:0}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4{margin:1em 0 .4em;font-weight:600;line-height:1.3}.markdown-body h1{font-size:1.1rem}.markdown-body h2{font-size:1rem}.markdown-body h3,.markdown-body h4{font-size:.9375rem}.markdown-body p,.markdown-body ul,.markdown-body ol,.markdown-body blockquote,.markdown-body pre,.markdown-body table{margin:.5em 0}.markdown-body ul,.markdown-body ol{padding-left:1.4em}.markdown-body code{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.85em;background:var(--border);padding:.1em .35em;border-radius:3px}.markdown-body pre{background:var(--border);padding:10px 12px;border-radius:var(--radius-sm);overflow-x:auto}.markdown-body pre code{background:transparent;padding:0;font-size:.8125rem}.markdown-body blockquote{border-left:3px solid var(--border);padding-left:.8em;color:var(--text-secondary)}.markdown-body table{border-collapse:collapse;font-size:.8125rem}.markdown-body th,.markdown-body td{border:1px solid var(--border);padding:4px 8px;text-align:left}.markdown-body a{color:var(--link, #4099ff);text-decoration:underline}
|
|
2
|
+
</style></head> <body> <div id="app"> <div class="loading">Loading report…</div> </div> <script id="axis-data" type="application/json">__AXIS_REPORT_DATA__</script> <script type="module">function ie(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var I=ie();function Pe(e){I=e}var L={exec:()=>null};function z(e){let t=[];return s=>{let n=Math.max(0,Math.min(3,s-1)),r=t[n];return r||(r=e(n),t[n]=r),r}}function k(e,t=""){let s=typeof e=="string"?e:e.source,n={replace:(r,i)=>{let a=typeof i=="string"?i:i.source;return a=a.replace(x.caret,"$1"),s=s.replace(r,a),n},getRegex:()=>new RegExp(s,t)};return n}var Ve=((e="")=>{try{return!!new RegExp("(?<=1)(?<!1)"+e)}catch{return!1}})(),x={codeRemoveIndent:/^(?: {1,4}| {0,3}\t)/gm,outputLinkReplace:/\\([\[\]])/g,indentCodeCompensation:/^(\s+)(?:```)/,beginningSpace:/^\s+/,endingHash:/#$/,startingSpaceChar:/^ /,endingSpaceChar:/ $/,nonSpaceChar:/[^ ]/,newLineCharGlobal:/\n/g,tabCharGlobal:/\t/g,multipleSpaceGlobal:/\s+/g,blankLine:/^[ \t]*$/,doubleBlankLine:/\n[ \t]*\n[ \t]*$/,blockquoteStart:/^ {0,3}>/,blockquoteSetextReplace:/\n {0,3}((?:=+|-+) *)(?=\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \t]?/gm,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\[[ xX]\] +\S/,listReplaceTask:/^\[[ xX]\] +/,listTaskCheckbox:/\[[ xX]\]/,anyLine:/\n.*\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\||\| *$/g,tableRowBlankLine:/\n[ \t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^<a /i,endATag:/^<\/a>/i,startPreScriptTag:/^<(pre|code|kbd|script)(\s|>)/i,endPreScriptTag:/^<\/(pre|code|kbd|script)(\s|>)/i,startAngleBracket:/^</,endAngleBracket:/>$/,pedanticHrefTitle:/^([^'"]*[^\s])\s+(['"])(.*)\2/,unicodeAlphaNumeric:/[\p{L}\p{N}]/u,escapeTest:/[&<>"']/,escapeReplace:/[&<>"']/g,escapeTestNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,escapeReplaceNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/g,caret:/(^|[^\[])\^/g,percentDecode:/%25/g,findPipe:/\|/g,splitPipe:/ \|/,slashPipe:/\\\|/g,carriageReturn:/\r\n|\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\S*/,endingNewline:/\n$/,listItemRegex:e=>new RegExp(`^( {0,3}${e})((?:[ ][^\\n]*)?(?:\\n|$))`),nextBulletRegex:z(e=>new RegExp(`^ {0,${e}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`)),hrRegex:z(e=>new RegExp(`^ {0,${e}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`)),fencesBeginRegex:z(e=>new RegExp(`^ {0,${e}}(?:\`\`\`|~~~)`)),headingBeginRegex:z(e=>new RegExp(`^ {0,${e}}#`)),htmlBeginRegex:z(e=>new RegExp(`^ {0,${e}}<(?:[a-z].*>|!--)`,"i")),blockquoteBeginRegex:z(e=>new RegExp(`^ {0,${e}}>`))},Xe=/^(?:[ \t]*(?:\n|$))+/,Ye=/^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/,et=/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,j=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,tt=/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,ae=/ {0,3}(?:[*+-]|\d{1,9}[.)])/,Me=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\n {0,3}(=+|-+) *(?:\n+|$)/,qe=k(Me).replace(/bull/g,ae).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/\|table/g,"").getRegex(),st=k(Me).replace(/bull/g,ae).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/table/g,/ {0,3}\|?(?:[:\- ]*\|)+[\:\- ]*\n/).getRegex(),oe=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,nt=/^[^\n]+/,le=/(?!\s*\])(?:\\[\s\S]|[^\[\]\\])+/,rt=k(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace("label",le).replace("title",/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),it=k(/^(bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g,ae).getRegex(),Q="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",ce=/<!--(?:-?>|[\s\S]*?(?:-->|$))/,at=k("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|<![A-Z][\\s\\S]*?(?:>\\n*|$)|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>\\n*|$)|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|</(?!script|pre|style|textarea)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$))","i").replace("comment",ce).replace("tag",Q).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),Be=k(oe).replace("hr",j).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)])[ \\t]").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",Q).getRegex(),ot=k(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph",Be).getRegex(),de={blockquote:ot,code:Ye,def:rt,fences:et,heading:tt,hr:j,html:at,lheading:qe,list:it,newline:Xe,paragraph:Be,table:L,text:nt},me=k("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr",j).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("blockquote"," {0,3}>").replace("code","(?: {4}| {0,3} )[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)])[ \\t]").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",Q).getRegex(),lt={...de,lheading:st,table:me,paragraph:k(oe).replace("hr",j).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("table",me).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)])[ \\t]").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",Q).getRegex()},ct={...de,html:k(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:"[^"]*"|'[^']*'|\\s[^'"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace("comment",ce).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:L,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:k(oe).replace("hr",j).replace("heading",` *#{1,6} *[^
|
|
3
|
+
]`).replace("lheading",qe).replace("|table","").replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").replace("|tag","").getRegex()},dt=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,ut=/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,Ue=/^( {2,}|\\)\n(?!\s*$)/,pt=/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/,M=/[\p{P}\p{S}]/u,W=/[\s\p{P}\p{S}]/u,ue=/[^\s\p{P}\p{S}]/u,ht=k(/^((?![*_])punctSpace)/,"u").replace(/punctSpace/g,W).getRegex(),_e=/(?!~)[\p{P}\p{S}]/u,ft=/(?!~)[\s\p{P}\p{S}]/u,gt=/(?:[^\s\p{P}\p{S}]|~)/u,mt=k(/link|precode-code|html/,"g").replace("link",/\[(?:[^\[\]`]|(?<a>`+)[^`]+\k<a>(?!`))*?\]\((?:\\[\s\S]|[^\\\(\)]|\((?:\\[\s\S]|[^\\\(\)])*\))*\)/).replace("precode-",Ve?"(?<!`)()":"(^^|[^`])").replace("code",/(?<b>`+)[^`]+\k<b>(?!`)/).replace("html",/<(?! )[^<>]*?>/).getRegex(),je=/^(?:\*+(?:((?!\*)punct)|([^\s*]))?)|^_+(?:((?!_)punct)|([^\s_]))?/,kt=k(je,"u").replace(/punct/g,M).getRegex(),bt=k(je,"u").replace(/punct/g,_e).getRegex(),Ne="^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)",vt=k(Ne,"gu").replace(/notPunctSpace/g,ue).replace(/punctSpace/g,W).replace(/punct/g,M).getRegex(),xt=k(Ne,"gu").replace(/notPunctSpace/g,gt).replace(/punctSpace/g,ft).replace(/punct/g,_e).getRegex(),wt=k("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)","gu").replace(/notPunctSpace/g,ue).replace(/punctSpace/g,W).replace(/punct/g,M).getRegex(),$t=k(/^~~?(?:((?!~)punct)|[^\s~])/,"u").replace(/punct/g,M).getRegex(),yt="^[^~]+(?=[^~])|(?!~)punct(~~?)(?=[\\s]|$)|notPunctSpace(~~?)(?!~)(?=punctSpace|$)|(?!~)punctSpace(~~?)(?=notPunctSpace)|[\\s](~~?)(?!~)(?=punct)|(?!~)punct(~~?)(?!~)(?=punct)|notPunctSpace(~~?)(?=notPunctSpace)",St=k(yt,"gu").replace(/notPunctSpace/g,ue).replace(/punctSpace/g,W).replace(/punct/g,M).getRegex(),At=k(/\\(punct)/,"gu").replace(/punct/g,M).getRegex(),Rt=k(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace("scheme",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email",/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),Et=k(ce).replace("(?:-->|$)","-->").getRegex(),Tt=k("^comment|^</[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>").replace("comment",Et).replace("attribute",/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),F=/(?:\[(?:\\[\s\S]|[^\[\]\\])*\]|\\[\s\S]|`+(?!`)[^`]*?`+(?!`)|``+(?=\])|[^\[\]\\`])*?/,Lt=k(/^!?\[(label)\]\(\s*(href)(?:(?:[ \t]+(?:\n[ \t]*)?|\n[ \t]*)(title))?\s*\)/).replace("label",F).replace("href",/<(?:\\.|[^\n<>\\])+>|[^ \t\n\x00-\x1f]*/).replace("title",/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),De=k(/^!?\[(label)\]\[(ref)\]/).replace("label",F).replace("ref",le).getRegex(),Oe=k(/^!?\[(ref)\](?:\[\])?/).replace("ref",le).getRegex(),Ct=k("reflink|nolink(?!\\()","g").replace("reflink",De).replace("nolink",Oe).getRegex(),ke=/[hH][tT][tT][pP][sS]?|[fF][tT][pP]/,pe={_backpedal:L,anyPunctuation:At,autolink:Rt,blockSkip:mt,br:Ue,code:ut,del:L,delLDelim:L,delRDelim:L,emStrongLDelim:kt,emStrongRDelimAst:vt,emStrongRDelimUnd:wt,escape:dt,link:Lt,nolink:Oe,punctuation:ht,reflink:De,reflinkSearch:Ct,tag:Tt,text:pt,url:L},It={...pe,link:k(/^!?\[(label)\]\((.*?)\)/).replace("label",F).getRegex(),reflink:k(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",F).getRegex()},te={...pe,emStrongRDelimAst:xt,emStrongLDelim:bt,delLDelim:$t,delRDelim:St,url:k(/^((?:protocol):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/).replace("protocol",ke).replace("email",/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])((?:\\[\s\S]|[^\\])*?(?:\\[\s\S]|[^\s~\\]))\1(?=[^~]|$)/,text:k(/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|protocol:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)))/).replace("protocol",ke).getRegex()},zt={...te,br:k(Ue).replace("{2,}","*").getRegex(),text:k(te.text).replace("\\b_","\\b_| {2,}\\n").replace(/\{2,\}/g,"*").getRegex()},N={normal:de,gfm:lt,pedantic:ct},U={normal:pe,gfm:te,breaks:zt,pedantic:It},Pt={"&":"&","<":"<",">":">",'"':""","'":"'"},be=e=>Pt[e];function R(e,t){if(t){if(x.escapeTest.test(e))return e.replace(x.escapeReplace,be)}else if(x.escapeTestNoEncode.test(e))return e.replace(x.escapeReplaceNoEncode,be);return e}function ve(e){try{e=encodeURI(e).replace(x.percentDecode,"%")}catch{return null}return e}function xe(e,t){let s=e.replace(x.findPipe,(i,a,o)=>{let c=!1,l=a;for(;--l>=0&&o[l]==="\\";)c=!c;return c?"|":" |"}),n=s.split(x.splitPipe),r=0;if(n[0].trim()||n.shift(),n.length>0&&!n.at(-1)?.trim()&&n.pop(),t)if(n.length>t)n.splice(t);else for(;n.length<t;)n.push("");for(;r<n.length;r++)n[r]=n[r].trim().replace(x.slashPipe,"|");return n}function T(e,t,s){let n=e.length;if(n===0)return"";let r=0;for(;r<n&&e.charAt(n-r-1)===t;)r++;return e.slice(0,n-r)}function we(e){let t=e.split(`
|
|
4
4
|
`),s=t.length-1;for(;s>=0&&x.blankLine.test(t[s]);)s--;return t.length-s<=2?e:t.slice(0,s+1).join(`
|
|
5
|
-
`)}function
|
|
5
|
+
`)}function Mt(e,t){if(e.indexOf(t[1])===-1)return-1;let s=0;for(let n=0;n<e.length;n++)if(e[n]==="\\")n++;else if(e[n]===t[0])s++;else if(e[n]===t[1]&&(s--,s<0))return n;return s>0?-2:-1}function qt(e,t=0){let s=t,n="";for(let r of e)if(r===" "){let i=4-s%4;n+=" ".repeat(i),s+=i}else n+=r,s++;return n}function $e(e,t,s,n,r){let i=t.href,a=t.title||null,o=e[1].replace(r.other.outputLinkReplace,"$1");n.state.inLink=!0;let c={type:e[0].charAt(0)==="!"?"image":"link",raw:s,href:i,title:a,text:o,tokens:n.inlineTokens(o)};return n.state.inLink=!1,c}function Bt(e,t,s){let n=e.match(s.other.indentCodeCompensation);if(n===null)return t;let r=n[1];return t.split(`
|
|
6
6
|
`).map(i=>{let a=i.match(s.other.beginningSpace);if(a===null)return i;let[o]=a;return o.length>=r.length?i.slice(r.length):i}).join(`
|
|
7
|
-
`)}var
|
|
7
|
+
`)}var H=class{options;rules;lexer;constructor(e){this.options=e||I}space(e){let t=this.rules.block.newline.exec(e);if(t&&t[0].length>0)return{type:"space",raw:t[0]}}code(e){let t=this.rules.block.code.exec(e);if(t){let s=this.options.pedantic?t[0]:we(t[0]),n=s.replace(this.rules.other.codeRemoveIndent,"");return{type:"code",raw:s,codeBlockStyle:"indented",text:n}}}fences(e){let t=this.rules.block.fences.exec(e);if(t){let s=t[0],n=Bt(s,t[3]||"",this.rules);return{type:"code",raw:s,lang:t[2]?t[2].trim().replace(this.rules.inline.anyPunctuation,"$1"):t[2],text:n}}}heading(e){let t=this.rules.block.heading.exec(e);if(t){let s=t[2].trim();if(this.rules.other.endingHash.test(s)){let n=T(s,"#");(this.options.pedantic||!n||this.rules.other.endingSpaceChar.test(n))&&(s=n.trim())}return{type:"heading",raw:T(t[0],`
|
|
8
8
|
`),depth:t[1].length,text:s,tokens:this.lexer.inline(s)}}}hr(e){let t=this.rules.block.hr.exec(e);if(t)return{type:"hr",raw:T(t[0],`
|
|
9
9
|
`)}}blockquote(e){let t=this.rules.block.blockquote.exec(e);if(t){let s=T(t[0],`
|
|
10
10
|
`).split(`
|
|
@@ -17,19 +17,19 @@ ${p}`:p;let d=this.lexer.state.top;if(this.lexer.state.top=!0,this.lexer.blockTo
|
|
|
17
17
|
`),w=this.blockquote(f);i[i.length-1]=w,n=n.substring(0,n.length-m.raw.length)+w.raw,r=r.substring(0,r.length-m.text.length)+w.text;break}else if(h?.type==="list"){let m=h,f=m.raw+`
|
|
18
18
|
`+s.join(`
|
|
19
19
|
`),w=this.list(f);i[i.length-1]=w,n=n.substring(0,n.length-h.raw.length)+w.raw,r=r.substring(0,r.length-m.raw.length)+w.raw,s=f.substring(i.at(-1).raw.length).split(`
|
|
20
|
-
`);continue}}return{type:"blockquote",raw:n,tokens:i,text:r}}}list(e){let t=this.rules.block.list.exec(e);if(t){let s=t[1].trim(),n=s.length>1,r={type:"list",raw:"",ordered:n,start:n?+s.slice(0,-1):"",loose:!1,items:[]};s=n?`\\d{1,9}\\${s.slice(-1)}`:`\\${s}`,this.options.pedantic&&(s=n?s:"[*+-]");let i=this.rules.other.listItemRegex(s),a=!1;for(;e;){let c=!1,l="",p="";if(!(t=i.exec(e))||this.rules.block.hr.test(e))break;l=t[0],e=e.substring(l.length);let d=
|
|
20
|
+
`);continue}}return{type:"blockquote",raw:n,tokens:i,text:r}}}list(e){let t=this.rules.block.list.exec(e);if(t){let s=t[1].trim(),n=s.length>1,r={type:"list",raw:"",ordered:n,start:n?+s.slice(0,-1):"",loose:!1,items:[]};s=n?`\\d{1,9}\\${s.slice(-1)}`:`\\${s}`,this.options.pedantic&&(s=n?s:"[*+-]");let i=this.rules.other.listItemRegex(s),a=!1;for(;e;){let c=!1,l="",p="";if(!(t=i.exec(e))||this.rules.block.hr.test(e))break;l=t[0],e=e.substring(l.length);let d=qt(t[2].split(`
|
|
21
21
|
`,1)[0],t[1].length),h=e.split(`
|
|
22
22
|
`,1)[0],m=!d.trim(),f=0;if(this.options.pedantic?(f=2,p=d.trimStart()):m?f=t[1].length+1:(f=d.search(this.rules.other.nonSpaceChar),f=f>4?1:f,p=d.slice(f),f+=t[1].length),m&&this.rules.other.blankLine.test(h)&&(l+=h+`
|
|
23
|
-
`,e=e.substring(h.length+1),c=!0),!c){let w=this.rules.other.nextBulletRegex(f),A=this.rules.other.hrRegex(f),E=this.rules.other.fencesBeginRegex(f),g=this.rules.other.headingBeginRegex(f),
|
|
24
|
-
`,1)[0],
|
|
25
|
-
`+
|
|
26
|
-
`+h}m=!h.trim(),l+=
|
|
27
|
-
`,e=e.substring(
|
|
28
|
-
`),href:n,title:r}}}table(e){let t=this.rules.block.table.exec(e);if(!t||!this.rules.other.tableDelimiter.test(t[2]))return;let s=
|
|
23
|
+
`,e=e.substring(h.length+1),c=!0),!c){let w=this.rules.other.nextBulletRegex(f),A=this.rules.other.hrRegex(f),E=this.rules.other.fencesBeginRegex(f),g=this.rules.other.headingBeginRegex(f),q=this.rules.other.htmlBeginRegex(f),v=this.rules.other.blockquoteBeginRegex(f);for(;e;){let J=e.split(`
|
|
24
|
+
`,1)[0],B;if(h=J,this.options.pedantic?(h=h.replace(this.rules.other.listReplaceNesting," "),B=h):B=h.replace(this.rules.other.tabCharGlobal," "),E.test(h)||g.test(h)||q.test(h)||v.test(h)||w.test(h)||A.test(h))break;if(B.search(this.rules.other.nonSpaceChar)>=f||!h.trim())p+=`
|
|
25
|
+
`+B.slice(f);else{if(m||d.replace(this.rules.other.tabCharGlobal," ").search(this.rules.other.nonSpaceChar)>=4||E.test(d)||g.test(d)||A.test(d))break;p+=`
|
|
26
|
+
`+h}m=!h.trim(),l+=J+`
|
|
27
|
+
`,e=e.substring(J.length+1),d=B.slice(f)}}r.loose||(a?r.loose=!0:this.rules.other.doubleBlankLine.test(l)&&(a=!0)),r.items.push({type:"list_item",raw:l,task:!!this.options.gfm&&this.rules.other.listIsTask.test(p),loose:!1,text:p,tokens:[]}),r.raw+=l}let o=r.items.at(-1);if(o)o.raw=o.raw.trimEnd(),o.text=o.text.trimEnd();else return;r.raw=r.raw.trimEnd();for(let c of r.items){this.lexer.state.top=!1,c.tokens=this.lexer.blockTokens(c.text,[]);let l=c.tokens[0];if(c.task&&(l?.type==="text"||l?.type==="paragraph")){c.text=c.text.replace(this.rules.other.listReplaceTask,""),l.raw=l.raw.replace(this.rules.other.listReplaceTask,""),l.text=l.text.replace(this.rules.other.listReplaceTask,"");for(let d=this.lexer.inlineQueue.length-1;d>=0;d--)if(this.rules.other.listIsTask.test(this.lexer.inlineQueue[d].src)){this.lexer.inlineQueue[d].src=this.lexer.inlineQueue[d].src.replace(this.rules.other.listReplaceTask,"");break}let p=this.rules.other.listTaskCheckbox.exec(c.raw);if(p){let d={type:"checkbox",raw:p[0]+" ",checked:p[0]!=="[ ]"};c.checked=d.checked,r.loose?c.tokens[0]&&["paragraph","text"].includes(c.tokens[0].type)&&"tokens"in c.tokens[0]&&c.tokens[0].tokens?(c.tokens[0].raw=d.raw+c.tokens[0].raw,c.tokens[0].text=d.raw+c.tokens[0].text,c.tokens[0].tokens.unshift(d)):c.tokens.unshift({type:"paragraph",raw:d.raw,text:d.raw,tokens:[d]}):c.tokens.unshift(d)}}else c.task&&(c.task=!1);if(!r.loose){let p=c.tokens.filter(h=>h.type==="space"),d=p.length>0&&p.some(h=>this.rules.other.anyLine.test(h.raw));r.loose=d}}if(r.loose)for(let c of r.items){c.loose=!0;for(let l of c.tokens)l.type==="text"&&(l.type="paragraph")}return r}}html(e){let t=this.rules.block.html.exec(e);if(t){let s=we(t[0]);return{type:"html",block:!0,raw:s,pre:t[1]==="pre"||t[1]==="script"||t[1]==="style",text:s}}}def(e){let t=this.rules.block.def.exec(e);if(t){let s=t[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal," "),n=t[2]?t[2].replace(this.rules.other.hrefBrackets,"$1").replace(this.rules.inline.anyPunctuation,"$1"):"",r=t[3]?t[3].substring(1,t[3].length-1).replace(this.rules.inline.anyPunctuation,"$1"):t[3];return{type:"def",tag:s,raw:T(t[0],`
|
|
28
|
+
`),href:n,title:r}}}table(e){let t=this.rules.block.table.exec(e);if(!t||!this.rules.other.tableDelimiter.test(t[2]))return;let s=xe(t[1]),n=t[2].replace(this.rules.other.tableAlignChars,"").split("|"),r=t[3]?.trim()?t[3].replace(this.rules.other.tableRowBlankLine,"").split(`
|
|
29
29
|
`):[],i={type:"table",raw:T(t[0],`
|
|
30
|
-
`),header:[],align:[],rows:[]};if(s.length===n.length){for(let a of n)this.rules.other.tableAlignRight.test(a)?i.align.push("right"):this.rules.other.tableAlignCenter.test(a)?i.align.push("center"):this.rules.other.tableAlignLeft.test(a)?i.align.push("left"):i.align.push(null);for(let a=0;a<s.length;a++)i.header.push({text:s[a],tokens:this.lexer.inline(s[a]),header:!0,align:i.align[a]});for(let a of r)i.rows.push(
|
|
30
|
+
`),header:[],align:[],rows:[]};if(s.length===n.length){for(let a of n)this.rules.other.tableAlignRight.test(a)?i.align.push("right"):this.rules.other.tableAlignCenter.test(a)?i.align.push("center"):this.rules.other.tableAlignLeft.test(a)?i.align.push("left"):i.align.push(null);for(let a=0;a<s.length;a++)i.header.push({text:s[a],tokens:this.lexer.inline(s[a]),header:!0,align:i.align[a]});for(let a of r)i.rows.push(xe(a,i.header.length).map((o,c)=>({text:o,tokens:this.lexer.inline(o),header:!1,align:i.align[c]})));return i}}lheading(e){let t=this.rules.block.lheading.exec(e);if(t){let s=t[1].trim();return{type:"heading",raw:T(t[0],`
|
|
31
31
|
`),depth:t[2].charAt(0)==="="?1:2,text:s,tokens:this.lexer.inline(s)}}}paragraph(e){let t=this.rules.block.paragraph.exec(e);if(t){let s=t[1].charAt(t[1].length-1)===`
|
|
32
|
-
`?t[1].slice(0,-1):t[1];return{type:"paragraph",raw:t[0],text:s,tokens:this.lexer.inline(s)}}}text(e){let t=this.rules.block.text.exec(e);if(t)return{type:"text",raw:t[0],text:t[0],tokens:this.lexer.inline(t[0])}}escape(e){let t=this.rules.inline.escape.exec(e);if(t)return{type:"escape",raw:t[0],text:t[1]}}tag(e){let t=this.rules.inline.tag.exec(e);if(t)return!this.lexer.state.inLink&&this.rules.other.startATag.test(t[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&this.rules.other.endATag.test(t[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&this.rules.other.startPreScriptTag.test(t[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&this.rules.other.endPreScriptTag.test(t[0])&&(this.lexer.state.inRawBlock=!1),{type:"html",raw:t[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:t[0]}}link(e){let t=this.rules.inline.link.exec(e);if(t){let s=t[2].trim();if(!this.options.pedantic&&this.rules.other.startAngleBracket.test(s)){if(!this.rules.other.endAngleBracket.test(s))return;let i=T(s.slice(0,-1),"\\");if((s.length-i.length)%2===0)return}else{let i=
|
|
32
|
+
`?t[1].slice(0,-1):t[1];return{type:"paragraph",raw:t[0],text:s,tokens:this.lexer.inline(s)}}}text(e){let t=this.rules.block.text.exec(e);if(t)return{type:"text",raw:t[0],text:t[0],tokens:this.lexer.inline(t[0])}}escape(e){let t=this.rules.inline.escape.exec(e);if(t)return{type:"escape",raw:t[0],text:t[1]}}tag(e){let t=this.rules.inline.tag.exec(e);if(t)return!this.lexer.state.inLink&&this.rules.other.startATag.test(t[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&this.rules.other.endATag.test(t[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&this.rules.other.startPreScriptTag.test(t[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&this.rules.other.endPreScriptTag.test(t[0])&&(this.lexer.state.inRawBlock=!1),{type:"html",raw:t[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:t[0]}}link(e){let t=this.rules.inline.link.exec(e);if(t){let s=t[2].trim();if(!this.options.pedantic&&this.rules.other.startAngleBracket.test(s)){if(!this.rules.other.endAngleBracket.test(s))return;let i=T(s.slice(0,-1),"\\");if((s.length-i.length)%2===0)return}else{let i=Mt(t[2],"()");if(i===-2)return;if(i>-1){let a=(t[0].indexOf("!")===0?5:4)+t[1].length+i;t[2]=t[2].substring(0,i),t[0]=t[0].substring(0,a).trim(),t[3]=""}}let n=t[2],r="";if(this.options.pedantic){let i=this.rules.other.pedanticHrefTitle.exec(n);i&&(n=i[1],r=i[3])}else r=t[3]?t[3].slice(1,-1):"";return n=n.trim(),this.rules.other.startAngleBracket.test(n)&&(this.options.pedantic&&!this.rules.other.endAngleBracket.test(s)?n=n.slice(1):n=n.slice(1,-1)),$e(t,{href:n&&n.replace(this.rules.inline.anyPunctuation,"$1"),title:r&&r.replace(this.rules.inline.anyPunctuation,"$1")},t[0],this.lexer,this.rules)}}reflink(e,t){let s;if((s=this.rules.inline.reflink.exec(e))||(s=this.rules.inline.nolink.exec(e))){let n=(s[2]||s[1]).replace(this.rules.other.multipleSpaceGlobal," "),r=t[n.toLowerCase()];if(!r){let i=s[0].charAt(0);return{type:"text",raw:i,text:i}}return $e(s,r,s[0],this.lexer,this.rules)}}emStrong(e,t,s=""){let n=this.rules.inline.emStrongLDelim.exec(e);if(!(!n||!n[1]&&!n[2]&&!n[3]&&!n[4]||n[4]&&s.match(this.rules.other.unicodeAlphaNumeric))&&(!(n[1]||n[3])||!s||this.rules.inline.punctuation.exec(s))){let r=[...n[0]].length-1,i,a,o=r,c=0,l=n[0][0]==="*"?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(l.lastIndex=0,t=t.slice(-1*e.length+r);(n=l.exec(t))!==null;){if(i=n[1]||n[2]||n[3]||n[4]||n[5]||n[6],!i)continue;if(a=[...i].length,n[3]||n[4]){o+=a;continue}else if((n[5]||n[6])&&r%3&&!((r+a)%3)){c+=a;continue}if(o-=a,o>0)continue;a=Math.min(a,a+o+c);let p=[...n[0]][0].length,d=e.slice(0,r+n.index+p+a);if(Math.min(r,a)%2){let m=d.slice(1,-1);return{type:"em",raw:d,text:m,tokens:this.lexer.inlineTokens(m)}}let h=d.slice(2,-2);return{type:"strong",raw:d,text:h,tokens:this.lexer.inlineTokens(h)}}}}codespan(e){let t=this.rules.inline.code.exec(e);if(t){let s=t[2].replace(this.rules.other.newLineCharGlobal," "),n=this.rules.other.nonSpaceChar.test(s),r=this.rules.other.startingSpaceChar.test(s)&&this.rules.other.endingSpaceChar.test(s);return n&&r&&(s=s.substring(1,s.length-1)),{type:"codespan",raw:t[0],text:s}}}br(e){let t=this.rules.inline.br.exec(e);if(t)return{type:"br",raw:t[0]}}del(e,t,s=""){let n=this.rules.inline.delLDelim.exec(e);if(n&&(!n[1]||!s||this.rules.inline.punctuation.exec(s))){let r=[...n[0]].length-1,i,a,o=r,c=this.rules.inline.delRDelim;for(c.lastIndex=0,t=t.slice(-1*e.length+r);(n=c.exec(t))!==null;){if(i=n[1]||n[2]||n[3]||n[4]||n[5]||n[6],!i||(a=[...i].length,a!==r))continue;if(n[3]||n[4]){o+=a;continue}if(o-=a,o>0)continue;a=Math.min(a,a+o);let l=[...n[0]][0].length,p=e.slice(0,r+n.index+l+a),d=p.slice(r,-r);return{type:"del",raw:p,text:d,tokens:this.lexer.inlineTokens(d)}}}}autolink(e){let t=this.rules.inline.autolink.exec(e);if(t){let s,n;return t[2]==="@"?(s=t[1],n="mailto:"+s):(s=t[1],n=s),{type:"link",raw:t[0],text:s,href:n,tokens:[{type:"text",raw:s,text:s}]}}}url(e){let t;if(t=this.rules.inline.url.exec(e)){let s,n;if(t[2]==="@")s=t[0],n="mailto:"+s;else{let r;do r=t[0],t[0]=this.rules.inline._backpedal.exec(t[0])?.[0]??"";while(r!==t[0]);s=t[0],t[1]==="www."?n="http://"+t[0]:n=t[0]}return{type:"link",raw:t[0],text:s,href:n,tokens:[{type:"text",raw:s,text:s}]}}}inlineText(e){let t=this.rules.inline.text.exec(e);if(t){let s=this.lexer.state.inRawBlock;return{type:"text",raw:t[0],text:t[0],escaped:s}}}},y=class se{tokens;options;state;inlineQueue;tokenizer;constructor(t){this.tokens=[],this.tokens.links=Object.create(null),this.options=t||I,this.options.tokenizer=this.options.tokenizer||new H,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,top:!0};let s={other:x,block:N.normal,inline:U.normal};this.options.pedantic?(s.block=N.pedantic,s.inline=U.pedantic):this.options.gfm&&(s.block=N.gfm,this.options.breaks?s.inline=U.breaks:s.inline=U.gfm),this.tokenizer.rules=s}static get rules(){return{block:N,inline:U}}static lex(t,s){return new se(s).lex(t)}static lexInline(t,s){return new se(s).inlineTokens(t)}lex(t){t=t.replace(x.carriageReturn,`
|
|
33
33
|
`),this.blockTokens(t,this.tokens);for(let s=0;s<this.inlineQueue.length;s++){let n=this.inlineQueue[s];this.inlineTokens(n.src,n.tokens)}return this.inlineQueue=[],this.tokens}blockTokens(t,s=[],n=!1){this.tokenizer.lexer=this,this.options.pedantic&&(t=t.replace(x.tabCharGlobal," ").replace(x.spaceLine,""));let r=1/0;for(;t;){if(t.length<r)r=t.length;else{this.infiniteLoopError(t.charCodeAt(0));break}let i;if(this.options.extensions?.block?.some(o=>(i=o.call({lexer:this},t,s))?(t=t.substring(i.raw.length),s.push(i),!0):!1))continue;if(i=this.tokenizer.space(t)){t=t.substring(i.raw.length);let o=s.at(-1);i.raw.length===1&&o!==void 0?o.raw+=`
|
|
34
34
|
`:s.push(i);continue}if(i=this.tokenizer.code(t)){t=t.substring(i.raw.length);let o=s.at(-1);o?.type==="paragraph"||o?.type==="text"?(o.raw+=(o.raw.endsWith(`
|
|
35
35
|
`)?"":`
|
|
@@ -43,7 +43,7 @@ ${p}`:p;let d=this.lexer.state.top;if(this.lexer.state.top=!0,this.lexer.blockTo
|
|
|
43
43
|
`+i.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=o.text):s.push(i),n=a.length!==t.length,t=t.substring(i.raw.length);continue}if(i=this.tokenizer.text(t)){t=t.substring(i.raw.length);let o=s.at(-1);o?.type==="text"?(o.raw+=(o.raw.endsWith(`
|
|
44
44
|
`)?"":`
|
|
45
45
|
`)+i.raw,o.text+=`
|
|
46
|
-
`+i.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=o.text):s.push(i);continue}if(t){this.infiniteLoopError(t.charCodeAt(0));break}}return this.state.top=!0,s}inline(t,s=[]){return this.inlineQueue.push({src:t,tokens:s}),s}inlineTokens(t,s=[]){this.tokenizer.lexer=this;let n=t,r=null;if(this.tokens.links){let l=Object.keys(this.tokens.links);if(l.length>0)for(;(r=this.tokenizer.rules.inline.reflinkSearch.exec(n))!==null;)l.includes(r[0].slice(r[0].lastIndexOf("[")+1,-1))&&(n=n.slice(0,r.index)+"["+"a".repeat(r[0].length-2)+"]"+n.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;(r=this.tokenizer.rules.inline.anyPunctuation.exec(n))!==null;)n=n.slice(0,r.index)+"++"+n.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);let i;for(;(r=this.tokenizer.rules.inline.blockSkip.exec(n))!==null;)i=r[2]?r[2].length:0,n=n.slice(0,r.index+i)+"["+"a".repeat(r[0].length-i-2)+"]"+n.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);n=this.options.hooks?.emStrongMask?.call({lexer:this},n)??n;let a=!1,o="",c=1/0;for(;t;){if(t.length<c)c=t.length;else{this.infiniteLoopError(t.charCodeAt(0));break}a||(o=""),a=!1;let l;if(this.options.extensions?.inline?.some(d=>(l=d.call({lexer:this},t,s))?(t=t.substring(l.raw.length),s.push(l),!0):!1))continue;if(l=this.tokenizer.escape(t)){t=t.substring(l.raw.length),s.push(l);continue}if(l=this.tokenizer.tag(t)){t=t.substring(l.raw.length),s.push(l);continue}if(l=this.tokenizer.link(t)){t=t.substring(l.raw.length),s.push(l);continue}if(l=this.tokenizer.reflink(t,this.tokens.links)){t=t.substring(l.raw.length);let d=s.at(-1);l.type==="text"&&d?.type==="text"?(d.raw+=l.raw,d.text+=l.text):s.push(l);continue}if(l=this.tokenizer.emStrong(t,n,o)){t=t.substring(l.raw.length),s.push(l);continue}if(l=this.tokenizer.codespan(t)){t=t.substring(l.raw.length),s.push(l);continue}if(l=this.tokenizer.br(t)){t=t.substring(l.raw.length),s.push(l);continue}if(l=this.tokenizer.del(t,n,o)){t=t.substring(l.raw.length),s.push(l);continue}if(l=this.tokenizer.autolink(t)){t=t.substring(l.raw.length),s.push(l);continue}if(!this.state.inLink&&(l=this.tokenizer.url(t))){t=t.substring(l.raw.length),s.push(l);continue}let p=t;if(this.options.extensions?.startInline){let d=1/0,h=t.slice(1),m;this.options.extensions.startInline.forEach(f=>{m=f.call({lexer:this},h),typeof m=="number"&&m>=0&&(d=Math.min(d,m))}),d<1/0&&d>=0&&(p=t.substring(0,d+1))}if(l=this.tokenizer.inlineText(p)){t=t.substring(l.raw.length),l.raw.slice(-1)!=="_"&&(o=l.raw.slice(-1)),a=!0;let d=s.at(-1);d?.type==="text"?(d.raw+=l.raw,d.text+=l.text):s.push(l);continue}if(t){this.infiniteLoopError(t.charCodeAt(0));break}}return s}infiniteLoopError(t){let s="Infinite loop on byte: "+t;if(this.options.silent)console.error(s);else throw new Error(s)}},
|
|
46
|
+
`+i.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=o.text):s.push(i);continue}if(t){this.infiniteLoopError(t.charCodeAt(0));break}}return this.state.top=!0,s}inline(t,s=[]){return this.inlineQueue.push({src:t,tokens:s}),s}inlineTokens(t,s=[]){this.tokenizer.lexer=this;let n=t,r=null;if(this.tokens.links){let l=Object.keys(this.tokens.links);if(l.length>0)for(;(r=this.tokenizer.rules.inline.reflinkSearch.exec(n))!==null;)l.includes(r[0].slice(r[0].lastIndexOf("[")+1,-1))&&(n=n.slice(0,r.index)+"["+"a".repeat(r[0].length-2)+"]"+n.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;(r=this.tokenizer.rules.inline.anyPunctuation.exec(n))!==null;)n=n.slice(0,r.index)+"++"+n.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);let i;for(;(r=this.tokenizer.rules.inline.blockSkip.exec(n))!==null;)i=r[2]?r[2].length:0,n=n.slice(0,r.index+i)+"["+"a".repeat(r[0].length-i-2)+"]"+n.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);n=this.options.hooks?.emStrongMask?.call({lexer:this},n)??n;let a=!1,o="",c=1/0;for(;t;){if(t.length<c)c=t.length;else{this.infiniteLoopError(t.charCodeAt(0));break}a||(o=""),a=!1;let l;if(this.options.extensions?.inline?.some(d=>(l=d.call({lexer:this},t,s))?(t=t.substring(l.raw.length),s.push(l),!0):!1))continue;if(l=this.tokenizer.escape(t)){t=t.substring(l.raw.length),s.push(l);continue}if(l=this.tokenizer.tag(t)){t=t.substring(l.raw.length),s.push(l);continue}if(l=this.tokenizer.link(t)){t=t.substring(l.raw.length),s.push(l);continue}if(l=this.tokenizer.reflink(t,this.tokens.links)){t=t.substring(l.raw.length);let d=s.at(-1);l.type==="text"&&d?.type==="text"?(d.raw+=l.raw,d.text+=l.text):s.push(l);continue}if(l=this.tokenizer.emStrong(t,n,o)){t=t.substring(l.raw.length),s.push(l);continue}if(l=this.tokenizer.codespan(t)){t=t.substring(l.raw.length),s.push(l);continue}if(l=this.tokenizer.br(t)){t=t.substring(l.raw.length),s.push(l);continue}if(l=this.tokenizer.del(t,n,o)){t=t.substring(l.raw.length),s.push(l);continue}if(l=this.tokenizer.autolink(t)){t=t.substring(l.raw.length),s.push(l);continue}if(!this.state.inLink&&(l=this.tokenizer.url(t))){t=t.substring(l.raw.length),s.push(l);continue}let p=t;if(this.options.extensions?.startInline){let d=1/0,h=t.slice(1),m;this.options.extensions.startInline.forEach(f=>{m=f.call({lexer:this},h),typeof m=="number"&&m>=0&&(d=Math.min(d,m))}),d<1/0&&d>=0&&(p=t.substring(0,d+1))}if(l=this.tokenizer.inlineText(p)){t=t.substring(l.raw.length),l.raw.slice(-1)!=="_"&&(o=l.raw.slice(-1)),a=!0;let d=s.at(-1);d?.type==="text"?(d.raw+=l.raw,d.text+=l.text):s.push(l);continue}if(t){this.infiniteLoopError(t.charCodeAt(0));break}}return s}infiniteLoopError(t){let s="Infinite loop on byte: "+t;if(this.options.silent)console.error(s);else throw new Error(s)}},Z=class{options;parser;constructor(e){this.options=e||I}space(e){return""}code({text:e,lang:t,escaped:s}){let n=(t||"").match(x.notSpaceStart)?.[0],r=e.replace(x.endingNewline,"")+`
|
|
47
47
|
`;return n?'<pre><code class="language-'+R(n)+'">'+(s?r:R(r,!0))+`</code></pre>
|
|
48
48
|
`:"<pre><code>"+(s?r:R(r,!0))+`</code></pre>
|
|
49
49
|
`}blockquote({tokens:e}){return`<blockquote>
|
|
@@ -61,18 +61,18 @@ ${this.parser.parse(e)}</blockquote>
|
|
|
61
61
|
`}tablerow({text:e}){return`<tr>
|
|
62
62
|
${e}</tr>
|
|
63
63
|
`}tablecell(e){let t=this.parser.parseInline(e.tokens),s=e.header?"th":"td";return(e.align?`<${s} align="${e.align}">`:`<${s}>`)+t+`</${s}>
|
|
64
|
-
`}strong({tokens:e}){return`<strong>${this.parser.parseInline(e)}</strong>`}em({tokens:e}){return`<em>${this.parser.parseInline(e)}</em>`}codespan({text:e}){return`<code>${R(e,!0)}</code>`}br(e){return"<br>"}del({tokens:e}){return`<del>${this.parser.parseInline(e)}</del>`}link({href:e,title:t,tokens:s}){let n=this.parser.parseInline(s),r=
|
|
65
|
-
Please report this to https://github.com/markedjs/marked.`,e){let n="<p>An error occurred:</p><pre>"+R(s.message+"",!0)+"</pre>";return t?Promise.resolve(n):n}if(t)return Promise.reject(s);throw s}}},C=new
|
|
64
|
+
`}strong({tokens:e}){return`<strong>${this.parser.parseInline(e)}</strong>`}em({tokens:e}){return`<em>${this.parser.parseInline(e)}</em>`}codespan({text:e}){return`<code>${R(e,!0)}</code>`}br(e){return"<br>"}del({tokens:e}){return`<del>${this.parser.parseInline(e)}</del>`}link({href:e,title:t,tokens:s}){let n=this.parser.parseInline(s),r=ve(e);if(r===null)return n;e=r;let i='<a href="'+e+'"';return t&&(i+=' title="'+R(t)+'"'),i+=">"+n+"</a>",i}image({href:e,title:t,text:s,tokens:n}){n&&(s=this.parser.parseInline(n,this.parser.textRenderer));let r=ve(e);if(r===null)return R(s);e=r;let i=`<img src="${e}" alt="${R(s)}"`;return t&&(i+=` title="${R(t)}"`),i+=">",i}text(e){return"tokens"in e&&e.tokens?this.parser.parseInline(e.tokens):"escaped"in e&&e.escaped?e.text:R(e.text)}},he=class{strong({text:e}){return e}em({text:e}){return e}codespan({text:e}){return e}del({text:e}){return e}html({text:e}){return e}text({text:e}){return e}link({text:e}){return""+e}image({text:e}){return""+e}br(){return""}checkbox({raw:e}){return e}},S=class ne{options;renderer;textRenderer;constructor(t){this.options=t||I,this.options.renderer=this.options.renderer||new Z,this.renderer=this.options.renderer,this.renderer.options=this.options,this.renderer.parser=this,this.textRenderer=new he}static parse(t,s){return new ne(s).parse(t)}static parseInline(t,s){return new ne(s).parseInline(t)}parse(t){this.renderer.parser=this;let s="";for(let n=0;n<t.length;n++){let r=t[n];if(this.options.extensions?.renderers?.[r.type]){let a=r,o=this.options.extensions.renderers[a.type].call({parser:this},a);if(o!==!1||!["space","hr","heading","code","table","blockquote","list","html","def","paragraph","text"].includes(a.type)){s+=o||"";continue}}let i=r;switch(i.type){case"space":{s+=this.renderer.space(i);break}case"hr":{s+=this.renderer.hr(i);break}case"heading":{s+=this.renderer.heading(i);break}case"code":{s+=this.renderer.code(i);break}case"table":{s+=this.renderer.table(i);break}case"blockquote":{s+=this.renderer.blockquote(i);break}case"list":{s+=this.renderer.list(i);break}case"checkbox":{s+=this.renderer.checkbox(i);break}case"html":{s+=this.renderer.html(i);break}case"def":{s+=this.renderer.def(i);break}case"paragraph":{s+=this.renderer.paragraph(i);break}case"text":{s+=this.renderer.text(i);break}default:{let a='Token with "'+i.type+'" type was not found.';if(this.options.silent)return console.error(a),"";throw new Error(a)}}}return s}parseInline(t,s=this.renderer){this.renderer.parser=this;let n="";for(let r=0;r<t.length;r++){let i=t[r];if(this.options.extensions?.renderers?.[i.type]){let o=this.options.extensions.renderers[i.type].call({parser:this},i);if(o!==!1||!["escape","html","link","image","strong","em","codespan","br","del","text"].includes(i.type)){n+=o||"";continue}}let a=i;switch(a.type){case"escape":{n+=s.text(a);break}case"html":{n+=s.html(a);break}case"link":{n+=s.link(a);break}case"image":{n+=s.image(a);break}case"checkbox":{n+=s.checkbox(a);break}case"strong":{n+=s.strong(a);break}case"em":{n+=s.em(a);break}case"codespan":{n+=s.codespan(a);break}case"br":{n+=s.br(a);break}case"del":{n+=s.del(a);break}case"text":{n+=s.text(a);break}default:{let o='Token with "'+a.type+'" type was not found.';if(this.options.silent)return console.error(o),"";throw new Error(o)}}}return n}},_=class{options;block;constructor(e){this.options=e||I}static passThroughHooks=new Set(["preprocess","postprocess","processAllTokens","emStrongMask"]);static passThroughHooksRespectAsync=new Set(["preprocess","postprocess","processAllTokens"]);preprocess(e){return e}postprocess(e){return e}processAllTokens(e){return e}emStrongMask(e){return e}provideLexer(e=this.block){return e?y.lex:y.lexInline}provideParser(e=this.block){return e?S.parse:S.parseInline}},Ut=class{defaults=ie();options=this.setOptions;parse=this.parseMarkdown(!0);parseInline=this.parseMarkdown(!1);Parser=S;Renderer=Z;TextRenderer=he;Lexer=y;Tokenizer=H;Hooks=_;constructor(...e){this.use(...e)}walkTokens(e,t){let s=[];for(let n of e)switch(s=s.concat(t.call(this,n)),n.type){case"table":{let r=n;for(let i of r.header)s=s.concat(this.walkTokens(i.tokens,t));for(let i of r.rows)for(let a of i)s=s.concat(this.walkTokens(a.tokens,t));break}case"list":{let r=n;s=s.concat(this.walkTokens(r.items,t));break}default:{let r=n;this.defaults.extensions?.childTokens?.[r.type]?this.defaults.extensions.childTokens[r.type].forEach(i=>{let a=r[i].flat(1/0);s=s.concat(this.walkTokens(a,t))}):r.tokens&&(s=s.concat(this.walkTokens(r.tokens,t)))}}return s}use(...e){let t=this.defaults.extensions||{renderers:{},childTokens:{}};return e.forEach(s=>{let n={...s};if(n.async=this.defaults.async||n.async||!1,s.extensions&&(s.extensions.forEach(r=>{if(!r.name)throw new Error("extension name required");if("renderer"in r){let i=t.renderers[r.name];i?t.renderers[r.name]=function(...a){let o=r.renderer.apply(this,a);return o===!1&&(o=i.apply(this,a)),o}:t.renderers[r.name]=r.renderer}if("tokenizer"in r){if(!r.level||r.level!=="block"&&r.level!=="inline")throw new Error("extension level must be 'block' or 'inline'");let i=t[r.level];i?i.unshift(r.tokenizer):t[r.level]=[r.tokenizer],r.start&&(r.level==="block"?t.startBlock?t.startBlock.push(r.start):t.startBlock=[r.start]:r.level==="inline"&&(t.startInline?t.startInline.push(r.start):t.startInline=[r.start]))}"childTokens"in r&&r.childTokens&&(t.childTokens[r.name]=r.childTokens)}),n.extensions=t),s.renderer){let r=this.defaults.renderer||new Z(this.defaults);for(let i in s.renderer){if(!(i in r))throw new Error(`renderer '${i}' does not exist`);if(["options","parser"].includes(i))continue;let a=i,o=s.renderer[a],c=r[a];r[a]=(...l)=>{let p=o.apply(r,l);return p===!1&&(p=c.apply(r,l)),p||""}}n.renderer=r}if(s.tokenizer){let r=this.defaults.tokenizer||new H(this.defaults);for(let i in s.tokenizer){if(!(i in r))throw new Error(`tokenizer '${i}' does not exist`);if(["options","rules","lexer"].includes(i))continue;let a=i,o=s.tokenizer[a],c=r[a];r[a]=(...l)=>{let p=o.apply(r,l);return p===!1&&(p=c.apply(r,l)),p}}n.tokenizer=r}if(s.hooks){let r=this.defaults.hooks||new _;for(let i in s.hooks){if(!(i in r))throw new Error(`hook '${i}' does not exist`);if(["options","block"].includes(i))continue;let a=i,o=s.hooks[a],c=r[a];_.passThroughHooks.has(i)?r[a]=l=>{if(this.defaults.async&&_.passThroughHooksRespectAsync.has(i))return(async()=>{let d=await o.call(r,l);return c.call(r,d)})();let p=o.call(r,l);return c.call(r,p)}:r[a]=(...l)=>{if(this.defaults.async)return(async()=>{let d=await o.apply(r,l);return d===!1&&(d=await c.apply(r,l)),d})();let p=o.apply(r,l);return p===!1&&(p=c.apply(r,l)),p}}n.hooks=r}if(s.walkTokens){let r=this.defaults.walkTokens,i=s.walkTokens;n.walkTokens=function(a){let o=[];return o.push(i.call(this,a)),r&&(o=o.concat(r.call(this,a))),o}}this.defaults={...this.defaults,...n}}),this}setOptions(e){return this.defaults={...this.defaults,...e},this}lexer(e,t){return y.lex(e,t??this.defaults)}parser(e,t){return S.parse(e,t??this.defaults)}parseMarkdown(e){return(t,s)=>{let n={...s},r={...this.defaults,...n},i=this.onError(!!r.silent,!!r.async);if(this.defaults.async===!0&&n.async===!1)return i(new Error("marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise."));if(typeof t>"u"||t===null)return i(new Error("marked(): input parameter is undefined or null"));if(typeof t!="string")return i(new Error("marked(): input parameter is of type "+Object.prototype.toString.call(t)+", string expected"));if(r.hooks&&(r.hooks.options=r,r.hooks.block=e),r.async)return(async()=>{let a=r.hooks?await r.hooks.preprocess(t):t,o=await(r.hooks?await r.hooks.provideLexer(e):e?y.lex:y.lexInline)(a,r),c=r.hooks?await r.hooks.processAllTokens(o):o;r.walkTokens&&await Promise.all(this.walkTokens(c,r.walkTokens));let l=await(r.hooks?await r.hooks.provideParser(e):e?S.parse:S.parseInline)(c,r);return r.hooks?await r.hooks.postprocess(l):l})().catch(i);try{r.hooks&&(t=r.hooks.preprocess(t));let a=(r.hooks?r.hooks.provideLexer(e):e?y.lex:y.lexInline)(t,r);r.hooks&&(a=r.hooks.processAllTokens(a)),r.walkTokens&&this.walkTokens(a,r.walkTokens);let o=(r.hooks?r.hooks.provideParser(e):e?S.parse:S.parseInline)(a,r);return r.hooks&&(o=r.hooks.postprocess(o)),o}catch(a){return i(a)}}}onError(e,t){return s=>{if(s.message+=`
|
|
65
|
+
Please report this to https://github.com/markedjs/marked.`,e){let n="<p>An error occurred:</p><pre>"+R(s.message+"",!0)+"</pre>";return t?Promise.resolve(n):n}if(t)return Promise.reject(s);throw s}}},C=new Ut;function b(e,t){return C.parse(e,t)}b.options=b.setOptions=function(e){return C.setOptions(e),b.defaults=C.defaults,Pe(b.defaults),b};b.getDefaults=ie;b.defaults=I;b.use=function(...e){return C.use(...e),b.defaults=C.defaults,Pe(b.defaults),b};b.walkTokens=function(e,t){return C.walkTokens(e,t)};b.parseInline=C.parseInline;b.Parser=S;b.parser=S.parse;b.Renderer=Z;b.TextRenderer=he;b.Lexer=y;b.lexer=y.lex;b.Tokenizer=H;b.Hooks=_;b.parse=b;b.options;b.setOptions;b.use;b.walkTokens;b.parseInline;S.parse;y.lex;function _t(e){return"averageAxisScore"in e}const Fe={service:[{maxSeconds:2,score:100},{maxSeconds:5,score:90},{maxSeconds:10,score:80},{maxSeconds:25,score:60},{maxSeconds:null,score:40}],environment:[{maxSeconds:.5,score:100},{maxSeconds:2,score:90},{maxSeconds:5,score:80},{maxSeconds:10,score:60},{maxSeconds:null,score:40}],agent:[{maxSeconds:2,score:100},{maxSeconds:5,score:90},{maxSeconds:15,score:80},{maxSeconds:30,score:60},{maxSeconds:null,score:40}]};function jt(e){return e.includes("service")?"service":e.includes("environment")?"environment":"agent"}function Nt(e){return Fe[e]}function Dt(e,t){if(e===null||e<=0)return 0;const s=e/1e3,n=Fe[t];for(let r=0;r<n.length;r++){const i=n[r];if(i.maxSeconds===null||s<=i.maxSeconds)return r}return n.length-1}function ye(e){return e<1?`${e*1e3}ms`:Number.isInteger(e)?`${e}s`:`${e.toFixed(1)}s`}function Ot(e,t){if(e.maxSeconds===null){const s=t?.maxSeconds;return s!=null?`> ${ye(s)}`:"any"}return`≤ ${ye(e.maxSeconds)}`}const Ft={service:"Service",environment:"Environment",agent:"Agent"};function Ht(e){return Ft[e]}b.setOptions({gfm:!0,breaks:!1});function Zt(e){try{const t=b.parse(e,{async:!1});return Kt(t)}catch{return`<pre>${u(e)}</pre>`}}function Kt(e){return e.replace(/<\s*\/?\s*(script|style|iframe|object|embed)[^>]*>/gi,"").replace(/\s+on[a-z]+\s*=\s*("[^"]*"|'[^']*'|[^\s>]+)/gi,"").replace(/(href|src)\s*=\s*("\s*javascript:[^"]*"|'\s*javascript:[^']*'|\s*javascript:[^\s>]+)/gi,'$1="#"')}function u(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}function $(e){return!Number.isFinite(e)||e<0?"—":e<1e3?`${Math.round(e)}ms`:`${(e/1e3).toFixed(1)}s`}function K(e){return e===void 0||e<=0?"—":`$${e.toFixed(4)}`}function Se(e){if(!e)return"—";const t=e.input+e.output+(e.cacheReadInput??0);return t===0?"—":t>=1e6?`${(t/1e6).toFixed(1)}M`:t>=1e3?`${(t/1e3).toFixed(1)}k`:t.toLocaleString()}function Gt(e){try{return new Date(e).toLocaleString("en-US",{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1})}catch{return e}}function Qt(e){return e>=90?"score-green":e>=80?"score-yellow":e>=70?"score-orange":"score-red"}function Wt(e){return e>=90?"fill-green":e>=80?"fill-yellow":e>=70?"fill-orange":"fill-red"}function He(e){const t=e.indexOf("@");return t===-1?e:e.slice(0,t)}function G(e){const t=e.indexOf("@");return t===-1?null:e.slice(t+1)}function Ze(e){return e.replace(/ \[[^\]]+\]$/,"")}function re(e){const t=G(e.scenarioKey);return t?`${e.agentName} @${t}`:e.agentName}function Ke(e){const t=new Map;for(const n of e){const r=He(n.scenarioKey);let i=t.get(r);i||(i={scenarioKey:r,scenarioName:Ze(n.scenarioName),entries:[],prompt:n.prompt,judge:n.judge??n.rubric},t.set(r,i)),i.entries.push(n)}const s=Array.from(t.values());for(const n of s)n.entries.sort((r,i)=>{const a=r.agentName.localeCompare(i.agentName);if(a!==0)return a;const o=G(r.scenarioKey)??"",c=G(i.scenarioKey)??"";return o.localeCompare(c)});return s.sort((n,r)=>n.scenarioKey.localeCompare(r.scenarioKey)),s}function P(e,t=!1){return e===void 0?`<span class="score-badge score-na${t?" score-badge-lg":""}">—</span>`:`<span class="score-badge ${Qt(e)}${t?" score-badge-lg":""}">${e}</span>`}function fe(e,t=100){const s=Math.max(0,Math.min(100,e/t*100));return`<div class="progress-bar"><div class="fill ${Wt(s)}" style="width: ${s}%"></div></div>`}function Ae(e,t){return`
|
|
66
66
|
<div class="dimension-item">
|
|
67
67
|
<span class="dimension-label">${u(e)}</span>
|
|
68
|
-
${
|
|
68
|
+
${fe(t)}
|
|
69
69
|
<span class="dimension-value">${t}</span>
|
|
70
|
-
</div>`}function
|
|
70
|
+
</div>`}function Jt(e){const t=Ke(e.results).flatMap(n=>n.entries),s={...e,results:t};return`
|
|
71
71
|
<div class="container">
|
|
72
72
|
${Vt(s)}
|
|
73
|
-
${
|
|
73
|
+
${Xt(s)}
|
|
74
74
|
</div>
|
|
75
|
-
${
|
|
75
|
+
${ys(t)}`}function Vt(e){const t=_t(e.summary),s=e.results.reduce((n,r)=>n+(r.totalCostUsd??0),0);return`
|
|
76
76
|
<header class="report-header">
|
|
77
77
|
<div class="header-left">
|
|
78
78
|
<div class="report-branding">
|
|
@@ -81,7 +81,7 @@ Please report this to https://github.com/markedjs/marked.`,e){let n="<p>An error
|
|
|
81
81
|
</div>
|
|
82
82
|
<div class="report-meta">
|
|
83
83
|
${e.name?`<div class="report-meta-row"><span class="report-meta-label">Report name:</span> <span class="report-meta-value">${u(e.name)}</span></div>`:""}
|
|
84
|
-
<div class="report-meta-row"><span class="report-meta-label">Generated on:</span> <span class="report-meta-value">${
|
|
84
|
+
<div class="report-meta-row"><span class="report-meta-label">Generated on:</span> <span class="report-meta-value">${Gt(e.timestamp)}</span></div>
|
|
85
85
|
<div class="report-meta-row"><span class="report-meta-label">Total duration:</span> <span class="report-meta-value">${$(e.durationMs)}</span></div>
|
|
86
86
|
<div class="report-meta-row"><span class="report-meta-label">Report ID:</span> <span class="report-meta-value report-meta-id">${u(e.reportId)}</span></div>
|
|
87
87
|
</div>
|
|
@@ -112,12 +112,12 @@ Please report this to https://github.com/markedjs/marked.`,e){let n="<p>An error
|
|
|
112
112
|
</div>`:""}
|
|
113
113
|
${s>0?`
|
|
114
114
|
<div class="summary-stat">
|
|
115
|
-
<div class="stat-value">${
|
|
115
|
+
<div class="stat-value">${K(s)}</div>
|
|
116
116
|
<div class="stat-label">Cost</div>
|
|
117
117
|
</div>`:""}
|
|
118
118
|
</div>
|
|
119
119
|
</div>
|
|
120
|
-
</header>`}function
|
|
120
|
+
</header>`}function Xt(e){if(e.results.length===0)return'<div class="empty-state">No results in this report.</div>';const t=e.results.some(i=>i.score!==void 0),s=Ke(e.results);let n=0;const r=s.map(i=>{const a=n;return n+=i.entries.length,Yt(i,a,t)}).join("");return`
|
|
121
121
|
<section class="results-section">
|
|
122
122
|
<table class="results-table">
|
|
123
123
|
<thead>
|
|
@@ -138,7 +138,7 @@ Please report this to https://github.com/markedjs/marked.`,e){let n="<p>An error
|
|
|
138
138
|
</thead>
|
|
139
139
|
<tbody>${r}</tbody>
|
|
140
140
|
</table>
|
|
141
|
-
</section>`}function
|
|
141
|
+
</section>`}function Yt(e,t,s){const n=es(e,t,s),r=e.entries.map((i,a)=>{const o=t+a;return ts(i,o,s,e.scenarioKey)+ss(i,o,e.scenarioKey)}).join("");return n+r}function es(e,t,s){return s?`
|
|
142
142
|
<tr class="scenario-header-row expanded" data-scenario="${u(e.scenarioKey)}">
|
|
143
143
|
<td><span class="expand-icon">▶</span></td>
|
|
144
144
|
<td class="col-scenario-header">${u(e.scenarioName)}</td>
|
|
@@ -158,80 +158,80 @@ Please report this to https://github.com/markedjs/marked.`,e){let n="<p>An error
|
|
|
158
158
|
<td class="col-right hide-mobile"></td>
|
|
159
159
|
<td class="col-right hide-mobile"></td>
|
|
160
160
|
<td class="col-right hide-mobile"></td>
|
|
161
|
-
</tr>`}function
|
|
161
|
+
</tr>`}function ts(e,t,s,n){const r=e.score,i=e.exitCode!==0||!!e.error,a=e.error?`<button class="error-btn" data-error-index="${t}" title="${u(Ms(e.error))}">!</button>`:"",o=e.prompt||e.agentConfig?`<button class="info-btn" data-modal-index="${t}" title="View resolved configuration" type="button">ℹ</button>`:"";if(s)return`
|
|
162
162
|
<tr class="result-row agent-row" data-index="${t}" data-scenario="${u(n)}">
|
|
163
163
|
<td class="col-expand-indent"><span class="expand-icon">▶</span></td>
|
|
164
|
-
<td class="col-agent">${u(
|
|
165
|
-
<td class="col-score">${
|
|
166
|
-
<td class="col-score hide-mobile">${
|
|
167
|
-
<td class="col-score hide-mobile">${
|
|
168
|
-
<td class="col-score hide-mobile">${
|
|
169
|
-
<td class="col-score hide-mobile">${
|
|
170
|
-
<td class="col-right hide-mobile">${
|
|
164
|
+
<td class="col-agent">${u(re(e))}${o}${a}</td>
|
|
165
|
+
<td class="col-score">${P(r?.axisScore)}</td>
|
|
166
|
+
<td class="col-score hide-mobile">${P(r?.goalAchievement.score)}</td>
|
|
167
|
+
<td class="col-score hide-mobile">${P(r?.environment.score)}</td>
|
|
168
|
+
<td class="col-score hide-mobile">${P(r?.service.score)}</td>
|
|
169
|
+
<td class="col-score hide-mobile">${P(r?.agent.score)}</td>
|
|
170
|
+
<td class="col-right hide-mobile">${Se(e.tokenUsage)}</td>
|
|
171
171
|
<td class="col-right hide-mobile">${$(e.durationMs)}</td>
|
|
172
|
-
<td class="col-right hide-mobile">${
|
|
172
|
+
<td class="col-right hide-mobile">${K(e.totalCostUsd)}</td>
|
|
173
173
|
</tr>`;const c=i?'<span class="score-badge score-red">Fail</span>':'<span class="score-badge score-green">Pass</span>';return`
|
|
174
174
|
<tr class="result-row agent-row" data-index="${t}" data-scenario="${u(n)}">
|
|
175
175
|
<td class="col-expand-indent"><span class="expand-icon">▶</span></td>
|
|
176
|
-
<td class="col-agent">${u(
|
|
176
|
+
<td class="col-agent">${u(re(e))}${o}${a}</td>
|
|
177
177
|
<td class="col-score">${c}</td>
|
|
178
|
-
<td class="col-right hide-mobile">${
|
|
178
|
+
<td class="col-right hide-mobile">${Se(e.tokenUsage)}</td>
|
|
179
179
|
<td class="col-right hide-mobile">${$(e.durationMs)}</td>
|
|
180
|
-
<td class="col-right hide-mobile">${
|
|
181
|
-
</tr>`}function
|
|
180
|
+
<td class="col-right hide-mobile">${K(e.totalCostUsd)}</td>
|
|
181
|
+
</tr>`}function ss(e,t,s){const n=e.score?10:6,r=s?` data-scenario="${u(s)}"`:"";return`
|
|
182
182
|
<tr class="detail-row" id="detail-${t}"${r}>
|
|
183
183
|
<td colspan="${n}">
|
|
184
184
|
<div class="detail-panel">
|
|
185
185
|
${e.error?`<div class="error-banner">${u(e.error)}</div>`:""}
|
|
186
|
-
${e.score?
|
|
187
|
-
${
|
|
188
|
-
${e.artifacts&&e.artifacts.length>0?
|
|
186
|
+
${e.score?is(e.score,e.durationMs):rs(e)}
|
|
187
|
+
${ns(e)}
|
|
188
|
+
${e.artifacts&&e.artifacts.length>0?js(e.artifacts,t):""}
|
|
189
189
|
</div>
|
|
190
190
|
</td>
|
|
191
|
-
</tr>`}function
|
|
191
|
+
</tr>`}function ns(e){const t=[];return e.setupOutput&&t.push(Re("Setup notes",e.setupOutput)),e.teardownOutput&&t.push(Re("Teardown notes",e.teardownOutput)),t.join("")}function Re(e,t){return`
|
|
192
192
|
<div class="detail-section lifecycle-notes">
|
|
193
193
|
<div class="section-header"><h3>${u(e)}</h3></div>
|
|
194
|
-
<div class="notes-body markdown-body">${
|
|
195
|
-
</div>`}function
|
|
194
|
+
<div class="notes-body markdown-body">${Zt(t)}</div>
|
|
195
|
+
</div>`}function rs(e){const t=[];return e.tokenUsage&&(t.push(`Input: ${e.tokenUsage.input.toLocaleString()}`),t.push(`Output: ${e.tokenUsage.output.toLocaleString()}`),e.tokenUsage.cacheReadInput&&t.push(`Cache: ${e.tokenUsage.cacheReadInput.toLocaleString()}`)),`
|
|
196
196
|
<div class="detail-sections">
|
|
197
197
|
<div class="detail-section">
|
|
198
198
|
<div class="section-header"><h3>Run Details</h3></div>
|
|
199
199
|
<p style="color: var(--text-secondary); font-size: 0.875rem;">
|
|
200
200
|
Duration: ${$(e.durationMs)}
|
|
201
201
|
${t.length?` · Tokens: ${t.join(", ")}`:""}
|
|
202
|
-
${e.totalCostUsd?` · Cost: ${
|
|
202
|
+
${e.totalCostUsd?` · Cost: ${K(e.totalCostUsd)}`:""}
|
|
203
203
|
</p>
|
|
204
204
|
</div>
|
|
205
|
-
</div>`}function
|
|
205
|
+
</div>`}function is(e,t){return`
|
|
206
206
|
<div class="score-overview">
|
|
207
|
-
${
|
|
207
|
+
${P(e.axisScore,!0)}
|
|
208
208
|
<div class="category-bars">
|
|
209
|
-
${
|
|
210
|
-
${
|
|
211
|
-
${
|
|
212
|
-
${
|
|
209
|
+
${D("Goal Achievement",e.goalAchievement.score)}
|
|
210
|
+
${D("Environment",e.environment.score)}
|
|
211
|
+
${D("Service",e.service.score)}
|
|
212
|
+
${D("Agent",e.agent.score)}
|
|
213
213
|
</div>
|
|
214
214
|
</div>
|
|
215
215
|
<div class="detail-sections">
|
|
216
|
-
${e.sparseIndex?
|
|
217
|
-
${
|
|
216
|
+
${e.sparseIndex?gs(e.sparseIndex,t):""}
|
|
217
|
+
${as(e.goalAchievement)}
|
|
218
218
|
${V("Environment",e.environment,e.sparseIndex)}
|
|
219
219
|
${V("Service",e.service,e.sparseIndex)}
|
|
220
220
|
${V("Agent",e.agent,e.sparseIndex)}
|
|
221
|
-
${e.sparseIndex
|
|
222
|
-
</div>`}function
|
|
221
|
+
${e.sparseIndex?$s(e.sparseIndex):""}
|
|
222
|
+
</div>`}function D(e,t){return`
|
|
223
223
|
<div class="category-bar-row">
|
|
224
224
|
<span class="category-bar-label">${e}</span>
|
|
225
|
-
${
|
|
225
|
+
${fe(t)}
|
|
226
226
|
<span class="category-bar-value">${t}</span>
|
|
227
|
-
</div>`}function
|
|
227
|
+
</div>`}function as(e){const t=e.criteria.map(os).join("");return`
|
|
228
228
|
<div class="detail-section">
|
|
229
229
|
<div class="section-header">
|
|
230
230
|
<h3>Goal Achievement</h3>
|
|
231
231
|
<span class="section-score">${e.score} / 100</span>
|
|
232
232
|
</div>
|
|
233
233
|
<div class="criteria-list">${t}</div>
|
|
234
|
-
</div>`}function
|
|
234
|
+
</div>`}function os(e){const t=e.score===10,s=e.score*10,n=s>=90||s>=80?"✔":s>=70?"◐":"✗",r=s>=90?"high":s>=80?"good":s>=70?"medium":"low",i=Math.round(e.weight*100);return`
|
|
235
235
|
<div class="${t?"criterion-item criterion-perfect":"criterion-item criterion-imperfect"}">
|
|
236
236
|
<div class="criterion-top">
|
|
237
237
|
<span class="criterion-icon ${r}">${n}</span>
|
|
@@ -239,16 +239,16 @@ Please report this to https://github.com/markedjs/marked.`,e){let n="<p>An error
|
|
|
239
239
|
<span class="criterion-score">${e.score}/10</span>
|
|
240
240
|
<span class="criterion-weight">${i}%</span>
|
|
241
241
|
</div>
|
|
242
|
-
<div class="criterion-bar">${
|
|
242
|
+
<div class="criterion-bar">${fe(e.score,10)}</div>
|
|
243
243
|
${t?"":`<div class="criterion-rationale">${u(e.rationale)}</div>`}
|
|
244
|
-
</div>`}function V(e,t,s){const n=`<h3>${u(e)}${
|
|
244
|
+
</div>`}function V(e,t,s){const n=`<h3>${u(e)}${ls(e)}</h3>`;if(t.interactionCount===0)return`
|
|
245
245
|
<div class="detail-section">
|
|
246
246
|
<div class="section-header">
|
|
247
247
|
${n}
|
|
248
248
|
<span class="section-score">${t.score} / 100</span>
|
|
249
249
|
</div>
|
|
250
|
-
<div class="category-empty-state">${u(
|
|
251
|
-
</div>`;const r=t.dimensions,i=t.audits.filter(f=>f.rationale!=="default"),a=i.length>0,o=e==="Agent",c=e==="Agent",l=[{label:"Success",value:r.success},{label:"Speed",value:r.speed},...c?[{label:"Relevance",value:r.relevance}]:[],...o?[{label:"Necessity",value:r.necessity}]:[]],p=l.filter(f=>f.value<100),d=t.score>=100&&p.length===0,h=o&&t.necessity.rationale!=="default"?t.necessity:null,m=a?
|
|
250
|
+
<div class="category-empty-state">${u(ds(e))}</div>
|
|
251
|
+
</div>`;const r=t.dimensions,i=t.audits.filter(f=>f.rationale!=="default"),a=i.length>0,o=e==="Agent",c=e==="Agent",l=[{label:"Success",value:r.success},{label:"Speed",value:r.speed},...c?[{label:"Relevance",value:r.relevance}]:[],...o?[{label:"Necessity",value:r.necessity}]:[]],p=l.filter(f=>f.value<100),d=t.score>=100&&p.length===0,h=o&&t.necessity.rationale!=="default"?t.necessity:null,m=a?us(l,p,i,c,d,h,s):"";return`
|
|
252
252
|
<div class="detail-section">
|
|
253
253
|
<div class="section-header">
|
|
254
254
|
${n}
|
|
@@ -259,11 +259,11 @@ Please report this to https://github.com/markedjs/marked.`,e){let n="<p>An error
|
|
|
259
259
|
${a?`· ${t.auditedCount} audited`:""}
|
|
260
260
|
</div>
|
|
261
261
|
${m}
|
|
262
|
-
</div>`}function
|
|
263
|
-
<div class="dimensions-grid">${e.map(g=>
|
|
262
|
+
</div>`}function ls(e){const t=cs(e);return t?`<button class="info-btn" data-tooltip="${u(t)}" aria-label="What is the ${u(e)} score?" type="button">ℹ</button>`:""}function cs(e){switch(e){case"Environment":return"Interactions with the local execution environment — filesystem reads/writes, shell commands, processes. Each call is scored on whether it succeeded and how fast it returned.";case"Service":return"Calls to external services — HTTP requests, MCP tools, third-party APIs. Each call is scored on whether it succeeded and how fast it returned.";case"Agent":return"The agent's own decisions across the run — model thinking, tool choice, and judgment. Scored on success, speed, context relevance, and whether each action was necessary.";default:return""}}function ds(e){switch(e){case"Environment":return"No environment interactions (filesystem, shell, processes) in this run.";case"Service":return"No service interactions (HTTP requests, MCP tools, external APIs) in this run.";case"Agent":return"No agent decision points captured in this run.";default:return`No ${e.toLowerCase()} interactions in this run.`}}function us(e,t,s,n,r,i,a){const o=g=>g.success<1||g.speed<1||n&&g.contextRelevance<1,c=s.filter(o),l=s.filter(g=>!o(g));if(r)return`
|
|
263
|
+
<div class="dimensions-grid">${e.map(g=>Ae(g.label,g.value)).join("")}</div>`;const p=new Map;if(a)for(const g of a.interactions)p.set(g.id,g);const d=g=>`
|
|
264
264
|
<div class="cat-deduction-item">
|
|
265
265
|
<a class="cat-deduction-id interaction-link" data-interaction-id="${g.id}" title="Jump to this interaction in the transcript">Interaction #${g.id}</a>
|
|
266
|
-
<span class="cat-deduction-scores">${
|
|
266
|
+
<span class="cat-deduction-scores">${ps(g,n,p.get(g.id))}</span>
|
|
267
267
|
<span class="cat-deduction-rationale">${u(g.rationale)}</span>
|
|
268
268
|
</div>`,h=i?i.unnecessaryIds.map(g=>`<a class="interaction-link" data-interaction-id="${g}" title="Jump to this interaction in the transcript">#${g}</a>`).join(", "):"",m=i?`<div class="cat-deduction-item necessity-row">
|
|
269
269
|
<span class="cat-deduction-id">Necessity</span>
|
|
@@ -272,22 +272,22 @@ Please report this to https://github.com/markedjs/marked.`,e){let n="<p>An error
|
|
|
272
272
|
</div>`:"",f=c.map(d).join(""),w=l.map(d).join(""),A=l.length?`
|
|
273
273
|
<button class="audits-toggle">Show ${l.length} other passing interaction${l.length!==1?"s":""}</button>
|
|
274
274
|
<div class="audits-list">${w}</div>`:"",E=!!m||f.length>0||l.length>0;return`
|
|
275
|
-
<div class="dimensions-grid">${e.map(g=>
|
|
275
|
+
<div class="dimensions-grid">${e.map(g=>Ae(g.label,g.value)).join("")}</div>
|
|
276
276
|
${E?`<div class="deductions-summary">
|
|
277
277
|
<div class="deductions-header">Score breakdown</div>
|
|
278
278
|
${m}
|
|
279
279
|
${f}
|
|
280
280
|
${A}
|
|
281
|
-
</div>`:""}`}function
|
|
281
|
+
</div>`:""}`}function ps(e,t,s){return[{label:"Success",value:e.success},{label:"Speed",value:e.speed},...t?[{label:"Relevance",value:e.contextRelevance}]:[]].filter(r=>r.value<1).map(r=>r.label==="Speed"?hs(r.value,s):`<span class="dim-score-tag">${r.label}: ${Ge(r.value)}</span>`).join("")}function hs(e,t){const s=t?fs(t):"";return`<span class="${s?"dim-score-tag speed-tag":"dim-score-tag"}">Speed: ${Ge(e)}${s}</span>`}function fs(e){const t=jt(e.categories),s=Nt(t),n=Dt(e.durationMs,t),r=e.durationMs!==null&&e.durationMs>0?$(e.durationMs):"no timing data",i=s.map((a,o)=>{const c=o===n,l=Ot(a,o>0?s[o-1]:void 0);return`<span class="speed-tooltip-row${c?" speed-tooltip-row-active":""}">
|
|
282
282
|
<span class="speed-tooltip-range">${u(l)}</span>
|
|
283
283
|
<span class="speed-tooltip-score">${a.score}</span>
|
|
284
284
|
</span>`}).join("");return`<span class="speed-tooltip" role="tooltip">
|
|
285
285
|
<span class="speed-tooltip-header">
|
|
286
|
-
<strong>${u(
|
|
286
|
+
<strong>${u(Ht(t))} speed</strong>
|
|
287
287
|
<span class="speed-tooltip-actual">${u(r)}</span>
|
|
288
288
|
</span>
|
|
289
289
|
<span class="speed-tooltip-tiers">${i}</span>
|
|
290
|
-
</span>`}function
|
|
290
|
+
</span>`}function Ge(e){return(e*100).toFixed(0)}const X=30;function gs(e,t){const{interactions:s}=e;if(!s.some(d=>d.startMs!==null)||s.length===0)return"";const r=t>0?t:e.stats.wallClockMs||xs(s);if(r<=0)return"";const i=ws(r),a=s.length>X,o=a?s.slice(0,X):s,c=a?s.slice(X):[],l=e.stats.startupMs&&e.stats.startupMs>0?Te("agent startup",0,e.stats.startupMs,r):"",p=e.stats.shutdownMs&&e.stats.shutdownMs>0?Te("agent shutdown",r-e.stats.shutdownMs,e.stats.shutdownMs,r):"";return`
|
|
291
291
|
<div class="detail-section">
|
|
292
292
|
<div class="section-header">
|
|
293
293
|
<h3>Timeline</h3>
|
|
@@ -305,8 +305,8 @@ Please report this to https://github.com/markedjs/marked.`,e){let n="<p>An error
|
|
|
305
305
|
</div>
|
|
306
306
|
<div class="waterfall-body">
|
|
307
307
|
${l}
|
|
308
|
-
${o.map(d=>
|
|
309
|
-
${a?`<div class="wf-overflow" style="display:none">${c.map(d=>
|
|
308
|
+
${o.map(d=>Ee(d,r)).join("")}
|
|
309
|
+
${a?`<div class="wf-overflow" style="display:none">${c.map(d=>Ee(d,r)).join("")}${p}</div>`:p}
|
|
310
310
|
</div>
|
|
311
311
|
${a?`<button class="wf-show-all">Show all ${s.length} interactions</button>`:""}
|
|
312
312
|
<div class="wf-legend">
|
|
@@ -315,7 +315,7 @@ Please report this to https://github.com/markedjs/marked.`,e){let n="<p>An error
|
|
|
315
315
|
<span class="wf-legend-item"><span class="wf-legend-dot wf-agent"></span>Agent</span>
|
|
316
316
|
</div>
|
|
317
317
|
</div>
|
|
318
|
-
</div>`}function
|
|
318
|
+
</div>`}function Ee(e,t){const s=e.startMs??0,n=e.durationMs??0,r=s/t*100,i=Math.max(.4,n/t*100),a=bs(e),o=e.hasError?" wf-bar-error":"",c=e.toolName??"thinking",l=e.categories.includes("environment")?"env":e.categories.includes("service")?"svc":"agent";return`
|
|
319
319
|
<div class="wf-row ${a}">
|
|
320
320
|
<div class="wf-label-col">
|
|
321
321
|
<a class="wf-id interaction-link" data-interaction-id="${e.id}" title="Jump to this interaction in the transcript">#${e.id}</a>
|
|
@@ -325,12 +325,12 @@ Please report this to https://github.com/markedjs/marked.`,e){let n="<p>An error
|
|
|
325
325
|
<div class="wf-timeline-col">
|
|
326
326
|
<div class="wf-track">
|
|
327
327
|
<div class="wf-bar${o}${r>60?" wf-tip-right":""}" style="left:${r.toFixed(2)}%;width:${i.toFixed(2)}%">
|
|
328
|
-
${
|
|
328
|
+
${ms(e,c,l)}
|
|
329
329
|
</div>
|
|
330
330
|
</div>
|
|
331
331
|
</div>
|
|
332
332
|
<div class="wf-dur-col">${e.durationMs!==null?$(e.durationMs):"—"}</div>
|
|
333
|
-
</div>`}function
|
|
333
|
+
</div>`}function ms(e,t,s){const n=[];e.durationMs!==null&&n.push(`<span><strong>Duration</strong> ${u($(e.durationMs))}</span>`),n.push(`<span><strong>Context</strong> ${u(vs(e.contextBytes))}</span>`),e.startMs!==null&&n.push(`<span><strong>Start</strong> +${u($(e.startMs))}</span>`),e.hasError&&n.push('<span class="wf-tooltip-error">Error</span>');const r=e.content?ks(e.content,280):"";return`
|
|
334
334
|
<div class="wf-tooltip">
|
|
335
335
|
<div class="wf-tooltip-header">
|
|
336
336
|
<span class="wf-tooltip-id">#${e.id}</span>
|
|
@@ -339,7 +339,7 @@ Please report this to https://github.com/markedjs/marked.`,e){let n="<p>An error
|
|
|
339
339
|
</div>
|
|
340
340
|
<div class="wf-tooltip-meta">${n.join("")}</div>
|
|
341
341
|
${r?`<pre class="wf-tooltip-snippet">${u(r)}</pre>`:""}
|
|
342
|
-
</div>`}function
|
|
342
|
+
</div>`}function ks(e,t){const s=e.trim();return s.length<=t?s:s.slice(0,t-1)+"…"}function Te(e,t,s,n){const r=t/n*100,i=Math.max(.4,s/n*100),a=`${e} — ${$(s)}`;return`
|
|
343
343
|
<div class="wf-row wf-lifecycle">
|
|
344
344
|
<div class="wf-label-col">
|
|
345
345
|
<span class="wf-id">—</span>
|
|
@@ -352,7 +352,7 @@ Please report this to https://github.com/markedjs/marked.`,e){let n="<p>An error
|
|
|
352
352
|
</div>
|
|
353
353
|
</div>
|
|
354
354
|
<div class="wf-dur-col">${$(s)}</div>
|
|
355
|
-
</div>`}function
|
|
355
|
+
</div>`}function bs(e){return e.categories.includes("environment")?"wf-env":e.categories.includes("service")?"wf-svc":"wf-agent"}function vs(e){return e<1024?`${e}B`:`${(e/1024).toFixed(1)}KB`}function xs(e){let t=0;for(const s of e)if(s.startMs!==null){const n=s.startMs+(s.durationMs??0);n>t&&(t=n)}return t}function ws(e){const t=[50,100,200,250,500,1e3,2e3,2500,5e3,1e4,15e3,3e4,6e4,12e4,3e5];let s=t[t.length-1];for(const r of t){const i=Math.floor(e/r);if(i>=3&&i<=8){s=r;break}}const n=[];for(let r=0;r<=e;r+=s)n.push({pct:r/e*100,label:$(r)});return n.length===0&&n.push({pct:0,label:"0s"}),n}function $s(e){const t=e.interactions.some(r=>r.content),s=e.lines.map((r,i)=>{const a=e.interactions[i];let o="cat-agent";a?a.categories.includes("environment")?o="cat-env":a.categories.includes("service")&&(o="cat-svc"):r.includes(" env ")?o="cat-env":(r.includes(" service ")||r.includes(" svc "))&&(o="cat-svc");const c=a?.content?" sparse-line-expandable":"",l=a?.content?`<div class="sparse-line-content"><pre>${u(a.content)}</pre></div>`:"",p=a?` data-interaction-id="${a.id}"`:"";return`<div class="sparse-line ${o}${c}"${p}>${u(r)}${l}</div>`}).join("");return`
|
|
356
356
|
<div class="detail-section">
|
|
357
357
|
<div class="section-header">
|
|
358
358
|
<h3>Transcript of agent interactions<button class="info-btn" data-tooltip="${u("A condensed, ordered log of every tool call, model response, and decision the agent made during this run, classified as Environment, Service, or Agent. Each numbered line corresponds to the Interaction #N references in the score breakdowns above.")}" aria-label="What is this?" type="button">ℹ</button></h3>
|
|
@@ -363,7 +363,7 @@ Please report this to https://github.com/markedjs/marked.`,e){let n="<p>An error
|
|
|
363
363
|
${t?'<button class="sparse-expand-all">Expand all</button>':""}
|
|
364
364
|
<div class="sparse-index-content">${s}</div>
|
|
365
365
|
</div>
|
|
366
|
-
</div>`}function
|
|
366
|
+
</div>`}function ys(e){const t=e.map((n,r)=>!n.prompt&&!n.agentConfig&&!n.resolvedConfig?"":Ss(n,r)).join(""),s=e.map((n,r)=>n.error?zs(n,r):"").join("");return t+s}function Ss(e,t){const s=G(e.scenarioKey),n=He(e.scenarioKey),r=Ze(e.scenarioName),i=e.resolvedConfig;return`
|
|
367
367
|
<div class="modal-backdrop" data-modal-index="${t}">
|
|
368
368
|
<div class="modal">
|
|
369
369
|
<div class="modal-header">
|
|
@@ -375,17 +375,18 @@ Please report this to https://github.com/markedjs/marked.`,e){let n="<p>An error
|
|
|
375
375
|
<button class="modal-close">×</button>
|
|
376
376
|
</div>
|
|
377
377
|
<div class="modal-body">
|
|
378
|
-
${e.agentConfig?
|
|
379
|
-
${i?
|
|
380
|
-
${i?.skills?.length?
|
|
381
|
-
${i?.mcpServers&&Object.keys(i.mcpServers).length?
|
|
382
|
-
${e.prompt?
|
|
383
|
-
${e.judge??e.rubric?
|
|
384
|
-
${
|
|
385
|
-
${i?.
|
|
378
|
+
${e.agentConfig?As(e.agentConfig,e.agentName):""}
|
|
379
|
+
${i?Rs(i.limits):""}
|
|
380
|
+
${i?.skills?.length?Es(i.skills):""}
|
|
381
|
+
${i?.mcpServers&&Object.keys(i.mcpServers).length?Ts(i.mcpServers):""}
|
|
382
|
+
${e.prompt?Ls(e.prompt):""}
|
|
383
|
+
${e.judge??e.rubric?Is(e.judge??e.rubric):""}
|
|
384
|
+
${e.score?.judging?Cs(e.score.judging):""}
|
|
385
|
+
${i?.setup?.length?Le("Setup",i.setup):""}
|
|
386
|
+
${i?.teardown?.length?Le("Teardown",i.teardown):""}
|
|
386
387
|
</div>
|
|
387
388
|
</div>
|
|
388
|
-
</div>`}function
|
|
389
|
+
</div>`}function As(e,t){const s=[],n=(r,i)=>{s.push(`
|
|
389
390
|
<tr>
|
|
390
391
|
<td class="modal-config-label">${u(r)}</td>
|
|
391
392
|
<td><code>${u(i)}</code></td>
|
|
@@ -393,15 +394,15 @@ Please report this to https://github.com/markedjs/marked.`,e){let n="<p>An error
|
|
|
393
394
|
<div class="modal-section">
|
|
394
395
|
<h4>Agent: <code class="modal-section-value">${u(t)}</code></h4>
|
|
395
396
|
${s.length>0?`<table class="modal-config-table"><tbody>${s.join("")}</tbody></table>`:""}
|
|
396
|
-
</div>`}function
|
|
397
|
+
</div>`}function Rs(e){if(!e)return"";const t=[];if(e.time_minutes!==void 0){const s=e.time_minutes;t.push(`<code>${Number.isInteger(s)?s:s.toFixed(1)} min</code> wall-clock`)}return e.tokens!==void 0&&t.push(`<code>${e.tokens.toLocaleString()}</code> tokens`),t.length===0?"":`
|
|
397
398
|
<div class="modal-section">
|
|
398
399
|
<h4>Limits</h4>
|
|
399
400
|
<p class="modal-config-line">${t.join(" · ")}</p>
|
|
400
|
-
</div>`}function
|
|
401
|
+
</div>`}function Es(e){return`
|
|
401
402
|
<div class="modal-section">
|
|
402
403
|
<h4>Skills</h4>
|
|
403
404
|
<ul class="modal-config-list">${e.map(s=>`<li><code>${u(s)}</code></li>`).join("")}</ul>
|
|
404
|
-
</div>`}function
|
|
405
|
+
</div>`}function Le(e,t){const s=t.map(n=>{const r=n.action==="copy"?`<code>${u(n.match)}</code> → <code>${u(n.destination)}</code>`:`<code>${u(n.command)}</code>`;return`
|
|
405
406
|
<li>
|
|
406
407
|
<span class="modal-config-label-inline">${u(n.action)}</span>
|
|
407
408
|
${r}
|
|
@@ -409,15 +410,19 @@ Please report this to https://github.com/markedjs/marked.`,e){let n="<p>An error
|
|
|
409
410
|
<div class="modal-section">
|
|
410
411
|
<h4>${u(e)}</h4>
|
|
411
412
|
<ul class="modal-config-list">${s}</ul>
|
|
412
|
-
</div>`}function
|
|
413
|
+
</div>`}function Ts(e){return`
|
|
413
414
|
<div class="modal-section">
|
|
414
415
|
<h4>MCP servers</h4>
|
|
415
416
|
<ul class="modal-config-list">${Object.entries(e).map(([s,n])=>{const r="url"in n&&n.url?`<code>${u(n.url)}</code>`:"command"in n&&n.command?`<code>${u([n.command,...n.args??[]].join(" "))}</code>`:"";return`<li><span class="modal-config-label-inline">${u(s)}</span> ${r}</li>`}).join("")}</ul>
|
|
416
|
-
</div>`}function
|
|
417
|
+
</div>`}function Ls(e){return`
|
|
417
418
|
<div class="modal-section">
|
|
418
419
|
<h4>Prompt</h4>
|
|
419
420
|
<pre class="modal-prompt">${u(e)}</pre>
|
|
420
|
-
</div>`}function
|
|
421
|
+
</div>`}function Cs(e){if(!e)return"";const t=e.model?`${e.agent}|${e.model}`:e.agent;return`
|
|
422
|
+
<div class="modal-section">
|
|
423
|
+
<h4>Agent used for judging:</h4>
|
|
424
|
+
<p class="modal-judge-agent"><code>${u(t)}</code></p>
|
|
425
|
+
</div>`}function Is(e){return typeof e=="string"?`
|
|
421
426
|
<div class="modal-section">
|
|
422
427
|
<h4>Judge</h4>
|
|
423
428
|
<pre class="modal-prompt">${u(e)}</pre>
|
|
@@ -432,12 +437,12 @@ Please report this to https://github.com/markedjs/marked.`,e){let n="<p>An error
|
|
|
432
437
|
<td class="modal-judge-weight">${Math.round((s.weight??0)*100)}%</td>
|
|
433
438
|
</tr>`).join("")}</tbody>
|
|
434
439
|
</table>
|
|
435
|
-
</div>`}function
|
|
440
|
+
</div>`}function zs(e,t){return`
|
|
436
441
|
<div class="modal-backdrop" data-error-index="${t}">
|
|
437
442
|
<div class="modal">
|
|
438
443
|
<div class="modal-header">
|
|
439
444
|
<div>
|
|
440
|
-
<h3>${u(
|
|
445
|
+
<h3>${u(re(e))}</h3>
|
|
441
446
|
<span class="modal-subtitle">${u(e.scenarioName)}</span>
|
|
442
447
|
</div>
|
|
443
448
|
<button class="modal-close">×</button>
|
|
@@ -449,15 +454,15 @@ Please report this to https://github.com/markedjs/marked.`,e){let n="<p>An error
|
|
|
449
454
|
</div>
|
|
450
455
|
</div>
|
|
451
456
|
</div>
|
|
452
|
-
</div>`}const
|
|
457
|
+
</div>`}const Ps=[[/quota|rate.?limit|429|too many requests/i,"Rate limit / quota exceeded"],[/auth|unauthorized|401|403|api.?key|token/i,"Authentication error"],[/timeout|timed?\s*out|ETIMEDOUT/i,"Timeout"],[/ECONNREFUSED|ENOTFOUND|network|socket/i,"Network error"],[/not found|command not found|ENOENT/i,"CLI not found"],[/spawn|EPERM|EACCES/i,"Permission error"]];function Ms(e){for(const[t,s]of Ps)if(t.test(e))return s;return e.length>80?e.slice(0,77)+"...":e}function qs(e){return e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:e<1024*1024*1024?`${(e/(1024*1024)).toFixed(1)} MB`:`${(e/(1024*1024*1024)).toFixed(2)} GB`}function Bs(e){const t={type:"dir",name:"",children:[]};for(let n=0;n<e.length;n++){const r=e[n].path.split("/").filter(Boolean);let i=t;for(let a=0;a<r.length-1;a++){const o=r[a];let c=i.children.find(l=>l.type==="dir"&&l.name===o);c||(c={type:"dir",name:o,children:[]},i.children.push(c)),i=c}i.children.push({type:"file",name:r[r.length-1],size:e[n].size,mimeType:e[n].mimeType,artifactIndex:n})}const s=n=>{n.children.sort((r,i)=>r.type!==i.type?r.type==="dir"?-1:1:r.name.localeCompare(i.name));for(const r of n.children)r.type==="dir"&&s(r)};return s(t),t}const Us='<svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"/><circle cx="12" cy="12" r="3"/></svg>',Qe='<svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 4v12m0 0l-5-5m5 5l5-5M5 20h14"/></svg>';function We(e,t){const s=`padding-left:${8+t*16}px;`;if(e.type==="file"){const r=u(e.name);return`
|
|
453
458
|
<li class="art-tree-file">
|
|
454
459
|
<div class="art-tree-row" style="${s}">
|
|
455
460
|
<span class="art-tree-name" title="${r}">${r}</span>
|
|
456
|
-
<span class="art-tree-size">${
|
|
457
|
-
<button class="art-tree-eye" data-artifact-index="${e.artifactIndex}" type="button" aria-label="Preview ${r}" title="Preview">${
|
|
458
|
-
<button class="art-tree-download" data-artifact-index="${e.artifactIndex}" type="button" aria-label="Download ${r}" title="Download">${
|
|
461
|
+
<span class="art-tree-size">${qs(e.size)}</span>
|
|
462
|
+
<button class="art-tree-eye" data-artifact-index="${e.artifactIndex}" type="button" aria-label="Preview ${r}" title="Preview">${Us}</button>
|
|
463
|
+
<button class="art-tree-download" data-artifact-index="${e.artifactIndex}" type="button" aria-label="Download ${r}" title="Download">${Qe}</button>
|
|
459
464
|
</div>
|
|
460
|
-
</li>`}const n=e.children.map(r=>
|
|
465
|
+
</li>`}const n=e.children.map(r=>We(r,t+1)).join("");return`
|
|
461
466
|
<li class="art-tree-dir collapsed">
|
|
462
467
|
<button class="art-tree-folder-toggle" type="button" style="${s}" aria-expanded="false">
|
|
463
468
|
<span class="art-tree-chevron" aria-hidden="true">▸</span>
|
|
@@ -465,7 +470,7 @@ Please report this to https://github.com/markedjs/marked.`,e){let n="<p>An error
|
|
|
465
470
|
<span class="art-tree-name">${u(e.name)}</span>
|
|
466
471
|
</button>
|
|
467
472
|
<ul class="art-tree-children">${n}</ul>
|
|
468
|
-
</li>`}function
|
|
473
|
+
</li>`}function _s(e){return`
|
|
469
474
|
<div class="modal-backdrop artifact-modal" data-artifact-modal-key="${e}">
|
|
470
475
|
<div class="modal artifact-modal-content">
|
|
471
476
|
<div class="modal-header">
|
|
@@ -477,12 +482,12 @@ Please report this to https://github.com/markedjs/marked.`,e){let n="<p>An error
|
|
|
477
482
|
</div>
|
|
478
483
|
<div class="modal-body">
|
|
479
484
|
<div class="artifact-modal-toolbar">
|
|
480
|
-
<button class="artifact-modal-download" type="button" data-artifacts-key="${e}">${
|
|
485
|
+
<button class="artifact-modal-download" type="button" data-artifacts-key="${e}">${Qe}<span>Download</span></button>
|
|
481
486
|
</div>
|
|
482
487
|
<div class="artifact-modal-preview" data-artifacts-key="${e}"></div>
|
|
483
488
|
</div>
|
|
484
489
|
</div>
|
|
485
|
-
</div>`}function
|
|
490
|
+
</div>`}function js(e,t){const n=Bs(e).children.map(i=>We(i,0)).join(""),r=JSON.stringify(e).replace(/</g,"\\u003c").replace(/>/g,"\\u003e");return`
|
|
486
491
|
<div class="detail-section artifacts-section" data-artifacts-key="${t}">
|
|
487
492
|
<div class="section-header">
|
|
488
493
|
<h3>Artifacts <span class="artifacts-count">(${e.length})</span></h3>
|
|
@@ -493,9 +498,9 @@ Please report this to https://github.com/markedjs/marked.`,e){let n="<p>An error
|
|
|
493
498
|
</div>
|
|
494
499
|
<ul class="art-tree-root" data-artifacts-key="${t}" hidden>${n}</ul>
|
|
495
500
|
<script type="application/json" class="artifacts-data" data-artifacts-key="${t}">${r}<\/script>
|
|
496
|
-
${
|
|
497
|
-
</div>`}function
|
|
501
|
+
${_s(t)}
|
|
502
|
+
</div>`}function Ce(){const e=document.querySelector(".results-table thead tr");if(!e)return;const t=Array.from(e.cells).filter(s=>s.offsetParent!==null||s.getClientRects().length>0).length;t!==0&&document.querySelectorAll(".detail-row > td[colspan]").forEach(s=>{s.colSpan=t})}function Ns(){Ce(),window.addEventListener("resize",Ce),document.querySelectorAll(".scenario-header-row").forEach(e=>{e.addEventListener("click",t=>{if(t.target.closest(".info-btn"))return;const s=e.dataset.scenario;if(!s)return;const n=e.classList.contains("expanded"),r=document.querySelectorAll(`.agent-row[data-scenario="${s}"]`),i=document.querySelectorAll(`.detail-row[data-scenario="${s}"]`);n?(e.classList.remove("expanded"),r.forEach(a=>a.classList.add("scenario-collapsed")),i.forEach(a=>{a.classList.remove("visible"),a.classList.add("scenario-collapsed");const o=a.id.replace("detail-","");document.querySelector(`.result-row[data-index="${o}"]`)?.classList.remove("expanded")})):(e.classList.add("expanded"),r.forEach(a=>a.classList.remove("scenario-collapsed")),i.forEach(a=>a.classList.remove("scenario-collapsed")))})}),document.querySelectorAll(".result-row").forEach(e=>{e.addEventListener("click",()=>{if(e.classList.contains("scenario-collapsed"))return;const t=e.dataset.index;if(t===void 0)return;const s=document.getElementById(`detail-${t}`);if(!s)return;const n=e.classList.contains("expanded");document.querySelectorAll(".result-row").forEach(r=>{r.classList.remove("expanded")}),document.querySelectorAll(".detail-row").forEach(r=>{r.classList.remove("visible")}),n||(e.classList.add("expanded"),s.classList.add("visible"))})}),document.querySelectorAll(".audits-toggle").forEach(e=>{e.addEventListener("click",t=>{t.stopPropagation();const s=e.nextElementSibling?.classList.contains("audits-list")?e.nextElementSibling:e.parentElement?.querySelector(".audits-list")??null;if(!s)return;const n=s.classList.contains("visible");s.classList.toggle("visible"),e.textContent=n?e.textContent.replace("Hide","Show"):e.textContent.replace("Show","Hide")})}),document.querySelectorAll(".wf-show-all").forEach(e=>{e.addEventListener("click",t=>{t.stopPropagation();const s=e.closest(".waterfall");if(!s)return;const n=s.querySelector(".wf-overflow");n&&(n.style.display="block",e.style.display="none")})}),document.querySelectorAll(".info-btn").forEach(e=>{e.addEventListener("click",t=>{t.stopPropagation();const s=e.dataset.modalIndex;if(s===void 0)return;const n=document.querySelector(`.modal-backdrop[data-modal-index="${s}"]`);n&&n.classList.add("visible")})}),document.querySelectorAll(".error-btn").forEach(e=>{e.addEventListener("click",t=>{t.stopPropagation();const s=e.dataset.errorIndex;if(s===void 0)return;const n=document.querySelector(`.modal-backdrop[data-error-index="${s}"]`);n&&n.classList.add("visible")})}),document.querySelectorAll(".modal-backdrop").forEach(e=>{e.addEventListener("click",s=>{s.target===e&&e.classList.remove("visible")});const t=e.querySelector(".modal-close");t&&t.addEventListener("click",()=>e.classList.remove("visible"))}),document.addEventListener("keydown",e=>{e.key==="Escape"&&document.querySelectorAll(".modal-backdrop.visible").forEach(t=>t.classList.remove("visible"))}),document.querySelectorAll(".interaction-link[data-interaction-id]").forEach(e=>{e.addEventListener("click",t=>{t.stopPropagation(),t.preventDefault();const s=e.dataset.interactionId;if(!s)return;const n=e.closest(".detail-panel");if(!n)return;const r=n.querySelector(`.sparse-line[data-interaction-id="${CSS.escape(s)}"]`);if(!r)return;const i=n.querySelector(".sparse-index-content"),a=n.querySelector(".sparse-index-toggle");i&&!i.classList.contains("visible")&&(i.classList.add("visible"),a&&(a.textContent="Hide transcript")),r.scrollIntoView({behavior:"smooth",block:"center"}),r.classList.remove("interaction-flash"),r.offsetWidth,r.classList.add("interaction-flash")})}),document.querySelectorAll(".sparse-index-toggle").forEach(e=>{e.addEventListener("click",t=>{t.stopPropagation();const s=e.closest(".sparse-index-section");if(!s)return;const n=s.querySelector(".sparse-index-content");if(!n)return;const r=n.classList.contains("visible");n.classList.toggle("visible"),e.textContent=r?"Show transcript":"Hide transcript"})}),document.querySelectorAll(".sparse-line-expandable").forEach(e=>{e.addEventListener("click",t=>{t.stopPropagation(),!t.target.closest(".sparse-line-content")&&((window.getSelection()?.toString().length??0)>0||e.classList.toggle("expanded"))})}),document.querySelectorAll(".sparse-expand-all").forEach(e=>{e.addEventListener("click",t=>{t.stopPropagation();const s=e.closest(".sparse-index-section");if(!s)return;const n=s.querySelectorAll(".sparse-line-expandable"),r=Array.from(n).every(i=>i.classList.contains("expanded"));n.forEach(i=>{r?i.classList.remove("expanded"):i.classList.add("expanded")}),e.textContent=r?"Expand all":"Collapse all"})}),Ks()}function O(e){const t=document.querySelector(`script.artifacts-data[data-artifacts-key="${CSS.escape(e)}"]`);if(!t?.textContent)return null;try{return JSON.parse(t.textContent)}catch{return null}}function ge(e){const t=atob(e),s=new Uint8Array(t.length);for(let n=0;n<t.length;n++)s[n]=t.charCodeAt(n);return s}function Je(e,t){const s=URL.createObjectURL(e),n=document.createElement("a");n.href=s,n.download=t,document.body.appendChild(n),n.click(),n.remove(),setTimeout(()=>URL.revokeObjectURL(s),0)}function Ds(e){const t=e.lastIndexOf("/");return t===-1?e:e.slice(t+1)}function Y(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}function Os(e){return e.startsWith("text/")?!0:e==="application/json"||e==="application/x-ndjson"||e==="application/yaml"||e==="application/xml"||e==="application/sql"||e==="application/toml"}function Fs(e){return e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:e<1024*1024*1024?`${(e/(1024*1024)).toFixed(1)} MB`:`${(e/(1024*1024*1024)).toFixed(2)} GB`}function Ie(e){const t=ge(e.content),s=new Blob([new Uint8Array(t)],{type:e.mimeType});Je(s,Ds(e.path))}function Hs(e,t){const s=ge(e.content);if(e.mimeType.startsWith("image/")){const n=new Blob([new Uint8Array(s)],{type:e.mimeType}),r=URL.createObjectURL(n);t.innerHTML=`<img class="artifact-image" alt="${Y(e.path)}" src="${r}" />`;return}if(Os(e.mimeType)){let n;try{n=new TextDecoder("utf-8",{fatal:!1}).decode(s)}catch{n=""}t.innerHTML=`<pre class="artifact-text">${Y(n)}</pre>`;return}t.innerHTML=`
|
|
498
503
|
<div class="artifact-not-previewable">
|
|
499
504
|
<p>This file type can’t be previewed inline.</p>
|
|
500
|
-
<p class="artifact-not-previewable-meta">${
|
|
501
|
-
</div>`}function
|
|
505
|
+
<p class="artifact-not-previewable-meta">${Y(e.mimeType)}</p>
|
|
506
|
+
</div>`}function Zs(e,t,s){const n=O(t);if(!n||!n[s])return;const r=n[s],i=e.querySelector(`.artifact-modal[data-artifact-modal-key="${CSS.escape(t)}"]`);if(!i)return;const a=i.querySelector(".artifact-modal-title"),o=i.querySelector(".artifact-modal-meta"),c=i.querySelector(".artifact-modal-preview"),l=i.querySelector(".artifact-modal-download");!a||!o||!c||(a.textContent=r.path,o.textContent=`${r.mimeType} · ${Fs(r.size)}`,Hs(r,c),l&&(l.dataset.artifactIndex=String(s)),i.classList.add("visible"))}function Ks(){document.querySelectorAll(".artifacts-toggle").forEach(e=>{e.addEventListener("click",t=>{t.stopPropagation();const s=e.dataset.artifactsKey;if(!s)return;const n=document.querySelector(`.art-tree-root[data-artifacts-key="${CSS.escape(s)}"]`);if(!n)return;const r=n.hidden;n.hidden=!r,e.textContent=r?"Hide artifacts":"Show artifacts",e.setAttribute("aria-expanded",r?"true":"false")})}),document.querySelectorAll(".art-tree-folder-toggle").forEach(e=>{e.addEventListener("click",t=>{t.stopPropagation();const s=e.closest(".art-tree-dir");if(!s)return;const n=s.classList.toggle("collapsed");e.setAttribute("aria-expanded",n?"false":"true")})}),document.querySelectorAll(".art-tree-eye").forEach(e=>{e.addEventListener("click",t=>{t.stopPropagation();const s=e.closest(".artifacts-section");if(!s)return;const n=s.dataset.artifactsKey;if(!n)return;const r=e.dataset.artifactIndex;r!==void 0&&Zs(s,n,Number(r))})}),document.querySelectorAll(".art-tree-download").forEach(e=>{e.addEventListener("click",t=>{t.stopPropagation();const s=e.closest(".artifacts-section");if(!s)return;const n=s.dataset.artifactsKey;if(!n)return;const r=e.dataset.artifactIndex;if(r===void 0)return;const i=O(n);if(!i)return;const a=i[Number(r)];a&&Ie(a)})}),document.querySelectorAll(".artifact-modal-download").forEach(e=>{e.addEventListener("click",t=>{t.stopPropagation();const s=e.dataset.artifactsKey,n=e.dataset.artifactIndex;if(!s||n===void 0)return;const r=O(s);if(!r)return;const i=r[Number(n)];i&&Ie(i)})}),document.querySelectorAll(".artifacts-download-all").forEach(e=>{e.addEventListener("click",t=>{t.stopPropagation();const s=e.dataset.artifactsKey;if(!s)return;const n=O(s);if(!n||n.length===0)return;const r=n.map(o=>({path:o.path,bytes:ge(o.content)})),i=Gs(r),a=new Blob([new Uint8Array(i)],{type:"application/zip"});Je(a,`artifacts-${s}.zip`)})})}function Gs(e){const t=new TextEncoder,s=[],n=[];let r=0;const i=Js(new Date);for(const m of e){const f=t.encode(m.path),w=Ws(m.bytes),A=m.bytes.length,E=new Uint8Array(30+f.length),g=new DataView(E.buffer);g.setUint32(0,67324752,!0),g.setUint16(4,20,!0),g.setUint16(6,0,!0),g.setUint16(8,0,!0),g.setUint16(10,i.time,!0),g.setUint16(12,i.date,!0),g.setUint32(14,w,!0),g.setUint32(18,A,!0),g.setUint32(22,A,!0),g.setUint16(26,f.length,!0),g.setUint16(28,0,!0),E.set(f,30),s.push(E,m.bytes);const q=new Uint8Array(46+f.length),v=new DataView(q.buffer);v.setUint32(0,33639248,!0),v.setUint16(4,20,!0),v.setUint16(6,20,!0),v.setUint16(8,0,!0),v.setUint16(10,0,!0),v.setUint16(12,i.time,!0),v.setUint16(14,i.date,!0),v.setUint32(16,w,!0),v.setUint32(20,A,!0),v.setUint32(24,A,!0),v.setUint16(28,f.length,!0),v.setUint16(30,0,!0),v.setUint16(32,0,!0),v.setUint16(34,0,!0),v.setUint16(36,0,!0),v.setUint32(38,0,!0),v.setUint32(42,r,!0),q.set(f,46),n.push(q),r+=E.length+A}const a=r;let o=0;for(const m of n)o+=m.length;const c=new Uint8Array(22),l=new DataView(c.buffer);l.setUint32(0,101010256,!0),l.setUint16(4,0,!0),l.setUint16(6,0,!0),l.setUint16(8,e.length,!0),l.setUint16(10,e.length,!0),l.setUint32(12,o,!0),l.setUint32(16,a,!0),l.setUint16(20,0,!0);const p=a+o+c.length,d=new Uint8Array(p);let h=0;for(const m of s)d.set(m,h),h+=m.length;for(const m of n)d.set(m,h),h+=m.length;return d.set(c,h),d}const Qs=(()=>{const e=new Uint32Array(256);for(let t=0;t<256;t++){let s=t;for(let n=0;n<8;n++)s=s&1?3988292384^s>>>1:s>>>1;e[t]=s>>>0}return e})();function Ws(e){let t=4294967295;for(let s=0;s<e.length;s++)t=Qs[(t^e[s])&255]^t>>>8;return(t^4294967295)>>>0}function Js(e){const t=(e.getHours()&31)<<11|(e.getMinutes()&63)<<5|e.getSeconds()/2&31,s=(e.getFullYear()-1980&127)<<9|(e.getMonth()+1&15)<<5|e.getDate()&31;return{time:t,date:s}}function ze(e){const t=document.getElementById("app");t&&(t.innerHTML=Jt(e),document.title=`AXIS Report — ${u(e.reportId)}`,Ns())}const Vs=document.getElementById("axis-data"),ee=Vs?.textContent?.trim();if(ee&&ee!=="__AXIS_REPORT_DATA__")try{ze(JSON.parse(ee))}catch{const t=document.getElementById("app");t&&(t.innerHTML='<div class="error-banner">Failed to parse report data.</div>')}else fetch("/mock-data.json").then(e=>e.json()).then(e=>ze(e)).catch(e=>{const t=document.getElementById("app");t&&(t.innerHTML=`<div class="error-banner">Failed to load mock data: ${e.message}</div>`)});</script> </body> </html>
|