@battlegrid/mcp-server 31.2.76 → 31.2.78

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/README.md CHANGED
@@ -24,10 +24,78 @@ Seeing package `31.x` alongside handshake `battlegrid@33.x` — the package **be
24
24
 
25
25
  **What this changes for you:** nothing about how you call anything. Upgrading the package no longer waits on a server deploy, and a server deploy no longer strands you on a package that names the wrong contract — reconnect and the announcement follows. **Contract breaking-change notes are no longer keyed to package versions**, since a contract move is no longer a release here; the v11-and-earlier notes below are kept as history, and the live vocabulary is always discovery.
26
26
 
27
- ## Contract history — v93 (every value you read names the bar it came from)
27
+ ## Contract history — v96 (a metric's meaning is declared once)
28
28
 
29
- **Breaking at v93: a timeless metric refuses an `offset`, and a value with no reading on its bar reads absent
30
- instead of an older bar's.** v93 is the contract on top of v92. A column reads the bar it names, or nothing.
29
+ **Breaking at v96: `efficiency` admits only a level or a price-fact series, and `nearestZoneDist` changes
30
+ sign.** v96 is the contract on top of v95.
31
+
32
+ ### Rejected input — something you send is no longer accepted
33
+
34
+ - `efficiency` over an increment or an oscillator metric — `CLOSE_CHANGE`, `VOLUME`, `RSI14`, `FUNDING_RATE`
35
+ and the like — is refused at construction, and so is `efficiency` as the outer of `distance` or `spread`
36
+ (`VALIDATION_ERROR`, authoring code `REPORT_COLUMN_CONSTRUCTION_FAILED` or `REPORT_COLUMN_CHAIN_UNSUPPORTED`),
37
+ by every tool that builds a report column. `distance` and `spread` chain `trajectory`, `aggregate` and
38
+ `rank`; the column contract and the vocabulary tools serve exactly those sets.
39
+ - `BB_PCT_B` no longer composes `maxShare`: `%B` leaves `[0, 1]` when price closes outside a band.
40
+ - A `rank` column with no `ordering` is gated as the default `hi` it ranks by, so it is refused wherever a
41
+ written `hi` is (`REPORT_COLUMN_PAIR_UNSUPPORTED`). Write the ordering you mean.
42
+ - `transformId` is the closed enum of the seventeen transforms and `chainedTransformId` the enum of the five
43
+ chain outers, where each was any 1–40 character string. An id outside them is refused by schema.
44
+
45
+ ### Changed values — the same fields, a declared meaning
46
+
47
+ - **`nearestZoneDist` is price's distance from the zone midpoint**, `((price − mid) / mid) × 100`: positive
48
+ when price is above the zone, negative below it. It was the midpoint's distance from price, with the
49
+ opposite sign. A range symmetric about zero reads the same window; a one-sided bound needs its sign
50
+ flipped.
51
+ - `BB_PCT_B` offers all four rank orderings.
52
+ - A `classifyZone` column declares and resolves its own metric's vocabulary in canonical labels — ADX's
53
+ strength bands, MFI's five bands — not a shared `overbought / oversold / neutral` set.
54
+ - `highDev`, `lowDev` and `oiRegime` read live sources and declare the live clock, so a condition over them
55
+ is provisional on the live frame.
56
+ - A chained column's formula binds its outer half to the inner column's header (`dist_VWAP`), and every
57
+ relative-change formula reads `((value − reference) / reference) × 100`.
58
+
59
+ ### Reshaped output
60
+
61
+ - An authoring parameter's `defaultValue` on `get_metric_construction_hints` is typed per knob — `window`
62
+ and `offset` integers, `ordering` a rank ordering — and absent on `side`, `inputs` and `bars`.
63
+ - A rendered section column's `role` is one enum of the same members, where it was a union of an enum and
64
+ five literals.
65
+
66
+ An input v95 accepted is refused at v96, and a value read at v95 reads with the opposite sign — hence the
67
+ MAJOR.
68
+
69
+ ## Contract history — v95 (a refusal names the verdict it applied)
70
+
71
+ **Breaking at v95: a gate block's `conditionVerdict` is the verdict applied, not the one read.** v95 is the
72
+ contract on top of v94.
73
+
74
+ ### Changed meaning — the same key, a different question
75
+
76
+ - On `list_gate_blocks`, a conditions-stage `reasonDetail.conditionVerdict` is the verdict **applied** — the
77
+ one bound for the pair, which can be a held verdict this evaluation did not read — where it was the verdict
78
+ the conditions read. It is served only on a `CONDITION_VERDICT_OPPOSES_DIRECTION` or
79
+ `CONDITION_EXIT_RULE_CLOSES_DIRECTION` block recorded since v95; a `REQUIRED_CONDITION_FALSE` block, which
80
+ no verdict decided, and a block recorded before v95 no longer carry it. Read `observedVerdict` for what the
81
+ conditions read.
82
+
83
+ ### Widened output
84
+
85
+ - The reason detail gains `observedVerdict`, served on every conditions-stage block, and `heldVerdict`,
86
+ `verdictDwellResolutions` and `verdictDwellRequired` — the dwell state the binding was resolved from,
87
+ served beside `conditionVerdict` and absent where it is. `get_signal_log` and
88
+ `get_public_agent_signal_log_detail` embed the same schema and never fill these keys: a block writes no
89
+ signal log.
90
+ - `get_signal_log`'s `conditionEvaluation.verdict` and `get_agent_journal`'s `marketSnapshot.conditionVerdict`
91
+ keep meaning the verdict the evaluation observed.
92
+
93
+ A key read at v94 answers a different question at v95 — hence the MAJOR.
94
+
95
+ ## Contract history — v94 (every value you read names the bar it came from)
96
+
97
+ **Breaking at v94: a timeless metric refuses an `offset`, and a value with no reading on its bar reads absent
98
+ instead of an older bar's.** v94 is the contract on top of v93. A column reads the bar it names, or nothing.
31
99
 
