agentcash 0.3.1 → 0.3.3
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/cjs/run-server.cjs +1473 -3900
- package/dist/esm/chunk-2EHPJVCX.js +363 -0
- package/dist/esm/chunk-2EHPJVCX.js.map +1 -0
- package/dist/esm/{chunk-WL5N26N4.js → chunk-ITXG5QJ3.js} +5 -5
- package/dist/esm/{chunk-EDWPR5IJ.js → chunk-PJFATGPH.js} +28 -80
- package/dist/esm/chunk-PJFATGPH.js.map +1 -0
- package/dist/esm/{chunk-Y5BSCN5L.js → chunk-QUSINJQZ.js} +82 -22
- package/dist/esm/chunk-QUSINJQZ.js.map +1 -0
- package/dist/esm/chunk-WQANIP2X.js +22 -0
- package/dist/esm/chunk-WQANIP2X.js.map +1 -0
- package/dist/esm/{commands-XFTEJGGT.js → commands-7TBWTLKT.js} +12 -10
- package/dist/esm/commands-7TBWTLKT.js.map +1 -0
- package/dist/esm/{fund-56IKTU6D.js → fund-BJFTXRRM.js} +4 -4
- package/dist/esm/index.js +9 -9
- package/dist/esm/{install-WZ2WOFCE.js → install-QNDIKJT7.js} +7 -7
- package/dist/esm/install-QNDIKJT7.js.map +1 -0
- package/dist/esm/{server-B4N6JKFY.js → server-3ZQQXMUD.js} +50 -100
- package/dist/esm/server-3ZQQXMUD.js.map +1 -0
- package/dist/esm/shared/operations/index.d.ts +18 -18
- package/dist/esm/shared/operations/index.js +3 -3
- package/package.json +7 -5
- package/dist/esm/chunk-4Z3HKYI5.js +0 -190
- package/dist/esm/chunk-4Z3HKYI5.js.map +0 -1
- package/dist/esm/chunk-EDWPR5IJ.js.map +0 -1
- package/dist/esm/chunk-QO2UZVLV.js +0 -52
- package/dist/esm/chunk-QO2UZVLV.js.map +0 -1
- package/dist/esm/chunk-Y5BSCN5L.js.map +0 -1
- package/dist/esm/commands-XFTEJGGT.js.map +0 -1
- package/dist/esm/install-WZ2WOFCE.js.map +0 -1
- package/dist/esm/server-B4N6JKFY.js.map +0 -1
- /package/dist/esm/{chunk-WL5N26N4.js.map → chunk-ITXG5QJ3.js.map} +0 -0
- /package/dist/esm/{fund-56IKTU6D.js.map → fund-BJFTXRRM.js.map} +0 -0
package/dist/esm/index.js
CHANGED
|
@@ -69,7 +69,7 @@ void yargs(hideBin(process.argv)).scriptName("agentcash").usage("$0 [command] [o
|
|
|
69
69
|
description: "Additional headers as JSON object"
|
|
70
70
|
}),
|
|
71
71
|
async (args) => {
|
|
72
|
-
const { fetchCommand } = await import("./commands-
|
|
72
|
+
const { fetchCommand } = await import("./commands-7TBWTLKT.js");
|
|
73
73
|
await fetchCommand(
|
|
74
74
|
{
|
|
75
75
|
url: args.url,
|
|
@@ -103,7 +103,7 @@ void yargs(hideBin(process.argv)).scriptName("agentcash").usage("$0 [command] [o
|
|
|
103
103
|
description: "Additional headers as JSON object"
|
|
104
104
|
}),
|
|
105
105
|
async (args) => {
|
|
106
|
-
const { checkCommand } = await import("./commands-
|
|
106
|
+
const { checkCommand } = await import("./commands-7TBWTLKT.js");
|
|
107
107
|
await checkCommand(
|
|
108
108
|
{
|
|
109
109
|
url: args.url,
|
|
@@ -123,7 +123,7 @@ void yargs(hideBin(process.argv)).scriptName("agentcash").usage("$0 [command] [o
|
|
|
123
123
|
demandOption: true
|
|
124
124
|
}),
|
|
125
125
|
async (args) => {
|
|
126
|
-
const { discoverCommand } = await import("./commands-
|
|
126
|
+
const { discoverCommand } = await import("./commands-7TBWTLKT.js");
|
|
127
127
|
await discoverCommand({ url: args.url }, args);
|
|
128
128
|
}
|
|
129
129
|
).command(
|
|
@@ -134,7 +134,7 @@ void yargs(hideBin(process.argv)).scriptName("agentcash").usage("$0 [command] [o
|
|
|
134
134
|
"Get wallet address, balance, and deposit link",
|
|
135
135
|
(yargs3) => yargs3,
|
|
136
136
|
async (args) => {
|
|
137
|
-
const { walletInfoCommand } = await import("./commands-
|
|
137
|
+
const { walletInfoCommand } = await import("./commands-7TBWTLKT.js");
|
|
138
138
|
await walletInfoCommand({}, args);
|
|
139
139
|
}
|
|
140
140
|
).command(
|
|
@@ -146,7 +146,7 @@ void yargs(hideBin(process.argv)).scriptName("agentcash").usage("$0 [command] [o
|
|
|
146
146
|
demandOption: true
|
|
147
147
|
}),
|
|
148
148
|
async (args) => {
|
|
149
|
-
const { walletRedeemCommand } = await import("./commands-
|
|
149
|
+
const { walletRedeemCommand } = await import("./commands-7TBWTLKT.js");
|
|
150
150
|
await walletRedeemCommand({ code: args.code }, args);
|
|
151
151
|
}
|
|
152
152
|
).demandCommand(1, "You must specify a wallet subcommand").strict(),
|
|
@@ -178,7 +178,7 @@ void yargs(hideBin(process.argv)).scriptName("agentcash").usage("$0 [command] [o
|
|
|
178
178
|
description: "Detailed report with context and repro steps"
|
|
179
179
|
}),
|
|
180
180
|
async (args) => {
|
|
181
|
-
const { reportErrorCommand } = await import("./commands-
|
|
181
|
+
const { reportErrorCommand } = await import("./commands-7TBWTLKT.js");
|
|
182
182
|
await reportErrorCommand(
|
|
183
183
|
{
|
|
184
184
|
tool: args.tool,
|
|
@@ -196,7 +196,7 @@ void yargs(hideBin(process.argv)).scriptName("agentcash").usage("$0 [command] [o
|
|
|
196
196
|
"Start the MCP server (default when no command specified)",
|
|
197
197
|
(yargs2) => yargs2,
|
|
198
198
|
async (args) => {
|
|
199
|
-
const { serverCommand } = await import("./commands-
|
|
199
|
+
const { serverCommand } = await import("./commands-7TBWTLKT.js");
|
|
200
200
|
await serverCommand(args);
|
|
201
201
|
}
|
|
202
202
|
).command(
|
|
@@ -209,7 +209,7 @@ void yargs(hideBin(process.argv)).scriptName("agentcash").usage("$0 [command] [o
|
|
|
209
209
|
default: isClaudeCode ? "claude-code" /* ClaudeCode */ : void 0
|
|
210
210
|
}),
|
|
211
211
|
async (args) => {
|
|
212
|
-
const { installMcpServer } = await import("./install-
|
|
212
|
+
const { installMcpServer } = await import("./install-QNDIKJT7.js");
|
|
213
213
|
await installMcpServer(args);
|
|
214
214
|
}
|
|
215
215
|
).command(
|
|
@@ -217,7 +217,7 @@ void yargs(hideBin(process.argv)).scriptName("agentcash").usage("$0 [command] [o
|
|
|
217
217
|
"Open the funding page to add USDC to your wallet",
|
|
218
218
|
(yargs2) => yargs2,
|
|
219
219
|
async (args) => {
|
|
220
|
-
const { fundMcpServer } = await import("./fund-
|
|
220
|
+
const { fundMcpServer } = await import("./fund-BJFTXRRM.js");
|
|
221
221
|
await fundMcpServer(args);
|
|
222
222
|
}
|
|
223
223
|
).example(
|
|
@@ -3,24 +3,24 @@ import {
|
|
|
3
3
|
clientMetadata
|
|
4
4
|
} from "./chunk-KPEJO3KV.js";
|
|
5
5
|
import {
|
|
6
|
-
DIST_TAG
|
|
7
|
-
|
|
8
|
-
} from "./chunk-QO2UZVLV.js";
|
|
6
|
+
DIST_TAG
|
|
7
|
+
} from "./chunk-WQANIP2X.js";
|
|
9
8
|
import {
|
|
10
9
|
promptDeposit,
|
|
11
10
|
wait
|
|
12
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-ITXG5QJ3.js";
|
|
13
12
|
import {
|
|
14
13
|
getWallet,
|
|
15
14
|
redeemInviteCode
|
|
16
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-2EHPJVCX.js";
|
|
17
16
|
import {
|
|
18
17
|
err,
|
|
18
|
+
getBalance,
|
|
19
19
|
log,
|
|
20
20
|
resultFromThrowable,
|
|
21
21
|
safeReadFile,
|
|
22
22
|
safeWriteFile
|
|
23
|
-
} from "./chunk-
|
|
23
|
+
} from "./chunk-PJFATGPH.js";
|
|
24
24
|
import "./chunk-ISR6DJ53.js";
|
|
25
25
|
|
|
26
26
|
// src/cli/install/index.ts
|
|
@@ -701,4 +701,4 @@ var installMcpServer = async (flags) => {
|
|
|
701
701
|
export {
|
|
702
702
|
installMcpServer
|
|
703
703
|
};
|
|
704
|
-
//# sourceMappingURL=install-
|
|
704
|
+
//# sourceMappingURL=install-QNDIKJT7.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/cli/install/index.ts","../../src/cli/install/1-get-client/index.ts","../../src/cli/install/2-add-server/index.ts","../../src/cli/install/2-add-server/lib/client-config-file.ts","../../src/cli/install/2-add-server/lib/platforms.ts","../../src/cli/install/2-add-server/lib/file-types.ts","../../src/cli/install/2-add-server/lib/result.ts","../../src/cli/install/2-add-server/lib/nested-values.ts","../../src/cli/install/3-redeem-invite/index.ts","../../src/cli/install/4-add-funds/index.ts"],"sourcesContent":["import chalk from 'chalk';\nimport { intro, outro } from '@clack/prompts';\n\nimport { getWallet } from '@/shared/wallet';\nimport { log } from '@/shared/log';\n\nimport { getClient } from './1-get-client';\nimport { addServer } from './2-add-server';\nimport { redeemInviteCode } from './3-redeem-invite';\nimport { addFunds } from './4-add-funds';\n\nimport type { Command, GlobalFlags } from '@/types';\n\nexport type InstallFlags = GlobalFlags<{\n client?: string;\n}>;\n\nexport const installMcpServer: Command<InstallFlags> = async flags => {\n intro(chalk.green.bold(`Install agentcash MCP`));\n\n const walletResult = await getWallet();\n\n if (walletResult.isErr()) {\n log.error(JSON.stringify(walletResult.error, null, 2));\n outro(chalk.bold.red('Failed to get wallet'));\n process.exit(1);\n }\n\n const {\n account: { address },\n isNew,\n } = walletResult.value;\n\n const client = await getClient(flags);\n\n await addServer(client, flags);\n\n const inviteRedeemed = flags.invite\n ? await redeemInviteCode(\n {\n code: flags.invite,\n dev: flags.dev,\n address,\n surface: 'install',\n },\n flags\n )\n : false;\n\n if (!inviteRedeemed) {\n await addFunds({ flags, address, isNew });\n }\n\n outro(chalk.bold.green('Your agentcash MCP server is ready to use!'));\n};\n","import z from 'zod';\n\nimport { select, log, outro } from '@clack/prompts';\n\nimport chalk from 'chalk';\n\nimport { clientMetadata, Clients } from '../clients';\n\nimport type { InstallFlags } from '..';\n\nexport const getClient = async ({ client: flagClient, yes }: InstallFlags) => {\n if (yes) {\n if (!flagClient) {\n throw new Error(\n `Client is required when yes is true. Pass --client as one of these values: ${Object.values(Clients).join(', ')}`\n );\n }\n const parsedClient = z.enum(Clients).safeParse(flagClient);\n if (!parsedClient.success) {\n throw new Error(\n `${flagClient} is not a valid client. Valid options are: ${Object.values(Clients).join(', ')}`\n );\n }\n return parsedClient.data;\n }\n const parsedClient = z.enum(Clients).safeParse(flagClient);\n if (parsedClient.success) {\n return parsedClient.data;\n }\n if (flagClient) {\n log.error(`${flagClient} is not a valid client. Please select a client`);\n }\n const client = await select({\n message: 'Where would you like to install the agentcash MCP server?',\n options: Object.values(Clients).map(client => {\n const metadata = clientMetadata[client];\n return {\n label: metadata.name,\n value: client,\n };\n }),\n maxItems: 7,\n });\n\n const parsedClientSelection = z.enum(Clients).safeParse(client);\n if (parsedClientSelection.success) {\n return parsedClientSelection.data;\n }\n outro(chalk.bold.red('No MCP client selected'));\n process.exit(0);\n};\n","import fs from 'fs';\n\nimport chalk from 'chalk';\n\nimport { log as clackLog, confirm, outro, stream } from '@clack/prompts';\n\nimport { err } from '@agentcash/neverthrow';\n\nimport { safeWriteFile } from '@/shared/neverthrow/fs';\nimport { log } from '@/shared/log';\n\nimport { clientMetadata, Clients } from '../clients';\nimport {\n FileFormat,\n parseClientConfig,\n serializeClientConfig,\n stringifyObject,\n getClientConfigFile,\n getNestedValue,\n setNestedValue,\n} from './lib';\n\nimport { DIST_TAG } from '@/shared/version';\n\nimport { wait } from '@/cli/lib/wait';\n\nimport type { ClientConfigObject } from './types';\nimport type { GlobalFlags } from '@/types';\n\nconst getMcpConfig = (globalFlags: GlobalFlags) => {\n if (globalFlags.dev) {\n return {\n serverName: 'agentcash',\n command: 'node',\n args: [`${process.cwd()}/dist/esm/index.js`, '--dev'],\n };\n }\n return {\n serverName: 'agentcash',\n command: 'npx',\n args: ['-y', `agentcash@${DIST_TAG}`],\n };\n};\n\nexport const addServer = async (client: Clients, globalFlags: GlobalFlags) => {\n const { serverName, command, args } = getMcpConfig(globalFlags);\n\n if (client === Clients.Warp) {\n clackLog.info(\n chalk.bold.yellow('Warp requires a manual installation through their UI.')\n );\n clackLog.message(\n 'Please copy the following configuration object and add it to your Warp MCP config:'\n );\n console.log();\n console.log(\n JSON.stringify(\n {\n [serverName]: {\n command,\n args,\n working_directory: null,\n start_on_launch: true,\n },\n },\n null,\n 2\n )\n );\n console.log();\n clackLog.message(\n `Read Warp's documentation at https://docs.warp.dev/knowledge-and-collaboration/mcp`\n );\n const addedToWarp = await confirm({\n message: 'Did you add the MCP server to your Warp config?',\n });\n if (!addedToWarp) {\n return err('user', 'install', {\n cause: 'warp_mcp_server_not_added',\n message: 'Warp MCP server not added',\n });\n }\n }\n\n const clientFileTarget = getClientConfigFile(client);\n const { name } = clientMetadata[client];\n\n let config: ClientConfigObject = {};\n let content: string | undefined = undefined;\n\n log.info(`Checking if config file exists at: ${clientFileTarget.path}`);\n if (!fs.existsSync(clientFileTarget.path)) {\n log.info('Config file not found, creating default empty config');\n setNestedValue(config, clientFileTarget.configKey, {});\n log.info('Config created successfully');\n if (!globalFlags.yes) {\n await wait({\n startText: 'Locating config file',\n stopText: `No config found, creating default empty config`,\n ms: 1000,\n });\n }\n } else {\n log.info('Config file found, reading config file content');\n const parseResult = await parseClientConfig(clientFileTarget);\n\n if (parseResult.isErr()) {\n clackLog.error(\n chalk.bold.red(`Error reading config: ${parseResult.error.message}`)\n );\n outro(chalk.bold.red(`Error adding agentcash MCP to ${name}`));\n process.exit(1);\n }\n\n const { config: rawConfig, fileContent } = parseResult.value;\n config = rawConfig;\n content = fileContent;\n const existingValue = getNestedValue(rawConfig, clientFileTarget.configKey);\n if (!existingValue) {\n setNestedValue(rawConfig, clientFileTarget.configKey, {});\n }\n if (!globalFlags.yes) {\n await wait({\n startText: `Locating config file`,\n stopText: `Config loaded from ${clientFileTarget.path}`,\n ms: 1000,\n });\n }\n }\n\n const servers = getNestedValue(config, clientFileTarget.configKey);\n if (!servers || typeof servers !== 'object') {\n log.error(`Invalid ${clientFileTarget.configKey} structure in config`);\n clackLog.error(\n chalk.bold.red(\n `Invalid ${clientFileTarget.configKey} structure in config`\n )\n );\n outro(chalk.bold.red(`Error adding agentcash MCP to ${name}`));\n process.exit(1);\n }\n\n if (client === Clients.Goose) {\n servers[serverName] = {\n name: serverName,\n cmd: command,\n args,\n enabled: true,\n envs: {},\n type: 'stdio',\n timeout: 300,\n };\n } else if (client === Clients.Zed) {\n // Zed has a different config structure\n servers[serverName] = {\n source: 'custom',\n command,\n args,\n env: {},\n };\n } else if (client === Clients.Opencode) {\n servers[serverName] = {\n type: 'local',\n command,\n args,\n enabled: true,\n environment: {},\n };\n } else {\n servers[serverName] = {\n command,\n args,\n };\n }\n\n if (!globalFlags.yes) {\n await new Promise(resolve => setTimeout(resolve, 1000));\n\n clackLog.step(\n `The following will be added to ${chalk.bold.underline(clientFileTarget.path)}`\n );\n }\n\n const configStr = formatDiffByFormat(\n {\n [clientFileTarget.configKey]: {\n [serverName]: servers[serverName] as object,\n },\n },\n clientFileTarget.format\n );\n\n if (!globalFlags.yes) {\n await stream.message(\n (async function* () {\n for (const num of Array.from(\n { length: configStr.length },\n (_, i) => i\n )) {\n const char = configStr[num]!;\n yield char;\n if (!['\\n', ' ', '─', '╮', '╭', '╰', '╯', '│'].includes(char)) {\n await new Promise(resolve => setTimeout(resolve, 5));\n } else {\n await new Promise(resolve => setTimeout(resolve, 2));\n }\n }\n })()\n );\n\n await new Promise(resolve => setTimeout(resolve, 1000));\n }\n\n const isConfirmed = globalFlags.yes\n ? true\n : await confirm({\n message: `Would you like to proceed?`,\n active: 'Install MCP',\n inactive: 'Cancel',\n });\n if (isConfirmed !== true) {\n outro(chalk.bold.red('Installation cancelled'));\n process.exit(0);\n }\n\n const configContent = serializeClientConfig(\n clientFileTarget,\n config,\n content\n );\n\n const writeResult = await safeWriteFile(\n 'config_file',\n clientFileTarget.path,\n configContent\n );\n\n if (writeResult.isErr()) {\n clackLog.error(\n chalk.bold.red(`Error writing config: ${writeResult.error.message}`)\n );\n outro(chalk.bold.red(`Error adding agentcash MCP to ${name}`));\n process.exit(1);\n }\n\n clackLog.success(chalk.bold.green(`Added agentcash MCP to ${name}`));\n};\n\nconst formatDiffByFormat = (obj: object, format: FileFormat) => {\n const str = stringifyObject(obj, format);\n switch (format) {\n case FileFormat.JSON: {\n const numLines = str.split('\\n').length;\n return str\n .split('\\n')\n .map((line, index) => {\n const diffLines = [0, 1, numLines - 2, numLines - 1];\n const isDiffLine = !diffLines.includes(index);\n if (isDiffLine) {\n return `${chalk.bold.green(`+ ${line.slice(2)}`)}`;\n }\n return line;\n })\n .join('\\n');\n }\n case FileFormat.YAML: {\n return str\n .split('\\n')\n .map((line, index) => {\n const diffLines = [0, 1, str.length - 2, str.length - 1];\n const isDiffLine = !diffLines.includes(index);\n if (isDiffLine) {\n return `${chalk.bold.green(`+ ${line.slice(2)}`)}`;\n }\n return line;\n })\n .join('\\n');\n }\n case FileFormat.TOML: {\n return str\n .split('\\n')\n .filter(line => line.trim() !== '')\n .map(line => {\n return `${chalk.bold.green(`+ ${line.trim()}`)}`;\n })\n .join('\\n');\n }\n }\n};\n","import os from 'os';\nimport path from 'path';\nimport process from 'process';\nimport fs from 'fs';\n\nimport { getPlatformPath } from './platforms';\nimport { log } from '@/shared/log';\n\nimport { Clients } from '../../clients';\n\nimport type { ClientConfigFile } from '../types';\nimport { FileFormat } from './file-types';\n\nexport const getClientConfigFile = (client: Clients): ClientConfigFile => {\n const homeDir = os.homedir();\n const { baseDir, vscodePath } = getPlatformPath();\n\n switch (client) {\n case Clients.Claude:\n return {\n path: path.join(baseDir, 'Claude', 'claude_desktop_config.json'),\n configKey: 'mcpServers',\n format: FileFormat.JSON,\n };\n case Clients.Cline:\n return {\n path: path.join(\n baseDir,\n vscodePath,\n 'globalStorage',\n 'saoudrizwan.claude-dev',\n 'settings',\n 'cline_mcp_settings.json'\n ),\n configKey: 'mcpServers',\n format: FileFormat.JSON,\n };\n case Clients.RooCline:\n return {\n path: path.join(\n baseDir,\n vscodePath,\n 'globalStorage',\n 'rooveterinaryinc.roo-cline',\n 'settings',\n 'mcp_settings.json'\n ),\n configKey: 'mcpServers',\n format: FileFormat.JSON,\n };\n case Clients.Windsurf:\n return {\n path: path.join(homeDir, '.codeium', 'windsurf', 'mcp_config.json'),\n configKey: 'mcpServers',\n format: FileFormat.JSON,\n };\n case Clients.Cursor:\n return {\n path: path.join(homeDir, '.cursor', 'mcp.json'),\n configKey: 'mcpServers',\n format: FileFormat.JSON,\n };\n case Clients.Warp:\n return {\n path: 'no-local-config', // it's okay this isn't a real path, we never use it\n configKey: 'mcpServers',\n format: FileFormat.JSON,\n };\n case Clients.GeminiCli:\n return {\n path: path.join(homeDir, '.gemini', 'settings.json'),\n configKey: 'mcpServers',\n format: FileFormat.JSON,\n };\n case Clients.Vscode:\n return {\n path: path.join(baseDir, vscodePath, 'mcp.json'),\n configKey: 'mcpServers',\n format: FileFormat.JSON,\n };\n case Clients.ClaudeCode:\n return {\n path: path.join(homeDir, '.claude.json'),\n configKey: 'mcpServers',\n format: FileFormat.JSON,\n };\n case Clients.Goose:\n return {\n path: path.join(homeDir, '.config', 'goose', 'config.yaml'),\n configKey: 'extensions',\n format: FileFormat.YAML,\n };\n case Clients.Zed:\n return {\n path:\n process.platform === 'win32'\n ? path.join(\n process.env.APPDATA ?? path.join(homeDir, 'AppData', 'Roaming'),\n 'Zed',\n 'settings.json'\n )\n : path.join(homeDir, '.config', 'zed', 'settings.json'),\n configKey: 'context_servers',\n format: FileFormat.JSON,\n };\n case Clients.Codex:\n return {\n path: path.join(\n process.env.CODEX_HOME ?? path.join(homeDir, '.codex'),\n 'config.toml'\n ),\n configKey: 'mcp_servers',\n format: FileFormat.TOML,\n };\n case Clients.Opencode: {\n const jsonPath = path.join(\n homeDir,\n '.config',\n 'opencode',\n 'opencode.json'\n );\n const jsoncPath = jsonPath.replace('.json', '.jsonc');\n\n // For OpenCode, check if .jsonc exists and prefer it over .json\n if (fs.existsSync(jsoncPath)) {\n log.info(`Found .jsonc file for OpenCode, using: ${jsoncPath}`);\n return {\n path: jsoncPath,\n configKey: 'mcp',\n format: FileFormat.JSON,\n };\n }\n\n return {\n path: jsonPath,\n configKey: 'mcp',\n format: FileFormat.JSON,\n };\n }\n default:\n throw new Error(`Unknown client: ${String(client)}`);\n }\n};\n","import os from 'os';\nimport path from 'path';\nimport process from 'process';\nimport z from 'zod';\n\nenum Platforms {\n Windows = 'win32',\n MacOS = 'darwin',\n Linux = 'linux',\n}\n\nexport const getPlatformPath = () => {\n const platform = z.enum(Platforms).safeParse(process.platform);\n if (!platform.success) {\n throw new Error(`Invalid platform: ${process.platform}`);\n }\n\n const homeDir = os.homedir();\n\n switch (platform.data) {\n case Platforms.Windows:\n return {\n baseDir:\n process.env.APPDATA ?? path.join(homeDir, 'AppData', 'Roaming'),\n vscodePath: path.join('Code', 'User'),\n };\n case Platforms.MacOS:\n return {\n baseDir: path.join(homeDir, 'Library', 'Application Support'),\n vscodePath: path.join('Code', 'User'),\n };\n case Platforms.Linux:\n return {\n baseDir: process.env.XDG_CONFIG_HOME ?? path.join(homeDir, '.config'),\n vscodePath: path.join('Code/User'),\n };\n default:\n throw new Error(`Invalid platform: ${process.platform}`);\n }\n};\n","import * as TOML from '@iarna/toml';\nimport yaml from 'js-yaml';\nimport * as jsonc from 'jsonc-parser';\n\nimport { safeReadFile } from '@/shared/neverthrow/fs';\nimport { configResultFromThrowable } from './result';\n\nimport type { ClientConfigFile, ClientConfigObject } from '../types';\n\nexport enum FileFormat {\n JSON = 'json',\n YAML = 'yaml',\n TOML = 'toml',\n}\n\nconst parseContent = (\n fileContent: string,\n format: FileFormat,\n path: string\n) => {\n return configResultFromThrowable(\n () => {\n let config: ClientConfigObject;\n if (format === FileFormat.YAML) {\n config = yaml.load(fileContent) as ClientConfigObject;\n } else if (format === FileFormat.TOML) {\n config = TOML.parse(fileContent) as ClientConfigObject;\n } else if (path.endsWith('.jsonc')) {\n config = jsonc.parse(fileContent) as ClientConfigObject;\n } else {\n config = JSON.parse(fileContent) as ClientConfigObject;\n }\n return {\n config,\n fileContent,\n };\n },\n e => ({\n cause: 'parse_config',\n message: e instanceof Error ? e.message : 'Failed to parse config file',\n })\n );\n};\n\n/**\n * Parse file content based on format\n */\nexport const parseClientConfig = async ({ format, path }: ClientConfigFile) => {\n const readResult = await safeReadFile('config_file', path);\n\n if (readResult.isErr()) return readResult;\n\n const parseResult = parseContent(readResult.value, format, path);\n\n if (parseResult.isErr()) return parseResult;\n\n return parseResult;\n};\n\nconst serializeJsonc = (\n config: ClientConfigObject,\n originalContent: string\n) => {\n return configResultFromThrowable<string>(\n () => {\n const modifications: jsonc.Edit[] = [];\n\n for (const key of Object.keys(config)) {\n const keyPath = [key];\n const edits = jsonc.modify(originalContent, keyPath, config[key], {\n formattingOptions: { tabSize: 2, insertSpaces: true },\n });\n modifications.push(...edits);\n }\n\n return jsonc.applyEdits(originalContent, modifications);\n },\n e => ({\n cause: 'serialize_config',\n message: e instanceof Error ? e.message : 'Failed to serialize JSONC',\n })\n );\n};\n\nexport const serializeClientConfig = (\n { format, path }: ClientConfigFile,\n config: ClientConfigObject,\n originalContent?: string\n): string => {\n if (format === FileFormat.YAML) {\n return yaml.dump(config, {\n indent: 2,\n lineWidth: -1,\n noRefs: true,\n });\n }\n if (format === FileFormat.TOML) {\n return TOML.stringify(config);\n }\n if (path.endsWith('.jsonc') && originalContent) {\n const result = serializeJsonc(config, originalContent);\n if (result.isOk()) {\n return result.value;\n }\n // Fallback to standard JSON.stringify if edit fails\n console.log(`Error applying JSONC edits: ${result.error.message}`);\n console.log('Falling back to JSON.stringify (comments will be lost)');\n return JSON.stringify(config, null, 2);\n }\n // Default to JSON\n return JSON.stringify(config, null, 2);\n};\n\nexport const stringifyObject = (\n config: ClientConfigObject,\n format: FileFormat\n) => {\n if (format === FileFormat.YAML) {\n return yaml.dump(config, {\n indent: 2,\n lineWidth: -1,\n noRefs: true,\n });\n }\n if (format === FileFormat.TOML) {\n return TOML.stringify(config);\n }\n return JSON.stringify(config, null, 2);\n};\n","import { resultFromThrowable } from '@agentcash/neverthrow';\n\nimport type { BaseConfigError } from '../types';\n\nconst errorType = 'config';\nconst surface = 'config_file';\n\nexport const configResultFromThrowable = <T>(\n fn: () => T,\n error: (e: unknown) => BaseConfigError\n) => resultFromThrowable(errorType, surface, fn, error);\n","import type { ClientConfigObject } from '../types';\n\nexport const getNestedValue = (obj: ClientConfigObject, path: string) => {\n const keys = path.split('.');\n let current: ClientConfigObject | undefined = obj;\n for (const key of keys) {\n if (current && typeof current === 'object' && key in current) {\n current = current[key] as ClientConfigObject;\n } else {\n return undefined;\n }\n }\n return current;\n};\n\nexport const setNestedValue = (\n obj: ClientConfigObject,\n path: string,\n value: ClientConfigObject\n) => {\n const keys = path.split('.');\n const lastKey = keys.pop();\n if (!lastKey) return;\n const target = keys.reduce((current, key) => {\n current[key] ??= {};\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return current[key];\n }, obj);\n target[lastKey] = value;\n};\n","import chalk from 'chalk';\nimport { log, spinner } from '@clack/prompts';\n\nimport { wait } from '@/cli/lib/wait';\n\nimport { redeemInviteCode as redeemInviteCodeLib } from '@/shared/redeem-invite';\n\nimport type { RedeemInviteProps } from '@/shared/redeem-invite';\nimport type { GlobalFlags } from '@/types';\n\nexport const redeemInviteCode = async (\n props: RedeemInviteProps,\n flags: GlobalFlags\n) => {\n const s = spinner();\n\n if (!flags.yes) {\n s.start('Redeeming invite code...');\n }\n\n const result = await redeemInviteCodeLib(props);\n\n return result.match(\n async ({ amount, txHash }) => {\n if (!flags.yes) {\n s.stop('Invite code redeemed successfully!');\n\n await wait({\n startText: 'Processing...',\n stopText: chalk.green(\n `${chalk.bold(amount)} USDC has been sent to your wallet!`\n ),\n ms: 1000,\n });\n }\n\n log.info(chalk.dim(`Transaction: https://basescan.org/tx/${txHash}`));\n\n return true;\n },\n error => {\n if (!flags.yes) {\n s.stop('Invite code redemption failed');\n }\n log.warning(\n chalk.yellow(`Failed to redeem invite code: ${error.message}`)\n );\n return false;\n }\n );\n};\n","import chalk from 'chalk';\nimport { log, spinner } from '@clack/prompts';\n\nimport { getBalance } from '@/shared/balance';\nimport { promptDeposit } from '@/cli/lib/deposit';\n\nimport type { Address } from 'viem';\nimport type { InstallFlags } from '..';\n\ninterface AddFundsProps {\n flags: InstallFlags;\n address: Address;\n isNew: boolean;\n}\n\nexport const addFunds = async ({ flags, address, isNew }: AddFundsProps) => {\n if (isNew) {\n if (!flags.yes) {\n await new Promise(resolve => setTimeout(resolve, 1000));\n }\n log.info('To use paid API tools, you will need USDC in your wallet.');\n await promptDeposit({ address, flags, surface: 'add-funds' });\n } else {\n const { start, stop } = spinner();\n\n start('Checking balance...');\n const balanceResult = await getBalance({\n address,\n flags,\n surface: 'add-funds',\n });\n\n if (balanceResult.isOk()) {\n stop(`Balance: ${chalk.bold(`${balanceResult.value.balance} USDC`)} `);\n } else {\n stop(`Error: ${balanceResult.error.message}`);\n return;\n }\n\n const balance = balanceResult.value;\n if (balance.balance < 1) {\n log.warning(\n chalk.bold(\n `Your balance is low (${balance.balance} USDC). Consider topping up.`\n )\n );\n await promptDeposit({ address, flags, surface: 'install' });\n }\n }\n};\n"],"mappings":"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","names":["chalk","outro","log","parsedClient","log","client","fs","chalk","outro","os","path","process","process","z","Platforms","path","os","path","process","path","chalk","fs","outro","chalk","log","redeemInviteCode","chalk","log","chalk","log","spinner","log","spinner","chalk","chalk","outro","redeemInviteCode"]}
|
|
@@ -9,6 +9,10 @@ import {
|
|
|
9
9
|
getInputSchema,
|
|
10
10
|
getOriginIndex,
|
|
11
11
|
getSiwxExtension,
|
|
12
|
+
getTempoBalance,
|
|
13
|
+
getTempoChainId,
|
|
14
|
+
getTempoRpcUrl,
|
|
15
|
+
getTempoTokenAddress,
|
|
12
16
|
safeCreatePaymentPayload,
|
|
13
17
|
safeCreateSIWxPayload,
|
|
14
18
|
safeGetPaymentRequired,
|
|
@@ -17,22 +21,20 @@ import {
|
|
|
17
21
|
tokenStringToNumber,
|
|
18
22
|
x402Err,
|
|
19
23
|
x402Ok
|
|
20
|
-
} from "./chunk-
|
|
21
|
-
import
|
|
22
|
-
getBalance
|
|
23
|
-
} from "./chunk-QO2UZVLV.js";
|
|
24
|
+
} from "./chunk-QUSINJQZ.js";
|
|
25
|
+
import "./chunk-WQANIP2X.js";
|
|
24
26
|
import {
|
|
27
|
+
DEFAULT_NETWORK,
|
|
25
28
|
getWallet,
|
|
26
29
|
redeemInviteCode,
|
|
27
30
|
safeStringifyJson
|
|
28
|
-
} from "./chunk-
|
|
31
|
+
} from "./chunk-2EHPJVCX.js";
|
|
29
32
|
import {
|
|
30
|
-
DEFAULT_NETWORK,
|
|
31
33
|
err,
|
|
32
34
|
fetchErr,
|
|
33
35
|
fetchHttpErr,
|
|
34
36
|
fetchOk,
|
|
35
|
-
|
|
37
|
+
getBalance,
|
|
36
38
|
getDepositLink,
|
|
37
39
|
isFetchError,
|
|
38
40
|
log,
|
|
@@ -43,7 +45,7 @@ import {
|
|
|
43
45
|
safeFetch,
|
|
44
46
|
safeFetchJson,
|
|
45
47
|
safeParseResponse
|
|
46
|
-
} from "./chunk-
|
|
48
|
+
} from "./chunk-PJFATGPH.js";
|
|
47
49
|
import "./chunk-ISR6DJ53.js";
|
|
48
50
|
|
|
49
51
|
// src/server/index.ts
|
|
@@ -116,13 +118,14 @@ var mcpError = async (err2) => {
|
|
|
116
118
|
"mcp-error-fetch-parse-response",
|
|
117
119
|
response
|
|
118
120
|
);
|
|
119
|
-
|
|
121
|
+
const httpContent = [
|
|
120
122
|
{ type: "text", text: JSON.stringify(rest, null, 2) },
|
|
121
123
|
...parseResponseResult.match(
|
|
122
124
|
(success) => [parsedResponseToToolContentPart(success)],
|
|
123
125
|
() => []
|
|
124
126
|
)
|
|
125
|
-
]
|
|
127
|
+
];
|
|
128
|
+
return { content: httpContent };
|
|
126
129
|
}
|
|
127
130
|
}
|
|
128
131
|
return mcpErrorJson({ ...error });
|
|
@@ -165,70 +168,6 @@ var mcpSuccessResponse = (data, extra) => {
|
|
|
165
168
|
|
|
166
169
|
// src/server/tools/lib/check-balance.ts
|
|
167
170
|
import { formatUnits } from "viem";
|
|
168
|
-
|
|
169
|
-
// src/shared/tempo.ts
|
|
170
|
-
import { createPublicClient, defineChain, http } from "viem";
|
|
171
|
-
var TEMPO_CHAIN_ID = Number(process.env.TEMPO_CHAIN_ID ?? 42431);
|
|
172
|
-
var TEMPO_RPC_URL = process.env.TEMPO_RPC_URL ?? "https://tempo-moderato.g.alchemy.com/v2/GCnF4KF-qMTaDYNxAOMSC";
|
|
173
|
-
var TEMPO_CHAIN_NAME = process.env.TEMPO_CHAIN_NAME ?? "Tempo Testnet";
|
|
174
|
-
var TEMPO_TOKEN_ADDRESS = process.env.TEMPO_TOKEN_ADDRESS ?? "0x20c0000000000000000000000000000000000001";
|
|
175
|
-
function getTempoChainId() {
|
|
176
|
-
return TEMPO_CHAIN_ID;
|
|
177
|
-
}
|
|
178
|
-
function getTempoRpcUrl() {
|
|
179
|
-
return TEMPO_RPC_URL;
|
|
180
|
-
}
|
|
181
|
-
function getTempoChainName() {
|
|
182
|
-
return TEMPO_CHAIN_NAME;
|
|
183
|
-
}
|
|
184
|
-
function getTempoTokenAddress() {
|
|
185
|
-
return TEMPO_TOKEN_ADDRESS;
|
|
186
|
-
}
|
|
187
|
-
var tempoChain = defineChain({
|
|
188
|
-
id: TEMPO_CHAIN_ID,
|
|
189
|
-
name: TEMPO_CHAIN_NAME,
|
|
190
|
-
nativeCurrency: { name: "TEMPO", symbol: "TEMPO", decimals: 18 },
|
|
191
|
-
rpcUrls: {
|
|
192
|
-
default: { http: [TEMPO_RPC_URL] }
|
|
193
|
-
}
|
|
194
|
-
});
|
|
195
|
-
function createTempoPublicClient() {
|
|
196
|
-
return createPublicClient({
|
|
197
|
-
chain: tempoChain,
|
|
198
|
-
transport: http()
|
|
199
|
-
});
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
// src/shared/tempo-balance.ts
|
|
203
|
-
var ERC20_BALANCE_OF_ABI = [
|
|
204
|
-
{
|
|
205
|
-
inputs: [{ name: "account", type: "address" }],
|
|
206
|
-
name: "balanceOf",
|
|
207
|
-
outputs: [{ name: "", type: "uint256" }],
|
|
208
|
-
stateMutability: "view",
|
|
209
|
-
type: "function"
|
|
210
|
-
}
|
|
211
|
-
];
|
|
212
|
-
async function getTempoBalance({
|
|
213
|
-
address,
|
|
214
|
-
tokenAddress
|
|
215
|
-
}) {
|
|
216
|
-
const client = createTempoPublicClient();
|
|
217
|
-
const balance = await client.readContract({
|
|
218
|
-
address: tokenAddress,
|
|
219
|
-
abi: ERC20_BALANCE_OF_ABI,
|
|
220
|
-
functionName: "balanceOf",
|
|
221
|
-
args: [address]
|
|
222
|
-
});
|
|
223
|
-
return {
|
|
224
|
-
chainId: getTempoChainId(),
|
|
225
|
-
chainName: getTempoChainName(),
|
|
226
|
-
balance,
|
|
227
|
-
tokenAddress
|
|
228
|
-
};
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
// src/server/tools/lib/check-balance.ts
|
|
232
171
|
var checkBalance = async ({
|
|
233
172
|
server,
|
|
234
173
|
address,
|
|
@@ -750,6 +689,10 @@ var registerAuthTools = ({
|
|
|
750
689
|
// src/server/tools/wallet.ts
|
|
751
690
|
import { z as z2 } from "zod";
|
|
752
691
|
import { formatUnits as formatUnits3 } from "viem";
|
|
692
|
+
var chainBalanceSchema = z2.object({
|
|
693
|
+
chain: z2.string().describe("Chain name"),
|
|
694
|
+
balance: z2.number().describe("USDC balance on this chain")
|
|
695
|
+
});
|
|
753
696
|
var registerWalletTools = ({
|
|
754
697
|
server,
|
|
755
698
|
account: { address },
|
|
@@ -759,17 +702,14 @@ var registerWalletTools = ({
|
|
|
759
702
|
"get_wallet_info",
|
|
760
703
|
{
|
|
761
704
|
title: "Get Wallet Info",
|
|
762
|
-
description: `Get wallet address and USDC balance
|
|
705
|
+
description: `Get wallet address and USDC balance. Auto-creates wallet on first use (~/.agentcash/wallet.json). Returns deposit link. Check before first paid API call.`,
|
|
763
706
|
outputSchema: z2.object({
|
|
764
707
|
address: z2.string().describe("Wallet address (0x...)"),
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
isNewWallet: z2.boolean().describe("True if balance is 0"),
|
|
708
|
+
balance: z2.number().describe("Total USDC balance across all chains"),
|
|
709
|
+
chains: z2.array(chainBalanceSchema).describe("Balance breakdown by chain"),
|
|
710
|
+
isNewWallet: z2.boolean().describe("True if total balance is 0"),
|
|
769
711
|
depositLink: z2.string().url().describe("Link to fund the wallet"),
|
|
770
|
-
message: z2.string().optional().describe("Warning if balance is low")
|
|
771
|
-
tempoBalance: z2.number().optional().describe("TIP20 token balance on Tempo"),
|
|
772
|
-
tempoChain: z2.string().optional().describe("Tempo chain name")
|
|
712
|
+
message: z2.string().optional().describe("Warning if balance is low")
|
|
773
713
|
}),
|
|
774
714
|
annotations: {
|
|
775
715
|
readOnlyHint: true,
|
|
@@ -793,24 +733,20 @@ var registerWalletTools = ({
|
|
|
793
733
|
if (balanceResult.isErr()) {
|
|
794
734
|
return mcpError(balanceResult);
|
|
795
735
|
}
|
|
796
|
-
const
|
|
797
|
-
const
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
736
|
+
const baseBalance = balanceResult.value.balance;
|
|
737
|
+
const tempoBalance = tempoResult ?? 0;
|
|
738
|
+
const totalBalance = baseBalance + tempoBalance;
|
|
739
|
+
const chains = [
|
|
740
|
+
{ chain: "Base", balance: baseBalance },
|
|
741
|
+
{ chain: "Tempo", balance: tempoBalance }
|
|
742
|
+
];
|
|
803
743
|
return mcpSuccessStructuredJson({
|
|
804
744
|
address,
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
isNewWallet,
|
|
745
|
+
balance: totalBalance,
|
|
746
|
+
chains,
|
|
747
|
+
isNewWallet: totalBalance === 0,
|
|
809
748
|
depositLink: getDepositLink(address, flags),
|
|
810
|
-
...
|
|
811
|
-
message: `Your balance is low. Consider topping it up`
|
|
812
|
-
} : {},
|
|
813
|
-
...tempoInfo
|
|
749
|
+
...totalBalance < 2.5 && totalBalance > 0 ? { message: "Your balance is low. Consider topping it up" } : {}
|
|
814
750
|
});
|
|
815
751
|
}
|
|
816
752
|
);
|
|
@@ -1077,7 +1013,17 @@ var registerTelemetryTools = ({
|
|
|
1077
1013
|
import { z as z5 } from "zod";
|
|
1078
1014
|
|
|
1079
1015
|
// src/shared/origins.ts
|
|
1080
|
-
var ORIGINS = [
|
|
1016
|
+
var ORIGINS = [
|
|
1017
|
+
"https://enrichx402.com" /* EnrichX402 */,
|
|
1018
|
+
"https://stablestudio.io" /* StableStudio */,
|
|
1019
|
+
"https://socialx402.com" /* SocialX402 */,
|
|
1020
|
+
"https://agentupload.dev" /* AgentUpload */,
|
|
1021
|
+
"https://x402email.com" /* X402Email */,
|
|
1022
|
+
"https://x402scan.com" /* X402Scan */,
|
|
1023
|
+
"https://shirt.sh" /* Shirt */,
|
|
1024
|
+
"https://x402puppet.com" /* X402Puppet */,
|
|
1025
|
+
"https://x402facilitator.com" /* X402Facilitator */
|
|
1026
|
+
];
|
|
1081
1027
|
|
|
1082
1028
|
// src/server/tools/lib/discovery/openapi.strategy.ts
|
|
1083
1029
|
async function fetchLlmsTxt(origin, toolName6) {
|
|
@@ -1129,8 +1075,12 @@ function registerDiscoveryTools(server) {
|
|
|
1129
1075
|
Firecrawl web scrape
|
|
1130
1076
|
WhitePages (business directory)
|
|
1131
1077
|
Email enrichment
|
|
1078
|
+
Influencer email/username enrichment
|
|
1132
1079
|
Hunter email verifier
|
|
1080
|
+
- ${"https://socialx402.com" /* SocialX402 */} -> social media data for twitter, instagram, tiktok, youtube, facebook, reddit.
|
|
1133
1081
|
- ${"https://stablestudio.io" /* StableStudio */} -> generate and edit images / videos
|
|
1082
|
+
- ${"https://agentupload.dev" /* AgentUpload */} -> upload and share files with others.
|
|
1083
|
+
- ${"https://x402email.com" /* X402Email */} -> send emails.
|
|
1134
1084
|
`,
|
|
1135
1085
|
inputSchema: z5.object({
|
|
1136
1086
|
url: z5.url().describe(
|
|
@@ -1648,7 +1598,7 @@ import { dirname, join } from "path";
|
|
|
1648
1598
|
import { fileURLToPath } from "url";
|
|
1649
1599
|
function getVersion() {
|
|
1650
1600
|
if (true) {
|
|
1651
|
-
return "0.3.
|
|
1601
|
+
return "0.3.3";
|
|
1652
1602
|
}
|
|
1653
1603
|
const __dirname2 = dirname(fileURLToPath(import.meta.url));
|
|
1654
1604
|
const pkg = JSON.parse(
|
|
@@ -1769,4 +1719,4 @@ var startServer = async (flags) => {
|
|
|
1769
1719
|
export {
|
|
1770
1720
|
startServer
|
|
1771
1721
|
};
|
|
1772
|
-
//# sourceMappingURL=server-
|
|
1722
|
+
//# sourceMappingURL=server-3ZQQXMUD.js.map
|