Skip to content

Commit 1dda070

Browse files
committed
release: 1.7.7
1 parent fecfa16 commit 1dda070

4 files changed

Lines changed: 39 additions & 4 deletions

File tree

README.md

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -838,7 +838,13 @@ AGENT_PRIVATE_KEY=0x... evalanche-mcp --http --port 3402
838838
- market search, market details, order book access, balance and position discovery
839839
- expanded Evalanche into prediction market workflows alongside DeFi + perps
840840

841-
### v1.7.6 (current)
841+
### v1.7.7 (current)
842+
- **Polymarket sell hardening**
843+
- `pm_sell` now uses a slippage-protected immediate sell path instead of an unbounded market sell
844+
- Polymarket CLOB auth fallback now uses fresh nonces per attempt, which makes API-key derive/create recovery more reliable
845+
- `pm_limit_sell` now honors `postOnly: false` instead of always forcing a resting order
846+
847+
### v1.7.6
842848
- **Polymarket execution and docs pass**
843849
- Polymarket now prefers live CLOB market discovery with Gamma fallback for broader search coverage
844850
- Polymarket supports direct SDK sell orders plus MCP `pm_sell` market sells toward a target USDC proceeds amount

RELEASE_NOTES_1.7.7.md

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# Evalanche 1.7.7
2+
3+
## Summary
4+
5+
This release hardens Polymarket sell execution so agents do not silently route into unsafe dust-floor fills.
6+
7+
## Highlights
8+
9+
- `pm_sell` now performs a slippage check against visible bid-side liquidity before execution
10+
- immediate sells are submitted as protected `FAK` limit orders instead of unbounded market sells
11+
- Polymarket CLOB auth fallback now uses fresh nonces per derive/create attempt
12+
- `pm_limit_sell` now respects `postOnly: false` instead of always forcing a resting order
13+
- regression tests were added for auth nonce handling, protected sells, and `pm_limit_sell` execution semantics
14+
15+
## Validation
16+
17+
- `npm run test -- test/polymarket/client-extended.test.ts`
18+
- `npm run test -- test/polymarket/client.test.ts`
19+
- `npm run typecheck`
20+
- `npm run build`
21+
22+
## Notes for Maintainers
23+
24+
- `pm_sell` now fails fast when visible liquidity would breach the configured slippage bound
25+
- `pm_limit_sell` remains the explicit tool for posting a resting sell order on the book

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "evalanche",
3-
"version": "1.7.6",
3+
"version": "1.7.7",
44
"description": "Multi-EVM agent wallet SDK with onchain identity (ERC-8004), payment rails (x402), cross-chain bridging (Li.Fi + Gas.zip), and perpetual futures (dYdX v4)",
55
"main": "./dist/index.cjs",
66
"module": "./dist/index.js",

test/polymarket/client-extended.test.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -120,21 +120,25 @@ describe('PolymarketClient.getTokenPrice', () => {
120120
describe('PolymarketClient.searchMarkets', () => {
121121
it('limits results to the requested count', async () => {
122122
const client = makeClient();
123-
client.getMarkets = async () => [
123+
const mockMarkets = [
124124
{ conditionId: '1', question: 'Alpha market', tokens: [] },
125125
{ conditionId: '2', question: 'Alpha second market', tokens: [] },
126126
{ conditionId: '3', question: 'Alpha third market', tokens: [] },
127127
];
128+
client.getLiveMarkets = async () => mockMarkets;
129+
client.getMarkets = async () => mockMarkets;
128130

129131
const results = await client.searchMarkets('alpha', 2);
130132
expect(results).toHaveLength(2);
131133
});
132134

133135
it('is case-insensitive', async () => {
134136
const client = makeClient();
135-
client.getMarkets = async () => [
137+
const mockMarkets = [
136138
{ conditionId: '1', question: 'IRAN sanctions threshold', tokens: [] },
137139
];
140+
client.getLiveMarkets = async () => mockMarkets;
141+
client.getMarkets = async () => mockMarkets;
138142

139143
await expect(client.searchMarkets('iran', 10)).resolves.toHaveLength(1);
140144
await expect(client.searchMarkets('IRAN', 10)).resolves.toHaveLength(1);

0 commit comments

Comments
 (0)