32
100
  ### Rejected input — something you send is no longer accepted
33
101
 
@@ -41,8 +109,7 @@ instead of an older bar's.** v93 is the contract on top of v92. A column reads t
41
109
 
42
110
  - A **trajectory**, **zone**, **state** or **cross** value whose current bar holds no reading is now absent,
43
111
  instead of the newest older bar's value. A trajectory's slots keep a missing bar as an empty slot, in place.
44
- - A window — a trajectory's, `efficiency`'s, `maxShare`'s — counts the newest bars, present or not; a window of
45
- one bar has no trend (it read `flat`).
112
+ - A window — a trajectory's, `efficiency`'s, `maxShare`'s — counts the newest bars, present or not.
46
113
  - A candle **label** column at `offset N` reads bar t−N's label; it used to read the latest.
47
114
  - On a decided bar, a condition over a **published change** (`chg5m` … `chg24h`) or **`oiRegime`** reads
48
115
  unresolved, and a condition over a **higher-timeframe column** reads unresolved during that bar's close lag.
@@ -54,7 +121,30 @@ instead of an older bar's.** v93 is the contract on top of v92. A column reads t
54
121
  submitting or updating a grid for an agent on such a deployment is refused with `SERVICE_UNAVAILABLE` in those
55
122
  seconds; retry.
56
123
 
57
- Something read at v92 reads absent at v93, and an input v92 accepted is refused — hence the MAJOR.
124
+ Something read at v93 reads absent at v94, and an input v93 accepted is refused — hence the MAJOR.
125
+
126
+ ## Contract history — v93 (a trajectory reads at least two observations)
127
+
128
+ **Breaking at v93: a trajectory column below two observations is refused.** v93 is the contract on top of v92.
129
+ Nothing in a schema moves.
130
+
131
+ ### Rejected input — something you send is no longer accepted
132
+
133
+ - A custom column `{ transformId: "trajectory", window: 1 }`, plain or as the chained outer of
134
+ `distance × trajectory`, for any metric: `stage_strategy_draft` reports `REPORT_COLUMN_CONSTRUCTION_FAILED`
135
+ in its diagnostics, naming the minimum, `commit_strategy_draft` refuses it, and `preview_strategy_report`
136
+ refuses a report carrying one with the same error. A window of one has no build-up, and its trend compared a
137
+ reading with itself, so it read `flat` for every coin on every bar. The trajectory's served `window`
138
+ description states the minimum.
139
+
140
+ ### Changed values
141
+
142
+ - The CVD section renders its buy-pressure, buy-trade and sell-trade columns as window-4 trajectories —
143
+ `_t3`, `_t2`, `_t1`, `_now`, `_trend` each — and every `_now` keeps its value. Their `_trend` cells read a
144
+ direction where they read `flat`, and the CVD-crowd convergence classifies from that buy-pressure column, so
145
+ `captainConf` can read `true` and `conf` can read `high`.
146
+
147
+ Something accepted at v92 is refused at v93 — hence the MAJOR.
58
148
 
59
149
  ## Contract history — v92 (every section you read is the JSON the agent reads)
60
150
 
package/dist/index.d.ts CHANGED
@@ -49,7 +49,7 @@ import { type Implementation, type Prompt, type Resource } from '@modelcontextpr
49
49
  * being asked. Move it for a change to THIS package — a proxy fix, a dependency bump, a docs
50
50
  * correction. Never move it to track the server.
51
51
  */
52
- export declare const PACKAGE_VERSION = "31.2.76";
52
+ export declare const PACKAGE_VERSION = "31.2.78";
53
53
  export declare const DEFAULT_URL = "https://mcp.battlegrid.trade/mcp";
54
54
  export interface EnvConfig {
55
55
  apiKeys: string[];
package/dist/index.js CHANGED
@@ -52,7 +52,7 @@ import { ListToolsRequestSchema, CallToolRequestSchema, ListPromptsRequestSchema
52
52
  * being asked. Move it for a change to THIS package — a proxy fix, a dependency bump, a docs
53
53
  * correction. Never move it to track the server.
54
54
  */
55
- export const PACKAGE_VERSION = '31.2.76';
55
+ export const PACKAGE_VERSION = '31.2.78';
56
56
  export const DEFAULT_URL = 'https://mcp.battlegrid.trade/mcp';
57
57
  const MAX_RETRIES = 3;
58
58
  const RETRY_DELAYS_MS = [2000, 4000, 8000];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@battlegrid/mcp-server",
3
- "version": "31.2.76",
3
+ "version": "31.2.78",
4
4
  "description": "BattleGrid MCP server — play crypto prediction games from AI agents",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",