@andrewkimjoseph/celina-sdk 0.4.7 → 0.4.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Celina SDK
2
2
 
3
- **`@andrewkimjoseph/celina-sdk@0.4.7`** — Celo mainnet library for frontend apps and agents: **reads** and **unsigned transaction preparation** (no private keys).
3
+ **`@andrewkimjoseph/celina-sdk@0.4.8`** — Celo mainnet library for frontend apps and agents: **reads** and **unsigned transaction preparation** (no private keys).
4
4
 
5
5
  Pair with [wagmi](https://wagmi.sh) / viem — users sign prepared transactions in their wallet.
6
6
 
@@ -11,8 +11,8 @@ Celina is layered from chain logic through agent tooling:
11
11
  | Layer | Package | Role |
12
12
  |-------|---------|------|
13
13
  | **SDK** | `@andrewkimjoseph/celina-sdk` | Reads, gas estimates, `prepare*` flows, Carbon REST + SDK hybrid |
14
- | **MCP** | `@andrewkimjoseph/celina-mcp` | MCP tools for Cursor / Claude / LM Studio — stdio writes or hosted reads |
15
- | **MCP host** | `celina-mcp-host` | Vercel Streamable HTTP — read-only public endpoint |
14
+ | **MCP** | `@andrewkimjoseph/celina-mcp` | MCP tools for Cursor / Claude / LM Studio — stdio writes or hosted reads + Carbon prepare |
15
+ | **MCP host** | `celina-mcp-host` | Vercel Streamable HTTP — hosted reads + Carbon prepare (72 tools); no server-key writes or `execute_carbon_*` |
16
16
 
17
17
  This repo is the **SDK**. Downstream packages depend on published npm semver (no local `file:` links in production).
18
18
 
@@ -92,7 +92,11 @@ Hybrid **Carbon REST** (`https://mcp.carbondefi.xyz`) plus **`@bancor/carbon-sdk
92
92
  - **`deep_link`** on prepare responses — Carbon REST trade/disposable UI URL (reference only; signing is via your wallet flow).
93
93
  - **`carbonActivityDeepLink(wallet)`** — post-execution activity explorer on [celo.carbondefi.xyz](https://celo.carbondefi.xyz).
94
94
 
95
- Set `CARBON_API_BASE_URL` to override the REST base. Hosted MCP exposes **12 read + 13 prepare** tools (71 total); `execute_carbon_*` requires local stdio with `CELO_PRIVATE_KEY`.
95
+ Set `CARBON_API_BASE_URL` to override the REST base. Hosted MCP exposes **72 tools** (reads + Carbon prepare); `execute_carbon_*` requires local stdio with `CELO_PRIVATE_KEY`.
96
+
97
+ ### MCP session wallet (not in the SDK)
98
+
99
+ Local **celina-mcp** with `CELO_PRIVATE_KEY` can omit wallet params on many tools and use **`get_wallet_address`** instead of shelling out for the signer. The SDK always requires an explicit `0x…` from your app (e.g. wagmi). See [MCP session wallet](docs/guides/mcp-session-wallet.md). **Celeste AI** is an independent app built on this SDK + browser wallet signing — it does not use celina-mcp.
96
100
 
97
101
  Full workflow: [Carbon DeFi guide](docs/guides/carbon.md).
98
102
 
@@ -110,8 +114,8 @@ MCP: `get_gooddollar_whitelisting_info`, `get_gooddollar_ubi_entitlement` (read)
110
114
 
111
115
  ## Related packages
112
116
 
113
- - [`@andrewkimjoseph/celina-mcp`](https://www.npmjs.com/package/@andrewkimjoseph/celina-mcp) `@0.8.4` — MCP server (38 Carbon tools on stdio; hosted: 12 read + 13 prepare)
114
- - [`celina-mcp-host`](../celina-mcp-host/) — Vercel-hosted read-only MCP endpoint
117
+ - [`@andrewkimjoseph/celina-mcp`](https://www.npmjs.com/package/@andrewkimjoseph/celina-mcp) `@0.8.5` — MCP server (`get_wallet_address`, optional address on wallet-scoped tools; 85 tools stdio, 72 hosted)
118
+ - [`celina-mcp-host`](../celina-mcp-host/) — Vercel-hosted MCP endpoint (`https://mcp.usecelina.xyz/api/mcp`) — reads + Carbon prepare
115
119
  - [`@selfxyz/agent-sdk`](https://www.npmjs.com/package/@selfxyz/agent-sdk) — Self Agent ID browser flows
116
120
 
117
121
  ## License
@@ -4,6 +4,7 @@
4
4
  */
5
5
  export const MCP_TOOL_EVENT_BY_SDK_METHOD = {
6
6
  "account.getAccount": "get_account",
7
+ "account.getWalletAddress": "get_wallet_address",
7
8
  "blockchain.getBlock": "get_block",
8
9
  "blockchain.getLatestBlocks": "get_latest_blocks",
9
10
  "blockchain.getNetworkStatus": "get_network_status",
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-tool-events.js","sourceRoot":"","sources":["../../src/analytics/mcp-tool-events.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAqC;IAC5E,oBAAoB,EAAE,aAAa;IACnC,qBAAqB,EAAE,WAAW;IAClC,4BAA4B,EAAE,mBAAmB;IACjD,6BAA6B,EAAE,oBAAoB;IACnD,2BAA2B,EAAE,iBAAiB;IAC9C,oBAAoB,EAAE,qBAAqB;IAC3C,0BAA0B,EAAE,2BAA2B;IACvD,oBAAoB,EAAE,qBAAqB;IAC3C,wBAAwB,EAAE,0BAA0B;IACpD,yBAAyB,EAAE,2BAA2B;IACtD,sBAAsB,EAAE,uBAAuB;IAC/C,oBAAoB,EAAE,qBAAqB;IAC3C,sBAAsB,EAAE,wBAAwB;IAChD,aAAa,EAAE,aAAa;IAC5B,cAAc,EAAE,cAAc;IAC9B,qBAAqB,EAAE,sBAAsB;IAC7C,yBAAyB,EAAE,0BAA0B;IACrD,uBAAuB,EAAE,wBAAwB;IACjD,sBAAsB,EAAE,uBAAuB;IAC/C,gBAAgB,EAAE,aAAa;IAC/B,mCAAmC,EAAE,gCAAgC;IACrE,gCAAgC,EAAE,kCAAkC;IACpE,mCAAmC,EAAE,0BAA0B;IAC/D,+BAA+B,EAAE,sBAAsB;IACvD,oBAAoB,EAAE,mBAAmB;IACzC,oBAAoB,EAAE,oBAAoB;IAC1C,mBAAmB,EAAE,iBAAiB;IACtC,gBAAgB,EAAE,cAAc;IAChC,6BAA6B,EAAE,0BAA0B;IACzD,4BAA4B,EAAE,yBAAyB;IACvD,sBAAsB,EAAE,mBAAmB;IAC3C,sBAAsB,EAAE,mBAAmB;IAC3C,sBAAsB,EAAE,mBAAmB;IAC3C,sBAAsB,EAAE,mBAAmB;IAC3C,wBAAwB,EAAE,qBAAqB;IAC/C,8BAA8B,EAAE,wBAAwB;IACxD,4BAA4B,EAAE,sBAAsB;IACpD,6BAA6B,EAAE,wBAAwB;IACvD,kCAAkC,EAAE,6BAA6B;IACjE,4BAA4B,EAAE,sBAAsB;IACpD,mBAAmB,EAAE,mBAAmB;IACxC,6BAA6B,EAAE,yBAAyB;IACxD,uBAAuB,EAAE,mBAAmB;IAC5C,oBAAoB,EAAE,gBAAgB;IACtC,0BAA0B,EAAE,eAAe;IAC3C,iCAAiC,EAAE,sBAAsB;IACzD,2BAA2B,EAAE,kBAAkB;IAC/C,sBAAsB,EAAE,uBAAuB;IAC/C,sBAAsB,EAAE,mBAAmB;CACnC,CAAC"}
1
+ {"version":3,"file":"mcp-tool-events.js","sourceRoot":"","sources":["../../src/analytics/mcp-tool-events.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAqC;IAC5E,oBAAoB,EAAE,aAAa;IACnC,0BAA0B,EAAE,oBAAoB;IAChD,qBAAqB,EAAE,WAAW;IAClC,4BAA4B,EAAE,mBAAmB;IACjD,6BAA6B,EAAE,oBAAoB;IACnD,2BAA2B,EAAE,iBAAiB;IAC9C,oBAAoB,EAAE,qBAAqB;IAC3C,0BAA0B,EAAE,2BAA2B;IACvD,oBAAoB,EAAE,qBAAqB;IAC3C,wBAAwB,EAAE,0BAA0B;IACpD,yBAAyB,EAAE,2BAA2B;IACtD,sBAAsB,EAAE,uBAAuB;IAC/C,oBAAoB,EAAE,qBAAqB;IAC3C,sBAAsB,EAAE,wBAAwB;IAChD,aAAa,EAAE,aAAa;IAC5B,cAAc,EAAE,cAAc;IAC9B,qBAAqB,EAAE,sBAAsB;IAC7C,yBAAyB,EAAE,0BAA0B;IACrD,uBAAuB,EAAE,wBAAwB;IACjD,sBAAsB,EAAE,uBAAuB;IAC/C,gBAAgB,EAAE,aAAa;IAC/B,mCAAmC,EAAE,gCAAgC;IACrE,gCAAgC,EAAE,kCAAkC;IACpE,mCAAmC,EAAE,0BAA0B;IAC/D,+BAA+B,EAAE,sBAAsB;IACvD,oBAAoB,EAAE,mBAAmB;IACzC,oBAAoB,EAAE,oBAAoB;IAC1C,mBAAmB,EAAE,iBAAiB;IACtC,gBAAgB,EAAE,cAAc;IAChC,6BAA6B,EAAE,0BAA0B;IACzD,4BAA4B,EAAE,yBAAyB;IACvD,sBAAsB,EAAE,mBAAmB;IAC3C,sBAAsB,EAAE,mBAAmB;IAC3C,sBAAsB,EAAE,mBAAmB;IAC3C,sBAAsB,EAAE,mBAAmB;IAC3C,wBAAwB,EAAE,qBAAqB;IAC/C,8BAA8B,EAAE,wBAAwB;IACxD,4BAA4B,EAAE,sBAAsB;IACpD,6BAA6B,EAAE,wBAAwB;IACvD,kCAAkC,EAAE,6BAA6B;IACjE,4BAA4B,EAAE,sBAAsB;IACpD,mBAAmB,EAAE,mBAAmB;IACxC,6BAA6B,EAAE,yBAAyB;IACxD,uBAAuB,EAAE,mBAAmB;IAC5C,oBAAoB,EAAE,gBAAgB;IACtC,0BAA0B,EAAE,eAAe;IAC3C,iCAAiC,EAAE,sBAAsB;IACzD,2BAA2B,EAAE,kBAAkB;IAC/C,sBAAsB,EAAE,uBAAuB;IAC/C,sBAAsB,EAAE,mBAAmB;CACnC,CAAC"}
@@ -2,6 +2,7 @@ import { encodeFunctionData, erc20Abi } from "viem";
2
2
  import { CELO_CARBON_CONTRACTS } from "../config/carbon.js";
3
3
  import { appendCelinaCalldataTag } from "../config/celina-tag.js";
4
4
  import { resolveCarbonTokenAddress } from "./carbon-token.js";
5
+ import { applyCarbonStepLabels } from "./carbon-step-labels.js";
5
6
  const CARBON_CONTROLLER = CELO_CARBON_CONTRACTS.carbonControllerAddress;
6
7
  function collectApprovalSpecs(meta) {
7
8
  const specs = [];
@@ -95,6 +96,11 @@ export async function buildCarbonExecutionSteps(from, prepared, orderMeta, deps)
95
96
  throw new Error("Carbon prepare response did not include unsigned transaction steps.");
96
97
  }
97
98
  const approvalSteps = await buildApprovalSteps(from, deps.tokenService, deps.clientFactory, collectApprovalSpecs(orderMeta));
98
- return [...approvalSteps, ...carbonSteps];
99
+ return applyCarbonStepLabels([...approvalSteps, ...carbonSteps], {
100
+ summary: prepared.preparedFlow?.summary ?? "Carbon transaction",
101
+ orderMeta,
102
+ strategyPreview: prepared.strategyPreview,
103
+ tokenService: deps.tokenService,
104
+ });
99
105
  }
100
106
  //# sourceMappingURL=carbon-execution.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"carbon-execution.js","sourceRoot":"","sources":["../../src/utils/carbon-execution.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAKlE,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAE9D,MAAM,iBAAiB,GAAG,qBAAqB,CAAC,uBAAuB,CAAC;AAOxE,SAAS,oBAAoB,CAAC,IAA6B;IACzD,MAAM,KAAK,GAAmB,EAAE,CAAC;IACjC,MAAM,SAAS,GAAG,IAAI,CAAC,SAA+B,CAAC;IAEvD,IAAI,SAAS,KAAK,KAAK,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC;QAC3E,KAAK,CAAC,IAAI,CAAC;YACT,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC;YAC/B,MAAM,EAAE,IAAI,CAAC,MAAyB;SACvC,CAAC,CAAC;IACL,CAAC;SAAM,IACL,SAAS,KAAK,MAAM;QACpB,IAAI,CAAC,UAAU,IAAI,IAAI;QACvB,IAAI,CAAC,MAAM,IAAI,IAAI,EACnB,CAAC;QACD,KAAK,CAAC,IAAI,CAAC;YACT,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;YAC9B,MAAM,EAAE,IAAI,CAAC,MAAyB;SACvC,CAAC,CAAC;IACL,CAAC;IAED,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,EAAE,CAAC;QACxD,KAAK,CAAC,IAAI,CAAC;YACT,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC;YAC/B,MAAM,EAAE,IAAI,CAAC,UAA6B;SAC3C,CAAC,CAAC;IACL,CAAC;IACD,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,EAAE,CAAC;QACxD,KAAK,CAAC,IAAI,CAAC;YACT,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;YAC9B,MAAM,EAAE,IAAI,CAAC,WAA8B;SAC5C,CAAC,CAAC;IACL,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,QAAQ,CAAC;IACvD,IAAI,WAAW,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC;QAC/C,KAAK,CAAC,IAAI,CAAC;YACT,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC;YAC1B,MAAM,EAAE,IAAI,CAAC,MAAyB;SACvC,CAAC,CAAC;IACL,CAAC;IAED,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC;QAC9C,KAAK,CAAC,IAAI,CAAC;YACT,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;YACzB,MAAM,EAAE,IAAI,CAAC,MAAyB;SACvC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,KAAK,UAAU,aAAa,CAC1B,aAAgC,EAChC,KAAoB,EACpB,YAA2B,EAC3B,SAAiB;IAEjB,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,aAAa,CAAC,UAAU,EAAE,CAAC;IACtD,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC;QAC1C,OAAO,EAAE,YAAY;QACrB,GAAG,EAAE,QAAQ;QACb,YAAY,EAAE,WAAW;QACzB,IAAI,EAAE,CAAC,KAAK,EAAE,iBAAiB,CAAC;KACjC,CAAC,CAAC;IACH,OAAO,SAAS,GAAG,SAAS,CAAC;AAC/B,CAAC;AAED,KAAK,UAAU,kBAAkB,CAC/B,IAAmB,EACnB,YAA0B,EAC1B,aAAgC,EAChC,KAAqB;IAErB,MAAM,KAAK,GAAiB,EAAE,CAAC;IAC/B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAE/B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,YAAY,GAAG,yBAAyB,CAAC,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACzE,MAAM,GAAG,GAAG,GAAG,YAAY,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAC7C,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,SAAS;QAC5B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAEd,MAAM,QAAQ,GAAG,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvD,MAAM,SAAS,GAAG,YAAY,CAAC,WAAW,CACxC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EACnB,QAAQ,CAAC,QAAQ,CAClB,CAAC;QAEF,IAAI,CAAC,CAAC,MAAM,aAAa,CAAC,aAAa,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC;YACzE,SAAS;QACX,CAAC;QAED,MAAM,WAAW,GAAG,uBAAuB,CACzC,kBAAkB,CAAC;YACjB,GAAG,EAAE,QAAQ;YACb,YAAY,EAAE,SAAS;YACvB,IAAI,EAAE,CAAC,iBAAiB,EAAE,SAAS,CAAC;SACrC,CAAC,CACH,CAAC;QAEF,KAAK,CAAC,IAAI,CAAC;YACT,IAAI,EAAE,OAAO;YACb,EAAE,EAAE,YAAY;YAChB,IAAI,EAAE,WAAW;YACjB,KAAK,EAAE,GAAG;YACV,WAAW,EAAE,WAAW,IAAI,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,kBAAkB;SACzE,CAAC,CAAC;IACL,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,IAAmB,EACnB,QAA6B,EAC7B,SAAkC,EAClC,IAGC;IAED,MAAM,WAAW,GAAG,QAAQ,CAAC,YAAY,EAAE,KAAK,CAAC;IACjD,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CACb,qEAAqE,CACtE,CAAC;IACJ,CAAC;IAED,MAAM,aAAa,GAAG,MAAM,kBAAkB,CAC5C,IAAI,EACJ,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,aAAa,EAClB,oBAAoB,CAAC,SAAS,CAAC,CAChC,CAAC;IAEF,OAAO,CAAC,GAAG,aAAa,EAAE,GAAG,WAAW,CAAC,CAAC;AAC5C,CAAC"}
1
+ {"version":3,"file":"carbon-execution.js","sourceRoot":"","sources":["../../src/utils/carbon-execution.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { PreparedTx } from "../types/prepared.js";
2
+ import type { TokenService } from "../services/token.service.js";
3
+ export type CarbonStepLabelContext = {
4
+ summary: string;
5
+ orderMeta: Record<string, unknown>;
6
+ strategyPreview?: unknown;
7
+ tokenService: TokenService;
8
+ };
9
+ /** Human-readable label for a Carbon controller transaction step. */
10
+ export declare function describeCarbonControllerStep(ctx: CarbonStepLabelContext, index: number, total: number): string;
11
+ /** Replace generic Carbon REST step descriptions with human-readable labels. */
12
+ export declare function applyCarbonStepLabels(steps: PreparedTx[], ctx: CarbonStepLabelContext): PreparedTx[];
@@ -0,0 +1,180 @@
1
+ const GENERIC_CARBON_STEP = /^Carbon transaction step \d+$/;
2
+ function readRecord(value) {
3
+ return value && typeof value === "object"
4
+ ? value
5
+ : {};
6
+ }
7
+ function readPositive(value) {
8
+ if (value === undefined || value === null || value === "") {
9
+ return null;
10
+ }
11
+ const n = typeof value === "number" ? value : Number(String(value).replace(/,/g, ""));
12
+ return Number.isFinite(n) && n > 0 ? n : null;
13
+ }
14
+ function resolveSymbol(tokenService, token) {
15
+ if (token === undefined || token === null || token === "") {
16
+ return "?";
17
+ }
18
+ try {
19
+ return tokenService.resolveToken(String(token)).symbol;
20
+ }
21
+ catch {
22
+ return String(token).trim();
23
+ }
24
+ }
25
+ function formatAmount(value) {
26
+ if (value >= 1) {
27
+ return value.toLocaleString(undefined, { maximumFractionDigits: 4 });
28
+ }
29
+ return value.toLocaleString(undefined, { maximumFractionDigits: 6 });
30
+ }
31
+ function pairLabel(ctx) {
32
+ const meta = ctx.orderMeta;
33
+ const base = resolveSymbol(ctx.tokenService, meta.base_token ?? meta.base);
34
+ const quote = resolveSymbol(ctx.tokenService, meta.quote_token ?? meta.quote);
35
+ return `${base} / ${quote}`;
36
+ }
37
+ function directionFrom(ctx) {
38
+ const meta = ctx.orderMeta;
39
+ const preview = readRecord(ctx.strategyPreview);
40
+ const raw = String(preview.direction ?? meta.direction ?? "buy").toLowerCase();
41
+ return raw === "sell" ? "sell" : "buy";
42
+ }
43
+ function budgetLabel(ctx) {
44
+ const meta = ctx.orderMeta;
45
+ const preview = readRecord(ctx.strategyPreview);
46
+ const direction = directionFrom(ctx);
47
+ const amount = readPositive(preview.budget) ??
48
+ readPositive(meta.budget) ??
49
+ (direction === "sell"
50
+ ? readPositive(meta.sell_budget)
51
+ : readPositive(meta.buy_budget));
52
+ if (amount === null) {
53
+ return null;
54
+ }
55
+ const token = direction === "sell"
56
+ ? resolveSymbol(ctx.tokenService, meta.base_token ?? meta.base)
57
+ : resolveSymbol(ctx.tokenService, meta.quote_token ?? meta.quote);
58
+ return `${formatAmount(amount)} ${token}`;
59
+ }
60
+ function actionFromSummary(summary) {
61
+ const normalized = summary.trim().toLowerCase();
62
+ if (normalized.includes("limit order"))
63
+ return "limit";
64
+ if (normalized.includes("range order"))
65
+ return "range";
66
+ if (normalized.includes("recurring strategy"))
67
+ return "recurring";
68
+ if (normalized.includes("concentrated strategy"))
69
+ return "concentrated";
70
+ if (normalized.includes("full-range strategy"))
71
+ return "full-range";
72
+ if (normalized.includes("reprice strategy"))
73
+ return "reprice";
74
+ if (normalized.includes("edit strategy"))
75
+ return "edit";
76
+ if (normalized.includes("deposit budget"))
77
+ return "deposit";
78
+ if (normalized.includes("withdraw budget"))
79
+ return "withdraw";
80
+ if (normalized.includes("pause strategy"))
81
+ return "pause";
82
+ if (normalized.includes("resume strategy"))
83
+ return "resume";
84
+ if (normalized.includes("delete strategy"))
85
+ return "delete";
86
+ if (normalized.includes("taker swap"))
87
+ return "swap";
88
+ return null;
89
+ }
90
+ function actionFromPreview(preview) {
91
+ const type = String(preview.type ?? "").toLowerCase();
92
+ if (type.includes("limit"))
93
+ return "limit";
94
+ if (type.includes("range"))
95
+ return "range";
96
+ if (type.includes("recurring"))
97
+ return "recurring";
98
+ if (type.includes("concentrated"))
99
+ return "concentrated";
100
+ if (type.includes("full"))
101
+ return "full-range";
102
+ return null;
103
+ }
104
+ function createActionLabel(ctx) {
105
+ const preview = readRecord(ctx.strategyPreview);
106
+ const action = actionFromPreview(preview) ?? actionFromSummary(ctx.summary) ?? "strategy";
107
+ const direction = directionFrom(ctx);
108
+ const pair = pairLabel(ctx);
109
+ const budget = budgetLabel(ctx);
110
+ if (action === "swap") {
111
+ return "Swap via Carbon DeFi";
112
+ }
113
+ if (action === "reprice")
114
+ return "Reprice Carbon strategy";
115
+ if (action === "edit")
116
+ return "Edit Carbon strategy";
117
+ if (action === "deposit")
118
+ return "Deposit to Carbon strategy";
119
+ if (action === "withdraw")
120
+ return "Withdraw from Carbon strategy";
121
+ if (action === "pause")
122
+ return "Pause Carbon strategy";
123
+ if (action === "resume")
124
+ return "Resume Carbon strategy";
125
+ if (action === "delete")
126
+ return "Close Carbon strategy";
127
+ if (action === "recurring") {
128
+ return budget
129
+ ? `Create recurring strategy — ${budget} on ${pair}`
130
+ : `Create recurring strategy — ${pair}`;
131
+ }
132
+ if (action === "concentrated" || action === "full-range") {
133
+ const kind = action === "concentrated" ? "concentrated" : "full-range";
134
+ return budget
135
+ ? `Create ${kind} strategy — ${budget} on ${pair}`
136
+ : `Create ${kind} strategy — ${pair}`;
137
+ }
138
+ const side = action === "range" ? "range" : "limit";
139
+ const sideLabel = `${side} ${direction}`;
140
+ return budget
141
+ ? `Create ${sideLabel} — ${budget} on ${pair}`
142
+ : `Create ${sideLabel} on ${pair}`;
143
+ }
144
+ /** Human-readable label for a Carbon controller transaction step. */
145
+ export function describeCarbonControllerStep(ctx, index, total) {
146
+ const base = createActionLabel(ctx);
147
+ if (total <= 1) {
148
+ return base;
149
+ }
150
+ return `${base} (step ${index + 1} of ${total})`;
151
+ }
152
+ function isApprovalStep(step) {
153
+ return (step.kind === "erc20" ||
154
+ step.description.startsWith("Approve "));
155
+ }
156
+ function isGenericCarbonStep(step) {
157
+ return GENERIC_CARBON_STEP.test(step.description);
158
+ }
159
+ /** Replace generic Carbon REST step descriptions with human-readable labels. */
160
+ export function applyCarbonStepLabels(steps, ctx) {
161
+ const controllerIndexes = steps
162
+ .map((step, index) => ({ step, index }))
163
+ .filter(({ step }) => !isApprovalStep(step) && isGenericCarbonStep(step));
164
+ if (controllerIndexes.length === 0) {
165
+ return steps;
166
+ }
167
+ const total = controllerIndexes.length;
168
+ const labels = new Map();
169
+ controllerIndexes.forEach(({ index }, controllerIndex) => {
170
+ labels.set(index, describeCarbonControllerStep(ctx, controllerIndex, total));
171
+ });
172
+ return steps.map((step, index) => {
173
+ const label = labels.get(index);
174
+ if (!label) {
175
+ return step;
176
+ }
177
+ return { ...step, description: label };
178
+ });
179
+ }
180
+ //# sourceMappingURL=carbon-step-labels.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"carbon-step-labels.js","sourceRoot":"","sources":["../../src/utils/carbon-step-labels.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@andrewkimjoseph/celina-sdk",
3
- "version": "0.4.7",
3
+ "version": "0.4.9",
4
4
  "description": "Celina SDK — Celo mainnet reads and unsigned transaction preparation for frontend apps.",
5
5
  "type": "module",
6
6
  "sideEffects": false,
@@ -88,4 +88,22 @@ export const blockchainOperations: OperationSpec[] = [
88
88
  assertHasKeys(result, ["address", "balanceWei"]);
89
89
  },
90
90
  },
91
+ {
92
+ id: "account.getWalletAddress",
93
+ domain: "blockchain",
94
+ layer: "read",
95
+ requiresEnv: ["CELO_PRIVATE_KEY"],
96
+ mcp: {
97
+ tool: "get_wallet_address",
98
+ arguments: () => ({}),
99
+ },
100
+ assert: (result, fx) => {
101
+ const obj = assertHasKeys(result, ["wallet_address", "has_wallet", "source"]);
102
+ expect(obj.has_wallet).toBe(true);
103
+ expect(String(obj.wallet_address).toLowerCase()).toBe(
104
+ fx.wallet.toLowerCase(),
105
+ );
106
+ expect(obj.source).toBe("CELO_PRIVATE_KEY");
107
+ },
108
+ },
91
109
  ];