sigrank 1.0.35 → 1.0.36

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.35",
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.36",
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) =>
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
  ]);