@candledottv/cli 0.11.12 → 0.11.13

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
  # @candledottv/cli
2
2
 
3
- The Candle CLI (current version 0.11.12): authorize a device from your browser, keep your own keys
3
+ The Candle CLI (current version 0.11.13): authorize a device from your browser, keep your own keys
4
4
  in an encrypted vault on this machine, hand an agent a TEE wallet it can trade, and manage API
5
5
  keys, wallets, and setup health from the terminal. Zero runtime dependencies; the whole thing is
6
6
  one self-contained `dist/index.js` that runs under plain Node.
package/dist/index.js CHANGED
@@ -49488,7 +49488,7 @@ var init_convert = __esm(() => {
49488
49488
  });
49489
49489
 
49490
49490
  // ../mcp/src/version.ts
49491
- var SERVER_VERSION = "0.10.1";
49491
+ var SERVER_VERSION = "0.10.4";
49492
49492
 
49493
49493
  // ../mcp/src/update-notice.ts
49494
49494
  function newer(a, b) {
@@ -50082,6 +50082,13 @@ function buildRequest(name2, args, cfg) {
50082
50082
  init: { method: "GET", headers: jsonHeaders(apiKey) }
50083
50083
  };
50084
50084
  }
50085
+ case "candle_get_portfolio": {
50086
+ const apiKey = requireApiKey2(cfg);
50087
+ return {
50088
+ url: `${base2}/api/v1/agent/portfolio`,
50089
+ init: { method: "GET", headers: jsonHeaders(apiKey) }
50090
+ };
50091
+ }
50085
50092
  case "candle_get_profile_trades": {
50086
50093
  const apiKey = requireApiKey2(cfg);
50087
50094
  const { keyPrefix, limit } = args;
@@ -50132,7 +50139,7 @@ function registerTools(server, env = process.env) {
50132
50139
  title: "Token forensics",
50133
50140
  description: `Gate a buy before making it: who launched it (resolved on-chain; pump.fun's shared updateAuthority is never the developer; when no developer is on chain, deployer.attribution names the launchpad or issuer instead, e.g. launched via stonk.fun or issued by xStocks), their went-to-zero rate and last coins, who bought in the deploy window (the creator's own wallets are marked disclosed; strangers in the same slot are the bundle signal), same-funder insider share, same-funder deployer cluster, and safety.summary with six sourced flags (mintAuthority, freezeAuthority, tokenExtensions, lpLock, sellability, liquidityDrain). Refuse an unprompted buy when flagged; incomplete or unknown is not clearance. launch.deployerLaunches is an inclusive informational count, never a warning. Every measurement carries a coverage note -- 'unavailable' is not 'clean'. No key needed.
50134
50141
 
50135
- MARKET_NOT_FOUND means Candle has no market for that token and this could not run. That is also not 'clean': report that you could not check it, rather than reporting the token as safe. That refusal now carries error.coverage -- covered:false, a reason ('external_launchpad' when the token launched somewhere else, 'unknown_mint' when nobody has indexed it), the launchpad when known, and every check that consequently did not run. Read it instead of guessing. Most of the feed, and any Solana mint Jupiter's index knows, now answers with a partial report instead.`,
50142
+ MARKET_NOT_FOUND means Candle has no market for that token and this could not run. That is also not 'clean': report that you could not check it, rather than reporting the token as safe. That refusal now carries error.coverage -- covered:false, a reason ('external_launchpad' when the token launched somewhere else, 'unknown_mint' when nobody has indexed it), the launchpad when known, and every check that consequently did not run. Read it instead of guessing. Most of the feed, and any Solana mint Jupiter's index knows, now answers with a partial report instead. On Hood, a token Candle did not launch names its launch account (deployer.method cvc_launch_account) for pons.family and pools.trade launches, with no record of earlier coins; other Hood launchpads return no developer.`,
50136
50143
  inputSchema: tokenForensicsShape
50137
50144
  }, async (args) => callAndRelay("candle_token_forensics", args, cfg));
50138
50145
  register("candle_get_feed", {
@@ -50184,7 +50191,7 @@ MARKET_NOT_FOUND means Candle has no market for that token and this could not ru
50184
50191
  }, async (args) => callAndRelay("candle_set_profile_wallets", args, cfg));
50185
50192
  register("candle_get_profile_pnl", {
50186
50193
  title: "Read an agent profile's P&L",
50187
- description: "Realized profit for this profile's own fills, the Candle fees charged against it, and the " + "positions it still holds with their cost basis, each MARKED at Candle's current price where one " + "exists: `markPriceUsd`, `marketValueUsd` and `unrealizedUsd` per position, and `unrealizedUsd` " + "overall. A position with no price is counted in `unmarkedPositions` and left out of unrealized, " + "never valued at zero; `oldestMarkAt` says how old the marks are. Deposits, withdrawals and " + "transfers are excluded: funding a wallet is not profit. Check `unvalued` and `truncated` before " + "quoting the number; they mean the total is partial. Reads only.",
50194
+ description: "Realized profit for this profile's own fills, the Candle fees charged against it, and the " + "positions it still holds with their cost basis, each MARKED at Candle's current price where one " + "exists: `markPriceUsd`, `marketValueUsd` and `unrealizedUsd` per position, and `unrealizedUsd` " + "overall. A position with no price is counted in `unmarkedPositions` and left out of unrealized, " + "never valued at zero; `oldestMarkAt` says how old the marks are. Deposits, withdrawals and " + "transfers are excluded: funding a wallet is not profit. Check `unvalued` and `truncated` before " + "quoting the number; they mean the total is partial. `pnl.byWallet` splits the same fills by the " + "wallet that paid for each trade (main or linked, with the linked wallet's label), one row per " + "wallet with the same figures, for tracking one strategy per wallet. Each row is an independent " + "average-cost pool over its own fills, so the rows need not sum to the total (a token moved " + "between wallets, or two wallets holding one token at different costs); the total stays correct. " + "Every open position and every `byWallet` row (and its positions) carries `chain` ('solana' or " + "'hood'), and `pnl.byChain` has the total's figures over each chain's fills alone, both chains " + "always present, with `openPositions` there a count (the positions are in `pnl.openPositions`, by " + "`chain`). Each chain is its own average-cost pool, so the two need not sum exactly to the total. A " + "server that predates per-chain P&L omits `chain` and `byChain`. Reads only.",
50188
50195
  inputSchema: profilePnlShape
50189
50196
  }, async (args) => callAndRelay("candle_get_profile_pnl", args, cfg));
