sigrank 0.0.225 → 0.0.227
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 +1 -1
- package/package.json +1 -1
- package/presentation/tui.mjs +38 -0
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.
|
|
5
|
+
"version": "0.0.226",
|
|
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.
|
|
3
|
+
"version": "0.0.227",
|
|
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",
|
package/presentation/tui.mjs
CHANGED
|
@@ -2955,7 +2955,27 @@ export async function runTui({
|
|
|
2955
2955
|
if (switched && activeTab === 2 && !compareData) {
|
|
2956
2956
|
submitMsg = "";
|
|
2957
2957
|
await redraw(); // show the spinner line before the (slow) fresh pull
|
|
2958
|
+
// Animated spinner with elapsed timer — the fresh verifier pull takes
|
|
2959
|
+
// 5-20s (ccusage CLI scans 1,700+ JSONL files). Without animation the
|
|
2960
|
+
// user sees a frozen "pulling fresh sources…" line and thinks it hung.
|
|
2961
|
+
const SPIN_FRAMES = ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"];
|
|
2962
|
+
const BEAR_FRAMES = ["ʕ•ᴥ•ʔ", "ʕ•ᴥ•ʔノ", "ʕ•ᴥ•ʔ", "ʕ•ᴥ•ʔノ"];
|
|
2963
|
+
const pullStart = Date.now();
|
|
2964
|
+
let spinIdx = 0;
|
|
2965
|
+
const spinTimer = setInterval(() => {
|
|
2966
|
+
if (activeTab !== 2) return; // user switched away — don't repaint
|
|
2967
|
+
const elapsed = ((Date.now() - pullStart) / 1000).toFixed(1);
|
|
2968
|
+
const spin = SPIN_FRAMES[spinIdx % SPIN_FRAMES.length];
|
|
2969
|
+
const bear = BEAR_FRAMES[spinIdx % BEAR_FRAMES.length];
|
|
2970
|
+
spinIdx++;
|
|
2971
|
+
// Repaint just the spinner line in-place (line 4 of the frame)
|
|
2972
|
+
process.stdout.write(
|
|
2973
|
+
GOTO(4, 1) + ERLINE +
|
|
2974
|
+
` ${gold(spin)} ${dim(`pulling fresh sources…`)} ${bold(`${elapsed}s`)} ${dim(`·`)} ${gold(bear)}`,
|
|
2975
|
+
);
|
|
2976
|
+
}, 200);
|
|
2958
2977
|
const result = await loadCompareData(platform).catch(() => null);
|
|
2978
|
+
clearInterval(spinTimer);
|
|
2959
2979
|
if (activeTab === 2) {
|
|
2960
2980
|
// still on Compare? render the result
|
|
2961
2981
|
compareData = result;
|
|
@@ -2988,6 +3008,7 @@ export async function runTui({
|
|
|
2988
3008
|
const CYCLE_PLATFORMS = [
|
|
2989
3009
|
"claude",
|
|
2990
3010
|
"codex",
|
|
3011
|
+
"devin",
|
|
2991
3012
|
"amp",
|
|
2992
3013
|
"gemini",
|
|
2993
3014
|
"kimi",
|
|
@@ -3012,8 +3033,25 @@ export async function runTui({
|
|
|
3012
3033
|
compareData = null;
|
|
3013
3034
|
status = `loading ${platform}…`;
|
|
3014
3035
|
await redraw();
|
|
3036
|
+
// Animated spinner (same as the initial Compare load — see above)
|
|
3037
|
+
const SPIN_FRAMES = ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"];
|
|
3038
|
+
const BEAR_FRAMES = ["ʕ•ᴥ•ʔ", "ʕ•ᴥ•ʔノ", "ʕ•ᴥ•ʔ", "ʕ•ᴥ•ʔノ"];
|
|
3039
|
+
const pullStart = Date.now();
|
|
3040
|
+
let spinIdx = 0;
|
|
3041
|
+
const spinTimer = setInterval(() => {
|
|
3042
|
+
if (activeTab !== 2) return;
|
|
3043
|
+
const elapsed = ((Date.now() - pullStart) / 1000).toFixed(1);
|
|
3044
|
+
const spin = SPIN_FRAMES[spinIdx % SPIN_FRAMES.length];
|
|
3045
|
+
const bear = BEAR_FRAMES[spinIdx % BEAR_FRAMES.length];
|
|
3046
|
+
spinIdx++;
|
|
3047
|
+
process.stdout.write(
|
|
3048
|
+
GOTO(4, 1) + ERLINE +
|
|
3049
|
+
` ${gold(spin)} ${dim(`pulling ${platform}…`)} ${bold(`${elapsed}s`)} ${dim(`·`)} ${gold(bear)}`,
|
|
3050
|
+
);
|
|
3051
|
+
}, 200);
|
|
3015
3052
|
// ASYNC FIX: guard — only render if still on Compare (user may have switched away)
|
|
3016
3053
|
const result = await loadCompareData(platform).catch(() => null);
|
|
3054
|
+
clearInterval(spinTimer);
|
|
3017
3055
|
if (activeTab === 2) {
|
|
3018
3056
|
compareData = result;
|
|
3019
3057
|
status = `last refreshed ${new Date().toLocaleTimeString("en-US", { hour12: false })}`;
|