@elizaos/plugin-polymarket-app 2.0.3-beta.5 → 2.0.3-beta.7

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.
Files changed (95) hide show
  1. package/dist/PolymarketAppView.d.ts +3 -0
  2. package/dist/PolymarketAppView.d.ts.map +1 -0
  3. package/dist/PolymarketAppView.helpers.d.ts +10 -0
  4. package/dist/PolymarketAppView.helpers.d.ts.map +1 -0
  5. package/dist/PolymarketAppView.helpers.js +30 -0
  6. package/dist/PolymarketAppView.helpers.js.map +1 -0
  7. package/dist/PolymarketAppView.interact.d.ts +3 -0
  8. package/dist/PolymarketAppView.interact.d.ts.map +1 -0
  9. package/dist/PolymarketAppView.interact.js +70 -0
  10. package/dist/PolymarketAppView.interact.js.map +1 -0
  11. package/dist/PolymarketAppView.js +704 -0
  12. package/dist/PolymarketAppView.js.map +1 -0
  13. package/dist/PolymarketPositionsPanel.d.ts +13 -0
  14. package/dist/PolymarketPositionsPanel.d.ts.map +1 -0
  15. package/dist/PolymarketPositionsPanel.js +349 -0
  16. package/dist/PolymarketPositionsPanel.js.map +1 -0
  17. package/dist/PolymarketView.d.ts +13 -0
  18. package/dist/PolymarketView.d.ts.map +1 -0
  19. package/dist/PolymarketView.js +58 -0
  20. package/dist/PolymarketView.js.map +1 -0
  21. package/dist/__fixtures__/contract.d.ts +9 -0
  22. package/dist/__fixtures__/contract.d.ts.map +1 -0
  23. package/dist/__fixtures__/contract.js +263 -0
  24. package/dist/__fixtures__/contract.js.map +1 -0
  25. package/dist/actions.d.ts +39 -0
  26. package/dist/actions.d.ts.map +1 -0
  27. package/dist/actions.js +661 -0
  28. package/dist/actions.js.map +1 -0
  29. package/dist/client.d.ts +25 -0
  30. package/dist/client.d.ts.map +1 -0
  31. package/dist/client.js +42 -0
  32. package/dist/client.js.map +1 -0
  33. package/dist/components/PolymarketSpatialView.d.ts +34 -0
  34. package/dist/components/PolymarketSpatialView.d.ts.map +1 -0
  35. package/dist/components/PolymarketSpatialView.js +248 -0
  36. package/dist/components/PolymarketSpatialView.js.map +1 -0
  37. package/dist/index.d.ts +14 -0
  38. package/dist/index.d.ts.map +1 -0
  39. package/dist/index.js +24 -0
  40. package/dist/index.js.map +1 -0
  41. package/dist/orderbook.d.ts +15 -0
  42. package/dist/orderbook.d.ts.map +1 -0
  43. package/dist/orderbook.js +45 -0
  44. package/dist/orderbook.js.map +1 -0
  45. package/dist/plugin.d.ts +3 -0
  46. package/dist/plugin.d.ts.map +1 -0
  47. package/dist/plugin.js +108 -0
  48. package/dist/plugin.js.map +1 -0
  49. package/dist/polymarket-app.d.ts +4 -0
  50. package/dist/polymarket-app.d.ts.map +1 -0
  51. package/dist/polymarket-app.js +18 -0
  52. package/dist/polymarket-app.js.map +1 -0
  53. package/dist/polymarket-contracts.d.ts +162 -0
  54. package/dist/polymarket-contracts.d.ts.map +1 -0
  55. package/dist/polymarket-contracts.js +16 -0
  56. package/dist/polymarket-contracts.js.map +1 -0
  57. package/dist/polymarket-view-bundle.d.ts +3 -0
  58. package/dist/polymarket-view-bundle.d.ts.map +1 -0
  59. package/dist/polymarket-view-bundle.js +7 -0
  60. package/dist/polymarket-view-bundle.js.map +1 -0
  61. package/dist/provider-text.d.ts +5 -0
  62. package/dist/provider-text.d.ts.map +1 -0
  63. package/dist/provider-text.js +44 -0
  64. package/dist/provider-text.js.map +1 -0
  65. package/dist/provider.d.ts +3 -0
  66. package/dist/provider.d.ts.map +1 -0
  67. package/dist/provider.js +21 -0
  68. package/dist/provider.js.map +1 -0
  69. package/dist/register-routes.d.ts +2 -0
  70. package/dist/register-routes.d.ts.map +1 -0
  71. package/dist/register-routes.js +6 -0
  72. package/dist/register-routes.js.map +1 -0
  73. package/dist/register-terminal-view.d.ts +15 -0
  74. package/dist/register-terminal-view.d.ts.map +1 -0
  75. package/dist/register-terminal-view.js +25 -0
  76. package/dist/register-terminal-view.js.map +1 -0
  77. package/dist/register.d.ts +2 -0
  78. package/dist/register.d.ts.map +1 -0
  79. package/dist/register.js +17 -0
  80. package/dist/register.js.map +1 -0
  81. package/dist/routes.d.ts +7 -0
  82. package/dist/routes.d.ts.map +1 -0
  83. package/dist/routes.js +455 -0
  84. package/dist/routes.js.map +1 -0
  85. package/dist/ui.d.ts +6 -0
  86. package/dist/ui.d.ts.map +1 -0
  87. package/dist/ui.js +11 -0
  88. package/dist/ui.js.map +1 -0
  89. package/dist/usePolymarketState.d.ts +13 -0
  90. package/dist/usePolymarketState.d.ts.map +1 -0
  91. package/dist/usePolymarketState.js +59 -0
  92. package/dist/usePolymarketState.js.map +1 -0
  93. package/dist/views/bundle.js +535 -0
  94. package/dist/views/bundle.js.map +1 -0
  95. package/package.json +6 -6
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/usePolymarketState.ts"],"sourcesContent":["import { client } from \"@elizaos/app-core\";\nimport { useCallback, useEffect, useState } from \"react\";\nimport \"./client.js\";\nimport type { PolymarketClient } from \"./client.js\";\nimport type {\n PolymarketMarket,\n PolymarketPositionsResponse,\n PolymarketStatusResponse,\n} from \"./polymarket-contracts.js\";\n\nexport function usePolymarketState() {\n const [status, setStatus] = useState<PolymarketStatusResponse | null>(null);\n const [markets, setMarkets] = useState<readonly PolymarketMarket[]>([]);\n const [selectedMarket, setSelectedMarket] = useState<PolymarketMarket | null>(\n null,\n );\n const [positions, setPositions] =\n useState<PolymarketPositionsResponse | null>(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n\n const refresh = useCallback(async () => {\n setLoading(true);\n setError(null);\n const polymarketClient = client as PolymarketClient;\n try {\n const [statusResponse, marketsResponse] = await Promise.all([\n polymarketClient.polymarketStatus(),\n polymarketClient.polymarketMarkets({ limit: 25 }),\n ]);\n setStatus(statusResponse);\n setMarkets(marketsResponse.markets);\n setSelectedMarket(marketsResponse.markets[0] ?? null);\n\n // Read the agent's own positions only when an account address is\n // resolvable; the route falls back to the configured wallet so we call\n // it without an explicit `user`. A position-read failure must not blank\n // the whole view, so it's isolated from the markets fetch.\n if (statusResponse.account.ready) {\n try {\n setPositions(await polymarketClient.polymarketPositions());\n } catch {\n setPositions(null);\n }\n } else {\n setPositions(null);\n }\n } catch (err) {\n setError(\n err instanceof Error ? err.message : \"Polymarket refresh failed\",\n );\n } finally {\n setLoading(false);\n }\n }, []);\n\n useEffect(() => {\n void refresh();\n }, [refresh]);\n\n return {\n status,\n markets,\n selectedMarket,\n setSelectedMarket,\n positions,\n loading,\n error,\n refresh,\n };\n}\n"],"mappings":"AAAA,SAAS,cAAc;AACvB,SAAS,aAAa,WAAW,gBAAgB;AACjD,OAAO;AAQA,SAAS,qBAAqB;AACnC,QAAM,CAAC,QAAQ,SAAS,IAAI,SAA0C,IAAI;AAC1E,QAAM,CAAC,SAAS,UAAU,IAAI,SAAsC,CAAC,CAAC;AACtE,QAAM,CAAC,gBAAgB,iBAAiB,IAAI;AAAA,IAC1C;AAAA,EACF;AACA,QAAM,CAAC,WAAW,YAAY,IAC5B,SAA6C,IAAI;AACnD,QAAM,CAAC,SAAS,UAAU,IAAI,SAAS,IAAI;AAC3C,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAwB,IAAI;AAEtD,QAAM,UAAU,YAAY,YAAY;AACtC,eAAW,IAAI;AACf,aAAS,IAAI;AACb,UAAM,mBAAmB;AACzB,QAAI;AACF,YAAM,CAAC,gBAAgB,eAAe,IAAI,MAAM,QAAQ,IAAI;AAAA,QAC1D,iBAAiB,iBAAiB;AAAA,QAClC,iBAAiB,kBAAkB,EAAE,OAAO,GAAG,CAAC;AAAA,MAClD,CAAC;AACD,gBAAU,cAAc;AACxB,iBAAW,gBAAgB,OAAO;AAClC,wBAAkB,gBAAgB,QAAQ,CAAC,KAAK,IAAI;AAMpD,UAAI,eAAe,QAAQ,OAAO;AAChC,YAAI;AACF,uBAAa,MAAM,iBAAiB,oBAAoB,CAAC;AAAA,QAC3D,QAAQ;AACN,uBAAa,IAAI;AAAA,QACnB;AAAA,MACF,OAAO;AACL,qBAAa,IAAI;AAAA,MACnB;AAAA,IACF,SAAS,KAAK;AACZ;AAAA,QACE,eAAe,QAAQ,IAAI,UAAU;AAAA,MACvC;AAAA,IACF,UAAE;AACA,iBAAW,KAAK;AAAA,IAClB;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,YAAU,MAAM;AACd,SAAK,QAAQ;AAAA,EACf,GAAG,CAAC,OAAO,CAAC;AAEZ,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;","names":[]}
@@ -0,0 +1,535 @@
1
+ import { client as e } from "@elizaos/app-core";
2
+ import { ElizaClient as t } from "@elizaos/ui";
3
+ import { Button as n, Card as r, Divider as i, HStack as a, List as o, SpatialSurface as s, Text as c, VStack as l } from "@elizaos/ui/spatial";
4
+ import { useCallback as u, useEffect as d, useState as f } from "react";
5
+ import { Fragment as p, jsx as m, jsxs as h } from "react/jsx-runtime";
6
+ //#region src/client.ts
7
+ var g = t.prototype;
8
+ g.polymarketStatus = async function() {
9
+ return this.fetch("/api/polymarket/status");
10
+ }, g.polymarketMarkets = async function(e = {}) {
11
+ let t = new URLSearchParams();
12
+ _(t, "limit", e.limit), _(t, "offset", e.offset), _(t, "active", e.active), _(t, "closed", e.closed), _(t, "order", e.order), _(t, "ascending", e.ascending), _(t, "tag_id", e.tagId);
13
+ let n = t.toString();
14
+ return this.fetch(`/api/polymarket/markets${n ? `?${n}` : ""}`);
15
+ }, g.polymarketMarketById = async function(e) {
16
+ let t = new URLSearchParams({ id: e });
17
+ return this.fetch(`/api/polymarket/market?${t.toString()}`);
18
+ }, g.polymarketMarketBySlug = async function(e) {
19
+ let t = new URLSearchParams({ slug: e });
20
+ return this.fetch(`/api/polymarket/market?${t.toString()}`);
21
+ }, g.polymarketOrderbook = async function(e) {
22
+ let t = new URLSearchParams({ token_id: e });
23
+ return this.fetch(`/api/polymarket/orderbook?${t.toString()}`);
24
+ }, g.polymarketOrders = async function() {
25
+ return this.fetch("/api/polymarket/orders");
26
+ }, g.polymarketPositions = async function(e) {
27
+ let t = e?.trim(), n = t ? `?${new URLSearchParams({ user: t }).toString()}` : "";
28
+ return this.fetch(`/api/polymarket/positions${n}`);
29
+ };
30
+ function _(e, t, n) {
31
+ n !== void 0 && e.set(t, String(n));
32
+ }
33
+ //#endregion
34
+ //#region src/PolymarketAppView.helpers.ts
35
+ async function v(t) {
36
+ let n = e, [r, i, a] = await Promise.all([
37
+ n.polymarketStatus(),
38
+ n.polymarketMarkets({ limit: 25 }),
39
+ n.polymarketOrders()
40
+ ]);
41
+ return {
42
+ status: r,
43
+ markets: i,
44
+ orders: a,
45
+ positions: t ? await n.polymarketPositions(t) : null
46
+ };
47
+ }
48
+ async function y(e, t) {
49
+ let n = await fetch(e, {
50
+ method: "POST",
51
+ headers: { "Content-Type": "application/json" },
52
+ body: JSON.stringify(t)
53
+ }), r = await n.json().catch(() => ({}));
54
+ if (!n.ok) {
55
+ let e = typeof r == "object" && r && "error" in r && typeof r.error == "string" ? r.error : `Polymarket request failed with ${n.status}`;
56
+ throw Error(e);
57
+ }
58
+ return r;
59
+ }
60
+ //#endregion
61
+ //#region src/PolymarketAppView.interact.ts
62
+ async function b(t, n) {
63
+ if (t === "terminal-polymarket-state") {
64
+ let e = await v((typeof n?.user == "string" ? n.user.trim() : "") || void 0);
65
+ return {
66
+ viewType: "tui",
67
+ status: e.status,
68
+ markets: e.markets.markets.slice(0, typeof n?.limit == "number" ? n.limit : 25),
69
+ orders: e.orders,
70
+ positions: e.positions
71
+ };
72
+ }
73
+ if (t === "terminal-polymarket-market") {
74
+ let t = typeof n?.id == "string" ? n.id.trim() : "", r = typeof n?.slug == "string" ? n.slug.trim() : "", i = e;
75
+ if (t) return {
76
+ viewType: "tui",
77
+ ...await i.polymarketMarketById(t)
78
+ };
79
+ if (r) return {
80
+ viewType: "tui",
81
+ ...await i.polymarketMarketBySlug(r)
82
+ };
83
+ throw Error("id or slug is required");
84
+ }
85
+ if (t === "terminal-polymarket-orderbook") {
86
+ let t = typeof n?.tokenId == "string" ? n.tokenId.trim() : "";
87
+ if (!t) throw Error("tokenId is required");
88
+ return {
89
+ viewType: "tui",
90
+ orderbook: await e.polymarketOrderbook(t)
91
+ };
92
+ }
93
+ if (t === "terminal-polymarket-positions") {
94
+ let t = typeof n?.user == "string" ? n.user.trim() : "";
95
+ if (!t) throw Error("user is required");
96
+ return {
97
+ viewType: "tui",
98
+ positions: await e.polymarketPositions(t)
99
+ };
100
+ }
101
+ if (t === "terminal-polymarket-trading-check") return {
102
+ viewType: "tui",
103
+ result: await y("/api/polymarket/orders", {
104
+ marketId: typeof n?.marketId == "string" ? n.marketId : "",
105
+ side: typeof n?.side == "string" ? n.side : "buy",
106
+ outcome: typeof n?.outcome == "string" ? n.outcome : "",
107
+ size: typeof n?.size == "number" || typeof n?.size == "string" ? n.size : 0
108
+ })
109
+ };
110
+ throw Error(`Unsupported capability "${t}"`);
111
+ }
112
+ //#endregion
113
+ //#region src/components/PolymarketSpatialView.tsx
114
+ var x = 24, S = 3;
115
+ function C(e) {
116
+ if (e == null) return null;
117
+ let t = Number(e);
118
+ return Number.isFinite(t) ? Math.round(t * 100) : null;
119
+ }
120
+ function w(e) {
121
+ if (e == null) return null;
122
+ let t = Number(e);
123
+ return Number.isFinite(t) ? t >= 1e6 ? `$${(t / 1e6).toFixed(1)}M` : t >= 1e3 ? `$${(t / 1e3).toFixed(1)}K` : `$${t.toFixed(0)}` : e;
124
+ }
125
+ function T(e) {
126
+ return e.question ?? e.slug ?? e.id;
127
+ }
128
+ function E(e) {
129
+ if (e == null) return null;
130
+ let t = Number(e);
131
+ return Number.isFinite(t) ? t : null;
132
+ }
133
+ function D(e, t = !1) {
134
+ if (e == null) return "-";
135
+ let n = t && e > 0 ? "+" : e < 0 ? "-" : "", r = Math.abs(e);
136
+ return r >= 1e6 ? `${n}$${(r / 1e6).toFixed(1)}M` : r >= 1e3 ? `${n}$${(r / 1e3).toFixed(1)}K` : `${n}$${r.toFixed(2)}`;
137
+ }
138
+ function O(e) {
139
+ return e == null || e === 0 ? "muted" : e > 0 ? "success" : "danger";
140
+ }
141
+ function k(e) {
142
+ return e ? "success" : "muted";
143
+ }
144
+ function A({ status: e }) {
145
+ let t = e?.publicReads.ready ?? !1, n = e?.trading.ready ?? !1;
146
+ return /* @__PURE__ */ h(a, {
147
+ gap: 2,
148
+ align: "center",
149
+ wrap: !0,
150
+ children: [/* @__PURE__ */ m(c, {
151
+ style: "caption",
152
+ tone: k(t),
153
+ children: `reads ${t ? "ready" : "off"}`
154
+ }), /* @__PURE__ */ m(c, {
155
+ style: "caption",
156
+ tone: k(n),
157
+ children: `trading ${n ? "ready" : "off"}`
158
+ })]
159
+ });
160
+ }
161
+ function j({ name: e, percent: t, lead: n }) {
162
+ return /* @__PURE__ */ h(a, {
163
+ gap: 1,
164
+ align: "center",
165
+ children: [/* @__PURE__ */ m(c, {
166
+ tone: n ? "primary" : "default",
167
+ grow: 1,
168
+ wrap: !1,
169
+ children: e
170
+ }), /* @__PURE__ */ m(c, {
171
+ style: "caption",
172
+ tone: n ? "primary" : "muted",
173
+ align: "end",
174
+ width: 6,
175
+ children: t == null ? "n/a" : `${t}%`
176
+ })]
177
+ });
178
+ }
179
+ function M(e) {
180
+ let t = C(e.price);
181
+ return `${e.name} ${t == null ? "n/a" : `${t}%`}`;
182
+ }
183
+ function N({ market: e, index: t, active: r, onAction: i }) {
184
+ let o = T(e), s = w(e.volume24hr ?? e.volume), u = w(e.liquidity), d = e.outcomes.slice(0, S);
185
+ return /* @__PURE__ */ h(l, {
186
+ gap: 0,
187
+ grow: 1,
188
+ agent: `market-${e.id}`,
189
+ tone: r ? "primary" : "default",
190
+ children: [
191
+ /* @__PURE__ */ h(a, {
192
+ gap: 1,
193
+ align: "center",
194
+ children: [
195
+ /* @__PURE__ */ m(c, {
196
+ tone: r ? "primary" : "muted",
197
+ width: 3,
198
+ children: String(t + 1).padStart(2, "0")
199
+ }),
200
+ /* @__PURE__ */ m(c, {
201
+ bold: !0,
202
+ grow: 1,
203
+ wrap: !1,
204
+ children: o
205
+ }),
206
+ /* @__PURE__ */ m(c, {
207
+ style: "caption",
208
+ tone: e.active ? "success" : "muted",
209
+ children: e.active ? "active" : "closed"
210
+ }),
211
+ /* @__PURE__ */ m(n, {
212
+ variant: "ghost",
213
+ tone: "primary",
214
+ agent: `market:${e.id}`,
215
+ onPress: () => i?.(`market:${e.id}`),
216
+ children: "Open"
217
+ })
218
+ ]
219
+ }),
220
+ d.length > 0 ? /* @__PURE__ */ m(a, {
221
+ gap: 2,
222
+ wrap: !0,
223
+ children: d.map((e) => /* @__PURE__ */ m(c, {
224
+ style: "caption",
225
+ tone: "muted",
226
+ wrap: !1,
227
+ children: M(e)
228
+ }, e.name))
229
+ }) : null,
230
+ /* @__PURE__ */ h(a, {
231
+ gap: 2,
232
+ wrap: !0,
233
+ children: [
234
+ s ? /* @__PURE__ */ m(c, {
235
+ style: "caption",
236
+ tone: "muted",
237
+ children: `vol ${s}`
238
+ }) : null,
239
+ u ? /* @__PURE__ */ m(c, {
240
+ style: "caption",
241
+ tone: "muted",
242
+ children: `liq ${u}`
243
+ }) : null,
244
+ e.category ? /* @__PURE__ */ m(c, {
245
+ style: "caption",
246
+ tone: "muted",
247
+ wrap: !1,
248
+ children: e.category
249
+ }) : null
250
+ ]
251
+ })
252
+ ]
253
+ });
254
+ }
255
+ function P({ market: e, onAction: t }) {
256
+ let r = C(e.lastTradePrice);
257
+ return /* @__PURE__ */ h(l, {
258
+ gap: 1,
259
+ children: [
260
+ /* @__PURE__ */ m(n, {
261
+ variant: "ghost",
262
+ tone: "default",
263
+ agent: "detail-back",
264
+ onPress: () => t?.("detail-back"),
265
+ children: "< Markets"
266
+ }),
267
+ /* @__PURE__ */ m(c, {
268
+ style: "subheading",
269
+ wrap: !0,
270
+ children: e.question ?? e.slug ?? e.id
271
+ }),
272
+ e.category ? /* @__PURE__ */ m(c, {
273
+ style: "caption",
274
+ tone: "muted",
275
+ children: e.category
276
+ }) : null,
277
+ /* @__PURE__ */ h(a, {
278
+ gap: 2,
279
+ wrap: !0,
280
+ children: [
281
+ /* @__PURE__ */ m(c, {
282
+ style: "caption",
283
+ tone: "muted",
284
+ children: `Volume ${w(e.volume) ?? "-"}`
285
+ }),
286
+ /* @__PURE__ */ m(c, {
287
+ style: "caption",
288
+ tone: "muted",
289
+ children: `Liquidity ${w(e.liquidity) ?? "-"}`
290
+ }),
291
+ /* @__PURE__ */ m(c, {
292
+ style: "caption",
293
+ tone: "muted",
294
+ children: `Last ${r == null ? "-" : `${r}%`}`
295
+ })
296
+ ]
297
+ }),
298
+ /* @__PURE__ */ m(i, { label: "outcomes" }),
299
+ /* @__PURE__ */ m(o, {
300
+ gap: 0,
301
+ children: e.outcomes.map((e, t) => /* @__PURE__ */ m(j, {
302
+ name: e.name,
303
+ percent: C(e.price),
304
+ lead: t === 0
305
+ }, e.name))
306
+ }),
307
+ /* @__PURE__ */ m(i, { label: "orderbook tokens" }),
308
+ e.clobTokenIds.length > 0 ? /* @__PURE__ */ m(o, {
309
+ gap: 0,
310
+ children: e.clobTokenIds.map((e) => /* @__PURE__ */ m(c, {
311
+ style: "caption",
312
+ tone: "muted",
313
+ wrap: !1,
314
+ children: e
315
+ }, e))
316
+ }) : /* @__PURE__ */ m(c, {
317
+ style: "caption",
318
+ tone: "muted",
319
+ children: "no CLOB token ids"
320
+ })
321
+ ]
322
+ });
323
+ }
324
+ function F({ position: e }) {
325
+ let t = e.question ?? e.slug ?? e.marketId ?? e.outcome, n = E(e.currentValue), r = E(e.cashPnl);
326
+ return /* @__PURE__ */ h(a, {
327
+ gap: 1,
328
+ align: "center",
329
+ children: [
330
+ /* @__PURE__ */ m(c, {
331
+ grow: 1,
332
+ wrap: !1,
333
+ children: t ?? "-"
334
+ }),
335
+ e.outcome ? /* @__PURE__ */ m(c, {
336
+ style: "caption",
337
+ tone: "muted",
338
+ wrap: !1,
339
+ children: e.outcome
340
+ }) : null,
341
+ /* @__PURE__ */ m(c, {
342
+ style: "caption",
343
+ tone: "muted",
344
+ align: "end",
345
+ width: 8,
346
+ children: D(n)
347
+ }),
348
+ /* @__PURE__ */ m(c, {
349
+ style: "caption",
350
+ tone: O(r),
351
+ align: "end",
352
+ width: 8,
353
+ children: D(r, !0)
354
+ })
355
+ ]
356
+ });
357
+ }
358
+ function I({ positions: e, summary: t }) {
359
+ let n = e.filter((e) => {
360
+ let t = E(e.size);
361
+ return t != null && Math.abs(t) > 1e-9;
362
+ }), r = E(t?.totalValue ?? null), s = E(t?.totalCashPnl ?? null);
363
+ return /* @__PURE__ */ h(p, { children: [
364
+ /* @__PURE__ */ m(i, { label: "positions" }),
365
+ /* @__PURE__ */ h(a, {
366
+ gap: 2,
367
+ wrap: !0,
368
+ children: [
369
+ /* @__PURE__ */ m(c, {
370
+ style: "caption",
371
+ tone: "muted",
372
+ children: `value ${D(r)}`
373
+ }),
374
+ /* @__PURE__ */ m(c, {
375
+ style: "caption",
376
+ tone: O(s),
377
+ children: `pnl ${D(s, !0)}`
378
+ }),
379
+ /* @__PURE__ */ m(c, {
380
+ style: "caption",
381
+ tone: "muted",
382
+ children: `open ${n.length}`
383
+ })
384
+ ]
385
+ }),
386
+ n.length === 0 ? /* @__PURE__ */ m(c, {
387
+ style: "caption",
388
+ tone: "muted",
389
+ align: "center",
390
+ children: "no open positions"
391
+ }) : /* @__PURE__ */ m(o, {
392
+ gap: 0,
393
+ children: n.map((e) => /* @__PURE__ */ m(F, { position: e }, `${e.conditionId ?? e.marketId ?? e.slug}-${e.outcome}`))
394
+ })
395
+ ] });
396
+ }
397
+ function L({ snapshot: e, onAction: t }) {
398
+ let { status: s, markets: l, selectedMarket: u, loading: d, error: f } = e, g = e.positions ?? [], _ = s?.account?.ready ?? !1, v = u?.id ?? null;
399
+ return /* @__PURE__ */ h(r, {
400
+ gap: 1,
401
+ padding: 1,
402
+ children: [
403
+ /* @__PURE__ */ h(a, {
404
+ gap: 1,
405
+ align: "center",
406
+ wrap: !0,
407
+ children: [
408
+ /* @__PURE__ */ m(A, { status: s }),
409
+ /* @__PURE__ */ m(c, {
410
+ style: "caption",
411
+ tone: "muted",
412
+ grow: 1,
413
+ children: d ? "loading" : `${l.length} markets`
414
+ }),
415
+ /* @__PURE__ */ m(n, {
416
+ variant: "outline",
417
+ tone: "default",
418
+ agent: "refresh",
419
+ disabled: d,
420
+ onPress: () => t?.("refresh"),
421
+ children: "Refresh"
422
+ })
423
+ ]
424
+ }),
425
+ f ? /* @__PURE__ */ m(c, {
426
+ tone: "danger",
427
+ style: "caption",
428
+ children: f
429
+ }) : null,
430
+ u ? /* @__PURE__ */ m(P, {
431
+ market: u,
432
+ onAction: t
433
+ }) : /* @__PURE__ */ h(p, { children: [
434
+ _ ? /* @__PURE__ */ m(I, {
435
+ positions: g,
436
+ summary: e.positionsSummary ?? null
437
+ }) : null,
438
+ /* @__PURE__ */ m(i, { label: "markets" }),
439
+ l.length === 0 ? /* @__PURE__ */ m(c, {
440
+ tone: "muted",
441
+ align: "center",
442
+ style: "caption",
443
+ children: d ? "loading markets" : "no markets loaded"
444
+ }) : /* @__PURE__ */ m(o, {
445
+ gap: 1,
446
+ children: l.slice(0, x).map((e, n) => /* @__PURE__ */ m(N, {
447
+ market: e,
448
+ index: n,
449
+ active: v === e.id,
450
+ onAction: t
451
+ }, e.id))
452
+ })
453
+ ] })
454
+ ]
455
+ });
456
+ }
457
+ //#endregion
458
+ //#region src/usePolymarketState.ts
459
+ function R() {
460
+ let [t, n] = f(null), [r, i] = f([]), [a, o] = f(null), [s, c] = f(null), [l, p] = f(!0), [m, h] = f(null), g = u(async () => {
461
+ p(!0), h(null);
462
+ let t = e;
463
+ try {
464
+ let [e, r] = await Promise.all([t.polymarketStatus(), t.polymarketMarkets({ limit: 25 })]);
465
+ if (n(e), i(r.markets), o(r.markets[0] ?? null), e.account.ready) try {
466
+ c(await t.polymarketPositions());
467
+ } catch {
468
+ c(null);
469
+ }
470
+ else c(null);
471
+ } catch (e) {
472
+ h(e instanceof Error ? e.message : "Polymarket refresh failed");
473
+ } finally {
474
+ p(!1);
475
+ }
476
+ }, []);
477
+ return d(() => {
478
+ g();
479
+ }, [g]), {
480
+ status: t,
481
+ markets: r,
482
+ selectedMarket: a,
483
+ setSelectedMarket: o,
484
+ positions: s,
485
+ loading: l,
486
+ error: m,
487
+ refresh: g
488
+ };
489
+ }
490
+ //#endregion
491
+ //#region src/PolymarketView.tsx
492
+ function z() {
493
+ let { status: e, markets: t, selectedMarket: n, setSelectedMarket: r, positions: i, loading: a, error: o, refresh: c } = R();
494
+ d(() => {
495
+ let e = setInterval(() => {
496
+ c();
497
+ }, 2e4);
498
+ return () => clearInterval(e);
499
+ }, [c]);
500
+ let l = u((e) => {
501
+ if (e.startsWith("market:")) {
502
+ let n = e.slice(7);
503
+ r(t.find((e) => e.id === n) ?? null);
504
+ return;
505
+ }
506
+ switch (e) {
507
+ case "detail-back":
508
+ r(null);
509
+ return;
510
+ case "refresh":
511
+ c();
512
+ return;
513
+ }
514
+ }, [
515
+ t,
516
+ c,
517
+ r
518
+ ]);
519
+ return /* @__PURE__ */ m(s, { children: /* @__PURE__ */ m(L, {
520
+ snapshot: {
521
+ status: e,
522
+ markets: t,
523
+ selectedMarket: n,
524
+ positions: i?.positions ?? [],
525
+ positionsSummary: i?.summary ?? null,
526
+ loading: a,
527
+ error: o
528
+ },
529
+ onAction: l
530
+ }) });
531
+ }
532
+ //#endregion
533
+ export { z as PolymarketView, b as interact };
534
+
535
+ //# sourceMappingURL=bundle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bundle.js","names":[],"sources":["../../src/client.ts","../../src/PolymarketAppView.helpers.ts","../../src/PolymarketAppView.interact.ts","../../src/components/PolymarketSpatialView.tsx","../../src/usePolymarketState.ts","../../src/PolymarketView.tsx"],"sourcesContent":["import { ElizaClient } from \"@elizaos/ui\";\nimport type {\n PolymarketDisabledResponse,\n PolymarketMarketResponse,\n PolymarketMarketsResponse,\n PolymarketOrderbookResponse,\n PolymarketPositionsResponse,\n PolymarketStatusResponse,\n} from \"./polymarket-contracts\";\n\nexport interface PolymarketMarketsRequest {\n limit?: number;\n offset?: number;\n active?: boolean;\n closed?: boolean;\n order?: string;\n ascending?: boolean;\n tagId?: string;\n}\n\nexport type PolymarketClient = ElizaClient & {\n polymarketStatus(): Promise<PolymarketStatusResponse>;\n polymarketMarkets(\n request?: PolymarketMarketsRequest,\n ): Promise<PolymarketMarketsResponse>;\n polymarketMarketById(id: string): Promise<PolymarketMarketResponse>;\n polymarketMarketBySlug(slug: string): Promise<PolymarketMarketResponse>;\n polymarketOrderbook(tokenId: string): Promise<PolymarketOrderbookResponse>;\n polymarketOrders(): Promise<PolymarketDisabledResponse>;\n /**\n * Read open positions for `user`, or for the agent's configured Polygon\n * wallet when `user` is omitted (the route resolves the fallback address).\n */\n polymarketPositions(user?: string): Promise<PolymarketPositionsResponse>;\n};\n\nconst elizaClientPrototype = ElizaClient.prototype as PolymarketClient;\n\nelizaClientPrototype.polymarketStatus = async function () {\n return this.fetch(\"/api/polymarket/status\");\n};\n\nelizaClientPrototype.polymarketMarkets = async function (\n request: PolymarketMarketsRequest = {},\n) {\n const params = new URLSearchParams();\n appendParam(params, \"limit\", request.limit);\n appendParam(params, \"offset\", request.offset);\n appendParam(params, \"active\", request.active);\n appendParam(params, \"closed\", request.closed);\n appendParam(params, \"order\", request.order);\n appendParam(params, \"ascending\", request.ascending);\n appendParam(params, \"tag_id\", request.tagId);\n const query = params.toString();\n return this.fetch(`/api/polymarket/markets${query ? `?${query}` : \"\"}`);\n};\n\nelizaClientPrototype.polymarketMarketById = async function (id: string) {\n const params = new URLSearchParams({ id });\n return this.fetch(`/api/polymarket/market?${params.toString()}`);\n};\n\nelizaClientPrototype.polymarketMarketBySlug = async function (slug: string) {\n const params = new URLSearchParams({ slug });\n return this.fetch(`/api/polymarket/market?${params.toString()}`);\n};\n\nelizaClientPrototype.polymarketOrderbook = async function (tokenId: string) {\n const params = new URLSearchParams({ token_id: tokenId });\n return this.fetch(`/api/polymarket/orderbook?${params.toString()}`);\n};\n\nelizaClientPrototype.polymarketOrders = async function () {\n return this.fetch(\"/api/polymarket/orders\");\n};\n\nelizaClientPrototype.polymarketPositions = async function (user?: string) {\n const trimmed = user?.trim();\n const query = trimmed\n ? `?${new URLSearchParams({ user: trimmed }).toString()}`\n : \"\";\n return this.fetch(`/api/polymarket/positions${query}`);\n};\n\nfunction appendParam(\n params: URLSearchParams,\n key: string,\n value: string | number | boolean | undefined,\n): void {\n if (value === undefined) return;\n params.set(key, String(value));\n}\n","// Shared data helpers for the Polymarket `interact` capability handler\n// (in PolymarketAppView.interact.ts), which loads terminal-snapshot state for\n// the agent terminal. Kept out of the .tsx so component files export only React\n// components and stay Fast-Refresh-compatible in dev.\nimport { client } from \"@elizaos/app-core\";\nimport \"./client\";\nimport type { PolymarketClient } from \"./client\";\nimport type {\n PolymarketDisabledResponse,\n PolymarketMarketsResponse,\n PolymarketPositionsResponse,\n PolymarketStatusResponse,\n} from \"./polymarket-contracts\";\n\nexport async function loadPolymarketTuiState(user?: string): Promise<{\n status: PolymarketStatusResponse;\n markets: PolymarketMarketsResponse;\n orders: PolymarketDisabledResponse;\n positions: PolymarketPositionsResponse | null;\n}> {\n const polymarketClient = client as PolymarketClient;\n const [status, markets, orders] = await Promise.all([\n polymarketClient.polymarketStatus(),\n polymarketClient.polymarketMarkets({ limit: 25 }),\n polymarketClient.polymarketOrders(),\n ]);\n const positions = user\n ? await polymarketClient.polymarketPositions(user)\n : null;\n return { status, markets, orders, positions };\n}\n\nexport async function postPolymarketCommand(\n path: string,\n body: Record<string, unknown>,\n): Promise<unknown> {\n const response = await fetch(path, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(body),\n });\n const data = await response.json().catch(() => ({}));\n if (!response.ok) {\n const message =\n typeof data === \"object\" &&\n data !== null &&\n \"error\" in data &&\n typeof data.error === \"string\"\n ? data.error\n : `Polymarket request failed with ${response.status}`;\n throw new Error(message);\n }\n return data;\n}\n","// View-bundle `interact` capability handler, split out of PolymarketAppView.tsx\n// so that file exports only React components and stays Fast-Refresh-compatible\n// (Vite would full-reload a component file that also exports a plain function).\n// The view bundle re-exports `interact` via ./polymarket-view-bundle.ts.\nimport { client } from \"@elizaos/app-core\";\nimport \"./client\";\nimport type { PolymarketClient } from \"./client\";\nimport {\n loadPolymarketTuiState,\n postPolymarketCommand,\n} from \"./PolymarketAppView.helpers\";\nimport type { PolymarketOrderbookResponse } from \"./polymarket-contracts\";\n\nexport async function interact(\n capability: string,\n params?: Record<string, unknown>,\n): Promise<unknown> {\n if (capability === \"terminal-polymarket-state\") {\n const user = typeof params?.user === \"string\" ? params.user.trim() : \"\";\n const state = await loadPolymarketTuiState(user || undefined);\n return {\n viewType: \"tui\",\n status: state.status,\n markets: state.markets.markets.slice(\n 0,\n typeof params?.limit === \"number\" ? params.limit : 25,\n ),\n orders: state.orders,\n positions: state.positions,\n };\n }\n\n if (capability === \"terminal-polymarket-market\") {\n const id = typeof params?.id === \"string\" ? params.id.trim() : \"\";\n const slug = typeof params?.slug === \"string\" ? params.slug.trim() : \"\";\n const polymarketClient = client as PolymarketClient;\n if (id) {\n return {\n viewType: \"tui\",\n ...(await polymarketClient.polymarketMarketById(id)),\n };\n }\n if (slug) {\n return {\n viewType: \"tui\",\n ...(await polymarketClient.polymarketMarketBySlug(slug)),\n };\n }\n throw new Error(\"id or slug is required\");\n }\n\n if (capability === \"terminal-polymarket-orderbook\") {\n const tokenId =\n typeof params?.tokenId === \"string\" ? params.tokenId.trim() : \"\";\n if (!tokenId) throw new Error(\"tokenId is required\");\n const orderbook: PolymarketOrderbookResponse = await (\n client as PolymarketClient\n ).polymarketOrderbook(tokenId);\n return { viewType: \"tui\", orderbook };\n }\n\n if (capability === \"terminal-polymarket-positions\") {\n const user = typeof params?.user === \"string\" ? params.user.trim() : \"\";\n if (!user) throw new Error(\"user is required\");\n return {\n viewType: \"tui\",\n positions: await (client as PolymarketClient).polymarketPositions(user),\n };\n }\n\n if (capability === \"terminal-polymarket-trading-check\") {\n return {\n viewType: \"tui\",\n result: await postPolymarketCommand(\"/api/polymarket/orders\", {\n marketId: typeof params?.marketId === \"string\" ? params.marketId : \"\",\n side: typeof params?.side === \"string\" ? params.side : \"buy\",\n outcome: typeof params?.outcome === \"string\" ? params.outcome : \"\",\n size:\n typeof params?.size === \"number\" || typeof params?.size === \"string\"\n ? params.size\n : 0,\n }),\n };\n }\n\n throw new Error(`Unsupported capability \"${capability}\"`);\n}\n","/**\n * PolymarketSpatialView - the Polymarket markets surface authored once with the\n * spatial vocabulary, so it renders correctly wherever it is displayed:\n *\n * - GUI / XR - mounted in `<SpatialSurface>` (DOM; XR scales up).\n * - TUI - rendered to real terminal lines by the agent terminal, via\n * `registerSpatialTerminalView` (see `register-terminal-view.tsx`).\n *\n * It is purely presentational (a snapshot + an action callback in, primitives\n * out) and imports only the cross-modality primitives plus a type-only view of\n * the Polymarket contracts, so it is safe to render in the Node agent process\n * where the terminal lives (no app-core/client runtime import).\n */\n\nimport {\n Button,\n Card,\n Divider,\n HStack,\n List,\n type SpatialTone,\n Text,\n VStack,\n} from \"@elizaos/ui/spatial\";\nimport type {\n PolymarketMarket,\n PolymarketPosition,\n PolymarketPositionsSummary,\n PolymarketStatusResponse,\n} from \"../polymarket-contracts\";\n\nexport interface PolymarketSnapshot {\n status: PolymarketStatusResponse | null;\n markets: readonly PolymarketMarket[];\n /** Detail overlay target; null shows the list. */\n selectedMarket: PolymarketMarket | null;\n /** The agent's own open positions; empty when none/unreadable. */\n positions?: readonly PolymarketPosition[];\n /** Aggregate value/PnL across `positions`; null when none. */\n positionsSummary?: PolymarketPositionsSummary | null;\n loading?: boolean;\n error?: string | null;\n lastAction?: string;\n}\n\nconst MAX_LIST = 24;\nconst MAX_OUTCOMES = 3;\n\nfunction priceToPercent(price: string | null): number | null {\n if (price == null) return null;\n const n = Number(price);\n if (!Number.isFinite(n)) return null;\n return Math.round(n * 100);\n}\n\nfunction shortNumber(value: string | null): string | null {\n if (value == null) return null;\n const n = Number(value);\n if (!Number.isFinite(n)) return value;\n if (n >= 1_000_000) return `$${(n / 1_000_000).toFixed(1)}M`;\n if (n >= 1_000) return `$${(n / 1_000).toFixed(1)}K`;\n return `$${n.toFixed(0)}`;\n}\n\nfunction marketLabel(market: PolymarketMarket): string {\n return market.question ?? market.slug ?? market.id;\n}\n\nfunction parseNumber(value: string | null | undefined): number | null {\n if (value == null) return null;\n const n = Number(value);\n return Number.isFinite(n) ? n : null;\n}\n\nfunction usd(value: number | null, withSign = false): string {\n if (value == null) return \"-\";\n const sign = withSign && value > 0 ? \"+\" : value < 0 ? \"-\" : \"\";\n const abs = Math.abs(value);\n if (abs >= 1_000_000) return `${sign}$${(abs / 1_000_000).toFixed(1)}M`;\n if (abs >= 1_000) return `${sign}$${(abs / 1_000).toFixed(1)}K`;\n return `${sign}$${abs.toFixed(2)}`;\n}\n\nfunction pnlTone(value: number | null): SpatialTone {\n if (value == null || value === 0) return \"muted\";\n return value > 0 ? \"success\" : \"danger\";\n}\n\nfunction readyTone(ready: boolean): SpatialTone {\n return ready ? \"success\" : \"muted\";\n}\n\nfunction ReadinessRow({ status }: { status: PolymarketStatusResponse | null }) {\n const reads = status?.publicReads.ready ?? false;\n const trading = status?.trading.ready ?? false;\n return (\n <HStack gap={2} align=\"center\" wrap>\n <Text style=\"caption\" tone={readyTone(reads)}>\n {`reads ${reads ? \"ready\" : \"off\"}`}\n </Text>\n <Text style=\"caption\" tone={readyTone(trading)}>\n {`trading ${trading ? \"ready\" : \"off\"}`}\n </Text>\n </HStack>\n );\n}\n\nfunction OutcomeLine({\n name,\n percent,\n lead,\n}: {\n name: string;\n percent: number | null;\n lead: boolean;\n}) {\n return (\n <HStack gap={1} align=\"center\">\n <Text tone={lead ? \"primary\" : \"default\"} grow={1} wrap={false}>\n {name}\n </Text>\n <Text\n style=\"caption\"\n tone={lead ? \"primary\" : \"muted\"}\n align=\"end\"\n width={6}\n >\n {percent != null ? `${percent}%` : \"n/a\"}\n </Text>\n </HStack>\n );\n}\n\nfunction outcomeSummary(outcome: PolymarketMarket[\"outcomes\"][number]): string {\n const percent = priceToPercent(outcome.price);\n return `${outcome.name} ${percent != null ? `${percent}%` : \"n/a\"}`;\n}\n\nfunction MarketRow({\n market,\n index,\n active,\n onAction,\n}: {\n market: PolymarketMarket;\n index: number;\n active: boolean;\n onAction?: (action: string) => void;\n}) {\n const label = marketLabel(market);\n const volume = shortNumber(market.volume24hr ?? market.volume);\n const liquidity = shortNumber(market.liquidity);\n const top = market.outcomes.slice(0, MAX_OUTCOMES);\n return (\n <VStack\n gap={0}\n grow={1}\n agent={`market-${market.id}`}\n tone={active ? \"primary\" : \"default\"}\n >\n <HStack gap={1} align=\"center\">\n <Text tone={active ? \"primary\" : \"muted\"} width={3}>\n {String(index + 1).padStart(2, \"0\")}\n </Text>\n <Text bold grow={1} wrap={false}>\n {label}\n </Text>\n <Text style=\"caption\" tone={market.active ? \"success\" : \"muted\"}>\n {market.active ? \"active\" : \"closed\"}\n </Text>\n <Button\n variant=\"ghost\"\n tone=\"primary\"\n agent={`market:${market.id}`}\n onPress={() => onAction?.(`market:${market.id}`)}\n >\n Open\n </Button>\n </HStack>\n {top.length > 0 ? (\n <HStack gap={2} wrap>\n {top.map((outcome) => (\n <Text key={outcome.name} style=\"caption\" tone=\"muted\" wrap={false}>\n {outcomeSummary(outcome)}\n </Text>\n ))}\n </HStack>\n ) : null}\n <HStack gap={2} wrap>\n {volume ? (\n <Text style=\"caption\" tone=\"muted\">{`vol ${volume}`}</Text>\n ) : null}\n {liquidity ? (\n <Text style=\"caption\" tone=\"muted\">{`liq ${liquidity}`}</Text>\n ) : null}\n {market.category ? (\n <Text style=\"caption\" tone=\"muted\" wrap={false}>\n {market.category}\n </Text>\n ) : null}\n </HStack>\n </VStack>\n );\n}\n\nfunction MarketDetail({\n market,\n onAction,\n}: {\n market: PolymarketMarket;\n onAction?: (action: string) => void;\n}) {\n const lastTrade = priceToPercent(market.lastTradePrice);\n return (\n <VStack gap={1}>\n <Button\n variant=\"ghost\"\n tone=\"default\"\n agent=\"detail-back\"\n onPress={() => onAction?.(\"detail-back\")}\n >\n {\"< Markets\"}\n </Button>\n <Text style=\"subheading\" wrap>\n {market.question ?? market.slug ?? market.id}\n </Text>\n {market.category ? (\n <Text style=\"caption\" tone=\"muted\">\n {market.category}\n </Text>\n ) : null}\n\n <HStack gap={2} wrap>\n <Text style=\"caption\" tone=\"muted\">\n {`Volume ${shortNumber(market.volume) ?? \"-\"}`}\n </Text>\n <Text style=\"caption\" tone=\"muted\">\n {`Liquidity ${shortNumber(market.liquidity) ?? \"-\"}`}\n </Text>\n <Text style=\"caption\" tone=\"muted\">\n {`Last ${lastTrade != null ? `${lastTrade}%` : \"-\"}`}\n </Text>\n </HStack>\n\n <Divider label=\"outcomes\" />\n <List gap={0}>\n {market.outcomes.map((outcome, i) => (\n <OutcomeLine\n key={outcome.name}\n name={outcome.name}\n percent={priceToPercent(outcome.price)}\n lead={i === 0}\n />\n ))}\n </List>\n\n <Divider label=\"orderbook tokens\" />\n {market.clobTokenIds.length > 0 ? (\n <List gap={0}>\n {market.clobTokenIds.map((tokenId) => (\n <Text key={tokenId} style=\"caption\" tone=\"muted\" wrap={false}>\n {tokenId}\n </Text>\n ))}\n </List>\n ) : (\n <Text style=\"caption\" tone=\"muted\">\n no CLOB token ids\n </Text>\n )}\n </VStack>\n );\n}\n\nfunction PositionRow({ position }: { position: PolymarketPosition }) {\n const label =\n position.question ?? position.slug ?? position.marketId ?? position.outcome;\n const value = parseNumber(position.currentValue);\n const cashPnl = parseNumber(position.cashPnl);\n return (\n <HStack gap={1} align=\"center\">\n <Text grow={1} wrap={false}>\n {label ?? \"-\"}\n </Text>\n {position.outcome ? (\n <Text style=\"caption\" tone=\"muted\" wrap={false}>\n {position.outcome}\n </Text>\n ) : null}\n <Text style=\"caption\" tone=\"muted\" align=\"end\" width={8}>\n {usd(value)}\n </Text>\n <Text style=\"caption\" tone={pnlTone(cashPnl)} align=\"end\" width={8}>\n {usd(cashPnl, true)}\n </Text>\n </HStack>\n );\n}\n\nfunction PositionsSection({\n positions,\n summary,\n}: {\n positions: readonly PolymarketPosition[];\n summary: PolymarketPositionsSummary | null;\n}) {\n const open = positions.filter((position) => {\n const size = parseNumber(position.size);\n return size != null && Math.abs(size) > 1e-9;\n });\n const totalValue = parseNumber(summary?.totalValue ?? null);\n const totalPnl = parseNumber(summary?.totalCashPnl ?? null);\n return (\n <>\n <Divider label=\"positions\" />\n <HStack gap={2} wrap>\n <Text style=\"caption\" tone=\"muted\">{`value ${usd(totalValue)}`}</Text>\n <Text style=\"caption\" tone={pnlTone(totalPnl)}>\n {`pnl ${usd(totalPnl, true)}`}\n </Text>\n <Text style=\"caption\" tone=\"muted\">{`open ${open.length}`}</Text>\n </HStack>\n {open.length === 0 ? (\n <Text style=\"caption\" tone=\"muted\" align=\"center\">\n no open positions\n </Text>\n ) : (\n <List gap={0}>\n {open.map((position) => (\n <PositionRow\n key={`${position.conditionId ?? position.marketId ?? position.slug}-${position.outcome}`}\n position={position}\n />\n ))}\n </List>\n )}\n </>\n );\n}\n\nexport interface PolymarketSpatialViewProps {\n snapshot: PolymarketSnapshot;\n /** Dispatch by action id: `market:<id>` (open a market), `detail-back`, `refresh`. */\n onAction?: (action: string) => void;\n}\n\nexport function PolymarketSpatialView({\n snapshot,\n onAction,\n}: PolymarketSpatialViewProps) {\n const { status, markets, selectedMarket, loading, error } = snapshot;\n const positions = snapshot.positions ?? [];\n const accountReady = status?.account?.ready ?? false;\n const selectedId = selectedMarket?.id ?? null;\n return (\n <Card gap={1} padding={1}>\n <HStack gap={1} align=\"center\" wrap>\n <ReadinessRow status={status} />\n <Text style=\"caption\" tone=\"muted\" grow={1}>\n {loading ? \"loading\" : `${markets.length} markets`}\n </Text>\n <Button\n variant=\"outline\"\n tone=\"default\"\n agent=\"refresh\"\n disabled={loading}\n onPress={() => onAction?.(\"refresh\")}\n >\n Refresh\n </Button>\n </HStack>\n\n {error ? (\n <Text tone=\"danger\" style=\"caption\">\n {error}\n </Text>\n ) : null}\n\n {selectedMarket ? (\n <MarketDetail market={selectedMarket} onAction={onAction} />\n ) : (\n <>\n {accountReady ? (\n <PositionsSection\n positions={positions}\n summary={snapshot.positionsSummary ?? null}\n />\n ) : null}\n <Divider label=\"markets\" />\n {markets.length === 0 ? (\n <Text tone=\"muted\" align=\"center\" style=\"caption\">\n {loading ? \"loading markets\" : \"no markets loaded\"}\n </Text>\n ) : (\n <List gap={1}>\n {markets.slice(0, MAX_LIST).map((market, index) => (\n <MarketRow\n key={market.id}\n market={market}\n index={index}\n active={selectedId === market.id}\n onAction={onAction}\n />\n ))}\n </List>\n )}\n </>\n )}\n </Card>\n );\n}\n","import { client } from \"@elizaos/app-core\";\nimport { useCallback, useEffect, useState } from \"react\";\nimport \"./client\";\nimport type { PolymarketClient } from \"./client\";\nimport type {\n PolymarketMarket,\n PolymarketPositionsResponse,\n PolymarketStatusResponse,\n} from \"./polymarket-contracts\";\n\nexport function usePolymarketState() {\n const [status, setStatus] = useState<PolymarketStatusResponse | null>(null);\n const [markets, setMarkets] = useState<readonly PolymarketMarket[]>([]);\n const [selectedMarket, setSelectedMarket] = useState<PolymarketMarket | null>(\n null,\n );\n const [positions, setPositions] =\n useState<PolymarketPositionsResponse | null>(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n\n const refresh = useCallback(async () => {\n setLoading(true);\n setError(null);\n const polymarketClient = client as PolymarketClient;\n try {\n const [statusResponse, marketsResponse] = await Promise.all([\n polymarketClient.polymarketStatus(),\n polymarketClient.polymarketMarkets({ limit: 25 }),\n ]);\n setStatus(statusResponse);\n setMarkets(marketsResponse.markets);\n setSelectedMarket(marketsResponse.markets[0] ?? null);\n\n // Read the agent's own positions only when an account address is\n // resolvable; the route falls back to the configured wallet so we call\n // it without an explicit `user`. A position-read failure must not blank\n // the whole view, so it's isolated from the markets fetch.\n if (statusResponse.account.ready) {\n try {\n setPositions(await polymarketClient.polymarketPositions());\n } catch {\n setPositions(null);\n }\n } else {\n setPositions(null);\n }\n } catch (err) {\n setError(\n err instanceof Error ? err.message : \"Polymarket refresh failed\",\n );\n } finally {\n setLoading(false);\n }\n }, []);\n\n useEffect(() => {\n void refresh();\n }, [refresh]);\n\n return {\n status,\n markets,\n selectedMarket,\n setSelectedMarket,\n positions,\n loading,\n error,\n refresh,\n };\n}\n","/**\n * PolymarketView — the single GUI/XR data wrapper for the Polymarket surface.\n *\n * It owns the live data (status + markets + the agent's own positions, plus a\n * quiet background poll) and renders the one presentational\n * {@link PolymarketSpatialView} inside a {@link SpatialSurface}. Omitting the\n * `modality` prop lets `SpatialSurface` auto-detect GUI vs XR via\n * `window.__elizaXRContext`, so the SAME component serves both surfaces. The\n * TUI surface renders the same `PolymarketSpatialView` through the terminal\n * registry (see `register-terminal-view.tsx`).\n */\n\nimport { SpatialSurface } from \"@elizaos/ui/spatial\";\nimport { useCallback, useEffect } from \"react\";\nimport {\n type PolymarketSnapshot,\n PolymarketSpatialView,\n} from \"./components/PolymarketSpatialView.tsx\";\nimport { usePolymarketState } from \"./usePolymarketState.ts\";\n\nexport function PolymarketView() {\n const {\n status,\n markets,\n selectedMarket,\n setSelectedMarket,\n positions,\n loading,\n error,\n refresh,\n } = usePolymarketState();\n\n // The view has no live subscription, so keep the market list fresh with a\n // quiet background poll. Torn down on unmount.\n useEffect(() => {\n const interval = setInterval(() => {\n void refresh();\n }, 20000);\n return () => clearInterval(interval);\n }, [refresh]);\n\n const onAction = useCallback(\n (action: string) => {\n if (action.startsWith(\"market:\")) {\n const id = action.slice(\"market:\".length);\n const next = markets.find((market) => market.id === id) ?? null;\n setSelectedMarket(next);\n return;\n }\n switch (action) {\n case \"detail-back\":\n setSelectedMarket(null);\n return;\n case \"refresh\":\n void refresh();\n return;\n }\n },\n [markets, refresh, setSelectedMarket],\n );\n\n const snapshot: PolymarketSnapshot = {\n status,\n markets,\n selectedMarket,\n positions: positions?.positions ?? [],\n positionsSummary: positions?.summary ?? null,\n loading,\n error,\n };\n\n return (\n <SpatialSurface>\n <PolymarketSpatialView snapshot={snapshot} onAction={onAction} />\n </SpatialSurface>\n );\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elizaos/plugin-polymarket-app",
3
- "version": "2.0.3-beta.5",
3
+ "version": "2.0.3-beta.7",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "exports": {
@@ -32,10 +32,10 @@
32
32
  }
33
33
  },
34
34
  "dependencies": {
35
- "@elizaos/app-core": "2.0.3-beta.5",
36
- "@elizaos/core": "2.0.3-beta.5",
37
- "@elizaos/shared": "2.0.3-beta.5",
38
- "@elizaos/ui": "2.0.3-beta.5",
35
+ "@elizaos/app-core": "2.0.3-beta.7",
36
+ "@elizaos/core": "2.0.3-beta.7",
37
+ "@elizaos/shared": "2.0.3-beta.7",
38
+ "@elizaos/ui": "2.0.3-beta.7",
39
39
  "lucide-react": "^1.0.0",
40
40
  "react": "^19.0.0"
41
41
  },
@@ -74,5 +74,5 @@
74
74
  "vite": "^8.0.0",
75
75
  "vitest": "^4.1.5"
76
76
  },
77
- "gitHead": "ff6157011c9459670021cc28a6797592a78b8817"
77
+ "gitHead": "61094f10458d11055c75b3dd0bae374e3f66bac5"
78
78
  }