@aibtc/mcp-server 1.44.0 → 1.45.0

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 (37) hide show
  1. package/dist/config/sponsor.d.ts +8 -0
  2. package/dist/config/sponsor.d.ts.map +1 -1
  3. package/dist/config/sponsor.js +10 -0
  4. package/dist/config/sponsor.js.map +1 -1
  5. package/dist/services/hiro-api.d.ts +3 -0
  6. package/dist/services/hiro-api.d.ts.map +1 -1
  7. package/dist/services/hiro-api.js.map +1 -1
  8. package/dist/tools/arxiv-research.tools.d.ts +16 -0
  9. package/dist/tools/arxiv-research.tools.d.ts.map +1 -0
  10. package/dist/tools/arxiv-research.tools.js +433 -0
  11. package/dist/tools/arxiv-research.tools.js.map +1 -0
  12. package/dist/tools/index.d.ts.map +1 -1
  13. package/dist/tools/index.js +6 -0
  14. package/dist/tools/index.js.map +1 -1
  15. package/dist/tools/nonce.tools.d.ts.map +1 -1
  16. package/dist/tools/nonce.tools.js +492 -25
  17. package/dist/tools/nonce.tools.js.map +1 -1
  18. package/dist/tools/skill-mappings.d.ts.map +1 -1
  19. package/dist/tools/skill-mappings.js +20 -9
  20. package/dist/tools/skill-mappings.js.map +1 -1
  21. package/dist/tools/yield-dashboard.tools.d.ts +17 -0
  22. package/dist/tools/yield-dashboard.tools.d.ts.map +1 -0
  23. package/dist/tools/yield-dashboard.tools.js +559 -0
  24. package/dist/tools/yield-dashboard.tools.js.map +1 -0
  25. package/dist/transactions/builder.d.ts +4 -0
  26. package/dist/transactions/builder.d.ts.map +1 -1
  27. package/dist/transactions/builder.js.map +1 -1
  28. package/dist/transactions/sponsor-builder.d.ts +6 -12
  29. package/dist/transactions/sponsor-builder.d.ts.map +1 -1
  30. package/dist/transactions/sponsor-builder.js +81 -39
  31. package/dist/transactions/sponsor-builder.js.map +1 -1
  32. package/dist/utils/relay-health.d.ts +14 -5
  33. package/dist/utils/relay-health.d.ts.map +1 -1
  34. package/dist/utils/relay-health.js +60 -76
  35. package/dist/utils/relay-health.js.map +1 -1
  36. package/package.json +1 -1
  37. package/skill/SKILL.md +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"arxiv-research.tools.js","sourceRoot":"","sources":["../../src/tools/arxiv-research.tools.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAyEpE;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA+HxD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA2EpE;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAqIxD"}
@@ -19,6 +19,7 @@ import { registerDefiTools } from "./defi.tools.js";
19
19
  import { registerScaffoldTools } from "./scaffold.tools.js";
20
20
  import { registerOpenRouterTools } from "./openrouter.tools.js";
21
21
  import { registerYieldHunterTools } from "./yield-hunter.tools.js";
22
+ import { registerYieldDashboardTools } from "./yield-dashboard.tools.js";
22
23
  import { registerPillarTools } from "./pillar.tools.js";
23
24
  import { registerPillarDirectTools } from "./pillar-direct.tools.js";
24
25
  import { registerBitcoinTools } from "./bitcoin.tools.js";
@@ -40,6 +41,7 @@ import { registerSouldinalsTools } from "./souldinals.tools.js";
40
41
  import { registerBountyScannerTools } from "./bounty-scanner.tools.js";
41
42
  import { registerRunesTools } from "./runes.tools.js";
42
43
  import { registerInboxTools } from "./inbox.tools.js";
44
+ import { registerArxivResearchTools } from "./arxiv-research.tools.js";
43
45
  import { getSkillForTool } from "./skill-mappings.js";
