sigrank 1.0.35 → 1.0.37

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": "1.0.34",
5
+ "version": "1.0.36",
6
6
  "description": "Ranks AI coding operators by token cascade efficiency (Yield = cache_read \u00d7 output / input\u00b2). 25 tools including SigRank Standard record, 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": "1.0.35",
3
+ "version": "1.0.37",
4
4
  "author": "SunrisesIllNeverSee (https://github.com/SunrisesIllNeverSee)",
5
5
  "description": "Upsilon measurement engine distributed through the sigrank CLI/MCP compatibility package, with SigRank public leaderboard tools.",
6
6
  "mcpName": "io.github.SunrisesIllNeverSee/sigrank-mcp",
@@ -366,6 +366,28 @@ async function loadDashboardData({ includeOmp = false } = {}) {
366
366
 
367
367
  const boardData = await boardPromise;
368
368
  const batchedData = await batchedPromise;
369
+
370
+ // When the operator is signed in and the server has batched (rolled-forward)
371
+ // totals, override the local "all" window with the server's never-decreasing
372
+ // value. The local scan only sees what's on disk; the server has baseline +
373
+ // all deltas. This makes the cascade table "all" row match the Lifetime
374
+ // Tokens section so they don't diverge as platforms prune old session logs.
375
+ if (batchedData?.per_platform) {
376
+ for (const d of active) {
377
+ const bp = batchedData.per_platform[d.platform];
378
+ if (!bp?.all) continue;
379
+ const allWin = d.windows?.find((w) => w.window === "all");
380
+ if (allWin) {
381
+ allWin.pillars = {
382
+ input: bp.all.input ?? allWin.pillars.input,
383
+ output: bp.all.output ?? allWin.pillars.output,
384
+ cacheCreate: bp.all.cacheCreate ?? allWin.pillars.cacheCreate,
385
+ cacheRead: bp.all.cacheRead ?? allWin.pillars.cacheRead,
386
+ };
387
+ }
388
+ }
389
+ }
390
+
369
391
  return {
370
392
  active,
371
393
  verifierMap: {},
@@ -390,8 +412,23 @@ async function pullDashboardPlatform(dashData, platform) {
390
412
  try {
391
413
  const active = await pullActivePlatforms({ platforms: [platform] });
392
414
  for (const d of active) {
393
- if (!dashData.active.find((a) => a.platform === d.platform))
415
+ if (!dashData.active.find((a) => a.platform === d.platform)) {
416
+ // Apply the same batched "all" override as loadDashboardData so
417
+ // progressively-loaded platforms match the Lifetime Tokens section.
418
+ const bp = dashData.batchedData?.per_platform?.[d.platform];
419
+ if (bp?.all) {
420
+ const allWin = d.windows?.find((w) => w.window === "all");
421
+ if (allWin) {
422
+ allWin.pillars = {
423
+ input: bp.all.input ?? allWin.pillars.input,
424
+ output: bp.all.output ?? allWin.pillars.output,
425
+ cacheCreate: bp.all.cacheCreate ?? allWin.pillars.cacheCreate,
426
+ cacheRead: bp.all.cacheRead ?? allWin.pillars.cacheRead,
427
+ };
428
+ }
429
+ }
394
430
  dashData.active.push(d);
431
+ }
395
432
  }
396
433
  dashData.active.sort(
397
434
  (a, b) =>
@@ -936,6 +973,29 @@ function renderDashboard(data, status = "", scrollOffset = 0) {
936
973
  })();
937
974
 
938
975
  if (used < budget - 8) {
976
+ // Compute the operator's combined "all" cascade for live Four Degrees.
977
+ // TD.top is overridden with the live metrics so the "Top Evals" column
978
+ // reflects the actual top operator instead of a static snapshot.
979
+ const combinedAll = { input: 0, output: 0, cacheCreate: 0, cacheRead: 0 };
980
+ for (const d of active) {
981
+ const all = d.windows?.find((w) => w.window === "all");
982
+ if (!all) continue;
983
+ combinedAll.input += all.pillars.input ?? 0;
984
+ combinedAll.output += all.pillars.output ?? 0;
985
+ combinedAll.cacheCreate += all.pillars.cacheCreate ?? 0;
986
+ combinedAll.cacheRead += all.pillars.cacheRead ?? 0;
987
+ }
988
+ const liveTop = cascadeFrom(combinedAll);
989
+ const tdLive = { ...TD };
990
+ if (liveTop && (liveTop.yield ?? 0) > 0) {
991
+ tdLive.top = {
992
+ yield: liveTop.yield,
993
+ snr: liveTop.snr,
994
+ vel: liveTop.velocity ?? TD.top.vel,
995
+ lev: liveTop.leverage ?? TD.top.lev,
996
+ d10: liveTop.dev10x ?? TD.top.d10,
997
+ };
998
+ }
939
999
  // ── Custom insights — comparison vs the field + a concrete tip for the weakest metric
940
1000
  emit(` ${hr()}`);
941
1001
  emit(
@@ -974,45 +1034,45 @@ function renderDashboard(data, status = "", scrollOffset = 0) {
974
1034
  chk(
975
1035
  "Υ Yield",
976
1036
  you.yield,
977
- TD.hcm.yield,
978
- TD.power.yield,
979
- TD.top.yield,
1037
+ tdLive.hcm.yield,
1038
+ tdLive.power.yield,
1039
+ tdLive.top.yield,
980
1040
  fmtY,
981
1041
  "compound more — reuse cache, raise output",
982
1042
  );
983
1043
  chk(
984
1044
  "SNR",
985
1045
  you.snr,
986
- TD.hcm.snr,
987
- TD.power.snr,
988
- TD.top.snr,
1046
+ tdLive.hcm.snr,
1047
+ tdLive.power.snr,
1048
+ tdLive.top.snr,
989
1049
  fmtSNR,
990
1050
  "tighten prompts — less input per unit output",
991
1051
  );
992
1052
  chk(
993
1053
  "Leverage",
994
1054
  you.leverage,
995
- TD.hcm.lev,
996
- TD.power.lev,
997
- TD.top.lev,
1055
+ tdLive.hcm.lev,
1056
+ tdLive.power.lev,
1057
+ tdLive.top.lev,
998
1058
  (v) => fmtLev(v) + "×",
999
1059
  "lean on cache-read — amplify prior context",
1000
1060
  );
1001
1061
  chk(
1002
1062
  "Velocity",
1003
1063
  you.velocity,
1004
- TD.hcm.vel,
1005
- TD.power.vel,
1006
- TD.top.vel,
1064
+ tdLive.hcm.vel,
1065
+ tdLive.power.vel,
1066
+ tdLive.top.vel,
1007
1067
  (v) => v.toFixed(2),
1008
1068
  "more output per input token",
1009
1069
  );
1010
1070
  chk(
1011
1071
  "10xDEV",
1012
1072
  you.dev10x,
1013
- TD.hcm.d10,
1014
- TD.power.d10,
1015
- TD.top.d10,
1073
+ tdLive.hcm.d10,
1074
+ tdLive.power.d10,
1075
+ tdLive.top.d10,
1016
1076
  (v) => v.toFixed(2),
1017
1077
  "raise leverage — every 10× lev adds 1 to 10xDEV",
1018
1078
  );
@@ -1059,22 +1119,22 @@ function renderDashboard(data, status = "", scrollOffset = 0) {
1059
1119
  emit(
1060
1120
  ` ${padEnd(label, 10)} ${padStart(dim(fmt(b)), 9)} ${padStart(white(fmt(h)), 9)} ${padStart(white(fmt(p)), 9)} ${padStart(gold(fmt(t)), 9)}`,
1061
1121
  );
1062
- tdRow("Υ Yield", TD.base.yield, TD.hcm.yield, TD.power.yield, TD.top.yield, fmtY);
1063
- tdRow("SNR", TD.base.snr, TD.hcm.snr, TD.power.snr, TD.top.snr, fmtSNR);
1064
- tdRow("Velocity", TD.base.vel, TD.hcm.vel, TD.power.vel, TD.top.vel, (v) =>
1122
+ tdRow("Υ Yield", tdLive.base.yield, tdLive.hcm.yield, tdLive.power.yield, tdLive.top.yield, fmtY);
1123
+ tdRow("SNR", tdLive.base.snr, tdLive.hcm.snr, tdLive.power.snr, tdLive.top.snr, fmtSNR);
1124
+ tdRow("Velocity", tdLive.base.vel, tdLive.hcm.vel, tdLive.power.vel, tdLive.top.vel, (v) =>
1065
1125
  v.toFixed(2),
1066
1126
  );
1067
1127
  tdRow(
1068
1128
  "Leverage",
1069
- TD.base.lev,
1070
- TD.hcm.lev,
1071
- TD.power.lev,
1072
- TD.top.lev,
1129
+ tdLive.base.lev,
1130
+ tdLive.hcm.lev,
1131
+ tdLive.power.lev,
1132
+ tdLive.top.lev,
1073
1133
  (v) => fmtLev(v) + "×",
1074
1134
  );
1075
- tdRow("10xDEV", TD.base.d10, TD.hcm.d10, TD.power.d10, TD.top.d10, (v) => v.toFixed(2));
1135
+ tdRow("10xDEV", tdLive.base.d10, tdLive.hcm.d10, tdLive.power.d10, tdLive.top.d10, (v) => v.toFixed(2));
1076
1136
  emit(
1077
- ` ${dim("reference values until live user volume calibrates HCM · Power · Top")}`,
1137
+ ` ${dim("AA baseline static · Top Evals live from your cascade · HCM/Power calibrate with user volume")}`,
1078
1138
  );
1079
1139
  }
1080
1140
 
@@ -1093,7 +1153,9 @@ function renderDashboard(data, status = "", scrollOffset = 0) {
1093
1153
  emit();
1094
1154
  emit(` ${hr()}`);
1095
1155
  emit(` ${bold("Lifetime Tokens")} ${dim("archived submissions · never decreases")}`);
1096
- const platforms = Object.entries(batched.per_platform ?? {});
1156
+ const platforms = Object.entries(batched.per_platform ?? {}).filter(
1157
+ ([plat]) => plat !== "multi",
1158
+ );
1097
1159
  for (const [plat, pw] of platforms) {
1098
1160
  if (used >= budget - 2) break;
1099
1161
  const pc = platformColor(plat);
package/submit/index.mjs CHANGED
@@ -28,6 +28,7 @@ const PLATFORM_ENUM = new Set([
28
28
  "pi",
29
29
  "omp",
30
30
  "codex",
31
+ "devin",
31
32
  "multi",
32
33
  "other",
33
34
  ]);