neural-loom 0.2.53 → 0.2.55

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 (97) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/build-manifest.json +3 -3
  3. package/.next/cache/.previewinfo +1 -1
  4. package/.next/cache/.rscinfo +1 -1
  5. package/.next/cache/.tsbuildinfo +1 -1
  6. package/.next/diagnostics/route-bundle-stats.json +2 -2
  7. package/.next/fallback-build-manifest.json +3 -3
  8. package/.next/prerender-manifest.json +3 -3
  9. package/.next/server/app/_global-error.html +1 -1
  10. package/.next/server/app/_global-error.rsc +1 -1
  11. package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  12. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  13. package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  14. package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  15. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  16. package/.next/server/app/_not-found.html +1 -1
  17. package/.next/server/app/_not-found.rsc +1 -1
  18. package/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  19. package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  20. package/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  21. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  22. package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  23. package/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  24. package/.next/server/app/api/context/aider/route.js.nft.json +1 -1
  25. package/.next/server/app/api/context/claude/route.js.nft.json +1 -1
  26. package/.next/server/app/api/context/route.js.nft.json +1 -1
  27. package/.next/server/app/api/context/ssh/route.js.nft.json +1 -1
  28. package/.next/server/app/api/recents/route.js.nft.json +1 -1
  29. package/.next/server/app/api/sessions/inject/route.js.nft.json +1 -1
  30. package/.next/server/app/api/sessions/input/route.js.nft.json +1 -1
  31. package/.next/server/app/api/sessions/launch/route.js.nft.json +1 -1
  32. package/.next/server/app/api/sessions/route.js.nft.json +1 -1
  33. package/.next/server/app/api/sessions/scope/route.js.nft.json +1 -1
  34. package/.next/server/app/api/sessions/start/route.js.nft.json +1 -1
  35. package/.next/server/app/api/sessions/stats/route.js.nft.json +1 -1
  36. package/.next/server/app/api/sessions/stop/route.js.nft.json +1 -1
  37. package/.next/server/app/api/sql/connections/route.js.nft.json +1 -1
  38. package/.next/server/app/api/sql/mcp/route.js.nft.json +1 -1
  39. package/.next/server/app/api/sql/query/route.js.nft.json +1 -1
  40. package/.next/server/app/api/sql/schema/route.js.nft.json +1 -1
  41. package/.next/server/app/index.html +1 -1
  42. package/.next/server/app/index.rsc +3 -3
  43. package/.next/server/app/index.segments/__PAGE__.segment.rsc +3 -3
  44. package/.next/server/app/index.segments/_full.segment.rsc +3 -3
  45. package/.next/server/app/index.segments/_head.segment.rsc +1 -1
  46. package/.next/server/app/index.segments/_index.segment.rsc +1 -1
  47. package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  48. package/.next/server/app/page/react-loadable-manifest.json +3 -3
  49. package/.next/server/app/page_client-reference-manifest.js +1 -1
  50. package/.next/server/chunks/[root-of-the-server]__0.ptwor._.js +8 -8
  51. package/.next/server/chunks/[root-of-the-server]__0.ptwor._.js.map +1 -1
  52. package/.next/server/chunks/[root-of-the-server]__00l5btc._.js +5 -5
  53. package/.next/server/chunks/[root-of-the-server]__00l5btc._.js.map +1 -1
  54. package/.next/server/chunks/[root-of-the-server]__06men8g._.js +5 -5
  55. package/.next/server/chunks/[root-of-the-server]__06men8g._.js.map +1 -1
  56. package/.next/server/chunks/[root-of-the-server]__0_o7_jj._.js +1 -1
  57. package/.next/server/chunks/[root-of-the-server]__0_o7_jj._.js.map +1 -1
  58. package/.next/server/chunks/[root-of-the-server]__0co.g5k._.js +5 -5
  59. package/.next/server/chunks/[root-of-the-server]__0co.g5k._.js.map +1 -1
  60. package/.next/server/chunks/[root-of-the-server]__0d0pykb._.js +12 -12
  61. package/.next/server/chunks/[root-of-the-server]__0d0pykb._.js.map +1 -1
  62. package/.next/server/chunks/ssr/_0t7oqy6._.js +2 -2
  63. package/.next/server/chunks/ssr/_0t7oqy6._.js.map +1 -1
  64. package/.next/server/middleware-build-manifest.js +3 -3
  65. package/.next/server/pages/404.html +1 -1
  66. package/.next/server/pages/500.html +1 -1
  67. package/.next/server/server-reference-manifest.js +1 -1
  68. package/.next/server/server-reference-manifest.json +1 -1
  69. package/.next/static/chunks/{070hz362~_h8n.js → 0-vb7c~yrtpon.js} +1 -1
  70. package/.next/static/chunks/{0m-_sw1425nkp.css → 0hoyc~vbuqe0t.css} +1 -1
  71. package/.next/static/chunks/0st7_hghhyuv4.js +1 -0
  72. package/.next/static/chunks/0ulfmf9nsz_o-.js +6 -0
  73. package/.next/trace +1 -1
  74. package/.next/trace-build +1 -1
  75. package/README.md +4 -0
  76. package/package.json +1 -1
  77. package/public/ui-audit.html +1509 -0
  78. package/src/app/components/IdeLayout.tsx +37 -1
  79. package/src/app/components/TerminalConsole.tsx +3 -0
  80. package/src/app/page.module.css +55 -0
  81. package/src/app/page.tsx +21 -3
  82. package/src/lib/agents/AgentRunner.ts +74 -0
  83. package/src/lib/agents/AiderRunner.ts +4 -2
  84. package/src/lib/agents/ClaudeRunner.ts +4 -3
  85. package/src/lib/agents/DockerRunner.ts +4 -2
  86. package/src/lib/agents/MockRunner.ts +2 -1
  87. package/src/lib/agents/SSHRunner.ts +4 -2
  88. package/src/lib/agents/ShellRunner.ts +4 -1
  89. package/src/lib/sql/adapters/MssqlAdapter.ts +1 -1
  90. package/src/lib/sql/adapters/MysqlAdapter.ts +1 -1
  91. package/src/lib/sql/adapters/PostgresAdapter.ts +1 -1
  92. package/src/lib/sql/adapters/SqliteAdapter.ts +1 -1
  93. package/.next/static/chunks/0p28yw2f2duy-.js +0 -1
  94. package/.next/static/chunks/0z0d3-6aolefr.js +0 -6
  95. /package/.next/static/{WLQchpoAU3XMEr3Ep5w4b → PtixAwrSwsBc6DJtUuNCf}/_buildManifest.js +0 -0
  96. /package/.next/static/{WLQchpoAU3XMEr3Ep5w4b → PtixAwrSwsBc6DJtUuNCf}/_clientMiddlewareManifest.js +0 -0
  97. /package/.next/static/{WLQchpoAU3XMEr3Ep5w4b → PtixAwrSwsBc6DJtUuNCf}/_ssgManifest.js +0 -0
