sigrank 0.0.225 → 0.0.226
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 +37 -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.225",
|
|
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.226",
|
|
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;
|
|
@@ -3012,8 +3032,25 @@ export async function runTui({
|
|
|
3012
3032
|
compareData = null;
|
|
3013
3033
|
status = `loading ${platform}…`;
|
|
3014
3034
|
await redraw();
|
|
3035
|
+
// Animated spinner (same as the initial Compare load — see above)
|
|
3036
|
+
const SPIN_FRAMES = ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"];
|
|
3037
|
+
const BEAR_FRAMES = ["ʕ•ᴥ•ʔ", "ʕ•ᴥ•ʔノ", "ʕ•ᴥ•ʔ", "ʕ•ᴥ•ʔノ"];
|
|
3038
|
+
const pullStart = Date.now();
|
|
3039
|
+
let spinIdx = 0;
|
|
3040
|
+
const spinTimer = setInterval(() => {
|
|
3041
|
+
if (activeTab !== 2) return;
|
|
3042
|
+
const elapsed = ((Date.now() - pullStart) / 1000).toFixed(1);
|
|
3043
|
+
const spin = SPIN_FRAMES[spinIdx % SPIN_FRAMES.length];
|
|
3044
|
+
const bear = BEAR_FRAMES[spinIdx % BEAR_FRAMES.length];
|
|
3045
|
+
spinIdx++;
|
|
3046
|
+
process.stdout.write(
|
|
3047
|
+
GOTO(4, 1) + ERLINE +
|
|
3048
|
+
` ${gold(spin)} ${dim(`pulling ${platform}…`)} ${bold(`${elapsed}s`)} ${dim(`·`)} ${gold(bear)}`,
|
|
3049
|
+
);
|
|
3050
|
+
}, 200);
|
|
3015
3051
|
// ASYNC FIX: guard — only render if still on Compare (user may have switched away)
|
|
3016
3052
|
const result = await loadCompareData(platform).catch(() => null);
|
|
3053
|
+
clearInterval(spinTimer);
|
|
3017
3054
|
if (activeTab === 2) {
|
|
3018
3055
|
compareData = result;
|
|
3019
3056
|
status = `last refreshed ${new Date().toLocaleTimeString("en-US", { hour12: false })}`;
|