44
46
  /**
45
47
  * Wraps server.registerTool to inject _meta.skill from TOOL_SKILL_MAP when a mapping exists.
@@ -113,6 +115,8 @@ export function registerAllTools(server) {
113
115
  registerOpenRouterTools(server);
114
116
  // Yield Hunter (autonomous sBTC yield farming)
115
117
  registerYieldHunterTools(server);
118
+ // Yield Dashboard (read-only cross-protocol DeFi yield aggregation)
119
+ registerYieldDashboardTools(server);
116
120
  // Pillar (handoff to frontend + polling)
117
121
  registerPillarTools(server);
118
122
  // Pillar Direct (agent-signed, no browser handoff)
@@ -155,6 +159,8 @@ export function registerAllTools(server) {
155
159
  registerRunesTools(server);
156
160
  // Inbox (AIBTC agent messaging — send paid inbox messages)
157
161
  registerInboxTools(server);
162
+ // arXiv Research (public arXiv Atom API — paper search and digest compilation)
163
+ registerArxivResearchTools(server);
158
164
  restoreRegisterTool();
159
165
  }
160
166
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"nonce.tools.d.ts","sourceRoot":"","sources":["../../src/tools/nonce.tools.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAoBpE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAuP1D"}
1
+ {"version":3,"file":"nonce.tools.d.ts","sourceRoot":"","sources":["../../src/tools/nonce.tools.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAgFpE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAyxB1D"}
@@ -15,6 +15,46 @@ import { getAddressState, reloadFromDisk, recordNonceUsed, STALE_NONCE_MS, } fro
15
15
  import { makeSTXTokenTransfer, broadcastTransaction, } from "@stacks/transactions";
16
16
  import { getStacksNetwork, getExplorerTxUrl } from "../config/networks.js";
17
17
  import { resolveDefaultFee } from "../utils/fee.js";
18
+ import { SPONSOR_ADDRESSES } from "../utils/relay-health.js";
19
+ /** PoX burn address used as the recipient for gap-fill/RBF self-transfers. */
20
+ const POX_BURN_ADDRESS = "SP000000000000000000002Q6VF78";
21
+ /**
22
+ * Broadcast a 1 uSTX gap-fill transaction at the given nonce.
23
+ *
24
+ * Shared by both the nonce_fill_gap tool (single gap) and nonce_heal
25
+ * (batch gaps). Records the nonce in the shared tracker on success.
26
+ */
27
+ async function broadcastGapFill(privateKey, senderAddress, nonce, fee) {
28
+ const networkName = getStacksNetwork(NETWORK);
29
+ const transaction = await makeSTXTokenTransfer({
30
+ recipient: POX_BURN_ADDRESS,
31
+ amount: 1n,
32
+ senderKey: privateKey,
33
+ network: networkName,
34
+ memo: `nonce-fill:${nonce}`,
35
+ nonce: BigInt(nonce),
36
+ fee,
37
+ });
38
+ const broadcastResponse = await broadcastTransaction({
39
+ transaction,
40
+ network: networkName,
41
+ });
42
+ if ("error" in broadcastResponse) {
43
+ return {
44
+ nonce,
45
+ txid: null,
46
+ status: "failed",
47
+ error: `${broadcastResponse.error} - ${broadcastResponse.reason}`,
48
+ };
49
+ }
50
+ await recordNonceUsed(senderAddress, nonce, broadcastResponse.txid);
51
+ return {
52
+ nonce,
53
+ txid: broadcastResponse.txid,
54
+ status: "broadcast",
55
+ explorer: getExplorerTxUrl(broadcastResponse.txid, NETWORK),
56
+ };
57
+ }
18
58
  export function registerNonceTools(server) {
19
59
  // ============================================================================
20
60
  // nonce_health — surface local tracker state vs chain
@@ -62,10 +102,9 @@ Returns:
62
102
  .catch(() => null),
63
103
  ]);
64
104
  const issues = [];
65
- const STALE_MS = STALE_NONCE_MS;
66
105
  // Build local status
67
106
  const isStale = localState