@@ -0,0 +1,1509 @@
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>Neural Loom: UI Capability Audit & Gap Analysis</title>
7
+
8
+ <!-- Google Fonts: Outfit & JetBrains Mono -->
9
+ <link rel="preconnect" href="https://fonts.googleapis.com">
10
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
11
+ <link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:ital,wght@0,100..800;1,100..800&family=Outfit:wght@100..900&display=swap" rel="stylesheet">
12
+
13
+ <style>
14
+ :root {
15
+ --background-hsl: 222, 24%, 7%;
16
+ --foreground-hsl: 210, 40%, 98%;
17
+ --card-hsl: 222, 24%, 10%;
18
+ --card-hover-hsl: 222, 24%, 13%;
19
+ --border-hsl: 222, 15%, 16%;
20
+ --border-focus-hsl: 262, 83%, 67%;
21
+ --primary-hsl: 262, 83%, 67%;
22
+ --primary-hover-hsl: 262, 83%, 62%;
23
+ --accent-hsl: 195, 100%, 50%;
24
+ --muted-hsl: 215, 20%, 65%;
25
+ --success-hsl: 142, 72%, 45%;
26
+ --warning-hsl: 38, 92%, 50%;
27
+ --danger-hsl: 0, 84%, 60%;
28
+
29
+ --background: hsl(var(--background-hsl));
30
+ --foreground: hsl(var(--foreground-hsl));
31
+ --card: hsl(var(--card-hsl));
32
+ --card-hover: hsl(var(--card-hover-hsl));
33
+ --border: hsl(var(--border-hsl));
34
+ --border-focus: hsl(var(--border-focus-hsl));
35
+ --primary: hsl(var(--primary-hsl));
36
+ --primary-hover: hsl(var(--primary-hover-hsl));
37
+ --accent: hsl(var(--accent-hsl));
38
+ --muted: hsl(var(--muted-hsl));
39
+ --success: hsl(var(--success-hsl));
40
+ --warning: hsl(var(--warning-hsl));
41
+ --danger: hsl(var(--danger-hsl));
42
+
43
+ --glass-bg: rgba(15, 23, 42, 0.45);
44
+ --glass-border: rgba(255, 255, 255, 0.04);
45
+ --glass-shadow: 0 8px 32px 0 rgba(0, 0, 0, 0.37);
46
+
47
+ --font-sans: 'Outfit', system-ui, -apple-system, sans-serif;
48
+ --font-mono: 'JetBrains Mono', monospace;
49
+ }
50
+
51
+ * {
52
+ box-sizing: border-box;
53
+ padding: 0;
54
+ margin: 0;
55
+ }
56
+
57
+ html, body {
58
+ min-height: 100%;
59
+ width: 100%;
60
+ background-color: var(--background);
61
+ color: var(--foreground);
62
+ font-family: var(--font-sans);
63
+ overflow-x: hidden;
64
+ line-height: 1.5;
65
+ }
66
+
67
+ body {
68
+ display: flex;
69
+ flex-direction: column;
70
+ background-image:
71
+ radial-gradient(circle at 10% 20%, rgba(109, 40, 217, 0.15) 0%, transparent 40%),
72
+ radial-gradient(circle at 90% 80%, rgba(14, 165, 233, 0.1) 0%, transparent 45%);
73
+ background-attachment: fixed;
74
+ }
75
+
76
+ header {
77
+ backdrop-filter: blur(12px);
78
+ -webkit-backdrop-filter: blur(12px);
79
+ background: var(--glass-bg);
80
+ border-bottom: 1px solid var(--border);
81
+ padding: 1.5rem 3rem;
82
+ display: flex;
83
+ justify-content: space-between;
84
+ align-items: center;
85
+ position: sticky;
86
+ top: 0;
87
+ z-index: 100;
88
+ box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15);
89
+ }
90
+
91
+ .brand-container {
92
+ display: flex;
93
+ align-items: center;
94
+ gap: 1rem;
95
+ }
96
+
97
+ .logo-glow {
98
+ width: 48px;
99
+ height: 48px;
100
+ border-radius: 12px;
101
+ background: linear-gradient(135deg, var(--primary) 0%, var(--accent) 100%);
102
+ box-shadow: 0 0 20px rgba(109, 40, 217, 0.4);
103
+ display: flex;
104
+ align-items: center;
105
+ justify-content: center;
106
+ font-size: 1.5rem;
107
+ font-weight: 800;
108
+ color: #fff;
109
+ }
110
+
111
+ .header-text h1 {
112
+ font-size: 1.75rem;
113
+ font-weight: 800;
114
+ letter-spacing: -0.02em;
115
+ background: linear-gradient(135deg, #fff 40%, var(--muted) 100%);
116
+ -webkit-background-clip: text;
117
+ -webkit-text-fill-color: transparent;
118
+ }
119
+
120
+ .header-text p {
121
+ font-size: 0.85rem;
122
+ color: var(--muted);
123
+ }
124
+
125
+ .header-badge {
126
+ display: flex;
127
+ align-items: center;
128
+ gap: 0.75rem;
129
+ }
130
+
131
+ .badge {
132
+ background: rgba(109, 40, 217, 0.1);
133
+ border: 1px solid rgba(109, 40, 217, 0.25);
134
+ color: hsl(262, 83%, 75%);
135
+ padding: 0.35rem 0.75rem;
136
+ border-radius: 9999px;
137
+ font-size: 0.75rem;
138
+ font-weight: 600;
139
+ display: flex;
140
+ align-items: center;
141
+ gap: 0.4rem;
142
+ }
143
+
144
+ .badge-dot {
145
+ width: 6px;
146
+ height: 6px;
147
+ background-color: var(--accent);
148
+ border-radius: 50%;
149
+ box-shadow: 0 0 8px var(--accent);
150
+ animation: pulse 1.8s infinite;
151
+ }
152
+
153
+ @keyframes pulse {
154
+ 0% { transform: scale(0.95); opacity: 0.5; }
155
+ 50% { transform: scale(1.15); opacity: 1; }
156
+ 100% { transform: scale(0.95); opacity: 0.5; }
157
+ }
158
+
159
+ .nav-tabs {
160
+ display: flex;
161
+ gap: 0.5rem;
162
+ background: rgba(255, 255, 255, 0.02);
163
+ border: 1px solid var(--border);
164
+ padding: 0.35rem;
165
+ border-radius: 10px;
166
+ }
167
+
168
+ .tab-btn {
169
+ background: transparent;
170
+ border: none;
171
+ color: var(--muted);
172
+ padding: 0.5rem 1.25rem;
173
+ border-radius: 8px;
174
+ font-size: 0.875rem;
175
+ font-weight: 600;
176
+ cursor: pointer;
177
+ font-family: var(--font-sans);
178
+ transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1);
179
+ }
180
+
181
+ .tab-btn:hover {
182
+ color: #fff;
183
+ background: rgba(255, 255, 255, 0.03);
184
+ }
185
+
186
+ .tab-btn.active {
187
+ color: #fff;
188
+ background: var(--primary);
189
+ box-shadow: 0 2px 10px rgba(109, 40, 217, 0.3);
190
+ }
191
+
192
+ main {
193
+ flex: 1;
194
+ width: 100%;
195
+ max-width: 1280px;
196
+ margin: 0 auto;
197
+ padding: 3rem 1.5rem;
198
+ display: flex;
199
+ flex-direction: column;
200
+ gap: 3rem;
201
+ }
202
+
203
+ .tab-content {
204
+ display: none;
205
+ animation: fadeIn 0.4s ease forwards;
206
+ }
207
+
208
+ .tab-content.active {
209
+ display: block;
210
+ }
211
+
212
+ @keyframes fadeIn {
213
+ from { opacity: 0; transform: translateY(10px); }
214
+ to { opacity: 1; transform: translateY(0); }
215
+ }
216
+
217
+ /* Executive Summary Layout */
218
+ .hero-section {
219
+ background: linear-gradient(135deg, rgba(15, 23, 42, 0.6) 0%, rgba(10, 15, 30, 0.7) 100%);
220
+ border: 1px solid var(--border);
221
+ border-radius: 24px;
222
+ padding: 3rem;
223
+ display: grid;
224
+ grid-template-columns: 2fr 1fr;
225
+ gap: 3rem;
226
+ align-items: center;
227
+ position: relative;
228
+ overflow: hidden;
229
+ }
230
+
231
+ .hero-section::before {
232
+ content: '';
233
+ position: absolute;
234
+ width: 300px;
235
+ height: 300px;
236
+ background: radial-gradient(circle, rgba(109, 40, 217, 0.12) 0%, transparent 70%);
237
+ top: -100px;
238
+ right: -100px;
239
+ pointer-events: none;
240
+ }
241
+
242
+ .hero-info h2 {
243
+ font-size: 2.25rem;
244
+ font-weight: 800;
245
+ letter-spacing: -0.03em;
246
+ margin-bottom: 1rem;
247
+ line-height: 1.2;
248
+ }
249
+
250
+ .hero-info p {
251
+ color: var(--muted);
252
+ font-size: 1.1rem;
253
+ margin-bottom: 2rem;
254
+ max-width: 680px;
255
+ }
256
+
257
+ .hero-stats-panel {
258
+ background: rgba(255, 255, 255, 0.01);
259
+ border: 1px solid var(--border);
260
+ border-radius: 16px;
261
+ padding: 2rem;
262
+ text-align: center;
263
+ display: flex;
264
+ flex-direction: column;
265
+ align-items: center;
266
+ justify-content: center;
267
+ backdrop-filter: blur(8px);
268
+ }
269
+
270
+ .progress-circle-container {
271
+ position: relative;
272
+ width: 140px;
273
+ height: 140px;
274
+ margin-bottom: 1.5rem;
275
+ }
276
+
277
+ .progress-circle-svg {
278
+ width: 100%;
279
+ height: 100%;
280
+ transform: rotate(-90deg);
281
+ }
282
+
283
+ .circle-bg {
284
+ fill: none;
285
+ stroke: var(--border);
286
+ stroke-width: 10;
287
+ }
288
+
289
+ .circle-fill {
290
+ fill: none;
291
+ stroke: url(#gradient-progress);
292
+ stroke-width: 10;
293
+ stroke-dasharray: 440;
294
+ stroke-dashoffset: 440;
295
+ stroke-linecap: round;
296
+ transition: stroke-dashoffset 0.8s ease;
297
+ }
298
+
299
+ .progress-value {
300
+ position: absolute;
301
+ top: 50%;
302
+ left: 50%;
303
+ transform: translate(-50%, -50%);
304
+ font-size: 1.75rem;
305
+ font-weight: 800;
306
+ color: #fff;
307
+ }
308
+
309
+ .progress-label {
310
+ font-size: 0.875rem;
311
+ color: var(--muted);
312
+ text-transform: uppercase;
313
+ letter-spacing: 0.05em;
314
+ }
315
+
316
+ .summary-grid {
317
+ display: grid;
318
+ grid-template-columns: repeat(3, 1fr);
319
+ gap: 1.5rem;
320
+ margin-top: 1rem;
321
+ }
322
+
323
+ .summary-card {
324
+ background: var(--card);
325
+ border: 1px solid var(--border);
326
+ border-radius: 16px;
327
+ padding: 1.75rem;
328
+ transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1);
329
+ }
330
+
331
+ .summary-card:hover {
332
+ border-color: var(--border-focus);
333
+ transform: translateY(-3px);
334
+ }
335
+
336
+ .summary-card-icon {
337
+ font-size: 1.75rem;
338
+ margin-bottom: 1rem;
339
+ display: inline-block;
340
+ }
341
+
342
+ .summary-card h3 {
343
+ font-size: 1.15rem;
344
+ font-weight: 700;
345
+ margin-bottom: 0.5rem;
346
+ color: #fff;
347
+ }
348
+
349
+ .summary-card p {
350
+ font-size: 0.875rem;
351
+ color: var(--muted);
352
+ line-height: 1.45;
353
+ }
354
+
355
+ /* Interactive Feature Grid */
356
+ .features-grid {
357
+ display: grid;
358
+ grid-template-columns: repeat(2, 1fr);
359
+ gap: 1.5rem;
360
+ }
361
+
362
+ .feature-card {
363
+ background: var(--card);
364
+ border: 1px solid var(--border);
365
+ border-radius: 18px;
366
+ padding: 2rem;
367
+ transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1);
368
+ display: flex;
369
+ flex-direction: column;
370
+ position: relative;
371
+ }
372
+
373
+ .feature-card:hover {
374
+ border-color: var(--border-focus);
375
+ background-color: var(--card-hover);
376
+ box-shadow: 0 4px 20px rgba(109, 40, 217, 0.1);
377
+ }
378
+
379
+ .feature-header {
380
+ display: flex;
381
+ justify-content: space-between;
382
+ align-items: flex-start;
383
+ margin-bottom: 1rem;
384
+ }
385
+
386
+ .feature-title-area {
387
+ display: flex;
388
+ align-items: center;
389
+ gap: 0.75rem;
390
+ }
391
+
392
+ .feature-icon {
393
+ font-size: 1.5rem;
394
+ width: 40px;
395
+ height: 40px;
396
+ background: rgba(255, 255, 255, 0.02);
397
+ border: 1px solid var(--border);
398
+ border-radius: 10px;
399
+ display: flex;
400
+ align-items: center;
401
+ justify-content: center;
402
+ }
403
+
404
+ .feature-title-area h3 {
405
+ font-size: 1.25rem;
406
+ font-weight: 700;
407
+ color: #fff;
408
+ }
409
+
410
+ .feature-status {
411
+ font-size: 0.7rem;
412
+ font-weight: 700;
413
+ text-transform: uppercase;
414
+ letter-spacing: 0.05em;
415
+ padding: 0.25rem 0.6rem;
416
+ border-radius: 6px;
417
+ }
418
+
419
+ .status-completed {
420
+ background: rgba(16, 185, 129, 0.1);
421
+ color: var(--success);
422
+ border: 1px solid rgba(16, 185, 129, 0.2);
423
+ }
424
+
425
+ .status-partial {
426
+ background: rgba(234, 179, 8, 0.1);
427
+ color: var(--warning);
428
+ border: 1px solid rgba(234, 179, 8, 0.2);
429
+ }
430
+
431
+ .feature-desc {
432
+ font-size: 0.9rem;
433
+ color: var(--muted);
434
+ margin-bottom: 1.25rem;
435
+ line-height: 1.5;
436
+ }
437
+
438
+ .feature-tags {
439
+ display: flex;
440
+ flex-wrap: wrap;
441
+ gap: 0.4rem;
442
+ margin-top: auto;
443
+ }
444
+
445
+ .feature-tag {
446
+ background: rgba(255, 255, 255, 0.03);
447
+ border: 1px solid var(--border);
448
+ color: var(--muted);
449
+ font-size: 0.725rem;
450
+ padding: 0.2rem 0.5rem;
451
+ border-radius: 4px;
452
+ font-family: var(--font-mono);
453
+ }
454
+
455
+ /* Gap Assessment Table/List */
456
+ .gap-header {
457
+ margin-bottom: 1.5rem;
458
+ border-bottom: 1px solid var(--border);
459
+ padding-bottom: 1rem;
460
+ }
461
+
462
+ .gap-header h2 {
463
+ font-size: 1.75rem;
464
+ font-weight: 800;
465
+ }
466
+
467
+ .gap-list {
468
+ display: flex;
469
+ flex-direction: column;
470
+ gap: 1.25rem;
471
+ }
472
+
473
+ .gap-row {
474
+ background: var(--card);
475
+ border: 1px solid var(--border);
476
+ border-radius: 16px;
477
+ padding: 1.5rem;
478
+ display: grid;
479
+ grid-template-columns: 1fr 1fr 1fr;
480
+ gap: 2rem;
481
+ align-items: center;
482
+ transition: all 0.2s ease;
483
+ }
484
+
485
+ .gap-row:hover {
486
+ border-color: rgba(239, 68, 68, 0.25);
487
+ background-color: var(--card-hover);
488
+ }
489
+
490
+ .gap-component {
491
+ display: flex;
492
+ align-items: center;
493
+ gap: 0.75rem;
494
+ }
495
+
496
+ .gap-component-icon {
497
+ font-size: 1.25rem;
498
+ padding: 0.5rem;
499
+ background: rgba(255, 255, 255, 0.02);
500
+ border: 1px solid var(--border);
501
+ border-radius: 8px;
502
+ }
503
+
504
+ .gap-component-info h4 {
505
+ font-size: 1.05rem;
506
+ font-weight: 700;
507
+ color: #fff;
508
+ }
509
+
510
+ .gap-component-info span {
511
+ font-size: 0.75rem;
512
+ color: var(--muted);
513
+ }
514
+
515
+ .gap-current {
516
+ font-size: 0.875rem;
517
+ color: hsl(0, 84%, 75%);
518
+ display: flex;
519
+ align-items: flex-start;
520
+ gap: 0.5rem;
521
+ }
522
+
523
+ .gap-current::before {
524
+ content: '❌';
525
+ font-size: 0.8rem;
526
+ margin-top: 0.15rem;
527
+ }
528
+
529
+ .gap-recommendation {
530
+ font-size: 0.875rem;
531
+ color: hsl(142, 72%, 75%);
532
+ display: flex;
533
+ align-items: flex-start;
534
+ gap: 0.5rem;
535
+ }
536
+
537
+ .gap-recommendation::before {
538
+ content: '💡';
539
+ font-size: 0.8rem;
540
+ margin-top: 0.15rem;
541
+ }
542
+
543
+ /* Checklist Widget styling */
544
+ .checklist-container {
545
+ display: grid;
546
+ grid-template-columns: 1fr 3fr;
547
+ gap: 2rem;
548
+ }
549
+
550
+ .checklist-categories {
551
+ display: flex;
552
+ flex-direction: column;
553
+ gap: 0.75rem;
554
+ position: sticky;
555
+ top: 100px;
556
+ height: fit-content;
557
+ }
558
+
559
+ .cat-btn {
560
+ background: var(--card);
561
+ border: 1px solid var(--border);
562
+ color: var(--muted);
563
+ padding: 0.75rem 1.25rem;
564
+ border-radius: 12px;
565
+ text-align: left;
566
+ font-family: var(--font-sans);
567
+ font-weight: 600;
568
+ cursor: pointer;
569
+ display: flex;
570
+ justify-content: space-between;
571
+ align-items: center;
572
+ transition: all 0.2s ease;
573
+ }
574
+
575
+ .cat-btn:hover {
576
+ border-color: var(--border-focus);
577
+ color: #fff;
578
+ }
579
+
580
+ .cat-btn.active {
581
+ background: rgba(109, 40, 217, 0.1);
582
+ border-color: var(--primary);
583
+ color: #fff;
584
+ }
585
+
586
+ .cat-badge {
587
+ background: rgba(255, 255, 255, 0.05);
588
+ padding: 0.15rem 0.5rem;
589
+ border-radius: 9999px;
590
+ font-size: 0.7rem;
591
+ font-family: var(--font-mono);
592
+ }
593
+
594
+ .checklist-list {
595
+ background: var(--card);
596
+ border: 1px solid var(--border);
597
+ border-radius: 20px;
598
+ padding: 2rem;
599
+ display: flex;
600
+ flex-direction: column;
601
+ gap: 1.5rem;
602
+ }
603
+
604
+ .checklist-group-title {
605
+ font-size: 1.35rem;
606
+ font-weight: 800;
607
+ border-bottom: 1px solid var(--border);
608
+ padding-bottom: 0.5rem;
609
+ margin-bottom: 0.5rem;
610
+ color: #fff;
611
+ display: flex;
612
+ justify-content: space-between;
613
+ align-items: center;
614
+ }
615
+
616
+ .group-progress {
617
+ font-size: 0.8rem;
618
+ font-family: var(--font-mono);
619
+ color: var(--muted);
620
+ font-weight: normal;
621
+ }
622
+
623
+ .checklist-item {
624
+ display: flex;
625
+ align-items: flex-start;
626
+ gap: 1rem;
627
+ padding: 0.75rem 1rem;
628
+ border-radius: 10px;
629
+ background: rgba(255, 255, 255, 0.01);
630
+ border: 1px solid var(--border);
631
+ cursor: pointer;
632
+ transition: all 0.2s ease;
633
+ }
634
+
635
+ .checklist-item:hover {
636
+ background: rgba(255, 255, 255, 0.03);
637
+ border-color: var(--border-focus);
638
+ }
639
+
640
+ .checklist-item input[type="checkbox"] {
641
+ width: 18px;
642
+ height: 18px;
643
+ border-radius: 4px;
644
+ accent-color: var(--primary);
645
+ margin-top: 0.2rem;
646
+ cursor: pointer;
647
+ }
648
+
649
+ .checklist-item-info {
650
+ flex: 1;
651
+ }
652
+
653
+ .checklist-item-info h5 {
654
+ font-size: 0.95rem;
655
+ font-weight: 700;
656
+ color: #fff;
657
+ margin-bottom: 0.15rem;
658
+ display: flex;
659
+ align-items: center;
660
+ gap: 0.5rem;
661
+ }
662
+
663
+ .checklist-item.checked .checklist-item-info h5 {
664
+ text-decoration: line-through;
665
+ color: var(--muted);
666
+ }
667
+
668
+ .checklist-item-info p {
669
+ font-size: 0.825rem;
670
+ color: var(--muted);
671
+ line-height: 1.4;
672
+ }
673
+
674
+ .item-tag {
675
+ font-size: 0.65rem;
676
+ font-weight: 700;
677
+ text-transform: uppercase;
678
+ padding: 0.15rem 0.4rem;
679
+ border-radius: 4px;
680
+ }
681
+
682
+ .tag-feature {
683
+ background: rgba(59, 130, 246, 0.1);
684
+ color: hsl(217, 91%, 75%);
685
+ border: 1px solid rgba(59, 130, 246, 0.2);
686
+ }
687
+
688
+ .tag-gap {
689
+ background: rgba(239, 68, 68, 0.1);
690
+ color: hsl(0, 84%, 75%);
691
+ border: 1px solid rgba(239, 68, 68, 0.2);
692
+ }
693
+
694
+ footer {
695
+ background: rgba(10, 15, 30, 0.8);
696
+ border-top: 1px solid var(--border);
697
+ padding: 2rem 3rem;
698
+ text-align: center;
699
+ font-size: 0.8rem;
700
+ color: var(--muted);
701
+ display: flex;
702
+ justify-content: space-between;
703
+ align-items: center;
704
+ }
705
+
706
+ footer a {
707
+ color: var(--primary);
708
+ text-decoration: underline;
709
+ transition: color 0.15s ease;
710
+ }
711
+
712
+ footer a:hover {
713
+ color: var(--primary-hover);
714
+ }
715
+
716
+ @media (max-width: 1024px) {
717
+ .hero-section {
718
+ grid-template-columns: 1fr;
719
+ gap: 2rem;
720
+ padding: 2rem;
721
+ }
722
+ .features-grid {
723
+ grid-template-columns: 1fr;
724
+ }
725
+ .gap-row {
726
+ grid-template-columns: 1fr;
727
+ gap: 1rem;
728
+ }
729
+ .checklist-container {
730
+ grid-template-columns: 1fr;
731
+ }
732
+ .checklist-categories {
733
+ position: static;
734
+ flex-direction: row;
735
+ overflow-x: auto;
736
+ padding-bottom: 0.5rem;
737
+ }
738
+ .cat-btn {
739
+ flex-shrink: 0;
740
+ }
741
+ }
742
+ </style>
743
+ </head>
744
+ <body>
745
+
746
+ <svg style="position: absolute; width: 0; height: 0;">
747
+ <defs>
748
+ <linearGradient id="gradient-progress" x1="0%" y1="0%" x2="100%" y2="100%">
749
+ <stop offset="0%" stop-color="var(--primary)" />
750
+ <stop offset="100%" stop-color="var(--accent)" />
751
+ </linearGradient>
752
+ </defs>
753
+ </svg>
754
+
755
+ <header>
756
+ <div class="brand-container">
757
+ <div class="logo-glow">🕸️</div>
758
+ <div class="header-text">
759
+ <h1>Neural Loom</h1>
760
+ <p>UI Feature Audit & Capabilities Assessment</p>
761
+ </div>
762
+ </div>
763
+
764
+ <nav class="nav-tabs">
765
+ <button class="tab-btn active" onclick="switchTab('summary')">Audit Summary</button>
766
+ <button class="tab-btn" onclick="switchTab('features')">Features Map</button>
767
+ <button class="tab-btn" onclick="switchTab('gaps')">Gap Analysis</button>
768
+ <button class="tab-btn" onclick="switchTab('checklist')">Checklist Dashboard</button>
769
+ </nav>
770
+
771
+ <div class="header-badge">
772
+ <div class="badge">
773
+ <span class="badge-dot"></span>
774
+ <span>Version 0.2.19</span>
775
+ </div>
776
+ </div>
777
+ </header>
778
+
779
+ <main>
780
+ <!-- TAB: Summary -->
781
+ <section id="tab-summary" class="tab-content active">
782
+ <div class="hero-section">
783
+ <div class="hero-info">
784
+ <h2>UI Architecture & Gap Audit</h2>
785
+ <p>
786
+ An audit of the Next.js visual orchestration client. While Neural Loom provides a highly coherent, multi-session PTY console cockpit wrapping local, containerized, and VM-based agent processes, some key gaps remain between its custom layouts and standard visual IDE platforms. This dashboard tracks these features and recommends pathways for bridging the gaps.
787
+ </p>
788
+ <div style="display: flex; gap: 1rem; flex-wrap: wrap;">
789
+ <button class="tab-btn active" style="padding: 0.65rem 1.5rem;" onclick="switchTab('checklist')">⚡ Start Audit Checklist</button>
790
+ <button class="tab-btn" style="padding: 0.65rem 1.5rem; background: rgba(255, 255, 255, 0.02); border: 1px solid var(--border);" onclick="switchTab('gaps')">Inspect Feature Gaps</button>
791
+ </div>
792
+ </div>
793
+ <div class="hero-stats-panel">
794
+ <div class="progress-circle-container">
795
+ <svg class="progress-circle-svg" viewBox="0 0 160 160">
796
+ <circle class="circle-bg" cx="80" cy="80" r="70"></circle>
797
+ <circle id="circle-fill" class="circle-fill" cx="80" cy="80" r="70"></circle>
798
+ </svg>
799
+ <div id="overall-progress-text" class="progress-value">0%</div>
800
+ </div>
801
+ <span class="progress-label">Audit Completion Score</span>
802
+ </div>
803
+ </div>
804
+
805
+ <div class="summary-grid" style="margin-top: 2.5rem;">
806
+ <div class="summary-card">
807
+ <span class="summary-card-icon">⚡</span>
808
+ <h3>Low-Latency Terminals</h3>
809
+ <p>
810
+ PTY streams map to `xterm.js` over native WebSockets on Port 3001, providing robust keystroke responses and interactive terminal environments.
811
+ </p>
812
+ </div>
813
+ <div class="summary-card">
814
+ <span class="summary-card-icon">📁</span>
815
+ <h3>Context Staging Hub</h3>
816
+ <p>
817
+ Seamless integration with shared `cprompt.md` and `AGENTS.md` guidelines via automatic slash commands (`/ccc`, `/ccp`) to inject configurations.
818
+ </p>
819
+ </div>
820
+ <div class="summary-card">
821
+ <span class="summary-card-icon">⚙️</span>
822
+ <h3>Local & VM Sandboxes</h3>
823
+ <p>
824
+ Flexible multi-session launcher allows swapping runner environments between the local host, isolated Docker containers, or SSH instances on the fly.
825
+ </p>
826
+ </div>
827
+ </div>
828
+ </section>
829
+
830
+ <!-- TAB: Features Map -->
831
+ <section id="tab-features" class="tab-content">
832
+ <div style="margin-bottom: 2rem;">
833
+ <h2 style="font-size: 1.75rem; font-weight: 800; margin-bottom: 0.5rem;">Interactive Features Map</h2>
834
+ <p style="color: var(--muted); font-size: 0.95rem;">
835
+ Neural Loom consists of several key functional components in its visual IDE environment.
836
+ </p>
837
+ </div>
838
+
839
+ <div class="features-grid">
840
+ <div class="feature-card">
841
+ <div class="feature-header">
842
+ <div class="feature-title-area">
843
+ <div class="feature-icon">📁</div>
844
+ <h3>Workspace Explorer</h3>
845
+ </div>
846
+ <span class="feature-status status-completed">Completed</span>
847
+ </div>
848
+ <p class="feature-desc">
849
+ Left primary panel tree view representing workspace files. Supports basic operations (new file, new folder, rename, and delete) with interactive dialog modals, file filtering, and rapid global search (Ctrl+P).
850
+ </p>
851
+ <div class="feature-tags">
852
+ <span class="feature-tag">WorkspaceData</span>
853
+ <span class="feature-tag">FileItemNode</span>
854
+ <span class="feature-tag">Ctrl+P Search</span>
855
+ </div>
856
+ </div>
857
+
858
+ <div class="feature-card">
859
+ <div class="feature-header">
860
+ <div class="feature-title-area">
861
+ <div class="feature-icon">🌿</div>
862
+ <h3>Source Control</h3>
863
+ </div>
864
+ <span class="feature-status status-completed">Completed</span>
865
+ </div>
866
+ <p class="feature-desc">
867
+ Direct Git integration reading `git status --porcelain`. Highlights staged and unstaged file lists with options to stage, unstage, discard changes, commit locally, and pull/push from/to remotes.
868
+ </p>
869
+ <div class="feature-tags">
870
+ <span class="feature-tag">/api/git</span>
871
+ <span class="feature-tag">GitFileRow</span>
872
+ <span class="feature-tag">Line Diff</span>
873
+ </div>
874
+ </div>
875
+
876
+ <div class="feature-card">
877
+ <div class="feature-header">
878
+ <div class="feature-title-area">
879
+ <div class="feature-icon">🖥️</div>
880
+ <h3>Split Console & PTY</h3>
881
+ </div>
882
+ <span class="feature-status status-completed">Completed</span>
883
+ </div>
884
+ <p class="feature-desc">
885
+ Splits terminal screen horizontally (50/50) to run and observe multiple agent sessions concurrently, bridging WebSocket keystrokes and stdout logs into xterm.js dynamically.
886
+ </p>
887
+ <div class="feature-tags">
888
+ <span class="feature-tag">TerminalConsole</span>
889
+ <span class="feature-tag">xterm.js</span>
890
+ <span class="feature-tag">Split Layout</span>
891
+ </div>
892
+ </div>
893
+
894
+ <div class="feature-card">
895
+ <div class="feature-header">
896
+ <div class="feature-title-area">
897
+ <div class="feature-icon">🗄️</div>
898
+ <h3>Database Explorer</h3>
899
+ </div>
900
+ <span class="feature-status status-completed">Completed</span>
901
+ </div>
902
+ <p class="feature-desc">
903
+ Built-in SQL database explorer interface (`DbExplorer`) capable of rendering relational schemas, listing tables, executing custom SQL commands, and viewing records.
904
+ </p>
905
+ <div class="feature-tags">
906
+ <span class="feature-tag">DbExplorer.tsx</span>
907
+ <span class="feature-tag">SQL Editor</span>
908
+ <span class="feature-tag">Schema Map</span>
909
+ </div>
910
+ </div>
911
+
912
+ <div class="feature-card">
913
+ <div class="feature-header">
914
+ <div class="feature-title-area">
915
+ <div class="feature-icon">📊</div>
916
+ <h3>Telemetry & Costs</h3>
917
+ </div>
918
+ <span class="feature-status status-completed">Completed</span>
919
+ </div>
920
+ <p class="feature-desc">
921
+ Monitors CPU/Memory levels of active containers or local processes using background pollers. Parses stdout streams using regex models to log and compile cumulative input/output token costs.
922
+ </p>
923
+ <div class="feature-tags">
924
+ <span class="feature-tag">/api/sessions/stats</span>
925
+ <span class="feature-tag">Token Usage</span>
926
+ <span class="feature-tag">Est. Cost</span>
927
+ </div>
928
+ </div>
929
+
930
+ <div class="feature-card">
931
+ <div class="feature-header">
932
+ <div class="feature-title-area">
933
+ <div class="feature-icon">🔍</div>
934
+ <h3>Session Log Auditor</h3>
935
+ </div>
936
+ <span class="feature-status status-completed">Completed</span>
937
+ </div>
938
+ <p class="feature-desc">
939
+ Captures and filters full runner stdout log traces. Supports live text filter highlighting and log backups (Export button), and houses custom prompt button configurations in localStorage.
940
+ </p>
941
+ <div class="feature-tags">
942
+ <span class="feature-tag">Log Search</span>
943
+ <span class="feature-tag">Export Logs</span>
944
+ <span class="feature-tag">localStorage</span>
945
+ </div>
946
+ </div>
947
+
948
+ <div class="feature-card">
949
+ <div class="feature-header">
950
+ <div class="feature-title-area">
951
+ <div class="feature-icon">✍️</div>
952
+ <h3>Context Hub Editor</h3>
953
+ </div>
954
+ <span class="feature-status status-completed">Completed</span>
955
+ </div>
956
+ <p class="feature-desc">
957
+ Editor at the bottom of the home view to read and save `cprompt.md` instructions and `AGENTS.md` guidelines, with prompt injection commands `/ccc` and `/ccp` for AI agents.
958
+ </p>
959
+ <div class="feature-tags">
960
+ <span class="feature-tag">ContextEditor.tsx</span>
961
+ <span class="feature-tag">cprompt.md</span>
962
+ <span class="feature-tag">AGENTS.md</span>
963
+ </div>
964
+ </div>
965
+
966
+ <div class="feature-card">
967
+ <div class="feature-header">
968
+ <div class="feature-title-area">
969
+ <div class="feature-icon">🌐</div>
970
+ <h3>Browser Preview</h3>
971
+ </div>
972
+ <span class="feature-status status-completed">Completed</span>
973
+ </div>
974
+ <p class="feature-desc">
975
+ Allows running a preview page at specified ports (e.g. Next.js port 3000 or Vite port 5173) inside a layout tab via iframe embedding, facilitating real-time checking of app output.
976
+ </p>
977
+ <div class="feature-tags">
978
+ <span class="feature-tag">Iframe preview</span>
979
+ <span class="feature-tag">Quick ports</span>
980
+ <span class="feature-tag">CSP Safe</span>
981
+ </div>
982
+ </div>
983
+ </div>
984
+ </section>
985
+
986
+ <!-- TAB: Gap Analysis -->
987
+ <section id="tab-gaps" class="tab-content">
988
+ <div class="gap-header">
989
+ <h2>Features vs Gaps Analysis</h2>
990
+ <p style="color: var(--muted); margin-top: 0.5rem; font-size: 0.95rem;">
991
+ Comparing existing layout capabilities with ideal full-featured IDE requirements.
992
+ </p>
993
+ </div>
994
+
995
+ <div class="gap-list">
996
+ <div class="gap-row">
997
+ <div class="gap-component">
998
+ <span class="gap-component-icon">📝</span>
999
+ <div class="gap-component-info">
1000
+ <h4>File Code Editor</h4>
1001
+ <span>Workspace editing pane</span>
1002
+ </div>
1003
+ </div>
1004
+ <div class="gap-current">
1005
+ Uses raw standard textareas under <code>IdeLayout.tsx</code>. Lacks code folding, syntax highlighting, autocompletion, map scroll, and syntax linting.
1006
+ </div>
1007
+ <div class="gap-recommendation">
1008
+ Embed <strong>Monaco Editor</strong> (VS Code's core) or <strong>CodeMirror 6</strong> dynamically for rich syntax highlighting, code assistance, and formatting.
1009
+ </div>
1010
+ </div>
1011
+
1012
+ <div class="gap-row">
1013
+ <div class="gap-component">
1014
+ <span class="gap-component-icon">🌿</span>
1015
+ <div class="gap-component-info">
1016
+ <h4>Git & Branches</h4>
1017
+ <span>Source Control panel</span>
1018
+ </div>
1019
+ </div>
1020
+ <div class="gap-current">
1021
+ Stages and commits files but lacks branch management (creation, deletion, switching) or a visual commit log history mapping commits.
1022
+ </div>
1023
+ <div class="gap-recommendation">
1024
+ Introduce branch selectors and a <strong>Visual Git Tree log</strong> utilizing SVG graphs mapping the commit history.
1025
+ </div>
1026
+ </div>
1027
+
1028
+ <div class="gap-row">
1029
+ <div class="gap-component">
1030
+ <span class="gap-component-icon">🗄️</span>
1031
+ <div class="gap-component-info">
1032
+ <h4>SQL Client (DB Explorer)</h4>
1033
+ <span>Relational explorer</span>
1034
+ </div>
1035
+ </div>
1036
+ <div class="gap-current">
1037
+ Allows running custom queries and reviewing columns but lacks direct inline record edits or database exports (JSON/CSV).
1038
+ </div>
1039
+ <div class="gap-recommendation">
1040
+ Develop interactive editable grid rows and add file export targets inside the <code>DbExplorer</code> tab.
1041
+ </div>
1042
+ </div>
1043
+
1044
+ <div class="gap-row">
1045
+ <div class="gap-component">
1046
+ <span class="gap-component-icon">📈</span>
1047
+ <div class="gap-component-info">
1048
+ <h4>Token Telemetry</h4>
1049
+ <span>Analytics panel</span>
1050
+ </div>
1051
+ </div>
1052
+ <div class="gap-current">
1053
+ Extracts cumulative token counts in real-time but has no historic tracking or visual charts analyzing expenditure over time.
1054
+ </div>
1055
+ <div class="gap-recommendation">
1056
+ Integrate light charts (e.g., lightweight canvas charts) displaying cost trends across days/sessions.
1057
+ </div>
1058
+ </div>
1059
+
1060
+ <div class="gap-row">
1061
+ <div class="gap-component">
1062
+ <span class="gap-component-icon">🖥️</span>
1063
+ <div class="gap-component-info">
1064
+ <h4>Terminal Controls</h4>
1065
+ <span>Console Bridge</span>
1066
+ </div>
1067
+ </div>
1068
+ <div class="gap-current">
1069
+ Buffers incoming socket text directly to xterm.js but lacks screen capture tools, terminal search buffers, or output pausing.
1070
+ </div>
1071
+ <div class="gap-recommendation">
1072
+ Add controls to pause output scroll streams, capture screenshots/logs, and implement standard xterm-addon-search.
1073
+ </div>
1074
+ </div>
1075
+
1076
+ <div class="gap-row">
1077
+ <div class="gap-component">
1078
+ <span class="gap-component-icon">🎨</span>
1079
+ <div class="gap-component-info">
1080
+ <h4>Visual Customization</h4>
1081
+ <span>Global style settings</span>
1082
+ </div>
1083
+ </div>
1084
+ <div class="gap-current">
1085
+ The layout uses a single predefined dark HSL system. Lacks configurable theme toggles, font size scalers, or high contrast toggles.
1086
+ </div>
1087
+ <div class="gap-recommendation">
1088
+ Introduce user settings popovers storing font scales and custom theme presets (e.g., Solarized, One Dark) in localStorage.
1089
+ </div>
1090
+ </div>
1091
+ </div>
1092
+ </section>
1093
+
1094
+ <!-- TAB: Checklist Dashboard -->
1095
+ <section id="tab-checklist" class="tab-content">
1096
+ <div style="margin-bottom: 2rem;">
1097
+ <h2 style="font-size: 1.75rem; font-weight: 800; margin-bottom: 0.5rem;">Interactive Audit Checklist</h2>
1098
+ <p style="color: var(--muted); font-size: 0.95rem;">
1099
+ Click items below to toggle audit checks. The overall completion score updates dynamically.
1100
+ </p>
1101
+ </div>
1102
+
1103
+ <div class="checklist-container">
1104
+ <div class="checklist-categories">
1105
+ <button class="cat-btn active" onclick="filterChecklist('all')">
1106
+ <span>All Audits</span>
1107
+ <span class="cat-badge" id="badge-all">0/26</span>
1108
+ </button>
1109
+ <button class="cat-btn" onclick="filterChecklist('layout')">
1110
+ <span>Layout & Terminal</span>
1111
+ <span class="cat-badge" id="badge-layout">0/6</span>
1112
+ </button>
1113
+ <button class="cat-btn" onclick="filterChecklist('editor')">
1114
+ <span>Editor & Files</span>
1115
+ <span class="cat-badge" id="badge-editor">0/6</span>
1116
+ </button>
1117
+ <button class="cat-btn" onclick="filterChecklist('git')">
1118
+ <span>Git Controls</span>
1119
+ <span class="cat-badge" id="badge-git">0/5</span>
1120
+ </button>
1121
+ <button class="cat-btn" onclick="filterChecklist('db')">
1122
+ <span>Database Explorer</span>
1123
+ <span class="cat-badge" id="badge-db">0/4</span>
1124
+ </button>
1125
+ <button class="cat-btn" onclick="filterChecklist('analytics')">
1126
+ <span>Context & Stats</span>
1127
+ <span class="cat-badge" id="badge-analytics">0/5</span>
1128
+ </button>
1129
+ </div>
1130
+
1131
+ <div class="checklist-list">
1132
+ <!-- GROUP: Layout & Terminal -->
1133
+ <div class="checklist-group" data-category="layout">
1134
+ <div class="checklist-group-title">
1135
+ <span>Layout & Terminal Consoles</span>
1136
+ <span class="group-progress" id="progress-layout">0/6 completed</span>
1137
+ </div>
1138
+
1139
+ <label class="checklist-item checked">
1140
+ <input type="checkbox" checked onchange="toggleAuditItem(this)" data-cat="layout">
1141
+ <div class="checklist-item-info">
1142
+ <h5>Multi-Session Workspace Swapping <span class="item-tag tag-feature">Feature</span></h5>
1143
+ <p>Swap active sessions via top tabs while maintaining independent file tree cache, terminals, and editor state.</p>
1144
+ </div>
1145
+ </label>
1146
+
1147
+ <label class="checklist-item checked">
1148
+ <input type="checkbox" checked onchange="toggleAuditItem(this)" data-cat="layout">
1149
+ <div class="checklist-item-info">
1150
+ <h5>Horizontal Split Console <span class="item-tag tag-feature">Feature</span></h5>
1151
+ <p>Horizontally split terminal console layout allowing simultaneous monitoring of two running agent instances.</p>
1152
+ </div>
1153
+ </label>
1154
+
1155
+ <label class="checklist-item checked">
1156
+ <input type="checkbox" checked onchange="toggleAuditItem(this)" data-cat="layout">
1157
+ <div class="checklist-item-info">
1158
+ <h5>Local Host OS PTY Runner <span class="item-tag tag-feature">Feature</span></h5>
1159
+ <p>Support initiating PTY shells inside local Git Bash environments, streaming logs directly via WebSockets.</p>
1160
+ </div>
1161
+ </label>
1162
+
1163
+ <label class="checklist-item checked">
1164
+ <input type="checkbox" checked onchange="toggleAuditItem(this)" data-cat="layout">
1165
+ <div class="checklist-item-info">
1166
+ <h5>Isolated Docker & SSH Connectors <span class="item-tag tag-feature">Feature</span></h5>
1167
+ <p>Configure and trigger runners wrapping Alpine Docker sandboxes or remote SSH terminals.</p>
1168
+ </div>
1169
+ </label>
1170
+
1171
+ <label class="checklist-item">
1172
+ <input type="checkbox" onchange="toggleAuditItem(this)" data-cat="layout">
1173
+ <div class="checklist-item-info">
1174
+ <h5>Pause & Resume Output Buffers <span class="item-tag tag-gap">Gap</span></h5>
1175
+ <p>Ability to temporarily pause PTY output streams visually to review errors without stopping the background process.</p>
1176
+ </div>
1177
+ </label>
1178
+
1179
+ <label class="checklist-item">
1180
+ <input type="checkbox" onchange="toggleAuditItem(this)" data-cat="layout">
1181
+ <div class="checklist-item-info">
1182
+ <h5>Terminal Output Search <span class="item-tag tag-gap">Gap</span></h5>
1183
+ <p>Add search panel utility or xterm-addon-search support inside active console streams to find specific logs.</p>
1184
+ </div>
1185
+ </label>
1186
+ </div>
1187
+
1188
+ <!-- GROUP: Editor & Files -->
1189
+ <div class="checklist-group" data-category="editor">
1190
+ <div class="checklist-group-title">
1191
+ <span>Editor & Filesystem</span>
1192
+ <span class="group-progress" id="progress-editor">0/6 completed</span>
1193
+ </div>
1194
+
1195
+ <label class="checklist-item checked">
1196
+ <input type="checkbox" checked onchange="toggleAuditItem(this)" data-cat="editor">
1197
+ <div class="checklist-item-info">
1198
+ <h5>Tabbed File Editor Workspace <span class="item-tag tag-feature">Feature</span></h5>
1199
+ <p>Keep multiple editor file tabs open in a layout area, updating saved indicators on code modification.</p>
1200
+ </div>
1201
+ </label>
1202
+
1203
+ <label class="checklist-item checked">
1204
+ <input type="checkbox" checked onchange="toggleAuditItem(this)" data-cat="editor">
1205
+ <div class="checklist-item-info">
1206
+ <h5>File Operations API Modals <span class="item-tag tag-feature">Feature</span></h5>
1207
+ <p>Create files, directories, rename items, and trigger deletion requests with prompt dialogues updating file tree structures.</p>
1208
+ </div>
1209
+ </label>
1210
+
1211
+ <label class="checklist-item checked">
1212
+ <input type="checkbox" checked onchange="toggleAuditItem(this)" data-cat="editor">
1213
+ <div class="checklist-item-info">
1214
+ <h5>Scoped Directory Mounting <span class="item-tag tag-feature">Feature</span></h5>
1215
+ <p>Mount folders outside the main workspace root tree via the primary side activity bar selector.</p>
1216
+ </div>
1217
+ </label>
1218
+
1219
+ <label class="checklist-item checked">
1220
+ <input type="checkbox" checked onchange="toggleAuditItem(this)" data-cat="editor">
1221
+ <div class="checklist-item-info">
1222
+ <h5>Markdown Split Preview Mode <span class="item-tag tag-feature">Feature</span></h5>
1223
+ <p>Split view support for Markdown files, rendering compiled HTML preview side-by-side with raw markdown text.</p>
1224
+ </div>
1225
+ </label>
1226
+
1227
+ <label class="checklist-item">
1228
+ <input type="checkbox" onchange="toggleAuditItem(this)" data-cat="editor">
1229
+ <div class="checklist-item-info">
1230
+ <h5>Dynamic Monaco Editor Integration <span class="item-tag tag-gap">Gap</span></h5>
1231
+ <p>Replace basic HTML textareas with a rich code editor implementing syntax highlighting, autocompletion, and linter bounds.</p>
1232
+ </div>
1233
+ </label>
1234
+
1235
+ <label class="checklist-item">
1236
+ <input type="checkbox" onchange="toggleAuditItem(this)" data-cat="editor">
1237
+ <div class="checklist-item-info">
1238
+ <h5>Auto-save & Session Recovery <span class="item-tag tag-gap">Gap</span></h5>
1239
+ <p>Enable background auto-saving and recovery for drafts of uncommitted edits on tab closure or server restarts.</p>
1240
+ </div>
1241
+ </label>
1242
+ </div>
1243
+
1244
+ <!-- GROUP: Git Source Control -->
1245
+ <div class="checklist-group" data-category="git">
1246
+ <div class="checklist-group-title">
1247
+ <span>Git Integration</span>
1248
+ <span class="group-progress" id="progress-git">0/5 completed</span>
1249
+ </div>
1250
+
1251
+ <label class="checklist-item checked">
1252
+ <input type="checkbox" checked onchange="toggleAuditItem(this)" data-cat="git">
1253
+ <div class="checklist-item-info">
1254
+ <h5>Porcelain Status Tracking <span class="item-tag tag-feature">Feature</span></h5>
1255
+ <p>Retrieve and categorize staged, unstaged, and untracked modifications by invoking backend Porcelain status reads.</p>
1256
+ </div>
1257
+ </label>
1258
+
1259
+ <label class="checklist-item checked">
1260
+ <input type="checkbox" checked onchange="toggleAuditItem(this)" data-cat="git">
1261
+ <div class="checklist-item-info">
1262
+ <h5>Git Actions (Stage/Unstage/Discard) <span class="item-tag tag-feature">Feature</span></h5>
1263
+ <p>Perform basic file staging, unstaging, git ignores, or discard local changes straight from change lists.</p>
1264
+ </div>
1265
+ </label>
1266
+
1267
+ <label class="checklist-item checked">
1268
+ <input type="checkbox" checked onchange="toggleAuditItem(this)" data-cat="git">
1269
+ <div class="checklist-item-info">
1270
+ <h5>Interactive Git Line Diff Reader <span class="item-tag tag-feature">Feature</span></h5>
1271
+ <p>Selecting any modified file compiles its diff and mounts it inside a virtual read-only editor tab using color syntax formats.</p>
1272
+ </div>
1273
+ </label>
1274
+
1275
+ <label class="checklist-item">
1276
+ <input type="checkbox" onchange="toggleAuditItem(this)" data-cat="git">
1277
+ <div class="checklist-item-info">
1278
+ <h5>Visual Commit History Tree <span class="item-tag tag-gap">Gap</span></h5>
1279
+ <p>Show graphic commit history diagrams mapping local/remote commit nodes, branch mergers, and logs.</p>
1280
+ </div>
1281
+ </label>
1282
+
1283
+ <label class="checklist-item">
1284
+ <input type="checkbox" onchange="toggleAuditItem(this)" data-cat="git">
1285
+ <div class="checklist-item-info">
1286
+ <h5>Interactive Merge Conflict Resolution <span class="item-tag tag-gap">Gap</span></h5>
1287
+ <p>Visual UI resolving git merge conflicts, providing direct side-by-side choice selectors (Accept Current vs Incoming).</p>
1288
+ </div>
1289
+ </label>
1290
+ </div>
1291
+
1292
+ <!-- GROUP: Database Explorer -->
1293
+ <div class="checklist-group" data-category="db">
1294
+ <div class="checklist-group-title">
1295
+ <span>Database Client</span>
1296
+ <span class="group-progress" id="progress-db">0/4 completed</span>
1297
+ </div>
1298
+
1299
+ <label class="checklist-item checked">
1300
+ <input type="checkbox" checked onchange="toggleAuditItem(this)" data-cat="db">
1301
+ <div class="checklist-item-info">
1302
+ <h5>Relational Database Schema Tree <span class="item-tag tag-feature">Feature</span></h5>
1303
+ <p>Scan SQLite structures automatically in the workspace, rendering relational diagrams and table listings.</p>
1304
+ </div>
1305
+ </label>
1306
+
1307
+ <label class="checklist-item checked">
1308
+ <input type="checkbox" checked onchange="toggleAuditItem(this)" data-cat="db">
1309
+ <div class="checklist-item-info">
1310
+ <h5>SQL Command Query Executor <span class="item-tag tag-feature">Feature</span></h5>
1311
+ <p>Interactive playground to write, run, and review relational results of multi-line SQL statements.</p>
1312
+ </div>
1313
+ </label>
1314
+
1315
+ <label class="checklist-item">
1316
+ <input type="checkbox" onchange="toggleAuditItem(this)" data-cat="db">
1317
+ <div class="checklist-item-info">
1318
+ <h5>Inline Table Grid Editing <span class="item-tag tag-gap">Gap</span></h5>
1319
+ <p>Direct inline double-click editing of table records in result grids, executing target SQL update transactions.</p>
1320
+ </div>
1321
+ </label>
1322
+
1323
+ <label class="checklist-item">
1324
+ <input type="checkbox" onchange="toggleAuditItem(this)" data-cat="db">
1325
+ <div class="checklist-item-info">
1326
+ <h5>Data Export Capabilities (CSV/JSON) <span class="item-tag tag-gap">Gap</span></h5>
1327
+ <p>Download search/view grids directly as local JSON collections or CSV spreadsheets.</p>
1328
+ </div>
1329
+ </label>
1330
+ </div>
1331
+
1332
+ <!-- GROUP: Context & Stats -->
1333
+ <div class="checklist-group" data-category="analytics">
1334
+ <div class="checklist-group-title">
1335
+ <span>Context Hub & Telemetry</span>
1336
+ <span class="group-progress" id="progress-analytics">0/5 completed</span>
1337
+ </div>
1338
+
1339
+ <label class="checklist-item checked">
1340
+ <input type="checkbox" checked onchange="toggleAuditItem(this)" data-cat="analytics">
1341
+ <div class="checklist-item-info">
1342
+ <h5>Shared Context Compiler Templates <span class="item-tag tag-feature">Feature</span></h5>
1343
+ <p>Shared input panel persistent mapping of developer prompt instructions (cprompt.md) and globally forced rules.</p>
1344
+ </div>
1345
+ </label>
1346
+
1347
+ <label class="checklist-item checked">
1348
+ <input type="checkbox" checked onchange="toggleAuditItem(this)" data-cat="analytics">
1349
+ <div class="checklist-item-info">
1350
+ <h5>One-click Slash Commands Injection <span class="item-tag tag-feature">Feature</span></h5>
1351
+ <p>Deploy prompt/rules staging context maps directly to terminals with single-click command executors (/ccc, /ccp).</p>
1352
+ </div>
1353
+ </label>
1354
+
1355
+ <label class="checklist-item checked">
1356
+ <input type="checkbox" checked onchange="toggleAuditItem(this)" data-cat="analytics">
1357
+ <div class="checklist-item-info">
1358
+ <h5>CPU/Memory Telemetry Gauges <span class="item-tag tag-feature">Feature</span></h5>
1359
+ <p>Background polling reflecting real-time physical resource loads of runner targets (host processes or containers).</p>
1360
+ </div>
1361
+ </label>
1362
+
1363
+ <label class="checklist-item checked">
1364
+ <input type="checkbox" checked onchange="toggleAuditItem(this)" data-cat="analytics">
1365
+ <div class="checklist-item-info">
1366
+ <h5>Stdout Cost Parsing Telemetry <span class="item-tag tag-feature">Feature</span></h5>
1367
+ <p>Read input/output parameters dynamically on PTY output lines to estimate current session token dollar pricing.</p>
1368
+ </div>
1369
+ </label>
1370
+
1371
+ <label class="checklist-item">
1372
+ <input type="checkbox" onchange="toggleAuditItem(this)" data-cat="analytics">
1373
+ <div class="checklist-item-info">
1374
+ <h5>Token Analytics History Charts <span class="item-tag tag-gap">Gap</span></h5>
1375
+ <p>Render interactive charts displaying historical session expenditures, peak times, and run summaries.</p>
1376
+ </div>
1377
+ </label>
1378
+ </div>
1379
+ </div>
1380
+ </div>
1381
+ </section>
1382
+ </main>
1383
+
1384
+ <footer>
1385
+ <div>
1386
+ <span>Neural Loom — Interactive UI Audit</span>
1387
+ </div>
1388
+ <div>
1389
+ <span>Open app interface at <a href="/" target="_blank">http://localhost:3000</a></span>
1390
+ </div>
1391
+ <div>
1392
+ <span>Document Updated: June 20, 2026</span>
1393
+ </div>
1394
+ </footer>
1395
+
1396
+ <script>
1397
+ // Tab switching logic
1398
+ function switchTab(tabId) {
1399
+ document.querySelectorAll('.tab-btn').forEach(btn => btn.classList.remove('active'));
1400
+ document.querySelectorAll('.tab-content').forEach(content => content.classList.remove('active'));
1401
+
1402
+ // Find the button and add active class
1403
+ const targetBtn = Array.from(document.querySelectorAll('.tab-btn')).find(btn =>
1404
+ btn.getAttribute('onclick').includes(tabId)
1405
+ );
1406
+ if (targetBtn) targetBtn.classList.add('active');
1407
+
1408
+ const targetContent = document.getElementById(`tab-${tabId}`);
1409
+ if (targetContent) targetContent.classList.add('active');
1410
+ }
1411
+
1412
+ // Filter checklist by category
1413
+ function filterChecklist(category) {
1414
+ // Toggle active status on buttons
1415
+ document.querySelectorAll('.checklist-categories .cat-btn').forEach(btn => {
1416
+ btn.classList.remove('active');
1417
+ });
1418
+ event.currentTarget.classList.add('active');
1419
+
1420
+ // Filter groups
1421
+ document.querySelectorAll('.checklist-group').forEach(group => {
1422
+ if (category === 'all' || group.getAttribute('data-category') === category) {
1423
+ group.style.display = 'block';
1424
+ } else {
1425
+ group.style.display = 'none';
1426
+ }
1427
+ });
1428
+ }
1429
+
1430
+ // Toggle checklist item styling
1431
+ function toggleAuditItem(checkbox) {
1432
+ const label = checkbox.closest('.checklist-item');
1433
+ if (checkbox.checked) {
1434
+ label.classList.add('checked');
1435
+ } else {
1436
+ label.classList.remove('checked');
1437
+ }
1438
+ recalculateProgress();
1439
+ }
1440
+
1441
+ // Recalculate and update progress scores
1442
+ function recalculateProgress() {
1443
+ const allItems = document.querySelectorAll('.checklist-item input[type="checkbox"]');
1444
+ const totalCount = allItems.length;
1445
+ let overallChecked = 0;
1446
+
1447
+ // Group counting
1448
+ const categories = ['layout', 'editor', 'git', 'db', 'analytics'];
1449
+ const counts = { all: { checked: 0, total: 0 } };
1450
+
1451
+ categories.forEach(cat => {
1452
+ counts[cat] = { checked: 0, total: 0 };
1453
+ });
1454
+
1455
+ allItems.forEach(item => {
1456
+ const cat = item.getAttribute('data-cat');
1457
+ counts.all.total++;
1458
+ if (item.checked) {
1459
+ overallChecked++;
1460
+ counts.all.checked++;
1461
+ }
1462
+ if (cat && counts[cat]) {
1463
+ counts[cat].total++;
1464
+ if (item.checked) {
1465
+ counts[cat].checked++;
1466
+ }
1467
+ }
1468
+ });
1469
+
1470
+ // Update progress badges
1471
+ document.getElementById('badge-all').innerText = `${counts.all.checked}/${counts.all.total}`;
1472
+ categories.forEach(cat => {
1473
+ document.getElementById(`badge-${cat}`).innerText = `${counts[cat].checked}/${counts[cat].total}`;
1474
+ document.getElementById(`progress-${cat}`).innerText = `${counts[cat].checked}/${counts[cat].total} completed`;
1475
+ });
1476
+
1477
+ // Calculate percentage
1478
+ const percent = totalCount > 0 ? Math.round((overallChecked / totalCount) * 100) : 0;
1479
+
1480
+ // Update Hero progress texts
1481
+ document.getElementById('overall-progress-text').innerText = `${percent}%`;
1482
+
1483
+ // Update SVG circular dashoffset
1484
+ // Radius of circle is 70, Circumference is 2 * PI * 70 = ~439.8
1485
+ const strokeFill = document.getElementById('circle-fill');
1486
+ if (strokeFill) {
1487
+ const strokeDashOffset = 440 - (440 * percent) / 100;
1488
+ strokeFill.style.strokeDashoffset = strokeDashOffset;
1489
+ }
1490
+ }
1491
+
1492
+ // Attach click events to checklist label rows to toggle checkbox (avoiding double toggling)
1493
+ document.querySelectorAll('.checklist-item').forEach(item => {
1494
+ item.addEventListener('click', function(e) {
1495
+ if (e.target.tagName !== 'INPUT') {
1496
+ const checkbox = this.querySelector('input[type="checkbox"]');
1497
+ checkbox.checked = !checkbox.checked;
1498
+ toggleAuditItem(checkbox);
1499
+ }
1500
+ });
1501
+ });
1502
+
1503
+ // Run progress count on load
1504
+ window.addEventListener('DOMContentLoaded', () => {
1505
+ recalculateProgress();
1506
+ });
1507
+ </script>
1508
+ </body>
1509
+ </html>