@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.
Files changed (226) hide show
  1. package/CHANGELOG.md +407 -0
  2. package/CODE_OF_CONDUCT.md +21 -0
  3. package/CONTRIBUTING.md +224 -0
  4. package/LICENSE +202 -0
  5. package/NOTICE +9 -0
  6. package/README.md +798 -0
  7. package/SECURITY.md +72 -0
  8. package/assets/clio-coder-logo-128.webp +0 -0
  9. package/damage-control-rules.yaml +419 -0
  10. package/dist/acp-UMLFVA3F.js +92 -0
  11. package/dist/agents-Q4MYPMUW.js +91 -0
  12. package/dist/auth-O6HYIJ6J.js +521 -0
  13. package/dist/chunk-262G75JS.js +35 -0
  14. package/dist/chunk-26BZQOAD.js +1281 -0
  15. package/dist/chunk-2J63S4SF.js +508 -0
  16. package/dist/chunk-3DANZDGR.js +717 -0
  17. package/dist/chunk-4UQA7NCT.js +29 -0
  18. package/dist/chunk-527KG6XR.js +497 -0
  19. package/dist/chunk-5LDRNKX2.js +1063 -0
  20. package/dist/chunk-5N2FG33Q.js +25 -0
  21. package/dist/chunk-67MTHP2E.js +135 -0
  22. package/dist/chunk-6CWDTGUC.js +20 -0
  23. package/dist/chunk-7BHLZB3A.js +2115 -0
  24. package/dist/chunk-7RBKDI66.js +348 -0
  25. package/dist/chunk-AMFR5YA3.js +541 -0
  26. package/dist/chunk-BBUH4VAA.js +1224 -0
  27. package/dist/chunk-BYEU76JP.js +899 -0
  28. package/dist/chunk-CLJ5HLUD.js +458 -0
  29. package/dist/chunk-D5YD55AR.js +116 -0
  30. package/dist/chunk-DXQNI4PC.js +61 -0
  31. package/dist/chunk-E3NYWENM.js +1004 -0
  32. package/dist/chunk-GNGDQYDU.js +34688 -0
  33. package/dist/chunk-GOTUR54M.js +9 -0
  34. package/dist/chunk-HBU5MTAM.js +41 -0
  35. package/dist/chunk-HMYNFFY4.js +28 -0
  36. package/dist/chunk-JPOWPFCU.js +1010 -0
  37. package/dist/chunk-JWHCJDCI.js +1215 -0
  38. package/dist/chunk-KBR4MZZR.js +41 -0
  39. package/dist/chunk-KKKPTZLM.js +93 -0
  40. package/dist/chunk-ME6DNWIU.js +66 -0
  41. package/dist/chunk-NI4DEJMC.js +88 -0
  42. package/dist/chunk-O4EJEDHO.js +659 -0
  43. package/dist/chunk-PIDUD6M2.js +31 -0
  44. package/dist/chunk-PS4PFJQP.js +29459 -0
  45. package/dist/chunk-QV47YRF4.js +48 -0
  46. package/dist/chunk-RQDWMVRB.js +279 -0
  47. package/dist/chunk-TFSSEXL6.js +136 -0
  48. package/dist/chunk-TKHQ4DGZ.js +8290 -0
  49. package/dist/chunk-TPOCL34A.js +2876 -0
  50. package/dist/chunk-UGYAX5YI.js +565 -0
  51. package/dist/chunk-UHTSULZS.js +461 -0
  52. package/dist/chunk-UU3R62TT.js +128 -0
  53. package/dist/chunk-UWIJNAOB.js +3906 -0
  54. package/dist/chunk-VOO7NYPP.js +914 -0
  55. package/dist/chunk-VPAWTYLY.js +117 -0
  56. package/dist/chunk-WD6AJM35.js +1216 -0
  57. package/dist/chunk-X3BR7HWV.js +115 -0
  58. package/dist/chunk-X3NE4WVW.js +120 -0
  59. package/dist/chunk-XNISANGE.js +1395 -0
  60. package/dist/chunk-XV4ZJ6ZM.js +3177 -0
  61. package/dist/cli/index.js +236 -0
  62. package/dist/clio-KIQ5SNDS.js +53 -0
  63. package/dist/components-JVHMUBEB.js +653 -0
  64. package/dist/config-ZFCDBMDC.js +372 -0
  65. package/dist/configure-G4E3A2PG.js +27 -0
  66. package/dist/context-CDXTP2MP.js +293 -0
  67. package/dist/context-E3KIFVXI.js +185 -0
  68. package/dist/context-clear-3F4PLXOS.js +102 -0
  69. package/dist/context-index-Q7YSYTR3.js +106 -0
  70. package/dist/docs-YIETIWZI.js +280 -0
  71. package/dist/doctor-M5HJJZOL.js +61 -0
  72. package/dist/domains/agents/builtins/architect.md +33 -0
  73. package/dist/domains/agents/builtins/coder.md +31 -0
  74. package/dist/domains/agents/builtins/context-bootstrap.md +38 -0
  75. package/dist/domains/agents/builtins/debugger.md +30 -0
  76. package/dist/domains/agents/builtins/documenter.md +31 -0
  77. package/dist/domains/agents/builtins/git-master.md +30 -0
  78. package/dist/domains/agents/builtins/provenance.md +30 -0
  79. package/dist/domains/agents/builtins/researcher.md +71 -0
  80. package/dist/domains/agents/builtins/scout.md +42 -0
  81. package/dist/domains/agents/builtins/tester.md +31 -0
  82. package/dist/domains/agents/builtins/verifier.md +30 -0
  83. package/dist/domains/agents/builtins/wiki-writer.md +41 -0
  84. package/dist/eval-B3KZZESM.js +2674 -0
  85. package/dist/evidence-V67CHM35.js +233 -0
  86. package/dist/evolve-YDZSUQYA.js +518 -0
  87. package/dist/extensions-SRG7XCAH.js +207 -0
  88. package/dist/fleet-CA2CRTVG.js +760 -0
  89. package/dist/fleet-preflight-CLIAX7YR.js +21 -0
  90. package/dist/init-2OZDJE2D.js +227 -0
  91. package/dist/memory-3PIQQAKX.js +207 -0
  92. package/dist/models-DY35XI7Y.js +237 -0
  93. package/dist/paths-5OMXW7Z4.js +57 -0
  94. package/dist/preload-KZVHET2B.js +11 -0
  95. package/dist/reset-PIFYNOS3.js +216 -0
  96. package/dist/run-3VSPP24F.js +735 -0
  97. package/dist/share-D36RQCXM.js +241 -0
  98. package/dist/skills-F2MRLELY.js +445 -0
  99. package/dist/skills-eval-E2ZTW4PL.js +932 -0
  100. package/dist/targets-DZMEZAH4.js +977 -0
  101. package/dist/trace-7NYCUI2J.js +250 -0
  102. package/dist/uninstall-AD3JWHBB.js +322 -0
  103. package/dist/upgrade-WYYBKGDY.js +301 -0
  104. package/dist/usage-ULIDAGFF.js +755 -0
  105. package/dist/version-ROZ6CZKH.js +16 -0
  106. package/dist/wiki-generate-PKFIX6OB.js +377 -0
  107. package/dist/worker/entry.js +1739 -0
  108. package/docs/README.md +93 -0
  109. package/docs/acp.md +120 -0
  110. package/docs/alcf-provider.md +72 -0
  111. package/docs/architecture.md +172 -0
  112. package/docs/artifact-versions.md +54 -0
  113. package/docs/built-in-agents.md +265 -0
  114. package/docs/capacity-and-scheduling.md +97 -0
  115. package/docs/commands-and-modes.md +554 -0
  116. package/docs/config-knobs-audit.md +115 -0
  117. package/docs/configuration-and-targets.md +812 -0
  118. package/docs/context-engine.md +236 -0
  119. package/docs/dispatch-architecture-rationale.md +126 -0
  120. package/docs/documentation-coverage.md +46 -0
  121. package/docs/documentation-guide.md +166 -0
  122. package/docs/environment-variables.md +105 -0
  123. package/docs/eval-runner.md +205 -0
  124. package/docs/evals-internal.md +298 -0
  125. package/docs/evidence-and-memory.md +243 -0
  126. package/docs/evolution.md +143 -0
  127. package/docs/exit-codes-and-output.md +74 -0
  128. package/docs/extensions-and-sharing.md +306 -0
  129. package/docs/fleet-demo-runbook.md +179 -0
  130. package/docs/fleet-dispatch.md +591 -0
  131. package/docs/glossary.md +75 -0
  132. package/docs/html/agents_blueprint.html +936 -0
  133. package/docs/html/alcf_blueprint.html +324 -0
  134. package/docs/html/architecture_blueprint.html +850 -0
  135. package/docs/html/commands_blueprint.html +794 -0
  136. package/docs/html/config_knobs_audit_blueprint.html +178 -0
  137. package/docs/html/configuration_blueprint.html +1080 -0
  138. package/docs/html/context_blueprint.html +603 -0
  139. package/docs/html/documentation_blueprint.html +832 -0
  140. package/docs/html/environment_blueprint.html +404 -0
  141. package/docs/html/eval_blueprint.html +743 -0
  142. package/docs/html/evals_internal_blueprint.html +190 -0
  143. package/docs/html/evolution_blueprint.html +674 -0
  144. package/docs/html/extensions_blueprint.html +2065 -0
  145. package/docs/html/fleet_dispatch_blueprint.html +286 -0
  146. package/docs/html/index.html +919 -0
  147. package/docs/html/lifecycle_blueprint.html +723 -0
  148. package/docs/html/memory_blueprint.html +699 -0
  149. package/docs/html/middleware_blueprint.html +664 -0
  150. package/docs/html/models_blueprint.html +2366 -0
  151. package/docs/html/observability_blueprint.html +683 -0
  152. package/docs/html/provider_adapter_blueprint.html +245 -0
  153. package/docs/html/safety_blueprint.html +1386 -0
  154. package/docs/html/shared.css +571 -0
  155. package/docs/html/shared.js +143 -0
  156. package/docs/html/skills_blueprint.html +671 -0
  157. package/docs/html/soak_blueprint.html +182 -0
  158. package/docs/html/tool_usage_blueprint.html +350 -0
  159. package/docs/html/tools_blueprint.html +2249 -0
  160. package/docs/html/trace_blueprint.html +235 -0
  161. package/docs/html/tui_design_blueprint.html +314 -0
  162. package/docs/html/validation_blueprint.html +961 -0
  163. package/docs/html/worker_dispatch_blueprint.html +231 -0
  164. package/docs/installation-and-lifecycle.md +308 -0
  165. package/docs/middleware-and-components.md +148 -0
  166. package/docs/model-catalog.md +189 -0
  167. package/docs/observability.md +233 -0
  168. package/docs/proactive-memory.md +452 -0
  169. package/docs/prompt-envelope-and-tools.md +142 -0
  170. package/docs/provider-adapter-cookbook.md +148 -0
  171. package/docs/release-cut-checklist.md +138 -0
  172. package/docs/safety-model.md +357 -0
  173. package/docs/scientific-validation.md +105 -0
  174. package/docs/session-lifecycle.md +156 -0
  175. package/docs/skills-marketplace.md +46 -0
  176. package/docs/tool-usage.md +527 -0
  177. package/docs/trace-store.md +132 -0
  178. package/docs/troubleshooting.md +33 -0
  179. package/docs/tui-design.md +239 -0
  180. package/docs/worker-dispatch-mechanics.md +242 -0
  181. package/package.json +132 -0
  182. package/skills/README.md +408 -0
  183. package/skills/git/commit-crafting/SKILL.md +79 -0
  184. package/skills/git/commit-crafting/evals.md +92 -0
  185. package/skills/git/create-pr/SKILL.md +116 -0
  186. package/skills/git/create-pr/evals.md +114 -0
  187. package/skills/git/investigate-issue/SKILL.md +139 -0
  188. package/skills/git/investigate-issue/evals.md +94 -0
  189. package/skills/git/resolve-merge-conflicts/SKILL.md +96 -0
  190. package/skills/git/resolve-merge-conflicts/evals.md +58 -0
  191. package/skills/git/review-changes/SKILL.md +103 -0
  192. package/skills/git/review-changes/evals.md +85 -0
  193. package/skills/git/worktree-create/SKILL.md +92 -0
  194. package/skills/git/worktree-create/evals.md +97 -0
  195. package/skills/git/worktree-create/references/worktree-setup.md +66 -0
  196. package/skills/git/worktree-merge/SKILL.md +95 -0
  197. package/skills/git/worktree-merge/evals.md +114 -0
  198. package/skills/skill-marketplace.json +261 -0
  199. package/skills/workflow/cut-it/SKILL.md +86 -0
  200. package/skills/workflow/cut-it/evals.md +42 -0
  201. package/src/domains/agents/builtins/architect.md +33 -0
  202. package/src/domains/agents/builtins/coder.md +31 -0
  203. package/src/domains/agents/builtins/context-bootstrap.md +38 -0
  204. package/src/domains/agents/builtins/debugger.md +30 -0
  205. package/src/domains/agents/builtins/documenter.md +31 -0
  206. package/src/domains/agents/builtins/git-master.md +30 -0
  207. package/src/domains/agents/builtins/provenance.md +30 -0
  208. package/src/domains/agents/builtins/researcher.md +71 -0
  209. package/src/domains/agents/builtins/scout.md +42 -0
  210. package/src/domains/agents/builtins/tester.md +31 -0
  211. package/src/domains/agents/builtins/verifier.md +30 -0
  212. package/src/domains/agents/builtins/wiki-writer.md +41 -0
  213. package/src/domains/agents/fleets/build-review.md +34 -0
  214. package/src/domains/agents/fleets/build-test.md +35 -0
  215. package/src/domains/agents/fleets/sdlc.md +86 -0
  216. package/src/domains/prompts/fragments/identity/clio-worker.md +11 -0
  217. package/src/domains/prompts/fragments/identity/clio.md +26 -0
  218. package/src/domains/prompts/fragments/operating/contract.md +64 -0
  219. package/src/domains/prompts/fragments/safety/auto-edit.md +14 -0
  220. package/src/domains/prompts/fragments/safety/full-auto.md +14 -0
  221. package/src/domains/prompts/fragments/safety/read-only.md +13 -0
  222. package/src/domains/prompts/fragments/safety/suggest.md +13 -0
  223. package/src/domains/prompts/fragments/wiki/page.md +75 -0
  224. package/src/domains/prompts/fragments/wiki/plan.md +48 -0
  225. package/src/domains/providers/models/cloud-models/alcf.yaml +40 -0
  226. package/src/domains/providers/models/local-models/clio-local-coding-targets.yaml +993 -0
