sigrank 0.0.228 → 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.227",
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.228",
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",
@@ -2492,7 +2492,23 @@ export async function runTui({
2492
2492
  // A2 (2026-06-27): paint the frame + a clear "reading your cascade…" status IMMEDIATELY,
2493
2493
  // BEFORE the await — so the very first thing on screen is the table header + a live status,
2494
2494
  // not a blank "loading dashboard…". renderDashboard tolerates this empty dashData (guarded).
2495
- 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…`;
2496
2512
  dashData = { active: [], _loading: true };
2497
2513
  await redraw();
2498
2514
  // FIX 0: progressive Dashboard load — claude first (fast), render it, THEN fill
@@ -2502,6 +2518,7 @@ export async function runTui({
2502
2518
  status = `dashboard error: ${e.message}`;
2503
2519
  return null;
2504
2520
  });
2521
+ clearInterval(initTimer);
2505
2522
  status = `last refreshed ${new Date().toLocaleTimeString("en-US", { hour12: false })}`;
2506
2523
  await redraw();
2507
2524
  // Keep a "filling other platforms…" status visible while fillDashboardRest runs.
@@ -2513,6 +2530,39 @@ export async function runTui({
2513
2530
  status = "claude ready · filling other platforms…";
2514
2531
  await redraw();
2515
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);
2516
2566
  [, boardData] = await Promise.all([
2517
2567
  dashData?._remaining
2518
2568
  ? fillDashboardRest(dashData, {
@@ -2552,6 +2602,7 @@ export async function runTui({
2552
2602
  : Promise.resolve(false),
2553
2603
  loadBoardData(boardWindow).catch(() => null),
2554
2604
  ]);
2605
+ clearInterval(pulseTimer);
2555
2606
  status = `last refreshed ${new Date().toLocaleTimeString("en-US", { hour12: false })}`;
2556
2607
  await redraw();
2557
2608
  };