@battlegrid/mcp-server 31.2.81 → 31.2.83

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,6 +24,90 @@ 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 — v101 (an agent on a radar cannot be archived)
28
+
29
+ **Breaking at v101: `archive_intelligence_agent` refuses an agent held in any radar deployment, and its
30
+ refusal names a fourth blocker.** v101 is the contract on top of v100.
31
+
32
+ ### Narrowed acceptance — the same request, refused where it was accepted
33
+
34
+ - **`archive_intelligence_agent` refuses an agent that holds a slot in any radar deployment, paused ones
35
+ included.** The input schema is unchanged: a call that archived such an agent before now gets the
36
+ existing `CONFLICT`. A paused radar still holds its slots, so pausing does not clear it. Find the coins
37
+ with `list_radar_deployments`, then commit a radar draft without the agent or call
38
+ `delete_radar_deployment`, and archive again.
39
+
40
+ ### Widened enum
41
+
42
+ - **`details.archiveBlockers[].reason` gains `RADAR_DEPLOYED`**, after `DEPLOYED`, `OPEN_TRADES` and
43
+ `ACTIVE_SESSION`. Its `detail` reads `in N radar deployment(s)`, counting every radar deployment that
44
+ holds the agent.
45
+
46
+ ### Behaviour behind unchanged schemas
47
+
48
+ - An archived agent holds no deployment slot in either venue, so `activate_intelligence_agent` arms
49
+ nothing: the agent trades again only once you deploy it.
50
+ - A `commit_radar_deployment_draft` or `commit_deployment_policy_draft` that races an archive of one of its
51
+ agents is refused with the existing `CONFLICT`. Read the draft again; its diagnostics name the archived
52
+ agent.
53
+
54
+ A client that reads `archiveBlockers[].reason` as a closed set, or expects an archive of a radar-deployed
55
+ agent to succeed, breaks at v101 — hence the MAJOR.
56
+
57
+ ## Contract history — v100 (what one bar did: level interaction, candle patterns, gaps, runs)
58
+
59
+ **Breaking at v100: the `bandTouch` transform is retired and `levelInteraction` takes its place; a column
60
+ gains a `buffer` knob; the catalog gains twelve bar-geometry metrics.** v100 is the contract on top of
61
+ v99.
62
+
63
+ ### Rejected input — something you send is no longer accepted
64
+
65
+ - **A column naming `bandTouch` is refused** by every tool that takes a column — `stage_strategy_draft`,
66
+ `preview_strategy_report`, `derive_strategy_rule_view`, `get_strategy_column_contract` and
67
+ `get_metric_construction_hints` — as any unknown transform id is. Where you want "where the close sits
68
+ in the bands", read `BB_TOUCH × value`; where you want "what the bar's range did at a band", use
69
+ `levelInteraction` below.
70
+
71
+ ### Widened input — something new you can send
72
+
73
+ - **`levelInteraction`** classifies the newest bar of a column against a price level as
74
+ `touch_from_below`, `touch_from_above`, `reject_from_below`, `reject_from_above` or `none`. The side is
75
+ where the prior close stood against the prior bar's level. A reject — the range pierced the level and
76
+ the close came back — reports reject, never touch, so "touched or rejected" is an `in` clause over both
77
+ labels of a side. A close through the level reads `none`: the break is `distance crossesAbove 0` (or
78
+ `crossesBelow 0`) over the same level.
79
+ - It is offered on a level with a value at both bars it reads: a candle-homed level (a band, `VWAP`, a
80
+ moving average, `ST_LINE`, `PSAR`, the Ichimoku lines) or a prior-session level or pivot (`PDH`,
81
+ `PDL`, `PDO`, the floor pivots, `PRIOR_TPO_*`). A prior-session level is a single read and takes no
82
+ hold. It is not offered on a price fact (`CLOSE`, `MARK`, `HLC3`), a developing-session level
83
+ (`TPO_*`), the naked points of control, or the Donchian rails.
84
+ - The header is `{code}_lvl` — `bbUpper_lvl`.
85
+ - **`buffer`**, a column knob declared by `levelInteraction` only: whole basis points of the level,
86
+ `0`–`500`, default `0`. Only a touch reads it. A non-zero buffer names the header (`bbUpper_lvl_b25`),
87
+ so two buffers are two columns. `buffer` on any other transform is refused as an undeclared parameter.
88
+ - **Twelve metrics**, all in the `price` family:
89
+ - candle patterns — `CANDLE_DOJI` (boolean), `CANDLE_PIN` (`lower_wick` / `upper_wick` / `none`),
90
+ `CANDLE_ENGULFING` (`bullish` / `bearish` / `none`), `BAR_CONTAINMENT` (`inside` / `outside` /
91
+ `none`), each judged against the ten bars before it at TA-Lib's default settings;
92
+ - gaps — `GAP` and `GAP_RANGE_CLEAR` (`up` / `down` / `none`) and `GAP_PCT`, the signed % from the
93
+ prior close to the open;
94
+ - run lengths — `CLOSE_RUN` and `CANDLE_RUN`, consecutive bars one way, capped at ±20;
95
+ - price sources — `HL2`, `HLC3`, `OHLC4`, price facts that take every transform a close takes
96
+ (`HLC3 × aggregate(20)` is the 20-bar SMA of typical price).
97
+
98
+ The patterns, gaps and runs compose `value` only, and none of the twelve is ranked.
99
+
100
+ ### Reshaped output
101
+
102
+ - **`effectiveParameters` gains `buffer`** — the declared default `0` or your value on a
103
+ `levelInteraction` column, `null` where no transform in the chain declares it.
104
+ - A transform's authoring parameters may declare `buffer`, and the transform and section column-role
105
+ vocabularies read `levelInteraction` where they read `bandTouch`.
106
+ - The authoring contract digest's `metricKeys` gains the twelve keys.
107
+
108
+ A client that sends `bandTouch`, or reads `effectiveParameters` with a closed key set, breaks at v100 —
109
+ hence the MAJOR.
110
+
27
111
  ## Contract history — v99 (your arena entries are one owner-only history)
28
112
 
29
113
  **Breaking at v99: four tools are retired, two are added, and `get_agent_journal` loses a field.** v99 is
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.81";
52
+ export declare const PACKAGE_VERSION = "31.2.83";
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.81';
55
+ export const PACKAGE_VERSION = '31.2.83';
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.81",
3
+ "version": "31.2.83",
4
4
  "description": "BattleGrid MCP server — play crypto prediction games from AI agents",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",