@@ -0,0 +1,936 @@
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 Agent Fleet Blueprint (v0.3.0)</title>
7
+
8
+ <style>
9
+ :root {
10
+ --bg-dark: #090d16;
11
+ --bg-grid: rgba(255, 255, 255, 0.02);
12
+ --bg-card: rgba(13, 20, 38, 0.45);
13
+ --bg-card-hover: rgba(20, 30, 58, 0.6);
14
+ --border-card: rgba(255, 255, 255, 0.08);
15
+ --border-card-hover: rgba(0, 240, 255, 0.3);
16
+ --text-main: #f3f4f6;
17
+ --text-muted: #9ca3af;
18
+ --text-dim: #6b7280;
19
+
20
+ --color-cyan: #00f0ff;
21
+ --color-cyan-rgb: 0, 240, 255;
22
+ --color-purple: #bd00ff;
23
+ --color-purple-rgb: 189, 0, 255;
24
+ --color-emerald: #10b981;
25
+ --color-emerald-rgb: 16, 185, 129;
26
+ --color-amber: #f59e0b;
27
+ --color-amber-rgb: 245, 158, 11;
28
+ --color-rose: #ef4444;
29
+ --color-rose-rgb: 239, 68, 68;
30
+
31
+ --gradient-main: linear-gradient(135deg, var(--color-cyan), var(--color-purple));
32
+ --shadow-glow: 0 0 25px rgba(0, 240, 255, 0.15);
33
+ --font-sans: "Segoe UI", -apple-system, BlinkMacSystemFont, Roboto, "Helvetica Neue", Arial, sans-serif;
34
+ --font-mono: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, monospace;
35
+
36
+ --glass-blur: blur(12px);
37
+ }
38
+
39
+ * {
40
+ box-sizing: border-box;
41
+ margin: 0;
42
+ padding: 0;
43
+ }
44
+
45
+ body {
46
+ background-color: var(--bg-dark);
47
+ background-image:
48
+ radial-gradient(circle at 10% 20%, rgba(var(--color-cyan-rgb), 0.05) 0%, transparent 40%),
49
+ radial-gradient(circle at 90% 80%, rgba(var(--color-purple-rgb), 0.05) 0%, transparent 40%),
50
+ radial-gradient(circle at 50% 50%, #0d1527 0%, var(--bg-dark) 100%);
51
+ color: var(--text-main);
52
+ font-family: var(--font-sans);
53
+ min-height: 100vh;
54
+ line-height: 1.6;
55
+ overflow-x: hidden;
56
+ position: relative;
57
+ }
58
+
59
+ body::before {
60
+ content: '';
61
+ position: absolute;
62
+ inset: 0;
63
+ background-image: linear-gradient(var(--bg-grid) 1px, transparent 1px),
64
+ linear-gradient(90deg, var(--bg-grid) 1px, transparent 1px);
65
+ background-size: 40px 40px;
66
+ background-position: center top;
67
+ pointer-events: none;
68
+ z-index: 0;
69
+ opacity: 0.8;
70
+ }
71
+
72
+ .container {
73
+ max-width: 1400px;
74
+ margin: 0 auto;
75
+ padding: 2rem;
76
+ position: relative;
77
+ z-index: 1;
78
+ }
79
+
80
+ /* Header Styling */
81
+ header {
82
+ display: flex;
83
+ justify-content: space-between;
84
+ align-items: center;
85
+ margin-bottom: 2.5rem;
86
+ padding-bottom: 1.5rem;
87
+ border-bottom: 1px solid rgba(255, 255, 255, 0.05);
88
+ }
89
+
90
+ .header-left {
91
+ display: flex;
92
+ align-items: center;
93
+ gap: 1rem;
94
+ }
95
+
96
+ .header-logo {
97
+ display: inline-flex;
98
+ align-items: center;
99
+ justify-content: center;
100
+ width: 48px;
101
+ height: 48px;
102
+ background: rgba(255, 255, 255, 0.02);
103
+ border: 1px solid var(--border-card);
104
+ border-radius: 12px;
105
+ }
106
+
107
+ .header-logo svg {
108
+ width: 28px;
109
+ height: 28px;
110
+ }
111
+
112
+ .header-title-wrapper h1 {
113
+ font-size: 1.5rem;
114
+ font-weight: 800;
115
+ letter-spacing: -0.03em;
116
+ background: linear-gradient(to right, #ffffff, #c7d2fe, var(--color-cyan));
117
+ -webkit-background-clip: text;
118
+ -webkit-text-fill-color: transparent;
119
+ }
120
+
121
+ .header-title-wrapper p {
122
+ font-size: 0.825rem;
123
+ color: var(--text-muted);
124
+ }
125
+
126
+ .header-right {
127
+ display: flex;
128
+ align-items: center;
129
+ gap: 1rem;
130
+ }
131
+
132
+ .back-btn {
133
+ background: rgba(255, 255, 255, 0.03);
134
+ border: 1px solid var(--border-card);
135
+ color: var(--text-muted);
136
+ padding: 0.5rem 1rem;
137
+ border-radius: 8px;
138
+ font-size: 0.875rem;
139
+ font-weight: 600;
140
+ text-decoration: none;
141
+ display: inline-flex;
142
+ align-items: center;
143
+ gap: 0.5rem;
144
+ transition: all 0.2s;
145
+ }
146
+
147
+ .back-btn:hover {
148
+ background: rgba(255, 255, 255, 0.08);
149
+ color: var(--text-main);
150
+ border-color: rgba(var(--color-cyan-rgb), 0.3);
151
+ }
152
+
153
+ .version-badge {
154
+ background: rgba(0, 240, 255, 0.08);
155
+ border: 1px solid rgba(0, 240, 255, 0.25);
156
+ color: var(--color-cyan);
157
+ padding: 0.35rem 0.75rem;
158
+ border-radius: 50px;
159
+ font-size: 0.75rem;
160
+ font-weight: 600;
161
+ font-family: var(--font-mono);
162
+ }
163
+
164
+ /* Tabs Navigation */
165
+ .tabs-nav {
166
+ display: flex;
167
+ gap: 0.75rem;
168
+ margin-bottom: 2rem;
169
+ }
170
+
171
+ .tab-btn {
172
+ background: rgba(255, 255, 255, 0.03);
173
+ border: 1px solid var(--border-card);
174
+ color: var(--text-muted);
175
+ padding: 0.6rem 1.25rem;
176
+ border-radius: 8px;
177
+ font-size: 0.875rem;
178
+ font-weight: 600;
179
+ cursor: pointer;
180
+ display: flex;
181
+ align-items: center;
182
+ gap: 0.5rem;
183
+ transition: all 0.2s;
184
+ }
185
+
186
+ .tab-btn:hover {
187
+ background: rgba(255, 255, 255, 0.06);
188
+ color: var(--text-main);
189
+ }
190
+
191
+ .tab-btn.active {
192
+ background: var(--gradient-main);
193
+ color: #090d16;
194
+ border-color: transparent;
195
+ box-shadow: 0 4px 15px rgba(var(--color-cyan-rgb), 0.25);
196
+ }
197
+
198
+ /* Content Layout */
199
+ .tab-pane {
200
+ display: none;
201
+ animation: fadeIn 0.3s ease-out forwards;
202
+ }
203
+
204
+ .tab-pane.active {
205
+ display: block;
206
+ }
207
+
208
+ @keyframes fadeIn {
209
+ from { opacity: 0; transform: translateY(8px); }
210
+ to { opacity: 1; transform: translateY(0); }
211
+ }
212
+
213
+ /* Split Grid */
214
+ .blueprint-layout {
215
+ display: grid;
216
+ grid-template-columns: 1fr 1fr;
217
+ gap: 2rem;
218
+ align-items: start;
219
+ }
220
+
221
+ @media (max-width: 1100px) {
222
+ .blueprint-layout {
223
+ grid-template-columns: 1fr;
224
+ }
225
+ }
226
+
227
+ .glass-card {
228
+ background: var(--bg-card);
229
+ border: 1px solid var(--border-card);
230
+ border-radius: 16px;
231
+ padding: 1.75rem;
232
+ margin-bottom: 2rem;
233
+ backdrop-filter: var(--glass-blur);
234
+ box-shadow: 0 8px 32px 0 rgba(0, 0, 0, 0.3);
235
+ }
236
+
237
+ .glass-card h2 {
238
+ font-size: 1.25rem;
239
+ font-weight: 700;
240
+ color: #ffffff;
241
+ margin-bottom: 1.25rem;
242
+ display: flex;
243
+ align-items: center;
244
+ gap: 0.5rem;
245
+ border-bottom: 1px solid rgba(255, 255, 255, 0.05);
246
+ padding-bottom: 0.75rem;
247
+ }
248
+
249
+ .glass-card h2 svg {
250
+ width: 18px;
251
+ height: 18px;
252
+ color: var(--color-cyan);
253
+ }
254
+
255
+ .glass-card p {
256
+ font-size: 0.925rem;
257
+ color: var(--text-muted);
258
+ margin-bottom: 1rem;
259
+ }
260
+
261
+ /* Form selectors */
262
+ .form-group {
263
+ margin-bottom: 1rem;
264
+ }
265
+
266
+ .form-group label {
267
+ display: block;
268
+ font-size: 0.8rem;
269
+ font-weight: 600;
270
+ color: var(--text-muted);
271
+ margin-bottom: 0.5rem;
272
+ text-transform: uppercase;
273
+ letter-spacing: 0.05em;
274
+ }
275
+
276
+ .form-row {
277
+ display: grid;
278
+ grid-template-columns: 1fr 1fr;
279
+ gap: 1rem;
280
+ }
281
+
282
+ select, input, textarea {
283
+ width: 100%;
284
+ background: rgba(9, 13, 22, 0.7);
285
+ border: 1px solid var(--border-card);
286
+ border-radius: 8px;
287
+ padding: 0.65rem 0.85rem;
288
+ color: #fff;
289
+ font-family: var(--font-sans);
290
+ font-size: 0.9rem;
291
+ outline: none;
292
+ transition: all 0.2s;
293
+ }
294
+
295
+ select:focus, input:focus, textarea:focus {
296
+ border-color: var(--color-cyan);
297
+ box-shadow: 0 0 10px rgba(var(--color-cyan-rgb), 0.15);
298
+ }
299
+
300
+ textarea {
301
+ font-family: var(--font-mono);
302
+ font-size: 0.8rem;
303
+ resize: vertical;
304
+ }
305
+
306
+ .checkbox-list {
307
+ display: flex;
308
+ flex-wrap: wrap;
309
+ gap: 0.5rem;
310
+ margin-top: 0.5rem;
311
+ }
312
+
313
+ .checkbox-item {
314
+ display: flex;
315
+ align-items: center;
316
+ gap: 0.3rem;
317
+ background: rgba(255,255,255,0.03);
318
+ border: 1px solid var(--border-card);
319
+ padding: 0.35rem 0.6rem;
320
+ border-radius: 6px;
321
+ font-size: 0.8rem;
322
+ cursor: pointer;
323
+ }
324
+
325
+ .checkbox-item input {
326
+ width: auto;
327
+ }
328
+
329
+ /* Presets list */
330
+ .presets-list {
331
+ display: flex;
332
+ flex-wrap: wrap;
333
+ gap: 0.4rem;
334
+ margin-bottom: 1.25rem;
335
+ }
336
+
337
+ .preset-btn {
338
+ background: rgba(255, 255, 255, 0.03);
339
+ border: 1px solid var(--border-card);
340
+ color: var(--text-muted);
341
+ padding: 0.3rem 0.6rem;
342
+ border-radius: 4px;
343
+ font-size: 0.725rem;
344
+ cursor: pointer;
345
+ transition: all 0.2s;
346
+ }
347
+
348
+ .preset-btn:hover {
349
+ background: rgba(0, 240, 255, 0.08);
350
+ border-color: var(--color-cyan);
351
+ color: #fff;
352
+ }
353
+
354
+ /* Gates Output */
355
+ .gate-row {
356
+ background: rgba(0,0,0,0.2);
357
+ border: 1px solid rgba(255,255,255,0.05);
358
+ border-radius: 8px;
359
+ padding: 0.75rem 1rem;
360
+ margin-bottom: 0.75rem;
361
+ display: flex;
362
+ justify-content: space-between;
363
+ align-items: center;
364
+ }
365
+
366
+ .gate-info {
367
+ font-size: 0.875rem;
368
+ }
369
+
370
+ .gate-info strong {
371
+ display: block;
372
+ color: #fff;
373
+ }
374
+
375
+ .gate-info span {
376
+ font-size: 0.75rem;
377
+ color: var(--text-muted);
378
+ }
379
+
380
+ .gate-status {
381
+ font-weight: 700;
382
+ font-size: 0.8rem;
383
+ padding: 0.2rem 0.5rem;
384
+ border-radius: 4px;
385
+ text-transform: uppercase;
386
+ }
387
+
388
+ .gate-status.pass { background: rgba(16, 185, 129, 0.1); border: 1px solid rgba(16, 185, 129, 0.3); color: var(--color-emerald); }
389
+ .gate-status.fail { background: rgba(239, 68, 68, 0.1); border: 1px solid rgba(239, 68, 68, 0.3); color: var(--color-rose); }
390
+
391
+ /* Tables */
392
+ .ref-table {
393
+ width: 100%;
394
+ border-collapse: collapse;
395
+ margin: 1.5rem 0;
396
+ font-size: 0.9rem;
397
+ }
398
+
399
+ .ref-table th, .ref-table td {
400
+ padding: 0.65rem 0.85rem;
401
+ border: 1px solid var(--border-card);
402
+ text-align: left;
403
+ }
404
+
405
+ .ref-table th {
406
+ background: rgba(255,255,255,0.03);
407
+ }
408
+
409
+ .ref-table tr.shadow-agent td {
410
+ color: var(--text-dim);
411
+ }
412
+
413
+ /* Footer */
414
+ footer {
415
+ text-align: center;
416
+ margin-top: 4rem;
417
+ padding-top: 2rem;
418
+ border-top: 1px solid rgba(255, 255, 255, 0.05);
419
+ color: var(--text-dim);
420
+ font-size: 0.875rem;
421
+ }
422
+ </style>
423
+ </head>
424
+ <body>
425
+ <div class="container">
426
+ <header>
427
+ <div class="header-left">
428
+ <div class="header-logo">
429
+ <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>
430
+ <path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"></path>
431
+ <circle cx="9" cy="7" r="4"></circle>
432
+ <path d="M23 21v-2a4 4 0 0 0-3-3.87"></path>
433
+ <path d="M16 3.13a4 4 0 0 1 0 7.75"></path>
434
+ </svg>
435
+ </div>
436
+ <div class="header-title-wrapper">
437
+ <h1>Clio Coder Agent Fleet</h1>
438
+ <p>Dispatched worker recipes, dynamic catalogs, and dispatch admission gates</p>
439
+ </div>
440
+ </div>
441
+ <div class="header-right">
442
+ <span class="version-badge">Clio Coder v0.3.0</span>
443
+ <a href="index.html" class="back-btn">
444
+ <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>
445
+ Dashboard Hub
446
+ </a>
447
+ </div>
448
+ </header>
449
+
450
+ <div class="tabs-nav">
451
+ <button type="button" class="tab-btn active" onclick="switchTab('interactive')">
452
+ <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>
453
+ Interactive Recipe &amp; Dispatch Inspector
454
+ </button>
455
+ <button type="button" class="tab-btn" onclick="switchTab('reference')">
456
+ <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>
457
+ Full Technical Reference
458
+ </button>
459
+ </div>
460
+
461
+ <!-- TAB 1: INTERACTIVE -->
462
+ <main class="tab-pane active" id="pane-interactive">
463
+ <div class="blueprint-layout">
464
+
465
+ <!-- Left: Form inputs -->
466
+ <div class="specs-col">
467
+ <div class="glass-card">
468
+ <h2>
469
+ <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><title>Icon</title><path d="M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7"></path><path d="M18.5 2.5a2.121 2.121 0 1 1 3 3L12 15l-4 1 1-4 9.5-9.5z"></path></svg>
470
+ Agent Recipe Editor
471
+ </h2>
472
+ <p>Load a template or edit the YAML frontmatter. The validator compiles this into an AgentSpec.</p>
473
+
474
+ <div class="presets-list">
475
+ <span class="preset-btn" onclick="loadAgentPreset('coder')">Coder</span>
476
+ <span class="preset-btn" onclick="loadAgentPreset('architect')">Architect</span>
477
+ <span class="preset-btn" onclick="loadAgentPreset('verifier')">Verifier</span>
478
+ <span class="preset-btn" onclick="loadAgentPreset('scout')">Scout (Shadow)</span>
479
+ </div>
480
+
481
+ <div class="form-group">
482
+ <textarea id="recipeInput" rows="12" oninput="runInspection()"></textarea>
483
+ </div>
484
+
485
+ <div class="form-row">
486
+ <div class="form-group">
487
+ <label for="delegationType">Worker Target</label>
488
+ <select id="delegationType" onchange="runInspection()">
489
+ <option value="orchestrator">Interactive Local Orchestrator</option>
490
+ <option value="acp">External ACP Delegation Worker</option>
491
+ </select>
492
+ </div>
493
+ <div class="form-group">
494
+ <label for="orchestratorScope">Orchestrator Scope</label>
495
+ <input type="text" id="orchestratorScope" value="src/, tests/" oninput="runInspection()">
496
+ </div>
497
+ </div>
498
+
499
+ <div class="form-row">
500
+ <div class="form-group">
501
+ <label for="workerScope">Worker Scope</label>
502
+ <input type="text" id="workerScope" value="src/" oninput="runInspection()">
503
+ </div>
504
+ <div class="form-group">
505
+ <label>Target Capabilities</label>
506
+ <div class="checkbox-list">
507
+ <label class="checkbox-item"><input type="checkbox" id="cap-read" checked onchange="runInspection()"> read</label>
508
+ <label class="checkbox-item"><input type="checkbox" id="cap-write" checked onchange="runInspection()"> write</label>
509
+ <label class="checkbox-item"><input type="checkbox" id="cap-edit" checked onchange="runInspection()"> edit</label>
510
+ <label class="checkbox-item"><input type="checkbox" id="cap-git" checked onchange="runInspection()"> git</label>
511
+ <label class="checkbox-item"><input type="checkbox" id="cap-run" checked onchange="runInspection()"> verify</label>
512
+ <label class="checkbox-item"><input type="checkbox" id="cap-web" checked onchange="runInspection()"> web_fetch</label>
513
+ </div>
514
+ </div>
515
+ </div>
516
+ </div>
517
+ </div>
518
+
519
+ <!-- Right: Gates evaluation -->
520
+ <div class="specs-col">
521
+ <div class="glass-card">
522
+ <h2>
523
+ <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>
524
+ Dispatch Admission Gates
525
+ </h2>
526
+ <p>Clio's dispatch engine evaluates three core gates before deploying workers.</p>
527
+
528
+ <!-- Gate 1 -->
529
+ <div class="gate-row">
530
+ <div class="gate-info">
531
+ <strong>Gate 1: Tool Compatibility Check</strong>
532
+ <span id="gate1Desc">Comparing recipe tools against target capabilities</span>
533
+ </div>
534
+ <div class="gate-status pass" id="gate1Status">PASS</div>
535
+ </div>
536
+
537
+ <!-- Gate 2 -->
538
+ <div class="gate-row">
539
+ <div class="gate-info">
540
+ <strong>Gate 2: Action Class Capability Check</strong>
541
+ <span id="gate2Desc">Verifying allowed action classes</span>
542
+ </div>
543
+ <div class="gate-status pass" id="gate2Status">PASS</div>
544
+ </div>
545
+
546
+ <!-- Gate 3 -->
547
+ <div class="gate-row">
548
+ <div class="gate-info">
549
+ <strong>Gate 3: Scope Subset Validation</strong>
550
+ <span id="gate3Desc">Worker scope must be a subset of orchestrator's active scope</span>
551
+ </div>
552
+ <div class="gate-status pass" id="gate3Status">PASS</div>
553
+ </div>
554
+
555
+ <!-- Gate 4 (Security Shadow Restriction) -->
556
+ <div class="gate-row">
557
+ <div class="gate-info">
558
+ <strong>Gate 4: Shadow/Internal Safe Delegation</strong>
559
+ <span id="gate4Desc">Shadow/internal agents cannot run on external ACP workers</span>
560
+ </div>
561
+ <div class="gate-status pass" id="gate4Status">PASS</div>
562
+ </div>
563
+
564
+ <div class="verdict-header" style="margin-top:1.5rem;">Admission Verdict</div>
565
+ <div id="admissionCard" class="gate-row" style="padding:1.25rem; background:rgba(16, 185, 129, 0.08); border:1px solid rgba(16, 185, 129, 0.3)">
566
+ <div class="gate-info">
567
+ <strong id="verdictTitle" style="font-size:1.2rem; color:var(--color-emerald)">DISPATCH ALLOWED</strong>
568
+ <span id="verdictDetails">All admission gates checked and passed. Fleet agent rehydrated successfully.</span>
569
+ </div>
570
+ </div>
571
+ </div>
572
+ </div>
573
+
574
+ </div>
575
+ </main>
576
+
577
+ <!-- TAB 2: TECHNICAL REFERENCE -->
578
+ <main class="tab-pane" id="pane-reference">
579
+ <div class="glass-card">
580
+ <h2>Clio Coder Agent Registry Specifications</h2>
581
+ <p>Clio Coder dispatches focused fleet agents from Markdown recipes. Recipes are data files containing YAML frontmatter declarations and an instruction body.</p>
582
+
583
+ <h3 style="margin: 1.5rem 0 0.5rem 0; color:#fff;">Shipped Base Agents</h3>
584
+ <table class="ref-table">
585
+ <thead>
586
+ <tr>
587
+ <th>Agent ID</th>
588
+ <th>Primary Tools</th>
589
+ <th>Purpose</th>
590
+ <th>Capability</th>
591
+ <th>Latency</th>
592
+ </tr>
593
+ </thead>
594
+ <tbody>
595
+ <tr>
596
+ <td><code>architect</code></td>
597
+ <td>read, grep, find, ls, code_nav, git, artifact, context</td>
598
+ <td>Designs changes across boundaries, contracts, and validation gates.</td>
599
+ <td><code>artifact-write</code></td>
600
+ <td>deep</td>
601
+ </tr>
602
+ <tr>
603
+ <td><code>coder</code></td>
604
+ <td>read, write, edit, grep, find, ls, web_fetch, git, verify</td>
605
+ <td>Implements bounded code changes and behavior-preserving refactors.</td>
606
+ <td><code>workspace-edit</code></td>
607
+ <td>balanced</td>
608
+ </tr>
609
+ <tr>
610
+ <td><code>debugger</code></td>
611
+ <td>read, grep, find, ls, git, verify</td>
612
+ <td>Diagnoses failing code, tests, or receipts without making edits.</td>
613
+ <td><code>verification</code></td>
614
+ <td>balanced</td>
615
+ </tr>
616
+ <tr>
617
+ <td><code>documenter</code></td>
618
+ <td>read, write, edit, grep, find, ls, git, verify</td>
619
+ <td>Updates developer-facing docs, examples, and operational runbooks.</td>
620
+ <td><code>workspace-edit</code></td>
621
+ <td>balanced</td>
622
+ </tr>
623
+ <tr>
624
+ <td><code>git-master</code></td>
625
+ <td>read, write, edit, context, git, bash, grep, find, ls, code_nav</td>
626
+ <td>Executes bounded git operations end-to-end: commit crafting, branch and worktree lifecycle.</td>
627
+ <td><code>workspace-edit</code></td>
628
+ <td>balanced</td>
629
+ </tr>
630
+ <tr>
631
+ <td><code>tester</code></td>
632
+ <td>read, write, edit, grep, find, ls, git, verify</td>
633
+ <td>Adds focused deterministic tests for regressions and missing coverage.</td>
634
+ <td><code>workspace-edit</code></td>
635
+ <td>balanced</td>
636
+ </tr>
637
+ <tr>
638
+ <td><code>verifier</code></td>
639
+ <td>read, grep, find, ls, git, verify</td>
640
+ <td>Independently runs and reports test, lint, build, and release gates.</td>
641
+ <td><code>verification</code></td>
642
+ <td>fast</td>
643
+ </tr>
644
+ <tr>
645
+ <td><code>wiki-writer</code></td>
646
+ <td>read, write, edit, grep, find, ls, code_nav, context</td>
647
+ <td>Plans one repository wiki, or researches and writes one wiki page.</td>
648
+ <td><code>workspace-edit</code></td>
649
+ <td>balanced</td>
650
+ </tr>
651
+ </tbody>
652
+ </table>
653
+
654
+ <h3 style="margin: 1.5rem 0 0.5rem 0; color:#fff;">Shipped Shadow and Internal Helpers (Reserved/Hidden)</h3>
655
+ <table class="ref-table">
656
+ <thead>
657
+ <tr>
658
+ <th>Agent ID</th>
659
+ <th>Primary Tools</th>
660
+ <th>Purpose</th>
661
+ <th>Capability</th>
662
+ <th>Latency</th>
663
+ </tr>
664
+ </thead>
665
+ <tbody>
666
+ <tr class="shadow-agent">
667
+ <td><code>scout</code></td>
668
+ <td>read, grep, find, ls, context, code_nav, git</td>
669
+ <td>Shadow fast codebase reconnaissance, symbol mapping, and context.</td>
670
+ <td><code>read-only</code></td>
671
+ <td>fast</td>
672
+ </tr>
673
+ <tr class="shadow-agent">
674
+ <td><code>researcher</code></td>
675
+ <td>read, web_fetch, context</td>
676
+ <td>Shadow docs and external-source researcher for coding decisions.</td>
677
+ <td><code>read-only</code></td>
678
+ <td>deep</td>
679
+ </tr>
680
+ <tr class="shadow-agent">
681
+ <td><code>provenance</code></td>
682
+ <td>read, grep, find, ls, git</td>
683
+ <td>Shadow evidence, receipt, diff, and telemetry reader for handoffs.</td>
684
+ <td><code>read-only</code></td>
685
+ <td>balanced</td>
686
+ </tr>
687
+ <tr class="shadow-agent">
688
+ <td><code>context-bootstrap</code></td>
689
+ <td>read, grep, find, ls, context, code_nav</td>
690
+ <td>Internal agent behind `clio-coder context init` that parses repository and returns CLIO-CODER.md payload.</td>
691
+ <td><code>read-only</code></td>
692
+ <td>balanced</td>
693
+ </tr>
694
+ </tbody>
695
+ </table>
696
+
697
+ <h3 style="margin: 1.5rem 0 0.5rem 0; color:#fff;">Measured Agent Automation</h3>
698
+ <p><code>agent: auto</code> is advisory by default. Audience, authority, execution role, tools, skills, result contract, locality, target policy, and governance are hard filters that remove candidates before ranking. Active selection requires an exact <code>{agentId, executionRole}</code> entry in <code>routing.agentAutomation.activeAgentRoles</code> and a passing readiness report for that same pair; no ready candidate fails closed.</p>
699
+ <p>Scout escalation is typed and bounded. Grounded findings remain read-only evidence leads; a split recommendation carries strict subtasks that the coordinator validates into a new ExecutionPlan. Any read-only-to-editing transition requires authenticated plan approval or authority already granted by full-auto policy.</p>
700
+ </div>
701
+ </main>
702
+
703
+ <footer>
704
+ <p>Clio Coder Agent Catalog spec &bull; Version 0.3.0</p>
705
+ </footer>
706
+ </div>
707
+
708
+ <script>
709
+ // Tab switching
710
+ function switchTab(tabId) {
711
+ document.querySelectorAll('.tab-btn').forEach(btn => { btn.classList.remove('active'); });
712
+ document.querySelectorAll('.tab-pane').forEach(pane => { pane.classList.remove('active'); });
713
+
714
+ if (tabId === 'interactive') {
715
+ document.querySelector('.tab-btn:nth-child(1)').classList.add('active');
716
+ document.getElementById('pane-interactive').classList.add('active');
717
+ } else {
718
+ document.querySelector('.tab-btn:nth-child(2)').classList.add('active');
719
+ document.getElementById('pane-reference').classList.add('active');
720
+ }
721
+ }
722
+
723
+ const agentRecipes = {
724
+ coder: `---
725
+ name: Coder
726
+ description: Bounded code changes
727
+ tools: [read, edit, write, verify]
728
+ category: implement
729
+ capabilityClass: workspace-edit
730
+ latencyClass: balanced
731
+ audience: base
732
+ budget:
733
+ toolCalls: 50
734
+ readReserve: 5
735
+ synthesis: true
736
+ ---
737
+ You are Coder. Implement clean code changes...`,
738
+ architect: `---
739
+ name: Architect
740
+ description: Designs changes across boundaries
741
+ tools: [read, git, write]
742
+ category: plan
743
+ capabilityClass: artifact-write
744
+ latencyClass: deep
745
+ audience: base
746
+ ---
747
+ You are Architect. Outline architectural specifications...`,
748
+ verifier: `---
749
+ name: Verifier
750
+ description: Independently runs and reports test/lint gates
751
+ tools: [read, verify]
752
+ category: quality
753
+ capabilityClass: verification
754
+ latencyClass: fast
755
+ audience: base
756
+ ---
757
+ You are Verifier. Build and test verification paths...`,
758
+ scout: `---
759
+ name: Scout
760
+ description: Codebase reconnaissance
761
+ tools: [read, git]
762
+ category: explore
763
+ capabilityClass: read-only
764
+ latencyClass: fast
765
+ audience: shadow
766
+ budget:
767
+ toolCalls: 18
768
+ readReserve: 4
769
+ synthesis: true
770
+ ---
771
+ You are Scout. Map symbols and indices...`
772
+ };
773
+
774
+ function loadAgentPreset(id) {
775
+ document.getElementById('recipeInput').value = agentRecipes[id].trim();
776
+ runInspection();
777
+ }
778
+
779
+ // Parse frontmatter tags
780
+ function parseFrontmatter(text) {
781
+ const parsed = {
782
+ name: '',
783
+ tools: [],
784
+ audience: 'base',
785
+ capabilityClass: 'workspace-edit'
786
+ };
787
+
788
+ try {
789
+ const lines = text.split('\n');
790
+ let inYaml = false;
791
+ lines.forEach(line => {
792
+ const trimmed = line.trim();
793
+ if (trimmed === '---') {
794
+ inYaml = !inYaml;
795
+ return;
796
+ }
797
+ if (inYaml) {
798
+ const index = trimmed.indexOf(':');
799
+ if (index !== -1) {
800
+ const key = trimmed.substring(0, index).trim();
801
+ const val = trimmed.substring(index + 1).trim().replace(/['"[\]]/g, '');
802
+
803
+ if (key === 'name') parsed.name = val;
804
+ if (key === 'audience') parsed.audience = val;
805
+ if (key === 'capabilityClass') parsed.capabilityClass = val;
806
+ if (key === 'tools') {
807
+ parsed.tools = val.split(',').map(t => t.trim());
808
+ }
809
+ }
810
+ }
811
+ });
812
+ } catch(e) {}
813
+
814
+ return parsed;
815
+ }
816
+
817
+ // Inspect recipes and run gates
818
+ function runInspection() {
819
+ const text = document.getElementById('recipeInput').value;
820
+ const delegation = document.getElementById('delegationType').value;
821
+ const orchScopeStr = document.getElementById('orchestratorScope').value;
822
+ const wrkScopeStr = document.getElementById('workerScope').value;
823
+
824
+ const spec = parseFrontmatter(text);
825
+
826
+ // Evaluate capabilities checklist
827
+ const targetCaps = [];
828
+ if (document.getElementById('cap-read').checked) targetCaps.push('read');
829
+ if (document.getElementById('cap-write').checked) targetCaps.push('write');
830
+ if (document.getElementById('cap-edit').checked) targetCaps.push('edit');
831
+ if (document.getElementById('cap-git').checked) targetCaps.push('git');
832
+ if (document.getElementById('cap-run').checked) targetCaps.push('verify');
833
+ if (document.getElementById('cap-web').checked) targetCaps.push('web_fetch');
834
+
835
+ // ------------------------------------------------
836
+ // GATE 1: Tools Check
837
+ // ------------------------------------------------
838
+ let gate1Pass = true;
839
+ const unsupported = [];
840
+ spec.tools.forEach(t => {
841
+ if (!targetCaps.includes(t)) {
842
+ gate1Pass = false;
843
+ unsupported.push(t);
844
+ }
845
+ });
846
+ const g1Status = document.getElementById('gate1Status');
847
+ g1Status.innerText = gate1Pass ? 'PASS' : 'FAIL';
848
+ g1Status.className = `gate-status ${gate1Pass ? 'pass' : 'fail'}`;
849
+ document.getElementById('gate1Desc').innerText = gate1Pass ?
850
+ 'All recipe tools are supported by target capabilities.' :
851
+ `Unsupported tools: [${unsupported.join(', ')}]`;
852
+
853
+ // ------------------------------------------------
854
+ // GATE 2: Action Class Check
855
+ // ------------------------------------------------
856
+ const gate2Pass = true; // simplified demo check
857
+ const g2Status = document.getElementById('gate2Status');
858
+ g2Status.innerText = 'PASS';
859
+ g2Status.className = 'gate-status pass';
860
+
861
+ // ------------------------------------------------
862
+ // GATE 3: Scope Check
863
+ // ------------------------------------------------
864
+ const orchScopes = orchScopeStr.split(',').map(s => s.trim()).filter(Boolean);
865
+ const wrkScopes = wrkScopeStr.split(',').map(s => s.trim()).filter(Boolean);
866
+ let gate3Pass = true;
867
+ const invalidScopes = [];
868
+
869
+ wrkScopes.forEach(ws => {
870
+ // checks if ws is matched in orchScopes
871
+ let found = false;
872
+ orchScopes.forEach(os => {
873
+ if (ws.startsWith(os)) found = true;
874
+ });
875
+ if (!found) {
876
+ gate3Pass = false;
877
+ invalidScopes.push(ws);
878
+ }
879
+ });
880
+
881
+ const g3Status = document.getElementById('gate3Status');
882
+ g3Status.innerText = gate3Pass ? 'PASS' : 'FAIL';
883
+ g3Status.className = `gate-status ${gate3Pass ? 'pass' : 'fail'}`;
884
+ document.getElementById('gate3Desc').innerText = gate3Pass ?
885
+ "Worker scope resides inside orchestrator scope bounds." :
886
+ `Worker scope escapes orchestrator bounds: [${invalidScopes.join(', ')}]`;
887
+
888
+ // ------------------------------------------------
889
+ // GATE 4: Shadow/Internal Block
890
+ // ------------------------------------------------
891
+ let gate4Pass = true;
892
+ if (spec.audience === 'shadow' && delegation === 'acp') {
893
+ gate4Pass = false;
894
+ }
895
+ const g4Status = document.getElementById('gate4Status');
896
+ g4Status.innerText = gate4Pass ? 'PASS' : 'FAIL';
897
+ g4Status.className = `gate-status ${gate4Pass ? 'pass' : 'fail'}`;
898
+ document.getElementById('gate4Desc').innerText = gate4Pass ?
899
+ "No shadow/internal delegation conflicts detected." :
900
+ "Security Error: Shadow/internal agents cannot run on external ACP workers.";
901
+
902
+ // ------------------------------------------------
903
+ // OVERALL VERDICT
904
+ // ------------------------------------------------
905
+ const finalPass = gate1Pass && gate2Pass && gate3Pass && gate4Pass;
906
+ const vCard = document.getElementById('admissionCard');
907
+ const vTitle = document.getElementById('verdictTitle');
908
+ const vDetails = document.getElementById('verdictDetails');
909
+
910
+ if (finalPass) {
911
+ vCard.style.background = 'rgba(16, 185, 129, 0.08)';
912
+ vCard.style.borderColor = 'rgba(16, 185, 129, 0.3)';
913
+ vTitle.innerText = "DISPATCH ALLOWED";
914
+ vTitle.style.color = 'var(--color-emerald)';
915
+ vDetails.innerText = "All admission gates checked and passed. Fleet agent rehydrated successfully.";
916
+ } else {
917
+ vCard.style.background = 'rgba(239, 68, 68, 0.08)';
918
+ vCard.style.borderColor = 'rgba(239, 68, 68, 0.3)';
919
+ vTitle.innerText = "DISPATCH REJECTED";
920
+ vTitle.style.color = 'var(--color-rose)';
921
+
922
+ let details = "Failure summary: ";
923
+ if (!gate1Pass) details += "Missing target capabilities. ";
924
+ if (!gate3Pass) details += "Worker scope escapes orchestrator bounds. ";
925
+ if (!gate4Pass) details += "External ACP delegation block on shadow agents. ";
926
+ vDetails.innerText = details;
927
+ }
928
+ }
929
+
930
+ // Init
931
+ window.onload = () => {
932
+ loadAgentPreset('coder');
933
+ };
934
+ </script>
935
+ </body>
936
+ </html>