agent-cards 0.5.46 → 0.5.47

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.
@@ -1,14 +1,12 @@
1
1
  /**
2
- * Natural-language `buy` chat. Mirrors the support chat UX (figlet banner, readline loop,
3
- * --resume) but talks to the server-side buy-agent: each typed line POSTs to
4
- * /buy/agent/conversations/:id/messages and the assistant turn comes back INLINE in the
5
- * response (the loop runs several DoorDash/Anthropic round-trips server-side, so a turn can
6
- * take 10–30s — we show an `ora` spinner while it runs). No SSE needed.
2
+ * Natural-language `buy` chat. Runs a Vercel AI SDK ToolLoopAgent locally: it connects to the
3
+ * AgentCard MCP server (`/mcp`, authenticated with the stored JWT), loads ALL of its tools, and
4
+ * lets the model use any of them. Model calls go through the backend `/buy/agent/llm` gateway.
7
5
  *
8
- * `seed` is an optional first message auto-sent right after the conversation opens — this is
9
- * how `agent-cards buy <free text>` works: the free text becomes the first turn, then the
10
- * user stays in the interactive loop (so they can still confirm before checkout). `seed` is
11
- * ignored when `resume` is set (resuming reattaches to an existing conversation).
6
+ * `seed` is an optional first message auto-sent right after the banner — this is how
7
+ * `agent-cards buy <free text>` works: the free text becomes the first turn, then the user stays
8
+ * in the interactive loop. The chat is in-memory for the session (no server-stored conversation),
9
+ * so `--resume` is not supported here; it prints a notice and starts fresh.
12
10
  */
13
11
  export declare function buyChat(resume?: string, seed?: string): Promise<void>;
14
12
  //# sourceMappingURL=buy-chat.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"buy-chat.d.ts","sourceRoot":"","sources":["../../../src/commands/buy-chat.ts"],"names":[],"mappings":"AAgCA;;;;;;;;;;;GAWG;AACH,wBAAsB,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAuH3E"}
1
+ {"version":3,"file":"buy-chat.d.ts","sourceRoot":"","sources":["../../../src/commands/buy-chat.ts"],"names":[],"mappings":"AAyEA;;;;;;;;;GASG;AACH,wBAAsB,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA6H3E"}
@@ -2,29 +2,84 @@ import chalk from 'chalk';
2
2
  import readline from 'readline';
3
3
  import ora from 'ora';
4
4
  import figlet from 'figlet';