68
- ? Date.now() - new Date(localState.lastUpdated).getTime() > STALE_MS
107
+ ? Date.now() - new Date(localState.lastUpdated).getTime() > STALE_NONCE_MS
69
108
  : true;
70
109
  const local = localState
71
110
  ? {
@@ -180,38 +219,466 @@ Requires the wallet to be unlocked. The fee is auto-estimated.`,
180
219
  message: "Wallet must be unlocked to fill a nonce gap. Use wallet_unlock first.",
181
220
  });
182
221
  }
183
- // Send 1 uSTX to the PoX burn address (self-transfers are rejected by Stacks)
184
- const POX_BURN_ADDRESS = "SP000000000000000000002Q6VF78";
185
- const networkName = getStacksNetwork(NETWORK);
186
222
  const fee = await resolveDefaultFee(NETWORK, "token_transfer");
187
- const transaction = await makeSTXTokenTransfer({
188
- recipient: POX_BURN_ADDRESS,
189
- amount: 1n,
190
- senderKey: walletAccount.privateKey,
191
- network: networkName,
192
- memo: `nonce-fill:${nonce}`,
193
- nonce: BigInt(nonce),
194
- fee,
195
- });
196
- const broadcastResponse = await broadcastTransaction({
197
- transaction,
198
- network: networkName,
199
- });
200
- if ("error" in broadcastResponse) {
223
+ const result = await broadcastGapFill(walletAccount.privateKey, walletAccount.address, nonce, fee);
224
+ if (result.status === "failed") {
201
225
  return createJsonResponse({
202
226
  success: false,
203
227
  nonce,
204
- error: `Broadcast failed: ${broadcastResponse.error} - ${broadcastResponse.reason}`,
228
+ error: `Broadcast failed: ${result.error}`,
205
229
  });
206
230
  }
207
- // Record in shared tracker
208
- await recordNonceUsed(walletAccount.address, nonce, broadcastResponse.txid);
209
231
  return createJsonResponse({
210
232
  success: true,
211
233
  nonce,
212
- txid: broadcastResponse.txid,
213
- explorer: getExplorerTxUrl(broadcastResponse.txid, NETWORK),
214
- message: `Gap-fill transaction sent at nonce ${nonce}. txid: ${broadcastResponse.txid}`,
234
+ txid: result.txid,
235
+ explorer: result.explorer,
236
+ message: `Gap-fill transaction sent at nonce ${nonce}. txid: ${result.txid}`,
237
+ });
238
+ }
239
+ catch (error) {
240
+ return createErrorResponse(error);
241
+ }
242
+ });
243
+ // ============================================================================
244
+ // tx_status_deep — cross-reference sender pending txids with sponsor mempool
245
+ // ============================================================================
246
+ server.registerTool("tx_status_deep", {
247
+ description: `Deep diagnostic view correlating sender nonces with sponsor nonces for sponsored transactions.
248
+
249
+ Reads the sender's local pending txid log and cross-references each entry against
250
+ the sponsor's mempool to show the full lifecycle of sponsored transactions:
251
+ - Which sender nonce maps to which sponsor nonce
252
+ - Whether sponsor nonce gaps are blocking specific transactions
253
+ - Which pending txids are missing from the sponsor mempool entirely
254
+ - Multiple competing txids (RBF candidates) for the same sender nonce slot
255
+
256
+ Output per nonce slot:
257
+ Sender nonce N:
258
+ - 0xabc (sponsored, sponsor nonce 47) -- BLOCKED by missing sponsor nonces [44, 45]
259
+ - 0xdef (direct, fee 0.01 STX) -- competing RBF candidate
260
+ Sender nonce M (0xghi, sponsored) -> sponsor nonce 48 -- pending, no gaps ahead
261
+ Sender nonce P (0xjkl, sponsored) -> NOT IN SPONSOR MEMPOOL
262
+
263
+ Use this when check_relay_health shows issues but you need per-transaction clarity.
264
+ Returns structured JSON with pendingSlots, sponsorMissingNonces, and summary counts.`,
265
+ inputSchema: {
266
+ address: z
267
+ .string()
268
+ .optional()
269
+ .describe("STX address to check. Defaults to the active wallet address."),
270
+ },
271
+ }, async ({ address: inputAddress }) => {
272
+ try {
273
+ const walletAccount = getWalletManager().getAccount();
274
+ const address = inputAddress || walletAccount?.address;
275
+ if (!address) {
276
+ return createJsonResponse({
277
+ error: "No address provided and no wallet is unlocked. Provide an address or unlock a wallet first.",
278
+ pendingSlots: [],
279
+ summary: { total: 0, sponsored: 0, direct: 0, blocked: 0, notInSponsorMempool: 0 },
280
+ });
281
+ }
282
+ // Reload from disk to pick up changes from other processes
283
+ await reloadFromDisk();
284
+ const localState = await getAddressState(address);
285
+ if (!localState || localState.pending.length === 0) {
286
+ return createJsonResponse({
287
+ address,
288
+ pendingSlots: [],
289
+ sponsorAddress: SPONSOR_ADDRESSES[NETWORK] ?? null,
290
+ sponsorMissingNonces: [],
291
+ summary: { total: 0, sponsored: 0, direct: 0, blocked: 0, notInSponsorMempool: 0 },
292
+ message: "No pending transactions in local tracker for this address.",
293
+ });
294
+ }
295
+ // Group pending log entries by nonce (handle RBF — multiple txids per nonce)
296
+ const byNonce = new Map();
297
+ for (const entry of localState.pending) {
298
+ const existing = byNonce.get(entry.nonce) ?? [];
299
+ existing.push(entry);
300
+ byNonce.set(entry.nonce, existing);
301
+ }
302
+ // Determine sponsor address for this network
303
+ const sponsorAddress = SPONSOR_ADDRESSES[NETWORK];
304
+ // Fetch sponsor data (best-effort — failures degrade gracefully)
305
+ let sponsorMempoolIndex = new Map();
306
+ let sponsorMissingNonces = [];
307
+ if (sponsorAddress) {
308
+ const hiroApi = getHiroApi(NETWORK);
309
+ // Fetch sponsor mempool txs and nonce gaps in parallel
310
+ const [sponsorMempoolResult, sponsorNonceInfo] = await Promise.all([
311
+ hiroApi
312
+ .getMempoolTransactions({ sender_address: sponsorAddress, limit: 200 })
313
+ .catch(() => null),
314
+ hiroApi.getNonceInfo(sponsorAddress).catch(() => null),
315
+ ]);
316
+ if (sponsorMempoolResult) {
317
+ for (const tx of sponsorMempoolResult.results) {
318
+ sponsorMempoolIndex.set(tx.tx_id, {
319
+ nonce: tx.nonce,
320
+ sponsor_nonce: tx.sponsor_nonce,
321
+ fee_rate: tx.fee_rate ?? "unknown",
322
+ tx_status: tx.tx_status,
323
+ sponsored: tx.sponsored ?? false,
324
+ });
325
+ }
326
+ }
327
+ if (sponsorNonceInfo) {
328
+ sponsorMissingNonces = sponsorNonceInfo.detected_missing_nonces ?? [];
329
+ }
330
+ }
331
+ const sponsorMissingSet = new Set(sponsorMissingNonces);
332
+ // Build diagnostic per nonce slot
333
+ const pendingSlots = [];
334
+ const sortedNonces = [...byNonce.keys()].sort((a, b) => a - b);
335
+ let totalSponsored = 0;
336
+ let totalDirect = 0;
337
+ let totalBlocked = 0;
338
+ let totalNotInSponsorMempool = 0;
339
+ for (const senderNonce of sortedNonces) {
340
+ const entries = byNonce.get(senderNonce);
341
+ const candidates = [];
342
+ for (const entry of entries) {
343
+ const sponsorTx = sponsorMempoolIndex.get(entry.txid);
344
+ const inSponsorMempool = !!sponsorTx;
345
+ const isSponsored = inSponsorMempool ? (sponsorTx.sponsored || sponsorTx.sponsor_nonce !== undefined) : false;
346
+ let blocked = false;
347
+ let blockingGaps = [];
348
+ if (isSponsored && sponsorTx?.sponsor_nonce !== undefined) {
349
+ // Find sponsor nonce gaps below this tx's sponsor_nonce that would block it
350
+ blockingGaps = sponsorMissingNonces.filter((missing) => missing < sponsorTx.sponsor_nonce);
351
+ blocked = blockingGaps.length > 0;
352
+ }
353
+ candidates.push({
354
+ txid: entry.txid,
355
+ timestamp: entry.timestamp,
356
+ sponsored: isSponsored,
357
+ ...(sponsorTx?.sponsor_nonce !== undefined
358
+ ? { sponsorNonce: sponsorTx.sponsor_nonce }
359
+ : {}),
360
+ ...(sponsorTx ? { feeRate: sponsorTx.fee_rate, txStatus: sponsorTx.tx_status } : {}),
361
+ inSponsorMempool,
362
+ blocked,
363
+ ...(blockingGaps.length > 0 ? { blockingGaps } : {}),
364
+ });
365
+ if (isSponsored)
366
+ totalSponsored++;
367
+ else
368
+ totalDirect++;
369
+ if (blocked)
370
+ totalBlocked++;
371
+ if (!inSponsorMempool)
372
+ totalNotInSponsorMempool++;
373
+ }
374
+ pendingSlots.push({ senderNonce, candidates });
375
+ }
376
+ const total = localState.pending.length;
377
+ return createJsonResponse({
378
+ address,
379
+ pendingSlots,
380
+ sponsorAddress: sponsorAddress ?? null,
381
+ sponsorMissingNonces,
382
+ summary: {
383
+ total,
384
+ sponsored: totalSponsored,
385
+ direct: totalDirect,
386
+ blocked: totalBlocked,
387
+ notInSponsorMempool: totalNotInSponsorMempool,
388
+ },
389
+ });
390
+ }
391
+ catch (error) {
392
+ return createErrorResponse(error);
393
+ }
394
+ });
395
+ // ============================================================================
396
+ // nonce_heal — diagnose, fill gaps, and optionally RBF-bump the chain head
397
+ // ============================================================================
398
+ server.registerTool("nonce_heal", {
399
+ description: `Diagnose and heal the full nonce state for the active wallet in one shot.
400
+
401
+ Handles 90% of stuck-tx cases automatically:
402
+ 1. Fetches current nonce state from Hiro API (gaps, mempool)
403
+ 2. In dryRun mode: shows what would happen without broadcasting
404
+ 3. In execute mode (dryRun=false):
405
+ - Fills every gap with a 1 uSTX self-transfer to the PoX burn address
406
+ - Optionally RBF-bumps the chain head (lowest non-gap pending tx) to kick off processing
407
+
408
+ RBF bump behavior:
409
+ - Token-transfer txs: rebuilt at same nonce with fee * feeMultiplier and rebroadcast
410
+ - Sponsored txs: skipped with explanation (sender cannot RBF without sponsor key)
411
+ - Contract-call txs: skipped with manual RBF instructions
412
+
413
+ Always run nonce_health first to understand the current state.
414
+ Requires wallet to be unlocked for execute mode (dryRun=false).
415
+
416
+ Returns:
417
+ - address, dryRun flag, confirmedNonce
418
+ - gapsFound: list of missing nonces
419
+ - actions: per-action detail (fill_gap or bump_head) with txids, fees, status
420
+ - warnings: informational notes
421
+ - summary: human-readable description of what happened`,
422
+ inputSchema: {
423
+ address: z
424
+ .string()
425
+ .optional()
426
+ .describe("STX address to heal. Defaults to the active wallet address."),
427
+ dryRun: z
428
+ .boolean()
429
+ .default(true)
430
+ .describe("If true (default), preview proposed actions without broadcasting. Set to false to execute."),
431
+ bumpHead: z
432
+ .boolean()
433
+ .default(true)
434
+ .describe("Whether to RBF-bump the first real pending tx (chain head) after filling gaps. Default true."),
435
+ feeMultiplier: z
436
+ .number()
437
+ .min(1.1)
438
+ .default(1.5)
439
+ .describe("Fee multiplier for RBF bump (e.g. 1.5 = 50% higher fee). Minimum 1.1. Default 1.5."),
440
+ },
441
+ }, async ({ address: inputAddress, dryRun, bumpHead, feeMultiplier }) => {
442
+ try {
443
+ const walletAccount = getWalletManager().getAccount();
444
+ const address = inputAddress || walletAccount?.address;
445
+ if (!address) {
446
+ return createJsonResponse({
447
+ error: "No address provided and no wallet is unlocked. Provide an address or unlock a wallet first.",
448
+ });
449
+ }
450
+ if (!dryRun && !walletAccount) {
451
+ return createJsonResponse({
452
+ error: "Wallet must be unlocked to execute heal actions. Use wallet_unlock first, or set dryRun=true to preview.",
453
+ });
454
+ }
455
+ // Reload from disk to pick up changes from other processes
456
+ await reloadFromDisk();
457
+ const nonceInfo = await getHiroApi(NETWORK).getNonceInfo(address);
458
+ const confirmedNonce = nonceInfo.last_executed_tx_nonce;
459
+ const gapsFound = nonceInfo.detected_missing_nonces ?? [];
460
+ const mempoolNonces = nonceInfo.detected_mempool_nonces ?? [];
461
+ const gapSet = new Set(gapsFound);
462
+ const actions = [];
463
+ const warnings = [];
464
+ // Identify chain head: lowest non-gap mempool nonce
465
+ const chainHeadNonce = mempoolNonces.length > 0
466
+ ? mempoolNonces.filter((n) => !gapSet.has(n)).sort((a, b) => a - b)[0]
467
+ : undefined;
468
+ // ----------------------------------------------------------------
469
+ // dryRun: build proposed actions and return early
470
+ // ----------------------------------------------------------------
471
+ if (dryRun) {
472
+ for (const n of gapsFound) {
473
+ actions.push({ type: "fill_gap", nonce: n, txid: null, status: "proposed" });
474
+ }
475
+ if (bumpHead && chainHeadNonce !== undefined) {
476
+ // Find the chain head tx to inspect its type
477
+ const mempoolResult = await getHiroApi(NETWORK)
478
+ .getMempoolTransactions({ sender_address: address, limit: 50 })
479
+ .catch(() => null);
480
+ const headTx = mempoolResult?.results.find((tx) => tx.nonce === chainHeadNonce);
481
+ if (!headTx) {
482
+ warnings.push(`Could not find chain head tx at nonce ${chainHeadNonce} in mempool. It may have confirmed already.`);
483
+ }
484
+ else if (headTx.sponsored) {
485
+ actions.push({
486
+ type: "bump_head",
487
+ nonce: chainHeadNonce,
488
+ originalTxid: headTx.tx_id,
489
+ newTxid: null,
490
+ status: "skipped",
491
+ reason: "Sponsored tx — sender cannot RBF. Relay must recover.",
492
+ });
493
+ }
494
+ else {
495
+ // Fetch the full tx for tx_type
496
+ const fullTx = await getHiroApi(NETWORK)
497
+ .getTransaction(headTx.tx_id)
498
+ .catch(() => null);
499
+ if (fullTx?.tx_type === "token_transfer") {
500
+ const originalFee = parseInt(headTx.fee_rate ?? "0", 10);
501
+ const newFee = Math.ceil(originalFee * (feeMultiplier ?? 1.5));
502
+ actions.push({
503
+ type: "bump_head",
504
+ nonce: chainHeadNonce,
505
+ originalTxid: headTx.tx_id,
506
+ newTxid: null,
507
+ newFee: String(newFee),
508
+ status: "proposed",
509
+ });
510
+ }
511
+ else {
512
+ actions.push({
513
+ type: "bump_head",
514
+ nonce: chainHeadNonce,
515
+ originalTxid: headTx.tx_id,
516
+ newTxid: null,
517
+ status: "skipped",
518
+ reason: `Manual RBF needed for ${fullTx?.tx_type ?? "unknown"} at nonce ${chainHeadNonce} — rebuild and resubmit manually.`,
519
+ });
520
+ }
521
+ }
522
+ }
523
+ const gapCount = gapsFound.length;
524
+ const bumpAction = actions.find((a) => a.type === "bump_head");
525
+ const summary = gapCount === 0 && !bumpAction
526
+ ? "No gaps found and no head bump needed. Nonce state looks healthy."
527
+ : `Would fill ${gapCount} gap(s)${bumpAction ? ` and ${bumpAction.status === "proposed" ? "bump" : "skip"} chain head at nonce ${bumpAction.nonce}` : ""}. Set dryRun=false to execute.`;
528
+ return createJsonResponse({
529
+ address,
530
+ dryRun: true,
531
+ confirmedNonce,
532
+ gapsFound,
533
+ actions,
534
+ warnings,
535
+ summary,
536
+ });
537
+ }
538
+ // ----------------------------------------------------------------
539
+ // Execute mode
540
+ // ----------------------------------------------------------------
541
+ const fee = await resolveDefaultFee(NETWORK, "token_transfer");
542
+ // Fill each gap
543
+ for (const n of gapsFound) {
544
+ try {
545
+ const result = await broadcastGapFill(walletAccount.privateKey, walletAccount.address, n, fee);
546
+ actions.push({ type: "fill_gap", ...result });
547
+ if (result.status === "failed") {
548
+ warnings.push(`Gap fill at nonce ${n} failed: ${result.error}`);
549
+ }
550
+ }
551
+ catch (err) {
552
+ const msg = err instanceof Error ? err.message : String(err);
553
+ actions.push({ type: "fill_gap", nonce: n, txid: null, status: "failed", error: msg });
554
+ warnings.push(`Gap fill at nonce ${n} threw: ${msg}`);
555
+ }
556
+ }
557
+ // RBF bump chain head
558
+ if (bumpHead && chainHeadNonce !== undefined) {
559
+ const mempoolResult = await getHiroApi(NETWORK)
560
+ .getMempoolTransactions({ sender_address: address, limit: 50 })
561
+ .catch(() => null);
562
+ const headTx = mempoolResult?.results.find((tx) => tx.nonce === chainHeadNonce);
563
+ if (!headTx) {
564
+ warnings.push(`Could not find chain head tx at nonce ${chainHeadNonce} in mempool. It may have confirmed already.`);
565
+ }
566
+ else if (headTx.sponsored) {
567
+ actions.push({
568
+ type: "bump_head",
569
+ nonce: chainHeadNonce,
570
+ originalTxid: headTx.tx_id,
571
+ newTxid: null,
572
+ status: "skipped",
573
+ reason: "Sponsored tx — sender cannot RBF. Relay must recover.",
574
+ });
575
+ }
576
+ else {
577
+ const fullTx = await getHiroApi(NETWORK)
578
+ .getTransaction(headTx.tx_id)
579
+ .catch(() => null);
580
+ if (fullTx?.tx_type === "token_transfer") {
581
+ try {
582
+ const originalFee = parseInt(headTx.fee_rate ?? "0", 10);
583
+ const newFee = Math.ceil(originalFee * (feeMultiplier ?? 1.5));
584
+ const rbfTx = await makeSTXTokenTransfer({
585
+ recipient: POX_BURN_ADDRESS,
586
+ amount: 1n,
587
+ senderKey: walletAccount.privateKey,
588
+ network: getStacksNetwork(NETWORK),
589
+ memo: `rbf-bump:${chainHeadNonce}`,
590
+ nonce: BigInt(chainHeadNonce),
591
+ fee: BigInt(newFee),
592
+ });
593
+ const rbfBroadcast = await broadcastTransaction({
594
+ transaction: rbfTx,
595
+ network: getStacksNetwork(NETWORK),
596
+ });
597
+ if ("error" in rbfBroadcast) {
598
+ actions.push({
599
+ type: "bump_head",
600
+ nonce: chainHeadNonce,
601
+ originalTxid: headTx.tx_id,
602
+ newTxid: null,
603
+ newFee: String(newFee),
604
+ status: "failed",
605
+ error: `${rbfBroadcast.error} - ${rbfBroadcast.reason}`,
606
+ });
607
+ warnings.push(`RBF bump at nonce ${chainHeadNonce} failed: ${rbfBroadcast.error}`);
608
+ }
609
+ else {
610
+ await recordNonceUsed(walletAccount.address, chainHeadNonce, rbfBroadcast.txid);
611
+ actions.push({
612
+ type: "bump_head",
613
+ nonce: chainHeadNonce,
614
+ originalTxid: headTx.tx_id,
615
+ newTxid: rbfBroadcast.txid,
616
+ newFee: String(newFee),
617
+ status: "broadcast",
618
+ });
619
+ }
620
+ }
621
+ catch (err) {
622
+ const msg = err instanceof Error ? err.message : String(err);
623
+ actions.push({
624
+ type: "bump_head",
625
+ nonce: chainHeadNonce,
626
+ originalTxid: headTx.tx_id,
627
+ newTxid: null,
628
+ status: "failed",
629
+ error: msg,
630
+ });
631
+ warnings.push(`RBF bump at nonce ${chainHeadNonce} threw: ${msg}`);
632
+ }
633
+ }
634
+ else {
635
+ actions.push({
636
+ type: "bump_head",
637
+ nonce: chainHeadNonce,
638
+ originalTxid: headTx.tx_id,
639
+ newTxid: null,
640
+ status: "skipped",
641
+ reason: `Manual RBF needed for ${fullTx?.tx_type ?? "unknown"} at nonce ${chainHeadNonce} — rebuild and resubmit manually.`,
642
+ });
643
+ }
644
+ }
645
+ }
646
+ // Build summary
647
+ const filledCount = actions.filter((a) => a.type === "fill_gap" && a.status === "broadcast").length;
648
+ const failedGaps = actions.filter((a) => a.type === "fill_gap" && a.status === "failed").length;
649
+ const bumpAction = actions.find((a) => a.type === "bump_head");
650
+ let summary = "";
651
+ if (filledCount > 0) {
652
+ summary += `Filled ${filledCount} gap(s). `;
653
+ }
654
+ if (failedGaps > 0) {
655
+ summary += `${failedGaps} gap fill(s) failed (see warnings). `;
656
+ }
657
+ if (bumpAction) {
658
+ if (bumpAction.status === "broadcast") {
659
+ summary += `Bumped chain head at nonce ${bumpAction.nonce}. Chain should unstick within 1-2 blocks.`;
660
+ }
661
+ else if (bumpAction.status === "skipped") {
662
+ summary += `Chain head at nonce ${bumpAction.nonce} skipped: ${bumpAction.reason}`;
663
+ }
664
+ else if (bumpAction.status === "failed") {
665
+ summary += `Chain head bump at nonce ${bumpAction.nonce} failed (see warnings).`;
666
+ }
667
+ }
668
+ if (!summary) {
669
+ summary =
670
+ gapsFound.length === 0
671
+ ? "No gaps found. Nonce state looks healthy."
672
+ : "Actions attempted — check action statuses for details.";
673
+ }
674
+ return createJsonResponse({
675
+ address,
676
+ dryRun: false,
677
+ confirmedNonce,
678
+ gapsFound,
679
+ actions,
680
+ warnings,
681
+ summary: summary.trim(),
215
682
  });
216
683
  }
217
684
  catch (error) {