@battlegrid/mcp-server 31.2.25 → 31.2.26

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,16 +24,16 @@ 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 — v59
27
+ ## Contract history — v60
28
28
 
29
29
  One release train, four numbers, and two parts to read first: **`propose_entry_decision` no longer
30
- decides in the call**, and **a closed trade's `tradeStatus` now follows its net P&L**. v55 through v58 are not written up here; the canonical record for
30
+ decides in the call**, and **a closed trade's `tradeStatus` now follows its net P&L**. v55 through v59 are not written up here; the canonical record for
31
31
  every contract move is `docs/architecture/MCP_CONTRACT_HISTORY.md` in `battlegrid-app`, and the
32
32
  served version is what the handshake announces.
33
33
 
34
34
  ### Rejected input — something you author is no longer accepted
35
35
 
36
- - **The entry axis names no bar but the strategy's own, and three of its keys are gone** (59.0.0,
36
+ - **The entry axis names no bar but the strategy's own, and three of its keys are gone** (60.0.0,
37
37
  `decide-entry-on-strategy-close`). The authoring schemas are `.strict()`, so `compile_strategy_plan`,
38
38
  `apply_strategy_plan`, `fork_strategy` and `restore_strategy` REFUSE a body carrying
39
39
  `entry.confirmTf` (the deciding bar is the strategy's own timeframe, so a required input whose only
@@ -43,7 +43,7 @@ served version is what the handshake announces.
43
43
  decided close), and the whole `exit` object (the open-position exit lane judges one closed candle
44
44
  of the position's strategy timeframe). Exactly one input hash moves, `compile_strategy_plan`'s.
45
45
 
46
- - **`entry.trigger: AT_SIGNAL` is retired for authoring** (59.0.0, `retire-at-signal-trigger`, riding
46
+ - **`entry.trigger: AT_SIGNAL` is retired for authoring** (60.0.0, `retire-at-signal-trigger`, riding
47
47
  the same number). Refused on every authoring surface and on a RESTORE, which rebuilds a stored
48
48
  revision through the same value object. The enum member stays READABLE on every strategy read and
49
49
  on a fired decision's provenance, so a pre-retirement revision is still legible — it just cannot be
@@ -51,7 +51,7 @@ served version is what the handshake announces.
51
51
 
52
52
  ### Changed meaning, unchanged shape
53
53
 
54
- - **`tradeStatus` follows NET P&L on every closed trade** (59.3.0, `label-trade-outcome-by-pnl`).
54
+ - **`tradeStatus` follows NET P&L on every closed trade** (60.3.0, `label-trade-outcome-by-pnl`).
55
55
  No schema hash moves for this and the values you receive change anyway. It used to map the close
56
56
  REASON onto a verdict — every `TAKE_PROFIT` was `WON`, every `STOP_LOSS` was `LOST`, and a
57
57
  `MARKET_CLOSE` of either sign was the neutral `CLOSED` — so a stop that filled after a break-even
@@ -60,7 +60,7 @@ served version is what the handshake announces.
60
60
  only that there is no outcome row to judge. A client that counted `WON` rows was counting
61
61
  take-profits.
62
62
 
63
- - **A proposal is QUEUED, not decided** (59.2.0, `queue-manual-entry-for-close`). This is the entry in
63
+ - **A proposal is QUEUED, not decided** (60.2.0, `queue-manual-entry-for-close`). This is the entry in
64
64
  this section to act on. `propose_entry_decision` registers a request against the agent's next
65
65
  strategy-bar close and returns immediately: no model runs, nothing is spent, and the call carries
66
66
  `type: "queued"` with `request` — `requestId`, the bar (`barStart`), when the answer is due
@@ -71,22 +71,22 @@ served version is what the handshake announces.
71
71
 
72
72
  `recommendation` and `no_trade` REMAIN in the union: the idempotency registrar replays results
73
73
  recorded before this release for their TTL, so a client that dropped those members would fail on
74
- its own retry. **A client written against 59.2 handles `queued` and `error`**; one that must also
74
+ its own retry. **A client written against 60.2 handles `queued` and `error`**; one that must also
75
75
  replay handles all four.
76
76
 
77
77
  ### Reshaped output — the same call returns a different shape
78
78
 
79
- - **The four retired entry keys leave every strategy read** (59.0.0) — `get_strategy`,
79
+ - **The four retired entry keys leave every strategy read** (60.0.0) — `get_strategy`,
80
80
  `list_strategies`, `fork_strategy` and both plan envelopes — and `confirmTimeframesByMainCandle`
81
81
  leaves `list_strategy_vocabulary`, because there is no confirm set left to publish.
82
82
 
83
- - **`entryDiscipline.closes` and `.bandAtrMultiple` go `number` → `number | null`** (59.0.0) on
83
+ - **`entryDiscipline.closes` and `.bandAtrMultiple` go `number` → `number | null`** (60.0.0) on
84
84
  `get_trade_outcome_by_decision` and `list_trade_outcomes`. Null on every decision fired after this
85
85
  release, which authors neither; a non-null pair dates the row to the arming era.
86
86
 
87
87
  ### Widened enum — new members your own copy rejects
88
88
 
89
- - **`TradeConvErrorCode` gains `REQUEST_PENDING`** (59.2.0), on the SURFACE arm of
89
+ - **`TradeConvErrorCode` gains `REQUEST_PENDING`** (60.2.0), on the SURFACE arm of
90
90
  `propose_entry_decision`'s error: one pending request per user and coin, so a second is refused. A
91
91
  coin already carrying a pending or live position is refused before anything is queued, as an
92
92
  ENGINE-origin `OPEN_POSITION_CONFLICT` — a member that was already published, reaching this surface
@@ -94,7 +94,7 @@ served version is what the handshake announces.
94
94
 
95
95
  ### Additive in the same span
96
96
 
97
- - **The exit names the leg that filled** (59.3.0, `label-trade-outcome-by-pnl`). `TradeOutcomeDTO`
97
+ - **The exit names the leg that filled** (60.3.0, `label-trade-outcome-by-pnl`). `TradeOutcomeDTO`
98
98
  and the pipeline outcome summary gain `exitRepriceSource`: the reprice that placed the protection
99
99
  leg which actually closed the position — `BREAK_EVEN`, `TRAILING`, `TIME_DECAY`,
100
100
  `MANUAL_OVERRIDE`, `UPDATED` — or null on every close no protection leg filled and on a leg that
@@ -102,12 +102,12 @@ served version is what the handshake announces.
102
102
  before calling a stopped-out trade a failure. The enum is the one `get_position_audit_history`
103
103
  already publishes. Four output hashes move; no input schema does.
104
104
 
105
- - **Two tools join the catalog for the request lifecycle** (59.2.0, `queue-manual-entry-for-close`).
105
+ - **Two tools join the catalog for the request lifecycle** (60.2.0, `queue-manual-entry-for-close`).
106
106
  `get_entry_request` (read scope) reads a request that is still pending and is `NOT_FOUND` once it
107
107
  has been answered, cancelled or expired — the answer is in the conversation, not there.
108
108
  `cancel_entry_request` (`mcp:wager`) withdraws one before its bar is decided. `toolCount` 115 → 117.
109
109
 
110
- - **Three radar reads publish the close decision** (59.1.0, `add-radar-close-decision-state`).
110
+ - **Three radar reads publish the close decision** (60.1.0, `add-radar-close-decision-state`).
111
111
  `get_radar_deployment`, `list_radar_deployments` and `preview_radar_resolution` carry one further
112
112
  key on `resolvesNow`: `closeDecision`, non-null whenever an agent is on duty for the pair. It
113
113
  carries the deciding `timeframe`, the `nextCloseAt` instant, a `state` of `WAITING` or `DEFERRED`
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.25";
52
+ export declare const PACKAGE_VERSION = "31.2.26";
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.25';
55
+ export const PACKAGE_VERSION = '31.2.26';
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.25",
3
+ "version": "31.2.26",
4
4
  "description": "BattleGrid MCP server — play crypto prediction games from AI agents",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "generator": "battlegrid-app/server/scripts/export-mcp-skills.mjs",
3
- "contractVersion": "59.3.0",
3
+ "contractVersion": "60.3.0",
4
4
  "files": {
5
5
  "battlegrid-agent-management/SKILL.md": "b6ea75b3d838c1dbaaf3984d7e99a11c81686de2c1a1910c35699ee7e70dafa5",
6
6
  "battlegrid-arena-play/SKILL.md": "03fa153bf82be18bf5ed01e3ba12e2cd9f99a81b08d903a77b52169e7519a182",