agentcash 0.3.0 → 0.3.2
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 +480 -3191
- package/dist/esm/{chunk-4YIIYCPO.js → chunk-BTIVASGJ.js} +5 -10
- package/dist/esm/{chunk-4YIIYCPO.js.map → chunk-BTIVASGJ.js.map} +1 -1
- package/dist/esm/chunk-E3MKYUQQ.js +575 -0
- package/dist/esm/chunk-E3MKYUQQ.js.map +1 -0
- package/dist/esm/{chunk-J3LUL7DB.js → chunk-ISR6DJ53.js} +1 -6
- package/dist/esm/{chunk-J3LUL7DB.js.map → chunk-ISR6DJ53.js.map} +1 -1
- package/dist/esm/{chunk-3MUBKDR7.js → chunk-KPEJO3KV.js} +1 -6
- package/dist/esm/{chunk-3MUBKDR7.js.map → chunk-KPEJO3KV.js.map} +1 -1
- package/dist/esm/{chunk-2OAFWAAC.js → chunk-VX2WPSZV.js} +29 -97
- package/dist/esm/chunk-VX2WPSZV.js.map +1 -0
- package/dist/esm/chunk-VZL5QWWM.js +363 -0
- package/dist/esm/chunk-VZL5QWWM.js.map +1 -0
- package/dist/esm/{chunk-FYIUFEVS.js → chunk-XXKBL2AC.js} +1 -6
- package/dist/esm/{chunk-FYIUFEVS.js.map → chunk-XXKBL2AC.js.map} +1 -1
- package/dist/esm/chunk-ZVDFFTHM.js +22 -0
- package/dist/esm/chunk-ZVDFFTHM.js.map +1 -0
- package/dist/esm/cli-context-JTXXAIO4.js +9 -0
- package/dist/esm/{commands-WQ5AY36Z.js → commands-IANPQPZS.js} +14 -35
- package/dist/esm/commands-IANPQPZS.js.map +1 -0
- package/dist/esm/{fund-JSFGMI3R.js → fund-H6QAHY62.js} +5 -9
- package/dist/esm/{fund-JSFGMI3R.js.map → fund-H6QAHY62.js.map} +1 -1
- package/dist/esm/index.js +11 -15
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/{install-B4HDFMEM.js → install-KLEATNEC.js} +9 -25
- package/dist/esm/install-KLEATNEC.js.map +1 -0
- package/dist/esm/{server-SKKWDRW7.js → server-XNUVCZTJ.js} +35 -142
- package/dist/esm/server-XNUVCZTJ.js.map +1 -0
- package/dist/esm/shared/operations/index.d.ts +7 -7
- package/dist/esm/shared/operations/index.js +4 -5
- package/package.json +5 -3
- package/dist/esm/chunk-2OAFWAAC.js.map +0 -1
- package/dist/esm/chunk-A2KI7TKE.js +0 -59
- package/dist/esm/chunk-A2KI7TKE.js.map +0 -1
- package/dist/esm/chunk-JVUT4TKE.js +0 -197
- package/dist/esm/chunk-JVUT4TKE.js.map +0 -1
- package/dist/esm/chunk-VTLIFNZN.js +0 -46015
- package/dist/esm/chunk-VTLIFNZN.js.map +0 -1
- package/dist/esm/chunk-YOLNSINZ.js +0 -57
- package/dist/esm/chunk-YOLNSINZ.js.map +0 -1
- package/dist/esm/cli-context-2MKOXVXU.js +0 -10
- package/dist/esm/commands-WQ5AY36Z.js.map +0 -1
- package/dist/esm/install-B4HDFMEM.js.map +0 -1
- package/dist/esm/server-SKKWDRW7.js.map +0 -1
- /package/dist/esm/{cli-context-2MKOXVXU.js.map → cli-context-JTXXAIO4.js.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/cli/commands/fetch.ts","../../src/cli/output/types.ts","../../src/cli/output/format.ts","../../src/cli/output/response.ts","../../src/cli/commands/lib/get-wallet-or-exit.ts","../../src/cli/commands/lib/parse-request-input.ts","../../src/cli/commands/check.ts","../../src/cli/commands/discover.ts","../../src/cli/commands/wallet.ts","../../src/cli/commands/report-error.ts","../../src/cli/commands/server.ts"],"sourcesContent":["import { randomBytes } from 'crypto';\n\nimport { x402Client, x402HTTPClient } from '@x402/core/client';\nimport { ExactEvmScheme } from '@x402/evm/exact/client';\n\nimport {\n successResponse,\n errorResponse,\n fromNeverthrowError,\n outputAndExit,\n type OutputFlags,\n} from '@/cli/output';\n\nimport { buildRequest } from '@/server/tools/lib/request';\nimport { DEFAULT_NETWORK } from '@/shared/networks';\nimport { tokenStringToNumber } from '@/shared/token';\nimport { safeParseResponse } from '@/shared/neverthrow/fetch';\nimport { safeGetPaymentSettlement } from '@/shared/neverthrow/x402';\nimport { createFetchWithPayment } from '@/shared/operations';\nimport { getWalletOrExit, parseRequestInput } from './lib';\n\nimport type { GlobalFlags } from '@/types';\nimport type { JsonObject } from '@/shared/neverthrow/json/types';\n\nconst SURFACE = 'cli:fetch';\n\ninterface FetchArgs {\n url: string;\n method?: string;\n body?: string;\n headers?: string;\n}\n\nexport async function fetchCommand(\n args: FetchArgs,\n flags: GlobalFlags<OutputFlags>\n): Promise<void> {\n const { account } = await getWalletOrExit(flags);\n const sessionId = randomBytes(16).toString('hex');\n\n const input = parseRequestInput(SURFACE, args, flags);\n\n // Set up x402 client\n const coreClient = x402Client.fromConfig({\n schemes: [\n { network: DEFAULT_NETWORK, client: new ExactEvmScheme(account) },\n ],\n });\n\n const client = new x402HTTPClient(coreClient);\n\n const provider = flags.provider ?? account.address;\n\n const request = buildRequest({\n input,\n address: account.address,\n sessionId,\n provider,\n });\n\n const fetchWithPay = createFetchWithPayment(SURFACE, client);\n const fetchResult = await fetchWithPay(request);\n\n if (fetchResult.isErr()) {\n return outputAndExit(fromNeverthrowError(fetchResult), flags);\n }\n\n const { response, paymentPayload } = fetchResult.value;\n\n if (!response.ok) {\n const parseResult = await safeParseResponse(SURFACE, response);\n const details: JsonObject = { statusCode: response.status };\n if (parseResult.isOk()) {\n const { type } = parseResult.value;\n if (type === 'json') {\n details.body = parseResult.value.data;\n } else if (type === 'text') {\n details.body = parseResult.value.data;\n } else {\n details.bodyType = type;\n }\n }\n return outputAndExit(\n errorResponse({\n code: 'HTTP_ERROR',\n message: `HTTP ${response.status}: ${response.statusText}`,\n surface: SURFACE,\n cause: 'http',\n details,\n }),\n flags\n );\n }\n\n const parseResponseResult = await safeParseResponse(SURFACE, response);\n if (parseResponseResult.isErr()) {\n return outputAndExit(fromNeverthrowError(parseResponseResult), flags);\n }\n\n const settlementResult = safeGetPaymentSettlement(SURFACE, client, response);\n\n // Build response data\n const data =\n parseResponseResult.value.type === 'json'\n ? parseResponseResult.value.data\n : parseResponseResult.value.type === 'text'\n ? parseResponseResult.value.data\n : { type: parseResponseResult.value.type };\n\n // Build metadata\n const metadata =\n settlementResult.isOk() || paymentPayload !== undefined\n ? {\n ...(paymentPayload !== undefined\n ? {\n price: tokenStringToNumber(\n paymentPayload.accepted.amount\n ).toLocaleString('en-US', {\n style: 'currency',\n currency: 'USD',\n }),\n }\n : {}),\n ...(settlementResult.isOk()\n ? {\n payment: {\n success: settlementResult.value.success,\n transactionHash: settlementResult.value.transaction,\n },\n }\n : {}),\n }\n : undefined;\n\n outputAndExit(successResponse(data, metadata), flags);\n}\n","import type { JsonObject } from '@/shared/neverthrow/json/types';\n\n/**\n * Exit codes for CLI commands\n * Allows agents to programmatically determine error types\n */\nexport enum ExitCode {\n Success = 0,\n GeneralError = 1,\n InsufficientBalance = 2,\n NetworkError = 3,\n PaymentFailed = 4,\n InvalidInput = 5,\n}\n\n/**\n * Error codes for structured error responses\n */\nexport type ErrorCode =\n | 'GENERAL_ERROR'\n | 'INSUFFICIENT_BALANCE'\n | 'NETWORK_ERROR'\n | 'PAYMENT_FAILED'\n | 'INVALID_INPUT'\n | 'WALLET_ERROR'\n | 'PARSE_ERROR'\n | 'HTTP_ERROR'\n | 'X402_ERROR';\n\n/**\n * Maps error codes to exit codes\n */\nexport const errorCodeToExitCode: Record<ErrorCode, ExitCode> = {\n GENERAL_ERROR: ExitCode.GeneralError,\n INSUFFICIENT_BALANCE: ExitCode.InsufficientBalance,\n NETWORK_ERROR: ExitCode.NetworkError,\n PAYMENT_FAILED: ExitCode.PaymentFailed,\n INVALID_INPUT: ExitCode.InvalidInput,\n WALLET_ERROR: ExitCode.GeneralError,\n PARSE_ERROR: ExitCode.InvalidInput,\n HTTP_ERROR: ExitCode.NetworkError,\n X402_ERROR: ExitCode.PaymentFailed,\n};\n\n/**\n * Payment metadata included in successful paid responses\n */\nexport interface PaymentMetadata {\n success: boolean;\n transactionHash?: string;\n}\n\n/**\n * Metadata included in CLI responses\n */\nexport interface ResponseMetadata {\n price?: string;\n payment?: PaymentMetadata;\n}\n\n/**\n * Successful CLI response\n */\nexport interface CliSuccessResponse {\n success: true;\n data: JsonObject | string;\n metadata?: ResponseMetadata;\n}\n\n/**\n * Error details in CLI response\n */\nexport interface CliErrorDetails {\n code: ErrorCode;\n message: string;\n surface?: string;\n cause?: string;\n details?: JsonObject;\n}\n\n/**\n * Failed CLI response\n */\nexport interface CliErrorResponse {\n success: false;\n error: CliErrorDetails;\n}\n\n/**\n * Union type for all CLI responses\n */\nexport type CliResponse = CliSuccessResponse | CliErrorResponse;\n\n/**\n * Output format options\n */\nexport type OutputFormat = 'json' | 'pretty';\n","import type { OutputFormat } from './types';\n\n/**\n * Detect if stdout is a TTY (interactive terminal)\n */\nfunction isTTY(): boolean {\n return process.stdout.isTTY ?? false;\n}\n\n/**\n * Determine output format based on flags and environment\n * - Explicit --format flag takes precedence\n * - Non-TTY (piped) defaults to json\n * - TTY (interactive) defaults to pretty\n */\nexport function getOutputFormat(formatFlag?: string): OutputFormat {\n if (formatFlag === 'json' || formatFlag === 'pretty') {\n return formatFlag;\n }\n return isTTY() ? 'pretty' : 'json';\n}\n\n/**\n * Check if quiet mode is enabled (suppress stderr)\n */\nexport function isQuiet(quietFlag?: boolean): boolean {\n return quietFlag ?? false;\n}\n","import chalk from 'chalk';\n\nimport { getOutputFormat, isQuiet } from './format';\nimport {\n ExitCode,\n errorCodeToExitCode,\n type CliErrorDetails,\n type CliErrorResponse,\n type CliResponse,\n type CliSuccessResponse,\n type ErrorCode,\n type OutputFormat,\n type ResponseMetadata,\n} from './types';\n\nimport type { JsonObject } from '@/shared/neverthrow/json/types';\nimport type { BaseError, Err } from '@x402scan/neverthrow/types';\n\n/**\n * Output flags that can be passed to commands\n */\nexport interface OutputFlags {\n format?: string;\n quiet?: boolean;\n verbose?: boolean;\n}\n\n/**\n * Create a success response\n */\nexport function successResponse(\n data: JsonObject | string,\n metadata?: ResponseMetadata\n): CliSuccessResponse {\n return {\n success: true,\n data,\n ...(metadata ? { metadata } : {}),\n };\n}\n\n/**\n * Create an error response\n */\nexport function errorResponse(error: CliErrorDetails): CliErrorResponse {\n return {\n success: false,\n error,\n };\n}\n\n/**\n * Convert a neverthrow error to a CLI error response\n */\nexport function fromNeverthrowError(\n err: Err<unknown, BaseError<string>>,\n codeOverride?: ErrorCode\n): CliErrorResponse {\n const { error } = err;\n const code = codeOverride ?? mapCauseToErrorCode(error.cause);\n\n return errorResponse({\n code,\n message: error.message,\n surface: error.surface,\n cause: error.cause,\n });\n}\n\n/**\n * Map error cause to error code\n */\nfunction mapCauseToErrorCode(cause: string): ErrorCode {\n switch (cause) {\n case 'network':\n return 'NETWORK_ERROR';\n case 'http':\n return 'HTTP_ERROR';\n case 'parse':\n return 'PARSE_ERROR';\n case 'insufficient_balance':\n return 'INSUFFICIENT_BALANCE';\n case 'payment_failed':\n case 'payment_already_attempted':\n return 'PAYMENT_FAILED';\n case 'invalid_input':\n case 'validation':\n return 'INVALID_INPUT';\n case 'wallet':\n case 'file_not_readable':\n return 'WALLET_ERROR';\n default:\n return 'GENERAL_ERROR';\n }\n}\n\n/**\n * Format response as JSON string\n */\nfunction formatJson(response: CliResponse): string {\n return JSON.stringify(response, null, 2);\n}\n\n/**\n * Format response as pretty output for TTY\n */\nfunction formatPretty(response: CliResponse): string {\n if (response.success) {\n const lines: string[] = [];\n\n // Data\n if (typeof response.data === 'string') {\n lines.push(response.data);\n } else {\n lines.push(JSON.stringify(response.data, null, 2));\n }\n\n // Metadata\n if (response.metadata) {\n lines.push('');\n if (response.metadata.price) {\n lines.push(chalk.dim(`Price: ${response.metadata.price}`));\n }\n if (response.metadata.payment) {\n const { success, transactionHash } = response.metadata.payment;\n lines.push(\n chalk.dim(\n `Payment: ${success ? chalk.green('✓') : chalk.red('✗')}${transactionHash ? ` (${transactionHash.slice(0, 10)}...)` : ''}`\n )\n );\n }\n }\n\n return lines.join('\\n');\n } else {\n const { error } = response;\n const lines = [\n chalk.red(`Error: ${error.message}`),\n chalk.dim(`Code: ${error.code}`),\n ];\n\n if (error.surface) {\n lines.push(chalk.dim(`Surface: ${error.surface}`));\n }\n if (error.cause) {\n lines.push(chalk.dim(`Cause: ${error.cause}`));\n }\n\n return lines.join('\\n');\n }\n}\n\n/**\n * Output a response to stdout and exit with appropriate code\n */\nexport function outputAndExit(\n response: CliResponse,\n flags: OutputFlags = {}\n): never {\n const format = getOutputFormat(flags.format);\n const quiet = isQuiet(flags.quiet);\n\n output(response, format, quiet);\n\n const exitCode = response.success\n ? ExitCode.Success\n : errorCodeToExitCode[response.error.code];\n\n process.exit(exitCode);\n}\n\n/**\n * Output a response to stdout without exiting\n */\nfunction output(\n response: CliResponse,\n format: OutputFormat = 'json',\n quiet = false\n): void {\n const formatted =\n format === 'json' ? formatJson(response) : formatPretty(response);\n\n // Always output to stdout (machine-readable)\n console.log(formatted);\n\n // Optionally suppress stderr output\n if (!quiet && !response.success && format === 'pretty') {\n // Additional debug info could go to stderr\n }\n}\n","import {\n fromNeverthrowError,\n outputAndExit,\n type OutputFlags,\n} from '@/cli/output';\nimport { getWallet } from '@/shared/wallet';\n\nimport type { GlobalFlags } from '@/types';\nimport type { PrivateKeyAccount } from 'viem/accounts';\n\ninterface WalletInfo {\n account: PrivateKeyAccount;\n}\n\n/**\n * Get wallet or exit with error.\n * This function always returns a valid wallet - if getting the wallet fails,\n * it exits the process with an appropriate error.\n */\nexport async function getWalletOrExit(\n flags: GlobalFlags<OutputFlags>\n): Promise<WalletInfo> {\n const walletResult = await getWallet();\n\n if (walletResult.isErr()) {\n outputAndExit(fromNeverthrowError(walletResult, 'WALLET_ERROR'), flags);\n }\n\n return walletResult.value;\n}\n","import type { z } from 'zod';\n\nimport { errorResponse, outputAndExit, type OutputFlags } from '@/cli/output';\nimport { requestSchema } from '@/server/tools/lib/request';\nimport { safeParseJson } from '@/shared/neverthrow/json';\n\nimport type { GlobalFlags } from '@/types';\n\ninterface RawRequestArgs {\n url: string;\n method?: string;\n body?: string;\n headers?: string;\n}\n\ntype RequestInput = z.infer<typeof requestSchema>;\n\n/**\n * Parse and validate CLI request arguments into a typed RequestInput.\n * Exits with error response if parsing fails.\n */\nexport function parseRequestInput(\n surface: string,\n args: RawRequestArgs,\n flags: GlobalFlags<OutputFlags>\n): RequestInput {\n // Parse body JSON if provided\n let parsedBody: unknown;\n if (args.body) {\n const bodyResult = safeParseJson(surface, args.body);\n if (bodyResult.isErr()) {\n outputAndExit(\n errorResponse({\n code: 'INVALID_INPUT',\n message: `Invalid JSON body: ${args.body}`,\n surface,\n cause: 'invalid_json',\n }),\n flags\n );\n }\n parsedBody = bodyResult.value;\n }\n\n // Parse headers JSON if provided\n let parsedHeaders: Record<string, string> | undefined;\n if (args.headers) {\n const headersResult = safeParseJson(surface, args.headers);\n if (headersResult.isErr()) {\n outputAndExit(\n errorResponse({\n code: 'INVALID_INPUT',\n message: `Invalid JSON headers: ${args.headers}`,\n surface,\n cause: 'invalid_json',\n }),\n flags\n );\n }\n\n // Validate headers is an object with string values\n const headersValue = headersResult.value;\n if (\n typeof headersValue !== 'object' ||\n headersValue === null ||\n Array.isArray(headersValue)\n ) {\n outputAndExit(\n errorResponse({\n code: 'INVALID_INPUT',\n message: 'Headers must be an object',\n surface,\n cause: 'invalid_headers',\n }),\n flags\n );\n }\n\n // Validate all values are strings\n const headers: Record<string, string> = {};\n for (const [key, value] of Object.entries(headersValue)) {\n if (typeof value !== 'string') {\n outputAndExit(\n errorResponse({\n code: 'INVALID_INPUT',\n message: `Header \"${key}\" must be a string, got ${typeof value}`,\n surface,\n cause: 'invalid_headers',\n }),\n flags\n );\n }\n headers[key] = value;\n }\n parsedHeaders = headers;\n }\n\n // Validate full request input\n const inputResult = requestSchema.safeParse({\n url: args.url,\n method: args.method ?? 'GET',\n body: parsedBody,\n headers: parsedHeaders ?? {},\n });\n\n if (!inputResult.success) {\n outputAndExit(\n errorResponse({\n code: 'INVALID_INPUT',\n message: inputResult.error.message,\n surface,\n cause: 'validation',\n }),\n flags\n );\n }\n\n return inputResult.data;\n}\n","import { randomBytes } from 'crypto';\n\nimport {\n successResponse,\n errorResponse,\n fromNeverthrowError,\n outputAndExit,\n type OutputFlags,\n} from '@/cli/output';\n\nimport { buildRequest } from '@/server/tools/lib/request';\nimport { checkEndpoint } from '@/shared/operations';\nimport { safeParseResponse } from '@/shared/neverthrow/fetch';\nimport { getWalletOrExit, parseRequestInput } from './lib';\n\nimport type { GlobalFlags } from '@/types';\nimport type { JsonObject } from '@/shared/neverthrow/json/types';\n\nconst SURFACE = 'cli:check';\n\ninterface CheckArgs {\n url: string;\n method?: string;\n body?: string;\n headers?: string;\n}\n\nexport async function checkCommand(\n args: CheckArgs,\n flags: GlobalFlags<OutputFlags>\n): Promise<void> {\n const { account } = await getWalletOrExit(flags);\n const sessionId = randomBytes(16).toString('hex');\n\n const input = parseRequestInput(SURFACE, args, flags);\n\n const request = buildRequest({\n input,\n address: account.address,\n sessionId,\n });\n\n const result = await checkEndpoint(SURFACE, request);\n\n if (result.isErr()) {\n return outputAndExit(fromNeverthrowError(result), flags);\n }\n\n const value = result.value;\n\n // Handle Response (non-ok HTTP response)\n if (value instanceof Response) {\n const response = value;\n const parseResult = await safeParseResponse(SURFACE, response);\n const details: JsonObject = { statusCode: response.status };\n if (parseResult.isOk()) {\n const { type } = parseResult.value;\n if (type === 'json') {\n details.body = parseResult.value.data;\n } else if (type === 'text') {\n details.body = parseResult.value.data;\n } else {\n details.bodyType = type;\n }\n }\n return outputAndExit(\n errorResponse({\n code: 'HTTP_ERROR',\n message: `HTTP ${response.status}: ${response.statusText}`,\n surface: SURFACE,\n cause: 'http',\n details,\n }),\n flags\n );\n }\n\n // Handle CheckEndpointPaidResult\n if ('requiresPayment' in value && value.requiresPayment) {\n return outputAndExit(\n successResponse({\n requiresPayment: true,\n statusCode: value.statusCode,\n routeDetails: value.routeDetails,\n }),\n flags\n );\n }\n\n // Handle CheckEndpointFreeResult\n if ('parsedResponse' in value) {\n const { parsedResponse } = value;\n const data =\n parsedResponse.type === 'json'\n ? parsedResponse.data\n : parsedResponse.type === 'text'\n ? parsedResponse.data\n : { type: parsedResponse.type };\n\n return outputAndExit(\n successResponse({\n requiresPayment: false,\n statusCode: value.statusCode,\n data,\n }),\n flags\n );\n }\n\n // Fallback - shouldn't reach here\n return outputAndExit(\n errorResponse({\n code: 'GENERAL_ERROR',\n message: 'Unexpected response format',\n surface: SURFACE,\n cause: 'unknown',\n }),\n flags\n );\n}\n","import {\n successResponse,\n errorResponse,\n outputAndExit,\n type OutputFlags,\n} from '@/cli/output';\n\nimport { discoverResources } from '@/shared/operations';\n\nimport type { GlobalFlags } from '@/types';\n\ninterface DiscoverArgs {\n url: string;\n}\n\nexport async function discoverCommand(\n args: DiscoverArgs,\n flags: GlobalFlags<OutputFlags>\n): Promise<void> {\n const result = await discoverResources('cli:discover', args.url);\n\n if (result.isOk()) {\n return outputAndExit(\n successResponse({\n found: true,\n origin: result.value.origin,\n source: result.value.source,\n endpoints: result.value.endpoints.map(e => ({ ...e })),\n ...(result.value.instructions\n ? { instructions: result.value.instructions }\n : {}),\n }),\n flags\n );\n }\n\n // Error case\n return outputAndExit(\n errorResponse({\n code: 'GENERAL_ERROR',\n message: result.error.message,\n surface: result.error.surface,\n cause: result.error.cause,\n details: { origin: result.error.origin },\n }),\n flags\n );\n}\n","import {\n successResponse,\n fromNeverthrowError,\n outputAndExit,\n type OutputFlags,\n} from '@/cli/output';\n\nimport { getWalletInfo } from '@/shared/operations';\nimport { redeemInviteCode } from '@/shared/redeem-invite';\nimport { getWalletOrExit } from './lib';\n\nimport type { GlobalFlags } from '@/types';\n\nconst SURFACE = 'cli:wallet';\n\nexport async function walletInfoCommand(\n _args: object,\n flags: GlobalFlags<OutputFlags>\n): Promise<void> {\n const { account } = await getWalletOrExit(flags);\n\n const result = await getWalletInfo(SURFACE, account.address, flags);\n\n if (result.isErr()) {\n return outputAndExit(fromNeverthrowError(result), flags);\n }\n\n return outputAndExit(\n successResponse({\n address: result.value.address,\n balance: result.value.balance,\n chains: result.value.chains.map(c => ({\n chain: c.chain,\n balance: c.balance,\n })),\n isNewWallet: result.value.isNewWallet,\n depositLink: result.value.depositLink,\n ...(result.value.message ? { message: result.value.message } : {}),\n }),\n flags\n );\n}\n\ninterface WalletRedeemArgs {\n code: string;\n}\n\nexport async function walletRedeemCommand(\n args: WalletRedeemArgs,\n flags: GlobalFlags<OutputFlags>\n): Promise<void> {\n const { account } = await getWalletOrExit(flags);\n\n const result = await redeemInviteCode({\n code: args.code,\n dev: flags.dev,\n address: account.address,\n surface: SURFACE,\n });\n\n if (result.isErr()) {\n return outputAndExit(fromNeverthrowError(result), flags);\n }\n\n return outputAndExit(\n successResponse({\n redeemed: true,\n amount: `${result.value.amount} USDC`,\n txHash: result.value.txHash,\n }),\n flags\n );\n}\n","import {\n successResponse,\n fromNeverthrowError,\n outputAndExit,\n type OutputFlags,\n} from '@/cli/output';\n\nimport { submitErrorReport } from '@/shared/operations';\nimport { getWalletOrExit } from './lib';\n\nimport type { GlobalFlags } from '@/types';\n\nconst SURFACE = 'cli:report-error';\n\ninterface ReportErrorArgs {\n tool: string;\n summary: string;\n errorMessage: string;\n resource?: string;\n stack?: string;\n fullReport?: string;\n}\n\nexport async function reportErrorCommand(\n args: ReportErrorArgs,\n flags: GlobalFlags<OutputFlags>\n): Promise<void> {\n const { account } = await getWalletOrExit(flags);\n\n const result = await submitErrorReport(\n SURFACE,\n {\n tool: args.tool,\n summary: args.summary,\n errorMessage: args.errorMessage,\n resource: args.resource,\n stack: args.stack,\n fullReport: args.fullReport,\n },\n account.address,\n flags.dev\n );\n\n if (result.isErr()) {\n return outputAndExit(fromNeverthrowError(result), flags);\n }\n\n return outputAndExit(\n successResponse({\n submitted: result.value.submitted,\n reportId: result.value.reportId,\n message: result.value.message,\n }),\n flags\n );\n}\n","import type { GlobalFlags } from '@/types';\n\n/**\n * Start the MCP server\n * This is a wrapper that imports and calls the existing server implementation\n */\nexport async function serverCommand(flags: GlobalFlags): Promise<void> {\n const { startServer } = await import('@/server');\n await startServer(flags);\n}\n"],"mappings":"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","names":["randomBytes","SURFACE","randomBytes","SURFACE","SURFACE"]}
|
|
@@ -1,19 +1,15 @@
|
|
|
1
1
|
import {
|
|
2
2
|
promptDeposit
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-BTIVASGJ.js";
|
|
4
4
|
import {
|
|
5
5
|
getWallet
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-VZL5QWWM.js";
|
|
7
7
|
import {
|
|
8
8
|
log
|
|
9
|
-
} from "./chunk-
|
|
10
|
-
import "./chunk-
|
|
11
|
-
import {
|
|
12
|
-
init_esm_shims
|
|
13
|
-
} from "./chunk-A2KI7TKE.js";
|
|
9
|
+
} from "./chunk-VX2WPSZV.js";
|
|
10
|
+
import "./chunk-ISR6DJ53.js";
|
|
14
11
|
|
|
15
12
|
// src/cli/fund/index.ts
|
|
16
|
-
init_esm_shims();
|
|
17
13
|
import { intro, log as clackLog, outro } from "@clack/prompts";
|
|
18
14
|
import chalk from "chalk";
|
|
19
15
|
var fundMcpServer = async (flags) => {
|
|
@@ -34,4 +30,4 @@ var fundMcpServer = async (flags) => {
|
|
|
34
30
|
export {
|
|
35
31
|
fundMcpServer
|
|
36
32
|
};
|
|
37
|
-
//# sourceMappingURL=fund-
|
|
33
|
+
//# sourceMappingURL=fund-H6QAHY62.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/cli/fund/index.ts"],"sourcesContent":["import type { Command } from '@/types';\nimport { intro, log as clackLog, outro } from '@clack/prompts';\nimport chalk from 'chalk';\nimport { getWallet } from '@/shared/wallet';\nimport { promptDeposit } from '@/cli/lib/deposit';\nimport { log } from '@/shared/log';\n\nexport const fundMcpServer: Command = async flags => {\n intro(chalk.bold(`Fund ${chalk.hex('#2563eb')('agentcash MCP')}`));\n\n const walletResult = await getWallet();\n\n if (walletResult.isErr()) {\n log.error(walletResult.error.message);\n clackLog.error(walletResult.error.message);\n outro(chalk.bold.red('Failed to get wallet'));\n process.exit(1);\n }\n\n const {\n account: { address },\n } = walletResult.value;\n\n await promptDeposit({ address, flags, surface: 'fund' });\n\n outro(chalk.bold.green('Your agentcash MCP server is funded!'));\n};\n"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../src/cli/fund/index.ts"],"sourcesContent":["import type { Command } from '@/types';\nimport { intro, log as clackLog, outro } from '@clack/prompts';\nimport chalk from 'chalk';\nimport { getWallet } from '@/shared/wallet';\nimport { promptDeposit } from '@/cli/lib/deposit';\nimport { log } from '@/shared/log';\n\nexport const fundMcpServer: Command = async flags => {\n intro(chalk.bold(`Fund ${chalk.hex('#2563eb')('agentcash MCP')}`));\n\n const walletResult = await getWallet();\n\n if (walletResult.isErr()) {\n log.error(walletResult.error.message);\n clackLog.error(walletResult.error.message);\n outro(chalk.bold.red('Failed to get wallet'));\n process.exit(1);\n }\n\n const {\n account: { address },\n } = walletResult.value;\n\n await promptDeposit({ address, flags, surface: 'fund' });\n\n outro(chalk.bold.green('Your agentcash MCP server is funded!'));\n};\n"],"mappings":";;;;;;;;;;;;AACA,SAAS,OAAO,OAAO,UAAU,aAAa;AAC9C,OAAO,WAAW;AAKX,IAAM,gBAAyB,OAAM,UAAS;AACnD,QAAM,MAAM,KAAK,QAAQ,MAAM,IAAI,SAAS,EAAE,eAAe,CAAC,EAAE,CAAC;AAEjE,QAAM,eAAe,MAAM,UAAU;AAErC,MAAI,aAAa,MAAM,GAAG;AACxB,QAAI,MAAM,aAAa,MAAM,OAAO;AACpC,aAAS,MAAM,aAAa,MAAM,OAAO;AACzC,UAAM,MAAM,KAAK,IAAI,sBAAsB,CAAC;AAC5C,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,QAAM;AAAA,IACJ,SAAS,EAAE,QAAQ;AAAA,EACrB,IAAI,aAAa;AAEjB,QAAM,cAAc,EAAE,SAAS,OAAO,SAAS,OAAO,CAAC;AAEvD,QAAM,MAAM,KAAK,MAAM,sCAAsC,CAAC;AAChE;","names":[]}
|
package/dist/esm/index.js
CHANGED
|
@@ -1,11 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import "./chunk-
|
|
3
|
-
import {
|
|
4
|
-
init_esm_shims
|
|
5
|
-
} from "./chunk-A2KI7TKE.js";
|
|
2
|
+
import "./chunk-KPEJO3KV.js";
|
|
6
3
|
|
|
7
4
|
// src/index.ts
|
|
8
|
-
init_esm_shims();
|
|
9
5
|
import yargs from "yargs";
|
|
10
6
|
import { hideBin } from "yargs/helpers";
|
|
11
7
|
var isClaudeCode = Boolean(process.env.CLAUDECODE);
|
|
@@ -47,7 +43,7 @@ void yargs(hideBin(process.argv)).scriptName("agentcash").usage("$0 [command] [o
|
|
|
47
43
|
default: false
|
|
48
44
|
}).middleware(async (argv) => {
|
|
49
45
|
if (argv.verbose) {
|
|
50
|
-
const { configureCliContext } = await import("./cli-context-
|
|
46
|
+
const { configureCliContext } = await import("./cli-context-JTXXAIO4.js");
|
|
51
47
|
configureCliContext({ verbose: true });
|
|
52
48
|
}
|
|
53
49
|
}).command(
|
|
@@ -73,7 +69,7 @@ void yargs(hideBin(process.argv)).scriptName("agentcash").usage("$0 [command] [o
|
|
|
73
69
|
description: "Additional headers as JSON object"
|
|
74
70
|
}),
|
|
75
71
|
async (args) => {
|
|
76
|
-
const { fetchCommand } = await import("./commands-
|
|
72
|
+
const { fetchCommand } = await import("./commands-IANPQPZS.js");
|
|
77
73
|
await fetchCommand(
|
|
78
74
|
{
|
|
79
75
|
url: args.url,
|
|
@@ -107,7 +103,7 @@ void yargs(hideBin(process.argv)).scriptName("agentcash").usage("$0 [command] [o
|
|
|
107
103
|
description: "Additional headers as JSON object"
|
|
108
104
|
}),
|
|
109
105
|
async (args) => {
|
|
110
|
-
const { checkCommand } = await import("./commands-
|
|
106
|
+
const { checkCommand } = await import("./commands-IANPQPZS.js");
|
|
111
107
|
await checkCommand(
|
|
112
108
|
{
|
|
113
109
|
url: args.url,
|
|
@@ -127,7 +123,7 @@ void yargs(hideBin(process.argv)).scriptName("agentcash").usage("$0 [command] [o
|
|
|
127
123
|
demandOption: true
|
|
128
124
|
}),
|
|
129
125
|
async (args) => {
|
|
130
|
-
const { discoverCommand } = await import("./commands-
|
|
126
|
+
const { discoverCommand } = await import("./commands-IANPQPZS.js");
|
|
131
127
|
await discoverCommand({ url: args.url }, args);
|
|
132
128
|
}
|
|
133
129
|
).command(
|
|
@@ -138,7 +134,7 @@ void yargs(hideBin(process.argv)).scriptName("agentcash").usage("$0 [command] [o
|
|
|
138
134
|
"Get wallet address, balance, and deposit link",
|
|
139
135
|
(yargs3) => yargs3,
|
|
140
136
|
async (args) => {
|
|
141
|
-
const { walletInfoCommand } = await import("./commands-
|
|
137
|
+
const { walletInfoCommand } = await import("./commands-IANPQPZS.js");
|
|
142
138
|
await walletInfoCommand({}, args);
|
|
143
139
|
}
|
|
144
140
|
).command(
|
|
@@ -150,7 +146,7 @@ void yargs(hideBin(process.argv)).scriptName("agentcash").usage("$0 [command] [o
|
|
|
150
146
|
demandOption: true
|
|
151
147
|
}),
|
|
152
148
|
async (args) => {
|
|
153
|
-
const { walletRedeemCommand } = await import("./commands-
|
|
149
|
+
const { walletRedeemCommand } = await import("./commands-IANPQPZS.js");
|
|
154
150
|
await walletRedeemCommand({ code: args.code }, args);
|
|
155
151
|
}
|
|
156
152
|
).demandCommand(1, "You must specify a wallet subcommand").strict(),
|
|
@@ -182,7 +178,7 @@ void yargs(hideBin(process.argv)).scriptName("agentcash").usage("$0 [command] [o
|
|
|
182
178
|
description: "Detailed report with context and repro steps"
|
|
183
179
|
}),
|
|
184
180
|
async (args) => {
|
|
185
|
-
const { reportErrorCommand } = await import("./commands-
|
|
181
|
+
const { reportErrorCommand } = await import("./commands-IANPQPZS.js");
|
|
186
182
|
await reportErrorCommand(
|
|
187
183
|
{
|
|
188
184
|
tool: args.tool,
|
|
@@ -200,7 +196,7 @@ void yargs(hideBin(process.argv)).scriptName("agentcash").usage("$0 [command] [o
|
|
|
200
196
|
"Start the MCP server (default when no command specified)",
|
|
201
197
|
(yargs2) => yargs2,
|
|
202
198
|
async (args) => {
|
|
203
|
-
const { serverCommand } = await import("./commands-
|
|
199
|
+
const { serverCommand } = await import("./commands-IANPQPZS.js");
|
|
204
200
|
await serverCommand(args);
|
|
205
201
|
}
|
|
206
202
|
).command(
|
|
@@ -213,7 +209,7 @@ void yargs(hideBin(process.argv)).scriptName("agentcash").usage("$0 [command] [o
|
|
|
213
209
|
default: isClaudeCode ? "claude-code" /* ClaudeCode */ : void 0
|
|
214
210
|
}),
|
|
215
211
|
async (args) => {
|
|
216
|
-
const { installMcpServer } = await import("./install-
|
|
212
|
+
const { installMcpServer } = await import("./install-KLEATNEC.js");
|
|
217
213
|
await installMcpServer(args);
|
|
218
214
|
}
|
|
219
215
|
).command(
|
|
@@ -221,7 +217,7 @@ void yargs(hideBin(process.argv)).scriptName("agentcash").usage("$0 [command] [o
|
|
|
221
217
|
"Open the funding page to add USDC to your wallet",
|
|
222
218
|
(yargs2) => yargs2,
|
|
223
219
|
async (args) => {
|
|
224
|
-
const { fundMcpServer } = await import("./fund-
|
|
220
|
+
const { fundMcpServer } = await import("./fund-H6QAHY62.js");
|
|
225
221
|
await fundMcpServer(args);
|
|
226
222
|
}
|
|
227
223
|
).example(
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/index.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport yargs from 'yargs';\nimport { hideBin } from 'yargs/helpers';\nimport { Clients } from './cli/install/clients';\n\nconst isClaudeCode = Boolean(process.env.CLAUDECODE);\nconst defaultYes = isClaudeCode || Boolean(process.env.CI);\n\nvoid yargs(hideBin(process.argv))\n .scriptName('agentcash')\n .usage('$0 [command] [options]')\n .option('dev', {\n type: 'boolean',\n description: 'Enable dev mode (use localhost endpoints)',\n default: false,\n })\n .option('invite', {\n type: 'string',\n description: 'Invite code to redeem for starter money',\n required: false,\n })\n .option('yes', {\n alias: 'y',\n type: 'boolean',\n description: 'Yes to all prompts',\n default: defaultYes ? true : undefined,\n })\n .option('sessionId', {\n type: 'string',\n description:\n 'Session ID for matching requests (auto-generated if not provided)',\n required: false,\n })\n .option('provider', {\n type: 'string',\n description: 'Provider to use for the MCP server',\n required: false,\n })\n .option('format', {\n type: 'string',\n description:\n 'Output format: json (default for pipes) or pretty (default for TTY)',\n choices: ['json', 'pretty'],\n })\n .option('quiet', {\n alias: 'q',\n type: 'boolean',\n description: 'Suppress stderr output',\n default: false,\n })\n .option('verbose', {\n alias: 'v',\n type: 'boolean',\n description: 'Enable verbose logging (debug output to stderr)',\n default: false,\n })\n .middleware(async argv => {\n // Configure CLI context for shared modules (like logging)\n if (argv.verbose) {\n const { configureCliContext } = await import('@/shared/cli-context');\n configureCliContext({ verbose: true });\n }\n })\n // ============================================================\n // Core CLI Commands (for agent/programmatic use)\n // ============================================================\n .command(\n 'fetch <url>',\n 'HTTP fetch with automatic x402 payment handling',\n yargs =>\n yargs\n .positional('url', {\n type: 'string',\n description: 'The endpoint URL to fetch',\n demandOption: true,\n })\n .option('method', {\n alias: 'm',\n type: 'string',\n description: 'HTTP method',\n choices: ['GET', 'POST', 'PUT', 'DELETE', 'PATCH'],\n default: 'GET',\n })\n .option('body', {\n alias: 'b',\n type: 'string',\n description: 'Request body as JSON string',\n })\n .option('headers', {\n alias: 'H',\n type: 'string',\n description: 'Additional headers as JSON object',\n }),\n async args => {\n const { fetchCommand } = await import('@/cli/commands');\n await fetchCommand(\n {\n url: args.url,\n method: args.method,\n body: args.body,\n headers: args.headers,\n },\n args\n );\n }\n )\n .command(\n 'check <url>',\n 'Check endpoint for x402 pricing and schema without making payment',\n yargs =>\n yargs\n .positional('url', {\n type: 'string',\n description: 'The endpoint URL to check',\n demandOption: true,\n })\n .option('method', {\n alias: 'm',\n type: 'string',\n description: 'HTTP method',\n choices: ['GET', 'POST', 'PUT', 'DELETE', 'PATCH'],\n default: 'GET',\n })\n .option('body', {\n alias: 'b',\n type: 'string',\n description: 'Request body as JSON string',\n })\n .option('headers', {\n alias: 'H',\n type: 'string',\n description: 'Additional headers as JSON object',\n }),\n async args => {\n const { checkCommand } = await import('@/cli/commands');\n await checkCommand(\n {\n url: args.url,\n method: args.method,\n body: args.body,\n headers: args.headers,\n },\n args\n );\n }\n )\n .command(\n 'discover <url>',\n 'Discover x402-protected endpoints on an origin',\n yargs =>\n yargs.positional('url', {\n type: 'string',\n description: 'The origin URL to discover endpoints from',\n demandOption: true,\n }),\n async args => {\n const { discoverCommand } = await import('@/cli/commands');\n await discoverCommand({ url: args.url }, args);\n }\n )\n .command(\n 'wallet',\n 'Wallet management commands',\n yargs =>\n yargs\n .command(\n 'info',\n 'Get wallet address, balance, and deposit link',\n yargs => yargs,\n async args => {\n const { walletInfoCommand } = await import('@/cli/commands');\n await walletInfoCommand({}, args);\n }\n )\n .command(\n 'redeem <code>',\n 'Redeem an invite code for free USDC',\n yargs =>\n yargs.positional('code', {\n type: 'string',\n description: 'The invite code to redeem',\n demandOption: true,\n }),\n async args => {\n const { walletRedeemCommand } = await import('@/cli/commands');\n await walletRedeemCommand({ code: args.code }, args);\n }\n )\n .demandCommand(1, 'You must specify a wallet subcommand')\n .strict(),\n () => {\n // Show help for wallet command\n }\n )\n .command(\n 'report-error',\n 'Report a critical bug to the agentcash team (emergency only)',\n yargs =>\n yargs\n .option('tool', {\n type: 'string',\n description: 'The tool/command that failed',\n demandOption: true,\n })\n .option('summary', {\n type: 'string',\n description: '1-2 sentence summary of the issue',\n demandOption: true,\n })\n .option('error-message', {\n type: 'string',\n description: 'The error message',\n demandOption: true,\n })\n .option('resource', {\n type: 'string',\n description: 'The x402 resource URL (if applicable)',\n })\n .option('stack', {\n type: 'string',\n description: 'Stack trace (if available)',\n })\n .option('full-report', {\n type: 'string',\n description: 'Detailed report with context and repro steps',\n }),\n async args => {\n const { reportErrorCommand } = await import('@/cli/commands');\n await reportErrorCommand(\n {\n tool: args.tool,\n summary: args.summary,\n errorMessage: args.errorMessage,\n resource: args.resource,\n stack: args.stack,\n fullReport: args.fullReport,\n },\n args\n );\n }\n )\n // ============================================================\n // Server & Installation Commands\n // ============================================================\n .command(\n ['$0', 'server'],\n 'Start the MCP server (default when no command specified)',\n yargs => yargs,\n async args => {\n const { serverCommand } = await import('@/cli/commands');\n await serverCommand(args);\n }\n )\n .command(\n 'install',\n 'Install the MCP server configuration for a client',\n yargs =>\n yargs.option('client', {\n type: 'string',\n description: 'The client name',\n required: false,\n default: isClaudeCode ? Clients.ClaudeCode : undefined,\n }),\n async args => {\n const { installMcpServer } = await import('@/cli/install');\n await installMcpServer(args);\n }\n )\n .command(\n 'fund',\n 'Open the funding page to add USDC to your wallet',\n yargs => yargs,\n async args => {\n const { fundMcpServer } = await import('@/cli/fund');\n await fundMcpServer(args);\n }\n )\n .example(\n '$0 fetch \"https://enrichx402.com/api/apollo/people-enrich\" -m POST -b \\'{\"email\":\"user@example.com\"}\\'',\n 'Fetch with x402 payment'\n )\n .example(\n '$0 check \"https://enrichx402.com/api/apollo/people-enrich\"',\n 'Check endpoint pricing'\n )\n .example(\n '$0 discover \"https://enrichx402.com\"',\n 'Discover endpoints on origin'\n )\n .example('$0 wallet info', 'Get wallet balance')\n .example('$0 wallet redeem ABC123', 'Redeem invite code')\n .example('$0', 'Start MCP server (default)')\n .example('$0 install --client cursor', 'Install MCP for Cursor')\n .strict()\n .help()\n .version()\n .parseAsync()\n .catch(err => {\n // Output error in JSON format for agent consumption\n const response = {\n success: false,\n error: {\n code: 'GENERAL_ERROR',\n message: err instanceof Error ? err.message : String(err),\n surface: 'cli',\n cause: 'unknown',\n },\n };\n console.log(JSON.stringify(response, null, 2));\n process.exit(1);\n });\n"],"mappings":"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","names":["yargs"]}
|
|
1
|
+
{"version":3,"sources":["../../src/index.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport yargs from 'yargs';\nimport { hideBin } from 'yargs/helpers';\nimport { Clients } from './cli/install/clients';\n\nconst isClaudeCode = Boolean(process.env.CLAUDECODE);\nconst defaultYes = isClaudeCode || Boolean(process.env.CI);\n\nvoid yargs(hideBin(process.argv))\n .scriptName('agentcash')\n .usage('$0 [command] [options]')\n .option('dev', {\n type: 'boolean',\n description: 'Enable dev mode (use localhost endpoints)',\n default: false,\n })\n .option('invite', {\n type: 'string',\n description: 'Invite code to redeem for starter money',\n required: false,\n })\n .option('yes', {\n alias: 'y',\n type: 'boolean',\n description: 'Yes to all prompts',\n default: defaultYes ? true : undefined,\n })\n .option('sessionId', {\n type: 'string',\n description:\n 'Session ID for matching requests (auto-generated if not provided)',\n required: false,\n })\n .option('provider', {\n type: 'string',\n description: 'Provider to use for the MCP server',\n required: false,\n })\n .option('format', {\n type: 'string',\n description:\n 'Output format: json (default for pipes) or pretty (default for TTY)',\n choices: ['json', 'pretty'],\n })\n .option('quiet', {\n alias: 'q',\n type: 'boolean',\n description: 'Suppress stderr output',\n default: false,\n })\n .option('verbose', {\n alias: 'v',\n type: 'boolean',\n description: 'Enable verbose logging (debug output to stderr)',\n default: false,\n })\n .middleware(async argv => {\n // Configure CLI context for shared modules (like logging)\n if (argv.verbose) {\n const { configureCliContext } = await import('@/shared/cli-context');\n configureCliContext({ verbose: true });\n }\n })\n // ============================================================\n // Core CLI Commands (for agent/programmatic use)\n // ============================================================\n .command(\n 'fetch <url>',\n 'HTTP fetch with automatic x402 payment handling',\n yargs =>\n yargs\n .positional('url', {\n type: 'string',\n description: 'The endpoint URL to fetch',\n demandOption: true,\n })\n .option('method', {\n alias: 'm',\n type: 'string',\n description: 'HTTP method',\n choices: ['GET', 'POST', 'PUT', 'DELETE', 'PATCH'],\n default: 'GET',\n })\n .option('body', {\n alias: 'b',\n type: 'string',\n description: 'Request body as JSON string',\n })\n .option('headers', {\n alias: 'H',\n type: 'string',\n description: 'Additional headers as JSON object',\n }),\n async args => {\n const { fetchCommand } = await import('@/cli/commands');\n await fetchCommand(\n {\n url: args.url,\n method: args.method,\n body: args.body,\n headers: args.headers,\n },\n args\n );\n }\n )\n .command(\n 'check <url>',\n 'Check endpoint for x402 pricing and schema without making payment',\n yargs =>\n yargs\n .positional('url', {\n type: 'string',\n description: 'The endpoint URL to check',\n demandOption: true,\n })\n .option('method', {\n alias: 'm',\n type: 'string',\n description: 'HTTP method',\n choices: ['GET', 'POST', 'PUT', 'DELETE', 'PATCH'],\n default: 'GET',\n })\n .option('body', {\n alias: 'b',\n type: 'string',\n description: 'Request body as JSON string',\n })\n .option('headers', {\n alias: 'H',\n type: 'string',\n description: 'Additional headers as JSON object',\n }),\n async args => {\n const { checkCommand } = await import('@/cli/commands');\n await checkCommand(\n {\n url: args.url,\n method: args.method,\n body: args.body,\n headers: args.headers,\n },\n args\n );\n }\n )\n .command(\n 'discover <url>',\n 'Discover x402-protected endpoints on an origin',\n yargs =>\n yargs.positional('url', {\n type: 'string',\n description: 'The origin URL to discover endpoints from',\n demandOption: true,\n }),\n async args => {\n const { discoverCommand } = await import('@/cli/commands');\n await discoverCommand({ url: args.url }, args);\n }\n )\n .command(\n 'wallet',\n 'Wallet management commands',\n yargs =>\n yargs\n .command(\n 'info',\n 'Get wallet address, balance, and deposit link',\n yargs => yargs,\n async args => {\n const { walletInfoCommand } = await import('@/cli/commands');\n await walletInfoCommand({}, args);\n }\n )\n .command(\n 'redeem <code>',\n 'Redeem an invite code for free USDC',\n yargs =>\n yargs.positional('code', {\n type: 'string',\n description: 'The invite code to redeem',\n demandOption: true,\n }),\n async args => {\n const { walletRedeemCommand } = await import('@/cli/commands');\n await walletRedeemCommand({ code: args.code }, args);\n }\n )\n .demandCommand(1, 'You must specify a wallet subcommand')\n .strict(),\n () => {\n // Show help for wallet command\n }\n )\n .command(\n 'report-error',\n 'Report a critical bug to the agentcash team (emergency only)',\n yargs =>\n yargs\n .option('tool', {\n type: 'string',\n description: 'The tool/command that failed',\n demandOption: true,\n })\n .option('summary', {\n type: 'string',\n description: '1-2 sentence summary of the issue',\n demandOption: true,\n })\n .option('error-message', {\n type: 'string',\n description: 'The error message',\n demandOption: true,\n })\n .option('resource', {\n type: 'string',\n description: 'The x402 resource URL (if applicable)',\n })\n .option('stack', {\n type: 'string',\n description: 'Stack trace (if available)',\n })\n .option('full-report', {\n type: 'string',\n description: 'Detailed report with context and repro steps',\n }),\n async args => {\n const { reportErrorCommand } = await import('@/cli/commands');\n await reportErrorCommand(\n {\n tool: args.tool,\n summary: args.summary,\n errorMessage: args.errorMessage,\n resource: args.resource,\n stack: args.stack,\n fullReport: args.fullReport,\n },\n args\n );\n }\n )\n // ============================================================\n // Server & Installation Commands\n // ============================================================\n .command(\n ['$0', 'server'],\n 'Start the MCP server (default when no command specified)',\n yargs => yargs,\n async args => {\n const { serverCommand } = await import('@/cli/commands');\n await serverCommand(args);\n }\n )\n .command(\n 'install',\n 'Install the MCP server configuration for a client',\n yargs =>\n yargs.option('client', {\n type: 'string',\n description: 'The client name',\n required: false,\n default: isClaudeCode ? Clients.ClaudeCode : undefined,\n }),\n async args => {\n const { installMcpServer } = await import('@/cli/install');\n await installMcpServer(args);\n }\n )\n .command(\n 'fund',\n 'Open the funding page to add USDC to your wallet',\n yargs => yargs,\n async args => {\n const { fundMcpServer } = await import('@/cli/fund');\n await fundMcpServer(args);\n }\n )\n .example(\n '$0 fetch \"https://enrichx402.com/api/apollo/people-enrich\" -m POST -b \\'{\"email\":\"user@example.com\"}\\'',\n 'Fetch with x402 payment'\n )\n .example(\n '$0 check \"https://enrichx402.com/api/apollo/people-enrich\"',\n 'Check endpoint pricing'\n )\n .example(\n '$0 discover \"https://enrichx402.com\"',\n 'Discover endpoints on origin'\n )\n .example('$0 wallet info', 'Get wallet balance')\n .example('$0 wallet redeem ABC123', 'Redeem invite code')\n .example('$0', 'Start MCP server (default)')\n .example('$0 install --client cursor', 'Install MCP for Cursor')\n .strict()\n .help()\n .version()\n .parseAsync()\n .catch(err => {\n // Output error in JSON format for agent consumption\n const response = {\n success: false,\n error: {\n code: 'GENERAL_ERROR',\n message: err instanceof Error ? err.message : String(err),\n surface: 'cli',\n cause: 'unknown',\n },\n };\n console.log(JSON.stringify(response, null, 2));\n process.exit(1);\n });\n"],"mappings":"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","names":["yargs"]}
|
|
@@ -1,38 +1,33 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Clients,
|
|
3
3
|
clientMetadata
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-KPEJO3KV.js";
|
|
5
5
|
import {
|
|
6
|
-
DIST_TAG
|
|
7
|
-
|
|
8
|
-
} from "./chunk-YOLNSINZ.js";
|
|
6
|
+
DIST_TAG
|
|
7
|
+
} from "./chunk-ZVDFFTHM.js";
|
|
9
8
|
import {
|
|
10
9
|
promptDeposit,
|
|
11
10
|
wait
|
|
12
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-BTIVASGJ.js";
|
|
13
12
|
import {
|
|
14
13
|
getWallet,
|
|
15
14
|
redeemInviteCode
|
|
16
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-VZL5QWWM.js";
|
|
17
16
|
import {
|
|
18
17
|
err,
|
|
18
|
+
getBalance,
|
|
19
19
|
log,
|
|
20
20
|
resultFromThrowable,
|
|
21
21
|
safeReadFile,
|
|
22
22
|
safeWriteFile
|
|
23
|
-
} from "./chunk-
|
|
24
|
-
import "./chunk-
|
|
25
|
-
import {
|
|
26
|
-
init_esm_shims
|
|
27
|
-
} from "./chunk-A2KI7TKE.js";
|
|
23
|
+
} from "./chunk-VX2WPSZV.js";
|
|
24
|
+
import "./chunk-ISR6DJ53.js";
|
|
28
25
|
|
|
29
26
|
// src/cli/install/index.ts
|
|
30
|
-
init_esm_shims();
|
|
31
27
|
import chalk5 from "chalk";
|
|
32
28
|
import { intro, outro as outro3 } from "@clack/prompts";
|
|
33
29
|
|
|
34
30
|
// src/cli/install/1-get-client/index.ts
|
|
35
|
-
init_esm_shims();
|
|
36
31
|
import z from "zod";
|
|
37
32
|
import { select, log as log2, outro } from "@clack/prompts";
|
|
38
33
|
import chalk from "chalk";
|
|
@@ -78,23 +73,17 @@ var getClient = async ({ client: flagClient, yes }) => {
|
|
|
78
73
|
};
|
|
79
74
|
|
|
80
75
|
// src/cli/install/2-add-server/index.ts
|
|
81
|
-
init_esm_shims();
|
|
82
76
|
import fs2 from "fs";
|
|
83
77
|
import chalk2 from "chalk";
|
|
84
78
|
import { log as clackLog, confirm, outro as outro2, stream } from "@clack/prompts";
|
|
85
79
|
|
|
86
|
-
// src/cli/install/2-add-server/lib/index.ts
|
|
87
|
-
init_esm_shims();
|
|
88
|
-
|
|
89
80
|
// src/cli/install/2-add-server/lib/client-config-file.ts
|
|
90
|
-
init_esm_shims();
|
|
91
81
|
import os2 from "os";
|
|
92
82
|
import path2 from "path";
|
|
93
83
|
import process3 from "process";
|
|
94
84
|
import fs from "fs";
|
|
95
85
|
|
|
96
86
|
// src/cli/install/2-add-server/lib/platforms.ts
|
|
97
|
-
init_esm_shims();
|
|
98
87
|
import os from "os";
|
|
99
88
|
import path from "path";
|
|
100
89
|
import process2 from "process";
|
|
@@ -133,13 +122,11 @@ var getPlatformPath = () => {
|
|
|
133
122
|
};
|
|
134
123
|
|
|
135
124
|
// src/cli/install/2-add-server/lib/file-types.ts
|
|
136
|
-
init_esm_shims();
|
|
137
125
|
import * as TOML from "@iarna/toml";
|
|
138
126
|
import yaml from "js-yaml";
|
|
139
127
|
import * as jsonc from "jsonc-parser";
|
|
140
128
|
|
|
141
129
|
// src/cli/install/2-add-server/lib/result.ts
|
|
142
|
-
init_esm_shims();
|
|
143
130
|
var errorType = "config";
|
|
144
131
|
var surface = "config_file";
|
|
145
132
|
var configResultFromThrowable = (fn, error) => resultFromThrowable(errorType, surface, fn, error);
|
|
@@ -358,7 +345,6 @@ var getClientConfigFile = (client) => {
|
|
|
358
345
|
};
|
|
359
346
|
|
|
360
347
|
// src/cli/install/2-add-server/lib/nested-values.ts
|
|
361
|
-
init_esm_shims();
|
|
362
348
|
var getNestedValue = (obj, path3) => {
|
|
363
349
|
const keys = path3.split(".");
|
|
364
350
|
let current = obj;
|
|
@@ -612,7 +598,6 @@ var formatDiffByFormat = (obj, format) => {
|
|
|
612
598
|
};
|
|
613
599
|
|
|
614
600
|
// src/cli/install/3-redeem-invite/index.ts
|
|
615
|
-
init_esm_shims();
|
|
616
601
|
import chalk3 from "chalk";
|
|
617
602
|
import { log as log3, spinner } from "@clack/prompts";
|
|
618
603
|
var redeemInviteCode2 = async (props, flags) => {
|
|
@@ -649,7 +634,6 @@ var redeemInviteCode2 = async (props, flags) => {
|
|
|
649
634
|
};
|
|
650
635
|
|
|
651
636
|
// src/cli/install/4-add-funds/index.ts
|
|
652
|
-
init_esm_shims();
|
|
653
637
|
import chalk4 from "chalk";
|
|
654
638
|
import { log as log4, spinner as spinner2 } from "@clack/prompts";
|
|
655
639
|
var addFunds = async ({ flags, address, isNew }) => {
|
|
@@ -717,4 +701,4 @@ var installMcpServer = async (flags) => {
|
|
|
717
701
|
export {
|
|
718
702
|
installMcpServer
|
|
719
703
|
};
|
|
720
|
-
//# sourceMappingURL=install-
|
|
704
|
+
//# sourceMappingURL=install-KLEATNEC.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 '@x402scan/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 '@x402scan/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"]}
|