antri_cli 1.57.44 → 1.57.46

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.
@@ -2297,43 +2297,52 @@ body.antri-app {
2297
2297
  gap: 8px;
2298
2298
  margin-bottom: 16px;
2299
2299
  overflow-x: auto;
2300
- padding-bottom: 4px;
2300
+ .swarm-presets-bar {
2301
+ display: flex;
2302
+ align-items: center;
2303
+ gap: 10px;
2304
+ margin-bottom: 20px;
2305
+ overflow-x: auto;
2306
+ padding: 4px 2px 10px 2px;
2301
2307
  }
2302
2308
 
2303
2309
  .presets-label {
2304
2310
  font-size: 12px;
2305
- font-weight: 600;
2306
- color: var(--text-tertiary, #94a3b8);
2311
+ font-weight: 700;
2312
+ color: #38bdf8;
2307
2313
  white-space: nowrap;
2314
+ letter-spacing: 0.5px;
2308
2315
  }
2309
2316
 
2310
2317
  .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;
2318
+ background: rgba(15, 23, 42, 0.9);
2319
+ border: 1px solid rgba(56, 189, 248, 0.25);
2320
+ color: #e2e8f0;
2321
+ padding: 7px 15px;
2322
+ border-radius: 20px;
2316
2323
  font-size: 12px;
2317
- font-weight: 500;
2324
+ font-weight: 600;
2318
2325
  cursor: pointer;
2319
2326
  white-space: nowrap;
2320
- transition: all 0.2s ease;
2327
+ transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
2328
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
2321
2329
  }
2322
2330
 
2323
2331
  .swarm-preset-btn:hover {
2324
- background: rgba(56, 189, 248, 0.15);
2325
- border-color: rgba(56, 189, 248, 0.4);
2326
- color: #38bdf8;
2332
+ background: rgba(56, 189, 248, 0.22);
2333
+ border-color: #38bdf8;
2334
+ color: #ffffff;
2327
2335
  transform: translateY(-1px);
2336
+ box-shadow: 0 4px 14px rgba(56, 189, 248, 0.3);
2328
2337
  }
2329
2338
 
2330
2339
  .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);
2340
+ background: radial-gradient(circle at 50% 30%, rgba(15, 23, 42, 0.96), rgba(7, 10, 19, 0.99));
2341
+ border: 1px solid rgba(56, 189, 248, 0.25);
2333
2342
  border-radius: 16px;
2334
- padding: 16px 20px;
2335
- margin-bottom: 20px;
2336
- box-shadow: 0 12px 36px rgba(0, 0, 0, 0.5);
2343
+ padding: 20px 24px;
2344
+ margin-bottom: 22px;
2345
+ box-shadow: 0 16px 40px rgba(0, 0, 0, 0.6);
2337
2346
  position: relative;
2338
2347
  overflow: hidden;
2339
2348
  }
@@ -2342,7 +2351,7 @@ body.antri-app {
2342
2351
  display: flex;
2343
2352
  justify-content: space-between;
2344
2353
  align-items: center;
2345
- margin-bottom: 12px;
2354
+ margin-bottom: 14px;
2346
2355
  }
2347
2356
 
