@iowarp/clio-coder 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +407 -0
- package/CODE_OF_CONDUCT.md +21 -0
- package/CONTRIBUTING.md +224 -0
- package/LICENSE +202 -0
- package/NOTICE +9 -0
- package/README.md +798 -0
- package/SECURITY.md +72 -0
- package/assets/clio-coder-logo-128.webp +0 -0
- package/damage-control-rules.yaml +419 -0
- package/dist/acp-UMLFVA3F.js +92 -0
- package/dist/agents-Q4MYPMUW.js +91 -0
- package/dist/auth-O6HYIJ6J.js +521 -0
- package/dist/chunk-262G75JS.js +35 -0
- package/dist/chunk-26BZQOAD.js +1281 -0
- package/dist/chunk-2J63S4SF.js +508 -0
- package/dist/chunk-3DANZDGR.js +717 -0
- package/dist/chunk-4UQA7NCT.js +29 -0
- package/dist/chunk-527KG6XR.js +497 -0
- package/dist/chunk-5LDRNKX2.js +1063 -0
- package/dist/chunk-5N2FG33Q.js +25 -0
- package/dist/chunk-67MTHP2E.js +135 -0
- package/dist/chunk-6CWDTGUC.js +20 -0
- package/dist/chunk-7BHLZB3A.js +2115 -0
- package/dist/chunk-7RBKDI66.js +348 -0
- package/dist/chunk-AMFR5YA3.js +541 -0
- package/dist/chunk-BBUH4VAA.js +1224 -0
- package/dist/chunk-BYEU76JP.js +899 -0
- package/dist/chunk-CLJ5HLUD.js +458 -0
- package/dist/chunk-D5YD55AR.js +116 -0
- package/dist/chunk-DXQNI4PC.js +61 -0
- package/dist/chunk-E3NYWENM.js +1004 -0
- package/dist/chunk-GNGDQYDU.js +34688 -0
- package/dist/chunk-GOTUR54M.js +9 -0
- package/dist/chunk-HBU5MTAM.js +41 -0
- package/dist/chunk-HMYNFFY4.js +28 -0
- package/dist/chunk-JPOWPFCU.js +1010 -0
- package/dist/chunk-JWHCJDCI.js +1215 -0
- package/dist/chunk-KBR4MZZR.js +41 -0
- package/dist/chunk-KKKPTZLM.js +93 -0
- package/dist/chunk-ME6DNWIU.js +66 -0
- package/dist/chunk-NI4DEJMC.js +88 -0
- package/dist/chunk-O4EJEDHO.js +659 -0
- package/dist/chunk-PIDUD6M2.js +31 -0
- package/dist/chunk-PS4PFJQP.js +29459 -0
- package/dist/chunk-QV47YRF4.js +48 -0
- package/dist/chunk-RQDWMVRB.js +279 -0
- package/dist/chunk-TFSSEXL6.js +136 -0
- package/dist/chunk-TKHQ4DGZ.js +8290 -0
- package/dist/chunk-TPOCL34A.js +2876 -0
- package/dist/chunk-UGYAX5YI.js +565 -0
- package/dist/chunk-UHTSULZS.js +461 -0
- package/dist/chunk-UU3R62TT.js +128 -0
- package/dist/chunk-UWIJNAOB.js +3906 -0
- package/dist/chunk-VOO7NYPP.js +914 -0
- package/dist/chunk-VPAWTYLY.js +117 -0
- package/dist/chunk-WD6AJM35.js +1216 -0
- package/dist/chunk-X3BR7HWV.js +115 -0
- package/dist/chunk-X3NE4WVW.js +120 -0
- package/dist/chunk-XNISANGE.js +1395 -0
- package/dist/chunk-XV4ZJ6ZM.js +3177 -0
- package/dist/cli/index.js +236 -0
- package/dist/clio-KIQ5SNDS.js +53 -0
- package/dist/components-JVHMUBEB.js +653 -0
- package/dist/config-ZFCDBMDC.js +372 -0
- package/dist/configure-G4E3A2PG.js +27 -0
- package/dist/context-CDXTP2MP.js +293 -0
- package/dist/context-E3KIFVXI.js +185 -0
- package/dist/context-clear-3F4PLXOS.js +102 -0
- package/dist/context-index-Q7YSYTR3.js +106 -0
- package/dist/docs-YIETIWZI.js +280 -0
- package/dist/doctor-M5HJJZOL.js +61 -0
- package/dist/domains/agents/builtins/architect.md +33 -0
- package/dist/domains/agents/builtins/coder.md +31 -0
- package/dist/domains/agents/builtins/context-bootstrap.md +38 -0
- package/dist/domains/agents/builtins/debugger.md +30 -0
- package/dist/domains/agents/builtins/documenter.md +31 -0
- package/dist/domains/agents/builtins/git-master.md +30 -0
- package/dist/domains/agents/builtins/provenance.md +30 -0
- package/dist/domains/agents/builtins/researcher.md +71 -0
- package/dist/domains/agents/builtins/scout.md +42 -0
- package/dist/domains/agents/builtins/tester.md +31 -0
- package/dist/domains/agents/builtins/verifier.md +30 -0
- package/dist/domains/agents/builtins/wiki-writer.md +41 -0
- package/dist/eval-B3KZZESM.js +2674 -0
- package/dist/evidence-V67CHM35.js +233 -0
- package/dist/evolve-YDZSUQYA.js +518 -0
- package/dist/extensions-SRG7XCAH.js +207 -0
- package/dist/fleet-CA2CRTVG.js +760 -0
- package/dist/fleet-preflight-CLIAX7YR.js +21 -0
- package/dist/init-2OZDJE2D.js +227 -0
- package/dist/memory-3PIQQAKX.js +207 -0
- package/dist/models-DY35XI7Y.js +237 -0
- package/dist/paths-5OMXW7Z4.js +57 -0
- package/dist/preload-KZVHET2B.js +11 -0
- package/dist/reset-PIFYNOS3.js +216 -0
- package/dist/run-3VSPP24F.js +735 -0
- package/dist/share-D36RQCXM.js +241 -0
- package/dist/skills-F2MRLELY.js +445 -0
- package/dist/skills-eval-E2ZTW4PL.js +932 -0
- package/dist/targets-DZMEZAH4.js +977 -0
- package/dist/trace-7NYCUI2J.js +250 -0
- package/dist/uninstall-AD3JWHBB.js +322 -0
- package/dist/upgrade-WYYBKGDY.js +301 -0
- package/dist/usage-ULIDAGFF.js +755 -0
- package/dist/version-ROZ6CZKH.js +16 -0
- package/dist/wiki-generate-PKFIX6OB.js +377 -0
- package/dist/worker/entry.js +1739 -0
- package/docs/README.md +93 -0
- package/docs/acp.md +120 -0
- package/docs/alcf-provider.md +72 -0
- package/docs/architecture.md +172 -0
- package/docs/artifact-versions.md +54 -0
- package/docs/built-in-agents.md +265 -0
- package/docs/capacity-and-scheduling.md +97 -0
- package/docs/commands-and-modes.md +554 -0
- package/docs/config-knobs-audit.md +115 -0
- package/docs/configuration-and-targets.md +812 -0
- package/docs/context-engine.md +236 -0
- package/docs/dispatch-architecture-rationale.md +126 -0
- package/docs/documentation-coverage.md +46 -0
- package/docs/documentation-guide.md +166 -0
- package/docs/environment-variables.md +105 -0
- package/docs/eval-runner.md +205 -0
- package/docs/evals-internal.md +298 -0
- package/docs/evidence-and-memory.md +243 -0
- package/docs/evolution.md +143 -0
- package/docs/exit-codes-and-output.md +74 -0
- package/docs/extensions-and-sharing.md +306 -0
- package/docs/fleet-demo-runbook.md +179 -0
- package/docs/fleet-dispatch.md +591 -0
- package/docs/glossary.md +75 -0
- package/docs/html/agents_blueprint.html +936 -0
- package/docs/html/alcf_blueprint.html +324 -0
- package/docs/html/architecture_blueprint.html +850 -0
- package/docs/html/commands_blueprint.html +794 -0
- package/docs/html/config_knobs_audit_blueprint.html +178 -0
- package/docs/html/configuration_blueprint.html +1080 -0
- package/docs/html/context_blueprint.html +603 -0
- package/docs/html/documentation_blueprint.html +832 -0
- package/docs/html/environment_blueprint.html +404 -0
- package/docs/html/eval_blueprint.html +743 -0
- package/docs/html/evals_internal_blueprint.html +190 -0
- package/docs/html/evolution_blueprint.html +674 -0
- package/docs/html/extensions_blueprint.html +2065 -0
- package/docs/html/fleet_dispatch_blueprint.html +286 -0
- package/docs/html/index.html +919 -0
- package/docs/html/lifecycle_blueprint.html +723 -0
- package/docs/html/memory_blueprint.html +699 -0
- package/docs/html/middleware_blueprint.html +664 -0
- package/docs/html/models_blueprint.html +2366 -0
- package/docs/html/observability_blueprint.html +683 -0
- package/docs/html/provider_adapter_blueprint.html +245 -0
- package/docs/html/safety_blueprint.html +1386 -0
- package/docs/html/shared.css +571 -0
- package/docs/html/shared.js +143 -0
- package/docs/html/skills_blueprint.html +671 -0
- package/docs/html/soak_blueprint.html +182 -0
- package/docs/html/tool_usage_blueprint.html +350 -0
- package/docs/html/tools_blueprint.html +2249 -0
- package/docs/html/trace_blueprint.html +235 -0
- package/docs/html/tui_design_blueprint.html +314 -0
- package/docs/html/validation_blueprint.html +961 -0
- package/docs/html/worker_dispatch_blueprint.html +231 -0
- package/docs/installation-and-lifecycle.md +308 -0
- package/docs/middleware-and-components.md +148 -0
- package/docs/model-catalog.md +189 -0
- package/docs/observability.md +233 -0
- package/docs/proactive-memory.md +452 -0
- package/docs/prompt-envelope-and-tools.md +142 -0
- package/docs/provider-adapter-cookbook.md +148 -0
- package/docs/release-cut-checklist.md +138 -0
- package/docs/safety-model.md +357 -0
- package/docs/scientific-validation.md +105 -0
- package/docs/session-lifecycle.md +156 -0
- package/docs/skills-marketplace.md +46 -0
- package/docs/tool-usage.md +527 -0
- package/docs/trace-store.md +132 -0
- package/docs/troubleshooting.md +33 -0
- package/docs/tui-design.md +239 -0
- package/docs/worker-dispatch-mechanics.md +242 -0
- package/package.json +132 -0
- package/skills/README.md +408 -0
- package/skills/git/commit-crafting/SKILL.md +79 -0
- package/skills/git/commit-crafting/evals.md +92 -0
- package/skills/git/create-pr/SKILL.md +116 -0
- package/skills/git/create-pr/evals.md +114 -0
- package/skills/git/investigate-issue/SKILL.md +139 -0
- package/skills/git/investigate-issue/evals.md +94 -0
- package/skills/git/resolve-merge-conflicts/SKILL.md +96 -0
- package/skills/git/resolve-merge-conflicts/evals.md +58 -0
- package/skills/git/review-changes/SKILL.md +103 -0
- package/skills/git/review-changes/evals.md +85 -0
- package/skills/git/worktree-create/SKILL.md +92 -0
- package/skills/git/worktree-create/evals.md +97 -0
- package/skills/git/worktree-create/references/worktree-setup.md +66 -0
- package/skills/git/worktree-merge/SKILL.md +95 -0
- package/skills/git/worktree-merge/evals.md +114 -0
- package/skills/skill-marketplace.json +261 -0
- package/skills/workflow/cut-it/SKILL.md +86 -0
- package/skills/workflow/cut-it/evals.md +42 -0
- package/src/domains/agents/builtins/architect.md +33 -0
- package/src/domains/agents/builtins/coder.md +31 -0
- package/src/domains/agents/builtins/context-bootstrap.md +38 -0
- package/src/domains/agents/builtins/debugger.md +30 -0
- package/src/domains/agents/builtins/documenter.md +31 -0
- package/src/domains/agents/builtins/git-master.md +30 -0
- package/src/domains/agents/builtins/provenance.md +30 -0
- package/src/domains/agents/builtins/researcher.md +71 -0
- package/src/domains/agents/builtins/scout.md +42 -0
- package/src/domains/agents/builtins/tester.md +31 -0
- package/src/domains/agents/builtins/verifier.md +30 -0
- package/src/domains/agents/builtins/wiki-writer.md +41 -0
- package/src/domains/agents/fleets/build-review.md +34 -0
- package/src/domains/agents/fleets/build-test.md +35 -0
- package/src/domains/agents/fleets/sdlc.md +86 -0
- package/src/domains/prompts/fragments/identity/clio-worker.md +11 -0
- package/src/domains/prompts/fragments/identity/clio.md +26 -0
- package/src/domains/prompts/fragments/operating/contract.md +64 -0
- package/src/domains/prompts/fragments/safety/auto-edit.md +14 -0
- package/src/domains/prompts/fragments/safety/full-auto.md +14 -0
- package/src/domains/prompts/fragments/safety/read-only.md +13 -0
- package/src/domains/prompts/fragments/safety/suggest.md +13 -0
- package/src/domains/prompts/fragments/wiki/page.md +75 -0
- package/src/domains/prompts/fragments/wiki/plan.md +48 -0
- package/src/domains/providers/models/cloud-models/alcf.yaml +40 -0
- package/src/domains/providers/models/local-models/clio-local-coding-targets.yaml +993 -0
|
@@ -0,0 +1,743 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
+
<title>Clio Coder Evaluation Runner Blueprint (v0.3.0)</title>
|
|
7
|
+
|
|
8
|
+
<style>
|
|
9
|
+
:root {
|
|
10
|
+
--bg-dark: #090d16;
|
|
11
|
+
--bg-grid: rgba(255, 255, 255, 0.02);
|
|
12
|
+
--bg-card: rgba(13, 20, 38, 0.45);
|
|
13
|
+
--bg-card-hover: rgba(20, 30, 58, 0.6);
|
|
14
|
+
--border-card: rgba(255, 255, 255, 0.08);
|
|
15
|
+
--border-card-hover: rgba(0, 240, 255, 0.3);
|
|
16
|
+
--text-main: #f3f4f6;
|
|
17
|
+
--text-muted: #9ca3af;
|
|
18
|
+
--text-dim: #6b7280;
|
|
19
|
+
|
|
20
|
+
--color-cyan: #00f0ff;
|
|
21
|
+
--color-cyan-rgb: 0, 240, 255;
|
|
22
|
+
--color-purple: #bd00ff;
|
|
23
|
+
--color-purple-rgb: 189, 0, 255;
|
|
24
|
+
--color-emerald: #10b981;
|
|
25
|
+
--color-emerald-rgb: 16, 185, 129;
|
|
26
|
+
--color-amber: #f59e0b;
|
|
27
|
+
--color-amber-rgb: 245, 158, 11;
|
|
28
|
+
--color-rose: #ef4444;
|
|
29
|
+
--color-rose-rgb: 239, 68, 68;
|
|
30
|
+
|
|
31
|
+
--gradient-main: linear-gradient(135deg, var(--color-cyan), var(--color-purple));
|
|
32
|
+
--shadow-glow: 0 0 25px rgba(0, 240, 255, 0.15);
|
|
33
|
+
--font-sans: "Segoe UI", -apple-system, BlinkMacSystemFont, Roboto, "Helvetica Neue", Arial, sans-serif;
|
|
34
|
+
--font-mono: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, monospace;
|
|
35
|
+
|
|
36
|
+
--glass-blur: blur(12px);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
* {
|
|
40
|
+
box-sizing: border-box;
|
|
41
|
+
margin: 0;
|
|
42
|
+
padding: 0;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
body {
|
|
46
|
+
background-color: var(--bg-dark);
|
|
47
|
+
background-image:
|
|
48
|
+
radial-gradient(circle at 10% 20%, rgba(var(--color-cyan-rgb), 0.05) 0%, transparent 40%),
|
|
49
|
+
radial-gradient(circle at 90% 80%, rgba(var(--color-purple-rgb), 0.05) 0%, transparent 40%),
|
|
50
|
+
radial-gradient(circle at 50% 50%, #0d1527 0%, var(--bg-dark) 100%);
|
|
51
|
+
color: var(--text-main);
|
|
52
|
+
font-family: var(--font-sans);
|
|
53
|
+
min-height: 100vh;
|
|
54
|
+
line-height: 1.6;
|
|
55
|
+
overflow-x: hidden;
|
|
56
|
+
position: relative;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
body::before {
|
|
60
|
+
content: '';
|
|
61
|
+
position: absolute;
|
|
62
|
+
inset: 0;
|
|
63
|
+
background-image: linear-gradient(var(--bg-grid) 1px, transparent 1px),
|
|
64
|
+
linear-gradient(90deg, var(--bg-grid) 1px, transparent 1px);
|
|
65
|
+
background-size: 40px 40px;
|
|
66
|
+
background-position: center top;
|
|
67
|
+
pointer-events: none;
|
|
68
|
+
z-index: 0;
|
|
69
|
+
opacity: 0.8;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
.container {
|
|
73
|
+
max-width: 1400px;
|
|
74
|
+
margin: 0 auto;
|
|
75
|
+
padding: 2rem;
|
|
76
|
+
position: relative;
|
|
77
|
+
z-index: 1;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/* Header Styling */
|
|
81
|
+
header {
|
|
82
|
+
display: flex;
|
|
83
|
+
justify-content: space-between;
|
|
84
|
+
align-items: center;
|
|
85
|
+
margin-bottom: 2.5rem;
|
|
86
|
+
padding-bottom: 1.5rem;
|
|
87
|
+
border-bottom: 1px solid rgba(255, 255, 255, 0.05);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
.header-left {
|
|
91
|
+
display: flex;
|
|
92
|
+
align-items: center;
|
|
93
|
+
gap: 1rem;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
.header-logo {
|
|
97
|
+
display: inline-flex;
|
|
98
|
+
align-items: center;
|
|
99
|
+
justify-content: center;
|
|
100
|
+
width: 48px;
|
|
101
|
+
height: 48px;
|
|
102
|
+
background: rgba(255, 255, 255, 0.02);
|
|
103
|
+
border: 1px solid var(--border-card);
|
|
104
|
+
border-radius: 12px;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
.header-logo svg {
|
|
108
|
+
width: 28px;
|
|
109
|
+
height: 28px;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
.header-title-wrapper h1 {
|
|
113
|
+
font-size: 1.5rem;
|
|
114
|
+
font-weight: 800;
|
|
115
|
+
letter-spacing: -0.03em;
|
|
116
|
+
background: linear-gradient(to right, #ffffff, #c7d2fe, var(--color-cyan));
|
|
117
|
+
-webkit-background-clip: text;
|
|
118
|
+
-webkit-text-fill-color: transparent;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
.header-title-wrapper p {
|
|
122
|
+
font-size: 0.825rem;
|
|
123
|
+
color: var(--text-muted);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
.header-right {
|
|
127
|
+
display: flex;
|
|
128
|
+
align-items: center;
|
|
129
|
+
gap: 1rem;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
.back-btn {
|
|
133
|
+
background: rgba(255, 255, 255, 0.03);
|
|
134
|
+
border: 1px solid var(--border-card);
|
|
135
|
+
color: var(--text-muted);
|
|
136
|
+
padding: 0.5rem 1rem;
|
|
137
|
+
border-radius: 8px;
|
|
138
|
+
font-size: 0.875rem;
|
|
139
|
+
font-weight: 600;
|
|
140
|
+
text-decoration: none;
|
|
141
|
+
display: inline-flex;
|
|
142
|
+
align-items: center;
|
|
143
|
+
gap: 0.5rem;
|
|
144
|
+
transition: all 0.2s;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
.back-btn:hover {
|
|
148
|
+
background: rgba(255, 255, 255, 0.08);
|
|
149
|
+
color: var(--text-main);
|
|
150
|
+
border-color: rgba(var(--color-cyan-rgb), 0.3);
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
.version-badge {
|
|
154
|
+
background: rgba(0, 240, 255, 0.08);
|
|
155
|
+
border: 1px solid rgba(0, 240, 255, 0.25);
|
|
156
|
+
color: var(--color-cyan);
|
|
157
|
+
padding: 0.35rem 0.75rem;
|
|
158
|
+
border-radius: 50px;
|
|
159
|
+
font-size: 0.75rem;
|
|
160
|
+
font-weight: 600;
|
|
161
|
+
font-family: var(--font-mono);
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
/* Tabs Navigation */
|
|
165
|
+
.tabs-nav {
|
|
166
|
+
display: flex;
|
|
167
|
+
gap: 0.75rem;
|
|
168
|
+
margin-bottom: 2rem;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
.tab-btn {
|
|
172
|
+
background: rgba(255, 255, 255, 0.03);
|
|
173
|
+
border: 1px solid var(--border-card);
|
|
174
|
+
color: var(--text-muted);
|
|
175
|
+
padding: 0.6rem 1.25rem;
|
|
176
|
+
border-radius: 8px;
|
|
177
|
+
font-size: 0.875rem;
|
|
178
|
+
font-weight: 600;
|
|
179
|
+
cursor: pointer;
|
|
180
|
+
display: flex;
|
|
181
|
+
align-items: center;
|
|
182
|
+
gap: 0.5rem;
|
|
183
|
+
transition: all 0.2s;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
.tab-btn:hover {
|
|
187
|
+
background: rgba(255, 255, 255, 0.06);
|
|
188
|
+
color: var(--text-main);
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
.tab-btn.active {
|
|
192
|
+
background: var(--gradient-main);
|
|
193
|
+
color: #090d16;
|
|
194
|
+
border-color: transparent;
|
|
195
|
+
box-shadow: 0 4px 15px rgba(var(--color-cyan-rgb), 0.25);
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
/* Content Layout */
|
|
199
|
+
.tab-pane {
|
|
200
|
+
display: none;
|
|
201
|
+
animation: fadeIn 0.3s ease-out forwards;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
.tab-pane.active {
|
|
205
|
+
display: block;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
@keyframes fadeIn {
|
|
209
|
+
from { opacity: 0; transform: translateY(8px); }
|
|
210
|
+
to { opacity: 1; transform: translateY(0); }
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
/* Split layout */
|
|
214
|
+
.blueprint-layout {
|
|
215
|
+
display: grid;
|
|
216
|
+
grid-template-columns: 1fr 1fr;
|
|
217
|
+
gap: 2rem;
|
|
218
|
+
align-items: start;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
@media (max-width: 1100px) {
|
|
222
|
+
.blueprint-layout {
|
|
223
|
+
grid-template-columns: 1fr;
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
.glass-card {
|
|
228
|
+
background: var(--bg-card);
|
|
229
|
+
border: 1px solid var(--border-card);
|
|
230
|
+
border-radius: 16px;
|
|
231
|
+
padding: 1.75rem;
|
|
232
|
+
margin-bottom: 2rem;
|
|
233
|
+
backdrop-filter: var(--glass-blur);
|
|
234
|
+
box-shadow: 0 8px 32px 0 rgba(0, 0, 0, 0.3);
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
.glass-card h2 {
|
|
238
|
+
font-size: 1.25rem;
|
|
239
|
+
font-weight: 700;
|
|
240
|
+
color: #ffffff;
|
|
241
|
+
margin-bottom: 1.25rem;
|
|
242
|
+
display: flex;
|
|
243
|
+
align-items: center;
|
|
244
|
+
gap: 0.5rem;
|
|
245
|
+
border-bottom: 1px solid rgba(255, 255, 255, 0.05);
|
|
246
|
+
padding-bottom: 0.75rem;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
.glass-card h2 svg {
|
|
250
|
+
width: 18px;
|
|
251
|
+
height: 18px;
|
|
252
|
+
color: var(--color-cyan);
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
.glass-card p {
|
|
256
|
+
font-size: 0.925rem;
|
|
257
|
+
color: var(--text-muted);
|
|
258
|
+
margin-bottom: 1rem;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
/* Form Elements */
|
|
262
|
+
.form-group {
|
|
263
|
+
margin-bottom: 1.25rem;
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
.form-group label {
|
|
267
|
+
display: block;
|
|
268
|
+
font-size: 0.8rem;
|
|
269
|
+
font-weight: 600;
|
|
270
|
+
color: var(--text-muted);
|
|
271
|
+
margin-bottom: 0.5rem;
|
|
272
|
+
text-transform: uppercase;
|
|
273
|
+
letter-spacing: 0.05em;
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
.form-row {
|
|
277
|
+
display: grid;
|
|
278
|
+
grid-template-columns: 1fr 1fr;
|
|
279
|
+
gap: 1rem;
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
select, input, textarea {
|
|
283
|
+
width: 100%;
|
|
284
|
+
background: rgba(9, 13, 22, 0.7);
|
|
285
|
+
border: 1px solid var(--border-card);
|
|
286
|
+
border-radius: 8px;
|
|
287
|
+
padding: 0.65rem 0.85rem;
|
|
288
|
+
color: #fff;
|
|
289
|
+
font-family: var(--font-sans);
|
|
290
|
+
font-size: 0.9rem;
|
|
291
|
+
outline: none;
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
textarea {
|
|
295
|
+
font-family: var(--font-mono);
|
|
296
|
+
font-size: 0.8rem;
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
/* Presets list */
|
|
300
|
+
.presets-list {
|
|
301
|
+
display: flex;
|
|
302
|
+
gap: 0.5rem;
|
|
303
|
+
margin-bottom: 1rem;
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
.preset-btn {
|
|
307
|
+
background: rgba(255, 255, 255, 0.03);
|
|
308
|
+
border: 1px solid var(--border-card);
|
|
309
|
+
color: var(--text-muted);
|
|
310
|
+
padding: 0.35rem 0.75rem;
|
|
311
|
+
border-radius: 6px;
|
|
312
|
+
font-size: 0.75rem;
|
|
313
|
+
cursor: pointer;
|
|
314
|
+
transition: all 0.2s;
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
.preset-btn:hover {
|
|
318
|
+
background: rgba(0, 240, 255, 0.08);
|
|
319
|
+
border-color: var(--color-cyan);
|
|
320
|
+
color: #fff;
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
/* Output Console */
|
|
324
|
+
.console-body {
|
|
325
|
+
background: #020408;
|
|
326
|
+
border: 1px solid var(--border-card);
|
|
327
|
+
border-radius: 8px;
|
|
328
|
+
padding: 1rem;
|
|
329
|
+
font-family: var(--font-mono);
|
|
330
|
+
font-size: 0.8rem;
|
|
331
|
+
height: 180px;
|
|
332
|
+
overflow-y: auto;
|
|
333
|
+
white-space: pre-wrap;
|
|
334
|
+
color: var(--color-cyan);
|
|
335
|
+
box-shadow: inset 0 2px 10px rgba(0,0,0,0.8);
|
|
336
|
+
margin-top: 1rem;
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
/* Status panels */
|
|
340
|
+
.status-panel {
|
|
341
|
+
border-radius: 12px;
|
|
342
|
+
padding: 1.25rem;
|
|
343
|
+
margin-bottom: 1.5rem;
|
|
344
|
+
border: 1px solid transparent;
|
|
345
|
+
font-size: 0.9rem;
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
.status-panel.success { background: rgba(16, 185, 129, 0.08); border-color: rgba(16, 185, 129, 0.3); color: var(--color-emerald); }
|
|
349
|
+
.status-panel.error { background: rgba(239, 68, 68, 0.08); border-color: rgba(239, 68, 68, 0.3); color: var(--color-rose); }
|
|
350
|
+
.status-panel.warning { background: rgba(245, 158, 11, 0.08); border-color: rgba(245, 158, 11, 0.3); color: var(--color-amber); }
|
|
351
|
+
|
|
352
|
+
/* Compare Output Grid */
|
|
353
|
+
.compare-grid {
|
|
354
|
+
display: grid;
|
|
355
|
+
grid-template-columns: 1fr 1fr;
|
|
356
|
+
gap: 1rem;
|
|
357
|
+
margin-top: 1rem;
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
.compare-card {
|
|
361
|
+
background: rgba(0,0,0,0.2);
|
|
362
|
+
border: 1px solid var(--border-card);
|
|
363
|
+
border-radius: 8px;
|
|
364
|
+
padding: 0.75rem 1rem;
|
|
365
|
+
text-align: center;
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
.compare-card strong {
|
|
369
|
+
display: block;
|
|
370
|
+
font-size: 1.5rem;
|
|
371
|
+
color: #fff;
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
.compare-card span {
|
|
375
|
+
font-size: 0.75rem;
|
|
376
|
+
color: var(--text-muted);
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
.ref-table {
|
|
380
|
+
width: 100%;
|
|
381
|
+
border-collapse: collapse;
|
|
382
|
+
margin: 1.5rem 0;
|
|
383
|
+
font-size: 0.9rem;
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
.ref-table th, .ref-table td {
|
|
387
|
+
padding: 0.65rem 0.85rem;
|
|
388
|
+
border: 1px solid var(--border-card);
|
|
389
|
+
text-align: left;
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
.ref-table th {
|
|
393
|
+
background: rgba(255,255,255,0.03);
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
/* Footer */
|
|
397
|
+
footer {
|
|
398
|
+
text-align: center;
|
|
399
|
+
margin-top: 4rem;
|
|
400
|
+
padding-top: 2rem;
|
|
401
|
+
border-top: 1px solid rgba(255, 255, 255, 0.05);
|
|
402
|
+
color: var(--text-dim);
|
|
403
|
+
font-size: 0.875rem;
|
|
404
|
+
}
|
|
405
|
+
</style>
|
|
406
|
+
</head>
|
|
407
|
+
<body>
|
|
408
|
+
<div class="container">
|
|
409
|
+
<header>
|
|
410
|
+
<div class="header-left">
|
|
411
|
+
<div class="header-logo">
|
|
412
|
+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="color: var(--color-cyan);"><title>Icon</title>
|
|
413
|
+
<path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path>
|
|
414
|
+
<polyline points="14 2 14 8 20 8"></polyline>
|
|
415
|
+
<line x1="16" y1="13" x2="8" y2="13"></line>
|
|
416
|
+
<line x1="16" y1="17" x2="8" y2="17"></line>
|
|
417
|
+
</svg>
|
|
418
|
+
</div>
|
|
419
|
+
<div class="header-title-wrapper">
|
|
420
|
+
<h1>Clio Coder Local Evaluation Runner</h1>
|
|
421
|
+
<p>Task suite schemas, execution failure classification, and performance compare tools</p>
|
|
422
|
+
</div>
|
|
423
|
+
</div>
|
|
424
|
+
<div class="header-right">
|
|
425
|
+
<span class="version-badge">Clio Coder v0.3.0</span>
|
|
426
|
+
<a href="index.html" class="back-btn">
|
|
427
|
+
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><title>Icon</title><line x1="19" y1="12" x2="5" y2="12"></line><polyline points="12 19 5 12 12 5"></polyline></svg>
|
|
428
|
+
Dashboard Hub
|
|
429
|
+
</a>
|
|
430
|
+
</div>
|
|
431
|
+
</header>
|
|
432
|
+
|
|
433
|
+
<div class="tabs-nav">
|
|
434
|
+
<button type="button" class="tab-btn active" onclick="switchTab('interactive')">
|
|
435
|
+
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><title>Icon</title><polyline points="22 12 18 12 15 21 9 3 6 12 2 12"></polyline></svg>
|
|
436
|
+
Interactive Task Runner & Compare
|
|
437
|
+
</button>
|
|
438
|
+
<button type="button" class="tab-btn" onclick="switchTab('reference')">
|
|
439
|
+
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><title>Icon</title><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline><line x1="16" y1="13" x2="8" y2="13"></line><line x1="16" y1="17" x2="8" y2="17"></line><polyline points="10 9 9 9 8 9"></polyline></svg>
|
|
440
|
+
Full Technical Reference
|
|
441
|
+
</button>
|
|
442
|
+
</div>
|
|
443
|
+
|
|
444
|
+
<!-- TAB 1: INTERACTIVE -->
|
|
445
|
+
<main class="tab-pane active" id="pane-interactive">
|
|
446
|
+
<div class="blueprint-layout">
|
|
447
|
+
|
|
448
|
+
<!-- Left: Task Suite Editor & Run -->
|
|
449
|
+
<div class="specs-col">
|
|
450
|
+
<div class="glass-card">
|
|
451
|
+
<h2>
|
|
452
|
+
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><title>Icon</title><path d="M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7"></path><path d="M18.5 2.5a2.121 2.121 0 1 1 3 3L12 15l-4 1 1-4 9.5-9.5z"></path></svg>
|
|
453
|
+
Task YAML validator & runner
|
|
454
|
+
</h2>
|
|
455
|
+
<p>Paste or edit task suite YAML files. Run the validator or simulate execution sweeps.</p>
|
|
456
|
+
|
|
457
|
+
<div class="presets-list">
|
|
458
|
+
<span class="preset-btn" onclick="loadTaskPreset('valid')">Valid Task YAML</span>
|
|
459
|
+
<span class="preset-btn" onclick="loadTaskPreset('invalid')">Invalid Task Cwd escape</span>
|
|
460
|
+
</div>
|
|
461
|
+
|
|
462
|
+
<div class="form-group">
|
|
463
|
+
<textarea id="taskInput" rows="10" oninput="validateTasks()"></textarea>
|
|
464
|
+
</div>
|
|
465
|
+
|
|
466
|
+
<div class="verdict-header">YAML Validator Output</div>
|
|
467
|
+
<div id="validatorResult" class="status-panel success">
|
|
468
|
+
YAML is empty. Load a preset.
|
|
469
|
+
</div>
|
|
470
|
+
|
|
471
|
+
<button type="button" class="action-btn" id="runBtn" onclick="runSimulatedEval()">Simulate clio-coder eval run</button>
|
|
472
|
+
|
|
473
|
+
<div class="console-body" id="runConsole">Console ready. Click button to simulate runner.</div>
|
|
474
|
+
</div>
|
|
475
|
+
</div>
|
|
476
|
+
|
|
477
|
+
<!-- Right: Compare Calculator -->
|
|
478
|
+
<div class="specs-col">
|
|
479
|
+
<div class="glass-card">
|
|
480
|
+
<h2>
|
|
481
|
+
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><title>Icon</title><polyline points="22 12 18 12 15 21 9 3 6 12 2 12"></polyline></svg>
|
|
482
|
+
Baseline vs Candidate Compare
|
|
483
|
+
</h2>
|
|
484
|
+
<p>Select Baselines and Candidate records to calculate deltas.</p>
|
|
485
|
+
|
|
486
|
+
<div class="form-row">
|
|
487
|
+
<div class="form-group">
|
|
488
|
+
<label for="baselineSelect">Baseline Run (Before change)</label>
|
|
489
|
+
<select id="baselineSelect" onchange="runCompare()">
|
|
490
|
+
<option value="base-1">Baseline #1 (75% Pass Rate, 48s)</option>
|
|
491
|
+
<option value="base-2">Baseline #2 (100% Pass Rate, 32s)</option>
|
|
492
|
+
</select>
|
|
493
|
+
</div>
|
|
494
|
+
<div class="form-group">
|
|
495
|
+
<label for="candidateSelect">Candidate Run (After change)</label>
|
|
496
|
+
<select id="candidateSelect" onchange="runCompare()">
|
|
497
|
+
<option value="cand-1">Candidate #1 (100% Pass Rate, 24s)</option>
|
|
498
|
+
<option value="cand-2">Candidate #2 (50% Pass Rate, 62s)</option>
|
|
499
|
+
</select>
|
|
500
|
+
</div>
|
|
501
|
+
</div>
|
|
502
|
+
|
|
503
|
+
<div class="verdict-header">Comparison Deltas</div>
|
|
504
|
+
<div class="compare-grid">
|
|
505
|
+
<div class="compare-card">
|
|
506
|
+
<strong id="deltaPassRate" style="color:var(--color-emerald)">+25%</strong>
|
|
507
|
+
<span>Pass Rate Delta</span>
|
|
508
|
+
</div>
|
|
509
|
+
<div class="compare-card">
|
|
510
|
+
<strong id="deltaWallTime" style="color:var(--color-emerald)">-24s</strong>
|
|
511
|
+
<span>Wall Time Delta</span>
|
|
512
|
+
</div>
|
|
513
|
+
</div>
|
|
514
|
+
|
|
515
|
+
<div id="compareDetails" style="margin-top:1.5rem; font-size:0.875rem; color:var(--text-muted)">
|
|
516
|
+
Candidate #1 outperformed Baseline #1. Typecheck and verifier commands run cold speeds decreased.
|
|
517
|
+
</div>
|
|
518
|
+
</div>
|
|
519
|
+
</div>
|
|
520
|
+
|
|
521
|
+
</div>
|
|
522
|
+
</main>
|
|
523
|
+
|
|
524
|
+
<!-- TAB 2: TECHNICAL REFERENCE -->
|
|
525
|
+
<main class="tab-pane" id="pane-reference">
|
|
526
|
+
<div class="glass-card">
|
|
527
|
+
<h2>Clio Coder Eval Runner Specifications</h2>
|
|
528
|
+
<p>The local evaluation runner executes repository-local YAML task suites as deterministic subprocess checks. It is useful for comparing harness changes, prompts, tools, or local workflows without requiring the runner itself to call a model.</p>
|
|
529
|
+
|
|
530
|
+
<h3 style="margin: 1.5rem 0 0.5rem 0; color:#fff;">CLI and Report Formats</h3>
|
|
531
|
+
<p>Run task suites, build reports, and compare evaluation results across runs:</p>
|
|
532
|
+
<pre><code>clio-coder eval run --task-file tasks.yaml [--repeat <n>]
|
|
533
|
+
clio-coder eval report <evalId> [--format swe-jsonl]
|
|
534
|
+
clio-coder eval compare <baselineEvalId> <candidateEvalId></code></pre>
|
|
535
|
+
<p>The option <code>--format swe-jsonl</code> generates reports in a newline-separated JSONL format matching benchmark schemas (containing <code>instance_id</code>, <code>model_patch</code>, <code>model_name_or_path</code>, <code>status</code>, <code>pass</code>, <code>tokens</code>, <code>wall_time_ms</code>, and <code>cost_usd</code>) suitable for scientific evaluations such as <strong>SWE-bench</strong>.</p>
|
|
536
|
+
|
|
537
|
+
<h3 style="margin: 1.5rem 0 0.5rem 0; color:#fff;">Task-file schema</h3>
|
|
538
|
+
<p>Parsed by <code>src/domains/eval/task-file.ts</code>. Enforces relative cwd paths inside the task folder to prevent absolute escapes.</p>
|
|
539
|
+
<pre><code>version: 1
|
|
540
|
+
tasks:
|
|
541
|
+
- id: cli-json-smoke
|
|
542
|
+
prompt: "Verify the CLI JSON mode still starts."
|
|
543
|
+
cwd: fixtures/cli-json-smoke
|
|
544
|
+
setup:
|
|
545
|
+
- npm install
|
|
546
|
+
verifier:
|
|
547
|
+
- npm run build
|
|
548
|
+
- node dist/cli/index.js --help
|
|
549
|
+
timeoutMs: 60000</code></pre>
|
|
550
|
+
|
|
551
|
+
<h3 style="margin: 1.5rem 0 0.5rem 0; color:#fff;">Failure Classes</h3>
|
|
552
|
+
<table class="ref-table">
|
|
553
|
+
<thead>
|
|
554
|
+
<tr>
|
|
555
|
+
<th>Failure Class</th>
|
|
556
|
+
<th>Meaning</th>
|
|
557
|
+
</tr>
|
|
558
|
+
</thead>
|
|
559
|
+
<tbody>
|
|
560
|
+
<tr>
|
|
561
|
+
<td><code>setup_failed</code></td>
|
|
562
|
+
<td>A setup command exited with a non-zero exit status code.</td>
|
|
563
|
+
</tr>
|
|
564
|
+
<tr>
|
|
565
|
+
<td><code>verifier_failed</code></td>
|
|
566
|
+
<td>A verifier test command exited non-zero.</td>
|
|
567
|
+
</tr>
|
|
568
|
+
<tr>
|
|
569
|
+
<td><code>timeout</code></td>
|
|
570
|
+
<td>A command exceeded its timeoutMs limit.</td>
|
|
571
|
+
</tr>
|
|
572
|
+
<tr>
|
|
573
|
+
<td><code>cwd_missing</code></td>
|
|
574
|
+
<td>The resolved working directory directory did not exist.</td>
|
|
575
|
+
</tr>
|
|
576
|
+
</tbody>
|
|
577
|
+
</table>
|
|
578
|
+
</div>
|
|
579
|
+
</main>
|
|
580
|
+
|
|
581
|
+
<footer>
|
|
582
|
+
<p>Clio Coder Eval Runner spec • Version 0.3.0</p>
|
|
583
|
+
</footer>
|
|
584
|
+
</div>
|
|
585
|
+
|
|
586
|
+
<script>
|
|
587
|
+
// Tab switching
|
|
588
|
+
function switchTab(tabId) {
|
|
589
|
+
document.querySelectorAll('.tab-btn').forEach(btn => { btn.classList.remove('active'); });
|
|
590
|
+
document.querySelectorAll('.tab-pane').forEach(pane => { pane.classList.remove('active'); });
|
|
591
|
+
|
|
592
|
+
if (tabId === 'interactive') {
|
|
593
|
+
document.querySelector('.tab-btn:nth-child(1)').classList.add('active');
|
|
594
|
+
document.getElementById('pane-interactive').classList.add('active');
|
|
595
|
+
} else {
|
|
596
|
+
document.querySelector('.tab-btn:nth-child(2)').classList.add('active');
|
|
597
|
+
document.getElementById('pane-reference').classList.add('active');
|
|
598
|
+
}
|
|
599
|
+
}
|
|
600
|
+
|
|
601
|
+
const taskSamples = {
|
|
602
|
+
valid: `version: 1
|
|
603
|
+
tasks:
|
|
604
|
+
- id: cli-json-smoke
|
|
605
|
+
prompt: "Verify CLI JSON mode starts."
|
|
606
|
+
cwd: fixtures/cli-smoke
|
|
607
|
+
verifier:
|
|
608
|
+
- node dist/cli/index.js --version
|
|
609
|
+
timeoutMs: 30000`,
|
|
610
|
+
invalid: `version: 1
|
|
611
|
+
tasks:
|
|
612
|
+
- id: escape-sandbox
|
|
613
|
+
prompt: "Tries absolute escape."
|
|
614
|
+
cwd: /etc/secrets # Error: Absolute path
|
|
615
|
+
verifier:
|
|
616
|
+
- ls -la`
|
|
617
|
+
};
|
|
618
|
+
|
|
619
|
+
function loadTaskPreset(type) {
|
|
620
|
+
document.getElementById('taskInput').value = taskSamples[type].trim();
|
|
621
|
+
validateTasks();
|
|
622
|
+
}
|
|
623
|
+
|
|
624
|
+
function validateTasks() {
|
|
625
|
+
const text = document.getElementById('taskInput').value;
|
|
626
|
+
const output = document.getElementById('validatorResult');
|
|
627
|
+
|
|
628
|
+
if (!text.trim()) {
|
|
629
|
+
output.className = 'status-panel warning';
|
|
630
|
+
output.innerText = 'YAML is empty. Load a preset.';
|
|
631
|
+
return;
|
|
632
|
+
}
|
|
633
|
+
|
|
634
|
+
// Simple scanning
|
|
635
|
+
const lines = text.split('\n');
|
|
636
|
+
const errors = [];
|
|
637
|
+
let version = null;
|
|
638
|
+
let tasksEmpty = true;
|
|
639
|
+
|
|
640
|
+
lines.forEach((line, idx) => {
|
|
641
|
+
const trimmed = line.trim();
|
|
642
|
+
if (!trimmed || trimmed.startsWith('#')) return;
|
|
643
|
+
|
|
644
|
+
const parts = trimmed.split(':');
|
|
645
|
+
if (parts.length >= 2) {
|
|
646
|
+
const key = parts[0].trim();
|
|
647
|
+
const val = parts.slice(1).join(':').trim().replace(/['"]/g, '');
|
|
648
|
+
|
|
649
|
+
if (key === 'version') {
|
|
650
|
+
version = val;
|
|
651
|
+
if (val !== '1') errors.push(`[Line ${idx+1}] Version must be exactly 1.`);
|
|
652
|
+
}
|
|
653
|
+
if (key === 'cwd') {
|
|
654
|
+
if (val.startsWith('/') || val.startsWith('..')) {
|
|
655
|
+
errors.push(`[Line ${idx+1}] cwd contains absolute escape path constraints ("${val}"). Must be relative.`);
|
|
656
|
+
}
|
|
657
|
+
}
|
|
658
|
+
if (key === 'tasks') {
|
|
659
|
+
tasksEmpty = false;
|
|
660
|
+
}
|
|
661
|
+
}
|
|
662
|
+
});
|
|
663
|
+
|
|
664
|
+
if (errors.length > 0) {
|
|
665
|
+
output.className = 'status-panel error';
|
|
666
|
+
output.innerHTML = `<strong>Schema Errors:</strong><ul style="margin-left:1.5rem; margin-top:0.5rem;">` +
|
|
667
|
+
errors.map(e => `<li>${e}</li>`).join('') + `</ul>`;
|
|
668
|
+
document.getElementById('runBtn').disabled = true;
|
|
669
|
+
} else {
|
|
670
|
+
output.className = 'status-panel success';
|
|
671
|
+
output.innerHTML = "<strong>Success:</strong> Task file is structurally valid for local verifiers.";
|
|
672
|
+
document.getElementById('runBtn').disabled = false;
|
|
673
|
+
}
|
|
674
|
+
}
|
|
675
|
+
|
|
676
|
+
function runSimulatedEval() {
|
|
677
|
+
const consoleEl = document.getElementById('runConsole');
|
|
678
|
+
consoleEl.innerHTML = `[EVAL] Launching eval tasks suite runner...`;
|
|
679
|
+
|
|
680
|
+
setTimeout(() => {
|
|
681
|
+
consoleEl.innerHTML += `\n[RUN] Resolving Task: cli-json-smoke`;
|
|
682
|
+
consoleEl.innerHTML += `\n[FS] Resolved cwd: fixtures/cli-smoke`;
|
|
683
|
+
}, 400);
|
|
684
|
+
|
|
685
|
+
setTimeout(() => {
|
|
686
|
+
consoleEl.innerHTML += `\n[SH] Running verifier: node dist/cli/index.js --version`;
|
|
687
|
+
consoleEl.innerHTML += `\n[SH] stdout: Clio Coder v0.3.0`;
|
|
688
|
+
consoleEl.innerHTML += `\n[SH] exit code: 0`;
|
|
689
|
+
}, 900);
|
|
690
|
+
|
|
691
|
+
setTimeout(() => {
|
|
692
|
+
consoleEl.innerHTML += `\n[EVAL] Task cli-json-smoke: PASSED`;
|
|
693
|
+
consoleEl.innerHTML += `\n[EVAL] Completed execution. Pass rate: 100%. Eval ID: eval-5f82c`;
|
|
694
|
+
}, 1400);
|
|
695
|
+
}
|
|
696
|
+
|
|
697
|
+
function runCompare() {
|
|
698
|
+
const b = document.getElementById('baselineSelect').value;
|
|
699
|
+
const c = document.getElementById('candidateSelect').value;
|
|
700
|
+
|
|
701
|
+
const rateEl = document.getElementById('deltaPassRate');
|
|
702
|
+
const timeEl = document.getElementById('deltaWallTime');
|
|
703
|
+
const descEl = document.getElementById('compareDetails');
|
|
704
|
+
|
|
705
|
+
if (b === 'base-1' && c === 'cand-1') {
|
|
706
|
+
// baseline: 75% pass, 48s. cand: 100% pass, 24s.
|
|
707
|
+
rateEl.innerText = '+25%';
|
|
708
|
+
rateEl.style.color = 'var(--color-emerald)';
|
|
709
|
+
timeEl.innerText = '-24s';
|
|
710
|
+
timeEl.style.color = 'var(--color-emerald)';
|
|
711
|
+
descEl.innerText = "Candidate #1 pass rate improved by 25% and completed 24 seconds faster than Baseline #1.";
|
|
712
|
+
} else if (b === 'base-1' && c === 'cand-2') {
|
|
713
|
+
// baseline: 75% pass, 48s. cand: 50% pass, 62s.
|
|
714
|
+
rateEl.innerText = '-25%';
|
|
715
|
+
rateEl.style.color = 'var(--color-rose)';
|
|
716
|
+
timeEl.innerText = '+14s';
|
|
717
|
+
timeEl.style.color = 'var(--color-rose)';
|
|
718
|
+
descEl.innerText = "Candidate #2 regressed: pass rate dropped by 25% and ran 14 seconds slower.";
|
|
719
|
+
} else if (b === 'base-2' && c === 'cand-1') {
|
|
720
|
+
// baseline: 100% pass, 32s. cand: 100% pass, 24s.
|
|
721
|
+
rateEl.innerText = '0%';
|
|
722
|
+
rateEl.style.color = '#fff';
|
|
723
|
+
timeEl.innerText = '-8s';
|
|
724
|
+
timeEl.style.color = 'var(--color-emerald)';
|
|
725
|
+
descEl.innerText = "Pass rates are identical (100%). Candidate #1 was 8 seconds faster.";
|
|
726
|
+
} else {
|
|
727
|
+
// baseline: 100% pass, 32s. cand: 50% pass, 62s.
|
|
728
|
+
rateEl.innerText = '-50%';
|
|
729
|
+
rateEl.style.color = 'var(--color-rose)';
|
|
730
|
+
timeEl.innerText = '+30s';
|
|
731
|
+
timeEl.style.color = 'var(--color-rose)';
|
|
732
|
+
descEl.innerText = "Candidate #2 regressed significantly: pass rate halved and time increased by 30 seconds.";
|
|
733
|
+
}
|
|
734
|
+
}
|
|
735
|
+
|
|
736
|
+
// Init
|
|
737
|
+
window.onload = () => {
|
|
738
|
+
loadTaskPreset('valid');
|
|
739
|
+
runCompare();
|
|
740
|
+
};
|
|
741
|
+
</script>
|
|
742
|
+
</body>
|
|
743
|
+
</html>
|