opencroc 1.8.0 → 1.8.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/index.js +1107 -49
- package/dist/cli/index.js.map +1 -1
- package/dist/index.d.ts +128 -1
- package/dist/index.js +548 -0
- package/dist/index.js.map +1 -1
- package/dist/web/dist/assets/main-Ccg3eDNK.js +1 -0
- package/dist/web/dist/assets/office-runtime-B3iNctxE.css +1 -0
- package/dist/web/dist/assets/office-runtime-BsCh82Pj.js +183 -0
- package/dist/web/dist/assets/pixel-page-3BYGm7dH.js +470 -0
- package/dist/web/dist/assets/react-vendor-C8RhVn0h.js +49 -0
- package/dist/web/dist/assets/studio-page-BInoyoV2.css +1 -0
- package/dist/web/dist/assets/studio-page-o3SCvE_v.js +351 -0
- package/dist/web/dist/assets/three-addons-BdrPp04O.js +470 -0
- package/dist/web/dist/assets/three-core-CsxM1PCY.js +4057 -0
- package/dist/web/dist/index.html +15 -0
- package/dist/web/index.html +11 -572
- package/dist/web/public/botreview/char_0.png +0 -0
- package/dist/web/public/botreview/char_1.png +0 -0
- package/dist/web/public/botreview/char_2.png +0 -0
- package/dist/web/public/botreview/coffee-machine.gif +0 -0
- package/dist/web/public/botreview/server.gif +0 -0
- package/dist/web/public/botreview/walls.png +0 -0
- package/dist/web/public/star/desk-v3.webp +0 -0
- package/dist/web/public/star/office_bg_small.webp +0 -0
- package/dist/web/public/star/star-idle-v5.png +0 -0
- package/dist/web/public/star/star-working-spritesheet-grid.webp +0 -0
- package/dist/web/src/app/AppLayout.tsx +34 -0
- package/dist/web/src/app/AppRouter.tsx +46 -0
- package/dist/web/src/app/bootstrap.tsx +22 -0
- package/dist/web/src/app/routes.tsx +52 -0
- package/dist/web/src/features/office/runtime/index.ts +1 -0
- package/dist/web/src/features/office/runtime/mount.ts +809 -0
- package/dist/web/src/features/pixel/runtime/index.ts +1 -0
- package/dist/web/src/features/pixel/runtime/mount.ts +728 -0
- package/dist/web/src/features/studio/runtime/index.ts +1 -0
- package/dist/web/src/features/studio/runtime/mount.ts +664 -0
- package/dist/web/src/features/three/engine/index.ts +1 -0
- package/dist/web/src/main.tsx +7 -0
- package/dist/web/src/pages/office/index.ts +1 -0
- package/dist/web/src/pages/office/page.tsx +283 -0
- package/dist/web/src/pages/pixel/index.ts +1 -0
- package/dist/web/src/pages/pixel/page.tsx +564 -0
- package/dist/web/src/pages/studio/index.ts +1 -0
- package/dist/web/src/pages/studio/page.tsx +446 -0
- package/dist/web/{js/agents.js → src/runtime/agents.ts} +304 -31
- package/dist/web/{js/camera.js → src/runtime/camera.ts} +12 -5
- package/dist/web/{js/dataviz.js → src/runtime/dataviz.ts} +38 -14
- package/dist/web/{js/effects.js → src/runtime/effects.ts} +139 -2
- package/dist/web/{js/engine.js → src/runtime/engine.ts} +45 -6
- package/dist/web/{js/office.js → src/runtime/office.ts} +136 -20
- package/dist/web/{js/ui.js → src/runtime/ui.ts} +11 -7
- package/dist/web/src/shared/assets.ts +4 -0
- package/dist/web/src/shared/navigation.ts +47 -0
- package/dist/web/src/styles/app-layout.css +19 -0
- package/dist/web/src/styles/office.css +268 -0
- package/dist/web/tsconfig.json +28 -0
- package/dist/web/vite.config.ts +93 -0
- package/package.json +11 -2
- package/dist/web/index-studio.html +0 -804
- package/dist/web/index-v2-pixel.html +0 -1571
- /package/dist/web/{assets → dist}/botreview/char_0.png +0 -0
- /package/dist/web/{assets → dist}/botreview/char_1.png +0 -0
- /package/dist/web/{assets → dist}/botreview/char_2.png +0 -0
- /package/dist/web/{assets → dist}/botreview/coffee-machine.gif +0 -0
- /package/dist/web/{assets → dist}/botreview/server.gif +0 -0
- /package/dist/web/{assets → dist}/botreview/walls.png +0 -0
- /package/dist/web/{assets → dist}/star/desk-v3.webp +0 -0
- /package/dist/web/{assets → dist}/star/office_bg_small.webp +0 -0
- /package/dist/web/{assets → dist}/star/star-idle-v5.png +0 -0
- /package/dist/web/{assets → dist}/star/star-working-spritesheet-grid.webp +0 -0
- /package/dist/web/{js/state.js → src/runtime/state.ts} +0 -0
|
@@ -0,0 +1,470 @@
|
|
|
1
|
+
import{_ as ee}from"./studio-page-o3SCvE_v.js";import{r as te,j as i}from"./react-vendor-C8RhVn0h.js";function P(u){return`/dist/${u.replace(/^\/+/,"")}`}const ie=`
|
|
2
|
+
:root {
|
|
3
|
+
--pixel-bg: #0a1220;
|
|
4
|
+
--pixel-panel: rgba(11, 18, 31, 0.86);
|
|
5
|
+
--pixel-card: rgba(19, 30, 50, 0.8);
|
|
6
|
+
--pixel-hover: rgba(34, 51, 82, 0.84);
|
|
7
|
+
--pixel-border: rgba(148, 163, 184, 0.15);
|
|
8
|
+
--pixel-accent: #34d399;
|
|
9
|
+
--pixel-red: #f87171;
|
|
10
|
+
--pixel-orange: #fbbf24;
|
|
11
|
+
--pixel-blue: #60a5fa;
|
|
12
|
+
--pixel-purple: #a78bfa;
|
|
13
|
+
--pixel-text: #e2e8f0;
|
|
14
|
+
--pixel-dim: #94a3b8;
|
|
15
|
+
--pixel-muted: #64748b;
|
|
16
|
+
--pixel-shadow: 0 18px 48px rgba(0, 0, 0, 0.32);
|
|
17
|
+
}
|
|
18
|
+
[data-theme="light"] {
|
|
19
|
+
--pixel-bg: #edf3fb;
|
|
20
|
+
--pixel-panel: rgba(255, 255, 255, 0.88);
|
|
21
|
+
--pixel-card: rgba(248, 250, 252, 0.98);
|
|
22
|
+
--pixel-hover: rgba(226, 232, 240, 0.98);
|
|
23
|
+
--pixel-border: rgba(100, 116, 139, 0.18);
|
|
24
|
+
--pixel-accent: #059669;
|
|
25
|
+
--pixel-red: #dc2626;
|
|
26
|
+
--pixel-orange: #d97706;
|
|
27
|
+
--pixel-blue: #2563eb;
|
|
28
|
+
--pixel-purple: #7c3aed;
|
|
29
|
+
--pixel-text: #0f172a;
|
|
30
|
+
--pixel-dim: #475569;
|
|
31
|
+
--pixel-muted: #94a3b8;
|
|
32
|
+
--pixel-shadow: 0 18px 48px rgba(15, 23, 42, 0.08);
|
|
33
|
+
}
|
|
34
|
+
html, body, #root { width: 100%; height: 100%; }
|
|
35
|
+
body {
|
|
36
|
+
margin: 0;
|
|
37
|
+
overflow: hidden;
|
|
38
|
+
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
|
|
39
|
+
background:
|
|
40
|
+
radial-gradient(circle at top left, rgba(96, 165, 250, 0.08), transparent 34%),
|
|
41
|
+
radial-gradient(circle at bottom right, rgba(52, 211, 153, 0.08), transparent 30%),
|
|
42
|
+
var(--pixel-bg);
|
|
43
|
+
color: var(--pixel-text);
|
|
44
|
+
}
|
|
45
|
+
.pixel-app {
|
|
46
|
+
display: grid;
|
|
47
|
+
grid-template-columns: 260px 1fr 360px;
|
|
48
|
+
grid-template-rows: 72px 1fr 180px;
|
|
49
|
+
grid-template-areas:
|
|
50
|
+
"header header header"
|
|
51
|
+
"sidebar main panel"
|
|
52
|
+
"office office office";
|
|
53
|
+
gap: 10px;
|
|
54
|
+
height: 100%;
|
|
55
|
+
padding: 10px;
|
|
56
|
+
}
|
|
57
|
+
.pixel-shell,
|
|
58
|
+
.pixel-header,
|
|
59
|
+
.pixel-main,
|
|
60
|
+
.pixel-panel,
|
|
61
|
+
.pixel-office {
|
|
62
|
+
border-radius: 20px;
|
|
63
|
+
border: 1px solid var(--pixel-border);
|
|
64
|
+
background: var(--pixel-panel);
|
|
65
|
+
backdrop-filter: blur(18px);
|
|
66
|
+
box-shadow: var(--pixel-shadow);
|
|
67
|
+
}
|
|
68
|
+
.pixel-header {
|
|
69
|
+
grid-area: header;
|
|
70
|
+
display: flex;
|
|
71
|
+
align-items: center;
|
|
72
|
+
gap: 10px;
|
|
73
|
+
padding: 12px 16px;
|
|
74
|
+
}
|
|
75
|
+
.pixel-logo {
|
|
76
|
+
width: 38px;
|
|
77
|
+
height: 38px;
|
|
78
|
+
display: grid;
|
|
79
|
+
place-items: center;
|
|
80
|
+
border-radius: 12px;
|
|
81
|
+
background: color-mix(in srgb, var(--pixel-accent) 16%, transparent);
|
|
82
|
+
color: var(--pixel-accent);
|
|
83
|
+
font-weight: 700;
|
|
84
|
+
}
|
|
85
|
+
.pixel-title h1 { margin: 0; font-size: 16px; }
|
|
86
|
+
.pixel-title p { margin: 2px 0 0; font-size: 12px; color: var(--pixel-dim); }
|
|
87
|
+
.pixel-switch,
|
|
88
|
+
.pixel-actions,
|
|
89
|
+
.pixel-stats,
|
|
90
|
+
.pixel-panel-tabs,
|
|
91
|
+
.pixel-kpis { display: flex; gap: 8px; }
|
|
92
|
+
.pixel-switch button,
|
|
93
|
+
.pixel-btn,
|
|
94
|
+
.pixel-tab,
|
|
95
|
+
.pixel-small-btn {
|
|
96
|
+
border: 1px solid var(--pixel-border);
|
|
97
|
+
border-radius: 12px;
|
|
98
|
+
background: var(--pixel-card);
|
|
99
|
+
color: var(--pixel-text);
|
|
100
|
+
cursor: pointer;
|
|
101
|
+
transition: 0.2s ease;
|
|
102
|
+
font: inherit;
|
|
103
|
+
}
|
|
104
|
+
.pixel-switch button,
|
|
105
|
+
.pixel-btn,
|
|
106
|
+
.pixel-small-btn { padding: 9px 12px; }
|
|
107
|
+
.pixel-tab { padding: 8px 10px; flex: 1; }
|
|
108
|
+
.pixel-switch button.active,
|
|
109
|
+
.pixel-tab.active {
|
|
110
|
+
border-color: color-mix(in srgb, var(--pixel-accent) 36%, var(--pixel-border));
|
|
111
|
+
background: color-mix(in srgb, var(--pixel-accent) 14%, var(--pixel-card));
|
|
112
|
+
}
|
|
113
|
+
.pixel-btn.primary { background: color-mix(in srgb, var(--pixel-accent) 20%, var(--pixel-card)); }
|
|
114
|
+
.pixel-btn.danger { background: color-mix(in srgb, var(--pixel-red) 16%, var(--pixel-card)); }
|
|
115
|
+
.pixel-switch button:hover,
|
|
116
|
+
.pixel-btn:hover,
|
|
117
|
+
.pixel-tab:hover,
|
|
118
|
+
.pixel-small-btn:hover,
|
|
119
|
+
.pixel-list-item:hover,
|
|
120
|
+
.pixel-agent-card:hover { background: var(--pixel-hover); }
|
|
121
|
+
.pixel-select {
|
|
122
|
+
border-radius: 12px;
|
|
123
|
+
border: 1px solid var(--pixel-border);
|
|
124
|
+
background: var(--pixel-card);
|
|
125
|
+
color: var(--pixel-text);
|
|
126
|
+
padding: 9px 10px;
|
|
127
|
+
}
|
|
128
|
+
.pixel-spacer { flex: 1; }
|
|
129
|
+
.pixel-stats > div {
|
|
130
|
+
min-width: 62px;
|
|
131
|
+
padding: 7px 10px;
|
|
132
|
+
border-radius: 14px;
|
|
133
|
+
border: 1px solid var(--pixel-border);
|
|
134
|
+
background: var(--pixel-card);
|
|
135
|
+
text-align: center;
|
|
136
|
+
}
|
|
137
|
+
.pixel-stats .label { font-size: 10px; color: var(--pixel-muted); text-transform: uppercase; }
|
|
138
|
+
.pixel-stats .value {
|
|
139
|
+
display: block;
|
|
140
|
+
margin-top: 4px;
|
|
141
|
+
font-size: 17px;
|
|
142
|
+
font-weight: 700;
|
|
143
|
+
color: var(--pixel-accent);
|
|
144
|
+
}
|
|
145
|
+
.pixel-theme-btn {
|
|
146
|
+
width: 34px;
|
|
147
|
+
height: 34px;
|
|
148
|
+
display: grid;
|
|
149
|
+
place-items: center;
|
|
150
|
+
border-radius: 12px;
|
|
151
|
+
border: 1px solid var(--pixel-border);
|
|
152
|
+
background: var(--pixel-card);
|
|
153
|
+
}
|
|
154
|
+
.pixel-conn {
|
|
155
|
+
width: 12px;
|
|
156
|
+
height: 12px;
|
|
157
|
+
border-radius: 50%;
|
|
158
|
+
background: var(--pixel-muted);
|
|
159
|
+
}
|
|
160
|
+
.pixel-conn.connected { background: var(--pixel-accent); }
|
|
161
|
+
.pixel-sidebar {
|
|
162
|
+
grid-area: sidebar;
|
|
163
|
+
overflow: auto;
|
|
164
|
+
padding: 16px;
|
|
165
|
+
}
|
|
166
|
+
.pixel-sidebar h3 {
|
|
167
|
+
margin: 0 0 10px;
|
|
168
|
+
font-size: 11px;
|
|
169
|
+
letter-spacing: 0.08em;
|
|
170
|
+
text-transform: uppercase;
|
|
171
|
+
color: var(--pixel-dim);
|
|
172
|
+
}
|
|
173
|
+
.pixel-list { display: flex; flex-direction: column; gap: 8px; }
|
|
174
|
+
.pixel-list-item,
|
|
175
|
+
.pixel-agent-card,
|
|
176
|
+
.pixel-file-item {
|
|
177
|
+
padding: 12px;
|
|
178
|
+
border-radius: 14px;
|
|
179
|
+
border: 1px solid var(--pixel-border);
|
|
180
|
+
background: var(--pixel-card);
|
|
181
|
+
}
|
|
182
|
+
.pixel-main {
|
|
183
|
+
grid-area: main;
|
|
184
|
+
position: relative;
|
|
185
|
+
overflow: hidden;
|
|
186
|
+
}
|
|
187
|
+
.pixel-view { position: absolute; inset: 0; }
|
|
188
|
+
.pixel-view.hidden { display: none; }
|
|
189
|
+
.pixel-graph-canvas { width: 100%; height: 100%; }
|
|
190
|
+
.pixel-tooltip {
|
|
191
|
+
position: fixed;
|
|
192
|
+
z-index: 80;
|
|
193
|
+
display: none;
|
|
194
|
+
padding: 8px 10px;
|
|
195
|
+
border-radius: 12px;
|
|
196
|
+
border: 1px solid var(--pixel-border);
|
|
197
|
+
background: rgba(10, 15, 26, 0.94);
|
|
198
|
+
color: #e2e8f0;
|
|
199
|
+
font-size: 12px;
|
|
200
|
+
pointer-events: none;
|
|
201
|
+
}
|
|
202
|
+
.pixel-tooltip.visible { display: block; }
|
|
203
|
+
.pixel-stage {
|
|
204
|
+
position: relative;
|
|
205
|
+
width: 100%;
|
|
206
|
+
height: 100%;
|
|
207
|
+
padding: 24px;
|
|
208
|
+
overflow: hidden;
|
|
209
|
+
}
|
|
210
|
+
.pixel-stage .asset {
|
|
211
|
+
position: absolute;
|
|
212
|
+
image-rendering: pixelated;
|
|
213
|
+
user-select: none;
|
|
214
|
+
pointer-events: none;
|
|
215
|
+
}
|
|
216
|
+
.desk-asset {
|
|
217
|
+
left: 50%;
|
|
218
|
+
bottom: 18px;
|
|
219
|
+
transform: translateX(-50%);
|
|
220
|
+
width: min(760px, 92%);
|
|
221
|
+
opacity: 0.92;
|
|
222
|
+
}
|
|
223
|
+
.server-asset { left: 36px; bottom: 26px; width: 100px; }
|
|
224
|
+
.coffee-asset { right: 42px; bottom: 34px; width: 88px; }
|
|
225
|
+
.walls-asset { right: 24px; top: 24px; width: 220px; opacity: 0.85; }
|
|
226
|
+
.pixel-kpis {
|
|
227
|
+
position: absolute;
|
|
228
|
+
left: 18px;
|
|
229
|
+
top: 18px;
|
|
230
|
+
gap: 10px;
|
|
231
|
+
}
|
|
232
|
+
.pixel-kpi {
|
|
233
|
+
min-width: 100px;
|
|
234
|
+
padding: 10px 12px;
|
|
235
|
+
border-radius: 14px;
|
|
236
|
+
border: 1px solid var(--pixel-border);
|
|
237
|
+
background: rgba(8, 15, 27, 0.72);
|
|
238
|
+
}
|
|
239
|
+
.pixel-kpi .t { font-size: 11px; color: var(--pixel-dim); }
|
|
240
|
+
.pixel-kpi .v {
|
|
241
|
+
margin-top: 5px;
|
|
242
|
+
font-size: 26px;
|
|
243
|
+
font-weight: 700;
|
|
244
|
+
color: var(--pixel-accent);
|
|
245
|
+
}
|
|
246
|
+
.pixel-kpi.errors .v { color: var(--pixel-red); }
|
|
247
|
+
.pixel-kpi.done .v { color: var(--pixel-blue); }
|
|
248
|
+
.pixel-agent-layer { position: absolute; inset: 0; }
|
|
249
|
+
.pixel-avatar {
|
|
250
|
+
position: absolute;
|
|
251
|
+
width: 52px;
|
|
252
|
+
height: 52px;
|
|
253
|
+
display: grid;
|
|
254
|
+
place-items: center;
|
|
255
|
+
border-radius: 16px;
|
|
256
|
+
border: 1px solid var(--pixel-border);
|
|
257
|
+
background: color-mix(in srgb, var(--pixel-accent) 12%, var(--pixel-card));
|
|
258
|
+
font-size: 20px;
|
|
259
|
+
box-shadow: 0 12px 24px rgba(0, 0, 0, 0.18);
|
|
260
|
+
}
|
|
261
|
+
.pixel-avatar.error,
|
|
262
|
+
.pixel-avatar.failed { background: color-mix(in srgb, var(--pixel-red) 14%, var(--pixel-card)); }
|
|
263
|
+
.pixel-avatar.testing { background: color-mix(in srgb, var(--pixel-blue) 14%, var(--pixel-card)); }
|
|
264
|
+
.pixel-avatar.done,
|
|
265
|
+
.pixel-avatar.passed { background: color-mix(in srgb, var(--pixel-accent) 18%, var(--pixel-card)); }
|
|
266
|
+
.pixel-label {
|
|
267
|
+
position: absolute;
|
|
268
|
+
min-width: 120px;
|
|
269
|
+
max-width: 160px;
|
|
270
|
+
padding: 8px 10px;
|
|
271
|
+
border-radius: 12px;
|
|
272
|
+
border: 1px solid var(--pixel-border);
|
|
273
|
+
background: rgba(8, 15, 27, 0.82);
|
|
274
|
+
font-size: 12px;
|
|
275
|
+
color: var(--pixel-text);
|
|
276
|
+
transform: translateX(-50%);
|
|
277
|
+
}
|
|
278
|
+
.pixel-label .role,
|
|
279
|
+
.pixel-label .task { display: block; color: var(--pixel-dim); font-size: 11px; }
|
|
280
|
+
.pixel-bubble {
|
|
281
|
+
position: absolute;
|
|
282
|
+
padding: 7px 10px;
|
|
283
|
+
border-radius: 999px;
|
|
284
|
+
border: 1px solid var(--pixel-border);
|
|
285
|
+
background: rgba(8, 15, 27, 0.88);
|
|
286
|
+
font-size: 11px;
|
|
287
|
+
color: var(--pixel-text);
|
|
288
|
+
animation: pixel-bubble-in 3s ease forwards;
|
|
289
|
+
}
|
|
290
|
+
@keyframes pixel-bubble-in {
|
|
291
|
+
0% { opacity: 0; transform: translateY(8px); }
|
|
292
|
+
12% { opacity: 1; transform: translateY(0); }
|
|
293
|
+
88% { opacity: 1; transform: translateY(0); }
|
|
294
|
+
100% { opacity: 0; transform: translateY(-6px); }
|
|
295
|
+
}
|
|
296
|
+
.pixel-panel {
|
|
297
|
+
grid-area: panel;
|
|
298
|
+
display: flex;
|
|
299
|
+
flex-direction: column;
|
|
300
|
+
overflow: hidden;
|
|
301
|
+
}
|
|
302
|
+
.pixel-panel-tabs {
|
|
303
|
+
padding: 10px;
|
|
304
|
+
border-bottom: 1px solid var(--pixel-border);
|
|
305
|
+
}
|
|
306
|
+
.pixel-panel-body { flex: 1; overflow: auto; padding: 12px; }
|
|
307
|
+
.pixel-log-entry {
|
|
308
|
+
padding: 10px 12px;
|
|
309
|
+
border-radius: 14px;
|
|
310
|
+
border: 1px solid var(--pixel-border);
|
|
311
|
+
background: var(--pixel-card);
|
|
312
|
+
margin-bottom: 8px;
|
|
313
|
+
font-size: 12px;
|
|
314
|
+
}
|
|
315
|
+
.pixel-log-entry .ts {
|
|
316
|
+
display: block;
|
|
317
|
+
margin-bottom: 4px;
|
|
318
|
+
color: var(--pixel-muted);
|
|
319
|
+
font-size: 10px;
|
|
320
|
+
}
|
|
321
|
+
.pixel-office {
|
|
322
|
+
grid-area: office;
|
|
323
|
+
overflow: auto;
|
|
324
|
+
padding: 14px;
|
|
325
|
+
}
|
|
326
|
+
.pixel-office-grid {
|
|
327
|
+
display: grid;
|
|
328
|
+
grid-template-columns: repeat(auto-fit, minmax(190px, 1fr));
|
|
329
|
+
gap: 10px;
|
|
330
|
+
}
|
|
331
|
+
.pixel-agent-card .role,
|
|
332
|
+
.pixel-agent-card .task,
|
|
333
|
+
.pixel-file-meta { display: block; color: var(--pixel-dim); font-size: 11px; }
|
|
334
|
+
.pixel-progress {
|
|
335
|
+
margin-top: 10px;
|
|
336
|
+
height: 7px;
|
|
337
|
+
border-radius: 999px;
|
|
338
|
+
overflow: hidden;
|
|
339
|
+
background: rgba(15, 23, 42, 0.4);
|
|
340
|
+
}
|
|
341
|
+
.pixel-progress > span {
|
|
342
|
+
display: block;
|
|
343
|
+
height: 100%;
|
|
344
|
+
background: linear-gradient(90deg, var(--pixel-accent), var(--pixel-blue));
|
|
345
|
+
}
|
|
346
|
+
.pixel-file-preview {
|
|
347
|
+
position: fixed;
|
|
348
|
+
inset: 0;
|
|
349
|
+
display: none;
|
|
350
|
+
align-items: center;
|
|
351
|
+
justify-content: center;
|
|
352
|
+
background: rgba(2, 6, 23, 0.44);
|
|
353
|
+
backdrop-filter: blur(10px);
|
|
354
|
+
z-index: 90;
|
|
355
|
+
}
|
|
356
|
+
.pixel-file-preview.visible { display: flex; }
|
|
357
|
+
.pixel-file-dialog {
|
|
358
|
+
width: min(860px, 92vw);
|
|
359
|
+
height: min(680px, 86vh);
|
|
360
|
+
border-radius: 20px;
|
|
361
|
+
border: 1px solid var(--pixel-border);
|
|
362
|
+
background: var(--pixel-panel);
|
|
363
|
+
box-shadow: var(--pixel-shadow);
|
|
364
|
+
display: flex;
|
|
365
|
+
flex-direction: column;
|
|
366
|
+
overflow: hidden;
|
|
367
|
+
}
|
|
368
|
+
.pixel-file-head {
|
|
369
|
+
display: flex;
|
|
370
|
+
align-items: center;
|
|
371
|
+
justify-content: space-between;
|
|
372
|
+
gap: 10px;
|
|
373
|
+
padding: 14px 16px;
|
|
374
|
+
border-bottom: 1px solid var(--pixel-border);
|
|
375
|
+
}
|
|
376
|
+
.pixel-file-code {
|
|
377
|
+
flex: 1;
|
|
378
|
+
overflow: auto;
|
|
379
|
+
margin: 0;
|
|
380
|
+
padding: 16px;
|
|
381
|
+
color: var(--pixel-dim);
|
|
382
|
+
font-size: 12px;
|
|
383
|
+
line-height: 1.7;
|
|
384
|
+
white-space: pre-wrap;
|
|
385
|
+
}
|
|
386
|
+
.pixel-shortcuts {
|
|
387
|
+
position: fixed;
|
|
388
|
+
right: 12px;
|
|
389
|
+
bottom: 12px;
|
|
390
|
+
z-index: 85;
|
|
391
|
+
display: none;
|
|
392
|
+
grid-template-columns: auto auto;
|
|
393
|
+
gap: 4px 12px;
|
|
394
|
+
padding: 12px 14px;
|
|
395
|
+
border-radius: 16px;
|
|
396
|
+
border: 1px solid var(--pixel-border);
|
|
397
|
+
background: rgba(8, 15, 27, 0.88);
|
|
398
|
+
color: var(--pixel-dim);
|
|
399
|
+
font-size: 11px;
|
|
400
|
+
}
|
|
401
|
+
.pixel-shortcuts.visible { display: grid; }
|
|
402
|
+
.pixel-shortcuts kbd {
|
|
403
|
+
display: inline-flex;
|
|
404
|
+
min-width: 18px;
|
|
405
|
+
justify-content: center;
|
|
406
|
+
padding: 2px 6px;
|
|
407
|
+
border-radius: 6px;
|
|
408
|
+
border: 1px solid var(--pixel-border);
|
|
409
|
+
background: var(--pixel-card);
|
|
410
|
+
color: var(--pixel-text);
|
|
411
|
+
}
|
|
412
|
+
@media (max-width: 1260px) {
|
|
413
|
+
.pixel-app { grid-template-columns: 220px 1fr 320px; }
|
|
414
|
+
}
|
|
415
|
+
@media (max-width: 1080px) {
|
|
416
|
+
.pixel-app {
|
|
417
|
+
grid-template-columns: 1fr;
|
|
418
|
+
grid-template-rows: 72px 1fr 180px;
|
|
419
|
+
grid-template-areas:
|
|
420
|
+
"header"
|
|
421
|
+
"main"
|
|
422
|
+
"office";
|
|
423
|
+
}
|
|
424
|
+
.pixel-sidebar,
|
|
425
|
+
.pixel-panel { display: none; }
|
|
426
|
+
}
|
|
427
|
+
`;function le(){return te.useEffect(()=>{let u,f=!1;return ee(async()=>{const{mountPixelRuntime:v}=await Promise.resolve().then(()=>ae);return{mountPixelRuntime:v}},void 0).then(({mountPixelRuntime:v})=>v()).then(v=>{if(f){v();return}u=v}),()=>{f=!0,u==null||u()}},[]),i.jsxs(i.Fragment,{children:[i.jsx("style",{children:ie}),i.jsxs("div",{className:"pixel-app",children:[i.jsxs("header",{className:"pixel-header",children:[i.jsx("div",{className:"pixel-logo",children:"OC"}),i.jsxs("div",{className:"pixel-title",children:[i.jsx("h1",{children:"OpenCroc Studio"}),i.jsx("p",{children:"Pixel Ops Dashboard | Multi-agent runtime monitor"})]}),i.jsxs("div",{className:"pixel-switch",children:[i.jsx("button",{id:"view-dashboard",className:"active",type:"button",children:"Dashboard"}),i.jsx("button",{id:"view-office",type:"button",children:"Pixel Office"})]}),i.jsxs("div",{className:"pixel-actions",children:[i.jsx("button",{id:"btn-scan",className:"pixel-btn primary",type:"button",children:"Scan"}),i.jsx("button",{id:"btn-pipeline",className:"pixel-btn primary",type:"button",children:"Pipeline"}),i.jsxs("select",{id:"run-mode",className:"pixel-select",defaultValue:"auto",children:[i.jsx("option",{value:"auto",children:"Auto"}),i.jsx("option",{value:"reuse",children:"Reuse"}),i.jsx("option",{value:"managed",children:"Managed"})]}),i.jsx("button",{id:"btn-run-tests",className:"pixel-btn",type:"button",children:"Tests"}),i.jsx("button",{id:"btn-reports",className:"pixel-btn",type:"button",children:"Reports"}),i.jsx("button",{id:"btn-reset",className:"pixel-btn danger",type:"button",children:"Reset"})]}),i.jsx("div",{className:"pixel-spacer"}),i.jsxs("div",{className:"pixel-stats",children:[i.jsxs("div",{children:[i.jsx("span",{className:"label",children:"Modules"}),i.jsx("span",{className:"value",id:"s-mod",children:"-"})]}),i.jsxs("div",{children:[i.jsx("span",{className:"label",children:"Models"}),i.jsx("span",{className:"value",id:"s-mdl",children:"-"})]}),i.jsxs("div",{children:[i.jsx("span",{className:"label",children:"APIs"}),i.jsx("span",{className:"value",id:"s-api",children:"-"})]}),i.jsxs("div",{children:[i.jsx("span",{className:"label",children:"Tests"}),i.jsx("span",{className:"value",id:"s-files",children:"-"})]}),i.jsxs("div",{id:"s-results-wrap",style:{display:"none"},children:[i.jsx("span",{className:"label",children:"Results"}),i.jsx("span",{className:"value",id:"s-results",children:"-"})]})]}),i.jsx("button",{id:"theme-toggle",className:"pixel-theme-btn",type:"button",children:"◐"}),i.jsx("div",{id:"conn-dot",className:"pixel-conn"})]}),i.jsxs("aside",{className:"pixel-shell pixel-sidebar",children:[i.jsx("h3",{children:"Modules"}),i.jsx("div",{id:"mod-list",className:"pixel-list"}),i.jsx("h3",{style:{marginTop:16},children:"Agents"}),i.jsx("div",{id:"agent-sidebar",className:"pixel-list"})]}),i.jsxs("main",{className:"pixel-main",children:[i.jsx("div",{id:"graph-view",className:"pixel-view",children:i.jsx("canvas",{id:"graph-canvas",className:"pixel-graph-canvas"})}),i.jsx("div",{id:"pixel-view",className:"pixel-view hidden",children:i.jsxs("div",{className:"pixel-stage",children:[i.jsx("img",{className:"asset desk-asset",src:P("star/desk-v3.webp"),alt:"desk"}),i.jsx("img",{className:"asset server-asset",src:P("botreview/server.gif"),alt:"server"}),i.jsx("img",{className:"asset coffee-asset",src:P("botreview/coffee-machine.gif"),alt:"coffee"}),i.jsx("img",{className:"asset walls-asset",src:P("botreview/walls.png"),alt:"walls"}),i.jsxs("div",{className:"pixel-kpis",children:[i.jsxs("div",{className:"pixel-kpi",children:[i.jsx("div",{className:"t",children:"Working"}),i.jsx("div",{className:"v",id:"kpi-working",children:"0"})]}),i.jsxs("div",{className:"pixel-kpi errors",children:[i.jsx("div",{className:"t",children:"Errors"}),i.jsx("div",{className:"v",id:"kpi-errors",children:"0"})]}),i.jsxs("div",{className:"pixel-kpi done",children:[i.jsx("div",{className:"t",children:"Done"}),i.jsx("div",{className:"v",id:"kpi-done",children:"0"})]})]}),i.jsx("div",{id:"pixel-agent-layer",className:"pixel-agent-layer"})]})})]}),i.jsxs("aside",{className:"pixel-panel",children:[i.jsxs("div",{className:"pixel-panel-tabs",children:[i.jsx("button",{className:"pixel-tab active","data-tab":"log",type:"button",children:"Log"}),i.jsx("button",{className:"pixel-tab","data-tab":"files",type:"button",children:"Tests"}),i.jsx("button",{className:"pixel-tab","data-tab":"results",type:"button",children:"Results"}),i.jsx("button",{className:"pixel-tab","data-tab":"reports",type:"button",children:"Reports"})]}),i.jsxs("div",{className:"pixel-panel-body",children:[i.jsx("div",{id:"log-list"}),i.jsx("div",{id:"file-list",style:{display:"none"}}),i.jsx("div",{id:"results-panel",style:{display:"none"}}),i.jsx("div",{id:"reports-panel",style:{display:"none"}})]})]}),i.jsxs("section",{className:"pixel-office",children:[i.jsx("h3",{style:{margin:"0 0 10px",fontSize:11,letterSpacing:"0.08em",textTransform:"uppercase",color:"var(--pixel-dim)"},children:"Desk View"}),i.jsx("div",{id:"croc-office",className:"pixel-office-grid"})]})]}),i.jsx("div",{id:"tooltip",className:"pixel-tooltip"}),i.jsx("div",{id:"file-preview",className:"pixel-file-preview",children:i.jsxs("div",{className:"pixel-file-dialog",children:[i.jsxs("div",{className:"pixel-file-head",children:[i.jsx("strong",{id:"fp-title",children:"file.ts"}),i.jsx("button",{id:"fp-close",className:"pixel-small-btn",type:"button",children:"Close"})]}),i.jsx("pre",{id:"fp-code",className:"pixel-file-code"})]})}),i.jsxs("div",{id:"shortcut-legend",className:"pixel-shortcuts",children:[i.jsx("kbd",{children:"1"}),i.jsx("span",{children:"Dashboard"}),i.jsx("kbd",{children:"2"}),i.jsx("span",{children:"Pixel Office"}),i.jsx("kbd",{children:"S"}),i.jsx("span",{children:"Scan"}),i.jsx("kbd",{children:"P"}),i.jsx("span",{children:"Pipeline"}),i.jsx("kbd",{children:"T"}),i.jsx("span",{children:"Run tests"}),i.jsx("kbd",{children:"R"}),i.jsx("span",{children:"Reports"}),i.jsx("kbd",{children:"X"}),i.jsx("span",{children:"Reset"}),i.jsx("kbd",{children:"D"}),i.jsx("span",{children:"Theme"}),i.jsx("kbd",{children:"?"}),i.jsx("span",{children:"Show shortcuts"})]})]})}function a(u){const f=document.getElementById(u);if(!f)throw new Error(`Missing element #${u}`);return f}function c(u){return String(u??"").replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")}async function $(u,f){const v=await fetch(u,f);if(!v.ok)throw new Error(`${v.status} ${v.statusText}`);return v.json()}async function se(){const u=[],f=new Map,v=new Map,s={project:null,graph:{nodes:[],edges:[]},agents:[],generatedFiles:[],testMetrics:null,testQuality:null,reports:[],runMode:"auto",currentView:"dashboard",theme:localStorage.getItem("opencroc-pixel-theme")||"dark",ws:null,reconnectTimer:0,shortcutTimer:0,logs:[],running:!1},N=a("tooltip"),b=a("graph-canvas"),m=b.getContext("2d");if(!m)throw new Error("Graph canvas is not available.");function g(t,e,r){t.addEventListener(e,r),u.push(()=>t.removeEventListener(e,r))}function L(t){s.theme=t,document.documentElement.setAttribute("data-theme",t),localStorage.setItem("opencroc-pixel-theme",t)}function h(t,e="info"){s.logs.push({ts:new Date().toLocaleTimeString("zh-CN",{hour12:!1}),level:e,message:t}),s.logs.length>80&&(s.logs=s.logs.slice(-80)),X()}function y(){const t=s.running;["btn-scan","btn-pipeline","btn-reset","btn-run-tests","btn-reports"].forEach(e=>{a(e).disabled=t})}function E(){var r;const t=s.graph,e=((r=s.project)==null?void 0:r.stats)||{};if(a("s-mod").textContent=String(e.modules??t.nodes.filter(l=>l.type==="module").length),a("s-mdl").textContent=String(e.models??t.nodes.filter(l=>l.type==="model").length),a("s-api").textContent=String(e.endpoints??t.nodes.filter(l=>l.type==="api").length),a("s-files").textContent=String(s.generatedFiles.length||0),s.testMetrics){const l=a("s-results-wrap");l.style.display="",a("s-results").textContent=`${s.testMetrics.passed||0}/${s.testMetrics.failed||0}`}}function O(){const t=a("mod-list"),e=s.graph.nodes.filter(r=>r.type==="module");if(!e.length){t.innerHTML='<div class="pixel-list-item">No modules yet. Run Scan first.</div>';return}t.innerHTML=e.map(r=>`<button class="pixel-list-item" type="button" data-module-id="${c(r.id)}"><strong>${c(r.label||r.id)}</strong><div style="margin-top:6px;color:var(--pixel-dim);font-size:12px">${c(r.path||"")}</div></button>`).join("")}function Y(){const t=a("agent-sidebar");if(!s.agents.length){t.innerHTML='<div class="pixel-list-item">No agents connected.</div>';return}t.innerHTML=s.agents.map(e=>`
|
|
428
|
+
<div class="pixel-list-item">
|
|
429
|
+
<strong>${c(e.name||e.id)}</strong>
|
|
430
|
+
<div style="margin-top:6px;color:var(--pixel-dim);font-size:12px">${c(e.role||"agent")}</div>
|
|
431
|
+
<div style="margin-top:4px;color:var(--pixel-dim);font-size:12px">${c(e.status||"idle")}</div>
|
|
432
|
+
</div>
|
|
433
|
+
`).join("")}function Q(){var n,x;f.clear();const t=b.clientWidth||((n=b.parentElement)==null?void 0:n.clientWidth)||960,e=b.clientHeight||((x=b.parentElement)==null?void 0:x.clientHeight)||640,r=s.graph.nodes.filter(o=>o.type==="module"),l=s.graph.nodes.filter(o=>o.type!=="module");r.forEach((o,j)=>{const p=j/Math.max(r.length,1)*Math.PI*2,w=t/2+Math.cos(p)*Math.min(t,e)*.28,k=e/2+Math.sin(p)*Math.min(t,e)*.22;f.set(String(o.id),{x:w,y:k,node:o})}),l.forEach((o,j)=>{const p=r.find(M=>M.label===o.module||M.id===o.module),w=p?f.get(String(p.id)):void 0,k=j/Math.max(l.length,1)*Math.PI*2,d=w?90+j%6*18:Math.min(t,e)*.18;f.set(String(o.id),{x:((w==null?void 0:w.x)||t/2)+Math.cos(k)*d,y:((w==null?void 0:w.y)||e/2)+Math.sin(k)*d,node:o})})}function S(){var r,l;const t=b.clientWidth||((r=b.parentElement)==null?void 0:r.clientWidth)||960,e=b.clientHeight||((l=b.parentElement)==null?void 0:l.clientHeight)||640;b.width=t*Math.max(window.devicePixelRatio,1),b.height=e*Math.max(window.devicePixelRatio,1),b.style.width=`${t}px`,b.style.height=`${e}px`,m.setTransform(Math.max(window.devicePixelRatio,1),0,0,Math.max(window.devicePixelRatio,1),0,0),m.clearRect(0,0,t,e),Q(),m.strokeStyle=s.theme==="dark"?"rgba(148,163,184,0.28)":"rgba(100,116,139,0.26)",m.lineWidth=1.4;for(const n of s.graph.edges){const x=f.get(String(n.source)),o=f.get(String(n.target));!x||!o||(m.beginPath(),m.moveTo(x.x,x.y),m.lineTo(o.x,o.y),m.stroke())}for(const{x:n,y:x,node:o}of f.values()){const j=o.type==="module"?"#a78bfa":o.type==="api"?"#fbbf24":o.type==="model"?"#34d399":"#60a5fa";m.fillStyle=j,m.beginPath(),m.arc(n,x,o.type==="module"?16:10,0,Math.PI*2),m.fill(),m.fillStyle=s.theme==="dark"?"#e2e8f0":"#0f172a",m.font=o.type==="module"?"12px sans-serif":"10px sans-serif",m.textAlign="center",m.fillText(String(o.label||o.id),n,x+(o.type==="module"?32:24))}}function X(){const t=a("log-list");t.innerHTML=s.logs.slice().reverse().map(e=>`<div class="pixel-log-entry"><span class="ts">${c(e.ts)}</span><strong>${c(e.level)}</strong><div style="margin-top:4px">${c(e.message)}</div></div>`).join("")}function G(){const t=a("croc-office");if(!s.agents.length){t.innerHTML='<div class="pixel-agent-card">No active agents yet.</div>';return}t.innerHTML=s.agents.map(e=>{const r=typeof e.progress=="number"?Math.max(0,Math.min(100,e.progress)):0;return`
|
|
434
|
+
<div class="pixel-agent-card">
|
|
435
|
+
<strong>${c(e.name||e.id)}</strong>
|
|
436
|
+
<span class="role">${c(e.role||"agent")}</span>
|
|
437
|
+
<span class="task">${c(e.currentTask||"Awaiting task")}</span>
|
|
438
|
+
<div class="pixel-progress"><span style="width:${r}%"></span></div>
|
|
439
|
+
</div>
|
|
440
|
+
`}).join("")}function H(){for(const t of v.values())window.clearInterval(t);v.clear()}function J(){H();const t=a("pixel-agent-layer");for(const e of s.agents){const r=window.setInterval(()=>{const l=t.querySelector(`[data-agent-name="${CSS.escape(String(e.name||e.id))}"]`);if(!l||s.currentView!=="office")return;const n=document.createElement("div");n.className="pixel-bubble",n.textContent=String(e.status||"idle"),n.style.left=`${l.offsetLeft+50}px`,n.style.top=`${l.offsetTop-10}px`,t.appendChild(n),window.setTimeout(()=>n.remove(),3e3)},7e3+Math.round(Math.random()*4e3));v.set(String(e.name||e.id),r)}}function R(){const t=a("pixel-agent-layer"),e=a("pixel-view"),r=e.clientWidth||900,l=e.clientHeight||540,n=[{x:.18,y:.64},{x:.3,y:.66},{x:.42,y:.62},{x:.56,y:.6},{x:.72,y:.63},{x:.82,y:.52},{x:.22,y:.45},{x:.48,y:.42},{x:.66,y:.4},{x:.78,y:.72}],x=s.agents.filter(p=>p.status==="working"||p.status==="testing").length,o=s.agents.filter(p=>p.status==="error"||p.status==="failed").length,j=s.agents.filter(p=>p.status==="done"||p.status==="passed").length;a("kpi-working").textContent=String(x),a("kpi-errors").textContent=String(o),a("kpi-done").textContent=String(j),t.innerHTML=s.agents.map((p,w)=>{const k=n[w%n.length],d=Math.round(r*k.x),M=Math.round(l*k.y);return`
|
|
441
|
+
<div class="pixel-avatar ${c(p.status||"idle")}" data-agent-name="${c(p.name||p.id)}" style="left:${d}px;top:${M}px">🐊</div>
|
|
442
|
+
<div class="pixel-label" style="left:${d+24}px;top:${M-18}px">
|
|
443
|
+
<strong>${c(p.name||p.id)}</strong>
|
|
444
|
+
<span class="role">${c(p.role||"agent")}</span>
|
|
445
|
+
<span class="task">${c(p.currentTask||p.status||"idle")}</span>
|
|
446
|
+
</div>
|
|
447
|
+
`}).join(""),J()}function D(){const t=a("file-list");if(!s.generatedFiles.length){t.innerHTML='<div class="pixel-file-item">No generated tests yet.</div>';return}t.innerHTML=s.generatedFiles.map((e,r)=>`
|
|
448
|
+
<button class="pixel-file-item" data-file-index="${r}" type="button">
|
|
449
|
+
<strong>${c(e.filePath||`Generated file ${r+1}`)}</strong>
|
|
450
|
+
<span class="pixel-file-meta">${c(e.module||"")} ${e.lines?`| ${e.lines} lines`:""}</span>
|
|
451
|
+
</button>
|
|
452
|
+
`).join("")}function A(){const t=a("results-panel");if(!s.testMetrics&&!s.testQuality){t.innerHTML='<div class="pixel-file-item">No test results yet.</div>';return}const e=s.testMetrics,r=s.testQuality,l=e?(e.passed||0)+(e.failed||0)+(e.skipped||0)+(e.timedOut||0):0,n=l?Math.round(((e==null?void 0:e.passed)||0)/l*100):0;t.innerHTML=`
|
|
453
|
+
<div class="pixel-file-item">
|
|
454
|
+
<strong>Test Results</strong>
|
|
455
|
+
<div style="margin-top:10px;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px">
|
|
456
|
+
<div class="pixel-agent-card"><strong>${(e==null?void 0:e.passed)||0}</strong><span class="role">Passed</span></div>
|
|
457
|
+
<div class="pixel-agent-card"><strong>${(e==null?void 0:e.failed)||0}</strong><span class="role">Failed</span></div>
|
|
458
|
+
<div class="pixel-agent-card"><strong>${(e==null?void 0:e.skipped)||0}</strong><span class="role">Skipped</span></div>
|
|
459
|
+
<div class="pixel-agent-card"><strong>${(e==null?void 0:e.timedOut)||0}</strong><span class="role">Timed Out</span></div>
|
|
460
|
+
</div>
|
|
461
|
+
<div class="pixel-progress" style="margin-top:14px"><span style="width:${n}%"></span></div>
|
|
462
|
+
<span class="pixel-file-meta">Pass rate ${n}%</span>
|
|
463
|
+
</div>
|
|
464
|
+
${r?`<div class="pixel-file-item" style="margin-top:10px"><strong>Execution Quality</strong><pre style="white-space:pre-wrap;color:var(--pixel-dim);font-size:12px">${c(JSON.stringify(r,null,2))}</pre></div>`:""}
|
|
465
|
+
`}function _(){const t=a("reports-panel");if(!s.reports.length){t.innerHTML='<div class="pixel-file-item">No reports available.</div>';return}t.innerHTML=s.reports.map(e=>`
|
|
466
|
+
<button class="pixel-file-item" data-report-format="${c(e.format||"")}" type="button">
|
|
467
|
+
<strong>${c(e.filename||`report.${e.format||"txt"}`)}</strong>
|
|
468
|
+
<span class="pixel-file-meta">${c(e.format||"report")}</span>
|
|
469
|
+
</button>
|
|
470
|
+
`).join("")}function z(){E(),O(),Y(),S(),R(),G(),D(),A(),_()}async function C(){var e,r;const t=await $("/api/project");s.project=t,s.graph={nodes:((e=t.graph)==null?void 0:e.nodes)||[],edges:((r=t.graph)==null?void 0:r.edges)||[]},s.agents=t.agents||[],z()}async function I(){s.running=!0,y(),h("Starting project scan...");try{await $("/api/scan",{method:"POST"})}catch(t){h(`Scan failed: ${t instanceof Error?t.message:String(t)}`,"error"),s.running=!1,y()}}async function W(){s.running=!0,y(),h("Pipeline started...");try{await $("/api/pipeline",{method:"POST"})}catch(t){h(`Pipeline failed: ${t instanceof Error?t.message:String(t)}`,"error"),s.running=!1,y()}}async function F(){try{await $("/api/reset",{method:"POST"}),h("Agents reset.")}catch(t){h(`Reset failed: ${t instanceof Error?t.message:String(t)}`,"error")}s.running=!1,y()}async function V(){s.running=!0,y(),h(`Running tests (${s.runMode})...`);try{const t=await $("/api/run-tests",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({mode:s.runMode})});t.error&&h(`Test run failed: ${t.error}`,"error")}catch(t){h(`Tests failed: ${t instanceof Error?t.message:String(t)}`,"error"),s.running=!1,y()}}async function q(){s.running=!0,y(),h("Generating reports...");try{await $("/api/reports/generate",{method:"POST"})}catch(t){h(`Report generation failed: ${t instanceof Error?t.message:String(t)}`,"error"),s.running=!1,y()}}function B(){const t=location.protocol==="https:"?"wss:":"ws:",e=new WebSocket(`${t}//${location.host}/ws`);s.ws=e,e.onopen=()=>{a("conn-dot").classList.add("connected"),h("WebSocket connected.")},e.onclose=()=>{a("conn-dot").classList.remove("connected"),h("WebSocket disconnected. Retrying...","warn"),s.reconnectTimer=window.setTimeout(B,3e3)},e.onmessage=r=>{var l,n,x,o,j,p,w,k;try{const d=JSON.parse(r.data);if(d.type==="agent:update"){s.agents=d.payload||[],z();return}if(d.type==="graph:update"){s.graph={nodes:((l=d.payload)==null?void 0:l.nodes)||[],edges:((n=d.payload)==null?void 0:n.edges)||[]},S(),O();return}if(d.type==="log"){h(String(((x=d.payload)==null?void 0:x.message)||""),String(((o=d.payload)==null?void 0:o.level)||"info"));return}if(d.type==="files:generated"){s.generatedFiles=d.payload||[],D(),E();return}if(d.type==="pipeline:complete"){s.running=!1,y(),h((j=d.payload)!=null&&j.error?`Pipeline failed: ${d.payload.error}`:"Pipeline completed.",(p=d.payload)!=null&&p.error?"error":"info"),C();return}if(d.type==="test:complete"){s.running=!1,s.testMetrics=((w=d.payload)==null?void 0:w.metrics)||null,s.testQuality=((k=d.payload)==null?void 0:k.quality)||null,y(),A(),E();return}if(d.type==="reports:generated"){s.running=!1,s.reports=d.payload||[],y(),_();return}d.type==="scan:complete"&&(s.running=!1,y(),h("Scan completed."),C())}catch{}}}function T(t){if(s.currentView=t,a("graph-view").classList.toggle("hidden",t!=="dashboard"),a("pixel-view").classList.toggle("hidden",t!=="office"),a("view-dashboard").classList.toggle("active",t==="dashboard"),a("view-office").classList.toggle("active",t==="office"),N.classList.remove("visible"),t==="dashboard"){S();return}R()}async function K(t){const e=await $(`/api/files/${t}`);a("fp-title").textContent=e.filePath||"file.ts",a("fp-code").textContent=e.content||"",a("file-preview").classList.add("visible")}async function U(t){const r=await(await fetch(`/api/reports/${t}`)).text();if(t==="html"){const l=window.open("","_blank");l&&(l.document.write(r),l.document.close());return}a("fp-title").textContent=`report.${t}`,a("fp-code").textContent=r,a("file-preview").classList.add("visible")}function Z(){const t=a("shortcut-legend");t.classList.add("visible"),window.clearTimeout(s.shortcutTimer),s.shortcutTimer=window.setTimeout(()=>t.classList.remove("visible"),4e3)}return g(a("btn-scan"),"click",()=>void I()),g(a("btn-pipeline"),"click",()=>void W()),g(a("btn-reset"),"click",()=>void F()),g(a("btn-run-tests"),"click",()=>void V()),g(a("btn-reports"),"click",()=>void q()),g(a("run-mode"),"change",t=>{s.runMode=t.target.value}),g(a("view-dashboard"),"click",()=>T("dashboard")),g(a("view-office"),"click",()=>T("office")),g(a("theme-toggle"),"click",()=>{L(s.theme==="dark"?"light":"dark"),S()}),g(a("fp-close"),"click",()=>a("file-preview").classList.remove("visible")),g(a("file-preview"),"click",t=>{t.target===a("file-preview")&&a("file-preview").classList.remove("visible")}),g(document.querySelectorAll(".pixel-tab").item(0).parentElement,"click",t=>{const e=t.target.closest(".pixel-tab");if(!e)return;const r=e.dataset.tab;document.querySelectorAll(".pixel-tab").forEach(l=>{l.classList.toggle("active",l===e)}),a("log-list").style.display=r==="log"?"":"none",a("file-list").style.display=r==="files"?"":"none",a("results-panel").style.display=r==="results"?"":"none",a("reports-panel").style.display=r==="reports"?"":"none"}),g(a("file-list"),"click",t=>{const e=t.target.closest("[data-file-index]");e&&K(Number(e.dataset.fileIndex))}),g(a("reports-panel"),"click",t=>{const e=t.target.closest("[data-report-format]");e&&U(e.dataset.reportFormat||"txt")}),g(b,"mousemove",t=>{const e=b.getBoundingClientRect(),r=t.clientX-e.left,l=t.clientY-e.top;let n;for(const x of f.values()){const o=x.node.type==="module"?18:12;Math.abs(x.x-r)<=o&&Math.abs(x.y-l)<=o&&(n=x)}if(!n){N.classList.remove("visible");return}N.classList.add("visible"),N.innerHTML=`<strong>${c(n.node.label||n.node.id)}</strong><div>${c(n.node.type||"unknown")}</div>`,N.style.left=`${t.clientX+12}px`,N.style.top=`${t.clientY+12}px`}),g(b,"mouseleave",()=>N.classList.remove("visible")),g(window,"resize",()=>{S(),R()}),g(document,"keydown",t=>{var x;const e=t,r=e.target,l=(x=r==null?void 0:r.tagName)==null?void 0:x.toLowerCase();if(l==="input"||l==="textarea"||l==="select")return;if(e.key==="Escape"){a("file-preview").classList.remove("visible"),a("shortcut-legend").classList.remove("visible");return}const n=e.key.toLowerCase();if(n==="?"||e.key==="/"&&e.shiftKey){e.preventDefault(),Z();return}if(n==="1"){e.preventDefault(),T("dashboard");return}if(n==="2"){e.preventDefault(),T("office");return}if(n==="s"){e.preventDefault(),I();return}if(n==="p"){e.preventDefault(),W();return}if(n==="t"){e.preventDefault(),V();return}if(n==="r"){e.preventDefault(),q();return}if(n==="x"){e.preventDefault(),F();return}n==="d"&&(e.preventDefault(),L(s.theme==="dark"?"light":"dark"),S())}),L(s.theme),y(),h("OpenCroc Studio pixel dashboard ready. Press ? for shortcuts."),await C(),B(),z(),()=>{u.forEach(t=>t()),u.length=0,s.ws&&s.ws.close(),H(),window.clearTimeout(s.reconnectTimer),window.clearTimeout(s.shortcutTimer)}}const ae=Object.freeze(Object.defineProperty({__proto__:null,mountPixelRuntime:se},Symbol.toStringTag,{value:"Module"}));export{le as default};
|