formlab-mcp 0.6.43 → 0.6.44

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "formlab-mcp",
3
- "version": "0.6.43",
3
+ "version": "0.6.44",
4
4
  "mcpName": "io.github.juliu1980/formlab-mcp",
5
5
  "description": "Read-only Model Context Protocol server for FormLab \u2014 lets Claude (and other MCP clients) read and analyze your FormLab data, from a local export file OR your live cloud workspace.",
6
6
  "type": "module",
package/server.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
3
3
  "name": "io.github.juliu1980/formlab-mcp",
4
4
  "description": "Read-only MCP for FormLab — let Claude query your formulation lab. Free reads a local export; Pro connects to your live cloud workspace with a dedicated read-only token.",
5
- "version": "0.6.43",
5
+ "version": "0.6.44",
6
6
  "websiteUrl": "https://formvix.com/mcp",
7
7
  "repository": {
8
8
  "url": "https://github.com/juliu1980/FormLab",
@@ -13,7 +13,7 @@
13
13
  {
14
14
  "registryType": "npm",
15
15
  "identifier": "formlab-mcp",
16
- "version": "0.6.43",
16
+ "version": "0.6.44",
17
17
  "runtimeHint": "npx",
18
18
  "transport": {
19
19
  "type": "stdio"
@@ -1521,8 +1521,8 @@ function _mcpCompareCell(item, parameter, agg, db) {
1521
1521
  });
1522
1522
  return { sig: a.sig, m: a.m, t: points[points.length - 1].t, latestM: points[points.length - 1].m, points, readings: a.rows.length };
1523
1523
  });
1524
- // Primary first: the longest record, then the declared default condition, then the most recent, then by name.
1525
- series.sort((a, b) => (b.points.length - a.points.length)
1524
+ // Primary first: no run condition when there is one (13n), then the longest record, the declared default condition, the most recent, then by name.
1525
+ series.sort((a, b) => ((a.sig ? 1 : 0) - (b.sig ? 1 : 0)) || (b.points.length - a.points.length)
1526
1526
  || (_mcpCondDefaultScore(b.latestM, b.t, db) - _mcpCondDefaultScore(a.latestM, a.t, db))
1527
1527
  || (b.points[b.points.length - 1].date - a.points[a.points.length - 1].date) || _mcpCmp(a.sig, b.sig));
1528
1528
  const basis = type === 'time_series' ? 'final' : type === 'distribution' ? 'D50' : undefined;
@@ -1550,7 +1550,7 @@ function _mcpCompareCell(item, parameter, agg, db) {
1550
1550
  const tags = _mcpCondTags(series.map(s => s.sig ? _mcpCondLabel(s.m) : ''));
1551
1551
  return { type, ...cells[0], splitByCondition: true,
1552
1552
  arms: series.map((s, i) => ({ condition: s.sig ? _mcpCondLabel(s.m) : null, tag: tags[i], ...cells[i] })),
1553
- note: 'measured under more than one run condition: one arm per condition, never averaged; the top-level value is the first arm (the longest record)' };
1553
+ note: 'measured under more than one run condition: one arm per condition, never averaged; the top-level value is the first arm (no run condition when there is one, else the longest record)' };
1554
1554
  }
1555
1555
 
1556
1556
  // The app's difference highlight (_tcKeysDiffer): numbers differ when their