@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,1080 @@
|
|
|
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 Configuration 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
|
+
position: relative;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
.header-logo svg {
|
|
109
|
+
width: 28px;
|
|
110
|
+
height: 28px;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
.header-title-wrapper h1 {
|
|
114
|
+
font-size: 1.5rem;
|
|
115
|
+
font-weight: 800;
|
|
116
|
+
letter-spacing: -0.03em;
|
|
117
|
+
background: linear-gradient(to right, #ffffff, #c7d2fe, var(--color-cyan));
|
|
118
|
+
-webkit-background-clip: text;
|
|
119
|
+
-webkit-text-fill-color: transparent;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
.header-title-wrapper p {
|
|
123
|
+
font-size: 0.825rem;
|
|
124
|
+
color: var(--text-muted);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
.header-right {
|
|
128
|
+
display: flex;
|
|
129
|
+
align-items: center;
|
|
130
|
+
gap: 1rem;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
.back-btn {
|
|
134
|
+
background: rgba(255, 255, 255, 0.03);
|
|
135
|
+
border: 1px solid var(--border-card);
|
|
136
|
+
color: var(--text-muted);
|
|
137
|
+
padding: 0.5rem 1rem;
|
|
138
|
+
border-radius: 8px;
|
|
139
|
+
font-size: 0.875rem;
|
|
140
|
+
font-weight: 600;
|
|
141
|
+
text-decoration: none;
|
|
142
|
+
display: inline-flex;
|
|
143
|
+
align-items: center;
|
|
144
|
+
gap: 0.5rem;
|
|
145
|
+
transition: all 0.2s;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
.back-btn:hover {
|
|
149
|
+
background: rgba(255, 255, 255, 0.08);
|
|
150
|
+
color: var(--text-main);
|
|
151
|
+
border-color: rgba(var(--color-cyan-rgb), 0.3);
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
.version-badge {
|
|
155
|
+
background: rgba(0, 240, 255, 0.08);
|
|
156
|
+
border: 1px solid rgba(0, 240, 255, 0.25);
|
|
157
|
+
color: var(--color-cyan);
|
|
158
|
+
padding: 0.35rem 0.75rem;
|
|
159
|
+
border-radius: 50px;
|
|
160
|
+
font-size: 0.75rem;
|
|
161
|
+
font-weight: 600;
|
|
162
|
+
font-family: var(--font-mono);
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
/* Tabs Navigation */
|
|
166
|
+
.tabs-nav {
|
|
167
|
+
display: flex;
|
|
168
|
+
gap: 0.75rem;
|
|
169
|
+
margin-bottom: 2rem;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
.tab-btn {
|
|
173
|
+
background: rgba(255, 255, 255, 0.03);
|
|
174
|
+
border: 1px solid var(--border-card);
|
|
175
|
+
color: var(--text-muted);
|
|
176
|
+
padding: 0.6rem 1.25rem;
|
|
177
|
+
border-radius: 8px;
|
|
178
|
+
font-size: 0.875rem;
|
|
179
|
+
font-weight: 600;
|
|
180
|
+
cursor: pointer;
|
|
181
|
+
display: flex;
|
|
182
|
+
align-items: center;
|
|
183
|
+
gap: 0.5rem;
|
|
184
|
+
transition: all 0.2s;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
.tab-btn:hover {
|
|
188
|
+
background: rgba(255, 255, 255, 0.06);
|
|
189
|
+
color: var(--text-main);
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
.tab-btn.active {
|
|
193
|
+
background: var(--gradient-main);
|
|
194
|
+
color: #090d16;
|
|
195
|
+
border-color: transparent;
|
|
196
|
+
box-shadow: 0 4px 15px rgba(var(--color-cyan-rgb), 0.25);
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
/* Content Layout */
|
|
200
|
+
.tab-pane {
|
|
201
|
+
display: none;
|
|
202
|
+
animation: fadeIn 0.3s ease-out forwards;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
.tab-pane.active {
|
|
206
|
+
display: block;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
@keyframes fadeIn {
|
|
210
|
+
from { opacity: 0; transform: translateY(8px); }
|
|
211
|
+
to { opacity: 1; transform: translateY(0); }
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
/* Split layout: Specs + Simulator */
|
|
215
|
+
.blueprint-layout {
|
|
216
|
+
display: grid;
|
|
217
|
+
grid-template-columns: 1fr 1fr;
|
|
218
|
+
gap: 2rem;
|
|
219
|
+
align-items: start;
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
@media (max-width: 1100px) {
|
|
223
|
+
.blueprint-layout {
|
|
224
|
+
grid-template-columns: 1fr;
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
.glass-card {
|
|
229
|
+
background: var(--bg-card);
|
|
230
|
+
border: 1px solid var(--border-card);
|
|
231
|
+
border-radius: 16px;
|
|
232
|
+
padding: 1.75rem;
|
|
233
|
+
margin-bottom: 2rem;
|
|
234
|
+
backdrop-filter: var(--glass-blur);
|
|
235
|
+
box-shadow: 0 8px 32px 0 rgba(0, 0, 0, 0.3);
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
.glass-card h2 {
|
|
239
|
+
font-size: 1.25rem;
|
|
240
|
+
font-weight: 700;
|
|
241
|
+
color: #ffffff;
|
|
242
|
+
margin-bottom: 1.25rem;
|
|
243
|
+
display: flex;
|
|
244
|
+
align-items: center;
|
|
245
|
+
gap: 0.5rem;
|
|
246
|
+
border-bottom: 1px solid rgba(255, 255, 255, 0.05);
|
|
247
|
+
padding-bottom: 0.75rem;
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
.glass-card h2 svg {
|
|
251
|
+
width: 18px;
|
|
252
|
+
height: 18px;
|
|
253
|
+
color: var(--color-cyan);
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
.glass-card p {
|
|
257
|
+
font-size: 0.925rem;
|
|
258
|
+
color: var(--text-muted);
|
|
259
|
+
margin-bottom: 1rem;
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
/* Form Elements */
|
|
263
|
+
.form-group {
|
|
264
|
+
margin-bottom: 1.25rem;
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
.form-group label {
|
|
268
|
+
display: block;
|
|
269
|
+
font-size: 0.8rem;
|
|
270
|
+
font-weight: 600;
|
|
271
|
+
color: var(--text-muted);
|
|
272
|
+
margin-bottom: 0.5rem;
|
|
273
|
+
text-transform: uppercase;
|
|
274
|
+
letter-spacing: 0.05em;
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
.form-row {
|
|
278
|
+
display: grid;
|
|
279
|
+
grid-template-columns: 1fr 1fr;
|
|
280
|
+
gap: 1rem;
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
select, input, textarea {
|
|
284
|
+
width: 100%;
|
|
285
|
+
background: rgba(9, 13, 22, 0.7);
|
|
286
|
+
border: 1px solid var(--border-card);
|
|
287
|
+
border-radius: 8px;
|
|
288
|
+
padding: 0.65rem 0.85rem;
|
|
289
|
+
color: #fff;
|
|
290
|
+
font-family: var(--font-sans);
|
|
291
|
+
font-size: 0.9rem;
|
|
292
|
+
outline: none;
|
|
293
|
+
transition: all 0.2s;
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
select:focus, input:focus, textarea:focus {
|
|
297
|
+
border-color: var(--color-cyan);
|
|
298
|
+
box-shadow: 0 0 10px rgba(var(--color-cyan-rgb), 0.15);
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
textarea {
|
|
302
|
+
font-family: var(--font-mono);
|
|
303
|
+
font-size: 0.825rem;
|
|
304
|
+
resize: vertical;
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
.checkbox-group {
|
|
308
|
+
display: flex;
|
|
309
|
+
align-items: center;
|
|
310
|
+
gap: 0.5rem;
|
|
311
|
+
margin-bottom: 1rem;
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
.checkbox-group input {
|
|
315
|
+
width: auto;
|
|
316
|
+
margin-right: 0.25rem;
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
.checkbox-group label {
|
|
320
|
+
display: inline;
|
|
321
|
+
text-transform: none;
|
|
322
|
+
font-size: 0.875rem;
|
|
323
|
+
font-weight: 500;
|
|
324
|
+
cursor: pointer;
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
/* Presets list */
|
|
328
|
+
.presets-list {
|
|
329
|
+
display: flex;
|
|
330
|
+
gap: 0.5rem;
|
|
331
|
+
margin-bottom: 1rem;
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
.preset-btn {
|
|
335
|
+
background: rgba(255, 255, 255, 0.03);
|
|
336
|
+
border: 1px solid var(--border-card);
|
|
337
|
+
color: var(--text-muted);
|
|
338
|
+
padding: 0.35rem 0.75rem;
|
|
339
|
+
border-radius: 6px;
|
|
340
|
+
font-size: 0.75rem;
|
|
341
|
+
cursor: pointer;
|
|
342
|
+
font-family: var(--font-sans);
|
|
343
|
+
transition: all 0.2s;
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
.preset-btn:hover {
|
|
347
|
+
background: rgba(0, 240, 255, 0.08);
|
|
348
|
+
border-color: var(--color-cyan);
|
|
349
|
+
color: #fff;
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
/* Validation Results display */
|
|
353
|
+
.status-panel {
|
|
354
|
+
border-radius: 12px;
|
|
355
|
+
padding: 1.25rem;
|
|
356
|
+
margin-bottom: 1.5rem;
|
|
357
|
+
border: 1px solid transparent;
|
|
358
|
+
font-size: 0.9rem;
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
.status-panel.success {
|
|
362
|
+
background: rgba(16, 185, 129, 0.08);
|
|
363
|
+
border-color: rgba(16, 185, 129, 0.3);
|
|
364
|
+
color: var(--color-emerald);
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
.status-panel.error {
|
|
368
|
+
background: rgba(239, 68, 68, 0.08);
|
|
369
|
+
border-color: rgba(239, 68, 68, 0.3);
|
|
370
|
+
color: var(--color-rose);
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
.status-panel.warning {
|
|
374
|
+
background: rgba(245, 158, 11, 0.08);
|
|
375
|
+
border-color: rgba(245, 158, 11, 0.3);
|
|
376
|
+
color: var(--color-amber);
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
/* Code & Output Blocks */
|
|
380
|
+
.code-block-wrapper {
|
|
381
|
+
position: relative;
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
.copy-btn {
|
|
385
|
+
position: absolute;
|
|
386
|
+
top: 0.75rem;
|
|
387
|
+
right: 0.75rem;
|
|
388
|
+
background: rgba(255, 255, 255, 0.05);
|
|
389
|
+
border: 1px solid var(--border-card);
|
|
390
|
+
color: var(--text-muted);
|
|
391
|
+
padding: 0.25rem 0.6rem;
|
|
392
|
+
border-radius: 4px;
|
|
393
|
+
font-size: 0.7rem;
|
|
394
|
+
cursor: pointer;
|
|
395
|
+
font-family: var(--font-sans);
|
|
396
|
+
font-weight: 600;
|
|
397
|
+
transition: all 0.2s;
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
.copy-btn:hover {
|
|
401
|
+
background: var(--color-cyan);
|
|
402
|
+
color: #090d16;
|
|
403
|
+
border-color: transparent;
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
.code-output {
|
|
407
|
+
background: #020408;
|
|
408
|
+
border: 1px solid var(--border-card);
|
|
409
|
+
border-radius: 8px;
|
|
410
|
+
padding: 1.25rem;
|
|
411
|
+
font-family: var(--font-mono);
|
|
412
|
+
font-size: 0.85rem;
|
|
413
|
+
overflow-x: auto;
|
|
414
|
+
color: #e5e7eb;
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
/* Badges */
|
|
418
|
+
.cap-badge-grid {
|
|
419
|
+
display: flex;
|
|
420
|
+
flex-wrap: wrap;
|
|
421
|
+
gap: 0.5rem;
|
|
422
|
+
margin-top: 0.75rem;
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
.cap-badge {
|
|
426
|
+
font-family: var(--font-mono);
|
|
427
|
+
font-size: 0.75rem;
|
|
428
|
+
font-weight: 700;
|
|
429
|
+
padding: 0.25rem 0.5rem;
|
|
430
|
+
border-radius: 4px;
|
|
431
|
+
text-transform: uppercase;
|
|
432
|
+
display: inline-flex;
|
|
433
|
+
align-items: center;
|
|
434
|
+
gap: 0.3rem;
|
|
435
|
+
}
|
|
436
|
+
|
|
437
|
+
.cap-badge.active { background: rgba(0, 240, 255, 0.1); border: 1px solid rgba(0, 240, 255, 0.3); color: var(--color-cyan); }
|
|
438
|
+
.cap-badge.inactive { background: rgba(255, 255, 255, 0.03); border: 1px solid rgba(255, 255, 255, 0.08); color: var(--text-dim); }
|
|
439
|
+
|
|
440
|
+
/* Tables */
|
|
441
|
+
.ref-table {
|
|
442
|
+
width: 100%;
|
|
443
|
+
border-collapse: collapse;
|
|
444
|
+
margin: 1.5rem 0;
|
|
445
|
+
font-size: 0.9rem;
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
.ref-table th, .ref-table td {
|
|
449
|
+
padding: 0.65rem 0.85rem;
|
|
450
|
+
border: 1px solid var(--border-card);
|
|
451
|
+
text-align: left;
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
.ref-table th {
|
|
455
|
+
background: rgba(255,255,255,0.03);
|
|
456
|
+
font-weight: 600;
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
.alert-tip {
|
|
460
|
+
background: rgba(16, 185, 129, 0.06);
|
|
461
|
+
border-left: 4px solid var(--color-emerald);
|
|
462
|
+
padding: 1rem;
|
|
463
|
+
border-radius: 0 8px 8px 0;
|
|
464
|
+
margin: 1.5rem 0;
|
|
465
|
+
font-size: 0.9rem;
|
|
466
|
+
}
|
|
467
|
+
|
|
468
|
+
.alert-tip strong {
|
|
469
|
+
color: var(--color-emerald);
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
/* Footer */
|
|
473
|
+
footer {
|
|
474
|
+
text-align: center;
|
|
475
|
+
margin-top: 4rem;
|
|
476
|
+
padding-top: 2rem;
|
|
477
|
+
border-top: 1px solid rgba(255, 255, 255, 0.05);
|
|
478
|
+
color: var(--text-dim);
|
|
479
|
+
font-size: 0.875rem;
|
|
480
|
+
}
|
|
481
|
+
</style>
|
|
482
|
+
</head>
|
|
483
|
+
<body>
|
|
484
|
+
<div class="container">
|
|
485
|
+
<header>
|
|
486
|
+
<div class="header-left">
|
|
487
|
+
<div class="header-logo">
|
|
488
|
+
<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>
|
|
489
|
+
<polygon points="12 2 2 7 12 12 22 7 12 2"></polygon>
|
|
490
|
+
<polyline points="2 17 12 22 22 17"></polyline>
|
|
491
|
+
<polyline points="2 12 12 17 22 12"></polyline>
|
|
492
|
+
</svg>
|
|
493
|
+
</div>
|
|
494
|
+
<div class="header-title-wrapper">
|
|
495
|
+
<h1>Clio Coder Configuration Blueprint</h1>
|
|
496
|
+
<p>Config specs, model resolver, and interactive validator</p>
|
|
497
|
+
</div>
|
|
498
|
+
</div>
|
|
499
|
+
<div class="header-right">
|
|
500
|
+
<span class="version-badge">Clio Coder v0.3.0</span>
|
|
501
|
+
<a href="index.html" class="back-btn">
|
|
502
|
+
<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>
|
|
503
|
+
Dashboard Hub
|
|
504
|
+
</a>
|
|
505
|
+
</div>
|
|
506
|
+
</header>
|
|
507
|
+
|
|
508
|
+
<div class="tabs-nav">
|
|
509
|
+
<button type="button" class="tab-btn active" onclick="switchTab('interactive')">
|
|
510
|
+
<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>
|
|
511
|
+
Interactive Config Studio
|
|
512
|
+
</button>
|
|
513
|
+
<button type="button" class="tab-btn" onclick="switchTab('reference')">
|
|
514
|
+
<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>
|
|
515
|
+
Full Technical Reference
|
|
516
|
+
</button>
|
|
517
|
+
</div>
|
|
518
|
+
|
|
519
|
+
<!-- TAB 1: INTERACTIVE Config Studio -->
|
|
520
|
+
<main class="tab-pane active" id="pane-interactive">
|
|
521
|
+
<div class="blueprint-layout">
|
|
522
|
+
|
|
523
|
+
<!-- Left Column: YAML Validator -->
|
|
524
|
+
<div class="specs-col">
|
|
525
|
+
<div class="glass-card">
|
|
526
|
+
<h2>
|
|
527
|
+
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><title>Icon</title><path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"></path><polyline points="22 4 12 14.01 9 11.01"></polyline></svg>
|
|
528
|
+
settings.yaml Validator (v0.3.0 Schema)
|
|
529
|
+
</h2>
|
|
530
|
+
<p>Paste or edit your <code>settings.yaml</code> configuration file below. The validator checks schema version, target mapping links, target IDs, budget structures, and flags legacy properties such as <code>defaultMode</code> or misplaced state fields.</p>
|
|
531
|
+
|
|
532
|
+
<div class="presets-list">
|
|
533
|
+
<span class="preset-btn" onclick="loadYamlPreset('valid')">Load Valid v0.3.0 Config</span>
|
|
534
|
+
<span class="preset-btn" onclick="loadYamlPreset('stale')">Load Legacy Config (Triggers Warnings)</span>
|
|
535
|
+
<span class="preset-btn" onclick="loadYamlPreset('invalid')">Load Invalid Config</span>
|
|
536
|
+
</div>
|
|
537
|
+
|
|
538
|
+
<div class="form-group">
|
|
539
|
+
<textarea id="yamlInput" rows="18" oninput="validateYaml()" placeholder="Paste settings.yaml contents here..."></textarea>
|
|
540
|
+
</div>
|
|
541
|
+
|
|
542
|
+
<div class="verdict-header">Validator Output</div>
|
|
543
|
+
<div id="validatorResult" class="status-panel success">
|
|
544
|
+
YAML is empty. Load a preset or paste configurations to evaluate.
|
|
545
|
+
</div>
|
|
546
|
+
</div>
|
|
547
|
+
</div>
|
|
548
|
+
|
|
549
|
+
<!-- Right Column: Command Generator & Target Resolver -->
|
|
550
|
+
<div class="specs-col">
|
|
551
|
+
|
|
552
|
+
<!-- CLI Command Generator -->
|
|
553
|
+
<div class="glass-card">
|
|
554
|
+
<h2>
|
|
555
|
+
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><title>Icon</title><polyline points="4 17 10 11 4 5"></polyline><line x1="12" y1="19" x2="20" y2="19"></line></svg>
|
|
556
|
+
CLI Command Generator
|
|
557
|
+
</h2>
|
|
558
|
+
<p>Interactively configure your target runtime and build a copy-pasteable command to register it in Clio Coder.</p>
|
|
559
|
+
|
|
560
|
+
<div class="form-row">
|
|
561
|
+
<div class="form-group">
|
|
562
|
+
<label for="cliId">Target ID (id)</label>
|
|
563
|
+
<input type="text" id="cliId" value="local-ollama" oninput="generateCommand()">
|
|
564
|
+
</div>
|
|
565
|
+
<div class="form-group">
|
|
566
|
+
<label for="cliRuntime">Runtime Descriptor</label>
|
|
567
|
+
<select id="cliRuntime" onchange="onCliRuntimeChange()">
|
|
568
|
+
<option value="ollama-native">ollama-native</option>
|
|
569
|
+
<option value="lmstudio-native">lmstudio-native</option>
|
|
570
|
+
<option value="llamacpp">llamacpp</option>
|
|
571
|
+
<option value="vllm">vllm</option>
|
|
572
|
+
<option value="openai-compat">openai-compat</option>
|
|
573
|
+
<option value="anthropic-compat">anthropic-compat</option>
|
|
574
|
+
<option value="google">google</option>
|
|
575
|
+
<option value="openai-codex">openai-codex</option>
|
|
576
|
+
<option value="anthropic-max">anthropic-max</option>
|
|
577
|
+
<option value="claude-sdk">claude-sdk</option>
|
|
578
|
+
</select>
|
|
579
|
+
</div>
|
|
580
|
+
</div>
|
|
581
|
+
|
|
582
|
+
<div class="form-row">
|
|
583
|
+
<div class="form-group">
|
|
584
|
+
<label for="cliUrl">Endpoint URL</label>
|
|
585
|
+
<input type="text" id="cliUrl" value="http://localhost:11434" oninput="generateCommand()">
|
|
586
|
+
</div>
|
|
587
|
+
<div class="form-group">
|
|
588
|
+
<label for="cliModel">Model ID</label>
|
|
589
|
+
<input type="text" id="cliModel" value="qwen2.5-coder:14b" oninput="generateCommand()">
|
|
590
|
+
</div>
|
|
591
|
+
</div>
|
|
592
|
+
|
|
593
|
+
<div class="form-row">
|
|
594
|
+
<div class="form-group">
|
|
595
|
+
<label for="cliContext">Context Window (Override)</label>
|
|
596
|
+
<input type="number" id="cliContext" value="" placeholder="Default" oninput="generateCommand()">
|
|
597
|
+
</div>
|
|
598
|
+
<div class="form-group">
|
|
599
|
+
<label for="cliMaxTokens">Max Output Tokens</label>
|
|
600
|
+
<input type="number" id="cliMaxTokens" value="" placeholder="Default" oninput="generateCommand()">
|
|
601
|
+
</div>
|
|
602
|
+
</div>
|
|
603
|
+
|
|
604
|
+
<div class="checkbox-group">
|
|
605
|
+
<input type="checkbox" id="cliReasoning" checked onchange="generateCommand()">
|
|
606
|
+
<label for="cliReasoning">Enable reasoning capability override (<code>--reasoning true</code>)</label>
|
|
607
|
+
</div>
|
|
608
|
+
|
|
609
|
+
<div class="checkbox-group">
|
|
610
|
+
<input type="checkbox" id="cliSetOrch" checked onchange="generateCommand()">
|
|
611
|
+
<label for="cliSetOrch">Set as main orchestrator target (<code>--set-orchestrator</code>)</label>
|
|
612
|
+
</div>
|
|
613
|
+
|
|
614
|
+
<div class="checkbox-group">
|
|
615
|
+
<input type="checkbox" id="cliSetFleet" checked onchange="generateCommand()">
|
|
616
|
+
<label for="cliSetFleet">Set as default fleet worker target (<code>--set-fleet-default</code>)</label>
|
|
617
|
+
</div>
|
|
618
|
+
|
|
619
|
+
<div class="verdict-header">Generated CLI Command</div>
|
|
620
|
+
<div class="code-block-wrapper">
|
|
621
|
+
<button type="button" class="copy-btn" onclick="copyCliText()">Copy</button>
|
|
622
|
+
<pre class="code-output" id="cliCommandOutput">clio-coder configure ...</pre>
|
|
623
|
+
</div>
|
|
624
|
+
</div>
|
|
625
|
+
|
|
626
|
+
<!-- Target Resolver Dashboard -->
|
|
627
|
+
<div class="glass-card">
|
|
628
|
+
<h2>
|
|
629
|
+
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><title>Icon</title><path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"></path><polyline points="3.27 6.96 12 12.01 20.73 6.96"></polyline><line x1="12" y1="22.08" x2="12" y2="12"></line></svg>
|
|
630
|
+
Resolved Capabilities Dashboard
|
|
631
|
+
</h2>
|
|
632
|
+
<p>Clio blends user targets, probe results, and model catalogs to form the resolved capabilities below:</p>
|
|
633
|
+
|
|
634
|
+
<div class="form-group">
|
|
635
|
+
<label>Simulated Resolved Target: <span id="dashIdText" style="color:var(--color-cyan); font-family:var(--font-mono)">local-ollama</span></label>
|
|
636
|
+
<div class="cap-badge-grid" id="dashBadges">
|
|
637
|
+
<span class="cap-badge active">C: Chat</span>
|
|
638
|
+
<span class="cap-badge active">T: Tools</span>
|
|
639
|
+
<span class="cap-badge active">R: Reasoning</span>
|
|
640
|
+
<span class="cap-badge inactive">V: Vision</span>
|
|
641
|
+
<span class="cap-badge inactive">E: Embeddings</span>
|
|
642
|
+
<span class="cap-badge inactive">K: Rerank</span>
|
|
643
|
+
<span class="cap-badge inactive">F: FIM</span>
|
|
644
|
+
</div>
|
|
645
|
+
</div>
|
|
646
|
+
|
|
647
|
+
<div class="form-row" style="margin-top:1rem;">
|
|
648
|
+
<div>
|
|
649
|
+
<span style="font-size:0.75rem; color:var(--text-muted); display:block;">Effective Context Limit</span>
|
|
650
|
+
<span style="font-size:1.1rem; font-weight:700; color:#fff;" id="dashContextText">32,768 tokens</span>
|
|
651
|
+
</div>
|
|
652
|
+
<div>
|
|
653
|
+
<span style="font-size:0.75rem; color:var(--text-muted); display:block;">Max Output Tokens</span>
|
|
654
|
+
<span style="font-size:1.1rem; font-weight:700; color:#fff;" id="dashMaxTokensText">2,048 tokens</span>
|
|
655
|
+
</div>
|
|
656
|
+
</div>
|
|
657
|
+
</div>
|
|
658
|
+
|
|
659
|
+
</div>
|
|
660
|
+
|
|
661
|
+
</div>
|
|
662
|
+
</main>
|
|
663
|
+
|
|
664
|
+
<!-- TAB 2: TECHNICAL REFERENCE -->
|
|
665
|
+
<main class="tab-pane" id="pane-reference">
|
|
666
|
+
<div class="glass-card">
|
|
667
|
+
<h2>Clio Coder Configuration Specification</h2>
|
|
668
|
+
|
|
669
|
+
<div class="alert-tip">
|
|
670
|
+
<strong>Interactive Spec Available:</strong> Use the <strong>Interactive Config Studio</strong> tab above to validate YAML schemas, resolve targets, and generate CLI configurations.
|
|
671
|
+
</div>
|
|
672
|
+
|
|
673
|
+
<p>Clio Coder is target-first: chat and fleet dispatch resolve through configured targets in <code>settings.yaml</code>, not through provider-specific ad hoc flags. Chat, print, and fleet dispatch targets are all HTTP/native/pi-ai-backed runtimes.</p>
|
|
674
|
+
<p>Source of truth: <code>src/core/defaults.ts</code>, <code>src/core/config.ts</code>, <code>src/domains/providers/**</code>, <code>src/cli/configure.ts</code>, <code>src/cli/targets.ts</code>, and <code>src/cli/auth.ts</code>.</p>
|
|
675
|
+
|
|
676
|
+
<h3 style="margin: 1.5rem 0 0.5rem 0; color:#fff;">State Locations</h3>
|
|
677
|
+
<table class="ref-table">
|
|
678
|
+
<thead>
|
|
679
|
+
<tr>
|
|
680
|
+
<th>Environment Variable</th>
|
|
681
|
+
<th>Effect</th>
|
|
682
|
+
</tr>
|
|
683
|
+
</thead>
|
|
684
|
+
<tbody>
|
|
685
|
+
<tr>
|
|
686
|
+
<td><code>CLIO_CODER_HOME</code></td>
|
|
687
|
+
<td>Single-tree override: config at <code>$CLIO_CODER_HOME/config</code>, data at <code>$CLIO_CODER_HOME/data</code>, state at <code>$CLIO_CODER_HOME/state</code>, and cache at <code>$CLIO_CODER_HOME/cache</code>.</td>
|
|
688
|
+
</tr>
|
|
689
|
+
<tr>
|
|
690
|
+
<td><code>CLIO_CODER_CONFIG_DIR</code></td>
|
|
691
|
+
<td>Overrides config directory only. Default config directory is platform-specific (e.g. <code>~/.config/clio-coder</code> on Linux).</td>
|
|
692
|
+
</tr>
|
|
693
|
+
<tr>
|
|
694
|
+
<td><code>CLIO_CODER_DATA_DIR</code></td>
|
|
695
|
+
<td>Overrides data directory only. Contains durable artifacts such as memory, evidence, and evals.</td>
|
|
696
|
+
</tr>
|
|
697
|
+
<tr>
|
|
698
|
+
<td><code>CLIO_CODER_STATE_DIR</code></td>
|
|
699
|
+
<td>Overrides state directory only. Contains sessions, audit logs, receipts, runs.json, recent models, install metadata, interviews, and scratch output.</td>
|
|
700
|
+
</tr>
|
|
701
|
+
<tr>
|
|
702
|
+
<td><code>CLIO_CODER_CACHE_DIR</code></td>
|
|
703
|
+
<td>Overrides cache directory only.</td>
|
|
704
|
+
</tr>
|
|
705
|
+
</tbody>
|
|
706
|
+
</table>
|
|
707
|
+
|
|
708
|
+
<h3 style="margin: 1.5rem 0 0.5rem 0; color:#fff;">Autonomy Dial</h3>
|
|
709
|
+
<p>Clio v0.3.0 uses the <code>autonomy</code> dial for immediate execution, approvals, and auto-denials. Settings are validated directly against the current schema; <code>clio-coder doctor --fix</code> does not transform removed keys into this shape.</p>
|
|
710
|
+
<ul style="margin-left: 2rem; margin-bottom: 1rem; font-size: 0.925rem; color: var(--text-muted);">
|
|
711
|
+
<li style="margin-bottom: 0.3rem;"><strong><code>read-only</code></strong>: Clio inspects and answers. Write/execute tools are auto-denied.</li>
|
|
712
|
+
<li style="margin-bottom: 0.3rem;"><strong><code>suggest</code></strong>: Every mutating action parks for operator confirmation.</li>
|
|
713
|
+
<li style="margin-bottom: 0.3rem;"><strong><code>auto-edit</code></strong>: Workspace writes and recognized commands execute; unrecognized bash prompts.</li>
|
|
714
|
+
<li style="margin-bottom: 0.3rem;"><strong><code>full-auto</code></strong>: Bash commands run without prompting. The safety net remains active.</li>
|
|
715
|
+
</ul>
|
|
716
|
+
|
|
717
|
+
<h3 style="margin: 1.5rem 0 0.5rem 0; color:#fff;">First-Run Target Setup</h3>
|
|
718
|
+
<p>Clio works on checked-out code repositories. First register a target and set it as orchestrator:</p>
|
|
719
|
+
<pre><code># Register local Ollama target
|
|
720
|
+
clio-coder configure \
|
|
721
|
+
--id local-ollama \
|
|
722
|
+
--runtime ollama-native \
|
|
723
|
+
--url http://localhost:11434 \
|
|
724
|
+
--model qwen2.5-coder:14b \
|
|
725
|
+
--set-orchestrator \
|
|
726
|
+
--set-fleet-default
|
|
727
|
+
|
|
728
|
+
# Probe registered targets and models
|
|
729
|
+
clio-coder targets --probe
|
|
730
|
+
clio-coder models --target local-ollama
|
|
731
|
+
clio-coder</code></pre>
|
|
732
|
+
|
|
733
|
+
<h3 style="margin: 1.5rem 0 0.5rem 0; color:#fff;">Live Routing vs Saved Defaults</h3>
|
|
734
|
+
<p>Routing properties (<code>orchestrator.*</code>, <code>workers.default.*</code>) in <code>settings.yaml</code> are <strong>defaults</strong> that seed a TUI session on launch. Once running, Alt+L or <code>/model</code> modifications only apply to the current active terminal session and are serialized back for next-session setups without affecting other concurrent running TUI instances.</p>
|
|
735
|
+
<p>Writes from multiple processes are synchronized under an advisory lock file (<code>settings.yaml.lock</code>) and saved atomically.</p>
|
|
736
|
+
|
|
737
|
+
<h3 style="margin: 1.5rem 0 0.5rem 0; color:#fff;">Measured Dispatch Activation</h3>
|
|
738
|
+
<p>The <code>routing</code> block is a separate fail-closed activation boundary. Joint route selection becomes active only when both the execution role and posture are explicitly listed; empty lists keep the resolver in shadow mode. Agent automation requires exact <code>{agentId, executionRole}</code> pairs under <code>routing.agentAutomation.activeAgentRoles</code>. Manual pins never drift, and hard constraints remove candidates before ranking.</p>
|
|
739
|
+
</div>
|
|
740
|
+
</main>
|
|
741
|
+
|
|
742
|
+
<footer>
|
|
743
|
+
<p>Clio Coder Configuration Specification Dashboard • Version 0.3.0</p>
|
|
744
|
+
</footer>
|
|
745
|
+
</div>
|
|
746
|
+
|
|
747
|
+
<script>
|
|
748
|
+
// Tab switching
|
|
749
|
+
function switchTab(tabId) {
|
|
750
|
+
document.querySelectorAll('.tab-btn').forEach(btn => { btn.classList.remove('active'); });
|
|
751
|
+
document.querySelectorAll('.tab-pane').forEach(pane => { pane.classList.remove('active'); });
|
|
752
|
+
|
|
753
|
+
if (tabId === 'interactive') {
|
|
754
|
+
document.querySelector('.tab-btn:nth-child(1)').classList.add('active');
|
|
755
|
+
document.getElementById('pane-interactive').classList.add('active');
|
|
756
|
+
} else {
|
|
757
|
+
document.querySelector('.tab-btn:nth-child(2)').classList.add('active');
|
|
758
|
+
document.getElementById('pane-reference').classList.add('active');
|
|
759
|
+
}
|
|
760
|
+
}
|
|
761
|
+
|
|
762
|
+
// YAML sample datasets
|
|
763
|
+
const sampleValid = `version: 1
|
|
764
|
+
identity: clio
|
|
765
|
+
autonomy: auto-edit
|
|
766
|
+
|
|
767
|
+
targets:
|
|
768
|
+
- id: local-ollama
|
|
769
|
+
runtime: ollama-native
|
|
770
|
+
url: http://localhost:11434
|
|
771
|
+
defaultModel: qwen2.5-coder:14b
|
|
772
|
+
capabilities:
|
|
773
|
+
reasoning: true
|
|
774
|
+
contextWindow: 32768
|
|
775
|
+
maxTokens: 2048
|
|
776
|
+
|
|
777
|
+
orchestrator:
|
|
778
|
+
target: local-ollama
|
|
779
|
+
model: qwen2.5-coder:14b
|
|
780
|
+
thinkingLevel: off
|
|
781
|
+
|
|
782
|
+
workers:
|
|
783
|
+
default:
|
|
784
|
+
target: local-ollama
|
|
785
|
+
model: qwen2.5-coder:14b
|
|
786
|
+
thinkingLevel: off
|
|
787
|
+
profiles: {}
|
|
788
|
+
maxRetries: 2
|
|
789
|
+
resilienceCooldownMs: 15000
|
|
790
|
+
|
|
791
|
+
routing:
|
|
792
|
+
activeRoles: []
|
|
793
|
+
activePostures: []
|
|
794
|
+
agentAutomation:
|
|
795
|
+
activeAgentRoles: []
|
|
796
|
+
|
|
797
|
+
budget:
|
|
798
|
+
sessionCeilingUsd: 5
|
|
799
|
+
concurrency: auto
|
|
800
|
+
|
|
801
|
+
compaction:
|
|
802
|
+
auto: true
|
|
803
|
+
threshold: 0.8
|
|
804
|
+
excludeLastTurns: 6
|
|
805
|
+
|
|
806
|
+
retry:
|
|
807
|
+
enabled: true
|
|
808
|
+
maxRetries: 3
|
|
809
|
+
baseDelayMs: 2000
|
|
810
|
+
maxDelayMs: 60000`;
|
|
811
|
+
|
|
812
|
+
const sampleStale = `version: 1
|
|
813
|
+
identity: clio
|
|
814
|
+
# LEGACY: defaultMode is no longer part of the schema
|
|
815
|
+
defaultMode: default
|
|
816
|
+
|
|
817
|
+
targets:
|
|
818
|
+
- id: local-llamacpp
|
|
819
|
+
runtime: llamacpp
|
|
820
|
+
url: http://localhost:8080
|
|
821
|
+
defaultModel: qwen-coder-32b
|
|
822
|
+
|
|
823
|
+
orchestrator:
|
|
824
|
+
target: local-llamacpp
|
|
825
|
+
model: qwen-coder-32b
|
|
826
|
+
|
|
827
|
+
state:
|
|
828
|
+
recentModels:
|
|
829
|
+
- qwen-coder-32b
|
|
830
|
+
|
|
831
|
+
compaction:
|
|
832
|
+
thresholds:
|
|
833
|
+
warning: 0.7
|
|
834
|
+
critical: 0.9`;
|
|
835
|
+
|
|
836
|
+
const sampleInvalid = `version: 2 # Error: version must be exactly 1
|
|
837
|
+
identity: clio
|
|
838
|
+
autonomy: high-autonomy # Error: invalid autonomy value
|
|
839
|
+
|
|
840
|
+
targets:
|
|
841
|
+
- id: "" # Error: Target ID cannot be empty
|
|
842
|
+
runtime: unknown-runner # Error: invalid runtime identifier
|
|
843
|
+
url: localhost:8080
|
|
844
|
+
|
|
845
|
+
orchestrator:
|
|
846
|
+
target: local-none # Warning: orchestrator targets an unregistered target ID`;
|
|
847
|
+
|
|
848
|
+
// Load YAML presets
|
|
849
|
+
function loadYamlPreset(presetType) {
|
|
850
|
+
const input = document.getElementById('yamlInput');
|
|
851
|
+
if (presetType === 'valid') input.value = sampleValid;
|
|
852
|
+
else if (presetType === 'stale') input.value = sampleStale;
|
|
853
|
+
else input.value = sampleInvalid;
|
|
854
|
+
validateYaml();
|
|
855
|
+
}
|
|
856
|
+
|
|
857
|
+
// YAML Schema validation engine
|
|
858
|
+
function validateYaml() {
|
|
859
|
+
const val = document.getElementById('yamlInput').value;
|
|
860
|
+
const output = document.getElementById('validatorResult');
|
|
861
|
+
|
|
862
|
+
if (!val.trim()) {
|
|
863
|
+
output.className = 'status-panel warning';
|
|
864
|
+
output.innerText = 'YAML is empty. Load a preset or paste configurations to evaluate.';
|
|
865
|
+
return;
|
|
866
|
+
}
|
|
867
|
+
|
|
868
|
+
// Simple scanning
|
|
869
|
+
const lines = val.split('\n');
|
|
870
|
+
const errors = [];
|
|
871
|
+
const warnings = [];
|
|
872
|
+
const targetIds = [];
|
|
873
|
+
|
|
874
|
+
let _version = null;
|
|
875
|
+
let _autonomy = null;
|
|
876
|
+
let orchestratorTarget = null;
|
|
877
|
+
|
|
878
|
+
lines.forEach((line, idx) => {
|
|
879
|
+
const trimmed = line.trim();
|
|
880
|
+
if (!trimmed || trimmed.startsWith('#')) return;
|
|
881
|
+
|
|
882
|
+
const parts = trimmed.split(':');
|
|
883
|
+
if (parts.length >= 2) {
|
|
884
|
+
const key = parts[0].trim();
|
|
885
|
+
const restVal = parts.slice(1).join(':').trim();
|
|
886
|
+
const cleanVal = restVal.split('#')[0].trim().replace(/['"]/g, '');
|
|
887
|
+
|
|
888
|
+
// Check version
|
|
889
|
+
if (key === 'version') {
|
|
890
|
+
_version = cleanVal;
|
|
891
|
+
if (cleanVal !== '1') {
|
|
892
|
+
errors.push(`[Line ${idx+1}] Schema version must be exactly 1 (found "${cleanVal}").`);
|
|
893
|
+
}
|
|
894
|
+
}
|
|
895
|
+
|
|
896
|
+
// Check autonomy
|
|
897
|
+
if (key === 'autonomy') {
|
|
898
|
+
_autonomy = cleanVal;
|
|
899
|
+
const validAutonomies = ['read-only', 'suggest', 'auto-edit', 'full-auto'];
|
|
900
|
+
if (!validAutonomies.includes(cleanVal)) {
|
|
901
|
+
errors.push(`[Line ${idx+1}] "autonomy" must be one of: read-only | suggest | auto-edit | full-auto (found "${cleanVal}").`);
|
|
902
|
+
}
|
|
903
|
+
}
|
|
904
|
+
|
|
905
|
+
// Flag stale fields
|
|
906
|
+
if (key === 'defaultMode') {
|
|
907
|
+
warnings.push(`[Line ${idx+1}] Removed key "defaultMode" found. Delete it and set the required current fields explicitly.`);
|
|
908
|
+
}
|
|
909
|
+
if (key === 'state') {
|
|
910
|
+
warnings.push(`[Line ${idx+1}] Legacy runtime state found in settings.yaml. Current Clio stores recent models under the state directory.`);
|
|
911
|
+
}
|
|
912
|
+
if (key === 'thresholds') {
|
|
913
|
+
warnings.push(`[Line ${idx+1}] Legacy compaction thresholds block found. Use compaction.threshold with a single numeric pressure value.`);
|
|
914
|
+
}
|
|
915
|
+
|
|
916
|
+
// Targets parsing
|
|
917
|
+
if (key === 'id' && line.includes('- id')) {
|
|
918
|
+
if (!cleanVal) {
|
|
919
|
+
errors.push(`[Line ${idx+1}] Target "id" cannot be empty.`);
|
|
920
|
+
} else {
|
|
921
|
+
targetIds.push(cleanVal);
|
|
922
|
+
}
|
|
923
|
+
}
|
|
924
|
+
|
|
925
|
+
if (key === 'runtime') {
|
|
926
|
+
const validRuntimes = ['ollama-native', 'lmstudio-native', 'llamacpp', 'vllm', 'sglang', 'openai-compat', 'anthropic-compat', 'google', 'openai', 'anthropic', 'bedrock', 'mistral', 'openrouter', 'lemonade'];
|
|
927
|
+
if (!validRuntimes.includes(cleanVal)) {
|
|
928
|
+
errors.push(`[Line ${idx+1}] Unknown runtime "${cleanVal}". Valid options include: ollama-native, llamacpp, openai-compat, etc.`);
|
|
929
|
+
}
|
|
930
|
+
}
|
|
931
|
+
|
|
932
|
+
// Orchestrator target checking
|
|
933
|
+
if (key === 'target' && (lines[idx-1] && lines[idx-1].includes('orchestrator:'))) {
|
|
934
|
+
orchestratorTarget = cleanVal;
|
|
935
|
+
}
|
|
936
|
+
}
|
|
937
|
+
});
|
|
938
|
+
|
|
939
|
+
// Target references check
|
|
940
|
+
if (orchestratorTarget && targetIds.length > 0) {
|
|
941
|
+
if (!targetIds.includes(orchestratorTarget)) {
|
|
942
|
+
warnings.push(`Orchestrator points to target ID "${orchestratorTarget}", which is not declared under targets.`);
|
|
943
|
+
}
|
|
944
|
+
}
|
|
945
|
+
|
|
946
|
+
// Display validation status
|
|
947
|
+
if (errors.length > 0) {
|
|
948
|
+
output.className = 'status-panel error';
|
|
949
|
+
output.innerHTML = `<strong>Schema Errors Found (${errors.length}):</strong><ul style="margin-left:1.5rem; margin-top:0.5rem;">` +
|
|
950
|
+
errors.map(err => `<li>${err}</li>`).join('') + `</ul>`;
|
|
951
|
+
} else if (warnings.length > 0) {
|
|
952
|
+
output.className = 'status-panel warning';
|
|
953
|
+
output.innerHTML = `<strong>YAML is syntactically correct, but contains warnings:</strong><ul style="margin-left:1.5rem; margin-top:0.5rem;">` +
|
|
954
|
+
warnings.map(warn => `<li>${warn}</li>`).join('') + `</ul>`;
|
|
955
|
+
} else {
|
|
956
|
+
output.className = 'status-panel success';
|
|
957
|
+
output.innerHTML = `<strong>Validation Success:</strong> settings.yaml is structurally valid and fully conforms to the Clio Coder v0.3.0 schema settings constraints.`;
|
|
958
|
+
}
|
|
959
|
+
}
|
|
960
|
+
|
|
961
|
+
// Command Generator and Resolver logic
|
|
962
|
+
const runtimeSpecs = {
|
|
963
|
+
'ollama-native': { port: '11434', cLimit: 32768, tLimit: 2048, r: true, badges: ['chat', 'tools', 'reasoning'] },
|
|
964
|
+
'lmstudio-native': { port: '1234', cLimit: 16384, tLimit: 1024, r: true, badges: ['chat', 'tools', 'reasoning'] },
|
|
965
|
+
'llamacpp': { port: '8080', cLimit: 131072, tLimit: 4096, r: false, badges: ['chat', 'tools'] },
|
|
966
|
+
'vllm': { port: '8000', cLimit: 65536, tLimit: 2048, r: false, badges: ['chat', 'tools'] },
|
|
967
|
+
'openai-compat': { port: '5000', cLimit: 8192, tLimit: 1024, r: false, badges: ['chat'] },
|
|
968
|
+
'anthropic-compat': { port: '8000', cLimit: 16384, tLimit: 2048, r: false, badges: ['chat'] },
|
|
969
|
+
'openai-codex': { port: '', cLimit: 272000, tLimit: 8192, r: true, badges: ['chat', 'tools', 'vision'] },
|
|
970
|
+
'anthropic-max': { port: '', cLimit: 200000, tLimit: 8192, r: true, badges: ['chat', 'tools', 'vision'] },
|
|
971
|
+
'claude-sdk': { port: '', cLimit: 200000, tLimit: 8192, r: true, badges: ['chat', 'tools', 'vision'] },
|
|
972
|
+
'google': { port: '', cLimit: 1048576, tLimit: 8192, r: true, badges: ['chat', 'tools', 'vision'] }
|
|
973
|
+
};
|
|
974
|
+
|
|
975
|
+
function onCliRuntimeChange() {
|
|
976
|
+
const runtime = document.getElementById('cliRuntime').value;
|
|
977
|
+
const urlInput = document.getElementById('cliUrl');
|
|
978
|
+
const modelInput = document.getElementById('cliModel');
|
|
979
|
+
const spec = runtimeSpecs[runtime];
|
|
980
|
+
|
|
981
|
+
if (spec) {
|
|
982
|
+
if (spec.port) {
|
|
983
|
+
urlInput.value = `http://localhost:${spec.port}`;
|
|
984
|
+
} else {
|
|
985
|
+
urlInput.value = runtime === 'openai-codex' ? 'https://api.openai.com/v1' :
|
|
986
|
+
runtime === 'anthropic-max' ? 'https://api.anthropic.com/v1' :
|
|
987
|
+
runtime === 'claude-sdk' ? 'https://api.anthropic.com/v1' :
|
|
988
|
+
'https://api.gemini.google.com/v1';
|
|
989
|
+
}
|
|
990
|
+
|
|
991
|
+
modelInput.value = runtime === 'openai-codex' ? 'gpt-5.4' :
|
|
992
|
+
runtime === 'anthropic-max' ? 'claude-sonnet-5' :
|
|
993
|
+
runtime === 'claude-sdk' ? 'sonnet' :
|
|
994
|
+
runtime === 'google' ? 'gemini-1.5-pro' :
|
|
995
|
+
'qwen2.5-coder:14b';
|
|
996
|
+
}
|
|
997
|
+
generateCommand();
|
|
998
|
+
}
|
|
999
|
+
|
|
1000
|
+
function generateCommand() {
|
|
1001
|
+
const id = document.getElementById('cliId').value.trim();
|
|
1002
|
+
const runtime = document.getElementById('cliRuntime').value;
|
|
1003
|
+
const url = document.getElementById('cliUrl').value.trim();
|
|
1004
|
+
const model = document.getElementById('cliModel').value.trim();
|
|
1005
|
+
const context = document.getElementById('cliContext').value;
|
|
1006
|
+
const maxTokens = document.getElementById('cliMaxTokens').value;
|
|
1007
|
+
const reasoning = document.getElementById('cliReasoning').checked;
|
|
1008
|
+
const setOrch = document.getElementById('cliSetOrch').checked;
|
|
1009
|
+
const setFleet = document.getElementById('cliSetFleet').checked;
|
|
1010
|
+
|
|
1011
|
+
let cmd = `clio-coder configure \\\n --id ${id} \\\n --runtime ${runtime} \\\n --url ${url} \\\n --model ${model}`;
|
|
1012
|
+
|
|
1013
|
+
if (context) cmd += ` \\\n --context-window ${context}`;
|
|
1014
|
+
if (maxTokens) cmd += ` \\\n --max-tokens ${maxTokens}`;
|
|
1015
|
+
if (reasoning) cmd += ` \\\n --reasoning true`;
|
|
1016
|
+
if (setOrch) cmd += ` \\\n --set-orchestrator`;
|
|
1017
|
+
if (setFleet) cmd += ` \\\n --set-fleet-default`;
|
|
1018
|
+
|
|
1019
|
+
document.getElementById('cliCommandOutput').innerText = cmd;
|
|
1020
|
+
|
|
1021
|
+
// Update Resolver Dashboard
|
|
1022
|
+
document.getElementById('dashIdText').innerText = id;
|
|
1023
|
+
const spec = runtimeSpecs[runtime];
|
|
1024
|
+
if (spec) {
|
|
1025
|
+
// Badges update
|
|
1026
|
+
const badgeGrid = document.getElementById('dashBadges');
|
|
1027
|
+
badgeGrid.innerHTML = '';
|
|
1028
|
+
|
|
1029
|
+
const allBadges = [
|
|
1030
|
+
{ key: 'chat', label: 'C: Chat' },
|
|
1031
|
+
{ key: 'tools', label: 'T: Tools' },
|
|
1032
|
+
{ key: 'reasoning', label: 'R: Reasoning' },
|
|
1033
|
+
{ key: 'vision', label: 'V: Vision' },
|
|
1034
|
+
{ key: 'embeddings', label: 'E: Embeddings' },
|
|
1035
|
+
{ key: 'rerank', label: 'K: Rerank' },
|
|
1036
|
+
{ key: 'fim', label: 'F: FIM' }
|
|
1037
|
+
];
|
|
1038
|
+
|
|
1039
|
+
allBadges.forEach(b => {
|
|
1040
|
+
let isActive = false;
|
|
1041
|
+
if (b.key === 'reasoning') isActive = reasoning || spec.badges.includes('reasoning');
|
|
1042
|
+
else isActive = spec.badges.includes(b.key);
|
|
1043
|
+
|
|
1044
|
+
const badgeEl = document.createElement('span');
|
|
1045
|
+
badgeEl.className = `cap-badge ${isActive ? 'active' : 'inactive'}`;
|
|
1046
|
+
badgeEl.innerText = b.label;
|
|
1047
|
+
badgeGrid.appendChild(badgeEl);
|
|
1048
|
+
});
|
|
1049
|
+
|
|
1050
|
+
// Limits update
|
|
1051
|
+
const finalCtx = context ? parseInt(context) : spec.cLimit;
|
|
1052
|
+
const finalMax = maxTokens ? parseInt(maxTokens) : spec.tLimit;
|
|
1053
|
+
|
|
1054
|
+
document.getElementById('dashContextText').innerText = finalCtx.toLocaleString() + ' tokens';
|
|
1055
|
+
document.getElementById('dashMaxTokensText').innerText = finalMax.toLocaleString() + ' tokens';
|
|
1056
|
+
}
|
|
1057
|
+
}
|
|
1058
|
+
|
|
1059
|
+
function copyCliText() {
|
|
1060
|
+
const text = document.getElementById('cliCommandOutput').innerText;
|
|
1061
|
+
navigator.clipboard.writeText(text).then(() => {
|
|
1062
|
+
const btn = document.querySelector('.copy-btn');
|
|
1063
|
+
btn.innerText = 'Copied!';
|
|
1064
|
+
setTimeout(() => { btn.innerText = 'Copy'; }, 1500);
|
|
1065
|
+
});
|
|
1066
|
+
}
|
|
1067
|
+
|
|
1068
|
+
window.loadYamlPreset = loadYamlPreset;
|
|
1069
|
+
window.copyCliText = copyCliText;
|
|
1070
|
+
window.switchTab = switchTab;
|
|
1071
|
+
|
|
1072
|
+
// Initialize
|
|
1073
|
+
window.onload = () => {
|
|
1074
|
+
document.getElementById('yamlInput').value = sampleValid;
|
|
1075
|
+
validateYaml();
|
|
1076
|
+
onCliRuntimeChange();
|
|
1077
|
+
};
|
|
1078
|
+
</script>
|
|
1079
|
+
</body>
|
|
1080
|
+
</html>
|