agentcard 0.0.20 → 0.0.21
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/dist/src/commands/cards/details.d.ts +2 -0
- package/dist/src/commands/cards/details.js +6 -0
- package/dist/src/commands/cards/details.js.map +1 -1
- package/dist/src/commands/cards/list.js +1 -1
- package/dist/src/commands/cards/list.js.map +1 -1
- package/dist/src/commands/limit.d.ts +3 -0
- package/dist/src/commands/limit.js +50 -0
- package/dist/src/commands/limit.js.map +1 -0
- package/dist/src/commands/mail/get.d.ts +1 -0
- package/dist/src/commands/mail/get.js +28 -0
- package/dist/src/commands/mail/get.js.map +1 -0
- package/dist/src/commands/mail/info.d.ts +1 -0
- package/dist/src/commands/mail/info.js +17 -0
- package/dist/src/commands/mail/info.js.map +1 -0
- package/dist/src/commands/mail/list.d.ts +4 -0
- package/dist/src/commands/mail/list.js +34 -0
- package/dist/src/commands/mail/list.js.map +1 -0
- package/dist/src/commands/mail/send.d.ts +8 -0
- package/dist/src/commands/mail/send.js +59 -0
- package/dist/src/commands/mail/send.js.map +1 -0
- package/dist/src/commands/request/get.d.ts +1 -0
- package/dist/src/commands/request/get.js +104 -0
- package/dist/src/commands/request/get.js.map +1 -0
- package/dist/src/commands/request/new.d.ts +1 -0
- package/dist/src/commands/request/new.js +82 -0
- package/dist/src/commands/request/new.js.map +1 -0
- package/dist/src/commands/setup.d.ts +8 -0
- package/dist/src/commands/setup.js +166 -0
- package/dist/src/commands/setup.js.map +1 -0
- package/dist/src/commands/signup.js +26 -17
- package/dist/src/commands/signup.js.map +1 -1
- package/dist/src/commands/whoami.js +5 -2
- package/dist/src/commands/whoami.js.map +1 -1
- package/dist/src/index.js +100 -36
- package/dist/src/index.js.map +1 -1
- package/dist/src/lib/api.d.ts +2 -0
- package/dist/src/lib/api.js +6 -0
- package/dist/src/lib/api.js.map +1 -1
- package/dist/src/lib/track-command.d.ts +8 -0
- package/dist/src/lib/track-command.js +54 -0
- package/dist/src/lib/track-command.js.map +1 -0
- package/dist/src/lib/update-check.js +21 -2
- package/dist/src/lib/update-check.js.map +1 -1
- package/package.json +1 -1
- package/dist/src/commands/cards/create.d.ts +0 -1
- package/dist/src/commands/cards/create.js +0 -110
- package/dist/src/commands/cards/create.js.map +0 -1
- package/dist/src/commands/cards/refund.d.ts +0 -1
- package/dist/src/commands/cards/refund.js +0 -100
- package/dist/src/commands/cards/refund.js.map +0 -1
- package/dist/src/commands/track/purchase.d.ts +0 -8
- package/dist/src/commands/track/purchase.js +0 -25
- package/dist/src/commands/track/purchase.js.map +0 -1
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
import open from "open";
|
|
3
|
+
import ora from "ora";
|
|
4
|
+
import inquirer from "inquirer";
|
|
5
|
+
import { del, get, patch, post } from "../lib/api.js";
|
|
6
|
+
const POLL_INTERVAL = 2000;
|
|
7
|
+
const PM_TIMEOUT = 5 * 60 * 1000;
|
|
8
|
+
const E164 = /^\+[1-9]\d{1,14}$/;
|
|
9
|
+
async function provisionAgentEmail() {
|
|
10
|
+
const spinner = ora("Provisioning agent email...").start();
|
|
11
|
+
try {
|
|
12
|
+
const res = await post("/api/mail/inbox");
|
|
13
|
+
spinner.succeed(chalk.green(`Agent email: ${res.address}`));
|
|
14
|
+
}
|
|
15
|
+
catch (err) {
|
|
16
|
+
spinner.warn(`Couldn't provision agent email: ${err instanceof Error ? err.message : "Unknown error"}. Re-run \`agentcard setup\` to retry.`);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
function renderStatus(me) {
|
|
20
|
+
const line = (label, value, masked = false) => {
|
|
21
|
+
const v = value ? (masked ? chalk.dim(value) : value) : chalk.yellow("(missing)");
|
|
22
|
+
return ` ${chalk.bold(label.padEnd(14))} ${v}`;
|
|
23
|
+
};
|
|
24
|
+
const pm = me.paymentMethod;
|
|
25
|
+
const pmStr = pm
|
|
26
|
+
? `${pm.brand.charAt(0).toUpperCase() + pm.brand.slice(1)} ending in ${pm.last4}`
|
|
27
|
+
: null;
|
|
28
|
+
console.log(chalk.bold("\n Profile"));
|
|
29
|
+
console.log(" " + "─".repeat(44));
|
|
30
|
+
console.log(line("Email:", me.email));
|
|
31
|
+
console.log(line("Name:", me.firstName && me.lastName ? `${me.firstName} ${me.lastName}` : null));
|
|
32
|
+
console.log(line("Phone:", me.phoneNumber));
|
|
33
|
+
console.log(line("Payment:", pmStr));
|
|
34
|
+
console.log(line("Agent email:", me.agentEmail));
|
|
35
|
+
console.log(" " + "─".repeat(44) + "\n");
|
|
36
|
+
}
|
|
37
|
+
async function promptIfMissing(fieldLabel, current, validator, interactive) {
|
|
38
|
+
if (current)
|
|
39
|
+
return current;
|
|
40
|
+
if (!interactive)
|
|
41
|
+
return null;
|
|
42
|
+
const { value } = await inquirer.prompt([
|
|
43
|
+
{
|
|
44
|
+
type: "input",
|
|
45
|
+
name: "value",
|
|
46
|
+
message: `${fieldLabel}:`,
|
|
47
|
+
validate: validator,
|
|
48
|
+
},
|
|
49
|
+
]);
|
|
50
|
+
return value.trim();
|
|
51
|
+
}
|
|
52
|
+
async function setupPaymentMethod() {
|
|
53
|
+
const spinner = ora("Creating Stripe setup session...").start();
|
|
54
|
+
let res;
|
|
55
|
+
try {
|
|
56
|
+
res = await post("/api/payment-methods");
|
|
57
|
+
}
|
|
58
|
+
catch (err) {
|
|
59
|
+
spinner.fail(`Failed to start payment setup: ${err instanceof Error ? err.message : "Unknown error"}`);
|
|
60
|
+
process.exit(1);
|
|
61
|
+
}
|
|
62
|
+
spinner.stop();
|
|
63
|
+
console.log(`Setup URL: ${res.url}`);
|
|
64
|
+
console.log(chalk.blue("Opening browser to add payment method..."));
|
|
65
|
+
await open(res.url);
|
|
66
|
+
const pollSpinner = ora("Waiting for payment method...").start();
|
|
67
|
+
const deadline = Date.now() + PM_TIMEOUT;
|
|
68
|
+
while (Date.now() < deadline) {
|
|
69
|
+
await new Promise((r) => setTimeout(r, POLL_INTERVAL));
|
|
70
|
+
try {
|
|
71
|
+
const me = await get("/api/me");
|
|
72
|
+
if (me.paymentMethod) {
|
|
73
|
+
const brand = me.paymentMethod.brand.charAt(0).toUpperCase() +
|
|
74
|
+
me.paymentMethod.brand.slice(1);
|
|
75
|
+
pollSpinner.succeed(chalk.green(`Payment method saved: ${brand} ending in ${me.paymentMethod.last4}.`));
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
catch {
|
|
80
|
+
// keep polling
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
pollSpinner.fail("Timed out waiting for payment method. Re-run `agentcard setup` to retry.");
|
|
84
|
+
process.exit(1);
|
|
85
|
+
}
|
|
86
|
+
export async function setup(opts) {
|
|
87
|
+
const interactive = process.stdin.isTTY === true;
|
|
88
|
+
if (opts.reset) {
|
|
89
|
+
const spinner = ora("Resetting profile...").start();
|
|
90
|
+
try {
|
|
91
|
+
await del("/api/me");
|
|
92
|
+
spinner.succeed("Profile cleared. Starting fresh.");
|
|
93
|
+
}
|
|
94
|
+
catch (err) {
|
|
95
|
+
spinner.fail(`Reset failed: ${err instanceof Error ? err.message : "Unknown error"}`);
|
|
96
|
+
process.exit(1);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
let me;
|
|
100
|
+
try {
|
|
101
|
+
me = await get("/api/me");
|
|
102
|
+
}
|
|
103
|
+
catch (err) {
|
|
104
|
+
console.error(chalk.red(`Failed to load profile: ${err instanceof Error ? err.message : err}`));
|
|
105
|
+
process.exit(1);
|
|
106
|
+
}
|
|
107
|
+
renderStatus(me);
|
|
108
|
+
const noFlagsGiven = !opts.firstName && !opts.lastName && !opts.phone;
|
|
109
|
+
const fullyConfigured = !!me.firstName &&
|
|
110
|
+
!!me.lastName &&
|
|
111
|
+
!!me.phoneNumber &&
|
|
112
|
+
!!me.paymentMethod &&
|
|
113
|
+
!!me.agentEmail;
|
|
114
|
+
if (fullyConfigured && noFlagsGiven && !opts.reset) {
|
|
115
|
+
console.log(chalk.green(`You're all set. Spend limit: $${(me.spendLimitCents / 100).toFixed(2)}.`));
|
|
116
|
+
console.log(chalk.dim("Run `agentcard request new --amount <dollars>` to issue a card, `agentcard limit --amount <dollars>` to change your limit, or `agentcard setup --reset` to clear your profile."));
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
// Collect first name, last name, phone (only if missing or overridden by flag)
|
|
120
|
+
const first = (opts.firstName ?? "").trim() ||
|
|
121
|
+
(await promptIfMissing("First name", me.firstName, (v) => v.trim().length > 0 || "Required", interactive));
|
|
122
|
+
const last = (opts.lastName ?? "").trim() ||
|
|
123
|
+
(await promptIfMissing("Last name", me.lastName, (v) => v.trim().length > 0 || "Required", interactive));
|
|
124
|
+
const phone = (opts.phone ?? "").trim() ||
|
|
125
|
+
(await promptIfMissing("Phone (include country code, e.g. +14155551234)", me.phoneNumber, (v) => E164.test(v.trim()) ||
|
|
126
|
+
"Include the country code with a + prefix, e.g. +14155551234", interactive));
|
|
127
|
+
const missingNow = [];
|
|
128
|
+
if (!first)
|
|
129
|
+
missingNow.push("--first-name");
|
|
130
|
+
if (!last)
|
|
131
|
+
missingNow.push("--last-name");
|
|
132
|
+
if (!phone)
|
|
133
|
+
missingNow.push("--phone");
|
|
134
|
+
if (missingNow.length > 0) {
|
|
135
|
+
console.error(chalk.red(`Missing required fields. Run interactively, or pass: ${missingNow.join(" ")}`));
|
|
136
|
+
process.exit(1);
|
|
137
|
+
}
|
|
138
|
+
if (first !== me.firstName || last !== me.lastName || phone !== me.phoneNumber) {
|
|
139
|
+
const saving = ora("Saving profile...").start();
|
|
140
|
+
try {
|
|
141
|
+
const updated = await patch("/api/me", {
|
|
142
|
+
firstName: first,
|
|
143
|
+
lastName: last,
|
|
144
|
+
phoneNumber: phone,
|
|
145
|
+
});
|
|
146
|
+
me = updated;
|
|
147
|
+
saving.succeed(chalk.green("Profile saved."));
|
|
148
|
+
}
|
|
149
|
+
catch (err) {
|
|
150
|
+
saving.fail(`Failed to save profile: ${err instanceof Error ? err.message : "Unknown error"}`);
|
|
151
|
+
process.exit(1);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
if (!me.paymentMethod) {
|
|
155
|
+
console.log(chalk.bold("\nPayment method"));
|
|
156
|
+
await setupPaymentMethod();
|
|
157
|
+
}
|
|
158
|
+
if (!me.agentEmail) {
|
|
159
|
+
console.log(chalk.bold("\nAgent email"));
|
|
160
|
+
await provisionAgentEmail();
|
|
161
|
+
}
|
|
162
|
+
console.log("");
|
|
163
|
+
console.log(chalk.green(`Setup complete. Spend limit: $${(me.spendLimitCents / 100).toFixed(2)}.`));
|
|
164
|
+
console.log(chalk.dim("Run `agentcard limit --amount <dollars>` to change it, or `agentcard request new --amount <dollars>` to issue a card."));
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../src/commands/setup.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,13 +4,14 @@ import ora from "ora";
|
|
|
4
4
|
import { get, post } from "../lib/api.js";
|
|
5
5
|
import { prompt } from "../lib/prompt.js";
|
|
6
6
|
import { saveConfig } from "../lib/config.js";
|
|
7
|
-
function formatDollars(cents) {
|
|
8
|
-
return `$${(cents / 100).toFixed(2)}`;
|
|
9
|
-
}
|
|
10
7
|
const API_URL = process.env.AGENTCARD_API_URL || "https://agentcard.ai";
|
|
11
8
|
const POLL_INTERVAL = 2000;
|
|
12
9
|
const TIMEOUT = 5 * 60 * 1000;
|
|
10
|
+
function formatTerms(appUrl) {
|
|
11
|
+
return `By using AgentCard you acknowledge this is a beta service governed by our terms: ${appUrl}/terms.`;
|
|
12
|
+
}
|
|
13
13
|
export async function signup(opts) {
|
|
14
|
+
console.log(chalk.dim(formatTerms(API_URL)));
|
|
14
15
|
let email = opts.email;
|
|
15
16
|
if (!email) {
|
|
16
17
|
const answers = await prompt([
|
|
@@ -23,7 +24,6 @@ export async function signup(opts) {
|
|
|
23
24
|
process.exit(1);
|
|
24
25
|
}
|
|
25
26
|
const state = crypto.randomUUID();
|
|
26
|
-
// Register the CLI auth state
|
|
27
27
|
await post("/api/auth/cli/start", { state }, { auth: false });
|
|
28
28
|
console.log(chalk.blue(`Sending magic link to ${email}...`));
|
|
29
29
|
const callbackURL = `${API_URL}/auth/cli/callback?state=${state}`;
|
|
@@ -44,22 +44,31 @@ export async function signup(opts) {
|
|
|
44
44
|
if (result.status === "complete" && result.token && result.email) {
|
|
45
45
|
spinner.stop();
|
|
46
46
|
saveConfig({ token: result.token, email: result.email });
|
|
47
|
-
|
|
48
|
-
// Show available card denominations
|
|
47
|
+
let me = null;
|
|
49
48
|
try {
|
|
50
|
-
|
|
51
|
-
if (res.denominations.length > 0) {
|
|
52
|
-
console.log("");
|
|
53
|
-
console.log(chalk.bold("Available card amounts:"));
|
|
54
|
-
for (const d of res.denominations) {
|
|
55
|
-
console.log(` ${formatDollars(d.amountCents)}`);
|
|
56
|
-
}
|
|
57
|
-
console.log("");
|
|
58
|
-
console.log(chalk.dim("Run `agentcard create` to purchase a card."));
|
|
59
|
-
}
|
|
49
|
+
me = await get("/api/me");
|
|
60
50
|
}
|
|
61
51
|
catch {
|
|
62
|
-
// Non-critical
|
|
52
|
+
// Non-critical — fall through with a generic next-step.
|
|
53
|
+
}
|
|
54
|
+
console.log(chalk.green(`Logged in as ${result.email}.`));
|
|
55
|
+
if (me?.locked) {
|
|
56
|
+
console.log(chalk.red("Your account is locked. Email support@agentcard.ai."));
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
if (!me ||
|
|
60
|
+
!me.firstName ||
|
|
61
|
+
!me.lastName ||
|
|
62
|
+
!me.phoneNumber ||
|
|
63
|
+
!me.paymentMethod) {
|
|
64
|
+
console.log(chalk.yellow("Next step: run `agentcard setup` to finish setting up your account."));
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
const brand = me.paymentMethod.brand.charAt(0).toUpperCase() +
|
|
68
|
+
me.paymentMethod.brand.slice(1);
|
|
69
|
+
const agentEmailSuffix = me.agentEmail ? `, ${me.agentEmail}` : "";
|
|
70
|
+
console.log(chalk.dim(`Profile: ${me.firstName} ${me.lastName}, ${me.phoneNumber}, ${brand} ending in ${me.paymentMethod.last4}${agentEmailSuffix}.`));
|
|
71
|
+
console.log(chalk.dim("Run `agentcard request new --amount <dollars>` to issue a card, or `agentcard setup --reset` to update your info."));
|
|
63
72
|
}
|
|
64
73
|
return;
|
|
65
74
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signup.js","sourceRoot":"","sources":["../../../src/commands/signup.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"signup.js","sourceRoot":"","sources":["../../../src/commands/signup.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,8 +8,11 @@ export async function whoami() {
|
|
|
8
8
|
return;
|
|
9
9
|
}
|
|
10
10
|
try {
|
|
11
|
-
const result = await get("/api/
|
|
12
|
-
console.log(chalk.
|
|
11
|
+
const result = await get("/api/me");
|
|
12
|
+
console.log(` ${chalk.bold("Human email:")} ${result.email}`);
|
|
13
|
+
if (result.agentEmail) {
|
|
14
|
+
console.log(` ${chalk.bold("Agent email:")} ${result.agentEmail}`);
|
|
15
|
+
}
|
|
13
16
|
}
|
|
14
17
|
catch {
|
|
15
18
|
console.error(chalk.red("Failed to verify session. Try `agentcard signup` again."));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"whoami.js","sourceRoot":"","sources":["../../../src/commands/whoami.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"whoami.js","sourceRoot":"","sources":["../../../src/commands/whoami.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAO7C,MAAM,CAAC,KAAK,UAAU,MAAM;IAC1B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,uDAAuD,CAAC,CAAC,CAAC;QACnF,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,GAAG,CAAa,SAAS,CAAC,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QAC/D,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;QACtE,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC,CAAC;IACtF,CAAC;AACH,CAAC"}
|
package/dist/src/index.js
CHANGED
|
@@ -1,39 +1,55 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
|
+
import chalk from "chalk";
|
|
2
3
|
import { signup } from "./commands/signup.js";
|
|
3
4
|
import { logout } from "./commands/logout.js";
|
|
4
5
|
import { whoami } from "./commands/whoami.js";
|
|
5
|
-
import { createCard } from "./commands/cards/create.js";
|
|
6
6
|
import { listCards } from "./commands/cards/list.js";
|
|
7
7
|
import { cardDetails } from "./commands/cards/details.js";
|
|
8
8
|
import { balance } from "./commands/balance.js";
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
9
|
+
import { setup } from "./commands/setup.js";
|
|
10
|
+
import { limit } from "./commands/limit.js";
|
|
11
|
+
import { requestNew } from "./commands/request/new.js";
|
|
12
|
+
import { requestGet } from "./commands/request/get.js";
|
|
11
13
|
import { support } from "./commands/support.js";
|
|
14
|
+
import { mailInfo } from "./commands/mail/info.js";
|
|
15
|
+
import { mailList } from "./commands/mail/list.js";
|
|
16
|
+
import { mailGet } from "./commands/mail/get.js";
|
|
17
|
+
import { mailSend, mailReply } from "./commands/mail/send.js";
|
|
12
18
|
import { getLocalVersion } from "./lib/update-check.js";
|
|
19
|
+
import { attachCommandTracking } from "./lib/track-command.js";
|
|
13
20
|
const program = new Command();
|
|
21
|
+
attachCommandTracking(program);
|
|
14
22
|
program
|
|
15
23
|
.name("agentcard")
|
|
16
|
-
.description("
|
|
24
|
+
.description("On-demand single-use virtual Visa cards for AI agents")
|
|
17
25
|
.version(getLocalVersion())
|
|
18
26
|
.showHelpAfterError()
|
|
19
27
|
.addHelpText("after", `
|
|
20
28
|
Examples:
|
|
21
29
|
|
|
22
|
-
$ agentcard signup --email you@example.com Sign up (
|
|
23
|
-
$ agentcard
|
|
24
|
-
$ agentcard
|
|
25
|
-
$ agentcard
|
|
26
|
-
$ agentcard
|
|
27
|
-
$ agentcard
|
|
28
|
-
$ agentcard
|
|
29
|
-
$ agentcard
|
|
30
|
+
$ agentcard signup --email you@example.com Sign up (sends magic link)
|
|
31
|
+
$ agentcard setup Finish setup: name, phone, payment, agent email
|
|
32
|
+
$ agentcard setup --reset Clear your profile and start over
|
|
33
|
+
$ agentcard limit Show spend limit / spent / remaining
|
|
34
|
+
$ agentcard limit --amount 250 Raise your spend limit to $250
|
|
35
|
+
$ agentcard request new --amount 10 Issue a single-use $10 Visa card
|
|
36
|
+
$ agentcard request get <id> Re-fetch PAN/CVV/expiry for a request
|
|
37
|
+
$ agentcard request get List all your card requests
|
|
38
|
+
$ agentcard mail list List agent email threads
|
|
39
|
+
$ agentcard mail send --to user@example.com --subject "Hi" --body "Hello"
|
|
40
|
+
Send an email from your agent
|
|
41
|
+
$ agentcard mail reply <thread-id> --body "Thanks!"
|
|
42
|
+
Reply to an email thread
|
|
43
|
+
$ agentcard list List legacy inventory cards
|
|
44
|
+
$ agentcard details <id> Reveal full details for a legacy card
|
|
30
45
|
|
|
31
46
|
Quickstart:
|
|
32
47
|
|
|
33
48
|
$ agentcard signup --email you@example.com
|
|
34
|
-
$ agentcard
|
|
35
|
-
$ agentcard
|
|
36
|
-
→
|
|
49
|
+
$ agentcard setup
|
|
50
|
+
$ agentcard request new --amount 10
|
|
51
|
+
→ PAN / CVV / expiry printed; card expires in 15 minutes
|
|
52
|
+
→ Hand the details to your AI agent immediately
|
|
37
53
|
`);
|
|
38
54
|
// -- Auth -------------------------------------------------------------------
|
|
39
55
|
program
|
|
@@ -54,12 +70,45 @@ program
|
|
|
54
70
|
.command("whoami")
|
|
55
71
|
.description("Show the currently logged-in user")
|
|
56
72
|
.action(whoami);
|
|
57
|
-
// --
|
|
73
|
+
// -- Setup & limit ----------------------------------------------------------
|
|
74
|
+
program
|
|
75
|
+
.command("setup")
|
|
76
|
+
.description("Set up or update your profile (name, phone, payment method, agent email)")
|
|
77
|
+
.option("--first-name <name>", "First name")
|
|
78
|
+
.option("--last-name <name>", "Last name")
|
|
79
|
+
.option("--phone <phone>", "Phone number in E.164 format, e.g. +14155551234")
|
|
80
|
+
.option("--reset", "Clear your profile, payment method and agent email, then start over")
|
|
81
|
+
.action(setup);
|
|
82
|
+
program
|
|
83
|
+
.command("limit")
|
|
84
|
+
.description("Show or update your spend limit")
|
|
85
|
+
.option("--amount <dollars>", "Set new limit in dollars")
|
|
86
|
+
.action(limit);
|
|
87
|
+
// -- Card requests ----------------------------------------------------------
|
|
88
|
+
const request = program
|
|
89
|
+
.command("request")
|
|
90
|
+
.description("Manage card requests");
|
|
91
|
+
request
|
|
92
|
+
.command("new")
|
|
93
|
+
.description("Request a single-use virtual Visa for a specific amount")
|
|
94
|
+
.option("--amount <dollars>", "Amount in dollars (prompts interactively if omitted)")
|
|
95
|
+
.action((opts) => requestNew(opts.amount));
|
|
96
|
+
request
|
|
97
|
+
.command("get")
|
|
98
|
+
.description("Get one request by ID, or list all requests")
|
|
99
|
+
.argument("[id]", "Request ID")
|
|
100
|
+
.action(requestGet);
|
|
101
|
+
// -- Legacy inventory cards -------------------------------------------------
|
|
58
102
|
program
|
|
59
103
|
.command("create")
|
|
60
|
-
.description("
|
|
61
|
-
.
|
|
62
|
-
.
|
|
104
|
+
.description("(removed) use `agentcard request new --amount <dollars>` instead")
|
|
105
|
+
.allowUnknownOption(true)
|
|
106
|
+
.allowExcessArguments(true)
|
|
107
|
+
.action(() => {
|
|
108
|
+
console.error(chalk.yellow("`agentcard create` has been removed. The purchase-a-fixed-denomination flow is replaced by on-demand single-use virtual cards — run `agentcard request new --amount <dollars>` instead."));
|
|
109
|
+
console.error(chalk.dim("The skill instructions at https://agentcard.ai/skill changed too — refetch them before proceeding so you have the current flow."));
|
|
110
|
+
process.exit(1);
|
|
111
|
+
});
|
|
63
112
|
program
|
|
64
113
|
.command("list")
|
|
65
114
|
.description("List all your purchased cards")
|
|
@@ -74,23 +123,38 @@ program
|
|
|
74
123
|
.description("Check card denomination")
|
|
75
124
|
.argument("<id>", "Card ID")
|
|
76
125
|
.action(balance);
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
.
|
|
80
|
-
.
|
|
81
|
-
|
|
82
|
-
.
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
.
|
|
87
|
-
.
|
|
88
|
-
.
|
|
89
|
-
.option("--
|
|
90
|
-
.
|
|
91
|
-
|
|
92
|
-
.
|
|
93
|
-
.
|
|
126
|
+
// -- Mail -------------------------------------------------------------------
|
|
127
|
+
const mail = program
|
|
128
|
+
.command("mail")
|
|
129
|
+
.description("Manage your agent email inbox");
|
|
130
|
+
mail
|
|
131
|
+
.command("info")
|
|
132
|
+
.description("Show your agent email address")
|
|
133
|
+
.action(mailInfo);
|
|
134
|
+
mail
|
|
135
|
+
.command("list")
|
|
136
|
+
.description("List email threads")
|
|
137
|
+
.option("--limit <n>", "Number of threads to show (default: 20)")
|
|
138
|
+
.option("--include-sent", "Include sent threads")
|
|
139
|
+
.action(mailList);
|
|
140
|
+
mail
|
|
141
|
+
.command("get")
|
|
142
|
+
.description("Fetch an email thread by ID")
|
|
143
|
+
.argument("<thread-id>", "Thread ID")
|
|
144
|
+
.action(mailGet);
|
|
145
|
+
mail
|
|
146
|
+
.command("send")
|
|
147
|
+
.description("Send a new email")
|
|
148
|
+
.option("--to <email>", "Recipient email address")
|
|
149
|
+
.option("--subject <subject>", "Email subject")
|
|
150
|
+
.option("--body <body>", "Email body")
|
|
151
|
+
.action(mailSend);
|
|
152
|
+
mail
|
|
153
|
+
.command("reply")
|
|
154
|
+
.description("Reply to an email thread")
|
|
155
|
+
.argument("<thread-id>", "Thread ID")
|
|
156
|
+
.option("--body <body>", "Reply body")
|
|
157
|
+
.action((threadId, opts) => mailReply(threadId, opts));
|
|
94
158
|
// -- Support ----------------------------------------------------------------
|
|
95
159
|
program
|
|
96
160
|
.command("support")
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/src/lib/api.d.ts
CHANGED
|
@@ -3,4 +3,6 @@ interface ApiOptions {
|
|
|
3
3
|
}
|
|
4
4
|
export declare function get<T>(path: string, options?: ApiOptions): Promise<T>;
|
|
5
5
|
export declare function post<T>(path: string, body?: unknown, options?: ApiOptions): Promise<T>;
|
|
6
|
+
export declare function patch<T>(path: string, body?: unknown, options?: ApiOptions): Promise<T>;
|
|
7
|
+
export declare function del<T>(path: string, options?: ApiOptions): Promise<T>;
|
|
6
8
|
export {};
|
package/dist/src/lib/api.js
CHANGED
|
@@ -43,4 +43,10 @@ export function get(path, options) {
|
|
|
43
43
|
export function post(path, body, options) {
|
|
44
44
|
return request("POST", path, body, options);
|
|
45
45
|
}
|
|
46
|
+
export function patch(path, body, options) {
|
|
47
|
+
return request("PATCH", path, body, options);
|
|
48
|
+
}
|
|
49
|
+
export function del(path, options) {
|
|
50
|
+
return request("DELETE", path, undefined, options);
|
|
51
|
+
}
|
|
46
52
|
//# sourceMappingURL=api.js.map
|
package/dist/src/lib/api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../../src/lib/api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,sBAAsB,CAAC;AAMxE,KAAK,UAAU,OAAO,CACpB,MAAc,EACd,IAAY,EACZ,IAAc,EACd,UAAsB,EAAE,IAAI,EAAE,IAAI,EAAE;IAEpC,MAAM,OAAO,GAA2B;QACtC,cAAc,EAAE,kBAAkB;KACnC,CAAC;IAEF,IAAI,OAAO,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAC3B,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC,CAAC;YACzE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,MAAM,CAAC,KAAK,EAAE,CAAC;IACtD,CAAC;IAED,MAAM,GAAG,GAAG,GAAG,OAAO,GAAG,IAAI,EAAE,CAAC;IAChC,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAC3B,MAAM;QACN,OAAO;QACP,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;KAC9C,CAAC,CAAC;IAEH,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QACvB,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,GAAG,CAAC,0DAA0D,CAAC,CACtE,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAC9B,IAAI,OAAe,CAAC;QACpB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC9B,OAAO,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC;QAC/C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,GAAG,IAAI,CAAC;QACjB,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC;IAED,OAAO,GAAG,CAAC,IAAI,EAAgB,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,GAAG,CAAI,IAAY,EAAE,OAAoB;IACvD,OAAO,OAAO,CAAI,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,IAAI,CAClB,IAAY,EACZ,IAAc,EACd,OAAoB;IAEpB,OAAO,OAAO,CAAI,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AACjD,CAAC"}
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../../src/lib/api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,sBAAsB,CAAC;AAMxE,KAAK,UAAU,OAAO,CACpB,MAAc,EACd,IAAY,EACZ,IAAc,EACd,UAAsB,EAAE,IAAI,EAAE,IAAI,EAAE;IAEpC,MAAM,OAAO,GAA2B;QACtC,cAAc,EAAE,kBAAkB;KACnC,CAAC;IAEF,IAAI,OAAO,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAC3B,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC,CAAC;YACzE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,MAAM,CAAC,KAAK,EAAE,CAAC;IACtD,CAAC;IAED,MAAM,GAAG,GAAG,GAAG,OAAO,GAAG,IAAI,EAAE,CAAC;IAChC,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAC3B,MAAM;QACN,OAAO;QACP,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;KAC9C,CAAC,CAAC;IAEH,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QACvB,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,GAAG,CAAC,0DAA0D,CAAC,CACtE,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAC9B,IAAI,OAAe,CAAC;QACpB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC9B,OAAO,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC;QAC/C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,GAAG,IAAI,CAAC;QACjB,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC;IAED,OAAO,GAAG,CAAC,IAAI,EAAgB,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,GAAG,CAAI,IAAY,EAAE,OAAoB;IACvD,OAAO,OAAO,CAAI,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,IAAI,CAClB,IAAY,EACZ,IAAc,EACd,OAAoB;IAEpB,OAAO,OAAO,CAAI,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,KAAK,CACnB,IAAY,EACZ,IAAc,EACd,OAAoB;IAEpB,OAAO,OAAO,CAAI,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,GAAG,CACjB,IAAY,EACZ,OAAoB;IAEpB,OAAO,OAAO,CAAI,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;AACxD,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Command } from "commander";
|
|
2
|
+
/**
|
|
3
|
+
* Attach a preAction hook to every command under `program`. Fires one
|
|
4
|
+
* 'cli_command_invoked' analytics event per invocation, with the full
|
|
5
|
+
* command path. Auth header included if a CLI session exists, so the
|
|
6
|
+
* event is attributed to the user when possible.
|
|
7
|
+
*/
|
|
8
|
+
export declare function attachCommandTracking(program: Command): void;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { getConfig } from "./config.js";
|
|
2
|
+
import { getLocalVersion } from "./update-check.js";
|
|
3
|
+
const API_URL = process.env.AGENTCARD_API_URL || "https://agentcard.ai";
|
|
4
|
+
const TIMEOUT_MS = 1500;
|
|
5
|
+
/**
|
|
6
|
+
* Walk from the action command back up to the root to reconstruct the
|
|
7
|
+
* full path, e.g. "mail send" or "request new".
|
|
8
|
+
*/
|
|
9
|
+
function fullCommandPath(cmd) {
|
|
10
|
+
const parts = [];
|
|
11
|
+
let c = cmd;
|
|
12
|
+
while (c && c.name() !== "agentcard") {
|
|
13
|
+
parts.unshift(c.name());
|
|
14
|
+
c = c.parent;
|
|
15
|
+
}
|
|
16
|
+
return parts.join(" ");
|
|
17
|
+
}
|
|
18
|
+
async function sendCommandEvent(command) {
|
|
19
|
+
const controller = new AbortController();
|
|
20
|
+
const timer = setTimeout(() => controller.abort(), TIMEOUT_MS);
|
|
21
|
+
const headers = { "Content-Type": "application/json" };
|
|
22
|
+
const token = getConfig().token;
|
|
23
|
+
if (token)
|
|
24
|
+
headers["Authorization"] = `Bearer ${token}`;
|
|
25
|
+
try {
|
|
26
|
+
await fetch(`${API_URL}/api/track/command`, {
|
|
27
|
+
method: "POST",
|
|
28
|
+
headers,
|
|
29
|
+
body: JSON.stringify({ command, cliVersion: getLocalVersion() }),
|
|
30
|
+
signal: controller.signal,
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
// Analytics is best-effort. Never break the user's actual command.
|
|
35
|
+
}
|
|
36
|
+
finally {
|
|
37
|
+
clearTimeout(timer);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Attach a preAction hook to every command under `program`. Fires one
|
|
42
|
+
* 'cli_command_invoked' analytics event per invocation, with the full
|
|
43
|
+
* command path. Auth header included if a CLI session exists, so the
|
|
44
|
+
* event is attributed to the user when possible.
|
|
45
|
+
*/
|
|
46
|
+
export function attachCommandTracking(program) {
|
|
47
|
+
program.hook("preAction", async (_root, actionCommand) => {
|
|
48
|
+
const command = fullCommandPath(actionCommand);
|
|
49
|
+
if (!command)
|
|
50
|
+
return;
|
|
51
|
+
await sendCommandEvent(command);
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=track-command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"track-command.js","sourceRoot":"","sources":["../../../src/lib/track-command.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,sBAAsB,CAAC;AACxE,MAAM,UAAU,GAAG,IAAI,CAAC;AAExB;;;GAGG;AACH,SAAS,eAAe,CAAC,GAAY;IACnC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,CAAC,GAAmB,GAAG,CAAC;IAC5B,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,WAAW,EAAE,CAAC;QACrC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACxB,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;IACf,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,OAAe;IAC7C,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,UAAU,CAAC,CAAC;IAC/D,MAAM,OAAO,GAA2B,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC;IAC/E,MAAM,KAAK,GAAG,SAAS,EAAE,CAAC,KAAK,CAAC;IAChC,IAAI,KAAK;QAAE,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,KAAK,EAAE,CAAC;IACxD,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,GAAG,OAAO,oBAAoB,EAAE;YAC1C,MAAM,EAAE,MAAM;YACd,OAAO;YACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,EAAE,CAAC;YAChE,MAAM,EAAE,UAAU,CAAC,MAAM;SAC1B,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,mEAAmE;IACrE,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACpD,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,EAAE;QACvD,MAAM,OAAO,GAAG,eAAe,CAAC,aAAa,CAAC,CAAC;QAC/C,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,MAAM,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;AACL,CAAC"}
|