50190
50197
  register("candle_get_profile_trades", {
@@ -50192,6 +50199,11 @@ MARKET_NOT_FOUND means Candle has no market for that token and this could not ru
50192
50199
  description: "Orders, actual fills, fees, timestamps and transaction hashes for this profile. Includes FAILED " + "trades, with an errorCode saying why each did not go through, so this answers 'what happened to " + "my order' as well as 'what did I trade'. Reads only; moves nothing.",
50193
50200
  inputSchema: profileTradesShape
50194
50201
  }, async (args) => callAndRelay("candle_get_profile_trades", args, cfg));
50202
+ register("candle_get_portfolio", {
50203
+ title: "Read what the account holds, on Solana and Hood",
50204
+ description: "Balances and prices for the wallets Candle already knows on this account, on both chains: the " + "embedded wallet and every TEE wallet. Solana wallets are in `embedded` and `tee` (SOL as raw " + "`lamports`, tokens as raw `amountRaw` with `decimals`). Hood wallets are in `hood.embedded` and " + "`hood.tee` (ETH as raw `wei`, ERC-20s including USDG), never in the top-level arrays. Every " + "wallet and holding carries `chain`. Prices are in `prices`: a Solana mint under its own " + "address, Hood ETH under `hood:native`, and a Hood token under `hood:<contract lowercased>`, so " + "lowercase the address before looking it up. An unpriced entry is `priceUsd: null`, never zero; " + "a Hood one says why in `unpricedReason` (no-market-row, unusable-price, stale-mark, " + "source-unavailable), and `hood.unpriced` / `hood.unpricedByReason` count them. A Hood token " + "mark older than six hours is not used, so many Hood tokens read unpriced. A wallet whose read " + "failed has null balances, never zero, and is listed in `unavailable` (Solana) or " + "`hood.unavailable`; check `complete` before quoting a total. Vault and external wallets are " + "not included: Candle does not know their addresses (the Candle CLI's `candle portfolio` reads " + "them over your own RPC). Needs a key with the account:read scope; without it the answer is " + "SCOPE_MISSING. A server that predates Hood in the portfolio omits `hood` and `chain`. Reads " + "only; moves nothing.",
50205
+ inputSchema: {}
50206
+ }, async () => callAndRelay("candle_get_portfolio", {}, cfg));
50195
50207
  register("candle_resolve_token", {
50196
50208
  title: "Resolve a contract address to a token",
50197
50209
  description: "Turn a bare contract address or mint into Candle's market for it: chain, symbol, " + "decimals, quote asset, and whether Candle can trade it. Start here when a human gives " + "you an address and nothing else. The chain is read off the address's own shape and is " + "not guessed, so it does not need to be supplied. Reads only; moves nothing. A 404 means " + "Candle has no market for that address, which is an answer, not a failure to retry.",
@@ -50291,6 +50303,7 @@ var init_tools = __esm(() => {
50291
50303
  "candle_set_profile_wallets",
50292
50304
  "candle_get_profile_pnl",
50293
50305
  "candle_get_profile_trades",
50306
+ "candle_get_portfolio",
50294
50307
  "candle_resolve_token",
50295
50308
  "candle_execution_status",
50296
50309
  "candle_get_operation"
@@ -50516,7 +50529,7 @@ init_render();
50516
50529
  init_secret_store();
50517
50530
 
50518
50531
  // src/version.ts
50519
- var CLI_VERSION = "0.11.12";
50532
+ var CLI_VERSION = "0.11.13";
50520
50533
 
50521
50534
  // src/commands/auth.ts
50522
50535
  init_keys_embedded_wallet();
@@ -58954,6 +58967,7 @@ var MCP_TOOL_NAMES = [
58954
58967
  "candle_set_profile_wallets",
58955
58968
  "candle_get_profile_pnl",
58956
58969
  "candle_get_profile_trades",
58970
+ "candle_get_portfolio",
58957
58971
  "candle_resolve_token",
58958
58972
  "candle_execution_status",
58959
58973
  "candle_get_operation"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@candledottv/cli",
3
- "version": "0.11.12",
3
+ "version": "0.11.13",
4
4
  "description": "The Candle CLI: authorize a device from your browser, then manage API keys, wallets, and setup health from the terminal",
5
5
  "type": "module",
6
6
  "bin": {