@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,850 @@
|
|
|
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 Architecture 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
|
+
/* Layout divisions */
|
|
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
|
+
/* Interactive Directory Tree */
|
|
262
|
+
.tree-wrapper {
|
|
263
|
+
background: rgba(9, 13, 22, 0.6);
|
|
264
|
+
border: 1px solid var(--border-card);
|
|
265
|
+
border-radius: 8px;
|
|
266
|
+
padding: 1rem;
|
|
267
|
+
font-family: var(--font-mono);
|
|
268
|
+
font-size: 0.875rem;
|
|
269
|
+
height: 280px;
|
|
270
|
+
overflow-y: auto;
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
.tree-node {
|
|
274
|
+
margin-left: 1.5rem;
|
|
275
|
+
cursor: pointer;
|
|
276
|
+
padding: 0.15rem 0.35rem;
|
|
277
|
+
border-radius: 4px;
|
|
278
|
+
display: flex;
|
|
279
|
+
align-items: center;
|
|
280
|
+
gap: 0.4rem;
|
|
281
|
+
transition: background 0.15s;
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
.tree-node:hover {
|
|
285
|
+
background: rgba(255, 255, 255, 0.05);
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
.tree-node.selected {
|
|
289
|
+
background: rgba(0, 240, 255, 0.1);
|
|
290
|
+
border-left: 2px solid var(--color-cyan);
|
|
291
|
+
color: #fff;
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
.tree-node-icon {
|
|
295
|
+
color: var(--color-cyan);
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
/* Details Panel */
|
|
299
|
+
.details-panel {
|
|
300
|
+
min-height: 120px;
|
|
301
|
+
padding: 1rem;
|
|
302
|
+
border: 1px solid rgba(255, 255, 255, 0.05);
|
|
303
|
+
background: rgba(0,0,0,0.2);
|
|
304
|
+
border-radius: 8px;
|
|
305
|
+
margin-top: 1rem;
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
/* Form selectors */
|
|
309
|
+
.form-group {
|
|
310
|
+
margin-bottom: 1rem;
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
.form-group label {
|
|
314
|
+
display: block;
|
|
315
|
+
font-size: 0.8rem;
|
|
316
|
+
font-weight: 600;
|
|
317
|
+
color: var(--text-muted);
|
|
318
|
+
margin-bottom: 0.5rem;
|
|
319
|
+
text-transform: uppercase;
|
|
320
|
+
letter-spacing: 0.05em;
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
select {
|
|
324
|
+
width: 100%;
|
|
325
|
+
background: rgba(9, 13, 22, 0.7);
|
|
326
|
+
border: 1px solid var(--border-card);
|
|
327
|
+
border-radius: 8px;
|
|
328
|
+
padding: 0.65rem 0.85rem;
|
|
329
|
+
color: #fff;
|
|
330
|
+
font-family: var(--font-sans);
|
|
331
|
+
outline: none;
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
/* Invariants Checker result */
|
|
335
|
+
.verdict-badge {
|
|
336
|
+
border-radius: 6px;
|
|
337
|
+
padding: 0.75rem 1rem;
|
|
338
|
+
font-weight: 700;
|
|
339
|
+
margin-top: 1.25rem;
|
|
340
|
+
display: flex;
|
|
341
|
+
align-items: center;
|
|
342
|
+
gap: 0.5rem;
|
|
343
|
+
font-size: 0.9rem;
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
.verdict-badge.pass { background: rgba(16, 185, 129, 0.1); border: 1px solid rgba(16, 185, 129, 0.3); color: var(--color-emerald); }
|
|
347
|
+
.verdict-badge.fail { background: rgba(239, 68, 68, 0.1); border: 1px solid rgba(239, 68, 68, 0.3); color: var(--color-rose); }
|
|
348
|
+
|
|
349
|
+
/* SVG Flowchart */
|
|
350
|
+
.flow-interactive-svg {
|
|
351
|
+
width: 100%;
|
|
352
|
+
height: auto;
|
|
353
|
+
background: rgba(9, 13, 22, 0.5);
|
|
354
|
+
border: 1px solid var(--border-card);
|
|
355
|
+
border-radius: 12px;
|
|
356
|
+
padding: 1.5rem;
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
.flow-node {
|
|
360
|
+
cursor: pointer;
|
|
361
|
+
transition: fill 0.3s, stroke 0.3s;
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
.flow-node:hover rect {
|
|
365
|
+
fill: rgba(0, 240, 255, 0.15);
|
|
366
|
+
stroke: var(--color-cyan);
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
.flow-node.active rect {
|
|
370
|
+
fill: rgba(0, 240, 255, 0.25);
|
|
371
|
+
stroke: var(--color-cyan);
|
|
372
|
+
filter: drop-shadow(0 0 8px rgba(0, 240, 255, 0.3));
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
.flow-info-card {
|
|
376
|
+
margin-top: 1rem;
|
|
377
|
+
padding: 1rem;
|
|
378
|
+
background: rgba(0,0,0,0.3);
|
|
379
|
+
border: 1px solid var(--border-card);
|
|
380
|
+
border-radius: 8px;
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
/* Ref styling */
|
|
384
|
+
.ref-table {
|
|
385
|
+
width: 100%;
|
|
386
|
+
border-collapse: collapse;
|
|
387
|
+
margin: 1.5rem 0;
|
|
388
|
+
font-size: 0.9rem;
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
.ref-table th, .ref-table td {
|
|
392
|
+
padding: 0.65rem 0.85rem;
|
|
393
|
+
border: 1px solid var(--border-card);
|
|
394
|
+
text-align: left;
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
.ref-table th {
|
|
398
|
+
background: rgba(255,255,255,0.03);
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
pre {
|
|
402
|
+
background: rgba(0,0,0,0.3);
|
|
403
|
+
border: 1px solid var(--border-card);
|
|
404
|
+
border-radius: 8px;
|
|
405
|
+
padding: 1rem;
|
|
406
|
+
overflow-x: auto;
|
|
407
|
+
margin: 1rem 0;
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
code {
|
|
411
|
+
font-family: var(--font-mono);
|
|
412
|
+
font-size: 0.85rem;
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
/* Footer */
|
|
416
|
+
footer {
|
|
417
|
+
text-align: center;
|
|
418
|
+
margin-top: 4rem;
|
|
419
|
+
padding-top: 2rem;
|
|
420
|
+
border-top: 1px solid rgba(255, 255, 255, 0.05);
|
|
421
|
+
color: var(--text-dim);
|
|
422
|
+
font-size: 0.875rem;
|
|
423
|
+
}
|
|
424
|
+
</style>
|
|
425
|
+
</head>
|
|
426
|
+
<body>
|
|
427
|
+
<div class="container">
|
|
428
|
+
<header>
|
|
429
|
+
<div class="header-left">
|
|
430
|
+
<div class="header-logo">
|
|
431
|
+
<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>
|
|
432
|
+
<polygon points="12 2 2 7 12 12 22 7 12 2"></polygon>
|
|
433
|
+
<polyline points="2 17 12 22 22 17"></polyline>
|
|
434
|
+
<polyline points="2 12 12 17 22 12"></polyline>
|
|
435
|
+
</svg>
|
|
436
|
+
</div>
|
|
437
|
+
<div class="header-title-wrapper">
|
|
438
|
+
<h1>Clio Coder Architecture & Boundaries</h1>
|
|
439
|
+
<p>System codebase structure, boundary rules, and execution loops</p>
|
|
440
|
+
</div>
|
|
441
|
+
</div>
|
|
442
|
+
<div class="header-right">
|
|
443
|
+
<span class="version-badge">Clio Coder v0.3.0</span>
|
|
444
|
+
<a href="index.html" class="back-btn">
|
|
445
|
+
<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>
|
|
446
|
+
Dashboard Hub
|
|
447
|
+
</a>
|
|
448
|
+
</div>
|
|
449
|
+
</header>
|
|
450
|
+
|
|
451
|
+
<div class="tabs-nav">
|
|
452
|
+
<button type="button" class="tab-btn active" onclick="switchTab('interactive')">
|
|
453
|
+
<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>
|
|
454
|
+
Interactive Boundaries Inspector
|
|
455
|
+
</button>
|
|
456
|
+
<button type="button" class="tab-btn" onclick="switchTab('reference')">
|
|
457
|
+
<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>
|
|
458
|
+
Full Technical Reference
|
|
459
|
+
</button>
|
|
460
|
+
</div>
|
|
461
|
+
|
|
462
|
+
<!-- TAB 1: INTERACTIVE BOUNDARIES INSPECTOR -->
|
|
463
|
+
<main class="tab-pane active" id="pane-interactive">
|
|
464
|
+
<div class="blueprint-layout">
|
|
465
|
+
|
|
466
|
+
<!-- Left: Codebase tree explorer -->
|
|
467
|
+
<div class="specs-col">
|
|
468
|
+
<div class="glass-card">
|
|
469
|
+
<h2>
|
|
470
|
+
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><title>Icon</title><path d="M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z"></path></svg>
|
|
471
|
+
Source Directory Tree
|
|
472
|
+
</h2>
|
|
473
|
+
<p>Explore Clio Coder's directories. Select a directory to view its core responsibilities, invariants, and allowed boundary rules.</p>
|
|
474
|
+
|
|
475
|
+
<div class="tree-wrapper">
|
|
476
|
+
<div style="font-weight:700; margin-bottom:0.5rem;">src/</div>
|
|
477
|
+
<div class="tree-node selected" id="node-cli" onclick="selectNode('cli')">├── cli/</div>
|
|
478
|
+
<div class="tree-node" id="node-core" onclick="selectNode('core')">├── core/</div>
|
|
479
|
+
<div class="tree-node" id="node-domains" onclick="selectNode('domains')">├── domains/</div>
|
|
480
|
+
<div class="tree-node" id="node-engine" onclick="selectNode('engine')">├── engine/</div>
|
|
481
|
+
<div class="tree-node" id="node-entry" onclick="selectNode('entry')">├── entry/</div>
|
|
482
|
+
<div class="tree-node" id="node-interactive" onclick="selectNode('interactive')">├── interactive/</div>
|
|
483
|
+
<div class="tree-node" id="node-tools" onclick="selectNode('tools')">├── tools/</div>
|
|
484
|
+
<div class="tree-node" id="node-worker" onclick="selectNode('worker')">├── worker/</div>
|
|
485
|
+
<div class="tree-node" id="node-utils" onclick="selectNode('utils')">└── utils/</div>
|
|
486
|
+
</div>
|
|
487
|
+
|
|
488
|
+
<div class="details-panel" id="treeDetails">
|
|
489
|
+
<h3 id="nodeTitle" style="color:#fff; margin-bottom:0.5rem;">cli/</h3>
|
|
490
|
+
<p id="nodeDesc" style="font-size:0.9rem; color:var(--text-muted)">Contains clio-coder CLI subcommands, argument parsing, and headless execution configurations.</p>
|
|
491
|
+
<div id="nodeRule" style="font-size:0.8rem; color:var(--color-cyan); font-family:var(--font-mono); margin-top:0.5rem;">Rules: Subject to Rule 1 (no pi-ai imports).</div>
|
|
492
|
+
</div>
|
|
493
|
+
</div>
|
|
494
|
+
|
|
495
|
+
<!-- Boundary Checker -->
|
|
496
|
+
<div class="glass-card">
|
|
497
|
+
<h2>
|
|
498
|
+
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><title>Icon</title><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"></path></svg>
|
|
499
|
+
Boundary Rule Validator
|
|
500
|
+
</h2>
|
|
501
|
+
<p>Simulate imports to test project boundaries (Rules 1, 2, 3, 4, and 5 constraints).</p>
|
|
502
|
+
|
|
503
|
+
<div class="form-group">
|
|
504
|
+
<label for="importSource">Source File Path</label>
|
|
505
|
+
<select id="importSource" onchange="checkBoundaryRules()">
|
|
506
|
+
<option value="src/interactive/chat-loop.ts">src/interactive/chat-loop.ts</option>
|
|
507
|
+
<option value="src/worker/rehydrate.ts">src/worker/rehydrate.ts</option>
|
|
508
|
+
<option value="src/domains/safety/policy.ts">src/domains/safety/policy.ts</option>
|
|
509
|
+
<option value="src/domains/agents/registry.ts">src/domains/agents/registry.ts</option>
|
|
510
|
+
<option value="src/tools/bash.ts">src/tools/bash.ts</option>
|
|
511
|
+
</select>
|
|
512
|
+
</div>
|
|
513
|
+
|
|
514
|
+
<div class="form-group">
|
|
515
|
+
<label for="importTarget">Target Code Import</label>
|
|
516
|
+
<select id="importTarget" onchange="checkBoundaryRules()">
|
|
517
|
+
<option value="@earendil-works/pi-ai (value import)">@earendil-works/pi-ai (value import)</option>
|
|
518
|
+
<option value="src/domains/providers/plugins.ts (value import)">src/domains/providers/plugins.ts (value import)</option>
|
|
519
|
+
<option value="src/domains/safety/extension.ts (value import)">src/domains/safety/extension.ts (value import)</option>
|
|
520
|
+
<option value="src/domains/safety/policy-engine.ts (value import)">src/domains/safety/policy-engine.ts (value import)</option>
|
|
521
|
+
<option value="src/interactive/chat-panel.ts (value import)">src/interactive/chat-panel.ts (value import)</option>
|
|
522
|
+
<option value="src/entry/orchestrator.ts (value import)">src/entry/orchestrator.ts (value import)</option>
|
|
523
|
+
</select>
|
|
524
|
+
</div>
|
|
525
|
+
|
|
526
|
+
<div class="form-group">
|
|
527
|
+
<label for="importType">Import Type</label>
|
|
528
|
+
<select id="importType" onchange="checkBoundaryRules()">
|
|
529
|
+
<option value="value">Value Import (runtime import)</option>
|
|
530
|
+
<option value="type">Type-Only Import (compile-time erased)</option>
|
|
531
|
+
</select>
|
|
532
|
+
</div>
|
|
533
|
+
|
|
534
|
+
<div id="boundaryVerdict" class="verdict-badge pass">
|
|
535
|
+
PASSED
|
|
536
|
+
</div>
|
|
537
|
+
</div>
|
|
538
|
+
</div>
|
|
539
|
+
|
|
540
|
+
<!-- Right: Runtime flow -->
|
|
541
|
+
<div class="specs-col">
|
|
542
|
+
<div class="glass-card">
|
|
543
|
+
<h2>
|
|
544
|
+
<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>
|
|
545
|
+
Execution Flow Inspector
|
|
546
|
+
</h2>
|
|
547
|
+
<p>Click on the execution stages below to explore the data paths and invariants.</p>
|
|
548
|
+
|
|
549
|
+
<svg class="flow-interactive-svg" viewBox="0 0 320 380" fill="none" xmlns="http://www.w3.org/2000/svg"><title>Icon</title>
|
|
550
|
+
<defs>
|
|
551
|
+
<marker id="flow-arr" viewBox="0 0 10 10" refX="6" refY="5" markerWidth="6" markerHeight="6" orient="auto-start-reverse">
|
|
552
|
+
<path d="M 0 1.5 L 8 5 L 0 8.5 z" fill="var(--color-cyan)"/>
|
|
553
|
+
</marker>
|
|
554
|
+
</defs>
|
|
555
|
+
|
|
556
|
+
<!-- Node 1 -->
|
|
557
|
+
<g class="flow-node active" id="fnode-cli" onclick="selectFlow('cli')">
|
|
558
|
+
<rect x="70" y="10" width="180" height="40" rx="8" fill="rgba(255,255,255,0.02)" stroke="var(--border-card)" stroke-width="1.5"/>
|
|
559
|
+
<text x="160" y="34" fill="#fff" font-size="12" font-family="var(--font-sans)" text-anchor="middle" font-weight="600">CLI / Entrypoint</text>
|
|
560
|
+
</g>
|
|
561
|
+
|
|
562
|
+
<!-- Arrow 1 -> 2 -->
|
|
563
|
+
<path d="M 160 50 L 160 75" fill="none" stroke="var(--color-cyan)" stroke-width="1.5" marker-end="url(#flow-arr)"/>
|
|
564
|
+
|
|
565
|
+
<!-- Node 2 -->
|
|
566
|
+
<g class="flow-node" id="fnode-loader" onclick="selectFlow('loader')">
|
|
567
|
+
<rect x="70" y="85" width="180" height="40" rx="8" fill="rgba(255,255,255,0.02)" stroke="var(--border-card)" stroke-width="1.5"/>
|
|
568
|
+
<text x="160" y="109" fill="#fff" font-size="12" font-family="var(--font-sans)" text-anchor="middle" font-weight="600">Domain Loader</text>
|
|
569
|
+
</g>
|
|
570
|
+
|
|
571
|
+
<!-- Arrow 2 -> 3 -->
|
|
572
|
+
<path d="M 160 125 L 160 150" fill="none" stroke="var(--color-cyan)" stroke-width="1.5" marker-end="url(#flow-arr)"/>
|
|
573
|
+
|
|
574
|
+
<!-- Node 3 -->
|
|
575
|
+
<g class="flow-node" id="fnode-loop" onclick="selectFlow('loop')">
|
|
576
|
+
<rect x="70" y="160" width="180" height="40" rx="8" fill="rgba(255,255,255,0.02)" stroke="var(--border-card)" stroke-width="1.5"/>
|
|
577
|
+
<text x="160" y="184" fill="#fff" font-size="12" font-family="var(--font-sans)" text-anchor="middle" font-weight="600">Interactive Chat Loop</text>
|
|
578
|
+
</g>
|
|
579
|
+
|
|
580
|
+
<!-- Arrow 3 -> 4 -->
|
|
581
|
+
<path d="M 160 200 L 160 225" fill="none" stroke="var(--color-cyan)" stroke-width="1.5" marker-end="url(#flow-arr)"/>
|
|
582
|
+
|
|
583
|
+
<!-- Node 4 -->
|
|
584
|
+
<g class="flow-node" id="fnode-tools" onclick="selectFlow('tools')">
|
|
585
|
+
<rect x="70" y="235" width="180" height="40" rx="8" fill="rgba(255,255,255,0.02)" stroke="var(--border-card)" stroke-width="1.5"/>
|
|
586
|
+
<text x="160" y="259" fill="#fff" font-size="12" font-family="var(--font-sans)" text-anchor="middle" font-weight="600">Tool Registry & Safety Gate</text>
|
|
587
|
+
</g>
|
|
588
|
+
|
|
589
|
+
<!-- Arrow 4 -> 5 -->
|
|
590
|
+
<path d="M 160 275 L 160 300" fill="none" stroke="var(--color-cyan)" stroke-width="1.5" marker-end="url(#flow-arr)"/>
|
|
591
|
+
|
|
592
|
+
<!-- Node 5 -->
|
|
593
|
+
<g class="flow-node" id="fnode-engine" onclick="selectFlow('engine')">
|
|
594
|
+
<rect x="70" y="310" width="180" height="40" rx="8" fill="rgba(255,255,255,0.02)" stroke="var(--border-card)" stroke-width="1.5"/>
|
|
595
|
+
<text x="160" y="334" fill="#fff" font-size="12" font-family="var(--font-sans)" text-anchor="middle" font-weight="600">Engine / Providers Registry</text>
|
|
596
|
+
</g>
|
|
597
|
+
</svg>
|
|
598
|
+
|
|
599
|
+
<div class="flow-info-card" id="flowDetails">
|
|
600
|
+
<h4 id="flowTitle" style="color:var(--color-cyan)">CLI / Entrypoint</h4>
|
|
601
|
+
<p id="flowDesc" style="font-size:0.875rem; color:var(--text-muted); margin-top:0.25rem;">Initiates config and data trees, loads environment variables, parses arguments, and decides interactive TUI vs headless runs.</p>
|
|
602
|
+
</div>
|
|
603
|
+
</div>
|
|
604
|
+
</div>
|
|
605
|
+
|
|
606
|
+
</div>
|
|
607
|
+
</main>
|
|
608
|
+
|
|
609
|
+
<!-- TAB 2: TECHNICAL REFERENCE -->
|
|
610
|
+
<main class="tab-pane" id="pane-reference">
|
|
611
|
+
<div class="glass-card">
|
|
612
|
+
<h2>Clio Coder Architecture Specifications</h2>
|
|
613
|
+
<p>Clio Coder is an experimental, terminal-first coding harness for the CLIO ecosystem. Its architecture favors small, auditable subsystems over a single monolithic agent loop: CLI entry points, the interactive TUI, provider/runtime code, worker subprocesses, tools, and feature domains are kept separate so local-model support and scientific-software workflows can evolve without collapsing safety boundaries.</p>
|
|
614
|
+
|
|
615
|
+
<h3 style="margin: 1.5rem 0 0.5rem 0; color:#fff;">Source Code Layout</h3>
|
|
616
|
+
<table class="ref-table">
|
|
617
|
+
<thead>
|
|
618
|
+
<tr>
|
|
619
|
+
<th>Folder</th>
|
|
620
|
+
<th>Responsibility</th>
|
|
621
|
+
</tr>
|
|
622
|
+
</thead>
|
|
623
|
+
<tbody>
|
|
624
|
+
<tr>
|
|
625
|
+
<td><code>src/cli/</code></td>
|
|
626
|
+
<td>clio-coder subcommands, argument parsing, headless run modes</td>
|
|
627
|
+
</tr>
|
|
628
|
+
<tr>
|
|
629
|
+
<td><code>src/core/</code></td>
|
|
630
|
+
<td>config/state paths, event bus, defaults, shared primitives</td>
|
|
631
|
+
</tr>
|
|
632
|
+
<tr>
|
|
633
|
+
<td><code>src/domains/</code></td>
|
|
634
|
+
<td>feature domains loaded through manifests/contracts</td>
|
|
635
|
+
</tr>
|
|
636
|
+
<tr>
|
|
637
|
+
<td><code>src/engine/</code></td>
|
|
638
|
+
<td>pi-ai/provider boundary and runtime adapters</td>
|
|
639
|
+
</tr>
|
|
640
|
+
<tr>
|
|
641
|
+
<td><code>src/entry/</code></td>
|
|
642
|
+
<td>orchestrator bootstrap wiring</td>
|
|
643
|
+
</tr>
|
|
644
|
+
<tr>
|
|
645
|
+
<td><code>src/interactive/</code></td>
|
|
646
|
+
<td>TUI panels, overlays, key routing, dashboard, slash commands</td>
|
|
647
|
+
</tr>
|
|
648
|
+
<tr>
|
|
649
|
+
<td><code>src/tools/</code></td>
|
|
650
|
+
<td>built-in tool specs and registry admission boundary</td>
|
|
651
|
+
</tr>
|
|
652
|
+
<tr>
|
|
653
|
+
<td><code>src/worker/</code></td>
|
|
654
|
+
<td>subprocess worker entry/runtime rehydration</td>
|
|
655
|
+
</tr>
|
|
656
|
+
</tbody>
|
|
657
|
+
</table>
|
|
658
|
+
|
|
659
|
+
<h3 style="margin: 1.5rem 0 0.5rem 0; color:#fff;">Boundary Invariants</h3>
|
|
660
|
+
<p>Boundary rules are test-enforced by <code>npm run check:boundaries</code>. Five rules constrain dependency <strong>direction</strong>, never import <strong>form</strong>:</p>
|
|
661
|
+
<ul style="margin-left: 2rem; margin-bottom: 1rem; font-size: 0.925rem; color: var(--text-muted);">
|
|
662
|
+
<li style="margin-bottom: 0.5rem;"><strong>Rule 1: @earendil-works/* imports stay in <code>src/engine/**</code></strong><br>Only files under <code>src/engine/**</code> may import `@earendil-works/*` packages (value or type-only). Domains take erased shapes from `src/engine/types.ts`.</li>
|
|
663
|
+
<li style="margin-bottom: 0.5rem;"><strong>Rule 2: workers do not value-import domains except runtime rehydration</strong><br><code>src/worker/**</code> may not value-import `src/domains/**` except worker-safe provider runtime rehydration modules (plugins.ts, registry.ts, runtimes/builtins.ts).</li>
|
|
664
|
+
<li style="margin-bottom: 0.5rem;"><strong>Rule 3: domains do not import each other's `extension.ts`</strong><br>A file under <code>src/domains/<x>/**</code> must not import `src/domains/<y>/extension.ts` for `y != x`.</li>
|
|
665
|
+
<li style="margin-bottom: 0.5rem;"><strong>Rule 4: tool substrate is surface-agnostic</strong><br>Files under <code>src/tools/**</code> may never import <code>src/interactive/**</code> (value or type-only).</li>
|
|
666
|
+
<li style="margin-bottom: 0.5rem;"><strong>Rule 5: one-way entry point composition</strong><br>Turn modules in <code>src/interactive/turn-*.ts</code> and <code>chat-loop.ts</code> may never import <code>src/entry/**</code>.</li>
|
|
667
|
+
</ul>
|
|
668
|
+
|
|
669
|
+
<h3 style="margin: 1.5rem 0 0.5rem 0; color:#fff;">Command Verification</h3>
|
|
670
|
+
<pre><code>npm run check:boundaries # check boundaries rule suite
|
|
671
|
+
npm run typecheck # type check TS
|
|
672
|
+
npm run test # run tests suite
|
|
673
|
+
npm run build # compile build package</code></pre>
|
|
674
|
+
</div>
|
|
675
|
+
</main>
|
|
676
|
+
|
|
677
|
+
<footer>
|
|
678
|
+
<p>Clio Coder Architecture Spec Dashboard • Version 0.3.0</p>
|
|
679
|
+
</footer>
|
|
680
|
+
</div>
|
|
681
|
+
|
|
682
|
+
<script>
|
|
683
|
+
// Tab switching
|
|
684
|
+
function switchTab(tabId) {
|
|
685
|
+
document.querySelectorAll('.tab-btn').forEach(btn => { btn.classList.remove('active'); });
|
|
686
|
+
document.querySelectorAll('.tab-pane').forEach(pane => { pane.classList.remove('active'); });
|
|
687
|
+
|
|
688
|
+
if (tabId === 'interactive') {
|
|
689
|
+
document.querySelector('.tab-btn:nth-child(1)').classList.add('active');
|
|
690
|
+
document.getElementById('pane-interactive').classList.add('active');
|
|
691
|
+
} else {
|
|
692
|
+
document.querySelector('.tab-btn:nth-child(2)').classList.add('active');
|
|
693
|
+
document.getElementById('pane-reference').classList.add('active');
|
|
694
|
+
}
|
|
695
|
+
}
|
|
696
|
+
|
|
697
|
+
// Node data
|
|
698
|
+
const nodes = {
|
|
699
|
+
cli: {
|
|
700
|
+
title: "cli/",
|
|
701
|
+
desc: "Handles command line entrypoints, arguments parsing, doctor diagnostics, reset settings, and headless modes launcher.",
|
|
702
|
+
rule: "Subject to Rule 1: Cannot value-import @earendil-works/pi-* packages directly."
|
|
703
|
+
},
|
|
704
|
+
core: {
|
|
705
|
+
title: "core/",
|
|
706
|
+
desc: "Defines system-wide constants, data folders, local storage configurations, events bus, and bootstrap structures.",
|
|
707
|
+
rule: "Shared foundation. Cannot import domains or interactive layers."
|
|
708
|
+
},
|
|
709
|
+
domains: {
|
|
710
|
+
title: "domains/",
|
|
711
|
+
desc: "Hosts isolated subsystem code loaded via manifest files (safety, agents, providers, config, session, memory).",
|
|
712
|
+
rule: "Subject to Rule 3: Subsystems cannot import another subsystem's extension.ts."
|
|
713
|
+
},
|
|
714
|
+
engine: {
|
|
715
|
+
title: "engine/",
|
|
716
|
+
desc: "Houses the pi-ai adapters, provider wire wrappers, and runtime descriptors abstractions.",
|
|
717
|
+
rule: "Allowed to value-import @earendil-works/pi-* packages (Rule 1 entrypoint)."
|
|
718
|
+
},
|
|
719
|
+
entry: {
|
|
720
|
+
title: "entry/",
|
|
721
|
+
desc: "Coordinates startup, initializes the domain loader, starts interactive chat session or launches headless task runners.",
|
|
722
|
+
rule: "Bootstrapper surface."
|
|
723
|
+
},
|
|
724
|
+
interactive: {
|
|
725
|
+
title: "interactive/",
|
|
726
|
+
desc: "Responsible for terminal console drawings, ListOverlays, dashboard rendering, help screens, and user input editor.",
|
|
727
|
+
rule: "Contains TUI rendering layers. Cannot be value-imported by worker processes."
|
|
728
|
+
},
|
|
729
|
+
tools: {
|
|
730
|
+
title: "tools/",
|
|
731
|
+
desc: "Registers the built-in tool specifications, validates invocation schemas, runs middleware blocks, and shapes outputs.",
|
|
732
|
+
rule: "Unified tools gateway. Strictly code-gates model tool calls."
|
|
733
|
+
},
|
|
734
|
+
worker: {
|
|
735
|
+
title: "worker/",
|
|
736
|
+
desc: "Rehydrates serializable specifications and processes fleet-agent delegation tasks out of the main orchestrator loop.",
|
|
737
|
+
rule: "Subject to Rule 2: Cannot value-import src/domains/** except the rehydration subset."
|
|
738
|
+
},
|
|
739
|
+
utils: {
|
|
740
|
+
title: "utils/",
|
|
741
|
+
desc: "Common stateless helper functions (filesystem walks, logs, strings formatting, and date formatting).",
|
|
742
|
+
rule: "Utility layer. Cannot import any other system component."
|
|
743
|
+
}
|
|
744
|
+
};
|
|
745
|
+
|
|
746
|
+
function selectNode(id) {
|
|
747
|
+
document.querySelectorAll('.tree-node').forEach(n => { n.classList.remove('selected'); });
|
|
748
|
+
document.getElementById(`node-${id}`).classList.add('selected');
|
|
749
|
+
|
|
750
|
+
const data = nodes[id];
|
|
751
|
+
document.getElementById('nodeTitle').innerText = data.title;
|
|
752
|
+
document.getElementById('nodeDesc').innerText = data.desc;
|
|
753
|
+
document.getElementById('nodeRule').innerText = data.rule;
|
|
754
|
+
}
|
|
755
|
+
|
|
756
|
+
// Boundary Invariants logic
|
|
757
|
+
function checkBoundaryRules() {
|
|
758
|
+
const src = document.getElementById('importSource').value;
|
|
759
|
+
const target = document.getElementById('importTarget').value;
|
|
760
|
+
const type = document.getElementById('importType').value;
|
|
761
|
+
const verdictEl = document.getElementById('boundaryVerdict');
|
|
762
|
+
|
|
763
|
+
let passed = true;
|
|
764
|
+
let reason = "Import conforms to Clio Coder boundaries.";
|
|
765
|
+
|
|
766
|
+
// Rule 1 check: import of pi-ai outside src/engine
|
|
767
|
+
if (target.includes('@earendil-works/') && !src.startsWith('src/engine/')) {
|
|
768
|
+
passed = false;
|
|
769
|
+
reason = "Rule 1 Violation: Only files under src/engine/** may import @earendil-works/* packages.";
|
|
770
|
+
}
|
|
771
|
+
|
|
772
|
+
// Rule 2 check: workers value import of domains outside allowable rehydration modules
|
|
773
|
+
if (src.startsWith('src/worker/') && target.includes('src/domains/') && type === 'value') {
|
|
774
|
+
if (!target.includes('providers/plugins.ts') && !target.includes('providers/registry.ts') && !target.includes('providers/runtimes/builtins.ts')) {
|
|
775
|
+
passed = false;
|
|
776
|
+
reason = "Rule 2 Violation: src/worker/** may not value-import src/domains/** except provider rehydration modules.";
|
|
777
|
+
}
|
|
778
|
+
}
|
|
779
|
+
|
|
780
|
+
// Rule 3 check: domains importing other extension.ts
|
|
781
|
+
if (src.startsWith('src/domains/') && target.includes('extension.ts')) {
|
|
782
|
+
const srcSub = src.split('/')[2];
|
|
783
|
+
const tgtSub = target.split('/')[2];
|
|
784
|
+
if (srcSub !== tgtSub) {
|
|
785
|
+
passed = false;
|
|
786
|
+
reason = `Rule 3 Violation: src/domains/${srcSub}/** cannot import src/domains/${tgtSub}/extension.ts.`;
|
|
787
|
+
}
|
|
788
|
+
}
|
|
789
|
+
|
|
790
|
+
// Rule 4 check: tools importing interactive
|
|
791
|
+
if (src.startsWith('src/tools/') && target.includes('src/interactive/')) {
|
|
792
|
+
passed = false;
|
|
793
|
+
reason = "Rule 4 Violation: src/tools/** may not import src/interactive/** (the tool substrate is surface-agnostic).";
|
|
794
|
+
}
|
|
795
|
+
|
|
796
|
+
// Rule 5 check: chat loop turn modules importing entry
|
|
797
|
+
if ((src.includes('chat-loop.ts') || src.includes('turn-')) && target.includes('src/entry/')) {
|
|
798
|
+
passed = false;
|
|
799
|
+
reason = "Rule 5 Violation: Chat loop turn modules may not import src/entry/** (composition flows one way).";
|
|
800
|
+
}
|
|
801
|
+
|
|
802
|
+
if (passed) {
|
|
803
|
+
verdictEl.className = "verdict-badge pass";
|
|
804
|
+
verdictEl.innerHTML = `✓ Passed: ${reason}`;
|
|
805
|
+
} else {
|
|
806
|
+
verdictEl.className = "verdict-badge fail";
|
|
807
|
+
verdictEl.innerHTML = `✗ Violation: ${reason}`;
|
|
808
|
+
}
|
|
809
|
+
}
|
|
810
|
+
|
|
811
|
+
// Flow interactive logic
|
|
812
|
+
const flowStates = {
|
|
813
|
+
cli: {
|
|
814
|
+
title: "1. CLI / Entrypoint Boot",
|
|
815
|
+
desc: "System directories are loaded. Command-line flags are evaluated to route request to interactive chat TUI or a headless background worker."
|
|
816
|
+
},
|
|
817
|
+
loader: {
|
|
818
|
+
title: "2. Domain Loader Dependency Resolver",
|
|
819
|
+
desc: "Runs manifest.ts files in sequence. Safety rule packs are parsed, configuration files hot-reload, and prompt/tool adapters initialize."
|
|
820
|
+
},
|
|
821
|
+
loop: {
|
|
822
|
+
title: "3. Interactive Chat / Headless Loop",
|
|
823
|
+
desc: "Prompts compiler binds context files (CLIO-CODER.md), recent session history, and system-agent instructions. The target routing engine prepares parameters."
|
|
824
|
+
},
|
|
825
|
+
tools: {
|
|
826
|
+
title: "4. Tool Registry Gatekeeper",
|
|
827
|
+
desc: "Inspects incoming calls. Safety policy runs (checks path blocks, command recognition, and substitution rails). If passed, middleware hooks dispatch."
|
|
828
|
+
},
|
|
829
|
+
engine: {
|
|
830
|
+
title: "5. Engine Wire Transmission",
|
|
831
|
+
desc: "Bridges tool outputs to the designated target's runtime descriptor (Ollama, LM Studio, llamacpp, Bedrock, Vertex, Anthropic, SGLang, vLLM, OpenAI Codex, Anthropic Max, Claude SDK, Claude Code)."
|
|
832
|
+
}
|
|
833
|
+
};
|
|
834
|
+
|
|
835
|
+
function selectFlow(id) {
|
|
836
|
+
document.querySelectorAll('.flow-node').forEach(n => { n.classList.remove('active'); });
|
|
837
|
+
document.getElementById(`fnode-${id}`).classList.add('active');
|
|
838
|
+
|
|
839
|
+
const data = flowStates[id];
|
|
840
|
+
document.getElementById('flowTitle').innerText = data.title;
|
|
841
|
+
document.getElementById('flowDesc').innerText = data.desc;
|
|
842
|
+
}
|
|
843
|
+
|
|
844
|
+
// Init check
|
|
845
|
+
window.onload = () => {
|
|
846
|
+
checkBoundaryRules();
|
|
847
|
+
};
|
|
848
|
+
</script>
|
|
849
|
+
</body>
|
|
850
|
+
</html>
|