@t2000/cli 5.8.0 → 5.10.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.
|
@@ -80332,7 +80332,7 @@ Through this wallet you can reach essentially any major external API, billed to
|
|
|
80332
80332
|
CRITICAL: When the user asks to use any external or paid API, names a provider (e.g. "via fal.ai", "with ElevenLabs"), or requests a capability one of the services above provides, DO NOT say you cannot reach that service, that it isn't on an allowlist, or that there's no connector \u2014 and do NOT fall back to writing a script for the user to run. You CAN do it directly through this wallet. Use t2000_services to discover the endpoint and request shape, then t2000_pay to execute, then show the user the result (display image/audio URLs returned in the response).
|
|
80333
80333
|
|
|
80334
80334
|
Spending is the user's own USDC and every t2000_pay call is bounded by maxPrice. For larger or multi-step spends, state the estimated cost first and proceed once the user is happy. Use t2000_balance to check funds. The v4 wallet is payments-only; savings / lending live on audric.ai.`;
|
|
80335
|
-
var PKG_VERSION = "5.
|
|
80335
|
+
var PKG_VERSION = "5.10.0";
|
|
80336
80336
|
console.log = (...args) => console.error("[log]", ...args);
|
|
80337
80337
|
console.warn = (...args) => console.error("[warn]", ...args);
|
|
80338
80338
|
async function startMcpServer(opts) {
|
|
@@ -80398,4 +80398,4 @@ mime-types/index.js:
|
|
|
80398
80398
|
@scure/bip39/index.js:
|
|
80399
80399
|
(*! scure-bip39 - MIT License (c) 2022 Patricio Palladino, Paul Miller (paulmillr.com) *)
|
|
80400
80400
|
*/
|
|
80401
|
-
//# sourceMappingURL=dist-
|
|
80401
|
+
//# sourceMappingURL=dist-5EASN5MD.js.map
|
package/dist/index.js
CHANGED
|
@@ -32580,7 +32580,7 @@ function registerMcpStart(parent) {
|
|
|
32580
32580
|
parent.command("start", { isDefault: true }).description("Start MCP server (stdio transport \u2014 for AI client integration)").option("--key <path>", "Custom wallet path (default ~/.t2000/wallet.key)").action(async (opts) => {
|
|
32581
32581
|
let mod2;
|
|
32582
32582
|
try {
|
|
32583
|
-
mod2 = await import("./dist-
|
|
32583
|
+
mod2 = await import("./dist-5EASN5MD.js");
|
|
32584
32584
|
} catch {
|
|
32585
32585
|
console.error("MCP server not installed. Run:\n npm install -g @t2000/mcp");
|
|
32586
32586
|
process.exit(1);
|
|
@@ -32921,6 +32921,7 @@ For MCP-aware clients (Claude Desktop, Cursor, Windsurf), prefer
|
|
|
32921
32921
|
|
|
32922
32922
|
// src/commands/agent/index.ts
|
|
32923
32923
|
var DEFAULT_API_BASE2 = process.env.T2000_API_URL ?? "https://api.t2000.ai/v1";
|
|
32924
|
+
var DEFAULT_GATEWAY = process.env.T2000_GATEWAY_URL ?? "https://mpp.t2000.ai";
|
|
32924
32925
|
function normalizeTopupAsset(input) {
|
|
32925
32926
|
return input?.toLowerCase() === "usdsui" ? "USDsui" : "USDC";
|
|
32926
32927
|
}
|
|
@@ -33188,14 +33189,20 @@ Subcommands:
|
|
|
33188
33189
|
).option("--mcp-endpoint <url>", "Your agent service endpoint (https)").option(
|
|
33189
33190
|
"--payment-methods <list>",
|
|
33190
33191
|
'Comma-separated methods you accept, e.g. "x402"'
|
|
33191
|
-
).option("--key <path>", "Custom wallet path (default ~/.t2000/wallet.key)").option("--api <url>", `API base URL (default ${DEFAULT_API_BASE2})`).action(
|
|
33192
|
+
).option("--price <usdc>", "Price per call in USDC (e.g. 0.02) \u2014 buyers pay this").option("--key <path>", "Custom wallet path (default ~/.t2000/wallet.key)").option("--api <url>", `API base URL (default ${DEFAULT_API_BASE2})`).action(
|
|
33192
33193
|
async (opts) => {
|
|
33193
33194
|
try {
|
|
33194
|
-
if (!(opts.mcpEndpoint || opts.paymentMethods)) {
|
|
33195
|
+
if (!(opts.mcpEndpoint || opts.paymentMethods || opts.price)) {
|
|
33195
33196
|
throw new Error(
|
|
33196
|
-
"Provide at least one of --mcp-endpoint, --payment-methods."
|
|
33197
|
+
"Provide at least one of --mcp-endpoint, --payment-methods, --price."
|
|
33197
33198
|
);
|
|
33198
33199
|
}
|
|
33200
|
+
if (opts.price !== void 0) {
|
|
33201
|
+
const p = Number.parseFloat(opts.price);
|
|
33202
|
+
if (Number.isNaN(p) || p <= 0) {
|
|
33203
|
+
throw new Error(`--price must be a positive number (got "${opts.price}").`);
|
|
33204
|
+
}
|
|
33205
|
+
}
|
|
33199
33206
|
const base = opts.api ?? DEFAULT_API_BASE2;
|
|
33200
33207
|
const agent = await withAgent({ keyPath: opts.key });
|
|
33201
33208
|
const address = agent.address();
|
|
@@ -33206,6 +33213,9 @@ Subcommands:
|
|
|
33206
33213
|
if (opts.paymentMethods !== void 0) {
|
|
33207
33214
|
prepareBody.paymentMethods = opts.paymentMethods.split(",").map((s) => s.trim()).filter(Boolean);
|
|
33208
33215
|
}
|
|
33216
|
+
if (opts.price !== void 0) {
|
|
33217
|
+
prepareBody.priceUsdc = opts.price;
|
|
33218
|
+
}
|
|
33209
33219
|
const { digest } = await runSponsoredTx({
|
|
33210
33220
|
keypair: agent.keypair,
|
|
33211
33221
|
actor: address,
|
|
@@ -33225,6 +33235,9 @@ Subcommands:
|
|
|
33225
33235
|
if (opts.paymentMethods) {
|
|
33226
33236
|
printKeyValue("Payment methods", opts.paymentMethods);
|
|
33227
33237
|
}
|
|
33238
|
+
if (opts.price) {
|
|
33239
|
+
printKeyValue("Price", `$${opts.price} USDC`);
|
|
33240
|
+
}
|
|
33228
33241
|
printKeyValue("Tx", String(digest));
|
|
33229
33242
|
printBlank();
|
|
33230
33243
|
} catch (error) {
|
|
@@ -33232,6 +33245,69 @@ Subcommands:
|
|
|
33232
33245
|
}
|
|
33233
33246
|
}
|
|
33234
33247
|
);
|
|
33248
|
+
group.command("pay").argument("<seller>", "The seller agent's Sui address").description(
|
|
33249
|
+
"Pay a seller agent for a service (gateway-mediated, USDC). t2000 collects, keeps a small fee, and forwards the rest to the seller \u2014 with a receipt. [Agent Commerce]"
|
|
33250
|
+
).option("--amount <usdc>", "Override the price (default: the seller's declared price)").option("--data <json>", "Service input forwarded to the seller's endpoint").option("--max-price <usdc>", "Max USDC to auto-approve (default 1.00, or --amount)").option(
|
|
33251
|
+
"--gateway <url>",
|
|
33252
|
+
`Gateway base URL (default ${DEFAULT_GATEWAY})`
|
|
33253
|
+
).option("--force", "Override spending limits for this call (see `t2 limit`)").option("--key <path>", "Custom wallet path (default ~/.t2000/wallet.key)").action(
|
|
33254
|
+
async (seller, opts) => {
|
|
33255
|
+
try {
|
|
33256
|
+
if (opts.amount !== void 0) {
|
|
33257
|
+
const a = Number.parseFloat(opts.amount);
|
|
33258
|
+
if (Number.isNaN(a) || a <= 0) {
|
|
33259
|
+
throw new Error(`--amount must be a positive number (got "${opts.amount}").`);
|
|
33260
|
+
}
|
|
33261
|
+
}
|
|
33262
|
+
const maxPrice = opts.maxPrice ? Number.parseFloat(opts.maxPrice) : opts.amount ? Number.parseFloat(opts.amount) : 1;
|
|
33263
|
+
const gateway = opts.gateway ?? DEFAULT_GATEWAY;
|
|
33264
|
+
const agent = await withAgent({ keyPath: opts.key });
|
|
33265
|
+
const url = opts.amount ? `${gateway}/commerce/pay/${seller}?amount=${encodeURIComponent(opts.amount)}` : `${gateway}/commerce/pay/${seller}`;
|
|
33266
|
+
const result = await agent.pay({
|
|
33267
|
+
url,
|
|
33268
|
+
method: "POST",
|
|
33269
|
+
body: opts.data,
|
|
33270
|
+
maxPrice,
|
|
33271
|
+
force: opts.force
|
|
33272
|
+
});
|
|
33273
|
+
const body = result.body;
|
|
33274
|
+
const receipt = body?.receipt;
|
|
33275
|
+
const paidUsd = typeof receipt?.grossMicros === "number" ? receipt.grossMicros / 1e6 : opts.amount ? Number.parseFloat(opts.amount) : result.cost ?? 0;
|
|
33276
|
+
if (isJsonMode()) {
|
|
33277
|
+
printJson({
|
|
33278
|
+
seller,
|
|
33279
|
+
amount: paidUsd,
|
|
33280
|
+
paid: result.paid,
|
|
33281
|
+
cost: result.cost,
|
|
33282
|
+
receipt,
|
|
33283
|
+
response: body?.response
|
|
33284
|
+
});
|
|
33285
|
+
return;
|
|
33286
|
+
}
|
|
33287
|
+
printBlank();
|
|
33288
|
+
printSuccess(`Paid ${formatUsd(paidUsd)} to ${truncateAddress(seller)}`);
|
|
33289
|
+
if (receipt) {
|
|
33290
|
+
if (typeof receipt.netMicros === "number") {
|
|
33291
|
+
printKeyValue("Seller received", `$${(receipt.netMicros / 1e6).toFixed(6)}`);
|
|
33292
|
+
}
|
|
33293
|
+
if (typeof receipt.feeMicros === "number") {
|
|
33294
|
+
printKeyValue("Facilitator fee", `$${(receipt.feeMicros / 1e6).toFixed(6)}`);
|
|
33295
|
+
}
|
|
33296
|
+
if (receipt.forwardDigest) {
|
|
33297
|
+
printKeyValue("Settlement tx", receipt.forwardDigest);
|
|
33298
|
+
}
|
|
33299
|
+
}
|
|
33300
|
+
if (body?.response !== void 0) {
|
|
33301
|
+
printBlank();
|
|
33302
|
+
printInfo("Service response:");
|
|
33303
|
+
printLine(JSON.stringify(body.response, null, 2));
|
|
33304
|
+
}
|
|
33305
|
+
printBlank();
|
|
33306
|
+
} catch (error) {
|
|
33307
|
+
handleError(error);
|
|
33308
|
+
}
|
|
33309
|
+
}
|
|
33310
|
+
);
|
|
33235
33311
|
group.command("handle").argument("<label>", "Handle label (3\u201320 chars: lowercase a\u2013z, 0\u20139, hyphens)").description(
|
|
33236
33312
|
"Claim <label>.agent-id.sui \u2192 this wallet (custody-minted, gasless). Use --release to give it up."
|
|
33237
33313
|
).option("--release", "Release (revoke) this handle instead of claiming it").option("--key <path>", "Custom wallet path (default ~/.t2000/wallet.key)").option("--api <url>", `API base URL (default ${DEFAULT_API_BASE2})`).action(
|