2348
2357
  .canvas-title {
@@ -2350,8 +2359,8 @@ body.antri-app {
2350
2359
  align-items: center;
2351
2360
  gap: 8px;
2352
2361
  font-size: 11px;
2353
- font-weight: 700;
2354
- letter-spacing: 1px;
2362
+ font-weight: 800;
2363
+ letter-spacing: 1.2px;
2355
2364
  color: #38bdf8;
2356
2365
  }
2357
2366
 
@@ -2371,7 +2380,7 @@ body.antri-app {
2371
2380
 
2372
2381
  .swarm-metrics-row {
2373
2382
  display: flex;
2374
- gap: 16px;
2383
+ gap: 20px;
2375
2384
  }
2376
2385
 
2377
2386
  .metric-item {
@@ -2382,14 +2391,15 @@ body.antri-app {
2382
2391
 
2383
2392
  .metric-item .m-label {
2384
2393
  font-size: 10px;
2385
- color: var(--text-tertiary, #64748b);
2394
+ color: #94a3b8;
2386
2395
  text-transform: uppercase;
2396
+ letter-spacing: 0.5px;
2387
2397
  }
2388
2398
 
2389
2399
  .metric-item .m-val {
2390
- font-size: 13px;
2400
+ font-size: 14px;
2391
2401
  font-weight: 700;
2392
- color: #f1f5f9;
2402
+ color: #ffffff;
2393
2403
  font-family: var(--font-mono);
2394
2404
  }
2395
2405
 
@@ -2399,10 +2409,11 @@ body.antri-app {
2399
2409
 
2400
2410
  .swarm-svg-wrapper {
2401
2411
  width: 100%;
2402
- height: 240px;
2412
+ height: 270px;
2403
2413
  display: flex;
2404
2414
  align-items: center;
2405
2415
  justify-content: center;
2416
+ padding: 8px 0;
2406
2417
  }
2407
2418
 
2408
2419
  .swarm-svg-wrapper svg {
@@ -2420,6 +2431,8 @@ body.antri-app {
2420
2431
  }
2421
2432
 
2422
2433
  .swarm-svg-node .node-halo {
2434
+ transform-box: fill-box;
2435
+ transform-origin: center;
2423
2436
  transition: all 0.3s ease;
2424
2437
  }
2425
2438
 
@@ -2431,12 +2444,12 @@ body.antri-app {
2431
2444
  .swarm-svg-node.selected .node-halo {
2432
2445
  stroke-width: 4px;
2433
2446
  stroke: #ffffff;
2434
- filter: drop-shadow(0 0 12px rgba(255,255,255,0.6));
2447
+ filter: drop-shadow(0 0 14px rgba(255,255,255,0.7));
2435
2448
  }
2436
2449
 
2437
2450
  @keyframes haloPulse {
2438
2451
  0%, 100% { transform: scale(1); opacity: 0.5; }
2439
- 50% { transform: scale(1.12); opacity: 1; }
2452
+ 50% { transform: scale(1.15); opacity: 1; }
2440
2453
  }
2441
2454
 
2442
2455
  .particle-dot {
@@ -2446,7 +2459,8 @@ body.antri-app {
2446
2459
  .swarm-workspace-grid {
2447
2460
  display: grid;
2448
2461
  grid-template-columns: 1fr 1fr;
2449
- gap: 20px;
2462
+ gap: 22px;
2463
+ margin-top: 4px;
2450
2464
  }
2451
2465
 
2452
2466
  @media (max-width: 900px) {
@@ -2456,88 +2470,254 @@ body.antri-app {
2456
2470
  }
2457
2471
 
2458
2472
  .swarm-stream-card, .swarm-deliverables-card {
2459
- background: var(--bg-surface, #0f172a);
2460
- border: 1px solid var(--border-color, #1e293b);
2461
- border-radius: 12px;
2473
+ background: #0b1120;
2474
+ border: 1px solid #1e293b;
2475
+ border-radius: 14px;
2462
2476
  display: flex;
2463
2477
  flex-direction: column;
2464
- height: 480px;
2478
+ height: 520px;
2465
2479
  overflow: hidden;
2480
+ box-shadow: 0 10px 30px rgba(0, 0, 0, 0.4);
2466
2481
  }
2467
2482
 
2468
2483
  .stream-header, .deliverables-header {
2469
2484
  padding: 12px 16px;
2470
- background: rgba(15, 23, 42, 0.8);
2471
- border-bottom: 1px solid var(--border-color, #1e293b);
2485
+ background: #0f172a;
2486
+ border-bottom: 1px solid #1e293b;
2472
2487
  display: flex;
2473
2488
  justify-content: space-between;
2474
2489
  align-items: center;
2490
+ gap: 10px;
2475
2491
  }
2476
2492
 
2477
2493
  .stream-tabs {
2478
2494
  display: flex;
2479
2495
  gap: 6px;
2496
+ overflow-x: auto;
2497
+ flex-wrap: nowrap;
2498
+ padding-bottom: 2px;
2480
2499
  }
2481
2500
 
2482
2501
  .stream-tab-btn {
2483
2502
  background: transparent;
2484
2503
  border: 1px solid transparent;
2485
- color: var(--text-tertiary, #94a3b8);
2486
- padding: 5px 10px;
2504
+ color: #94a3b8;
2505
+ padding: 6px 12px;
2487
2506
  border-radius: 6px;
2488
2507
  font-size: 11px;
2489
- font-weight: 600;
2508
+ font-weight: 700;
2490
2509
  cursor: pointer;
2510
+ white-space: nowrap;
2491
2511
  transition: all 0.15s ease;
2492
2512
  }
2493
2513
 
2494
2514
  .stream-tab-btn.active {
2495
- background: rgba(56, 189, 248, 0.15);
2496
- border-color: rgba(56, 189, 248, 0.35);
2515
+ background: rgba(56, 189, 248, 0.18);
2516
+ border-color: rgba(56, 189, 248, 0.45);
2497
2517
  color: #38bdf8;
2498
2518
  }
2499
2519
 
2500
2520
  .stream-tab-btn:hover:not(.active) {
2501
- color: #f1f5f9;
2502
- background: rgba(255, 255, 255, 0.05);
2521
+ color: #f8fafc;
2522
+ background: rgba(255, 255, 255, 0.08);
2503
2523
  }
2504
2524
 
2505
2525
  .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;
2526
+ background: rgba(255, 255, 255, 0.08);
2527
+ border: 1px solid rgba(255, 255, 255, 0.15);
2528
+ color: #f1f5f9;
2529
+ padding: 5px 12px;
2510
2530
  border-radius: 6px;
2511
2531
  font-size: 11px;
2512
- font-weight: 600;
2532
+ font-weight: 700;
2513
2533
  cursor: pointer;
2514
2534
  transition: all 0.2s ease;
2515
2535
  }
2516
2536
 
2517
2537
  .copy-stream-btn:hover, .action-btn-sm:hover {
2518
- background: rgba(56, 189, 248, 0.2);
2538
+ background: rgba(56, 189, 248, 0.25);
2519
2539
  border-color: #38bdf8;
2520
- color: #fff;
2540
+ color: #ffffff;
2521
2541
  }
2522
2542
 
2523
2543
  .swarm-stream-body, .deliverables-content {
2524
- padding: 16px;
2544
+ padding: 18px 20px;
2525
2545
  overflow-y: auto;
2526
2546
  flex: 1;
2527
2547
  font-size: 13px;
2528
- line-height: 1.6;
2529
- color: var(--text-primary, #f1f5f9);
2548
+ line-height: 1.65;
2549
+ color: #f1f5f9;
2550
+ background: #070d19;
2551
+ }
2552
+
2553
+ /* ==========================================================================
2554
+ ✨ High-Contrast Luminous Typography & Formatted Markdown for Dark Surfaces
2555
+ ========================================================================== */
2556
+
2557
+ #tab-swarm {
2558
+ color: #f1f5f9;
2559
+ }
2560
+
2561
+ #tab-swarm .panel-header h2 {
2562
+ color: var(--text-primary);
2563
+ }
2564
+
2565
+ #tab-swarm .panel-header p {
2566
+ color: var(--text-secondary);
2567
+ }
2568
+
2569
+ #tab-swarm #swarm-objective-input {
2570
+ background: #0f172a;
2571
+ border: 1px solid #334155;
2572
+ color: #ffffff;
2573
+ padding: 8px 14px;
2574
+ border-radius: 8px;
2575
+ font-size: 12px;
2576
+ outline: none;
2577
+ min-width: 320px;
2578
+ transition: border-color 0.2s ease;
2579
+ }
2580
+
2581
+ #tab-swarm #swarm-objective-input:focus {
2582
+ border-color: #38bdf8;
2583
+ box-shadow: 0 0 10px rgba(56, 189, 248, 0.25);
2584
+ }
2585
+
2586
+ #tab-swarm #swarm-objective-input::placeholder {
2587
+ color: #64748b;
2588
+ }
2589
+
2590
+ .swarm-stream-body *,
2591
+ .deliverables-content * {
2592
+ box-sizing: border-box;
2593
+ }
2594
+
2595
+ .swarm-stream-body p,
2596
+ .deliverables-content p {
2597
+ color: #e2e8f0;
2598
+ margin-bottom: 10px;
2599
+ line-height: 1.65;
2600
+ }
2601
+
2602
+ .formatted-h2 {
2603
+ font-size: 16px;
2604
+ font-weight: 800;
2605
+ color: #38bdf8;
2606
+ margin: 16px 0 8px 0;
2607
+ border-bottom: 1px solid rgba(56, 189, 248, 0.2);
2608
+ padding-bottom: 4px;
2609
+ }
2610
+
2611
+ .formatted-h3 {
2612
+ font-size: 14px;
2613
+ font-weight: 700;
2614
+ color: #c084fc;
2615
+ margin: 14px 0 6px 0;
2616
+ }
2617
+
2618
+ .formatted-h4 {
2619
+ font-size: 13px;
2620
+ font-weight: 700;
2621
+ color: #fbbf24;
2622
+ margin: 12px 0 6px 0;
2623
+ }
2624
+
2625
+ .formatted-h5 {
2626
+ font-size: 12px;
2627
+ font-weight: 700;
2628
+ color: #34d399;
2629
+ margin: 10px 0 4px 0;
2630
+ }
2631
+
2632
+ .bullet-item {
2633
+ color: #f1f5f9;
2634
+ margin: 5px 0;
2635
+ line-height: 1.55;
2636
+ padding-left: 6px;
2637
+ }
2638
+
2639
+ .number-item {
2640
+ color: #f1f5f9;
2641
+ margin: 5px 0;
2642
+ line-height: 1.55;
2643
+ }
2644
+
2645
+ .num-badge {
2646
+ color: #38bdf8;
2647
+ font-weight: 700;
2648
+ font-family: var(--font-mono);
2649
+ margin-right: 4px;
2650
+ }
2651
+
2652
+ .formatted-quote {
2653
+ border-left: 3px solid #38bdf8;
2654
+ background: rgba(56, 189, 248, 0.08);
2655
+ padding: 8px 12px;
2656
+ margin: 10px 0;
2657
+ border-radius: 0 6px 6px 0;
2658
+ color: #cbd5e1;
2659
+ font-style: italic;
2530
2660
  }
2531
2661
 
2532
- .swarm-stream-body pre, .deliverables-content pre {
2662
+ .inline-code {
2663
+ background: rgba(56, 189, 248, 0.15);
2664
+ color: #38bdf8;
2665
+ padding: 2px 6px;
2666
+ border-radius: 4px;
2667
+ font-family: var(--font-mono);
2668
+ font-size: 12px;
2669
+ border: 1px solid rgba(56, 189, 248, 0.25);
2670
+ }
2671
+
2672
+ .formatted-code-block {
2533
2673
  background: #020617;
2534
2674
  border: 1px solid #1e293b;
2535
2675
  border-radius: 8px;
2536
- padding: 12px;
2676
+ margin: 12px 0;
2677
+ overflow: hidden;
2678
+ }
2679
+
2680
+ .code-block-header {
2681
+ background: #0f172a;
2682
+ color: #94a3b8;
2683
+ font-size: 11px;
2684
+ font-weight: 700;
2685
+ padding: 5px 12px;
2686
+ text-transform: uppercase;
2687
+ font-family: var(--font-mono);
2688
+ border-bottom: 1px solid #1e293b;
2689
+ }
2690
+
2691
+ .formatted-code-block pre {
2692
+ padding: 12px 14px;
2693
+ margin: 0;
2537
2694
  overflow-x: auto;
2538
2695
  font-family: var(--font-mono);
2539
2696
  font-size: 12px;
2540
- margin: 10px 0;
2697
+ color: #e2e8f0;
2698
+ line-height: 1.5;
2699
+ background: #020617;
2700
+ }
2701
+
2702
+ .formatted-code-block code {
2703
+ color: #e2e8f0;
2704
+ font-family: var(--font-mono);
2705
+ }
2706
+
2707
+ .swarm-stream-body strong,
2708
+ .deliverables-content strong {
2709
+ color: #ffffff;
2710
+ font-weight: 700;
2711
+ }
2712
+
2713
+ .swarm-stream-body em,
2714
+ .deliverables-content em {
2715
+ color: #cbd5e1;
2716
+ }
2717
+
2718
+ .placeholder-text {
2719
+ color: #94a3b8 !important;
2720
+ font-style: italic;
2541
2721
  }
2542
2722
 
2543
2723
  /* ==========================================================================
@@ -1 +1 @@
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"}
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;WA81BH,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;CAyBnD"}
@@ -259,6 +259,14 @@ export class DesktopServer {
259
259
  }));
260
260
  return;
261
261
  }
262
+ // GET /api/cloud/sync (Get Cloud Sync Status & Config)
263
+ if (pathname === '/api/cloud/sync' && req.method === 'GET') {
264
+ const { FirestoreSyncManager } = await import('../cloud/firestore.js');
265
+ const cfg = FirestoreSyncManager.getSyncConfig();
266
+ res.writeHead(200, { 'Content-Type': 'application/json' });
267
+ res.end(JSON.stringify({ success: true, ...cfg }));
268
+ return;
269
+ }
262
270
  // GET /api/skills
263
271
  if (pathname === '/api/skills' && req.method === 'GET') {
264
272
  const markdownSkills = skillManager.listSkills();
@@ -411,6 +419,22 @@ export class DesktopServer {
411
419
  }));
412
420
  return;
413
421
  }
422
+ // POST /api/cloud/pull (Pull profiles from Firestore)
423
+ if (pathname === '/api/cloud/pull' && req.method === 'POST') {
424
+ const { FirestoreSyncManager } = await import('../cloud/firestore.js');
425
+ const resData = await FirestoreSyncManager.pullFromFirestore(payload.syncKey);
426
+ res.writeHead(200, { 'Content-Type': 'application/json' });
427
+ res.end(JSON.stringify(resData));
428
+ return;
429
+ }
430
+ // POST /api/cloud/push (Push profiles to Firestore)
431
+ if (pathname === '/api/cloud/push' && req.method === 'POST') {
432
+ const { FirestoreSyncManager } = await import('../cloud/firestore.js');
433
+ const resData = await FirestoreSyncManager.pushToFirestore(payload.syncKey);
434
+ res.writeHead(200, { 'Content-Type': 'application/json' });
435
+ res.end(JSON.stringify(resData));
436
+ return;
437
+ }
414
438
  // POST /api/codebase/breathe (Trigger 1-2s Codebase Analysis & Cache Re-indexing)
415
439
  if (pathname === '/api/codebase/breathe' && req.method === 'POST') {
416
440
  const freshCache = await CodebaseBreather.breathe(config.workingDir, { minDurationMs: 1200, silent: true });