antri_cli 1.57.42 β 1.57.43
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/promptToolkit.d.ts.map +1 -1
- package/dist/cli/promptToolkit.js +2 -0
- package/dist/cli/promptToolkit.js.map +1 -1
- package/dist/cli/shortcuts.d.ts.map +1 -1
- package/dist/cli/shortcuts.js +40 -0
- package/dist/cli/shortcuts.js.map +1 -1
- package/dist/core/swarm.d.ts +37 -0
- package/dist/core/swarm.d.ts.map +1 -0
- package/dist/core/swarm.js +468 -0
- package/dist/core/swarm.js.map +1 -0
- package/dist/core/updater.d.ts +1 -1
- package/dist/core/updater.js +1 -1
- package/dist/core/visualHealer.d.ts +33 -0
- package/dist/core/visualHealer.d.ts.map +1 -0
- package/dist/core/visualHealer.js +175 -0
- package/dist/core/visualHealer.js.map +1 -0
- package/dist/desktop/public/app.js +386 -1
- package/dist/desktop/public/index.html +194 -2
- package/dist/desktop/public/style.css +394 -0
- package/dist/desktop/server.d.ts.map +1 -1
- package/dist/desktop/server.js +73 -0
- package/dist/desktop/server.js.map +1 -1
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -1
- package/dist/providers/gemini.d.ts +9 -0
- package/dist/providers/gemini.d.ts.map +1 -1
- package/dist/providers/gemini.js +40 -0
- package/dist/providers/gemini.js.map +1 -1
- package/dist/types.d.ts +42 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
<header class="app-header">
|
|
16
16
|
<div class="brand-zone">
|
|
17
17
|
<span class="logo-text">ANTRI</span>
|
|
18
|
-
<span class="version-tag">v1.57.
|
|
18
|
+
<span class="version-tag">v1.57.43</span>
|
|
19
19
|
</div>
|
|
20
20
|
|
|
21
21
|
<!-- Mode Toggle -->
|
|
@@ -85,6 +85,9 @@
|
|
|
85
85
|
<button class="nav-item" onclick="showTab('dialectic')">
|
|
86
86
|
<span class="nav-label">Dialectic Arena</span>
|
|
87
87
|
</button>
|
|
88
|
+
<button class="nav-item" onclick="showTab('swarm')">
|
|
89
|
+
<span class="nav-label">πΈοΈ Swarm Canvas</span>
|
|
90
|
+
</button>
|
|
88
91
|
<button class="nav-item" onclick="showTab('goal')">
|
|
89
92
|
<span class="nav-label">Goal Pipeline</span>
|
|
90
93
|
</button>
|
|
@@ -294,6 +297,176 @@
|
|
|
294
297
|
</div>
|
|
295
298
|
</section>
|
|
296
299
|
|
|
300
|
+
<!-- TAB: Agent Swarm Canvas -->
|
|
301
|
+
<section id="tab-swarm" class="tab-panel">
|
|
302
|
+
<div class="panel-header">
|
|
303
|
+
<div>
|
|
304
|
+
<div style="display:flex; align-items:center; gap: 10px;">
|
|
305
|
+
<h2>πΈοΈ Agent Swarm Canvas</h2>
|
|
306
|
+
<span class="badge-consensus" id="swarm-consensus-pill">Consensus: Ready</span>
|
|
307
|
+
</div>
|
|
308
|
+
<p>Autonomous Multi-Agent Directed Acyclic Graph (DAG) orchestration: Architect β Systems Engineer β Threat Auditor β Adversarial QA β Chief Synthesizer.</p>
|
|
309
|
+
</div>
|
|
310
|
+
<div class="debate-controls">
|
|
311
|
+
<input type="text" id="swarm-objective-input" placeholder="Enter system objective to orchestrate..." />
|
|
312
|
+
<button class="action-btn" id="btn-run-swarm" onclick="startSwarmOrchestration()">Launch Swarm DAG</button>
|
|
313
|
+
</div>
|
|
314
|
+
</div>
|
|
315
|
+
|
|
316
|
+
<!-- 1-Click Judge Presets -->
|
|
317
|
+
<div class="swarm-presets-bar">
|
|
318
|
+
<span class="presets-label">β‘ Judge 1-Click Showcases:</span>
|
|
319
|
+
<button class="swarm-preset-btn" onclick="setSwarmPreset('Design and implement a high-throughput distributed Rate Limiter with Redis token-bucket algorithm & sliding window in TypeScript')">β‘ Distributed Rate Limiter</button>
|
|
320
|
+
<button class="swarm-preset-btn" onclick="setSwarmPreset('Architect an end-to-end Zero-Trust OAuth2 authentication microservice with JWT rotation, rate-limiting & threat hardening')">π Zero-Trust Auth Microservice</button>
|
|
321
|
+
<button class="swarm-preset-btn" onclick="setSwarmPreset('Synthesize a high-frequency crypto arbitrage engine with order book depth matching and risk controls')">π High-Frequency Arbitrage</button>
|
|
322
|
+
<button class="swarm-preset-btn" onclick="setSwarmPreset('Build a self-healing REST microservice with automated chaos testing and regression suites')">π‘οΈ Self-Healing Microservice</button>
|
|
323
|
+
</div>
|
|
324
|
+
|
|
325
|
+
<!-- Interactive SVG Swarm Canvas -->
|
|
326
|
+
<div class="swarm-canvas-card">
|
|
327
|
+
<div class="swarm-canvas-header">
|
|
328
|
+
<div class="canvas-title">
|
|
329
|
+
<span class="pulse-dot"></span>
|
|
330
|
+
<span>LIVE MULTI-AGENT DAG TOPOLOGY</span>
|
|
331
|
+
</div>
|
|
332
|
+
<div class="swarm-metrics-row">
|
|
333
|
+
<div class="metric-item">
|
|
334
|
+
<span class="m-label">Active Node</span>
|
|
335
|
+
<span class="m-val" id="metric-active-node">Idle</span>
|
|
336
|
+
</div>
|
|
337
|
+
<div class="metric-item">
|
|
338
|
+
<span class="m-label">Tokens Streamed</span>
|
|
339
|
+
<span class="m-val" id="metric-swarm-tokens">0</span>
|
|
340
|
+
</div>
|
|
341
|
+
<div class="metric-item">
|
|
342
|
+
<span class="m-label">Consensus Score</span>
|
|
343
|
+
<span class="m-val text-emerald" id="metric-swarm-consensus">100%</span>
|
|
344
|
+
</div>
|
|
345
|
+
</div>
|
|
346
|
+
</div>
|
|
347
|
+
|
|
348
|
+
<!-- SVG Visual DAG Canvas -->
|
|
349
|
+
<div class="swarm-svg-wrapper" id="swarm-svg-container">
|
|
350
|
+
<svg id="swarm-svg-canvas" viewBox="0 0 1000 320" preserveAspectRatio="xMidYMid meet">
|
|
351
|
+
<defs>
|
|
352
|
+
<linearGradient id="grad-planner" x1="0%" y1="0%" x2="100%" y2="100%">
|
|
353
|
+
<stop offset="0%" stop-color="#0284c7" />
|
|
354
|
+
<stop offset="100%" stop-color="#38bdf8" />
|
|
355
|
+
</linearGradient>
|
|
356
|
+
<linearGradient id="grad-engineer" x1="0%" y1="0%" x2="100%" y2="100%">
|
|
357
|
+
<stop offset="0%" stop-color="#7c3aed" />
|
|
358
|
+
<stop offset="100%" stop-color="#c084fc" />
|
|
359
|
+
</linearGradient>
|
|
360
|
+
<linearGradient id="grad-security" x1="0%" y1="0%" x2="100%" y2="100%">
|
|
361
|
+
<stop offset="0%" stop-color="#e11d48" />
|
|
362
|
+
<stop offset="100%" stop-color="#fb7185" />
|
|
363
|
+
</linearGradient>
|
|
364
|
+
<linearGradient id="grad-qa" x1="0%" y1="0%" x2="100%" y2="100%">
|
|
365
|
+
<stop offset="0%" stop-color="#d97706" />
|
|
366
|
+
<stop offset="100%" stop-color="#fbbf24" />
|
|
367
|
+
</linearGradient>
|
|
368
|
+
<linearGradient id="grad-synthesizer" x1="0%" y1="0%" x2="100%" y2="100%">
|
|
369
|
+
<stop offset="0%" stop-color="#059669" />
|
|
370
|
+
<stop offset="100%" stop-color="#34d399" />
|
|
371
|
+
</linearGradient>
|
|
372
|
+
</defs>
|
|
373
|
+
|
|
374
|
+
<!-- Connection Edges (Bezier curves) -->
|
|
375
|
+
<g id="swarm-edges-layer">
|
|
376
|
+
<path id="edge-planner-engineer" d="M 120 160 C 210 160, 240 90, 330 90" stroke="#334155" stroke-width="2.5" fill="none" stroke-dasharray="6,4" />
|
|
377
|
+
<path id="edge-planner-security" d="M 120 160 C 210 160, 240 230, 330 230" stroke="#334155" stroke-width="2.5" fill="none" stroke-dasharray="6,4" />
|
|
378
|
+
<path id="edge-engineer-qa" d="M 430 90 C 520 90, 560 90, 650 90" stroke="#334155" stroke-width="2.5" fill="none" stroke-dasharray="6,4" />
|
|
379
|
+
<path id="edge-engineer-security" d="M 380 135 L 380 185" stroke="#334155" stroke-width="2" fill="none" stroke-dasharray="4,4" />
|
|
380
|
+
<path id="edge-security-synth" d="M 430 230 C 600 230, 750 200, 850 170" stroke="#334155" stroke-width="2.5" fill="none" stroke-dasharray="6,4" />
|
|
381
|
+
<path id="edge-qa-synth" d="M 750 90 C 800 90, 830 140, 850 150" stroke="#334155" stroke-width="2.5" fill="none" stroke-dasharray="6,4" />
|
|
382
|
+
</g>
|
|
383
|
+
|
|
384
|
+
<!-- Animated Traveling Particle Layer -->
|
|
385
|
+
<g id="swarm-particles-layer"></g>
|
|
386
|
+
|
|
387
|
+
<!-- Nodes Layer -->
|
|
388
|
+
<g id="swarm-nodes-layer">
|
|
389
|
+
<!-- Node 1: Architect (Planner) -->
|
|
390
|
+
<g class="swarm-svg-node" id="svg-node-planner" transform="translate(100, 160)" onclick="selectSwarmAgentView('planner')">
|
|
391
|
+
<circle class="node-halo" id="halo-planner" r="48" fill="rgba(56, 189, 248, 0.12)" stroke="#38bdf8" stroke-width="2" />
|
|
392
|
+
<circle class="node-core" r="38" fill="url(#grad-planner)" />
|
|
393
|
+
<text text-anchor="middle" dy="-2" font-size="22">π§ </text>
|
|
394
|
+
<text text-anchor="middle" dy="18" fill="#ffffff" font-size="10" font-weight="700">ARCHITECT</text>
|
|
395
|
+
<text text-anchor="middle" dy="62" fill="#94a3b8" font-size="10" font-family="monospace" id="svg-node-planner-status">IDLE</text>
|
|
396
|
+
</g>
|
|
397
|
+
|
|
398
|
+
<!-- Node 2: Systems Engineer -->
|
|
399
|
+
<g class="swarm-svg-node" id="svg-node-engineer" transform="translate(380, 90)" onclick="selectSwarmAgentView('engineer')">
|
|
400
|
+
<circle class="node-halo" id="halo-engineer" r="48" fill="rgba(168, 85, 247, 0.12)" stroke="#a855f7" stroke-width="2" />
|
|
401
|
+
<circle class="node-core" r="38" fill="url(#grad-engineer)" />
|
|
402
|
+
<text text-anchor="middle" dy="-2" font-size="22">π»</text>
|
|
403
|
+
<text text-anchor="middle" dy="18" fill="#ffffff" font-size="10" font-weight="700">ENGINEER</text>
|
|
404
|
+
<text text-anchor="middle" dy="62" fill="#94a3b8" font-size="10" font-family="monospace" id="svg-node-engineer-status">IDLE</text>
|
|
405
|
+
</g>
|
|
406
|
+
|
|
407
|
+
<!-- Node 3: Security Sentinel -->
|
|
408
|
+
<g class="swarm-svg-node" id="svg-node-security" transform="translate(380, 230)" onclick="selectSwarmAgentView('security')">
|
|
409
|
+
<circle class="node-halo" id="halo-security" r="48" fill="rgba(244, 63, 94, 0.12)" stroke="#f43f5e" stroke-width="2" />
|
|
410
|
+
<circle class="node-core" r="38" fill="url(#grad-security)" />
|
|
411
|
+
<text text-anchor="middle" dy="-2" font-size="22">π‘οΈ</text>
|
|
412
|
+
<text text-anchor="middle" dy="18" fill="#ffffff" font-size="10" font-weight="700">SECURITY</text>
|
|
413
|
+
<text text-anchor="middle" dy="62" fill="#94a3b8" font-size="10" font-family="monospace" id="svg-node-security-status">IDLE</text>
|
|
414
|
+
</g>
|
|
415
|
+
|
|
416
|
+
<!-- Node 4: QA Chaos Tester -->
|
|
417
|
+
<g class="swarm-svg-node" id="svg-node-qa" transform="translate(700, 90)" onclick="selectSwarmAgentView('qa')">
|
|
418
|
+
<circle class="node-halo" id="halo-qa" r="48" fill="rgba(245, 158, 11, 0.12)" stroke="#f59e0b" stroke-width="2" />
|
|
419
|
+
<circle class="node-core" r="38" fill="url(#grad-qa)" />
|
|
420
|
+
<text text-anchor="middle" dy="-2" font-size="22">π§ͺ</text>
|
|
421
|
+
<text text-anchor="middle" dy="18" fill="#ffffff" font-size="10" font-weight="700">QA CHAOS</text>
|
|
422
|
+
<text text-anchor="middle" dy="62" fill="#94a3b8" font-size="10" font-family="monospace" id="svg-node-qa-status">IDLE</text>
|
|
423
|
+
</g>
|
|
424
|
+
|
|
425
|
+
<!-- Node 5: Chief Synthesizer -->
|
|
426
|
+
<g class="swarm-svg-node" id="svg-node-synthesizer" transform="translate(900, 160)" onclick="selectSwarmAgentView('synthesizer')">
|
|
427
|
+
<circle class="node-halo" id="halo-synthesizer" r="52" fill="rgba(16, 185, 129, 0.15)" stroke="#10b981" stroke-width="2.5" />
|
|
428
|
+
<circle class="node-core" r="42" fill="url(#grad-synthesizer)" />
|
|
429
|
+
<text text-anchor="middle" dy="-2" font-size="24">βοΈ</text>
|
|
430
|
+
<text text-anchor="middle" dy="20" fill="#ffffff" font-size="10" font-weight="800">SYNTHESIZER</text>
|
|
431
|
+
<text text-anchor="middle" dy="68" fill="#94a3b8" font-size="10" font-family="monospace" id="svg-node-synthesizer-status">IDLE</text>
|
|
432
|
+
</g>
|
|
433
|
+
</g>
|
|
434
|
+
</svg>
|
|
435
|
+
</div>
|
|
436
|
+
</div>
|
|
437
|
+
|
|
438
|
+
<!-- Lower Dual Workspace Area -->
|
|
439
|
+
<div class="swarm-workspace-grid">
|
|
440
|
+
<!-- Left: Live Persona Monologue Stream -->
|
|
441
|
+
<div class="swarm-stream-card">
|
|
442
|
+
<div class="stream-header">
|
|
443
|
+
<div class="stream-tabs">
|
|
444
|
+
<button class="stream-tab-btn active" id="tab-btn-planner" onclick="selectSwarmAgentView('planner')">π§ Architect</button>
|
|
445
|
+
<button class="stream-tab-btn" id="tab-btn-engineer" onclick="selectSwarmAgentView('engineer')">π» Engineer</button>
|
|
446
|
+
<button class="stream-tab-btn" id="tab-btn-security" onclick="selectSwarmAgentView('security')">π‘οΈ Security</button>
|
|
447
|
+
<button class="stream-tab-btn" id="tab-btn-qa" onclick="selectSwarmAgentView('qa')">π§ͺ QA</button>
|
|
448
|
+
<button class="stream-tab-btn" id="tab-btn-synthesizer" onclick="selectSwarmAgentView('synthesizer')">βοΈ Synthesizer</button>
|
|
449
|
+
</div>
|
|
450
|
+
<button class="copy-stream-btn" onclick="copyActiveSwarmStream()">π Copy</button>
|
|
451
|
+
</div>
|
|
452
|
+
<div class="swarm-stream-body" id="swarm-stream-output">
|
|
453
|
+
<div class="placeholder-text">Launch Swarm DAG to observe real-time agent monologues & token streaming...</div>
|
|
454
|
+
</div>
|
|
455
|
+
</div>
|
|
456
|
+
|
|
457
|
+
<!-- Right: Master Synthesis & Hardened Deliverables -->
|
|
458
|
+
<div class="swarm-deliverables-card">
|
|
459
|
+
<div class="deliverables-header">
|
|
460
|
+
<h3>π― Master Swarm Deliverables</h3>
|
|
461
|
+
<button class="action-btn-sm" id="btn-open-swarm-artifact" style="display:none;" onclick="openCurrentSwarmArtifact()">π View Interactive Artifact</button>
|
|
462
|
+
</div>
|
|
463
|
+
<div class="deliverables-content" id="swarm-deliverables-body">
|
|
464
|
+
<div class="placeholder-text">Consensus synthesis, production code, threat audits, and test suites will assemble here.</div>
|
|
465
|
+
</div>
|
|
466
|
+
</div>
|
|
467
|
+
</div>
|
|
468
|
+
</section>
|
|
469
|
+
|
|
297
470
|
<!-- TAB 4: Thinking Profiles -->
|
|
298
471
|
<section id="tab-profiles" class="tab-panel">
|
|
299
472
|
<div class="panel-header">
|
|
@@ -542,14 +715,33 @@
|
|
|
542
715
|
<button class="device-btn" id="btn-device-tablet" onclick="setStageDevice('tablet')">π± Tablet</button>
|
|
543
716
|
<button class="device-btn" id="btn-device-mobile" onclick="setStageDevice('mobile')">π² Mobile</button>
|
|
544
717
|
</div>
|
|
718
|
+
<button class="action-btn-visual-heal" id="btn-visual-heal" onclick="runVisualSelfHeal()">
|
|
719
|
+
<span class="laser-indicator"></span> πΈ Visual Self-Heal (Gemini Vision)
|
|
720
|
+
</button>
|
|
545
721
|
<button class="action-btn-secondary" style="padding:4px 10px;font-size:11px;" onclick="reloadStageArtifact()">β³ Reload</button>
|
|
546
722
|
<button class="action-btn" style="padding:4px 12px;font-size:11px;" onclick="openActiveArtifactInNewTab()">β Open Full Screen</button>
|
|
547
723
|
</div>
|
|
548
724
|
</div>
|
|
549
725
|
|
|
550
726
|
<!-- Stage Iframe Viewport Container -->
|
|
551
|
-
<div id="stage-iframe-wrapper" style="flex:1;background:#090d16;display:flex;align-items:center;justify-content:center;overflow:hidden;padding:12px;transition:all 0.25s ease;">
|
|
727
|
+
<div id="stage-iframe-wrapper" style="flex:1;background:#090d16;display:flex;flex-direction:column;align-items:center;justify-content:center;overflow:hidden;padding:12px;position:relative;transition:all 0.25s ease;">
|
|
728
|
+
<div id="visual-heal-scanner" class="laser-scanner" style="display:none;"></div>
|
|
552
729
|
<iframe id="stage-artifact-iframe" allow="autoplay; clipboard-read; clipboard-write;" sandbox="allow-scripts allow-same-origin allow-popups allow-forms allow-modals" style="width:100%;height:100%;border:none;border-radius:8px;background:#ffffff;box-shadow:0 10px 30px rgba(0,0,0,0.5);transition:width 0.25s ease;"></iframe>
|
|
730
|
+
|
|
731
|
+
<!-- Visual Defect Report Overlay Card -->
|
|
732
|
+
<div id="visual-heal-results-card" class="visual-heal-overlay" style="display:none;">
|
|
733
|
+
<div class="heal-overlay-header">
|
|
734
|
+
<div style="display:flex;align-items:center;gap:10px;">
|
|
735
|
+
<span style="font-size:20px;">β¨</span>
|
|
736
|
+
<div>
|
|
737
|
+
<h4 style="margin:0;font-size:13px;color:#34d399;font-weight:700;">Google Gemini 3.7 Vision Β· Autonomous UI Self-Healing</h4>
|
|
738
|
+
<span id="heal-score-text" style="font-size:11px;color:#94a3b8;">Score: 98% Β· 3 Defects Repaired</span>
|
|
739
|
+
</div>
|
|
740
|
+
</div>
|
|
741
|
+
<button class="modal-close" onclick="closeVisualHealOverlay()">β</button>
|
|
742
|
+
</div>
|
|
743
|
+
<div id="heal-defects-list" class="heal-defects-container"></div>
|
|
744
|
+
</div>
|
|
553
745
|
</div>
|
|
554
746
|
</div>
|
|
555
747
|
</div>
|
|
@@ -2274,3 +2274,397 @@ body.antri-app {
|
|
|
2274
2274
|
color: var(--primary);
|
|
2275
2275
|
min-width: 1.2rem;
|
|
2276
2276
|
}
|
|
2277
|
+
|
|
2278
|
+
/* ==========================================================================
|
|
2279
|
+
πΈοΈ Agent Swarm Canvas & Multi-Agent DAG Visualizer
|
|
2280
|
+
========================================================================== */
|
|
2281
|
+
|
|
2282
|
+
.badge-consensus {
|
|
2283
|
+
font-size: 11px;
|
|
2284
|
+
font-weight: 700;
|
|
2285
|
+
padding: 3px 10px;
|
|
2286
|
+
border-radius: 999px;
|
|
2287
|
+
background: rgba(16, 185, 129, 0.15);
|
|
2288
|
+
border: 1px solid rgba(16, 185, 129, 0.35);
|
|
2289
|
+
color: #34d399;
|
|
2290
|
+
letter-spacing: 0.5px;
|
|
2291
|
+
text-transform: uppercase;
|
|
2292
|
+
}
|
|
2293
|
+
|
|
2294
|
+
.swarm-presets-bar {
|
|
2295
|
+
display: flex;
|
|
2296
|
+
align-items: center;
|
|
2297
|
+
gap: 8px;
|
|
2298
|
+
margin-bottom: 16px;
|
|
2299
|
+
overflow-x: auto;
|
|
2300
|
+
padding-bottom: 4px;
|
|
2301
|
+
}
|
|
2302
|
+
|
|
2303
|
+
.presets-label {
|
|
2304
|
+
font-size: 12px;
|
|
2305
|
+
font-weight: 600;
|
|
2306
|
+
color: var(--text-tertiary, #94a3b8);
|
|
2307
|
+
white-space: nowrap;
|
|
2308
|
+
}
|
|
2309
|
+
|
|
2310
|
+
.swarm-preset-btn {
|
|
2311
|
+
background: rgba(30, 41, 59, 0.7);
|
|
2312
|
+
border: 1px solid rgba(255, 255, 255, 0.08);
|
|
2313
|
+
color: var(--text-secondary, #cbd5e1);
|
|
2314
|
+
padding: 5px 12px;
|
|
2315
|
+
border-radius: 8px;
|
|
2316
|
+
font-size: 12px;
|
|
2317
|
+
font-weight: 500;
|
|
2318
|
+
cursor: pointer;
|
|
2319
|
+
white-space: nowrap;
|
|
2320
|
+
transition: all 0.2s ease;
|
|
2321
|
+
}
|
|
2322
|
+
|
|
2323
|
+
.swarm-preset-btn:hover {
|
|
2324
|
+
background: rgba(56, 189, 248, 0.15);
|
|
2325
|
+
border-color: rgba(56, 189, 248, 0.4);
|
|
2326
|
+
color: #38bdf8;
|
|
2327
|
+
transform: translateY(-1px);
|
|
2328
|
+
}
|
|
2329
|
+
|
|
2330
|
+
.swarm-canvas-card {
|
|
2331
|
+
background: radial-gradient(circle at 50% 30%, rgba(15, 23, 42, 0.95), rgba(7, 10, 19, 0.98));
|
|
2332
|
+
border: 1px solid rgba(59, 130, 246, 0.2);
|
|
2333
|
+
border-radius: 16px;
|
|
2334
|
+
padding: 16px 20px;
|
|
2335
|
+
margin-bottom: 20px;
|
|
2336
|
+
box-shadow: 0 12px 36px rgba(0, 0, 0, 0.5);
|
|
2337
|
+
position: relative;
|
|
2338
|
+
overflow: hidden;
|
|
2339
|
+
}
|
|
2340
|
+
|
|
2341
|
+
.swarm-canvas-header {
|
|
2342
|
+
display: flex;
|
|
2343
|
+
justify-content: space-between;
|
|
2344
|
+
align-items: center;
|
|
2345
|
+
margin-bottom: 12px;
|
|
2346
|
+
}
|
|
2347
|
+
|
|
2348
|
+
.canvas-title {
|
|
2349
|
+
display: flex;
|
|
2350
|
+
align-items: center;
|
|
2351
|
+
gap: 8px;
|
|
2352
|
+
font-size: 11px;
|
|
2353
|
+
font-weight: 700;
|
|
2354
|
+
letter-spacing: 1px;
|
|
2355
|
+
color: #38bdf8;
|
|
2356
|
+
}
|
|
2357
|
+
|
|
2358
|
+
.pulse-dot {
|
|
2359
|
+
width: 8px;
|
|
2360
|
+
height: 8px;
|
|
2361
|
+
border-radius: 50%;
|
|
2362
|
+
background: #38bdf8;
|
|
2363
|
+
box-shadow: 0 0 10px #38bdf8;
|
|
2364
|
+
animation: pulseDot 2s infinite ease-in-out;
|
|
2365
|
+
}
|
|
2366
|
+
|
|
2367
|
+
@keyframes pulseDot {
|
|
2368
|
+
0%, 100% { opacity: 0.4; transform: scale(0.9); }
|
|
2369
|
+
50% { opacity: 1; transform: scale(1.3); }
|
|
2370
|
+
}
|
|
2371
|
+
|
|
2372
|
+
.swarm-metrics-row {
|
|
2373
|
+
display: flex;
|
|
2374
|
+
gap: 16px;
|
|
2375
|
+
}
|
|
2376
|
+
|
|
2377
|
+
.metric-item {
|
|
2378
|
+
display: flex;
|
|
2379
|
+
flex-direction: column;
|
|
2380
|
+
align-items: flex-end;
|
|
2381
|
+
}
|
|
2382
|
+
|
|
2383
|
+
.metric-item .m-label {
|
|
2384
|
+
font-size: 10px;
|
|
2385
|
+
color: var(--text-tertiary, #64748b);
|
|
2386
|
+
text-transform: uppercase;
|
|
2387
|
+
}
|
|
2388
|
+
|
|
2389
|
+
.metric-item .m-val {
|
|
2390
|
+
font-size: 13px;
|
|
2391
|
+
font-weight: 700;
|
|
2392
|
+
color: #f1f5f9;
|
|
2393
|
+
font-family: var(--font-mono);
|
|
2394
|
+
}
|
|
2395
|
+
|
|
2396
|
+
.metric-item .text-emerald {
|
|
2397
|
+
color: #34d399;
|
|
2398
|
+
}
|
|
2399
|
+
|
|
2400
|
+
.swarm-svg-wrapper {
|
|
2401
|
+
width: 100%;
|
|
2402
|
+
height: 240px;
|
|
2403
|
+
display: flex;
|
|
2404
|
+
align-items: center;
|
|
2405
|
+
justify-content: center;
|
|
2406
|
+
}
|
|
2407
|
+
|
|
2408
|
+
.swarm-svg-wrapper svg {
|
|
2409
|
+
width: 100%;
|
|
2410
|
+
height: 100%;
|
|
2411
|
+
}
|
|
2412
|
+
|
|
2413
|
+
.swarm-svg-node {
|
|
2414
|
+
cursor: pointer;
|
|
2415
|
+
transition: transform 0.2s cubic-bezier(0.4, 0, 0.2, 1);
|
|
2416
|
+
}
|
|
2417
|
+
|
|
2418
|
+
.swarm-svg-node:hover {
|
|
2419
|
+
filter: brightness(1.25);
|
|
2420
|
+
}
|
|
2421
|
+
|
|
2422
|
+
.swarm-svg-node .node-halo {
|
|
2423
|
+
transition: all 0.3s ease;
|
|
2424
|
+
}
|
|
2425
|
+
|
|
2426
|
+
.swarm-svg-node.active .node-halo {
|
|
2427
|
+
animation: haloPulse 1.5s infinite ease-in-out;
|
|
2428
|
+
stroke-width: 3.5px;
|
|
2429
|
+
}
|
|
2430
|
+
|
|
2431
|
+
.swarm-svg-node.selected .node-halo {
|
|
2432
|
+
stroke-width: 4px;
|
|
2433
|
+
stroke: #ffffff;
|
|
2434
|
+
filter: drop-shadow(0 0 12px rgba(255,255,255,0.6));
|
|
2435
|
+
}
|
|
2436
|
+
|
|
2437
|
+
@keyframes haloPulse {
|
|
2438
|
+
0%, 100% { transform: scale(1); opacity: 0.5; }
|
|
2439
|
+
50% { transform: scale(1.12); opacity: 1; }
|
|
2440
|
+
}
|
|
2441
|
+
|
|
2442
|
+
.particle-dot {
|
|
2443
|
+
filter: drop-shadow(0 0 8px #38bdf8);
|
|
2444
|
+
}
|
|
2445
|
+
|
|
2446
|
+
.swarm-workspace-grid {
|
|
2447
|
+
display: grid;
|
|
2448
|
+
grid-template-columns: 1fr 1fr;
|
|
2449
|
+
gap: 20px;
|
|
2450
|
+
}
|
|
2451
|
+
|
|
2452
|
+
@media (max-width: 900px) {
|
|
2453
|
+
.swarm-workspace-grid {
|
|
2454
|
+
grid-template-columns: 1fr;
|
|
2455
|
+
}
|
|
2456
|
+
}
|
|
2457
|
+
|
|
2458
|
+
.swarm-stream-card, .swarm-deliverables-card {
|
|
2459
|
+
background: var(--bg-surface, #0f172a);
|
|
2460
|
+
border: 1px solid var(--border-color, #1e293b);
|
|
2461
|
+
border-radius: 12px;
|
|
2462
|
+
display: flex;
|
|
2463
|
+
flex-direction: column;
|
|
2464
|
+
height: 480px;
|
|
2465
|
+
overflow: hidden;
|
|
2466
|
+
}
|
|
2467
|
+
|
|
2468
|
+
.stream-header, .deliverables-header {
|
|
2469
|
+
padding: 12px 16px;
|
|
2470
|
+
background: rgba(15, 23, 42, 0.8);
|
|
2471
|
+
border-bottom: 1px solid var(--border-color, #1e293b);
|
|
2472
|
+
display: flex;
|
|
2473
|
+
justify-content: space-between;
|
|
2474
|
+
align-items: center;
|
|
2475
|
+
}
|
|
2476
|
+
|
|
2477
|
+
.stream-tabs {
|
|
2478
|
+
display: flex;
|
|
2479
|
+
gap: 6px;
|
|
2480
|
+
}
|
|
2481
|
+
|
|
2482
|
+
.stream-tab-btn {
|
|
2483
|
+
background: transparent;
|
|
2484
|
+
border: 1px solid transparent;
|
|
2485
|
+
color: var(--text-tertiary, #94a3b8);
|
|
2486
|
+
padding: 5px 10px;
|
|
2487
|
+
border-radius: 6px;
|
|
2488
|
+
font-size: 11px;
|
|
2489
|
+
font-weight: 600;
|
|
2490
|
+
cursor: pointer;
|
|
2491
|
+
transition: all 0.15s ease;
|
|
2492
|
+
}
|
|
2493
|
+
|
|
2494
|
+
.stream-tab-btn.active {
|
|
2495
|
+
background: rgba(56, 189, 248, 0.15);
|
|
2496
|
+
border-color: rgba(56, 189, 248, 0.35);
|
|
2497
|
+
color: #38bdf8;
|
|
2498
|
+
}
|
|
2499
|
+
|
|
2500
|
+
.stream-tab-btn:hover:not(.active) {
|
|
2501
|
+
color: #f1f5f9;
|
|
2502
|
+
background: rgba(255, 255, 255, 0.05);
|
|
2503
|
+
}
|
|
2504
|
+
|
|
2505
|
+
.copy-stream-btn, .action-btn-sm {
|
|
2506
|
+
background: rgba(255, 255, 255, 0.06);
|
|
2507
|
+
border: 1px solid rgba(255, 255, 255, 0.12);
|
|
2508
|
+
color: #cbd5e1;
|
|
2509
|
+
padding: 4px 10px;
|
|
2510
|
+
border-radius: 6px;
|
|
2511
|
+
font-size: 11px;
|
|
2512
|
+
font-weight: 600;
|
|
2513
|
+
cursor: pointer;
|
|
2514
|
+
transition: all 0.2s ease;
|
|
2515
|
+
}
|
|
2516
|
+
|
|
2517
|
+
.copy-stream-btn:hover, .action-btn-sm:hover {
|
|
2518
|
+
background: rgba(56, 189, 248, 0.2);
|
|
2519
|
+
border-color: #38bdf8;
|
|
2520
|
+
color: #fff;
|
|
2521
|
+
}
|
|
2522
|
+
|
|
2523
|
+
.swarm-stream-body, .deliverables-content {
|
|
2524
|
+
padding: 16px;
|
|
2525
|
+
overflow-y: auto;
|
|
2526
|
+
flex: 1;
|
|
2527
|
+
font-size: 13px;
|
|
2528
|
+
line-height: 1.6;
|
|
2529
|
+
color: var(--text-primary, #f1f5f9);
|
|
2530
|
+
}
|
|
2531
|
+
|
|
2532
|
+
.swarm-stream-body pre, .deliverables-content pre {
|
|
2533
|
+
background: #020617;
|
|
2534
|
+
border: 1px solid #1e293b;
|
|
2535
|
+
border-radius: 8px;
|
|
2536
|
+
padding: 12px;
|
|
2537
|
+
overflow-x: auto;
|
|
2538
|
+
font-family: var(--font-mono);
|
|
2539
|
+
font-size: 12px;
|
|
2540
|
+
margin: 10px 0;
|
|
2541
|
+
}
|
|
2542
|
+
|
|
2543
|
+
/* ==========================================================================
|
|
2544
|
+
πΈ Gemini 3.7 Vision Β· Autonomous Visual UI Self-Healer
|
|
2545
|
+
========================================================================== */
|
|
2546
|
+
|
|
2547
|
+
.action-btn-visual-heal {
|
|
2548
|
+
background: linear-gradient(135deg, rgba(16, 185, 129, 0.2), rgba(56, 189, 248, 0.2));
|
|
2549
|
+
border: 1px solid rgba(56, 189, 248, 0.45);
|
|
2550
|
+
color: #38bdf8;
|
|
2551
|
+
padding: 4px 12px;
|
|
2552
|
+
border-radius: 6px;
|
|
2553
|
+
font-size: 11px;
|
|
2554
|
+
font-weight: 700;
|
|
2555
|
+
cursor: pointer;
|
|
2556
|
+
display: flex;
|
|
2557
|
+
align-items: center;
|
|
2558
|
+
gap: 6px;
|
|
2559
|
+
transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
|
|
2560
|
+
box-shadow: 0 0 12px rgba(56, 189, 248, 0.15);
|
|
2561
|
+
}
|
|
2562
|
+
|
|
2563
|
+
.action-btn-visual-heal:hover {
|
|
2564
|
+
background: linear-gradient(135deg, rgba(16, 185, 129, 0.35), rgba(56, 189, 248, 0.35));
|
|
2565
|
+
border-color: #38bdf8;
|
|
2566
|
+
color: #fff;
|
|
2567
|
+
transform: translateY(-1px);
|
|
2568
|
+
box-shadow: 0 0 18px rgba(56, 189, 248, 0.35);
|
|
2569
|
+
}
|
|
2570
|
+
|
|
2571
|
+
.laser-indicator {
|
|
2572
|
+
width: 6px;
|
|
2573
|
+
height: 6px;
|
|
2574
|
+
border-radius: 50%;
|
|
2575
|
+
background: #34d399;
|
|
2576
|
+
box-shadow: 0 0 8px #34d399;
|
|
2577
|
+
animation: pulseLaser 1.5s infinite;
|
|
2578
|
+
}
|
|
2579
|
+
|
|
2580
|
+
@keyframes pulseLaser {
|
|
2581
|
+
0%, 100% { transform: scale(0.9); opacity: 0.5; }
|
|
2582
|
+
50% { transform: scale(1.3); opacity: 1; }
|
|
2583
|
+
}
|
|
2584
|
+
|
|
2585
|
+
.laser-scanner {
|
|
2586
|
+
position: absolute;
|
|
2587
|
+
top: 0;
|
|
2588
|
+
left: 0;
|
|
2589
|
+
right: 0;
|
|
2590
|
+
height: 3px;
|
|
2591
|
+
background: linear-gradient(90deg, transparent, #38bdf8, #34d399, transparent);
|
|
2592
|
+
box-shadow: 0 0 15px #38bdf8, 0 0 30px #34d399;
|
|
2593
|
+
z-index: 50;
|
|
2594
|
+
pointer-events: none;
|
|
2595
|
+
animation: scanLaser 2s infinite ease-in-out;
|
|
2596
|
+
}
|
|
2597
|
+
|
|
2598
|
+
@keyframes scanLaser {
|
|
2599
|
+
0% { top: 0; opacity: 0; }
|
|
2600
|
+
15% { opacity: 1; }
|
|
2601
|
+
85% { opacity: 1; }
|
|
2602
|
+
100% { top: 100%; opacity: 0; }
|
|
2603
|
+
}
|
|
2604
|
+
|
|
2605
|
+
.visual-heal-overlay {
|
|
2606
|
+
position: absolute;
|
|
2607
|
+
bottom: 16px;
|
|
2608
|
+
left: 16px;
|
|
2609
|
+
right: 16px;
|
|
2610
|
+
max-height: 220px;
|
|
2611
|
+
background: rgba(15, 23, 42, 0.95);
|
|
2612
|
+
backdrop-filter: blur(16px);
|
|
2613
|
+
border: 1px solid rgba(16, 185, 129, 0.4);
|
|
2614
|
+
border-radius: 12px;
|
|
2615
|
+
padding: 14px 18px;
|
|
2616
|
+
box-shadow: 0 20px 50px rgba(0, 0, 0, 0.8);
|
|
2617
|
+
display: flex;
|
|
2618
|
+
flex-direction: column;
|
|
2619
|
+
z-index: 40;
|
|
2620
|
+
animation: slideUpFade 0.3s ease;
|
|
2621
|
+
}
|
|
2622
|
+
|
|
2623
|
+
@keyframes slideUpFade {
|
|
2624
|
+
from { opacity: 0; transform: translateY(12px); }
|
|
2625
|
+
to { opacity: 1; transform: translateY(0); }
|
|
2626
|
+
}
|
|
2627
|
+
|
|
2628
|
+
.heal-overlay-header {
|
|
2629
|
+
display: flex;
|
|
2630
|
+
justify-content: space-between;
|
|
2631
|
+
align-items: center;
|
|
2632
|
+
margin-bottom: 10px;
|
|
2633
|
+
padding-bottom: 8px;
|
|
2634
|
+
border-bottom: 1px solid rgba(255, 255, 255, 0.08);
|
|
2635
|
+
}
|
|
2636
|
+
|
|
2637
|
+
.heal-defects-container {
|
|
2638
|
+
display: flex;
|
|
2639
|
+
flex-direction: column;
|
|
2640
|
+
gap: 8px;
|
|
2641
|
+
overflow-y: auto;
|
|
2642
|
+
}
|
|
2643
|
+
|
|
2644
|
+
.defect-pill-card {
|
|
2645
|
+
display: flex;
|
|
2646
|
+
align-items: flex-start;
|
|
2647
|
+
gap: 10px;
|
|
2648
|
+
background: rgba(2, 6, 23, 0.6);
|
|
2649
|
+
border: 1px solid rgba(255, 255, 255, 0.06);
|
|
2650
|
+
border-radius: 8px;
|
|
2651
|
+
padding: 8px 12px;
|
|
2652
|
+
font-size: 12px;
|
|
2653
|
+
}
|
|
2654
|
+
|
|
2655
|
+
.defect-badge {
|
|
2656
|
+
font-size: 10px;
|
|
2657
|
+
font-weight: 700;
|
|
2658
|
+
padding: 2px 6px;
|
|
2659
|
+
border-radius: 4px;
|
|
2660
|
+
text-transform: uppercase;
|
|
2661
|
+
font-family: var(--font-mono);
|
|
2662
|
+
white-space: nowrap;
|
|
2663
|
+
}
|
|
2664
|
+
|
|
2665
|
+
.defect-contrast { background: rgba(245, 158, 11, 0.15); color: #fbbf24; border: 1px solid rgba(245, 158, 11, 0.3); }
|
|
2666
|
+
.defect-alignment { background: rgba(56, 189, 248, 0.15); color: #38bdf8; border: 1px solid rgba(56, 189, 248, 0.3); }
|
|
2667
|
+
.defect-interactive { background: rgba(168, 85, 247, 0.15); color: #c084fc; border: 1px solid rgba(168, 85, 247, 0.3); }
|
|
2668
|
+
.defect-runtime { background: rgba(244, 63, 94, 0.15); color: #fb7185; border: 1px solid rgba(244, 63, 94, 0.3); }
|
|
2669
|
+
|
|
2670
|
+
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/desktop/server.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/desktop/server.ts"],"names":[],"mappings":"AAuCA,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,IAAI,CAA4C;IACxD,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,kBAAkB,CAAiD;IAC3E,OAAO,CAAC,gBAAgB,CAAqD;;IAO7E,OAAO,CAAC,sBAAsB;IA2BjB,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;IAkGxB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YAUpB,SAAS;WAm0BH,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;CAyBnD"}
|