sigrank 0.0.227 → 0.0.229

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/manifest.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "$schema": "https://raw.githubusercontent.com/anthropics/mcpb/main/schemas/mcpb-manifest-v0.4.schema.json",
3
3
  "manifest_version": "0.4",
4
4
  "name": "sigrank",
5
- "version": "0.0.226",
5
+ "version": "0.0.228",
6
6
  "description": "Ranks AI coding operators by token cascade efficiency (Yield = cache_read \u00d7 output / input\u00b2). 23 tools for yield calculation, local token usage pulls, signed submission, and tokscale-powered analytics (market share, developer profiles, model trends, cost analysis, device profiles, MCP usage, competitive intelligence). Privacy-first: runs locally, only four token counts leave the machine.",
7
7
  "author": {
8
8
  "name": "SunrisesIllNeverSee",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sigrank",
3
- "version": "0.0.227",
3
+ "version": "0.0.229",
4
4
  "author": "SunrisesIllNeverSee (https://github.com/SunrisesIllNeverSee)",
5
5
  "description": "SigRank MCP server — AI operator evaluation and token cascade efficiency tools. The yield cascade + live leaderboard as MCP tools any agent can call.",
6
6
  "mcpName": "io.github.SunrisesIllNeverSee/sigrank-mcp",
@@ -413,15 +413,19 @@ async function fillDashboardRest(
413
413
  { shouldLoadPlatform, onPlatformStarted, onPlatformLoaded } = {},
414
414
  ) {
415
415
  if (!dashData?._remaining) return false;
416
- // Pull one platform at a time. Some adapters scan large session trees, so
417
- // waiting for the entire batch would prevent the dashboard from updating
418
- // while the slowest platform is still being read.
419
- for (const platform of dashData._remaining) {
420
- if (shouldLoadPlatform && !shouldLoadPlatform(platform)) continue;
421
- await onPlatformStarted?.(platform);
422
- const result = await pullDashboardPlatform(dashData, platform);
423
- await onPlatformLoaded?.(platform, result);
424
- }
416
+ // Pull all remaining platforms IN PARALLEL. The old sequential approach took
417
+ // 25s+ (18 platforms × ~1.5s each, most returning nothing). Parallel cuts
418
+ // total wait to the slowest single platform (~2-3s).
419
+ const toLoad = dashData._remaining.filter(
420
+ (p) => !shouldLoadPlatform || shouldLoadPlatform(p),
421
+ );
422
+ await Promise.all(
423
+ toLoad.map(async (platform) => {
424
+ await onPlatformStarted?.(platform);
425
+ const result = await pullDashboardPlatform(dashData, platform);
426
+ await onPlatformLoaded?.(platform, result);
427
+ }),
428
+ );
425
429
  dashData._loading = false;
426
430
  dashData._remaining = null;
427
431
  return true;
@@ -2488,7 +2492,23 @@ export async function runTui({
2488
2492
  // A2 (2026-06-27): paint the frame + a clear "reading your cascade…" status IMMEDIATELY,
2489
2493
  // BEFORE the await — so the very first thing on screen is the table header + a live status,
2490
2494
  // not a blank "loading dashboard…". renderDashboard tolerates this empty dashData (guarded).
2491
- status = "reading your cascade…";
2495
+ // Animated signal pulse during initial load — shows the system is alive.
2496
+ const INIT_PULSE = [
2497
+ "▁▁▁▁▁", "▂▁▁▁▁", "▃▂▁▁▁", "▄▃▂▁▁", "▅▄▃▂▁",
2498
+ "▆▅▄▃▂", "▇▆▅▄▃", "█▇▆▅▄", "▇█▇▆▅", "▆▇█▇▆",
2499
+ "▅▆▇█▇", "▄▅▆▇█", "▃▄▅▆▇", "▂▃▄▅▆", "▁▂▃▄▅",
2500
+ "▁▁▂▃▄", "▁▁▁▂▃", "▁▁▁▁▂",
2501
+ ];
2502
+ const initStart = Date.now();
2503
+ let initIdx = 0;
2504
+ const initTimer = setInterval(() => {
2505
+ const elapsed = ((Date.now() - initStart) / 1000).toFixed(1);
2506
+ const pulse = INIT_PULSE[initIdx % INIT_PULSE.length];
2507
+ initIdx++;
2508
+ status = `${gold(pulse)} reading your cascade… ${bold(`${elapsed}s`)}`;
2509
+ redraw();
2510
+ }, 150);
2511
+ status = `${gold("▁▁▁▁▁")} reading your cascade…`;
2492
2512
  dashData = { active: [], _loading: true };
2493
2513
  await redraw();
2494
2514
  // FIX 0: progressive Dashboard load — claude first (fast), render it, THEN fill
@@ -2498,6 +2518,7 @@ export async function runTui({
2498
2518
  status = `dashboard error: ${e.message}`;
2499
2519
  return null;
2500
2520
  });
2521
+ clearInterval(initTimer);
2501
2522
  status = `last refreshed ${new Date().toLocaleTimeString("en-US", { hour12: false })}`;
2502
2523
  await redraw();
2503
2524
  // Keep a "filling other platforms…" status visible while fillDashboardRest runs.
@@ -2509,6 +2530,39 @@ export async function runTui({
2509
2530
  status = "claude ready · filling other platforms…";
2510
2531
  await redraw();
2511
2532
  }
2533
+ // Animated signal pulse while the platform fill runs — shows the system
2534
+ // is alive, not frozen. Uses a rotating signal-bar animation + elapsed timer.
2535
+ const PULSE_FRAMES = [
2536
+ "▁▁▁▁▁",
2537
+ "▂▁▁▁▁",
2538
+ "▃▂▁▁▁",
2539
+ "▄▃▂▁▁",
2540
+ "▅▄▃▂▁",
2541
+ "▆▅▄▃▂",
2542
+ "▇▆▅▄▃",
2543
+ "█▇▆▅▄",
2544
+ "▇█▇▆▅",
2545
+ "▆▇█▇▆",
2546
+ "▅▆▇█▇",
2547
+ "▄▅▆▇█",
2548
+ "▃▄▅▆▇",
2549
+ "▂▃▄▅▆",
2550
+ "▁▂▃▄▅",
2551
+ "▁▁▂▃▄",
2552
+ "▁▁▁▂▃",
2553
+ "▁▁▁▁▂",
2554
+ ];
2555
+ const fillStart = Date.now();
2556
+ let pulseIdx = 0;
2557
+ const pulseTimer = setInterval(() => {
2558
+ if (!dashData?._loading) return;
2559
+ const elapsed = ((Date.now() - fillStart) / 1000).toFixed(1);
2560
+ const pulse = PULSE_FRAMES[pulseIdx % PULSE_FRAMES.length];
2561
+ pulseIdx++;
2562
+ const platCount = dashData.active.length;
2563
+ status = `${gold(pulse)} scanning platforms… ${bold(`${elapsed}s`)} ${dim(`· ${platCount} found`)}`;
2564
+ redraw();
2565
+ }, 150);
2512
2566
  [, boardData] = await Promise.all([
2513
2567
  dashData?._remaining
2514
2568
  ? fillDashboardRest(dashData, {
@@ -2548,6 +2602,7 @@ export async function runTui({
2548
2602
  : Promise.resolve(false),
2549
2603
  loadBoardData(boardWindow).catch(() => null),
2550
2604
  ]);
2605
+ clearInterval(pulseTimer);
2551
2606
  status = `last refreshed ${new Date().toLocaleTimeString("en-US", { hour12: false })}`;
2552
2607
  await redraw();
2553
2608
  };