@aibtc/mcp-server 1.3.1 → 1.4.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.
@@ -3,10 +3,10 @@ import { Network } from "./networks.js";
3
3
  * Known contract addresses for mainnet
4
4
  */
5
5
  export declare const MAINNET_CONTRACTS: {
6
- readonly SBTC_TOKEN: "SM3VDXK3WZZSA84XXFQ5FDMR6S8N5XQSEK4KMR5E5.sbtc-token";
7
- readonly SBTC_DEPOSIT: "SM3VDXK3WZZSA84XXFQ5FDMR6S8N5XQSEK4KMR5E5.sbtc-deposit";
8
- readonly SBTC_REGISTRY: "SM3VDXK3WZZSA84XXFQ5FDMR6S8N5XQSEK4KMR5E5.sbtc-registry";
9
- readonly USDCX: "SP2XD7417HGPRTREMKF748VNEQPDRR0RMANB7X1NK.token-usdcx";
6
+ readonly SBTC_TOKEN: "SM3VDXK3WZZSA84XXFKAFAF15NNZX32CTSG82JFQ4.sbtc-token";
7
+ readonly SBTC_DEPOSIT: "SM3VDXK3WZZSA84XXFKAFAF15NNZX32CTSG82JFQ4.sbtc-deposit";
8
+ readonly SBTC_REGISTRY: "SM3VDXK3WZZSA84XXFKAFAF15NNZX32CTSG82JFQ4.sbtc-registry";
9
+ readonly USDCX: "SP120SBRBQJ00MCWS7TM5R8WJNTTKD5K0HFRC2CNE.usdcx";
10
10
  readonly BNS: "SP000000000000000000002Q6VF78.bns";
11
11
  readonly POX_4: "SP000000000000000000002Q6VF78.pox-4";
12
12
  readonly ALEX_AMM_POOL: "SP3K8BC0PPEVCV7NZ6QSRWPQ2JE9E5B6N3PA0KBR9.amm-swap-pool-v1-1";
@@ -41,7 +41,7 @@ export declare const TESTNET_CONTRACTS: {
41
41
  readonly SBTC_TOKEN: "ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM.sbtc-token";
42
42
  readonly SBTC_DEPOSIT: "ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM.sbtc-deposit";
43
43
  readonly SBTC_REGISTRY: "ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM.sbtc-registry";
44
- readonly USDCX: "ST2XD7417HGPRTREMKF748VNEQPDRR0RMANB7X1NK.token-usdcx";
44
+ readonly USDCX: "ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM.usdcx";
45
45
  readonly BNS: "ST000000000000000000002AMW42H.bns";
46
46
  readonly POX_4: "ST000000000000000000002AMW42H.pox-4";
47
47
  };
@@ -49,10 +49,10 @@ export declare const TESTNET_CONTRACTS: {
49
49
  * Get contract addresses for the specified network
50
50
  */
51
51
  export declare function getContracts(network: Network): {
52
- readonly SBTC_TOKEN: "SM3VDXK3WZZSA84XXFQ5FDMR6S8N5XQSEK4KMR5E5.sbtc-token";
53
- readonly SBTC_DEPOSIT: "SM3VDXK3WZZSA84XXFQ5FDMR6S8N5XQSEK4KMR5E5.sbtc-deposit";
54
- readonly SBTC_REGISTRY: "SM3VDXK3WZZSA84XXFQ5FDMR6S8N5XQSEK4KMR5E5.sbtc-registry";
55
- readonly USDCX: "SP2XD7417HGPRTREMKF748VNEQPDRR0RMANB7X1NK.token-usdcx";
52
+ readonly SBTC_TOKEN: "SM3VDXK3WZZSA84XXFKAFAF15NNZX32CTSG82JFQ4.sbtc-token";
53
+ readonly SBTC_DEPOSIT: "SM3VDXK3WZZSA84XXFKAFAF15NNZX32CTSG82JFQ4.sbtc-deposit";
54
+ readonly SBTC_REGISTRY: "SM3VDXK3WZZSA84XXFKAFAF15NNZX32CTSG82JFQ4.sbtc-registry";
55
+ readonly USDCX: "SP120SBRBQJ00MCWS7TM5R8WJNTTKD5K0HFRC2CNE.usdcx";
56
56
  readonly BNS: "SP000000000000000000002Q6VF78.bns";
57
57
  readonly POX_4: "SP000000000000000000002Q6VF78.pox-4";
58
58
  readonly ALEX_AMM_POOL: "SP3K8BC0PPEVCV7NZ6QSRWPQ2JE9E5B6N3PA0KBR9.amm-swap-pool-v1-1";
@@ -65,7 +65,7 @@ export declare function getContracts(network: Network): {
65
65
  readonly SBTC_TOKEN: "ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM.sbtc-token";
66
66
  readonly SBTC_DEPOSIT: "ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM.sbtc-deposit";
67
67
  readonly SBTC_REGISTRY: "ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM.sbtc-registry";
68
- readonly USDCX: "ST2XD7417HGPRTREMKF748VNEQPDRR0RMANB7X1NK.token-usdcx";
68
+ readonly USDCX: "ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM.usdcx";
69
69
  readonly BNS: "ST000000000000000000002AMW42H.bns";
70
70
  readonly POX_4: "ST000000000000000000002AMW42H.pox-4";
71
71
  };
@@ -83,15 +83,15 @@ export declare function parseContractId(contractId: string): {
83
83
  export declare const WELL_KNOWN_TOKENS: {
84
84
  readonly mainnet: {
85
85
  readonly STX: "native";
86
- readonly sBTC: "SM3VDXK3WZZSA84XXFQ5FDMR6S8N5XQSEK4KMR5E5.sbtc-token";
87
- readonly USDCx: "SP2XD7417HGPRTREMKF748VNEQPDRR0RMANB7X1NK.token-usdcx";
86
+ readonly sBTC: "SM3VDXK3WZZSA84XXFKAFAF15NNZX32CTSG82JFQ4.sbtc-token";
87
+ readonly USDCx: "SP120SBRBQJ00MCWS7TM5R8WJNTTKD5K0HFRC2CNE.usdcx";
88
88
  readonly ALEX: "SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.token-alex";
89
89
  readonly wSTX: "SP3K8BC0PPEVCV7NZ6QSRWPQ2JE9E5B6N3PA0KBR9.token-wstx-v2";
90
90
  };
91
91
  readonly testnet: {
92
92
  readonly STX: "native";
93
93
  readonly sBTC: "ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM.sbtc-token";
94
- readonly USDCx: "ST2XD7417HGPRTREMKF748VNEQPDRR0RMANB7X1NK.token-usdcx";
94
+ readonly USDCx: "ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM.usdcx";
95
95
  };
96
96
  };
97
97
  /**
@@ -111,14 +111,14 @@ export declare function getZestContracts(network: Network): {
111
111
  } | null;
112
112
  export declare function getWellKnownTokens(network: Network): {
113
113
  readonly STX: "native";
114
- readonly sBTC: "SM3VDXK3WZZSA84XXFQ5FDMR6S8N5XQSEK4KMR5E5.sbtc-token";
115
- readonly USDCx: "SP2XD7417HGPRTREMKF748VNEQPDRR0RMANB7X1NK.token-usdcx";
114
+ readonly sBTC: "SM3VDXK3WZZSA84XXFKAFAF15NNZX32CTSG82JFQ4.sbtc-token";
115
+ readonly USDCx: "SP120SBRBQJ00MCWS7TM5R8WJNTTKD5K0HFRC2CNE.usdcx";
116
116
  readonly ALEX: "SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.token-alex";
117
117
  readonly wSTX: "SP3K8BC0PPEVCV7NZ6QSRWPQ2JE9E5B6N3PA0KBR9.token-wstx-v2";
118
118
  } | {
119
119
  readonly STX: "native";
120
120
  readonly sBTC: "ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM.sbtc-token";
121
- readonly USDCx: "ST2XD7417HGPRTREMKF748VNEQPDRR0RMANB7X1NK.token-usdcx";
121
+ readonly USDCx: "ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM.usdcx";
122
122
  };
123
123
  /**
124
124
  * Bitflow DEX contract addresses
@@ -3,11 +3,11 @@
3
3
  */
4
4
  export const MAINNET_CONTRACTS = {
5
5
  // sBTC
6
- SBTC_TOKEN: "SM3VDXK3WZZSA84XXFQ5FDMR6S8N5XQSEK4KMR5E5.sbtc-token",
7
- SBTC_DEPOSIT: "SM3VDXK3WZZSA84XXFQ5FDMR6S8N5XQSEK4KMR5E5.sbtc-deposit",
8
- SBTC_REGISTRY: "SM3VDXK3WZZSA84XXFQ5FDMR6S8N5XQSEK4KMR5E5.sbtc-registry",
6
+ SBTC_TOKEN: "SM3VDXK3WZZSA84XXFKAFAF15NNZX32CTSG82JFQ4.sbtc-token",
7
+ SBTC_DEPOSIT: "SM3VDXK3WZZSA84XXFKAFAF15NNZX32CTSG82JFQ4.sbtc-deposit",
8
+ SBTC_REGISTRY: "SM3VDXK3WZZSA84XXFKAFAF15NNZX32CTSG82JFQ4.sbtc-registry",
9
9
  // Stablecoins
10
- USDCX: "SP2XD7417HGPRTREMKF748VNEQPDRR0RMANB7X1NK.token-usdcx",
10
+ USDCX: "SP120SBRBQJ00MCWS7TM5R8WJNTTKD5K0HFRC2CNE.usdcx",
11
11
  // BNS
12
12
  BNS: "SP000000000000000000002Q6VF78.bns",
13
13
  // Stacking
@@ -128,7 +128,7 @@ export const TESTNET_CONTRACTS = {
128
128
  SBTC_DEPOSIT: "ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM.sbtc-deposit",
129
129
  SBTC_REGISTRY: "ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM.sbtc-registry",
130
130
  // Stablecoins
131
- USDCX: "ST2XD7417HGPRTREMKF748VNEQPDRR0RMANB7X1NK.token-usdcx",
131
+ USDCX: "ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM.usdcx",
132
132
  // BNS
133
133
  BNS: "ST000000000000000000002AMW42H.bns",
134
134
  // Stacking
@@ -1 +1 @@
1
- {"version":3,"file":"contracts.js","sourceRoot":"","sources":["../../src/config/contracts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"contracts.js","sourceRoot":"","sources":["../../src/config/contracts.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,OAAO;IACP,UAAU,EAAE,sDAAsD;IAClE,YAAY,EAAE,wDAAwD;IACtE,aAAa,EAAE,yDAAyD;IAExE,cAAc;IACd,KAAK,EAAE,iDAAiD;IAExD,MAAM;IACN,GAAG,EAAE,mCAAmC;IAExC,WAAW;IACX,KAAK,EAAE,qCAAqC;IAE5C,gFAAgF;IAChF,aAAa,EAAE,8DAA8D;IAC7E,UAAU,EAAE,sDAAsD;IAClE,SAAS,EAAE,yDAAyD;IAEpE,gBAAgB;IAChB,gBAAgB,EAAE,2DAA2D;IAC7E,iBAAiB,EAAE,yDAAyD;IAC5E,oBAAoB,EAAE,2DAA2D;CACzE,CAAC;AAeX,MAAM,CAAC,MAAM,WAAW,GAAoC;IAC1D,IAAI,EAAE;QACJ,KAAK,EAAE,sDAAsD;QAC7D,OAAO,EAAE,qDAAqD;QAC9D,MAAM,EAAE,8DAA8D;QACtE,QAAQ,EAAE,CAAC;QACX,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,MAAM;KACb;IACD,MAAM,EAAE;QACN,KAAK,EAAE,wDAAwD;QAC/D,OAAO,EAAE,uDAAuD;QAChE,MAAM,EAAE,6DAA6D;QACrE,QAAQ,EAAE,CAAC;QACX,MAAM,EAAE,QAAQ;QAChB,IAAI,EAAE,WAAW;KAClB;IACD,IAAI,EAAE;QACJ,KAAK,EAAE,wDAAwD;QAC/D,OAAO,EAAE,qDAAqD;QAC9D,MAAM,EAAE,2DAA2D;QACnE,QAAQ,EAAE,CAAC;QACX,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,iBAAiB;KACxB;IACD,KAAK,EAAE;QACL,KAAK,EAAE,sDAAsD;QAC7D,OAAO,EAAE,sDAAsD;QAC/D,MAAM,EAAE,8DAA8D;QACtE,QAAQ,EAAE,CAAC;QACX,MAAM,EAAE,OAAO;QACf,IAAI,EAAE,aAAa;KACpB;IACD,IAAI,EAAE;QACJ,KAAK,EAAE,+CAA+C;QACtD,OAAO,EAAE,qDAAqD;QAC9D,MAAM,EAAE,8DAA8D;QACtE,QAAQ,EAAE,CAAC;QACX,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,aAAa;KACpB;IACD,KAAK,EAAE;QACL,KAAK,EAAE,uDAAuD;QAC9D,OAAO,EAAE,sDAAsD;QAC/D,MAAM,EAAE,4DAA4D;QACpE,QAAQ,EAAE,CAAC;QACX,MAAM,EAAE,OAAO;QACf,IAAI,EAAE,aAAa;KACpB;IACD,IAAI,EAAE;QACJ,KAAK,EAAE,sDAAsD;QAC7D,OAAO,EAAE,qDAAqD;QAC9D,MAAM,EAAE,2DAA2D;QACnE,QAAQ,EAAE,CAAC;QACX,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,iBAAiB;KACxB;IACD,IAAI,EAAE;QACJ,KAAK,EAAE,0DAA0D;QACjE,OAAO,EAAE,qDAAqD;QAC9D,MAAM,EAAE,2DAA2D;QACnE,QAAQ,EAAE,CAAC;QACX,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,gBAAgB;KACvB;IACD,IAAI,EAAE;QACJ,KAAK,EAAE,sDAAsD;QAC7D,OAAO,EAAE,qDAAqD;QAC9D,MAAM,EAAE,2DAA2D;QACnE,QAAQ,EAAE,CAAC;QACX,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,YAAY;KACnB;IACD,WAAW,EAAE;QACX,KAAK,EAAE,4DAA4D;QACnE,OAAO,EAAE,4DAA4D;QACrE,MAAM,EAAE,8DAA8D;QACtE,QAAQ,EAAE,CAAC;QACX,MAAM,EAAE,WAAW;QACnB,IAAI,EAAE,iBAAiB;KACxB;CACF,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAsB;IACjD,WAAW,CAAC,KAAK;IACjB,WAAW,CAAC,MAAM;IAClB,WAAW,CAAC,IAAI;IAChB,WAAW,CAAC,IAAI;IAChB,WAAW,CAAC,IAAI;IAChB,WAAW,CAAC,KAAK;IACjB,WAAW,CAAC,IAAI;IAChB,WAAW,CAAC,IAAI;IAChB,WAAW,CAAC,IAAI;IAChB,WAAW,CAAC,WAAW,CAAC;CACzB,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,iBAAiB;IACjB,UAAU,EAAE,sDAAsD;IAClE,YAAY,EAAE,wDAAwD;IACtE,aAAa,EAAE,yDAAyD;IAExE,cAAc;IACd,KAAK,EAAE,iDAAiD;IAExD,MAAM;IACN,GAAG,EAAE,mCAAmC;IAExC,WAAW;IACX,KAAK,EAAE,qCAAqC;CACpC,CAAC;AAEX;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,OAAgB;IAC3C,OAAO,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,iBAAiB,CAAC;AACvE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,UAAkB;IAChD,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9C,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,wBAAwB,UAAU,EAAE,CAAC,CAAC;IACxD,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC3B,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,OAAO,EAAE;QACP,GAAG,EAAE,QAAQ;QACb,IAAI,EAAE,iBAAiB,CAAC,UAAU;QAClC,KAAK,EAAE,iBAAiB,CAAC,KAAK;QAC9B,IAAI,EAAE,iBAAiB,CAAC,UAAU;QAClC,IAAI,EAAE,iBAAiB,CAAC,SAAS;KAClC;IACD,OAAO,EAAE;QACP,GAAG,EAAE,QAAQ;QACb,IAAI,EAAE,iBAAiB,CAAC,UAAU;QAClC,KAAK,EAAE,iBAAiB,CAAC,KAAK;KAC/B;CACO,CAAC;AAEX;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAgB;IAC/C,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO;YACL,OAAO,EAAE,iBAAiB,CAAC,aAAa;SACzC,CAAC;IACJ,CAAC;IACD,iCAAiC;IACjC,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAgB;IAC/C,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO;YACL,UAAU,EAAE,iBAAiB,CAAC,gBAAgB;YAC9C,WAAW,EAAE,iBAAiB,CAAC,iBAAiB;YAChD,cAAc,EAAE,iBAAiB,CAAC,oBAAoB;SACvD,CAAC;IACJ,CAAC;IACD,iCAAiC;IACjC,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,OAAgB;IACjD,OAAO,iBAAiB,CAAC,OAAO,CAAC,CAAC;AACpC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,OAAO,EAAE;QACP,wCAAwC;QACxC,OAAO,EAAE,0CAA0C;QACnD,qBAAqB;QACrB,GAAG,EAAE,2CAA2C;KACjD;IACD,OAAO,EAAE;QACP,OAAO,EAAE,0CAA0C;QACnD,GAAG,EAAE,IAAI;KACV;CACO,CAAC;AAaX;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB;IAC9B,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;IAC7C,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;IAC3C,MAAM,mBAAmB,GAAG,OAAO,CAAC,GAAG,CAAC,yBAAyB,IAAI,qBAAqB,CAAC;IAE3F,mEAAmE;IACnE,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO;QACL,OAAO,EAAE,OAAO,IAAI,EAAE;QACtB,MAAM;QACN,mBAAmB;QACnB,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,uBAAuB;QAClD,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,sBAAsB;KACjD,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAAgB;IAClD,OAAO,iBAAiB,CAAC,OAAO,CAAC,CAAC;AACpC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,yDAAyD,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare const PILLAR_API_URL: string;
2
+ export declare const PILLAR_API_KEY: string;
3
+ //# sourceMappingURL=pillar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pillar.d.ts","sourceRoot":"","sources":["../../src/config/pillar.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,cAAc,QAAwD,CAAC;AACpF,eAAO,MAAM,cAAc,QAAmC,CAAC"}
@@ -0,0 +1,4 @@
1
+ // Pillar API configuration
2
+ export const PILLAR_API_URL = process.env.PILLAR_API_URL || "https://pillarbtc.com";
3
+ export const PILLAR_API_KEY = process.env.PILLAR_API_KEY || "";
4
+ //# sourceMappingURL=pillar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pillar.js","sourceRoot":"","sources":["../../src/config/pillar.ts"],"names":[],"mappings":"AAAA,2BAA2B;AAC3B,MAAM,CAAC,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,uBAAuB,CAAC;AACpF,MAAM,CAAC,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,EAAE,CAAC"}
@@ -0,0 +1,11 @@
1
+ declare class PillarApiService {
2
+ private baseUrl;
3
+ private apiKey;
4
+ constructor();
5
+ private request;
6
+ get<T>(path: string, queryParams?: Record<string, string | number | boolean | undefined>): Promise<T>;
7
+ post<T>(path: string, body?: unknown): Promise<T>;
8
+ }
9
+ export declare function getPillarApi(): PillarApiService;
10
+ export {};
11
+ //# sourceMappingURL=pillar-api.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pillar-api.service.d.ts","sourceRoot":"","sources":["../../src/services/pillar-api.service.ts"],"names":[],"mappings":"AAEA,cAAM,gBAAgB;IACpB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAS;;YAOT,OAAO;IAwCf,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAIrG,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;CAGxD;AAID,wBAAgB,YAAY,IAAI,gBAAgB,CAK/C"}
@@ -0,0 +1,53 @@
1
+ import { PILLAR_API_URL, PILLAR_API_KEY } from "../config/pillar.js";
2
+ class PillarApiService {
3
+ baseUrl;
4
+ apiKey;
5
+ constructor() {
6
+ this.baseUrl = PILLAR_API_URL;
7
+ this.apiKey = PILLAR_API_KEY;
8
+ }
9
+ async request(method, path, body, queryParams) {
10
+ let url = `${this.baseUrl}${path}`;
11
+ if (queryParams) {
12
+ const params = new URLSearchParams();
13
+ for (const [key, value] of Object.entries(queryParams)) {
14
+ if (value !== undefined) {
15
+ params.set(key, String(value));
16
+ }
17
+ }
18
+ const qs = params.toString();
19
+ if (qs)
20
+ url += `?${qs}`;
21
+ }
22
+ const headers = {
23
+ "Content-Type": "application/json",
24
+ };
25
+ if (this.apiKey) {
26
+ headers["Authorization"] = `Bearer ${this.apiKey}`;
27
+ }
28
+ const response = await fetch(url, {
29
+ method,
30
+ headers,
31
+ body: body ? JSON.stringify(body) : undefined,
32
+ });
33
+ if (!response.ok) {
34
+ const errorText = await response.text();
35
+ throw new Error(`Pillar API error (${response.status}): ${errorText}`);
36
+ }
37
+ return response.json();
38
+ }
39
+ async get(path, queryParams) {
40
+ return this.request("GET", path, undefined, queryParams);
41
+ }
42
+ async post(path, body) {
43
+ return this.request("POST", path, body);
44
+ }
45
+ }
46
+ let _instance = null;
47
+ export function getPillarApi() {
48
+ if (!_instance) {
49
+ _instance = new PillarApiService();
50
+ }
51
+ return _instance;
52
+ }
53
+ //# sourceMappingURL=pillar-api.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pillar-api.service.js","sourceRoot":"","sources":["../../src/services/pillar-api.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErE,MAAM,gBAAgB;IACZ,OAAO,CAAS;IAChB,MAAM,CAAS;IAEvB;QACE,IAAI,CAAC,OAAO,GAAG,cAAc,CAAC;QAC9B,IAAI,CAAC,MAAM,GAAG,cAAc,CAAC;IAC/B,CAAC;IAEO,KAAK,CAAC,OAAO,CACnB,MAAc,EACd,IAAY,EACZ,IAAc,EACd,WAAmE;QAEnE,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE,CAAC;QAEnC,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;YACrC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;gBACvD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;oBACxB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;gBACjC,CAAC;YACH,CAAC;YACD,MAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;YAC7B,IAAI,EAAE;gBAAE,GAAG,IAAI,IAAI,EAAE,EAAE,CAAC;QAC1B,CAAC;QAED,MAAM,OAAO,GAA2B;YACtC,cAAc,EAAE,kBAAkB;SACnC,CAAC;QACF,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,IAAI,CAAC,MAAM,EAAE,CAAC;QACrD,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAChC,MAAM;YACN,OAAO;YACP,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;SAC9C,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,qBAAqB,QAAQ,CAAC,MAAM,MAAM,SAAS,EAAE,CAAC,CAAC;QACzE,CAAC;QAED,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,GAAG,CAAI,IAAY,EAAE,WAAmE;QAC5F,OAAO,IAAI,CAAC,OAAO,CAAI,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;IAC9D,CAAC;IAED,KAAK,CAAC,IAAI,CAAI,IAAY,EAAE,IAAc;QACxC,OAAO,IAAI,CAAC,OAAO,CAAI,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAC7C,CAAC;CACF;AAED,IAAI,SAAS,GAA4B,IAAI,CAAC;AAE9C,MAAM,UAAU,YAAY;IAC1B,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,SAAS,GAAG,IAAI,gBAAgB,EAAE,CAAC;IACrC,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -301,7 +301,7 @@ const TOKEN_CONTRACTS: Record<'mainnet' | 'testnet', Record<'sBTC' | 'USDCx', To
301
301
  },
302
302
  testnet: {
303
303
  sBTC: { address: 'ST1F7QA2MDF17S807EPA36TSS8AMEFY4KA9TVGWXT', name: 'sbtc-token' },
304
- USDCx: { address: 'ST1NXBK3K5YYMD6FD41MVNP3JS1GABZ8TRVX023PT', name: 'usdcx' },
304
+ USDCx: { address: 'ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM', name: 'usdcx' },
305
305
  },
306
306
  };
307
307
 
@@ -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;AAoBpE;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAgDxD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAqBpE;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAmDxD"}
@@ -15,6 +15,7 @@ import { registerDefiTools } from "./defi.tools.js";
15
15
  import { registerScaffoldTools } from "./scaffold.tools.js";
16
16
  import { registerOpenRouterTools } from "./openrouter.tools.js";
17
17
  import { registerYieldHunterTools } from "./yield-hunter.tools.js";
18
+ import { registerPillarTools } from "./pillar.tools.js";
18
19
  /**
19
20
  * Register all tools with the MCP server
20
21
  */
@@ -51,5 +52,7 @@ export function registerAllTools(server) {
51
52
  registerOpenRouterTools(server);
52
53
  // Yield Hunter (autonomous sBTC yield farming)
53
54
  registerYieldHunterTools(server);
55
+ // Pillar (handoff to frontend + polling)
56
+ registerPillarTools(server);
54
57
  }
55
58
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,6BAA6B,EAAE,MAAM,8BAA8B,CAAC;AAC7E,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,+DAA+D;AAC/D,6DAA6D;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AAEnE;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAiB;IAChD,mBAAmB;IACnB,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAE5B,yDAAyD;IACzD,6BAA6B,CAAC,MAAM,CAAC,CAAC;IAEtC,YAAY;IACZ,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAE9B,kBAAkB;IAClB,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAE9B,OAAO;IACP,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAE1B,mBAAmB;IACnB,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAE3B,iBAAiB;IACjB,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAEzB,iBAAiB;IACjB,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAE9B,cAAc;IACd,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAEzB,qBAAqB;IACrB,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAE3B,iBAAiB;IACjB,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAE9B,iCAAiC;IACjC,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAE1B,+DAA+D;IAC/D,gCAAgC;IAEhC,gDAAgD;IAChD,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAE9B,0CAA0C;IAC1C,uBAAuB,CAAC,MAAM,CAAC,CAAC;IAEhC,+CAA+C;IAC/C,wBAAwB,CAAC,MAAM,CAAC,CAAC;AACnC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,6BAA6B,EAAE,MAAM,8BAA8B,CAAC;AAC7E,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,+DAA+D;AAC/D,6DAA6D;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAExD;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAiB;IAChD,mBAAmB;IACnB,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAE5B,yDAAyD;IACzD,6BAA6B,CAAC,MAAM,CAAC,CAAC;IAEtC,YAAY;IACZ,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAE9B,kBAAkB;IAClB,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAE9B,OAAO;IACP,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAE1B,mBAAmB;IACnB,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAE3B,iBAAiB;IACjB,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAEzB,iBAAiB;IACjB,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAE9B,cAAc;IACd,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAEzB,qBAAqB;IACrB,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAE3B,iBAAiB;IACjB,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAE9B,iCAAiC;IACjC,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAE1B,+DAA+D;IAC/D,gCAAgC;IAEhC,gDAAgD;IAChD,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAE9B,0CAA0C;IAC1C,uBAAuB,CAAC,MAAM,CAAC,CAAC;IAEhC,+CAA+C;IAC/C,wBAAwB,CAAC,MAAM,CAAC,CAAC;IAEjC,yCAAyC;IACzC,mBAAmB,CAAC,MAAM,CAAC,CAAC;AAC9B,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerPillarTools(server: McpServer): void;
3
+ //# sourceMappingURL=pillar.tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pillar.tools.d.ts","sourceRoot":"","sources":["../../src/tools/pillar.tools.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAqHpE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAkjC3D"}
@@ -0,0 +1,905 @@
1
+ import { z } from "zod";
2
+ import { getPillarApi } from "../services/pillar-api.service.js";
3
+ import { createJsonResponse, createErrorResponse } from "../utils/index.js";
4
+ import { exec } from "child_process";
5
+ import * as fs from "fs";
6
+ import * as path from "path";
7
+ import * as os from "os";
8
+ const PILLAR_FRONTEND_URL = "https://pillarbtc.com";
9
+ const POLL_INTERVAL_MS = 3000;
10
+ const POLL_TIMEOUT_MS = parseInt(process.env.PILLAR_POLL_TIMEOUT_MS || "300000", 10); // 5 minutes default
11
+ const MCP_DEFAULT_REFERRAL = process.env.PILLAR_DEFAULT_REFERRAL || "SPV9K21TBFAK4KNRJXF5DFP8N7W46G4V9RCJDC22.beta-v2-wallet";
12
+ const SESSION_FILE = path.join(os.homedir(), ".aibtc", "pillar-session.json");
13
+ function ensureDir(filePath) {
14
+ const dir = path.dirname(filePath);
15
+ if (!fs.existsSync(dir)) {
16
+ fs.mkdirSync(dir, { recursive: true });
17
+ }
18
+ }
19
+ function loadSession() {
20
+ try {
21
+ if (fs.existsSync(SESSION_FILE)) {
22
+ const data = fs.readFileSync(SESSION_FILE, "utf-8");
23
+ return JSON.parse(data);
24
+ }
25
+ }
26
+ catch {
27
+ // Ignore errors
28
+ }
29
+ return null;
30
+ }
31
+ function saveSession(session) {
32
+ ensureDir(SESSION_FILE);
33
+ fs.writeFileSync(SESSION_FILE, JSON.stringify(session, null, 2));
34
+ }
35
+ function clearSession() {
36
+ try {
37
+ if (fs.existsSync(SESSION_FILE)) {
38
+ fs.unlinkSync(SESSION_FILE);
39
+ }
40
+ }
41
+ catch {
42
+ // Ignore errors
43
+ }
44
+ }
45
+ // Open URL in default browser (cross-platform)
46
+ function openBrowser(url) {
47
+ return new Promise((resolve, reject) => {
48
+ const platform = process.platform;
49
+ let cmd;
50
+ if (platform === "darwin") {
51
+ cmd = `open "${url}"`;
52
+ }
53
+ else if (platform === "win32") {
54
+ cmd = `start "" "${url}"`;
55
+ }
56
+ else {
57
+ cmd = `xdg-open "${url}"`;
58
+ }
59
+ exec(cmd, (error) => {
60
+ if (error) {
61
+ reject(error);
62
+ }
63
+ else {
64
+ resolve();
65
+ }
66
+ });
67
+ });
68
+ }
69
+ // Poll for operation status
70
+ async function pollOperationStatus(opId, timeoutMs = POLL_TIMEOUT_MS) {
71
+ const api = getPillarApi();
72
+ const startTime = Date.now();
73
+ while (Date.now() - startTime < timeoutMs) {
74
+ try {
75
+ const result = await api.get(`/api/mcp/op-status/${opId}`);
76
+ if (result.status === "completed") {
77
+ return result;
78
+ }
79
+ if (result.status === "failed" || result.status === "cancelled") {
80
+ return result;
81
+ }
82
+ // Still pending, wait and retry
83
+ await new Promise((resolve) => setTimeout(resolve, POLL_INTERVAL_MS));
84
+ }
85
+ catch (error) {
86
+ // API error, wait and retry
87
+ await new Promise((resolve) => setTimeout(resolve, POLL_INTERVAL_MS));
88
+ }
89
+ }
90
+ return { status: "timeout", error: "Operation timed out waiting for completion" };
91
+ }
92
+ export function registerPillarTools(server) {
93
+ // Tool 1: Connect to Pillar (handoff to frontend, returns wallet address)
94
+ server.registerTool("pillar_connect", {
95
+ description: "Connect to your Pillar smart wallet. Opens the Pillar website - if you're logged in, " +
96
+ "it will automatically connect and return your wallet address. Use this first before other Pillar actions.",
97
+ inputSchema: {},
98
+ }, async () => {
99
+ try {
100
+ const api = getPillarApi();
101
+ // Step 1: Create connect operation
102
+ const createResult = await api.post("/api/mcp/create-op", {
103
+ action: "connect",
104
+ });
105
+ const { opId } = createResult;
106
+ // Step 2: Open frontend with operation ID
107
+ const url = `${PILLAR_FRONTEND_URL}/?op=${opId}`;
108
+ await openBrowser(url);
109
+ // Step 3: Poll for completion
110
+ const result = await pollOperationStatus(opId);
111
+ if (result.status === "completed" && result.walletAddress) {
112
+ // Save session locally
113
+ const session = {
114
+ walletAddress: result.walletAddress,
115
+ walletName: result.walletName,
116
+ connectedAt: Date.now(),
117
+ };
118
+ saveSession(session);
119
+ return createJsonResponse({
120
+ success: true,
121
+ message: `Connected to Pillar!`,
122
+ walletAddress: result.walletAddress,
123
+ walletName: result.walletName,
124
+ });
125
+ }
126
+ if (result.status === "failed") {
127
+ return createJsonResponse({
128
+ success: false,
129
+ message: result.error || "Failed to connect. Make sure you're logged into Pillar.",
130
+ });
131
+ }
132
+ if (result.status === "cancelled") {
133
+ return createJsonResponse({
134
+ success: false,
135
+ message: "Connection cancelled.",
136
+ });
137
+ }
138
+ // Timeout
139
+ return createJsonResponse({
140
+ success: false,
141
+ message: "Timed out waiting for connection. Please try again.",
142
+ });
143
+ }
144
+ catch (error) {
145
+ return createErrorResponse(error);
146
+ }
147
+ });
148
+ // Tool 2: Disconnect from Pillar
149
+ server.registerTool("pillar_disconnect", {
150
+ description: "Disconnect from Pillar. Clears locally stored wallet address.",
151
+ inputSchema: {},
152
+ }, async () => {
153
+ const session = loadSession();
154
+ clearSession();
155
+ return createJsonResponse({
156
+ success: true,
157
+ message: session
158
+ ? `Disconnected from ${session.walletName || session.walletAddress}`
159
+ : "Not connected to Pillar.",
160
+ });
161
+ });
162
+ // Tool 3: Get Pillar connection status
163
+ server.registerTool("pillar_status", {
164
+ description: "Check if you're connected to Pillar and get your wallet address.",
165
+ inputSchema: {},
166
+ }, async () => {
167
+ const session = loadSession();
168
+ if (session) {
169
+ return createJsonResponse({
170
+ connected: true,
171
+ walletAddress: session.walletAddress,
172
+ walletName: session.walletName,
173
+ connectedAt: new Date(session.connectedAt).toISOString(),
174
+ });
175
+ }
176
+ return createJsonResponse({
177
+ connected: false,
178
+ message: "Not connected to Pillar. Use pillar_connect to connect.",
179
+ });
180
+ });
181
+ // Tool 4: Send sBTC (full handoff + polling flow)
182
+ server.registerTool("pillar_send", {
183
+ description: "Send sBTC from your Pillar smart wallet. Requires being connected first (use pillar_connect). " +
184
+ "Opens the frontend for signing, then waits for confirmation. " +
185
+ "Supports three recipient types: 'bns' for BNS names (muneeb.btc), 'wallet' for Pillar wallet names (iphone), 'address' for Stacks addresses (SP...).",
186
+ inputSchema: {
187
+ to: z.string().describe("Recipient: BNS name (muneeb.btc), Pillar wallet name (iphone), or Stacks address (SP...)"),
188
+ amount: z.number().positive().describe("Amount in satoshis"),
189
+ recipientType: z.enum(["bns", "wallet", "address"]).optional().describe("Type of recipient: 'bns' (default), 'wallet' for Pillar smart wallets, or 'address' for raw Stacks addresses"),
190
+ },
191
+ }, async ({ to, amount, recipientType }) => {
192
+ try {
193
+ // Get wallet address from session
194
+ const session = loadSession();
195
+ if (!session) {
196
+ return createJsonResponse({
197
+ success: false,
198
+ message: "Not connected to Pillar. Please use pillar_connect first.",
199
+ });
200
+ }
201
+ const walletAddress = session.walletAddress;
202
+ const api = getPillarApi();
203
+ // Step 1: Create pending operation
204
+ const createResult = await api.post("/api/mcp/create-op", {
205
+ action: "send",
206
+ walletAddress,
207
+ params: {
208
+ to,
209
+ amount,
210
+ recipientType: recipientType || "bns",
211
+ },
212
+ });
213
+ const { opId } = createResult;
214
+ // Step 2: Open frontend with operation ID
215
+ const url = `${PILLAR_FRONTEND_URL}/?op=${opId}`;
216
+ await openBrowser(url);
217
+ // Step 3: Poll for completion
218
+ const result = await pollOperationStatus(opId);
219
+ if (result.status === "completed" && result.txId) {
220
+ return createJsonResponse({
221
+ success: true,
222
+ message: `Transaction submitted successfully!`,
223
+ txId: result.txId,
224
+ explorerUrl: `https://explorer.hiro.so/txid/${result.txId}?chain=mainnet`,
225
+ });
226
+ }
227
+ if (result.status === "cancelled") {
228
+ return createJsonResponse({
229
+ success: false,
230
+ message: "Transaction was cancelled by user.",
231
+ });
232
+ }
233
+ if (result.status === "failed") {
234
+ return createJsonResponse({
235
+ success: false,
236
+ message: `Transaction failed: ${result.error || "Unknown error"}`,
237
+ });
238
+ }
239
+ // Timeout
240
+ return createJsonResponse({
241
+ success: false,
242
+ message: "Timed out waiting for transaction. Check the frontend to see if it completed.",
243
+ opId,
244
+ });
245
+ }
246
+ catch (error) {
247
+ return createErrorResponse(error);
248
+ }
249
+ });
250
+ // Tool 5: Fund wallet (multiple methods)
251
+ server.registerTool("pillar_fund", {
252
+ description: "Fund your Pillar smart wallet. Supports multiple methods:\n" +
253
+ "- 'exchange': Deposit BTC from an exchange (Coinbase, Binance, etc.) - generates a deposit address\n" +
254
+ "- 'btc': Deposit BTC from your Leather/Xverse wallet - auto-converts to sBTC\n" +
255
+ "- 'sbtc': Deposit sBTC directly from your Leather/Xverse wallet\n" +
256
+ "Opens the frontend with the appropriate deposit flow.",
257
+ inputSchema: {
258
+ method: z.enum(["exchange", "btc", "sbtc"]).describe("Funding method: 'exchange' (deposit from Coinbase/Binance), 'btc' (from Leather/Xverse BTC), 'sbtc' (from Leather/Xverse sBTC)"),
259
+ amount: z.number().positive().optional().describe("Amount in satoshis to deposit (optional, can be set in UI)"),
260
+ },
261
+ }, async ({ method, amount }) => {
262
+ try {
263
+ const session = loadSession();
264
+ if (!session) {
265
+ return createJsonResponse({
266
+ success: false,
267
+ message: "Not connected to Pillar. Please use pillar_connect first.",
268
+ });
269
+ }
270
+ const api = getPillarApi();
271
+ const createResult = await api.post("/api/mcp/create-op", {
272
+ action: "fund",
273
+ walletAddress: session.walletAddress,
274
+ params: { method, amount },
275
+ });
276
+ const { opId } = createResult;
277
+ await openBrowser(`${PILLAR_FRONTEND_URL}/?op=${opId}`);
278
+ const result = await pollOperationStatus(opId);
279
+ if (result.status === "completed" && result.txId) {
280
+ const methodLabels = {
281
+ exchange: "Exchange deposit",
282
+ btc: "BTC deposit",
283
+ sbtc: "sBTC deposit",
284
+ };
285
+ return createJsonResponse({
286
+ success: true,
287
+ message: `${methodLabels[method] || "Deposit"} submitted successfully!`,
288
+ txId: result.txId,
289
+ explorerUrl: `https://explorer.hiro.so/txid/${result.txId}?chain=mainnet`,
290
+ });
291
+ }
292
+ if (result.status === "cancelled") {
293
+ return createJsonResponse({ success: false, message: "Deposit cancelled." });
294
+ }
295
+ if (result.status === "failed") {
296
+ return createJsonResponse({ success: false, message: `Deposit failed: ${result.error || "Unknown error"}` });
297
+ }
298
+ return createJsonResponse({ success: false, message: "Timed out waiting for deposit.", opId });
299
+ }
300
+ catch (error) {
301
+ return createErrorResponse(error);
302
+ }
303
+ });
304
+ // Tool 6: Add backup admin
305
+ server.registerTool("pillar_add_admin", {
306
+ description: "Add a backup admin address to your Pillar smart wallet for recovery purposes. " +
307
+ "The admin can help recover funds if you lose access to your passkey.",
308
+ inputSchema: {
309
+ adminAddress: z.string().optional().describe("Stacks address (SP...) to add as backup admin (can be set in UI)"),
310
+ },
311
+ }, async ({ adminAddress }) => {
312
+ try {
313
+ const session = loadSession();
314
+ if (!session) {
315
+ return createJsonResponse({
316
+ success: false,
317
+ message: "Not connected to Pillar. Please use pillar_connect first.",
318
+ });
319
+ }
320
+ const api = getPillarApi();
321
+ const createResult = await api.post("/api/mcp/create-op", {
322
+ action: "add-admin",
323
+ walletAddress: session.walletAddress,
324
+ params: { adminAddress },
325
+ });
326
+ const { opId } = createResult;
327
+ await openBrowser(`${PILLAR_FRONTEND_URL}/?op=${opId}`);
328
+ const result = await pollOperationStatus(opId);
329
+ if (result.status === "completed" && result.txId) {
330
+ return createJsonResponse({
331
+ success: true,
332
+ message: "Backup admin added successfully!",
333
+ txId: result.txId,
334
+ explorerUrl: `https://explorer.hiro.so/txid/${result.txId}?chain=mainnet`,
335
+ });
336
+ }
337
+ if (result.status === "cancelled") {
338
+ return createJsonResponse({ success: false, message: "Add admin cancelled." });
339
+ }
340
+ if (result.status === "failed") {
341
+ return createJsonResponse({ success: false, message: `Add admin failed: ${result.error || "Unknown error"}` });
342
+ }
343
+ return createJsonResponse({ success: false, message: "Timed out waiting for add admin.", opId });
344
+ }
345
+ catch (error) {
346
+ return createErrorResponse(error);
347
+ }
348
+ });
349
+ // Tool 7: Supply sBTC to Zest
350
+ server.registerTool("pillar_supply", {
351
+ description: "Supply sBTC from your Pillar smart wallet to Zest Protocol to earn yield. " +
352
+ "Your sBTC will be deposited as collateral and earn interest.",
353
+ inputSchema: {
354
+ amount: z.number().positive().optional().describe("Amount in satoshis to supply (optional, can be set in UI)"),
355
+ },
356
+ }, async ({ amount }) => {
357
+ try {
358
+ const session = loadSession();
359
+ if (!session) {
360
+ return createJsonResponse({
361
+ success: false,
362
+ message: "Not connected to Pillar. Please use pillar_connect first.",
363
+ });
364
+ }
365
+ const api = getPillarApi();
366
+ const createResult = await api.post("/api/mcp/create-op", {
367
+ action: "supply",
368
+ walletAddress: session.walletAddress,
369
+ params: { amount },
370
+ });
371
+ const { opId } = createResult;
372
+ await openBrowser(`${PILLAR_FRONTEND_URL}/?op=${opId}`);
373
+ const result = await pollOperationStatus(opId);
374
+ if (result.status === "completed" && result.txId) {
375
+ return createJsonResponse({
376
+ success: true,
377
+ message: "Supply to Zest submitted successfully!",
378
+ txId: result.txId,
379
+ explorerUrl: `https://explorer.hiro.so/txid/${result.txId}?chain=mainnet`,
380
+ });
381
+ }
382
+ if (result.status === "cancelled") {
383
+ return createJsonResponse({ success: false, message: "Supply cancelled." });
384
+ }
385
+ if (result.status === "failed") {
386
+ return createJsonResponse({ success: false, message: `Supply failed: ${result.error || "Unknown error"}` });
387
+ }
388
+ return createJsonResponse({ success: false, message: "Timed out waiting for supply.", opId });
389
+ }
390
+ catch (error) {
391
+ return createErrorResponse(error);
392
+ }
393
+ });
394
+ // Tool 8: Auto-compound settings
395
+ server.registerTool("pillar_auto_compound", {
396
+ description: "Configure auto-compound for your Pillar wallet. " +
397
+ "When enabled, a keeper will automatically boost your position when sBTC accumulates in your wallet.",
398
+ inputSchema: {
399
+ minSbtc: z.number().nonnegative().optional().describe("Minimum sBTC to keep in wallet (in sats)"),
400
+ trigger: z.number().positive().optional().describe("Amount above minimum that triggers auto-compound (in sats)"),
401
+ },
402
+ }, async ({ minSbtc, trigger }) => {
403
+ try {
404
+ const session = loadSession();
405
+ if (!session) {
406
+ return createJsonResponse({
407
+ success: false,
408
+ message: "Not connected to Pillar. Please use pillar_connect first.",
409
+ });
410
+ }
411
+ const api = getPillarApi();
412
+ const createResult = await api.post("/api/mcp/create-op", {
413
+ action: "auto-compound",
414
+ walletAddress: session.walletAddress,
415
+ params: { minSbtc, trigger },
416
+ });
417
+ const { opId } = createResult;
418
+ await openBrowser(`${PILLAR_FRONTEND_URL}/?op=${opId}`);
419
+ const result = await pollOperationStatus(opId);
420
+ if (result.status === "completed") {
421
+ return createJsonResponse({
422
+ success: true,
423
+ message: "Auto-compound settings saved!",
424
+ });
425
+ }
426
+ if (result.status === "cancelled") {
427
+ return createJsonResponse({ success: false, message: "Auto-compound setup cancelled." });
428
+ }
429
+ if (result.status === "failed") {
430
+ return createJsonResponse({ success: false, message: `Auto-compound setup failed: ${result.error || "Unknown error"}` });
431
+ }
432
+ return createJsonResponse({ success: false, message: "Timed out waiting for auto-compound setup.", opId });
433
+ }
434
+ catch (error) {
435
+ return createErrorResponse(error);
436
+ }
437
+ });
438
+ // Tool 9: Unwind (close/reduce leveraged position)
439
+ server.registerTool("pillar_unwind", {
440
+ description: "Close or reduce your leveraged sBTC position. " +
441
+ "Opens a modal to repay borrowed sBTC and withdraw collateral back to your wallet.",
442
+ inputSchema: {
443
+ percentage: z.number().min(1).max(100).optional().describe("Percentage of position to unwind (1-100, optional, can be set in UI)"),
444
+ },
445
+ }, async ({ percentage }) => {
446
+ try {
447
+ const session = loadSession();
448
+ if (!session) {
449
+ return createJsonResponse({
450
+ success: false,
451
+ message: "Not connected to Pillar. Please use pillar_connect first.",
452
+ });
453
+ }
454
+ const api = getPillarApi();
455
+ const createResult = await api.post("/api/mcp/create-op", {
456
+ action: "unwind",
457
+ walletAddress: session.walletAddress,
458
+ params: { percentage },
459
+ });
460
+ const { opId } = createResult;
461
+ await openBrowser(`${PILLAR_FRONTEND_URL}/?op=${opId}`);
462
+ const result = await pollOperationStatus(opId);
463
+ if (result.status === "completed" && result.txId) {
464
+ return createJsonResponse({
465
+ success: true,
466
+ message: "Unwind position submitted successfully!",
467
+ txId: result.txId,
468
+ explorerUrl: `https://explorer.hiro.so/txid/${result.txId}?chain=mainnet`,
469
+ });
470
+ }
471
+ if (result.status === "cancelled") {
472
+ return createJsonResponse({ success: false, message: "Unwind cancelled." });
473
+ }
474
+ if (result.status === "failed") {
475
+ return createJsonResponse({ success: false, message: `Unwind failed: ${result.error || "Unknown error"}` });
476
+ }
477
+ return createJsonResponse({ success: false, message: "Timed out waiting for unwind.", opId });
478
+ }
479
+ catch (error) {
480
+ return createErrorResponse(error);
481
+ }
482
+ });
483
+ // Tool 10: Boost (create/increase leveraged position)
484
+ server.registerTool("pillar_boost", {
485
+ description: "Create or increase a leveraged sBTC position (up to 1.5x). " +
486
+ "Opens the Pillar website where you can set the amount and confirm the boost. " +
487
+ "Your sBTC is supplied to Zest, borrowed against, and re-supplied for amplified exposure. " +
488
+ "Amounts over 100,000 sats automatically enter DCA mode — split into daily 100k-sat chunks " +
489
+ "(max 700k sats per schedule). The first chunk executes immediately, the rest follow daily.",
490
+ inputSchema: {
491
+ amount: z.number().positive().optional().describe("Amount in satoshis to boost (optional, shown as suggestion)"),
492
+ },
493
+ }, async ({ amount }) => {
494
+ try {
495
+ const session = loadSession();
496
+ if (!session) {
497
+ return createJsonResponse({
498
+ success: false,
499
+ message: "Not connected to Pillar. Please use pillar_connect first.",
500
+ });
501
+ }
502
+ const api = getPillarApi();
503
+ const createResult = await api.post("/api/mcp/create-op", {
504
+ action: "boost",
505
+ walletAddress: session.walletAddress,
506
+ params: { amount },
507
+ });
508
+ const { opId } = createResult;
509
+ await openBrowser(`${PILLAR_FRONTEND_URL}/?op=${opId}`);
510
+ const result = await pollOperationStatus(opId);
511
+ if (result.status === "completed" && result.txId) {
512
+ return createJsonResponse({
513
+ success: true,
514
+ message: "Boost position submitted successfully!",
515
+ txId: result.txId,
516
+ explorerUrl: `https://explorer.hiro.so/txid/${result.txId}?chain=mainnet`,
517
+ });
518
+ }
519
+ if (result.status === "cancelled") {
520
+ return createJsonResponse({ success: false, message: "Boost cancelled." });
521
+ }
522
+ if (result.status === "failed") {
523
+ return createJsonResponse({ success: false, message: `Boost failed: ${result.error || "Unknown error"}` });
524
+ }
525
+ return createJsonResponse({ success: false, message: "Timed out waiting for boost.", opId });
526
+ }
527
+ catch (error) {
528
+ return createErrorResponse(error);
529
+ }
530
+ });
531
+ // Tool 11: Get position and balance (opens modal + returns data)
532
+ server.registerTool("pillar_position", {
533
+ description: "View your Pillar wallet balance and Zest position. " +
534
+ "Opens the Position modal in the browser AND returns the data (sBTC balance, collateral, borrowed, LTV, liquidation price).",
535
+ inputSchema: {},
536
+ }, async () => {
537
+ try {
538
+ const session = loadSession();
539
+ if (!session) {
540
+ return createJsonResponse({
541
+ success: false,
542
+ message: "Not connected to Pillar. Please use pillar_connect first.",
543
+ });
544
+ }
545
+ const walletAddress = session.walletAddress;
546
+ // Fetch balances directly from Hiro API
547
+ const balanceRes = await fetch(`https://api.hiro.so/extended/v1/address/${walletAddress}/balances`);
548
+ let sbtcBalance = 0;
549
+ let zsbtcBalance = 0;
550
+ if (balanceRes.ok) {
551
+ const balanceData = await balanceRes.json();
552
+ // sBTC balance (wallet balance)
553
+ const sbtcKey = Object.keys(balanceData.fungible_tokens || {}).find((k) => k.includes("sbtc-token"));
554
+ if (sbtcKey) {
555
+ sbtcBalance = parseInt(balanceData.fungible_tokens[sbtcKey].balance) || 0;
556
+ }
557
+ // zsBTC balance (collateral in Zest)
558
+ const zsbtcKey = Object.keys(balanceData.fungible_tokens || {}).find((k) => k.includes("zsbtc"));
559
+ if (zsbtcKey) {
560
+ zsbtcBalance = parseInt(balanceData.fungible_tokens[zsbtcKey].balance) || 0;
561
+ }
562
+ }
563
+ // Fetch BTC price for USD values
564
+ let btcPrice = 0;
565
+ try {
566
+ const priceRes = await fetch("https://api.coingecko.com/api/v3/simple/price?ids=bitcoin&vs_currencies=usd");
567
+ if (priceRes.ok) {
568
+ const priceData = await priceRes.json();
569
+ btcPrice = priceData.bitcoin?.usd || 0;
570
+ }
571
+ }
572
+ catch {
573
+ // Price fetch failed, continue without USD values
574
+ }
575
+ // Calculate display values
576
+ const formatBtc = (sats) => (sats / 1e8).toFixed(8).replace(/\.?0+$/, "");
577
+ const formatUsd = (usd) => `$${usd.toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 })}`;
578
+ const sbtcUsd = (sbtcBalance / 1e8) * btcPrice;
579
+ const collateralUsd = (zsbtcBalance / 1e8) * btcPrice;
580
+ const hasPosition = zsbtcBalance > 0;
581
+ // Open the Position modal in frontend for accurate details
582
+ const api = getPillarApi();
583
+ const createResult = await api.post("/api/mcp/create-op", {
584
+ action: "position",
585
+ walletAddress,
586
+ });
587
+ const { opId } = createResult;
588
+ await openBrowser(`${PILLAR_FRONTEND_URL}/?op=${opId}`);
589
+ // Return only accurate data - borrowed/LTV/liq price are shown in modal
590
+ return createJsonResponse({
591
+ success: true,
592
+ walletAddress,
593
+ walletName: session.walletName,
594
+ walletBalance: {
595
+ sbtc: sbtcBalance,
596
+ sbtcFormatted: `${formatBtc(sbtcBalance)} sBTC`,
597
+ sbtcUsd: btcPrice > 0 ? formatUsd(sbtcUsd) : null,
598
+ },
599
+ position: hasPosition ? {
600
+ collateral: zsbtcBalance,
601
+ collateralFormatted: `${formatBtc(zsbtcBalance)} BTC (zsBTC in Zest)`,
602
+ collateralUsd: btcPrice > 0 ? formatUsd(collateralUsd) : null,
603
+ } : null,
604
+ message: hasPosition
605
+ ? `Wallet: ${formatBtc(sbtcBalance)} sBTC | Collateral: ${formatBtc(zsbtcBalance)} BTC. See modal for borrowed, LTV, and liquidation price.`
606
+ : `Wallet: ${formatBtc(sbtcBalance)} sBTC | No active position`,
607
+ });
608
+ }
609
+ catch (error) {
610
+ return createErrorResponse(error);
611
+ }
612
+ });
613
+ // Tool 12: Create a new Pillar wallet
614
+ server.registerTool("pillar_create_wallet", {
615
+ description: "Create a new Pillar smart wallet. Opens the Pillar website to complete registration. " +
616
+ "You'll need to enter your email to receive updates. " +
617
+ "If the user doesn't have a referral link, tell them they can DM @pillar_btc on X (https://x.com/pillar_btc) to request one before signing up.",
618
+ inputSchema: {
619
+ referral: z.string().optional().describe("Referral wallet address (optional, defaults to MCP referral)"),
620
+ },
621
+ }, async ({ referral }) => {
622
+ try {
623
+ // Check if already connected
624
+ const existingSession = loadSession();
625
+ if (existingSession) {
626
+ return createJsonResponse({
627
+ success: false,
628
+ message: `Already connected to wallet ${existingSession.walletName || existingSession.walletAddress}. Use pillar_disconnect first if you want to create a new wallet.`,
629
+ });
630
+ }
631
+ const api = getPillarApi();
632
+ // Create operation
633
+ const createResult = await api.post("/api/mcp/create-op", {
634
+ action: "create-wallet",
635
+ params: { referral: referral || MCP_DEFAULT_REFERRAL },
636
+ });
637
+ const { opId } = createResult;
638
+ // Open frontend with referral
639
+ const ref = referral || MCP_DEFAULT_REFERRAL;
640
+ const url = `${PILLAR_FRONTEND_URL}/?op=${opId}&ref=${ref}`;
641
+ await openBrowser(url);
642
+ // Poll for completion
643
+ const result = await pollOperationStatus(opId);
644
+ if (result.status === "completed" && result.walletAddress) {
645
+ // Save session
646
+ const session = {
647
+ walletAddress: result.walletAddress,
648
+ walletName: result.walletName,
649
+ connectedAt: Date.now(),
650
+ };
651
+ saveSession(session);
652
+ return createJsonResponse({
653
+ success: true,
654
+ message: "Wallet created successfully!",
655
+ walletAddress: result.walletAddress,
656
+ walletName: result.walletName,
657
+ });
658
+ }
659
+ if (result.status === "cancelled") {
660
+ return createJsonResponse({ success: false, message: "Wallet creation cancelled." });
661
+ }
662
+ if (result.status === "failed") {
663
+ return createJsonResponse({ success: false, message: `Wallet creation failed: ${result.error || "Unknown error"}` });
664
+ }
665
+ return createJsonResponse({ success: false, message: "Timed out waiting for wallet creation.", opId });
666
+ }
667
+ catch (error) {
668
+ return createErrorResponse(error);
669
+ }
670
+ });
671
+ // Tool 13: Get referral/invite link
672
+ server.registerTool("pillar_invite", {
673
+ description: "Get your Pillar referral link to invite friends. Share this link and earn rewards when friends sign up.",
674
+ inputSchema: {},
675
+ }, async () => {
676
+ try {
677
+ const session = loadSession();
678
+ if (!session) {
679
+ return createJsonResponse({
680
+ success: false,
681
+ message: "Not connected to Pillar. Please use pillar_connect first.",
682
+ });
683
+ }
684
+ const referralLink = `${PILLAR_FRONTEND_URL}/?ref=${session.walletAddress}`;
685
+ return createJsonResponse({
686
+ success: true,
687
+ referralLink,
688
+ walletAddress: session.walletAddress,
689
+ message: `Share this link to invite friends: ${referralLink}`,
690
+ });
691
+ }
692
+ catch (error) {
693
+ return createErrorResponse(error);
694
+ }
695
+ });
696
+ // Tool 14: Invite a DCA partner (direct API, no handoff)
697
+ server.registerTool("pillar_dca_invite", {
698
+ description: "Invite a DCA partner by email or wallet address. " +
699
+ "DCA partners hold each other accountable — both must boost each week to keep the streak alive.",
700
+ inputSchema: {
701
+ partner: z.string().describe("Partner's email address or Stacks wallet address (SP...)"),
702
+ },
703
+ }, async ({ partner }) => {
704
+ try {
705
+ const session = loadSession();
706
+ if (!session) {
707
+ return createJsonResponse({
708
+ success: false,
709
+ message: "Not connected to Pillar. Please use pillar_connect first.",
710
+ });
711
+ }
712
+ const isEmail = partner.includes("@");
713
+ const api = getPillarApi();
714
+ const result = await api.post("/api/dca-partner/invite", {
715
+ walletAddress: session.walletAddress,
716
+ ...(isEmail ? { partnerEmail: partner } : { partnerWalletAddress: partner }),
717
+ });
718
+ return createJsonResponse({
719
+ success: true,
720
+ partnershipId: result.partnershipId,
721
+ status: result.status,
722
+ message: isEmail
723
+ ? `Invite sent to ${partner}. They'll receive an email with a link to accept.`
724
+ : `Partnership invite sent to ${partner}.`,
725
+ ...(result.inviteLink ? { inviteLink: result.inviteLink } : {}),
726
+ });
727
+ }
728
+ catch (error) {
729
+ return createErrorResponse(error);
730
+ }
731
+ });
732
+ // Tool 15: View DCA partners and weekly status (direct API)
733
+ server.registerTool("pillar_dca_partners", {
734
+ description: "View your DCA partners and weekly status. " +
735
+ "Shows active partnerships with streak, PnL, and weekly status badges, plus any pending invites.",
736
+ inputSchema: {},
737
+ }, async () => {
738
+ try {
739
+ const session = loadSession();
740
+ if (!session) {
741
+ return createJsonResponse({
742
+ success: false,
743
+ message: "Not connected to Pillar. Please use pillar_connect first.",
744
+ });
745
+ }
746
+ const api = getPillarApi();
747
+ const result = await api.get("/api/dca-partner/my-partners", { walletAddress: session.walletAddress });
748
+ const active = result.partnerships.filter(p => p.status === "active");
749
+ const pending = result.pendingInvites || [];
750
+ return createJsonResponse({
751
+ success: true,
752
+ activePartnerships: active.map(p => ({
753
+ partnershipId: p.partnershipId,
754
+ partner: p.partnerName || p.partnerAddress,
755
+ streak: p.streak,
756
+ pnl: p.pnl,
757
+ myStatus: p.myStatus,
758
+ partnerStatus: p.partnerStatus,
759
+ })),
760
+ pendingInvites: pending.length,
761
+ pendingDetails: pending.map(p => ({
762
+ partnershipId: p.partnershipId,
763
+ partner: p.partnerEmail || p.partnerAddress,
764
+ direction: p.direction,
765
+ })),
766
+ message: active.length > 0
767
+ ? `${active.length} active partnership${active.length > 1 ? "s" : ""}, ${pending.length} pending invite${pending.length !== 1 ? "s" : ""}`
768
+ : `No active partnerships. ${pending.length} pending invite${pending.length !== 1 ? "s" : ""}. Use pillar_dca_invite to invite a partner.`,
769
+ });
770
+ }
771
+ catch (error) {
772
+ return createErrorResponse(error);
773
+ }
774
+ });
775
+ // Tool 16: DCA streak leaderboard (direct API)
776
+ server.registerTool("pillar_dca_leaderboard", {
777
+ description: "View the DCA streak leaderboard. Shows top partnerships by streak length, and highlights your entry if you have one.",
778
+ inputSchema: {},
779
+ }, async () => {
780
+ try {
781
+ const session = loadSession();
782
+ if (!session) {
783
+ return createJsonResponse({
784
+ success: false,
785
+ message: "Not connected to Pillar. Please use pillar_connect first.",
786
+ });
787
+ }
788
+ const api = getPillarApi();
789
+ const result = await api.get("/api/dca-partner/leaderboard", { walletAddress: session.walletAddress });
790
+ return createJsonResponse({
791
+ success: true,
792
+ leaderboard: result.leaderboard.map(entry => ({
793
+ rank: entry.rank,
794
+ partners: entry.partnerNames.join(" & "),
795
+ streak: entry.streak,
796
+ pnl: entry.pnl,
797
+ isYou: entry.isUser || false,
798
+ })),
799
+ yourRank: result.userEntry ? {
800
+ rank: result.userEntry.rank,
801
+ partner: result.userEntry.partnerName,
802
+ streak: result.userEntry.streak,
803
+ pnl: result.userEntry.pnl,
804
+ } : null,
805
+ message: result.userEntry
806
+ ? `You're ranked #${result.userEntry.rank} with a ${result.userEntry.streak}-week streak with ${result.userEntry.partnerName}.`
807
+ : "You don't have an active partnership on the leaderboard yet. Use pillar_dca_invite to get started.",
808
+ });
809
+ }
810
+ catch (error) {
811
+ return createErrorResponse(error);
812
+ }
813
+ });
814
+ // Tool 17: Check DCA schedule status (direct API)
815
+ server.registerTool("pillar_dca_status", {
816
+ description: "Check your DCA schedule status. Shows all active DCA schedules (up to 10) with chunk progress " +
817
+ "(completed, pending, failed) and next execution time.",
818
+ inputSchema: {},
819
+ }, async () => {
820
+ try {
821
+ const session = loadSession();
822
+ if (!session) {
823
+ return createJsonResponse({
824
+ success: false,
825
+ message: "Not connected to Pillar. Please use pillar_connect first.",
826
+ });
827
+ }
828
+ const api = getPillarApi();
829
+ const raw = await api.get("/api/pillar/dca-status", { walletAddress: session.walletAddress });
830
+ const result = raw.data;
831
+ if (!result) {
832
+ return createJsonResponse({
833
+ success: true,
834
+ hasSchedule: false,
835
+ activeCount: 0,
836
+ maxSchedules: 10,
837
+ message: "No active DCA schedule. Use pillar_boost with an amount over 100,000 sats to start one.",
838
+ });
839
+ }
840
+ const allSchedules = result.allSchedules || [{ schedule: result.schedule, chunks: result.chunks }];
841
+ const activeCount = result.activeCount ?? (result.schedule.status === "active" ? 1 : 0);
842
+ const maxSchedules = result.maxSchedules ?? 10;
843
+ const formatSchedule = (s, chunks) => {
844
+ const pendingChunks = chunks.filter((c) => c.status === "pending" || c.status === "executing").length;
845
+ const nextPending = chunks
846
+ .filter((c) => c.status === "pending")
847
+ .sort((a, b) => a.scheduledAt - b.scheduledAt)[0];
848
+ const nextExecution = nextPending
849
+ ? new Date(nextPending.scheduledAt).toISOString()
850
+ : null;
851
+ return {
852
+ id: s.id,
853
+ status: s.status,
854
+ totalSbtcAmount: s.totalSbtcAmount,
855
+ chunkSizeSats: s.chunkSizeSats,
856
+ progress: `${s.completedChunks}/${s.totalChunks} chunks completed`,
857
+ completedChunks: s.completedChunks,
858
+ pendingChunks,
859
+ failedChunks: s.failedChunks,
860
+ nextExecution,
861
+ createdAt: new Date(s.createdAt).toISOString(),
862
+ };
863
+ };
864
+ const schedules = allSchedules.map((entry) => formatSchedule(entry.schedule, entry.chunks));
865
+ const activeSchedules = schedules.filter((s) => s.status === "active");
866
+ if (activeSchedules.length === 0) {
867
+ // No active, show most recent
868
+ const latest = schedules[0];
869
+ return createJsonResponse({
870
+ success: true,
871
+ hasSchedule: true,
872
+ activeCount: 0,
873
+ maxSchedules,
874
+ schedule: latest,
875
+ message: `DCA ${latest.status}: ${latest.progress}.`,
876
+ });
877
+ }
878
+ if (activeSchedules.length === 1) {
879
+ const s = activeSchedules[0];
880
+ return createJsonResponse({
881
+ success: true,
882
+ hasSchedule: true,
883
+ activeCount,
884
+ maxSchedules,
885
+ schedule: s,
886
+ message: `DCA active: ${s.progress} (${s.chunkSizeSats} sats/chunk). Next: ${s.nextExecution || "pending"}.`,
887
+ });
888
+ }
889
+ // Multiple active schedules
890
+ const summaries = activeSchedules.map((s) => `Schedule ${s.id.slice(0, 8)}: ${s.progress}, next: ${s.nextExecution || "pending"}`);
891
+ return createJsonResponse({
892
+ success: true,
893
+ hasSchedule: true,
894
+ activeCount,
895
+ maxSchedules,
896
+ schedules: activeSchedules,
897
+ message: `${activeCount} active DCA schedules (max ${maxSchedules}):\n${summaries.join("\n")}`,
898
+ });
899
+ }
900
+ catch (error) {
901
+ return createErrorResponse(error);
902
+ }
903
+ });
904
+ }
905
+ //# sourceMappingURL=pillar.tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pillar.tools.js","sourceRoot":"","sources":["../../src/tools/pillar.tools.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC5E,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AAEzB,MAAM,mBAAmB,GAAG,uBAAuB,CAAC;AACpD,MAAM,gBAAgB,GAAG,IAAI,CAAC;AAC9B,MAAM,eAAe,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,oBAAoB;AAC1G,MAAM,oBAAoB,GAAG,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,yDAAyD,CAAC;AAC9H,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,qBAAqB,CAAC,CAAC;AAS9E,SAAS,SAAS,CAAC,QAAgB;IACjC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,CAAC;AACH,CAAC;AAED,SAAS,WAAW;IAClB,IAAI,CAAC;QACH,IAAI,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YAChC,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;YACpD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,gBAAgB;IAClB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,WAAW,CAAC,OAAsB;IACzC,SAAS,CAAC,YAAY,CAAC,CAAC;IACxB,EAAE,CAAC,aAAa,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AACnE,CAAC;AAED,SAAS,YAAY;IACnB,IAAI,CAAC;QACH,IAAI,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YAChC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,gBAAgB;IAClB,CAAC;AACH,CAAC;AAED,+CAA+C;AAC/C,SAAS,WAAW,CAAC,GAAW;IAC9B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QAClC,IAAI,GAAW,CAAC;QAEhB,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC1B,GAAG,GAAG,SAAS,GAAG,GAAG,CAAC;QACxB,CAAC;aAAM,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;YAChC,GAAG,GAAG,aAAa,GAAG,GAAG,CAAC;QAC5B,CAAC;aAAM,CAAC;YACN,GAAG,GAAG,aAAa,GAAG,GAAG,CAAC;QAC5B,CAAC;QAED,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,EAAE;YAClB,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,CAAC,KAAK,CAAC,CAAC;YAChB,CAAC;iBAAM,CAAC;gBACN,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,4BAA4B;AAC5B,KAAK,UAAU,mBAAmB,CAChC,IAAY,EACZ,YAAoB,eAAe;IAEnC,MAAM,GAAG,GAAG,YAAY,EAAE,CAAC;IAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,SAAS,EAAE,CAAC;QAC1C,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,GAAG,CAMzB,sBAAsB,IAAI,EAAE,CAAC,CAAC;YAEjC,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;gBAClC,OAAO,MAAM,CAAC;YAChB,CAAC;YAED,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;gBAChE,OAAO,MAAM,CAAC;YAChB,CAAC;YAED,gCAAgC;YAChC,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC,CAAC;QACxE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,4BAA4B;YAC5B,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC,CAAC;QACxE,CAAC;IACH,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,4CAA4C,EAAE,CAAC;AACpF,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAAiB;IACnD,0EAA0E;IAC1E,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;QACE,WAAW,EACT,uFAAuF;YACvF,2GAA2G;QAC7G,WAAW,EAAE,EAAE;KAChB,EACD,KAAK,IAAI,EAAE;QACT,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,YAAY,EAAE,CAAC;YAE3B,mCAAmC;YACnC,MAAM,YAAY,GAAG,MAAM,GAAG,CAAC,IAAI,CAAmB,oBAAoB,EAAE;gBAC1E,MAAM,EAAE,SAAS;aAClB,CAAC,CAAC;YAEH,MAAM,EAAE,IAAI,EAAE,GAAG,YAAY,CAAC;YAE9B,0CAA0C;YAC1C,MAAM,GAAG,GAAG,GAAG,mBAAmB,QAAQ,IAAI,EAAE,CAAC;YACjD,MAAM,WAAW,CAAC,GAAG,CAAC,CAAC;YAEvB,8BAA8B;YAC9B,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,IAAI,CAAC,CAAC;YAE/C,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;gBAC1D,uBAAuB;gBACvB,MAAM,OAAO,GAAkB;oBAC7B,aAAa,EAAE,MAAM,CAAC,aAAa;oBACnC,UAAU,EAAE,MAAM,CAAC,UAAU;oBAC7B,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE;iBACxB,CAAC;gBACF,WAAW,CAAC,OAAO,CAAC,CAAC;gBAErB,OAAO,kBAAkB,CAAC;oBACxB,OAAO,EAAE,IAAI;oBACb,OAAO,EAAE,sBAAsB;oBAC/B,aAAa,EAAE,MAAM,CAAC,aAAa;oBACnC,UAAU,EAAE,MAAM,CAAC,UAAU;iBAC9B,CAAC,CAAC;YACL,CAAC;YAED,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC/B,OAAO,kBAAkB,CAAC;oBACxB,OAAO,EAAE,KAAK;oBACd,OAAO,EAAE,MAAM,CAAC,KAAK,IAAI,yDAAyD;iBACnF,CAAC,CAAC;YACL,CAAC;YAED,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;gBAClC,OAAO,kBAAkB,CAAC;oBACxB,OAAO,EAAE,KAAK;oBACd,OAAO,EAAE,uBAAuB;iBACjC,CAAC,CAAC;YACL,CAAC;YAED,UAAU;YACV,OAAO,kBAAkB,CAAC;gBACxB,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,qDAAqD;aAC/D,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,mBAAmB,CAAC,KAAK,CAAC,CAAC;QACpC,CAAC;IACH,CAAC,CACF,CAAC;IAEF,iCAAiC;IACjC,MAAM,CAAC,YAAY,CACjB,mBAAmB,EACnB;QACE,WAAW,EAAE,+DAA+D;QAC5E,WAAW,EAAE,EAAE;KAChB,EACD,KAAK,IAAI,EAAE;QACT,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;QAC9B,YAAY,EAAE,CAAC;QACf,OAAO,kBAAkB,CAAC;YACxB,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,OAAO;gBACd,CAAC,CAAC,qBAAqB,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,aAAa,EAAE;gBACpE,CAAC,CAAC,0BAA0B;SAC/B,CAAC,CAAC;IACL,CAAC,CACF,CAAC;IAEF,uCAAuC;IACvC,MAAM,CAAC,YAAY,CACjB,eAAe,EACf;QACE,WAAW,EAAE,kEAAkE;QAC/E,WAAW,EAAE,EAAE;KAChB,EACD,KAAK,IAAI,EAAE;QACT,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;QAC9B,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,kBAAkB,CAAC;gBACxB,SAAS,EAAE,IAAI;gBACf,aAAa,EAAE,OAAO,CAAC,aAAa;gBACpC,UAAU,EAAE,OAAO,CAAC,UAAU;gBAC9B,WAAW,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,WAAW,EAAE;aACzD,CAAC,CAAC;QACL,CAAC;QACD,OAAO,kBAAkB,CAAC;YACxB,SAAS,EAAE,KAAK;YAChB,OAAO,EAAE,yDAAyD;SACnE,CAAC,CAAC;IACL,CAAC,CACF,CAAC;IAEF,kDAAkD;IAClD,MAAM,CAAC,YAAY,CACjB,aAAa,EACb;QACE,WAAW,EACT,gGAAgG;YAChG,+DAA+D;YAC/D,sJAAsJ;QACxJ,WAAW,EAAE;YACX,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0FAA0F,CAAC;YACnH,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;YAC5D,aAAa,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8GAA8G,CAAC;SACxL;KACF,EACD,KAAK,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,EAAE,EAAE;QACtC,IAAI,CAAC;YACH,kCAAkC;YAClC,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;YAC9B,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,kBAAkB,CAAC;oBACxB,OAAO,EAAE,KAAK;oBACd,OAAO,EAAE,2DAA2D;iBACrE,CAAC,CAAC;YACL,CAAC;YAED,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;YAC5C,MAAM,GAAG,GAAG,YAAY,EAAE,CAAC;YAE3B,mCAAmC;YACnC,MAAM,YAAY,GAAG,MAAM,GAAG,CAAC,IAAI,CAAmB,oBAAoB,EAAE;gBAC1E,MAAM,EAAE,MAAM;gBACd,aAAa;gBACb,MAAM,EAAE;oBACN,EAAE;oBACF,MAAM;oBACN,aAAa,EAAE,aAAa,IAAI,KAAK;iBACtC;aACF,CAAC,CAAC;YAEH,MAAM,EAAE,IAAI,EAAE,GAAG,YAAY,CAAC;YAE9B,0CAA0C;YAC1C,MAAM,GAAG,GAAG,GAAG,mBAAmB,QAAQ,IAAI,EAAE,CAAC;YACjD,MAAM,WAAW,CAAC,GAAG,CAAC,CAAC;YAEvB,8BAA8B;YAC9B,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,IAAI,CAAC,CAAC;YAE/C,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;gBACjD,OAAO,kBAAkB,CAAC;oBACxB,OAAO,EAAE,IAAI;oBACb,OAAO,EAAE,qCAAqC;oBAC9C,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,WAAW,EAAE,iCAAiC,MAAM,CAAC,IAAI,gBAAgB;iBAC1E,CAAC,CAAC;YACL,CAAC;YAED,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;gBAClC,OAAO,kBAAkB,CAAC;oBACxB,OAAO,EAAE,KAAK;oBACd,OAAO,EAAE,oCAAoC;iBAC9C,CAAC,CAAC;YACL,CAAC;YAED,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC/B,OAAO,kBAAkB,CAAC;oBACxB,OAAO,EAAE,KAAK;oBACd,OAAO,EAAE,uBAAuB,MAAM,CAAC,KAAK,IAAI,eAAe,EAAE;iBAClE,CAAC,CAAC;YACL,CAAC;YAED,UAAU;YACV,OAAO,kBAAkB,CAAC;gBACxB,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,+EAA+E;gBACxF,IAAI;aACL,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,mBAAmB,CAAC,KAAK,CAAC,CAAC;QACpC,CAAC;IACH,CAAC,CACF,CAAC;IAEF,yCAAyC;IACzC,MAAM,CAAC,YAAY,CACjB,aAAa,EACb;QACE,WAAW,EACT,6DAA6D;YAC7D,sGAAsG;YACtG,gFAAgF;YAChF,mEAAmE;YACnE,uDAAuD;QACzD,WAAW,EAAE;YACX,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAClD,gIAAgI,CACjI;YACD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4DAA4D,CAAC;SAChH;KACF,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE;QAC3B,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;YAC9B,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,kBAAkB,CAAC;oBACxB,OAAO,EAAE,KAAK;oBACd,OAAO,EAAE,2DAA2D;iBACrE,CAAC,CAAC;YACL,CAAC;YAED,MAAM,GAAG,GAAG,YAAY,EAAE,CAAC;YAC3B,MAAM,YAAY,GAAG,MAAM,GAAG,CAAC,IAAI,CAAmB,oBAAoB,EAAE;gBAC1E,MAAM,EAAE,MAAM;gBACd,aAAa,EAAE,OAAO,CAAC,aAAa;gBACpC,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE;aAC3B,CAAC,CAAC;YAEH,MAAM,EAAE,IAAI,EAAE,GAAG,YAAY,CAAC;YAC9B,MAAM,WAAW,CAAC,GAAG,mBAAmB,QAAQ,IAAI,EAAE,CAAC,CAAC;YACxD,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,IAAI,CAAC,CAAC;YAE/C,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;gBACjD,MAAM,YAAY,GAA2B;oBAC3C,QAAQ,EAAE,kBAAkB;oBAC5B,GAAG,EAAE,aAAa;oBAClB,IAAI,EAAE,cAAc;iBACrB,CAAC;gBACF,OAAO,kBAAkB,CAAC;oBACxB,OAAO,EAAE,IAAI;oBACb,OAAO,EAAE,GAAG,YAAY,CAAC,MAAM,CAAC,IAAI,SAAS,0BAA0B;oBACvE,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,WAAW,EAAE,iCAAiC,MAAM,CAAC,IAAI,gBAAgB;iBAC1E,CAAC,CAAC;YACL,CAAC;YAED,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;gBAClC,OAAO,kBAAkB,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,oBAAoB,EAAE,CAAC,CAAC;YAC/E,CAAC;YAED,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC/B,OAAO,kBAAkB,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,mBAAmB,MAAM,CAAC,KAAK,IAAI,eAAe,EAAE,EAAE,CAAC,CAAC;YAC/G,CAAC;YAED,OAAO,kBAAkB,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,gCAAgC,EAAE,IAAI,EAAE,CAAC,CAAC;QACjG,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,mBAAmB,CAAC,KAAK,CAAC,CAAC;QACpC,CAAC;IACH,CAAC,CACF,CAAC;IAEF,2BAA2B;IAC3B,MAAM,CAAC,YAAY,CACjB,kBAAkB,EAClB;QACE,WAAW,EACT,gFAAgF;YAChF,sEAAsE;QACxE,WAAW,EAAE;YACX,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kEAAkE,CAAC;SACjH;KACF,EACD,KAAK,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE;QACzB,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;YAC9B,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,kBAAkB,CAAC;oBACxB,OAAO,EAAE,KAAK;oBACd,OAAO,EAAE,2DAA2D;iBACrE,CAAC,CAAC;YACL,CAAC;YAED,MAAM,GAAG,GAAG,YAAY,EAAE,CAAC;YAC3B,MAAM,YAAY,GAAG,MAAM,GAAG,CAAC,IAAI,CAAmB,oBAAoB,EAAE;gBAC1E,MAAM,EAAE,WAAW;gBACnB,aAAa,EAAE,OAAO,CAAC,aAAa;gBACpC,MAAM,EAAE,EAAE,YAAY,EAAE;aACzB,CAAC,CAAC;YAEH,MAAM,EAAE,IAAI,EAAE,GAAG,YAAY,CAAC;YAC9B,MAAM,WAAW,CAAC,GAAG,mBAAmB,QAAQ,IAAI,EAAE,CAAC,CAAC;YACxD,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,IAAI,CAAC,CAAC;YAE/C,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;gBACjD,OAAO,kBAAkB,CAAC;oBACxB,OAAO,EAAE,IAAI;oBACb,OAAO,EAAE,kCAAkC;oBAC3C,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,WAAW,EAAE,iCAAiC,MAAM,CAAC,IAAI,gBAAgB;iBAC1E,CAAC,CAAC;YACL,CAAC;YAED,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;gBAClC,OAAO,kBAAkB,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,sBAAsB,EAAE,CAAC,CAAC;YACjF,CAAC;YAED,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC/B,OAAO,kBAAkB,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,qBAAqB,MAAM,CAAC,KAAK,IAAI,eAAe,EAAE,EAAE,CAAC,CAAC;YACjH,CAAC;YAED,OAAO,kBAAkB,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,kCAAkC,EAAE,IAAI,EAAE,CAAC,CAAC;QACnG,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,mBAAmB,CAAC,KAAK,CAAC,CAAC;QACpC,CAAC;IACH,CAAC,CACF,CAAC;IAEF,8BAA8B;IAC9B,MAAM,CAAC,YAAY,CACjB,eAAe,EACf;QACE,WAAW,EACT,4EAA4E;YAC5E,8DAA8D;QAChE,WAAW,EAAE;YACX,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2DAA2D,CAAC;SAC/G;KACF,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;QACnB,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;YAC9B,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,kBAAkB,CAAC;oBACxB,OAAO,EAAE,KAAK;oBACd,OAAO,EAAE,2DAA2D;iBACrE,CAAC,CAAC;YACL,CAAC;YAED,MAAM,GAAG,GAAG,YAAY,EAAE,CAAC;YAC3B,MAAM,YAAY,GAAG,MAAM,GAAG,CAAC,IAAI,CAAmB,oBAAoB,EAAE;gBAC1E,MAAM,EAAE,QAAQ;gBAChB,aAAa,EAAE,OAAO,CAAC,aAAa;gBACpC,MAAM,EAAE,EAAE,MAAM,EAAE;aACnB,CAAC,CAAC;YAEH,MAAM,EAAE,IAAI,EAAE,GAAG,YAAY,CAAC;YAC9B,MAAM,WAAW,CAAC,GAAG,mBAAmB,QAAQ,IAAI,EAAE,CAAC,CAAC;YACxD,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,IAAI,CAAC,CAAC;YAE/C,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;gBACjD,OAAO,kBAAkB,CAAC;oBACxB,OAAO,EAAE,IAAI;oBACb,OAAO,EAAE,wCAAwC;oBACjD,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,WAAW,EAAE,iCAAiC,MAAM,CAAC,IAAI,gBAAgB;iBAC1E,CAAC,CAAC;YACL,CAAC;YAED,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;gBAClC,OAAO,kBAAkB,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC;YAC9E,CAAC;YAED,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC/B,OAAO,kBAAkB,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,kBAAkB,MAAM,CAAC,KAAK,IAAI,eAAe,EAAE,EAAE,CAAC,CAAC;YAC9G,CAAC;YAED,OAAO,kBAAkB,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,+BAA+B,EAAE,IAAI,EAAE,CAAC,CAAC;QAChG,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,mBAAmB,CAAC,KAAK,CAAC,CAAC;QACpC,CAAC;IACH,CAAC,CACF,CAAC;IAEF,iCAAiC;IACjC,MAAM,CAAC,YAAY,CACjB,sBAAsB,EACtB;QACE,WAAW,EACT,kDAAkD;YAClD,qGAAqG;QACvG,WAAW,EAAE;YACX,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;YACjG,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4DAA4D,CAAC;SACjH;KACF,EACD,KAAK,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE;QAC7B,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;YAC9B,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,kBAAkB,CAAC;oBACxB,OAAO,EAAE,KAAK;oBACd,OAAO,EAAE,2DAA2D;iBACrE,CAAC,CAAC;YACL,CAAC;YAED,MAAM,GAAG,GAAG,YAAY,EAAE,CAAC;YAC3B,MAAM,YAAY,GAAG,MAAM,GAAG,CAAC,IAAI,CAAmB,oBAAoB,EAAE;gBAC1E,MAAM,EAAE,eAAe;gBACvB,aAAa,EAAE,OAAO,CAAC,aAAa;gBACpC,MAAM,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE;aAC7B,CAAC,CAAC;YAEH,MAAM,EAAE,IAAI,EAAE,GAAG,YAAY,CAAC;YAC9B,MAAM,WAAW,CAAC,GAAG,mBAAmB,QAAQ,IAAI,EAAE,CAAC,CAAC;YACxD,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,IAAI,CAAC,CAAC;YAE/C,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;gBAClC,OAAO,kBAAkB,CAAC;oBACxB,OAAO,EAAE,IAAI;oBACb,OAAO,EAAE,+BAA+B;iBACzC,CAAC,CAAC;YACL,CAAC;YAED,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;gBAClC,OAAO,kBAAkB,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,gCAAgC,EAAE,CAAC,CAAC;YAC3F,CAAC;YAED,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC/B,OAAO,kBAAkB,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,+BAA+B,MAAM,CAAC,KAAK,IAAI,eAAe,EAAE,EAAE,CAAC,CAAC;YAC3H,CAAC;YAED,OAAO,kBAAkB,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,4CAA4C,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7G,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,mBAAmB,CAAC,KAAK,CAAC,CAAC;QACpC,CAAC;IACH,CAAC,CACF,CAAC;IAEF,mDAAmD;IACnD,MAAM,CAAC,YAAY,CACjB,eAAe,EACf;QACE,WAAW,EACT,gDAAgD;YAChD,mFAAmF;QACrF,WAAW,EAAE;YACX,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sEAAsE,CAAC;SACnI;KACF,EACD,KAAK,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE;QACvB,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;YAC9B,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,kBAAkB,CAAC;oBACxB,OAAO,EAAE,KAAK;oBACd,OAAO,EAAE,2DAA2D;iBACrE,CAAC,CAAC;YACL,CAAC;YAED,MAAM,GAAG,GAAG,YAAY,EAAE,CAAC;YAC3B,MAAM,YAAY,GAAG,MAAM,GAAG,CAAC,IAAI,CAAmB,oBAAoB,EAAE;gBAC1E,MAAM,EAAE,QAAQ;gBAChB,aAAa,EAAE,OAAO,CAAC,aAAa;gBACpC,MAAM,EAAE,EAAE,UAAU,EAAE;aACvB,CAAC,CAAC;YAEH,MAAM,EAAE,IAAI,EAAE,GAAG,YAAY,CAAC;YAC9B,MAAM,WAAW,CAAC,GAAG,mBAAmB,QAAQ,IAAI,EAAE,CAAC,CAAC;YACxD,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,IAAI,CAAC,CAAC;YAE/C,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;gBACjD,OAAO,kBAAkB,CAAC;oBACxB,OAAO,EAAE,IAAI;oBACb,OAAO,EAAE,yCAAyC;oBAClD,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,WAAW,EAAE,iCAAiC,MAAM,CAAC,IAAI,gBAAgB;iBAC1E,CAAC,CAAC;YACL,CAAC;YAED,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;gBAClC,OAAO,kBAAkB,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC;YAC9E,CAAC;YAED,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC/B,OAAO,kBAAkB,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,kBAAkB,MAAM,CAAC,KAAK,IAAI,eAAe,EAAE,EAAE,CAAC,CAAC;YAC9G,CAAC;YAED,OAAO,kBAAkB,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,+BAA+B,EAAE,IAAI,EAAE,CAAC,CAAC;QAChG,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,mBAAmB,CAAC,KAAK,CAAC,CAAC;QACpC,CAAC;IACH,CAAC,CACF,CAAC;IAEF,sDAAsD;IACtD,MAAM,CAAC,YAAY,CACjB,cAAc,EACd;QACE,WAAW,EACT,6DAA6D;YAC7D,+EAA+E;YAC/E,2FAA2F;YAC3F,4FAA4F;YAC5F,4FAA4F;QAC9F,WAAW,EAAE;YACX,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6DAA6D,CAAC;SACjH;KACF,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;QACnB,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;YAC9B,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,kBAAkB,CAAC;oBACxB,OAAO,EAAE,KAAK;oBACd,OAAO,EAAE,2DAA2D;iBACrE,CAAC,CAAC;YACL,CAAC;YAED,MAAM,GAAG,GAAG,YAAY,EAAE,CAAC;YAC3B,MAAM,YAAY,GAAG,MAAM,GAAG,CAAC,IAAI,CAAmB,oBAAoB,EAAE;gBAC1E,MAAM,EAAE,OAAO;gBACf,aAAa,EAAE,OAAO,CAAC,aAAa;gBACpC,MAAM,EAAE,EAAE,MAAM,EAAE;aACnB,CAAC,CAAC;YAEH,MAAM,EAAE,IAAI,EAAE,GAAG,YAAY,CAAC;YAC9B,MAAM,WAAW,CAAC,GAAG,mBAAmB,QAAQ,IAAI,EAAE,CAAC,CAAC;YACxD,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,IAAI,CAAC,CAAC;YAE/C,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;gBACjD,OAAO,kBAAkB,CAAC;oBACxB,OAAO,EAAE,IAAI;oBACb,OAAO,EAAE,wCAAwC;oBACjD,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,WAAW,EAAE,iCAAiC,MAAM,CAAC,IAAI,gBAAgB;iBAC1E,CAAC,CAAC;YACL,CAAC;YAED,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;gBAClC,OAAO,kBAAkB,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,kBAAkB,EAAE,CAAC,CAAC;YAC7E,CAAC;YAED,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC/B,OAAO,kBAAkB,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,iBAAiB,MAAM,CAAC,KAAK,IAAI,eAAe,EAAE,EAAE,CAAC,CAAC;YAC7G,CAAC;YAED,OAAO,kBAAkB,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,8BAA8B,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/F,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,mBAAmB,CAAC,KAAK,CAAC,CAAC;QACpC,CAAC;IACH,CAAC,CACF,CAAC;IAEF,iEAAiE;IACjE,MAAM,CAAC,YAAY,CACjB,iBAAiB,EACjB;QACE,WAAW,EACT,qDAAqD;YACrD,4HAA4H;QAC9H,WAAW,EAAE,EAAE;KAChB,EACD,KAAK,IAAI,EAAE;QACT,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;YAC9B,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,kBAAkB,CAAC;oBACxB,OAAO,EAAE,KAAK;oBACd,OAAO,EAAE,2DAA2D;iBACrE,CAAC,CAAC;YACL,CAAC;YAED,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;YAE5C,wCAAwC;YACxC,MAAM,UAAU,GAAG,MAAM,KAAK,CAC5B,2CAA2C,aAAa,WAAW,CACpE,CAAC;YAEF,IAAI,WAAW,GAAG,CAAC,CAAC;YACpB,IAAI,YAAY,GAAG,CAAC,CAAC;YAErB,IAAI,UAAU,CAAC,EAAE,EAAE,CAAC;gBAClB,MAAM,WAAW,GAAG,MAAM,UAAU,CAAC,IAAI,EAAE,CAAC;gBAE5C,gCAAgC;gBAChC,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC,IAAI,CACjE,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,CACxC,CAAC;gBACF,IAAI,OAAO,EAAE,CAAC;oBACZ,WAAW,GAAG,QAAQ,CAAC,WAAW,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBAC5E,CAAC;gBAED,qCAAqC;gBACrC,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC,IAAI,CAClE,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CACnC,CAAC;gBACF,IAAI,QAAQ,EAAE,CAAC;oBACb,YAAY,GAAG,QAAQ,CAAC,WAAW,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBAC9E,CAAC;YACH,CAAC;YAED,iCAAiC;YACjC,IAAI,QAAQ,GAAG,CAAC,CAAC;YACjB,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,6EAA6E,CAAC,CAAC;gBAC5G,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC;oBAChB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;oBACxC,QAAQ,GAAG,SAAS,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;gBACzC,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,kDAAkD;YACpD,CAAC;YAED,2BAA2B;YAC3B,MAAM,SAAS,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YAClF,MAAM,SAAS,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,cAAc,CAAC,SAAS,EAAE,EAAE,qBAAqB,EAAE,CAAC,EAAE,qBAAqB,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;YAE/H,MAAM,OAAO,GAAG,CAAC,WAAW,GAAG,GAAG,CAAC,GAAG,QAAQ,CAAC;YAC/C,MAAM,aAAa,GAAG,CAAC,YAAY,GAAG,GAAG,CAAC,GAAG,QAAQ,CAAC;YACtD,MAAM,WAAW,GAAG,YAAY,GAAG,CAAC,CAAC;YAErC,2DAA2D;YAC3D,MAAM,GAAG,GAAG,YAAY,EAAE,CAAC;YAC3B,MAAM,YAAY,GAAG,MAAM,GAAG,CAAC,IAAI,CAAmB,oBAAoB,EAAE;gBAC1E,MAAM,EAAE,UAAU;gBAClB,aAAa;aACd,CAAC,CAAC;YACH,MAAM,EAAE,IAAI,EAAE,GAAG,YAAY,CAAC;YAC9B,MAAM,WAAW,CAAC,GAAG,mBAAmB,QAAQ,IAAI,EAAE,CAAC,CAAC;YAExD,wEAAwE;YACxE,OAAO,kBAAkB,CAAC;gBACxB,OAAO,EAAE,IAAI;gBACb,aAAa;gBACb,UAAU,EAAE,OAAO,CAAC,UAAU;gBAC9B,aAAa,EAAE;oBACb,IAAI,EAAE,WAAW;oBACjB,aAAa,EAAE,GAAG,SAAS,CAAC,WAAW,CAAC,OAAO;oBAC/C,OAAO,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI;iBAClD;gBACD,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC;oBACtB,UAAU,EAAE,YAAY;oBACxB,mBAAmB,EAAE,GAAG,SAAS,CAAC,YAAY,CAAC,sBAAsB;oBACrE,aAAa,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI;iBAC9D,CAAC,CAAC,CAAC,IAAI;gBACR,OAAO,EAAE,WAAW;oBAClB,CAAC,CAAC,WAAW,SAAS,CAAC,WAAW,CAAC,uBAAuB,SAAS,CAAC,YAAY,CAAC,2DAA2D;oBAC5I,CAAC,CAAC,WAAW,SAAS,CAAC,WAAW,CAAC,4BAA4B;aAClE,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,mBAAmB,CAAC,KAAK,CAAC,CAAC;QACpC,CAAC;IACH,CAAC,CACF,CAAC;IAEF,sCAAsC;IACtC,MAAM,CAAC,YAAY,CACjB,sBAAsB,EACtB;QACE,WAAW,EACT,uFAAuF;YACvF,sDAAsD;YACtD,+IAA+I;QACjJ,WAAW,EAAE;YACX,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8DAA8D,CAAC;SACzG;KACF,EACD,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;QACrB,IAAI,CAAC;YACH,6BAA6B;YAC7B,MAAM,eAAe,GAAG,WAAW,EAAE,CAAC;YACtC,IAAI,eAAe,EAAE,CAAC;gBACpB,OAAO,kBAAkB,CAAC;oBACxB,OAAO,EAAE,KAAK;oBACd,OAAO,EAAE,+BAA+B,eAAe,CAAC,UAAU,IAAI,eAAe,CAAC,aAAa,mEAAmE;iBACvK,CAAC,CAAC;YACL,CAAC;YAED,MAAM,GAAG,GAAG,YAAY,EAAE,CAAC;YAE3B,mBAAmB;YACnB,MAAM,YAAY,GAAG,MAAM,GAAG,CAAC,IAAI,CAAmB,oBAAoB,EAAE;gBAC1E,MAAM,EAAE,eAAe;gBACvB,MAAM,EAAE,EAAE,QAAQ,EAAE,QAAQ,IAAI,oBAAoB,EAAE;aACvD,CAAC,CAAC;YAEH,MAAM,EAAE,IAAI,EAAE,GAAG,YAAY,CAAC;YAE9B,8BAA8B;YAC9B,MAAM,GAAG,GAAG,QAAQ,IAAI,oBAAoB,CAAC;YAC7C,MAAM,GAAG,GAAG,GAAG,mBAAmB,QAAQ,IAAI,QAAQ,GAAG,EAAE,CAAC;YAC5D,MAAM,WAAW,CAAC,GAAG,CAAC,CAAC;YAEvB,sBAAsB;YACtB,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,IAAI,CAAC,CAAC;YAE/C,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;gBAC1D,eAAe;gBACf,MAAM,OAAO,GAAkB;oBAC7B,aAAa,EAAE,MAAM,CAAC,aAAa;oBACnC,UAAU,EAAE,MAAM,CAAC,UAAU;oBAC7B,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE;iBACxB,CAAC;gBACF,WAAW,CAAC,OAAO,CAAC,CAAC;gBAErB,OAAO,kBAAkB,CAAC;oBACxB,OAAO,EAAE,IAAI;oBACb,OAAO,EAAE,8BAA8B;oBACvC,aAAa,EAAE,MAAM,CAAC,aAAa;oBACnC,UAAU,EAAE,MAAM,CAAC,UAAU;iBAC9B,CAAC,CAAC;YACL,CAAC;YAED,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;gBAClC,OAAO,kBAAkB,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,4BAA4B,EAAE,CAAC,CAAC;YACvF,CAAC;YAED,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC/B,OAAO,kBAAkB,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,2BAA2B,MAAM,CAAC,KAAK,IAAI,eAAe,EAAE,EAAE,CAAC,CAAC;YACvH,CAAC;YAED,OAAO,kBAAkB,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,wCAAwC,EAAE,IAAI,EAAE,CAAC,CAAC;QACzG,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,mBAAmB,CAAC,KAAK,CAAC,CAAC;QACpC,CAAC;IACH,CAAC,CACF,CAAC;IAEF,oCAAoC;IACpC,MAAM,CAAC,YAAY,CACjB,eAAe,EACf;QACE,WAAW,EACT,yGAAyG;QAC3G,WAAW,EAAE,EAAE;KAChB,EACD,KAAK,IAAI,EAAE;QACT,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;YAC9B,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,kBAAkB,CAAC;oBACxB,OAAO,EAAE,KAAK;oBACd,OAAO,EAAE,2DAA2D;iBACrE,CAAC,CAAC;YACL,CAAC;YAED,MAAM,YAAY,GAAG,GAAG,mBAAmB,SAAS,OAAO,CAAC,aAAa,EAAE,CAAC;YAE5E,OAAO,kBAAkB,CAAC;gBACxB,OAAO,EAAE,IAAI;gBACb,YAAY;gBACZ,aAAa,EAAE,OAAO,CAAC,aAAa;gBACpC,OAAO,EAAE,sCAAsC,YAAY,EAAE;aAC9D,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,mBAAmB,CAAC,KAAK,CAAC,CAAC;QACpC,CAAC;IACH,CAAC,CACF,CAAC;IAEF,yDAAyD;IACzD,MAAM,CAAC,YAAY,CACjB,mBAAmB,EACnB;QACE,WAAW,EACT,mDAAmD;YACnD,gGAAgG;QAClG,WAAW,EAAE;YACX,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0DAA0D,CAAC;SACzF;KACF,EACD,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;QACpB,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;YAC9B,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,kBAAkB,CAAC;oBACxB,OAAO,EAAE,KAAK;oBACd,OAAO,EAAE,2DAA2D;iBACrE,CAAC,CAAC;YACL,CAAC;YAED,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YACtC,MAAM,GAAG,GAAG,YAAY,EAAE,CAAC;YAC3B,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,IAAI,CAI1B,yBAAyB,EAAE;gBAC5B,aAAa,EAAE,OAAO,CAAC,aAAa;gBACpC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,oBAAoB,EAAE,OAAO,EAAE,CAAC;aAC7E,CAAC,CAAC;YAEH,OAAO,kBAAkB,CAAC;gBACxB,OAAO,EAAE,IAAI;gBACb,aAAa,EAAE,MAAM,CAAC,aAAa;gBACnC,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,OAAO,EAAE,OAAO;oBACd,CAAC,CAAC,kBAAkB,OAAO,mDAAmD;oBAC9E,CAAC,CAAC,8BAA8B,OAAO,GAAG;gBAC5C,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAChE,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,mBAAmB,CAAC,KAAK,CAAC,CAAC;QACpC,CAAC;IACH,CAAC,CACF,CAAC;IAEF,4DAA4D;IAC5D,MAAM,CAAC,YAAY,CACjB,qBAAqB,EACrB;QACE,WAAW,EACT,4CAA4C;YAC5C,iGAAiG;QACnG,WAAW,EAAE,EAAE;KAChB,EACD,KAAK,IAAI,EAAE;QACT,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;YAC9B,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,kBAAkB,CAAC;oBACxB,OAAO,EAAE,KAAK;oBACd,OAAO,EAAE,2DAA2D;iBACrE,CAAC,CAAC;YACL,CAAC;YAED,MAAM,GAAG,GAAG,YAAY,EAAE,CAAC;YAC3B,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,GAAG,CAiBzB,8BAA8B,EAAE,EAAE,aAAa,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;YAE7E,MAAM,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC;YACtE,MAAM,OAAO,GAAG,MAAM,CAAC,cAAc,IAAI,EAAE,CAAC;YAE5C,OAAO,kBAAkB,CAAC;gBACxB,OAAO,EAAE,IAAI;gBACb,kBAAkB,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;oBACnC,aAAa,EAAE,CAAC,CAAC,aAAa;oBAC9B,OAAO,EAAE,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,cAAc;oBAC1C,MAAM,EAAE,CAAC,CAAC,MAAM;oBAChB,GAAG,EAAE,CAAC,CAAC,GAAG;oBACV,QAAQ,EAAE,CAAC,CAAC,QAAQ;oBACpB,aAAa,EAAE,CAAC,CAAC,aAAa;iBAC/B,CAAC,CAAC;gBACH,cAAc,EAAE,OAAO,CAAC,MAAM;gBAC9B,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;oBAChC,aAAa,EAAE,CAAC,CAAC,aAAa;oBAC9B,OAAO,EAAE,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,cAAc;oBAC3C,SAAS,EAAE,CAAC,CAAC,SAAS;iBACvB,CAAC,CAAC;gBACH,OAAO,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC;oBACxB,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,sBAAsB,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,MAAM,kBAAkB,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;oBAC1I,CAAC,CAAC,2BAA2B,OAAO,CAAC,MAAM,kBAAkB,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,8CAA8C;aAC7I,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,mBAAmB,CAAC,KAAK,CAAC,CAAC;QACpC,CAAC;IACH,CAAC,CACF,CAAC;IAEF,+CAA+C;IAC/C,MAAM,CAAC,YAAY,CACjB,wBAAwB,EACxB;QACE,WAAW,EACT,sHAAsH;QACxH,WAAW,EAAE,EAAE;KAChB,EACD,KAAK,IAAI,EAAE;QACT,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;YAC9B,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,kBAAkB,CAAC;oBACxB,OAAO,EAAE,KAAK;oBACd,OAAO,EAAE,2DAA2D;iBACrE,CAAC,CAAC;YACL,CAAC;YAED,MAAM,GAAG,GAAG,YAAY,EAAE,CAAC;YAC3B,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,GAAG,CAczB,8BAA8B,EAAE,EAAE,aAAa,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;YAE7E,OAAO,kBAAkB,CAAC;gBACxB,OAAO,EAAE,IAAI;gBACb,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;oBAC5C,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,QAAQ,EAAE,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;oBACxC,MAAM,EAAE,KAAK,CAAC,MAAM;oBACpB,GAAG,EAAE,KAAK,CAAC,GAAG;oBACd,KAAK,EAAE,KAAK,CAAC,MAAM,IAAI,KAAK;iBAC7B,CAAC,CAAC;gBACH,QAAQ,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;oBAC3B,IAAI,EAAE,MAAM,CAAC,SAAS,CAAC,IAAI;oBAC3B,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC,WAAW;oBACrC,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,MAAM;oBAC/B,GAAG,EAAE,MAAM,CAAC,SAAS,CAAC,GAAG;iBAC1B,CAAC,CAAC,CAAC,IAAI;gBACR,OAAO,EAAE,MAAM,CAAC,SAAS;oBACvB,CAAC,CAAC,kBAAkB,MAAM,CAAC,SAAS,CAAC,IAAI,WAAW,MAAM,CAAC,SAAS,CAAC,MAAM,qBAAqB,MAAM,CAAC,SAAS,CAAC,WAAW,GAAG;oBAC/H,CAAC,CAAC,oGAAoG;aACzG,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,mBAAmB,CAAC,KAAK,CAAC,CAAC;QACpC,CAAC;IACH,CAAC,CACF,CAAC;IAEF,kDAAkD;IAClD,MAAM,CAAC,YAAY,CACjB,mBAAmB,EACnB;QACE,WAAW,EACT,gGAAgG;YAChG,uDAAuD;QACzD,WAAW,EAAE,EAAE;KAChB,EACD,KAAK,IAAI,EAAE;QACT,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;YAC9B,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,kBAAkB,CAAC;oBACxB,OAAO,EAAE,KAAK;oBACd,OAAO,EAAE,2DAA2D;iBACrE,CAAC,CAAC;YACL,CAAC;YAED,MAAM,GAAG,GAAG,YAAY,EAAE,CAAC;YAmC3B,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,GAAG,CACvB,wBAAwB,EACxB,EAAE,aAAa,EAAE,OAAO,CAAC,aAAa,EAAE,CACzC,CAAC;YAEF,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC;YAExB,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO,kBAAkB,CAAC;oBACxB,OAAO,EAAE,IAAI;oBACb,WAAW,EAAE,KAAK;oBAClB,WAAW,EAAE,CAAC;oBACd,YAAY,EAAE,EAAE;oBAChB,OAAO,EAAE,yFAAyF;iBACnG,CAAC,CAAC;YACL,CAAC;YAED,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,IAAI,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;YACnG,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACxF,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,IAAI,EAAE,CAAC;YAE/C,MAAM,cAAc,GAAG,CAAC,CAAkB,EAAE,MAAsB,EAAE,EAAE;gBACpE,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,MAAM,CAAC;gBACtG,MAAM,WAAW,GAAG,MAAM;qBACvB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC;qBACrC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;gBACpD,MAAM,aAAa,GAAG,WAAW;oBAC/B,CAAC,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,WAAW,EAAE;oBACjD,CAAC,CAAC,IAAI,CAAC;gBAET,OAAO;oBACL,EAAE,EAAE,CAAC,CAAC,EAAE;oBACR,MAAM,EAAE,CAAC,CAAC,MAAM;oBAChB,eAAe,EAAE,CAAC,CAAC,eAAe;oBAClC,aAAa,EAAE,CAAC,CAAC,aAAa;oBAC9B,QAAQ,EAAE,GAAG,CAAC,CAAC,eAAe,IAAI,CAAC,CAAC,WAAW,mBAAmB;oBAClE,eAAe,EAAE,CAAC,CAAC,eAAe;oBAClC,aAAa;oBACb,YAAY,EAAE,CAAC,CAAC,YAAY;oBAC5B,aAAa;oBACb,SAAS,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE;iBAC/C,CAAC;YACJ,CAAC,CAAC;YAEF,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAC3C,cAAc,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,CAC7C,CAAC;YAEF,MAAM,eAAe,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC;YAEvE,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACjC,8BAA8B;gBAC9B,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;gBAC5B,OAAO,kBAAkB,CAAC;oBACxB,OAAO,EAAE,IAAI;oBACb,WAAW,EAAE,IAAI;oBACjB,WAAW,EAAE,CAAC;oBACd,YAAY;oBACZ,QAAQ,EAAE,MAAM;oBAChB,OAAO,EAAE,OAAO,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,QAAQ,GAAG;iBACrD,CAAC,CAAC;YACL,CAAC;YAED,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACjC,MAAM,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;gBAC7B,OAAO,kBAAkB,CAAC;oBACxB,OAAO,EAAE,IAAI;oBACb,WAAW,EAAE,IAAI;oBACjB,WAAW;oBACX,YAAY;oBACZ,QAAQ,EAAE,CAAC;oBACX,OAAO,EAAE,eAAe,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,aAAa,uBAAuB,CAAC,CAAC,aAAa,IAAI,SAAS,GAAG;iBAC7G,CAAC,CAAC;YACL,CAAC;YAED,4BAA4B;YAC5B,MAAM,SAAS,GAAG,eAAe,CAAC,GAAG,CACnC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,WAAW,CAAC,CAAC,aAAa,IAAI,SAAS,EAAE,CAC5F,CAAC;YACF,OAAO,kBAAkB,CAAC;gBACxB,OAAO,EAAE,IAAI;gBACb,WAAW,EAAE,IAAI;gBACjB,WAAW;gBACX,YAAY;gBACZ,SAAS,EAAE,eAAe;gBAC1B,OAAO,EAAE,GAAG,WAAW,8BAA8B,YAAY,OAAO,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;aAC/F,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,mBAAmB,CAAC,KAAK,CAAC,CAAC;QACpC,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aibtc/mcp-server",
3
- "version": "1.3.1",
3
+ "version": "1.4.0",
4
4
  "description": "Claude Code MCP server for x402 endpoint discovery and execution with Stacks wallet integration",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",