5
- import { api } from '../lib/api.js';
6
- import { getJwt } from '../lib/config.js';
7
- function ts(iso) {
8
- return new Date(iso).toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' });
5
+ import { createMCPClient } from '@ai-sdk/mcp';
6
+ import { createAnthropic } from '@ai-sdk/anthropic';
7
+ import { ToolLoopAgent, stepCountIs } from 'ai';
8
+ import { getJwt, getApiUrl, getMcpUrl } from '../lib/config.js';
9
+ // The buy chat runs the agent loop HERE in the CLI (Vercel AI SDK), connecting to the AgentCard
10
+ // MCP server as a client to get the user's FULL toolset (shopping, cards, wallet, KYC, plan,
11
+ // transactions, support, …). Model calls are proxied through the backend `/buy/agent/llm` gateway
12
+ // so the dedicated Anthropic key stays server-side and never ships in this public npm package.
13
+ // Claude model the loop runs. Must be a `claude-*` id (the gateway allowlists that family).
14
+ // Matches the backend's BUY_AGENT_MODEL default; override with AGENT_CARDS_BUY_MODEL.
15
+ const MODEL_ID = process.env.AGENT_CARDS_BUY_MODEL || 'claude-sonnet-4-6';
16
+ // Hard ceiling on tool round-trips per turn — a backstop against a runaway loop.
17
+ const MAX_STEPS = 30;
18
+ const SYSTEM = [
19
+ 'You are the AgentCard agent, operating inside the `agent-cards` command-line tool for a logged-in user.',
20
+ 'You have the user\'s full AgentCard toolset over MCP: natural-language shopping + checkout (the `buy` tool),',
21
+ 'virtual cards, wallet & funding, KYC, plan/subscription, transactions, connected apps, settings, and support.',
22
+ '',
23
+ 'MONEY SAFETY (critical): never place an order, create or fund a card, or move money without the user\'s',
24
+ 'explicit confirmation in the conversation. Before any purchase, show the itemized cart and the exact total,',
25
+ 'then wait for a clear "yes". The shopping/checkout tools also confirm server-side — never try to bypass that.',
26
+ '',
27
+ 'Be concise and conversational. Briefly say what you\'re about to do, then do it. When a tool needs information',
28
+ 'you don\'t have yet (a delivery address, which card, an amount), ask the user rather than guessing.',
29
+ ].join('\n');
30
+ function printYou(text) {
31
+ console.log(`${chalk.cyan('you')} ${text}`);
9
32
  }
10
- function printMsg(role, body, time) {
11
- const t = time ? chalk.dim(` ${time}`) : '';
12
- const label = role === 'visitor'
13
- ? chalk.cyan('you')
14
- : chalk.green('buy');
15
- console.log(`${label}${t} ${body}`);
33
+ /** Animated green ASCII banner (kept from the original chat UX). */
34
+ async function renderBanner() {
35
+ const banner = figlet.textSync('buy', { font: 'Small' });
36
+ const lines = banner.split('\n');
37
+ const totalChars = Math.max(...lines.map((l) => l.length));
38
+ const frames = totalChars + 6;
39
+ const bannerHeight = lines.length;
40
+ console.log();
41
+ for (const line of lines)
42
+ console.log(chalk.dim(line));
43
+ for (let frame = 0; frame < frames; frame++) {
44
+ process.stdout.write(`\x1B[${bannerHeight}A`);
45
+ for (const line of lines) {
46
+ let out = '';
47
+ for (let i = 0; i < line.length; i++) {
48
+ if (i >= frame - 3 && i <= frame)
49
+ out += chalk.green(line[i]);
50
+ else if (i < frame - 3)
51
+ out += chalk.greenBright(line[i]);
52
+ else
53
+ out += chalk.dim(line[i]);
54
+ }
55
+ process.stdout.write('\x1B[2K' + out + '\n');
56
+ }
57
+ await new Promise((r) => setTimeout(r, 12));
58
+ }
59
+ process.stdout.write(`\x1B[${bannerHeight}A`);
60
+ for (const line of lines)
61
+ process.stdout.write('\x1B[2K' + chalk.green(line) + '\n');
62
+ }
63
+ /** Turn an agent/HTTP error into a short, user-facing line. */
64
+ function friendlyError(err) {
65
+ const status = err?.statusCode ?? err?.status ?? err?.data?.error?.status;
66
+ if (status === 401)
67
+ return 'your session expired. run `agent-cards login` and try again.';
68
+ if (status === 429)
69
+ return 'you\'ve hit today\'s usage limit. try again later.';
70
+ if (status === 503)
71
+ return 'buy chat isn\'t available right now. try again in a moment.';
72
+ return `something went wrong: ${err?.message ?? String(err)}`;
16
73
  }
17
74
  /**
18
- * Natural-language `buy` chat. Mirrors the support chat UX (figlet banner, readline loop,
19
- * --resume) but talks to the server-side buy-agent: each typed line POSTs to
20
- * /buy/agent/conversations/:id/messages and the assistant turn comes back INLINE in the
21
- * response (the loop runs several DoorDash/Anthropic round-trips server-side, so a turn can
22
- * take 10–30s — we show an `ora` spinner while it runs). No SSE needed.
75
+ * Natural-language `buy` chat. Runs a Vercel AI SDK ToolLoopAgent locally: it connects to the
76
+ * AgentCard MCP server (`/mcp`, authenticated with the stored JWT), loads ALL of its tools, and
77
+ * lets the model use any of them. Model calls go through the backend `/buy/agent/llm` gateway.
23
78
  *
24
- * `seed` is an optional first message auto-sent right after the conversation opens — this is
25
- * how `agent-cards buy <free text>` works: the free text becomes the first turn, then the
26
- * user stays in the interactive loop (so they can still confirm before checkout). `seed` is
27
- * ignored when `resume` is set (resuming reattaches to an existing conversation).
79
+ * `seed` is an optional first message auto-sent right after the banner — this is how
80
+ * `agent-cards buy <free text>` works: the free text becomes the first turn, then the user stays
81
+ * in the interactive loop. The chat is in-memory for the session (no server-stored conversation),
82
+ * so `--resume` is not supported here; it prints a notice and starts fresh.
28
83
  */
29
84
  export async function buyChat(resume, seed) {
30
85
  const jwt = getJwt();
@@ -35,85 +90,106 @@ export async function buyChat(resume, seed) {
35
90
  console.log();
36
91
  process.exit(1);
37
92
  }
38
- let conversationId;
93
+ await renderBanner();
39
94
  if (resume) {
40
- conversationId = resume;
41
- console.log(chalk.dim(`resuming ${conversationId}\n`));
42
- const messages = await api(`/buy/agent/conversations/${conversationId}/messages`);
43
- for (const msg of messages) {
44
- printMsg(msg.role, msg.body, ts(msg.createdAt));
45
- }
46
- console.log();
95
+ console.log(chalk.dim('the buy chat now runs locally and starts fresh each session — --resume isn\'t available.'));
47
96
  }
48
- else {
49
- const convo = await api('/buy/agent/conversations', { method: 'POST' });
50
- conversationId = convo.id;
51
- // Animated ASCII banner
52
- const banner = figlet.textSync('buy', { font: 'Small' });
53
- const lines = banner.split('\n');
54
- const totalChars = Math.max(...lines.map(l => l.length));
55
- const frames = totalChars + 6;
56
- const bannerHeight = lines.length;
57
- console.log(); // spacing
58
- // print placeholder lines
59
- for (const line of lines)
60
- console.log(chalk.dim(line));
61
- // animate a green sweep across the banner
62
- for (let frame = 0; frame < frames; frame++) {
63
- // move cursor up to the banner start
64
- process.stdout.write(`\x1B[${bannerHeight}A`);
65
- for (const line of lines) {
66
- let out = '';
67
- for (let i = 0; i < line.length; i++) {
68
- if (i >= frame - 3 && i <= frame) {
69
- out += chalk.green(line[i]);
70
- }
71
- else if (i < frame - 3) {
72
- out += chalk.greenBright(line[i]);
73
- }
74
- else {
75
- out += chalk.dim(line[i]);
76
- }
77
- }
78
- process.stdout.write('\x1B[2K' + out + '\n');
79
- }
80
- await new Promise(r => setTimeout(r, 12));
81
- }
82
- // final state: all green
83
- process.stdout.write(`\x1B[${bannerHeight}A`);
84
- for (const line of lines) {
85
- process.stdout.write('\x1B[2K' + chalk.green(line) + '\n');
86
- }
87
- console.log(chalk.dim('tell me what to buy — e.g. "order a burrito from chipotle on doordash". ctrl+c to exit.\n'));
97
+ // Connect to the MCP server and build the agent over its full toolset.
98
+ const connecting = ora({ text: chalk.dim('connecting'), color: 'green', discardStdin: false }).start();
99
+ let mcpClient;
100
+ let agent;
101
+ try {
102
+ mcpClient = await createMCPClient({
103
+ transport: { type: 'http', url: getMcpUrl(), headers: { Authorization: `Bearer ${jwt}` } },
104
+ });
105
+ const tools = await mcpClient.tools();
106
+ const anthropic = createAnthropic({
107
+ baseURL: `${getApiUrl()}/buy/agent/llm/v1`, // provider calls `${baseURL}/messages`
108
+ apiKey: 'managed-by-agentcard', // placeholder; the custom fetch below strips it and the gateway injects the real key
109
+ // Authenticate the gateway with the user's JWT (Bearer), and never send a client x-api-key.
110
+ fetch: async (input, init) => {
111
+ const headers = new Headers(init?.headers);
112
+ headers.delete('x-api-key');
113
+ headers.set('authorization', `Bearer ${jwt}`);
114
+ return fetch(input, { ...init, headers });
115
+ },
116
+ });
117
+ agent = new ToolLoopAgent({
118
+ model: anthropic(MODEL_ID),
119
+ tools,
120
+ instructions: SYSTEM,
121
+ stopWhen: stepCountIs(MAX_STEPS),
122
+ });
123
+ connecting.succeed(chalk.dim(`connected · ${Object.keys(tools).length} tools`));
88
124
  }
89
- const rl = readline.createInterface({
90
- input: process.stdin,
91
- output: process.stdout,
92
- prompt: chalk.cyan('> '),
93
- });
94
- // Send one turn and print the assistant reply. `fromInput` rewrites the line the terminal
95
- // just echoed into a formatted `you` line; a seeded turn has no echoed line, so it prints
96
- // the visitor line fresh.
125
+ catch (err) {
126
+ connecting.stop();
127
+ console.error(chalk.red(`couldn't connect to AgentCard: ${err?.message ?? String(err)}`));
128
+ process.exit(1);
129
+ }
130
+ console.log(chalk.dim('tell me what to do e.g. "order a burrito from chipotle on doordash", "show my cards", "what\'s my balance". ctrl+c to exit.\n'));
131
+ const rl = readline.createInterface({ input: process.stdin, output: process.stdout, prompt: chalk.cyan('> ') });
132
+ // Conversation history, fed to the agent each turn (in-memory for this session).
133
+ const messages = [];
134
+ /** Run one turn: stream the assistant's text + tool activity, then persist the new messages. */
97
135
  async function sendTurn(text, fromInput) {
98
136
  if (fromInput) {
137
+ // Rewrite the line the terminal just echoed into a formatted `you` line.
99
138
  readline.moveCursor(process.stdout, 0, -1);
100
139
  readline.clearLine(process.stdout, 0);
101
140
  readline.cursorTo(process.stdout, 0);
102
141
  }
103
- printMsg('visitor', text, ts(new Date().toISOString()));
104
- // A turn can run several tool round-trips server-side; show a spinner while we wait.
142
+ printYou(text);
143
+ messages.push({ role: 'user', content: text });
105
144
  const spinner = ora({ text: chalk.dim('thinking'), color: 'green', discardStdin: false }).start();
106
- try {
107
- const msg = await api(`/buy/agent/conversations/${conversationId}/messages`, {
108
- method: 'POST',
109
- body: { body: text },
110
- });
145
+ let spinnerOn = true;
146
+ const stopSpinner = () => { if (spinnerOn) {
111
147
  spinner.stop();
112
- printMsg('agent', msg.body, ts(msg.createdAt));
148
+ spinnerOn = false;
149
+ } };
150
+ let printedLabel = false;
151
+ let midText = false;
152
+ try {
153
+ const result = await agent.stream({ messages });
154
+ for await (const chunk of result.fullStream) {
155
+ if (chunk.type === 'text-delta') {
156
+ stopSpinner();
157
+ if (!printedLabel) {
158
+ process.stdout.write(`${chalk.green('buy')} `);
159
+ printedLabel = true;
160
+ }
161
+ process.stdout.write(chunk.text);
162
+ midText = true;
163
+ }
164
+ else if (chunk.type === 'tool-call') {
165
+ stopSpinner();
166
+ if (midText) {
167
+ process.stdout.write('\n');
168
+ midText = false;
169
+ }
170
+ console.log(chalk.dim(` · ${chunk.toolName}`));
171
+ }
172
+ else if (chunk.type === 'error') {
173
+ stopSpinner();
174
+ if (midText) {
175
+ process.stdout.write('\n');
176
+ midText = false;
177
+ }
178
+ console.error(chalk.red(` ${friendlyError(chunk.error)}`));
179
+ }
180
+ }
181
+ stopSpinner();
182
+ if (midText)
183
+ process.stdout.write('\n');
184
+ // Persist the model's generated messages (assistant text + tool calls/results) so the next
185
+ // turn has full context.
186
+ messages.push(...(await result.response).messages);
113
187
  }
114
188
  catch (err) {
115
- spinner.stop();
116
- console.error(chalk.red(`send failed: ${err.message}`));
189
+ stopSpinner();
190
+ if (midText)
191
+ process.stdout.write('\n');
192
+ console.error(chalk.red(friendlyError(err)));
117
193
  }
118
194
  }
119
195
  rl.on('line', async (line) => {
@@ -125,19 +201,19 @@ export async function buyChat(resume, seed) {
125
201
  await sendTurn(text, true);
126
202
  rl.prompt();
127
203
  });
128
- // Auto-send the seeded first message (from `buy <free text>`) before handing control to the
129
- // user, then continue interactively. Skipped on resume.
130
- if (seed && !resume) {
204
+ // Auto-send the seeded first message (from `buy <free text>`), then continue interactively.
205
+ if (seed) {
131
206
  await sendTurn(seed, false);
132
207
  }
133
208
  rl.prompt();
134
209
  function cleanup() {
210
+ void mcpClient.close().catch(() => { });
135
211
  rl.close();
136
212
  process.exit(0);
137
213
  }
138
214
  rl.on('close', cleanup);
139
215
  process.on('SIGINT', () => {
140
- console.log(chalk.dim(`\n\nresume with: agent-cards buy chat --resume ${conversationId}`));
216
+ console.log(chalk.dim('\n\nbye.'));
141
217
  cleanup();
142
218
  });
143
219
  }
@@ -1 +1 @@
1
- {"version":3,"file":"buy-chat.js","sourceRoot":"","sources":["../../../src/commands/buy-chat.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"buy-chat.js","sourceRoot":"","sources":["../../../src/commands/buy-chat.ts"],"names":[],"mappings":"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"}
@@ -3,11 +3,19 @@ interface Config {
3
3
  email?: string;
4
4
  jwt?: string;
5
5
  apiUrl?: string;
6
+ mcpUrl?: string;
6
7
  }
7
8
  export declare function readConfig(): Config;
8
9
  export declare function writeConfig(data: Partial<Config>): void;
9
10
  export declare function getApiUrl(): string;
10
11
  export declare function getJwt(): string | undefined;
12
+ /**
13
+ * The AgentCard MCP server URL (Streamable HTTP, `/mcp`) the `buy` chat connects to as an MCP
14
+ * client. Resolution order: stored config → AGENT_CARDS_MCP_URL env → derived from the API URL
15
+ * (api.agentcard.sh → mcp.agentcard.sh/mcp) → prod default. Local dev runs the MCP HTTP server on
16
+ * a separate port (`pnpm dev:mcp-http`), so set AGENT_CARDS_MCP_URL=http://localhost:3002/mcp there.
17
+ */
18
+ export declare function getMcpUrl(): string;
11
19
  /** Remove stored auth (email + jwt) so user can log in as someone else. */
12
20
  export declare function clearAuth(): void;
13
21
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/lib/config.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,UAAU,QAAkC,CAAC;AAG1D,UAAU,MAAM;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,UAAU,IAAI,MAAM,CAOnC;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI,CAIvD;AAED,wBAAgB,SAAS,IAAI,MAAM,CAGlC;AAED,wBAAgB,MAAM,IAAI,MAAM,GAAG,SAAS,CAE3C;AAED,2EAA2E;AAC3E,wBAAgB,SAAS,IAAI,IAAI,CAQhC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/lib/config.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,UAAU,QAAkC,CAAC;AAG1D,UAAU,MAAM;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,UAAU,IAAI,MAAM,CAOnC;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI,CAIvD;AAED,wBAAgB,SAAS,IAAI,MAAM,CAGlC;AAED,wBAAgB,MAAM,IAAI,MAAM,GAAG,SAAS,CAE3C;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,IAAI,MAAM,CAkBlC;AAED,2EAA2E;AAC3E,wBAAgB,SAAS,IAAI,IAAI,CAQhC"}
@@ -25,6 +25,34 @@ export function getApiUrl() {
25
25
  export function getJwt() {
26
26
  return readConfig().jwt ?? process.env.AGENT_CARDS_JWT;
27
27
  }
28
+ /**
29
+ * The AgentCard MCP server URL (Streamable HTTP, `/mcp`) the `buy` chat connects to as an MCP
30
+ * client. Resolution order: stored config → AGENT_CARDS_MCP_URL env → derived from the API URL
31
+ * (api.agentcard.sh → mcp.agentcard.sh/mcp) → prod default. Local dev runs the MCP HTTP server on
32
+ * a separate port (`pnpm dev:mcp-http`), so set AGENT_CARDS_MCP_URL=http://localhost:3002/mcp there.
33
+ */
34
+ export function getMcpUrl() {
35
+ const cfg = readConfig();
36
+ if (cfg.mcpUrl)
37
+ return cfg.mcpUrl;
38
+ if (process.env.AGENT_CARDS_MCP_URL)
39
+ return process.env.AGENT_CARDS_MCP_URL;
40
+ try {
41
+ const u = new URL(getApiUrl());
42
+ if (u.hostname.startsWith('api.')) {
43
+ u.hostname = `mcp.${u.hostname.slice(4)}`;
44
+ return `${u.origin}/mcp`;
45
+ }
46
+ if (u.hostname.includes('.api.')) {
47
+ u.hostname = u.hostname.replace('.api.', '.mcp.');
48
+ return `${u.origin}/mcp`;
49
+ }
50
+ }
51
+ catch {
52
+ /* fall through to the prod default */
53
+ }
54
+ return 'https://mcp.agentcard.sh/mcp';
55
+ }
28
56
  /** Remove stored auth (email + jwt) so user can log in as someone else. */
29
57
  export function clearAuth() {
30
58
  const cfg = readConfig();
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/lib/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AACxE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAE7B,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,cAAc,CAAC,CAAC;AAC1D,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AAQpD,MAAM,UAAU,UAAU;IACxB,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;QAAE,OAAO,EAAE,CAAC;IACxC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAqB;IAC/C,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3C,MAAM,QAAQ,GAAG,UAAU,EAAE,CAAC;IAC9B,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,QAAQ,EAAE,GAAG,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AACjG,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;IACzB,OAAO,GAAG,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,0BAA0B,CAAC;AACrF,CAAC;AAED,MAAM,UAAU,MAAM;IACpB,OAAO,UAAU,EAAE,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;AACzD,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,SAAS;IACvB,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;IACzB,OAAO,GAAG,CAAC,KAAK,CAAC;IACjB,OAAO,GAAG,CAAC,GAAG,CAAC;IACf,OAAQ,GAAW,CAAC,MAAM,CAAC,CAAC,wBAAwB;IACpD,OAAQ,GAAW,CAAC,IAAI,CAAC,CAAC,6DAA6D;IACvF,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3C,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AAC5E,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/lib/config.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agent-cards",
3
- "version": "0.5.46",
3
+ "version": "0.5.47",
4
4
  "description": "CLI for managing virtual debit cards for AI agents",
5
5
  "type": "module",
6
6
  "bin": {
@@ -11,7 +11,7 @@
11
11
  "assets"
12
12
  ],
13
13
  "engines": {
14
- "node": ">=18"
14
+ "node": ">=22"
15
15
  },
16
16
  "scripts": {
17
17
  "dev": "tsx bin/agent-cards.ts",
@@ -19,14 +19,18 @@
19
19
  "prepublishOnly": "pnpm build"
20
20
  },
21
21
  "dependencies": {
22
+ "@ai-sdk/anthropic": "^4.0.1",
23
+ "@ai-sdk/mcp": "^2.0.3",
24
+ "ai": "^7.0.4",
22
25
  "chalk": "^5.3.0",
23
26
  "cli-table3": "^0.6.3",
24
27
  "commander": "^12.0.0",
25
- "posthog-node": "^4.0.0",
26
28
  "figlet": "^1.10.0",
27
29
  "inquirer": "^9.2.15",
28
30
  "open": "^10.1.0",
29
- "ora": "^8.2.0"
31
+ "ora": "^8.2.0",
32
+ "posthog-node": "^4.0.0",
33
+ "zod": "^4.4.3"
30
34
  },
31
35
  "devDependencies": {
32
36
  "@types/figlet": "^1.7.0",