agentcash 0.7.7 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/cjs/run-server.cjs +59 -28
- package/dist/esm/{chunk-5EMDWOPZ.js → chunk-4R52CY5Q.js} +23 -23
- package/dist/esm/chunk-4R52CY5Q.js.map +1 -0
- package/dist/esm/{chunk-2XMLNLWS.js → chunk-5ELAEV2M.js} +9 -7
- package/dist/esm/{chunk-2XMLNLWS.js.map → chunk-5ELAEV2M.js.map} +1 -1
- package/dist/esm/{chunk-SRV57WB2.js → chunk-62B3GENJ.js} +8 -6
- package/dist/esm/{chunk-SRV57WB2.js.map → chunk-62B3GENJ.js.map} +1 -1
- package/dist/esm/{chunk-TRPO7BKD.js → chunk-6PU3XK6I.js} +8 -228
- package/dist/esm/chunk-6PU3XK6I.js.map +1 -0
- package/dist/esm/{chunk-FLIDR6EU.js → chunk-7ZEXMJYJ.js} +5 -3
- package/dist/esm/{chunk-FLIDR6EU.js.map → chunk-7ZEXMJYJ.js.map} +1 -1
- package/dist/esm/{chunk-QPL3AVUK.js → chunk-C36IAW7R.js} +5 -3
- package/dist/esm/{chunk-QPL3AVUK.js.map → chunk-C36IAW7R.js.map} +1 -1
- package/dist/esm/chunk-FBPC4LGY.js +7 -0
- package/dist/esm/{chunk-PWYZN62H.js → chunk-OHA3LLUQ.js} +3 -3
- package/dist/esm/{chunk-24E2V3PA.js → chunk-UN3PRLTL.js} +15 -43
- package/dist/esm/chunk-UN3PRLTL.js.map +1 -0
- package/dist/esm/{chunk-JKCEMNAF.js → chunk-VR5I67WE.js} +2 -2
- package/dist/esm/{chunk-XNU6FVCF.js → chunk-W7DAJMFQ.js} +87 -19
- package/dist/esm/chunk-W7DAJMFQ.js.map +1 -0
- package/dist/esm/chunk-YQFK4U62.js +230 -0
- package/dist/esm/chunk-YQFK4U62.js.map +1 -0
- package/dist/esm/{chunk-X6KM3YLG.js → chunk-Z2R7VYNM.js} +11 -9
- package/dist/esm/{chunk-X6KM3YLG.js.map → chunk-Z2R7VYNM.js.map} +1 -1
- package/dist/esm/chunk-ZDDDU5O2.js +41 -0
- package/dist/esm/chunk-ZDDDU5O2.js.map +1 -0
- package/dist/esm/{chunk-KPEJO3KV.js → chunk-ZOVLXKVL.js} +8 -8
- package/dist/esm/chunk-ZOVLXKVL.js.map +1 -0
- package/dist/esm/{commands-IFU565JX.js → commands-YSOBBE4N.js} +625 -504
- package/dist/esm/commands-YSOBBE4N.js.map +1 -0
- package/dist/esm/{fund-N47ZRBRZ.js → fund-PRV53MDA.js} +7 -5
- package/dist/esm/{fund-N47ZRBRZ.js.map → fund-PRV53MDA.js.map} +1 -1
- package/dist/esm/index.js +65 -23
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/{install-WJ645IFJ.js → install-QT37XD4R.js} +10 -8
- package/dist/esm/{install-WJ645IFJ.js.map → install-QT37XD4R.js.map} +1 -1
- package/dist/esm/lib.js +4 -3
- package/dist/esm/{server-VU3UAM7K.js → server-QARME5NA.js} +26 -19
- package/dist/esm/server-QARME5NA.js.map +1 -0
- package/dist/esm/shared/operations/index.js +7 -6
- package/dist/esm/shared/operations/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/esm/chunk-24E2V3PA.js.map +0 -1
- package/dist/esm/chunk-5EMDWOPZ.js.map +0 -1
- package/dist/esm/chunk-KPEJO3KV.js.map +0 -1
- package/dist/esm/chunk-L7FC4RVF.js +0 -7
- package/dist/esm/chunk-TRPO7BKD.js.map +0 -1
- package/dist/esm/chunk-XNU6FVCF.js.map +0 -1
- package/dist/esm/commands-IFU565JX.js.map +0 -1
- package/dist/esm/server-VU3UAM7K.js.map +0 -1
- /package/dist/esm/{chunk-L7FC4RVF.js.map → chunk-FBPC4LGY.js.map} +0 -0
- /package/dist/esm/{chunk-PWYZN62H.js.map → chunk-OHA3LLUQ.js.map} +0 -0
- /package/dist/esm/{chunk-JKCEMNAF.js.map → chunk-VR5I67WE.js.map} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/shared/wallet.ts","../../src/shared/neverthrow/json/index.ts","../../src/shared/redeem-invite.ts","../../src/shared/networks.ts"],"sourcesContent":["import { existsSync, readFileSync } from 'fs';\nimport { join } from 'path';\n\nimport { getAddress } from 'viem';\nimport { generatePrivateKey, privateKeyToAccount } from 'viem/accounts';\n\nimport z from 'zod';\n\nimport {\n ok,\n resultFromThrowable,\n resultFromPromise,\n} from '@agentcash/neverthrow';\n\nimport {\n fsErr,\n safeChmod,\n safeReadFile,\n safeWriteFile,\n} from '@/shared/neverthrow/fs';\nimport { jsonErr, safeParseJson } from '@/shared/neverthrow/json';\nimport { safeParse } from '@/shared/neverthrow/parse';\nimport { getBalance } from '@/shared/balance';\n\nimport { log } from './log';\nimport { configFile, LEGACY_DIRECTORY } from './fs';\n\nimport type { Hex } from 'viem';\nimport type { PrivateKeyAccount } from 'viem/accounts';\n\nconst WALLET_FILE = configFile('wallet.json');\n\nconst storedWalletSchema = z.object({\n privateKey: z\n .string()\n .regex(/^0x[a-fA-F0-9]{64}$/, 'Invalid Ethereum private key')\n .transform(privateKey => privateKey as Hex),\n address: z\n .string()\n .regex(/^0x[a-fA-F0-9]{40}$/, 'Invalid Ethereum address')\n .transform(address => getAddress(address)),\n createdAt: z.string(),\n});\n\nconst walletSurface = 'wallet';\n\nconst LEGACY_WALLET = join(LEGACY_DIRECTORY, 'wallet.json');\n\nconst reconcileSurface = 'wallet-reconcile';\n\nasync function reconcileLegacyWallet(\n current: PrivateKeyAccount,\n isNew: boolean\n): Promise<{ account: PrivateKeyAccount; isNew: boolean }> {\n const noChange = { account: current, isNew };\n\n // 1. No legacy wallet → nothing to reconcile\n if (!existsSync(LEGACY_WALLET)) {\n return noChange;\n }\n\n // 2. Read & parse legacy wallet\n const legacyResult = resultFromThrowable(\n 'wallet',\n reconcileSurface,\n () => {\n const raw = readFileSync(LEGACY_WALLET, 'utf-8');\n return storedWalletSchema.parse(JSON.parse(raw));\n },\n () => ({\n cause: 'file_not_readable' as const,\n message: 'Legacy wallet exists but is invalid',\n })\n );\n\n if (legacyResult.isErr()) {\n log.info('Legacy wallet exists but is invalid, skipping reconciliation');\n return noChange;\n }\n\n const legacyKey = legacyResult.value.privateKey;\n\n // 3. Same key → already reconciled\n const legacyAccount = privateKeyToAccount(legacyKey);\n if (legacyAccount.address === current.address) {\n return noChange;\n }\n\n // 4. Keys differ → check balances\n const balancesResult = await resultFromPromise(\n 'wallet',\n reconcileSurface,\n Promise.all([\n getBalance({\n address: legacyAccount.address,\n surface: reconcileSurface,\n }),\n getBalance({\n address: current.address,\n surface: reconcileSurface,\n }),\n ]),\n () => ({\n cause: 'balance_check' as const,\n message: 'Network error during wallet reconciliation',\n })\n );\n\n if (balancesResult.isErr()) {\n log.info('Network error during wallet reconciliation, skipping');\n return noChange;\n }\n\n const [legacyBalanceResult, currentBalanceResult] = balancesResult.value;\n\n if (legacyBalanceResult.isErr() || currentBalanceResult.isErr()) {\n log.info('Could not check balances for wallet reconciliation, skipping');\n return noChange;\n }\n\n const legacyBalance = legacyBalanceResult.value.balance;\n const currentBalance = currentBalanceResult.value.balance;\n\n // 4a. Legacy has balance, current is empty → recover legacy\n if (legacyBalance > 0 && currentBalance === 0) {\n log.info(\n `Recovering funded legacy wallet ${legacyAccount.address} (balance: ${legacyBalance})`\n );\n const stored = {\n privateKey: legacyKey,\n address: legacyAccount.address,\n createdAt: new Date().toISOString(),\n };\n const writeResult = await safeWriteFile(\n reconcileSurface,\n WALLET_FILE,\n JSON.stringify(stored, null, 2)\n ).andThen(() => safeChmod(reconcileSurface, WALLET_FILE, 0o600));\n\n if (writeResult.isErr()) {\n log.error(\n `Failed to write recovered wallet: ${writeResult.error.message}`\n );\n return noChange;\n }\n\n return { account: legacyAccount, isNew: false };\n }\n\n // 4b. Both have balance → manual intervention needed\n if (legacyBalance > 0 && currentBalance > 0) {\n log.info(\n `Both wallets have funds. Current: ${current.address} (${currentBalance}), Legacy: ${legacyAccount.address} (${legacyBalance}). ` +\n `Manually copy ${LEGACY_WALLET} to ${WALLET_FILE} if you want to use the legacy wallet.`\n );\n return noChange;\n }\n\n // 4c. Legacy has no balance → nothing to recover\n return noChange;\n}\n\nexport async function getWallet() {\n if (process.env.X402_PRIVATE_KEY) {\n const account = privateKeyToAccount(process.env.X402_PRIVATE_KEY as Hex);\n log.info(`Using wallet from env: ${account.address}`);\n return ok({ account, isNew: false });\n }\n\n const readFileResult = await safeReadFile(walletSurface, WALLET_FILE);\n\n if (!readFileResult.isOk()) {\n const fileExistsResult = existsSync(WALLET_FILE);\n // file exists but is not readable\n if (fileExistsResult) {\n return fsErr(walletSurface, {\n cause: 'file_not_readable',\n message: `The file exists but is not readable. Fix corrupted state file: ${WALLET_FILE}`,\n });\n }\n }\n\n if (readFileResult.isOk()) {\n const data = readFileResult.value;\n const jsonParseResult = safeParseJson(walletSurface, data);\n\n // file exists but is not valid JSON\n if (jsonParseResult.isErr()) {\n return jsonErr(walletSurface, {\n cause: 'parse',\n message: `The data in ${WALLET_FILE} is not valid JSON`,\n });\n }\n\n const parseResult = safeParse(\n walletSurface,\n storedWalletSchema,\n jsonParseResult.value\n );\n\n // file has valid JSON but is not a valid wallet configuration\n if (parseResult.isErr()) {\n return parseResult;\n }\n\n const account = privateKeyToAccount(parseResult.value.privateKey);\n log.info(`Loaded wallet: ${account.address}`);\n const reconciled = await reconcileLegacyWallet(account, false);\n return ok(reconciled);\n }\n\n // Generate new\n const privateKey = generatePrivateKey();\n const account = privateKeyToAccount(privateKey);\n const stored = {\n privateKey,\n address: account.address,\n createdAt: new Date().toISOString(),\n };\n\n const saveResult = await safeWriteFile(\n walletSurface,\n WALLET_FILE,\n JSON.stringify(stored, null, 2)\n ).andThen(() => safeChmod(walletSurface, WALLET_FILE, 0o600));\n\n if (saveResult.isErr()) {\n return saveResult;\n }\n\n log.info(`Created wallet: ${account.address}`);\n log.info(`Saved to: ${WALLET_FILE}`);\n\n const reconciled = await reconcileLegacyWallet(account, true);\n return ok(reconciled);\n}\n","import { err, resultFromThrowable } from '@agentcash/neverthrow';\n\nimport type { BaseJsonError, JsonObject } from './types';\n\nconst type = 'json';\n\nexport const jsonErr = (surface: string, error: BaseJsonError) => {\n return err(type, surface, error);\n};\n\nexport const safeStringifyJson = (surface: string, value: JsonObject) => {\n return resultFromThrowable(\n type,\n surface,\n () => JSON.stringify(value, null, 2),\n () => ({\n cause: 'stringify' as const,\n message: 'Could not stringify JSON',\n })\n );\n};\n\n/**\n * Convert a value with optional properties into a clean JsonObject\n * by round-tripping through JSON serialization (strips `undefined` keys).\n */\nexport const toJsonObject = <T>(value: T): JsonObject =>\n JSON.parse(JSON.stringify(value)) as JsonObject;\n\nexport const safeParseJson = (surface: string, value: string) => {\n return resultFromThrowable(\n type,\n surface,\n () => JSON.parse(value) as JsonObject,\n e => ({\n cause: 'parse' as const,\n message: e instanceof Error ? e.message : 'Could not parse JSON',\n })\n );\n};\n","import z from 'zod';\n\nimport { safeFetchJson } from '@/shared/neverthrow/fetch';\nimport { err, resultFromPromise } from '@agentcash/neverthrow';\n\nimport { getBaseUrl } from './utils';\nimport { getState, setState } from './state';\n\nimport type { Address } from 'viem';\n\nexport interface RedeemInviteProps {\n code: string;\n address: Address;\n surface: string;\n dev?: boolean;\n}\n\nexport const redeemInviteCode = async ({\n code,\n address,\n surface,\n dev = false,\n}: RedeemInviteProps) => {\n const state = getState();\n\n if (state.redeemedCodes?.includes(code)) {\n return err('user', surface, {\n cause: 'conflict',\n message: 'This invite code has already been redeemed',\n });\n }\n\n const result = await safeFetchJson(\n surface,\n new Request(`${getBaseUrl(dev)}/api/redeem`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n code,\n recipientAddr: address,\n }),\n }),\n z.object({\n redemptionId: z.string(),\n txHash: z.string(),\n amount: z.coerce.number(),\n })\n );\n\n if (result.isOk()) {\n setState({\n redeemedCodes: [...(state.redeemedCodes ?? []), code],\n });\n return result;\n }\n\n // Extract error message from response body when available\n const error = result.error;\n if (error.cause === 'http' && error.response) {\n const bodyResult = await resultFromPromise(\n 'user',\n surface,\n error.response.json() as Promise<{ error?: string }>,\n () => ({\n cause: 'parse' as const,\n message: 'Could not parse error response',\n })\n );\n\n if (bodyResult.isOk() && bodyResult.value.error) {\n return err('user', surface, {\n cause: 'conflict',\n message: bodyResult.value.error,\n });\n }\n }\n\n return result;\n};\n","import {\n base,\n baseSepolia,\n mainnet,\n sepolia,\n optimism,\n arbitrum,\n polygon,\n} from 'viem/chains';\n\nimport type { Chain } from 'viem';\n\nexport interface ChainConfig {\n chain: Chain;\n caip2: string;\n v1Name: string;\n usdcAddress: `0x${string}`;\n}\n\nconst CHAIN_CONFIGS: Record<string, ChainConfig> = {\n 'eip155:8453': {\n chain: base,\n caip2: 'eip155:8453',\n v1Name: 'base',\n usdcAddress: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',\n },\n 'eip155:84532': {\n chain: baseSepolia,\n caip2: 'eip155:84532',\n v1Name: 'base-sepolia',\n usdcAddress: '0x036CbD53842c5426634e7929541eC2318f3dCF7e',\n },\n 'eip155:1': {\n chain: mainnet,\n caip2: 'eip155:1',\n v1Name: 'ethereum',\n usdcAddress: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',\n },\n 'eip155:11155111': {\n chain: sepolia,\n caip2: 'eip155:11155111',\n v1Name: 'ethereum-sepolia',\n usdcAddress: '0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238',\n },\n 'eip155:10': {\n chain: optimism,\n caip2: 'eip155:10',\n v1Name: 'optimism',\n usdcAddress: '0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85',\n },\n 'eip155:42161': {\n chain: arbitrum,\n caip2: 'eip155:42161',\n v1Name: 'arbitrum',\n usdcAddress: '0xaf88d065e77c8cC2239327C5EDb3A432268e5831',\n },\n 'eip155:137': {\n chain: polygon,\n caip2: 'eip155:137',\n v1Name: 'polygon',\n usdcAddress: '0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359',\n },\n};\n\nconst V1_TO_CAIP2: Record<string, string> = {\n base: 'eip155:8453',\n 'base-sepolia': 'eip155:84532',\n ethereum: 'eip155:1',\n 'ethereum-sepolia': 'eip155:11155111',\n optimism: 'eip155:10',\n arbitrum: 'eip155:42161',\n polygon: 'eip155:137',\n};\n\nexport const DEFAULT_NETWORK = 'eip155:8453';\n\n/** Convert any network identifier to CAIP-2 format */\nexport function toCaip2(network: string): string {\n if (network.startsWith('eip155:')) return network;\n return V1_TO_CAIP2[network.toLowerCase()] ?? network;\n}\n\n/** Get chain config from network identifier */\nexport function getChainConfig(network: string): ChainConfig | undefined {\n return CHAIN_CONFIGS[toCaip2(network)];\n}\n\n/** Get USDC address for a network */\nexport function getUSDCAddress(network: string): `0x${string}` | undefined {\n return getChainConfig(network)?.usdcAddress;\n}\n\n/** Extract chain ID from CAIP-2 identifier */\nexport function getChainId(network: string): number | undefined {\n const caip2 = toCaip2(network);\n const match = /^eip155:(\\d+)$/.exec(caip2);\n return match ? parseInt(match[1]!, 10) : undefined;\n}\n\n/** Get human-readable chain name */\nexport function getChainName(network: string): string {\n return getChainConfig(network)?.chain.name ?? network;\n}\n\n/** Check if network is a testnet */\nexport function isTestnet(network: string): boolean {\n return getChainConfig(network)?.chain.testnet === true;\n}\n"],"mappings":"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","names":["account","reconciled","z","z"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/shared/operations/check-endpoint.ts","../../src/shared/operations/discover.ts"],"sourcesContent":["import {\n checkEndpointSchema,\n type HttpMethod,\n type CheckEndpointSuccess,\n type CheckEndpointNotFound,\n} from '@agentcash/discovery';\n\nimport { log } from '@/shared/log';\n\nexport const SUPPORTED_METHODS = [\n 'GET',\n 'POST',\n 'PUT',\n 'DELETE',\n 'PATCH',\n] as const;\n// Narrowed subset of discovery's HttpMethod (excludes HEAD/OPTIONS/TRACE).\nexport type SupportedMethod = Extract<\n HttpMethod,\n (typeof SUPPORTED_METHODS)[number]\n>;\n\n/**\n * Returns advisory data for an endpoint: auth mode, pricing, protocols,\n * input schema, and (when available) exact payment options.\n *\n * Two-phase workflow:\n * 1. Call without `sampleInputSchema` to get the input schema and advisory\n * pricing from the OpenAPI spec (no live request to the endpoint).\n * 2. Once you know what body you intend to send, call again with\n * `sampleInputSchema` set to that body. The discovery layer will probe\n * the live endpoint with that payload and return exact PaymentOptions\n * priced for it — giving a precise cost before committing to a fetch.\n */\nexport async function checkEndpoint(\n surface: string,\n url: string,\n methods?: SupportedMethod[],\n sampleInputBody?: Record<string, unknown>,\n headers?: Record<string, string>\n): Promise<CheckEndpointSuccess | CheckEndpointNotFound> {\n log.info('Checking endpoint', {\n surface,\n url,\n methods,\n hasSampleInputBody: !!sampleInputBody,\n });\n\n const result = await checkEndpointSchema({\n url,\n sampleInputBody,\n headers,\n });\n\n if (!result.found) {\n log.error(`[checkEndpoint failed`, {\n surface,\n url,\n cause: result.cause,\n message: result.message,\n });\n return result;\n }\n\n const advisories = methods?.length\n ? result.advisories.filter(a =>\n methods.includes(a.method as SupportedMethod)\n )\n : result.advisories;\n\n return { ...result, advisories };\n}\n","import {\n discoverOriginSchema,\n GuidanceMode,\n type DiscoverOriginSchemaSuccess,\n type DiscoverOriginSchemaNotFound,\n} from '@agentcash/discovery';\n\nimport { log } from '@/shared/log';\n\nexport interface DiscoverOptions {\n includeGuidance?: boolean;\n}\n\n/**\n * Discover payment-protected resources on an origin.\n * Fetches OpenAPI spec, builds endpoint index, and fetches guidance.\n *\n * Returns DiscoverOriginSchemaSuccess on success, DiscoverOriginSchemaNotFound with cause on failure.\n */\nexport async function discoverResources(\n surface: string,\n url: string,\n options: DiscoverOptions = {}\n): Promise<DiscoverOriginSchemaSuccess | DiscoverOriginSchemaNotFound> {\n const guidance =\n options.includeGuidance === true\n ? GuidanceMode.Always\n : options.includeGuidance === false\n ? GuidanceMode.Never\n : GuidanceMode.Auto;\n\n const result = await discoverOriginSchema({ target: url, guidance });\n\n if (!result.found) {\n log.error(`[discoverResources failed`, {\n surface,\n url,\n cause: result.cause,\n message: result.message,\n });\n }\n\n return result;\n}\n"],"mappings":";;;;;AAAA;AAAA,EACE;AAAA,OAIK;AAIA,IAAM,oBAAoB;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAmBA,eAAsB,cACpB,SACA,KACA,SACA,iBACA,SACuD;AACvD,MAAI,KAAK,qBAAqB;AAAA,IAC5B;AAAA,IACA;AAAA,IACA;AAAA,IACA,oBAAoB,CAAC,CAAC;AAAA,EACxB,CAAC;AAED,QAAM,SAAS,MAAM,oBAAoB;AAAA,IACvC;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,MAAI,CAAC,OAAO,OAAO;AACjB,QAAI,MAAM,yBAAyB;AAAA,MACjC;AAAA,MACA;AAAA,MACA,OAAO,OAAO;AAAA,MACd,SAAS,OAAO;AAAA,IAClB,CAAC;AACD,WAAO;AAAA,EACT;AAEA,QAAM,aAAa,SAAS,SACxB,OAAO,WAAW;AAAA,IAAO,OACvB,QAAQ,SAAS,EAAE,MAAyB;AAAA,EAC9C,IACA,OAAO;AAEX,SAAO,EAAE,GAAG,QAAQ,WAAW;AACjC;;;ACvEA;AAAA,EACE;AAAA,EACA;AAAA,OAGK;AAcP,eAAsB,kBACpB,SACA,KACA,UAA2B,CAAC,GACyC;AACrE,QAAM,WACJ,QAAQ,oBAAoB,OACxB,aAAa,SACb,QAAQ,oBAAoB,QAC1B,aAAa,QACb,aAAa;AAErB,QAAM,SAAS,MAAM,qBAAqB,EAAE,QAAQ,KAAK,SAAS,CAAC;AAEnE,MAAI,CAAC,OAAO,OAAO;AACjB,QAAI,MAAM,6BAA6B;AAAA,MACrC;AAAA,MACA;AAAA,MACA,OAAO,OAAO;AAAA,MACd,SAAS,OAAO;AAAA,IAClB,CAAC;AAAA,EACH;AAEA,SAAO;AACT;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/cli/install/clients.ts"],"sourcesContent":["export enum Clients {\n ClaudeCode = 'claude-code',\n Cursor = 'cursor',\n Claude = 'claude',\n Codex = 'codex',\n Vscode = 'vscode',\n Cline = 'cline',\n RooCline = 'roo-cline',\n Windsurf = 'windsurf',\n Warp = 'warp',\n GeminiCli = 'gemini-cli',\n Goose = 'goose',\n Zed = 'zed',\n Opencode = 'opencode',\n}\n\ninterface ClientMetadata {\n name: string;\n description: string;\n website: string;\n}\n\nexport const clientMetadata: Record<Clients, ClientMetadata> = {\n [Clients.ClaudeCode]: {\n name: 'Claude Code',\n description: 'Claude Code is a code editor that uses the Claude API.',\n website: 'https://claude.com',\n },\n [Clients.Cursor]: {\n name: 'Cursor',\n description: 'Cursor is a code editor that uses the Cursor API.',\n website: 'https://cursor.com',\n },\n [Clients.Claude]: {\n name: 'Claude Desktop',\n description: 'Claude is a code editor that uses the Claude API.',\n website: 'https://claude.com',\n },\n [Clients.Codex]: {\n name: 'Codex',\n description: 'Codex is a code editor that uses the Codex API.',\n website: 'https://codex.com',\n },\n [Clients.Vscode]: {\n name: 'VSCode',\n description: 'VSCode is a code editor that uses the VSCode API.',\n website: 'https://vscode.com',\n },\n [Clients.Cline]: {\n name: 'Cline',\n description: 'Cline is a code editor that uses the Cline API.',\n website: 'https://cline.com',\n },\n [Clients.RooCline]: {\n name: 'RooCline',\n description: 'RooCline is a code editor that uses the RooCline API.',\n website: 'https://roo-cline.com',\n },\n [Clients.Windsurf]: {\n name: 'Windsurf',\n description: 'Windsurf is a code editor that uses the Windsurf API.',\n website: 'https://windsurf.com',\n },\n [Clients.Warp]: {\n name: 'Warp',\n description: 'Warp is a code editor that uses the Warp API.',\n website: 'https://warp.com',\n },\n [Clients.GeminiCli]: {\n name: 'Gemini CLI',\n description: 'Gemini CLI is a code editor that uses the Gemini CLI API.',\n website: 'https://gemini-cli.com',\n },\n [Clients.Goose]: {\n name: 'Goose',\n description: 'Goose is a code editor that uses the Goose API.',\n website: 'https://goose.com',\n },\n [Clients.Zed]: {\n name: 'Zed',\n description: 'Zed is a code editor that uses the Zed API.',\n website: 'https://zed.com',\n },\n [Clients.Opencode]: {\n name: 'Opencode',\n description: 'Opencode is a code editor that uses the Opencode API.',\n website: 'https://opencode.com',\n },\n};\n"],"mappings":";AAAO,IAAK,UAAL,kBAAKA,aAAL;AACL,EAAAA,SAAA,gBAAa;AACb,EAAAA,SAAA,YAAS;AACT,EAAAA,SAAA,YAAS;AACT,EAAAA,SAAA,WAAQ;AACR,EAAAA,SAAA,YAAS;AACT,EAAAA,SAAA,WAAQ;AACR,EAAAA,SAAA,cAAW;AACX,EAAAA,SAAA,cAAW;AACX,EAAAA,SAAA,UAAO;AACP,EAAAA,SAAA,eAAY;AACZ,EAAAA,SAAA,WAAQ;AACR,EAAAA,SAAA,SAAM;AACN,EAAAA,SAAA,cAAW;AAbD,SAAAA;AAAA,GAAA;AAsBL,IAAM,iBAAkD;AAAA,EAC7D,CAAC,8BAAkB,GAAG;AAAA,IACpB,MAAM;AAAA,IACN,aAAa;AAAA,IACb,SAAS;AAAA,EACX;AAAA,EACA,CAAC,qBAAc,GAAG;AAAA,IAChB,MAAM;AAAA,IACN,aAAa;AAAA,IACb,SAAS;AAAA,EACX;AAAA,EACA,CAAC,qBAAc,GAAG;AAAA,IAChB,MAAM;AAAA,IACN,aAAa;AAAA,IACb,SAAS;AAAA,EACX;AAAA,EACA,CAAC,mBAAa,GAAG;AAAA,IACf,MAAM;AAAA,IACN,aAAa;AAAA,IACb,SAAS;AAAA,EACX;AAAA,EACA,CAAC,qBAAc,GAAG;AAAA,IAChB,MAAM;AAAA,IACN,aAAa;AAAA,IACb,SAAS;AAAA,EACX;AAAA,EACA,CAAC,mBAAa,GAAG;AAAA,IACf,MAAM;AAAA,IACN,aAAa;AAAA,IACb,SAAS;AAAA,EACX;AAAA,EACA,CAAC,0BAAgB,GAAG;AAAA,IAClB,MAAM;AAAA,IACN,aAAa;AAAA,IACb,SAAS;AAAA,EACX;AAAA,EACA,CAAC,yBAAgB,GAAG;AAAA,IAClB,MAAM;AAAA,IACN,aAAa;AAAA,IACb,SAAS;AAAA,EACX;AAAA,EACA,CAAC,iBAAY,GAAG;AAAA,IACd,MAAM;AAAA,IACN,aAAa;AAAA,IACb,SAAS;AAAA,EACX;AAAA,EACA,CAAC,4BAAiB,GAAG;AAAA,IACnB,MAAM;AAAA,IACN,aAAa;AAAA,IACb,SAAS;AAAA,EACX;AAAA,EACA,CAAC,mBAAa,GAAG;AAAA,IACf,MAAM;AAAA,IACN,aAAa;AAAA,IACb,SAAS;AAAA,EACX;AAAA,EACA,CAAC,eAAW,GAAG;AAAA,IACb,MAAM;AAAA,IACN,aAAa;AAAA,IACb,SAAS;AAAA,EACX;AAAA,EACA,CAAC,yBAAgB,GAAG;AAAA,IAClB,MAAM;AAAA,IACN,aAAa;AAAA,IACb,SAAS;AAAA,EACX;AACF;","names":["Clients"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../node_modules/.pnpm/neverthrow@8.2.0/node_modules/neverthrow/dist/index.es.js","../../../../internal/neverthrow/src/index.ts","../../src/shared/neverthrow/fs/index.ts","../../src/shared/fs.ts","../../src/shared/log.ts","../../src/shared/neverthrow/parse/index.ts","../../src/shared/neverthrow/fetch/index.ts"],"sourcesContent":["const defaultErrorConfig = {\r\n withStackTrace: false,\r\n};\r\n// Custom error object\r\n// Context / discussion: https://github.com/supermacro/neverthrow/pull/215\r\nconst createNeverThrowError = (message, result, config = defaultErrorConfig) => {\r\n const data = result.isOk()\r\n ? { type: 'Ok', value: result.value }\r\n : { type: 'Err', value: result.error };\r\n const maybeStack = config.withStackTrace ? new Error().stack : undefined;\r\n return {\r\n data,\r\n message,\r\n stack: maybeStack,\r\n };\r\n};\n\n/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\n\r\nfunction __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nfunction __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nfunction __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nfunction __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nfunction __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nfunction __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\ntypeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\n\nclass ResultAsync {\r\n constructor(res) {\r\n this._promise = res;\r\n }\r\n static fromSafePromise(promise) {\r\n const newPromise = promise.then((value) => new Ok(value));\r\n return new ResultAsync(newPromise);\r\n }\r\n static fromPromise(promise, errorFn) {\r\n const newPromise = promise\r\n .then((value) => new Ok(value))\r\n .catch((e) => new Err(errorFn(e)));\r\n return new ResultAsync(newPromise);\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n static fromThrowable(fn, errorFn) {\r\n return (...args) => {\r\n return new ResultAsync((() => __awaiter(this, void 0, void 0, function* () {\r\n try {\r\n return new Ok(yield fn(...args));\r\n }\r\n catch (error) {\r\n return new Err(errorFn ? errorFn(error) : error);\r\n }\r\n }))());\r\n };\r\n }\r\n static combine(asyncResultList) {\r\n return combineResultAsyncList(asyncResultList);\r\n }\r\n static combineWithAllErrors(asyncResultList) {\r\n return combineResultAsyncListWithAllErrors(asyncResultList);\r\n }\r\n map(f) {\r\n return new ResultAsync(this._promise.then((res) => __awaiter(this, void 0, void 0, function* () {\r\n if (res.isErr()) {\r\n return new Err(res.error);\r\n }\r\n return new Ok(yield f(res.value));\r\n })));\r\n }\r\n andThrough(f) {\r\n return new ResultAsync(this._promise.then((res) => __awaiter(this, void 0, void 0, function* () {\r\n if (res.isErr()) {\r\n return new Err(res.error);\r\n }\r\n const newRes = yield f(res.value);\r\n if (newRes.isErr()) {\r\n return new Err(newRes.error);\r\n }\r\n return new Ok(res.value);\r\n })));\r\n }\r\n andTee(f) {\r\n return new ResultAsync(this._promise.then((res) => __awaiter(this, void 0, void 0, function* () {\r\n if (res.isErr()) {\r\n return new Err(res.error);\r\n }\r\n try {\r\n yield f(res.value);\r\n }\r\n catch (e) {\r\n // Tee does not care about the error\r\n }\r\n return new Ok(res.value);\r\n })));\r\n }\r\n orTee(f) {\r\n return new ResultAsync(this._promise.then((res) => __awaiter(this, void 0, void 0, function* () {\r\n if (res.isOk()) {\r\n return new Ok(res.value);\r\n }\r\n try {\r\n yield f(res.error);\r\n }\r\n catch (e) {\r\n // Tee does not care about the error\r\n }\r\n return new Err(res.error);\r\n })));\r\n }\r\n mapErr(f) {\r\n return new ResultAsync(this._promise.then((res) => __awaiter(this, void 0, void 0, function* () {\r\n if (res.isOk()) {\r\n return new Ok(res.value);\r\n }\r\n return new Err(yield f(res.error));\r\n })));\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\r\n andThen(f) {\r\n return new ResultAsync(this._promise.then((res) => {\r\n if (res.isErr()) {\r\n return new Err(res.error);\r\n }\r\n const newValue = f(res.value);\r\n return newValue instanceof ResultAsync ? newValue._promise : newValue;\r\n }));\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\r\n orElse(f) {\r\n return new ResultAsync(this._promise.then((res) => __awaiter(this, void 0, void 0, function* () {\r\n if (res.isErr()) {\r\n return f(res.error);\r\n }\r\n return new Ok(res.value);\r\n })));\r\n }\r\n match(ok, _err) {\r\n return this._promise.then((res) => res.match(ok, _err));\r\n }\r\n unwrapOr(t) {\r\n return this._promise.then((res) => res.unwrapOr(t));\r\n }\r\n /**\r\n * @deprecated will be removed in 9.0.0.\r\n *\r\n * You can use `safeTry` without this method.\r\n * @example\r\n * ```typescript\r\n * safeTry(async function* () {\r\n * const okValue = yield* yourResult\r\n * })\r\n * ```\r\n * Emulates Rust's `?` operator in `safeTry`'s body. See also `safeTry`.\r\n */\r\n safeUnwrap() {\r\n return __asyncGenerator(this, arguments, function* safeUnwrap_1() {\r\n return yield __await(yield __await(yield* __asyncDelegator(__asyncValues(yield __await(this._promise.then((res) => res.safeUnwrap()))))));\r\n });\r\n }\r\n // Makes ResultAsync implement PromiseLike<Result>\r\n then(successCallback, failureCallback) {\r\n return this._promise.then(successCallback, failureCallback);\r\n }\r\n [Symbol.asyncIterator]() {\r\n return __asyncGenerator(this, arguments, function* _a() {\r\n const result = yield __await(this._promise);\r\n if (result.isErr()) {\r\n // @ts-expect-error -- This is structurally equivalent and safe\r\n yield yield __await(errAsync(result.error));\r\n }\r\n // @ts-expect-error -- This is structurally equivalent and safe\r\n return yield __await(result.value);\r\n });\r\n }\r\n}\r\nfunction okAsync(value) {\r\n return new ResultAsync(Promise.resolve(new Ok(value)));\r\n}\r\nfunction errAsync(err) {\r\n return new ResultAsync(Promise.resolve(new Err(err)));\r\n}\r\nconst fromPromise = ResultAsync.fromPromise;\r\nconst fromSafePromise = ResultAsync.fromSafePromise;\r\nconst fromAsyncThrowable = ResultAsync.fromThrowable;\n\n/**\r\n * Short circuits on the FIRST Err value that we find\r\n */\r\nconst combineResultList = (resultList) => {\r\n let acc = ok([]);\r\n for (const result of resultList) {\r\n if (result.isErr()) {\r\n acc = err(result.error);\r\n break;\r\n }\r\n else {\r\n acc.map((list) => list.push(result.value));\r\n }\r\n }\r\n return acc;\r\n};\r\n/* This is the typesafe version of Promise.all\r\n *\r\n * Takes a list of ResultAsync<T, E> and success if all inner results are Ok values\r\n * or fails if one (or more) of the inner results are Err values\r\n */\r\nconst combineResultAsyncList = (asyncResultList) => ResultAsync.fromSafePromise(Promise.all(asyncResultList)).andThen(combineResultList);\r\n/**\r\n * Give a list of all the errors we find\r\n */\r\nconst combineResultListWithAllErrors = (resultList) => {\r\n let acc = ok([]);\r\n for (const result of resultList) {\r\n if (result.isErr() && acc.isErr()) {\r\n acc.error.push(result.error);\r\n }\r\n else if (result.isErr() && acc.isOk()) {\r\n acc = err([result.error]);\r\n }\r\n else if (result.isOk() && acc.isOk()) {\r\n acc.value.push(result.value);\r\n }\r\n // do nothing when result.isOk() && acc.isErr()\r\n }\r\n return acc;\r\n};\r\nconst combineResultAsyncListWithAllErrors = (asyncResultList) => ResultAsync.fromSafePromise(Promise.all(asyncResultList)).andThen(combineResultListWithAllErrors);\n\n// eslint-disable-next-line @typescript-eslint/no-namespace\r\nvar Result;\r\n(function (Result) {\r\n /**\r\n * Wraps a function with a try catch, creating a new function with the same\r\n * arguments but returning `Ok` if successful, `Err` if the function throws\r\n *\r\n * @param fn function to wrap with ok on success or err on failure\r\n * @param errorFn when an error is thrown, this will wrap the error result if provided\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n function fromThrowable(fn, errorFn) {\r\n return (...args) => {\r\n try {\r\n const result = fn(...args);\r\n return ok(result);\r\n }\r\n catch (e) {\r\n return err(errorFn ? errorFn(e) : e);\r\n }\r\n };\r\n }\r\n Result.fromThrowable = fromThrowable;\r\n function combine(resultList) {\r\n return combineResultList(resultList);\r\n }\r\n Result.combine = combine;\r\n function combineWithAllErrors(resultList) {\r\n return combineResultListWithAllErrors(resultList);\r\n }\r\n Result.combineWithAllErrors = combineWithAllErrors;\r\n})(Result || (Result = {}));\r\nfunction ok(value) {\r\n return new Ok(value);\r\n}\r\nfunction err(err) {\r\n return new Err(err);\r\n}\r\nfunction safeTry(body) {\r\n const n = body().next();\r\n if (n instanceof Promise) {\r\n return new ResultAsync(n.then((r) => r.value));\r\n }\r\n return n.value;\r\n}\r\nclass Ok {\r\n constructor(value) {\r\n this.value = value;\r\n }\r\n isOk() {\r\n return true;\r\n }\r\n isErr() {\r\n return !this.isOk();\r\n }\r\n map(f) {\r\n return ok(f(this.value));\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n mapErr(_f) {\r\n return ok(this.value);\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\r\n andThen(f) {\r\n return f(this.value);\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\r\n andThrough(f) {\r\n return f(this.value).map((_value) => this.value);\r\n }\r\n andTee(f) {\r\n try {\r\n f(this.value);\r\n }\r\n catch (e) {\r\n // Tee doesn't care about the error\r\n }\r\n return ok(this.value);\r\n }\r\n orTee(_f) {\r\n return ok(this.value);\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\r\n orElse(_f) {\r\n return ok(this.value);\r\n }\r\n asyncAndThen(f) {\r\n return f(this.value);\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\r\n asyncAndThrough(f) {\r\n return f(this.value).map(() => this.value);\r\n }\r\n asyncMap(f) {\r\n return ResultAsync.fromSafePromise(f(this.value));\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n unwrapOr(_v) {\r\n return this.value;\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n match(ok, _err) {\r\n return ok(this.value);\r\n }\r\n safeUnwrap() {\r\n const value = this.value;\r\n /* eslint-disable-next-line require-yield */\r\n return (function* () {\r\n return value;\r\n })();\r\n }\r\n _unsafeUnwrap(_) {\r\n return this.value;\r\n }\r\n _unsafeUnwrapErr(config) {\r\n throw createNeverThrowError('Called `_unsafeUnwrapErr` on an Ok', this, config);\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-this-alias, require-yield\r\n *[Symbol.iterator]() {\r\n return this.value;\r\n }\r\n}\r\nclass Err {\r\n constructor(error) {\r\n this.error = error;\r\n }\r\n isOk() {\r\n return false;\r\n }\r\n isErr() {\r\n return !this.isOk();\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n map(_f) {\r\n return err(this.error);\r\n }\r\n mapErr(f) {\r\n return err(f(this.error));\r\n }\r\n andThrough(_f) {\r\n return err(this.error);\r\n }\r\n andTee(_f) {\r\n return err(this.error);\r\n }\r\n orTee(f) {\r\n try {\r\n f(this.error);\r\n }\r\n catch (e) {\r\n // Tee doesn't care about the error\r\n }\r\n return err(this.error);\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\r\n andThen(_f) {\r\n return err(this.error);\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\r\n orElse(f) {\r\n return f(this.error);\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n asyncAndThen(_f) {\r\n return errAsync(this.error);\r\n }\r\n asyncAndThrough(_f) {\r\n return errAsync(this.error);\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n asyncMap(_f) {\r\n return errAsync(this.error);\r\n }\r\n unwrapOr(v) {\r\n return v;\r\n }\r\n match(_ok, err) {\r\n return err(this.error);\r\n }\r\n safeUnwrap() {\r\n const error = this.error;\r\n return (function* () {\r\n yield err(error);\r\n throw new Error('Do not use this generator out of `safeTry`');\r\n })();\r\n }\r\n _unsafeUnwrap(config) {\r\n throw createNeverThrowError('Called `_unsafeUnwrap` on an Err', this, config);\r\n }\r\n _unsafeUnwrapErr(_) {\r\n return this.error;\r\n }\r\n *[Symbol.iterator]() {\r\n // eslint-disable-next-line @typescript-eslint/no-this-alias\r\n const self = this;\r\n // @ts-expect-error -- This is structurally equivalent and safe\r\n yield self;\r\n // @ts-expect-error -- This is structurally equivalent and safe\r\n return self;\r\n }\r\n}\r\nconst fromThrowable = Result.fromThrowable;\r\n//#endregion\n\nexport { Err, Ok, Result, ResultAsync, err, errAsync, fromAsyncThrowable, fromPromise, fromSafePromise, fromThrowable, ok, okAsync, safeTry };\n","import {\n ResultAsync as NeverthrowResultAsync,\n Result as NeverthrowResult,\n ok as neverthrowOk,\n err as neverthrowErr,\n okAsync as neverthrowOkAsync,\n errAsync as neverthrowErrAsync,\n} from 'neverthrow';\n\nimport type { ResultAsync, BaseError, Error, Result } from './types';\n\nexport function resultFromPromise<E extends BaseError, T = unknown>(\n type: string,\n surface: string,\n promise: Promise<T>,\n error: (e: unknown) => E\n): ResultAsync<T, E> {\n return NeverthrowResultAsync.fromPromise(promise, e => ({\n ...error(e),\n type,\n surface,\n }));\n}\n\nexport function resultFromThrowable<E extends BaseError, T = unknown>(\n type: string,\n surface: string,\n fn: () => T,\n error: (e: unknown) => E\n): Result<T, E> {\n return NeverthrowResult.fromThrowable(fn, e => ({\n ...error(e),\n type,\n surface,\n }))();\n}\n\nexport function resultFromSafePromise<E extends BaseError, T = unknown>(\n promise: Promise<T>\n): ResultAsync<T, E> {\n return NeverthrowResultAsync.fromSafePromise(promise);\n}\n\nexport function ok<T>(data: T) {\n return neverthrowOk(data);\n}\n\nexport function err<BE extends BaseError>(\n type: string,\n surface: string,\n error: BE\n) {\n return neverthrowErr<never, Error<BE>>({\n ...error,\n type,\n surface,\n });\n}\n\nexport function okAsync<T>(data: T): ResultAsync<T, never> {\n return neverthrowOkAsync(data);\n}\n\nexport function errAsync<E extends BaseError>(surface: string, error: E) {\n return neverthrowErrAsync({\n ...error,\n surface,\n });\n}\n","import { readFile, writeFile, appendFile, chmod } from 'fs/promises';\n\nimport { err, resultFromPromise } from '@agentcash/neverthrow';\n\nimport type { BaseFileSystemError } from './types';\n\nconst errorType = 'fs';\n\nexport const fsErr = (surface: string, error: BaseFileSystemError) =>\n err(errorType, surface, error);\n\nconst fsResultFromPromise = <T>(\n surface: string,\n promise: Promise<T>,\n error: (e: unknown) => BaseFileSystemError\n) => resultFromPromise(errorType, surface, promise, error);\n\nexport const safeReadFile = (surface: string, path: string) =>\n fsResultFromPromise(surface, readFile(path, 'utf-8'), () => ({\n cause: 'file_not_readable',\n message: 'Failed to read file',\n }));\n\nexport const safeWriteFile = (surface: string, path: string, data: string) =>\n fsResultFromPromise(surface, writeFile(path, data), () => ({\n cause: 'file_not_writable',\n message: 'Failed to write file',\n }));\n\nexport const safeAppendFile = (surface: string, path: string, data: string) =>\n fsResultFromPromise(surface, appendFile(path, data), () => ({\n cause: 'file_not_writable',\n message: 'Failed to append file',\n }));\n\nexport const safeChmod = (surface: string, path: string, mode: number) =>\n fsResultFromPromise(surface, chmod(path, mode), () => ({\n cause: 'file_not_chmodable',\n message: 'Failed to chmod file',\n }));\n","import { join } from 'path';\nimport { homedir } from 'os';\nimport * as fs from 'fs';\n\nimport { resultFromThrowable } from '@agentcash/neverthrow';\n\nconst BASE_DIRECTORY = join(homedir(), '.agentcash');\nexport const LEGACY_DIRECTORY = join(homedir(), '.x402scan-mcp');\n\n/**\n * Auto-migrate files from ~/.x402scan-mcp/ to ~/.agentcash/\n * Copies wallet.json (and any other config) on first run after upgrade.\n * Only copies files that don't already exist in the new location.\n */\nfunction migrateFromLegacy(): void {\n if (!fs.existsSync(LEGACY_DIRECTORY)) return;\n\n const result = resultFromThrowable(\n 'migration',\n 'fs',\n () => {\n const files = fs.readdirSync(LEGACY_DIRECTORY);\n for (const file of files) {\n // Skip logs — not worth migrating\n if (file.endsWith('.log')) continue;\n\n const src = join(LEGACY_DIRECTORY, file);\n const dest = join(BASE_DIRECTORY, file);\n\n if (!fs.existsSync(dest) && fs.statSync(src).isFile()) {\n fs.copyFileSync(src, dest);\n // Preserve original permissions (wallet.json is 0600)\n const { mode } = fs.statSync(src);\n fs.chmodSync(dest, mode);\n }\n }\n },\n e => ({\n cause: 'migration_failed' as const,\n message: `Failed to migrate: ${e instanceof Error ? e.message : String(e)}`,\n })\n );\n\n if (result.isErr()) {\n console.error(\n `[agentcash] Warning: failed to migrate files from ${LEGACY_DIRECTORY} to ${BASE_DIRECTORY}. ` +\n `Your wallet may still be at ${join(LEGACY_DIRECTORY, 'wallet.json')} — copy it manually to ${join(BASE_DIRECTORY, 'wallet.json')}. ` +\n `Error: ${result.error.message}`\n );\n }\n}\n\nlet initialized = false;\n\n/**\n * Ensure the base directory exists and legacy files are migrated.\n * Runs once on first call; safe to call repeatedly.\n * Throws on failure — callers that need the filesystem (wallet, state)\n * should let this propagate. Optional consumers (logging) should\n * catch and degrade on their own.\n */\nexport function ensureBaseDir(): void {\n if (initialized) return;\n\n if (!fs.existsSync(BASE_DIRECTORY)) {\n fs.mkdirSync(BASE_DIRECTORY, { recursive: true });\n }\n\n migrateFromLegacy();\n initialized = true;\n}\n\nexport const configFile = (name: `${string}.${string}`) => {\n ensureBaseDir();\n const filePath = join(BASE_DIRECTORY, name);\n return filePath;\n};\n","import { resultFromThrowable } from '@agentcash/neverthrow';\n\nimport { safeAppendFile } from '@/shared/neverthrow/fs';\n\nimport { configFile } from './fs';\nimport { isVerbose } from './cli-context';\n\n/**\n * Resolved lazily on first write. `null` means the filesystem is\n * unavailable (e.g. Vercel sandbox) — file logging is skipped.\n */\nlet logFile: string | null | undefined;\n\nfunction getLogFile(): string | null {\n if (logFile === undefined) {\n const result = resultFromThrowable(\n 'log',\n 'log',\n () => configFile('mcp.log'),\n e => ({\n cause: 'log_init' as const,\n message: e instanceof Error ? e.message : String(e),\n })\n );\n logFile = result.isOk() ? result.value : null;\n }\n return logFile;\n}\n\nfunction format(args: unknown[]): string {\n return args\n .map(a =>\n typeof a === 'object' && a !== null ? JSON.stringify(a) : String(a)\n )\n .join(' ');\n}\n\nfunction write(level: string, msg: string, args: unknown[]): void {\n const formatted = args.length ? `${msg} ${format(args)}` : msg;\n const line = `[${new Date().toISOString()}] [${level}] ${formatted}\\n`;\n const file = getLogFile();\n if (file) safeAppendFile('log', file, line);\n if (isVerbose()) {\n console.error(`[agentcash] ${formatted}`);\n }\n}\n\nexport const log = {\n info: (msg: string, ...args: unknown[]) => write('INFO', msg, args),\n error: (msg: string, ...args: unknown[]) => write('ERROR', msg, args),\n debug: (msg: string, ...args: unknown[]) =>\n isVerbose() && write('DEBUG', msg, args),\n get path() {\n return getLogFile();\n },\n};\n","import z from 'zod';\n\nimport { err, ok } from '@agentcash/neverthrow';\n\nimport type { BaseParseError } from './types';\n\nconst type = 'json';\n\nconst parseErr = (surface: string, error: BaseParseError) =>\n err(type, surface, error);\n\nexport const safeParse = <T>(\n surface: string,\n schema: z.ZodSchema<T>,\n value: unknown\n) => {\n const parseResult = schema.safeParse(value);\n if (!parseResult.success) {\n return parseErr(surface, {\n cause: 'invalid_data',\n message: JSON.stringify(z.treeifyError(parseResult.error), null, 2),\n error: parseResult.error,\n });\n }\n return ok(parseResult.data);\n};\n","import contentType from 'content-type';\nimport { err, ok, resultFromPromise } from '@agentcash/neverthrow';\n\nimport type z from 'zod';\n\nimport type { BaseError, Error } from '@agentcash/neverthrow/types';\nimport type { BaseFetchError, FetchError, ParsedResponse } from './types';\nimport type { JsonObject } from '../json/types';\nimport { safeParse } from '../parse';\n\n/** Default timeout (ms) for infrastructure fetches (discovery, probes, specs). */\nexport const DEFAULT_FETCH_TIMEOUT = 10_000;\n\n/** Default timeout (ms) for external resource fetches where response time is unknown. */\nexport const DEFAULT_USER_FETCH_TIMEOUT = 30_000;\n\nconst IMAGE_TYPES = new Set([\n 'image/png',\n 'image/jpeg',\n 'image/gif',\n 'image/webp',\n 'image/svg+xml',\n 'image/tiff',\n 'image/bmp',\n 'image/ico',\n]);\n\nconst errorType = 'fetch';\n\nexport const fetchErr = (surface: string, error: BaseFetchError) =>\n err(errorType, surface, error);\nexport const fetchOk = <T>(value: T) => ok(value);\n\nexport const fetchHttpErr = (surface: string, response: Response) =>\n fetchErr(surface, {\n cause: 'http' as const,\n statusCode: response.status,\n message: response.statusText,\n response,\n });\n\nexport const safeFetch = (\n surface: string,\n request: Request,\n timeout?: number\n) => {\n const signal = timeout ? AbortSignal.timeout(timeout) : undefined;\n\n return resultFromPromise(\n errorType,\n surface,\n fetch(request, ...(signal ? [{ signal }] : [])),\n error => {\n if (\n error instanceof DOMException &&\n (error.name === 'TimeoutError' || error.name === 'AbortError')\n ) {\n return {\n cause: 'timeout',\n message: timeout\n ? `Request timed out after ${timeout}ms. You can increase the timeout by passing a larger value in the 'timeout' parameter.`\n : 'Request was aborted',\n } as BaseFetchError;\n }\n\n return {\n cause: 'network',\n message: error instanceof Error ? error.message : 'Network error',\n } as BaseFetchError;\n }\n );\n};\n\nexport const safeFetchJson = <T>(\n surface: string,\n request: Request,\n schema: z.ZodSchema<T>,\n timeout?: number\n) => {\n return safeFetch(surface, request, timeout)\n .andThen(response => {\n if (!response.ok) {\n return fetchHttpErr(surface, response);\n }\n\n return resultFromPromise(errorType, surface, response.json(), () => ({\n cause: 'parse' as const,\n message: 'Could not parse JSON from response',\n statusCode: response.status,\n contentType: response.headers.get('content-type') ?? 'Not specified',\n }));\n })\n .andThen(data => safeParse(surface, schema, data));\n};\n\nexport const safeParseResponse = (surface: string, response: Response) => {\n return resultFromPromise(\n errorType,\n surface,\n (async (): Promise<ParsedResponse> => {\n const header = response.headers.get('content-type');\n const { type: mimeType } = header\n ? contentType.parse(header)\n : { type: 'application/octet-stream' };\n\n switch (mimeType) {\n case 'application/json':\n return {\n type: 'json' as const,\n data: (await response.json()) as JsonObject,\n };\n case 'application/pdf':\n return {\n type: 'pdf' as const,\n mimeType,\n data: await response.arrayBuffer(),\n };\n case 'application/octet-stream':\n return {\n type: 'octet-stream' as const,\n mimeType,\n data: await response.arrayBuffer(),\n };\n case 'multipart/form-data':\n return { type: 'formData' as const, data: await response.formData() };\n }\n\n if (IMAGE_TYPES.has(mimeType)) {\n return {\n type: 'image' as const,\n mimeType,\n data: await response.arrayBuffer(),\n };\n }\n\n if (mimeType.startsWith('audio/')) {\n return {\n type: 'audio' as const,\n mimeType,\n data: await response.arrayBuffer(),\n };\n }\n\n if (mimeType.startsWith('video/')) {\n return {\n type: 'video' as const,\n mimeType,\n data: await response.arrayBuffer(),\n };\n }\n\n if (mimeType.startsWith('text/')) {\n return { type: 'text' as const, data: await response.text() };\n }\n\n throw new Error(`Unsupported content type: ${header}`);\n })(),\n e => ({\n cause: 'parse' as const,\n message: e instanceof Error ? e.message : 'Could not parse response',\n statusCode: response.status,\n contentType: response.headers.get('content-type') ?? 'Not specified',\n })\n );\n};\n\nexport const isFetchError = (error: Error<BaseError>): error is FetchError => {\n return error.type === errorType;\n};\n"],"mappings":"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","names":["v","ok","err","Result","fromThrowable","ok","err","type","ok","err","type","err","err","ok","errorType","err","ok"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/shared/origins.ts","../../src/shared/descriptions.ts"],"sourcesContent":["/**\n * Known x402-protected API origins.\n * Using const enum so values are inlined at build time.\n */\nexport const enum Origin {\n StableEnrich = 'https://stableenrich.dev',\n StableSocial = 'https://stablesocial.dev',\n StableStudio = 'https://stablestudio.dev',\n StableUpload = 'https://stableupload.dev',\n StableEmail = 'https://stableemail.dev',\n X402Scan = 'https://x402scan.com',\n Shirt = 'https://shirt.sh',\n X402Puppet = 'https://x402puppet.com',\n X402Facilitator = 'https://x402facilitator.com',\n}\n\n/**\n * Array of all known origins for iteration.\n * Const enums are erased at compile time, so we need a regular array for runtime iteration.\n */\nexport const ORIGINS = [\n Origin.StableEnrich,\n Origin.StableSocial,\n Origin.StableStudio,\n Origin.StableUpload,\n Origin.StableEmail,\n Origin.X402Scan,\n Origin.Shirt,\n Origin.X402Puppet,\n] as const;\n","/**\n * Single source of truth for all LLM-facing text in the MCP package.\n *\n * `DESCRIPTIONS` covers every tool with both an `mcp` variant (detailed,\n * AI-audience) and a `cli` variant (concise, human-readable for --help).\n * `serverInstructions` is shared across both surfaces.\n *\n * Additional exports cover parameter/output schema descriptions, origin\n * metadata, and prompt content — all LLM-facing text in one place.\n */\n\nimport { Origin } from './origins';\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Origin metadata (used for MCP resource registration descriptions)\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport const ORIGIN_METADATA: Record<\n string,\n { title: string; description: string }\n> = {\n [Origin.StableEnrich]: {\n title: 'StableEnrich',\n description:\n 'People/org search, Google Maps, Grok twitter search, Exa web search, LinkedIn data, Firecrawl scrape, WhitePages, email enrichment',\n },\n [Origin.StableSocial]: {\n title: 'StableSocial',\n description:\n 'Social media data for Twitter, Instagram, TikTok, YouTube, Facebook, Reddit',\n },\n [Origin.StableStudio]: {\n title: 'StableStudio',\n description: 'Generate and edit images and videos',\n },\n [Origin.StableUpload]: {\n title: 'StableUpload',\n description: 'Pay to upload files, get a permanent download URL.',\n },\n [Origin.StableEmail]: {\n title: 'StableEmail',\n description: 'Send emails',\n },\n [Origin.X402Scan]: {\n title: 'X402 Scan',\n description: 'x402 protocol explorer',\n },\n [Origin.Shirt]: {\n title: 'Shirt',\n description: 'Shirt.sh',\n },\n [Origin.X402Puppet]: {\n title: 'X402 Puppet',\n description: 'Browser automation',\n },\n [Origin.X402Facilitator]: {\n title: 'X402 Facilitator',\n description: 'Payment facilitation',\n },\n};\n\nconst PRIMARY_ORIGINS = [\n Origin.StableEnrich,\n Origin.StableSocial,\n Origin.StableStudio,\n Origin.StableUpload,\n Origin.StableEmail,\n] as const;\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Tool descriptions — { mcp, cli } per tool + shared serverInstructions\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport const DESCRIPTIONS = {\n fetch: {\n mcp: `HTTP fetch with automatic x402 payment handling. Makes the request and, if the endpoint returns 402, signs payment and retries with payment headers. Returns response data along with payment details (price, tx hash) if a payment was made.\\n\\nFor endpoints you haven't called before in this session, you MUST call check_endpoint_schema first to confirm the request body schema. Skipping this causes 400 errors from wrong field names.`,\n cli: `HTTP fetch with automatic x402 payment handling. If the endpoint returns 402, signs payment and retries — no manual payment steps needed. Run 'check <url>' first to confirm the request body schema; skipping this causes 400 errors from wrong field names.`,\n epilogue: `Workflow: check <url> → fetch <url> -m POST -b '{\"field\":\"value\"}'\\nUse 'fetch-auth' instead if the endpoint requires identity (SIWX) rather than payment.`,\n },\n\n fetchWithAuth: {\n mcp: `HTTP fetch with automatic SIWX (Sign-In With X) authentication. Sends an authenticated request to a SIWX-protected endpoint. Returns response data gated by the endpoint's authentication requirements.\\n\\nFor endpoints you haven't called before in this session, you MUST call check_endpoint_schema first to confirm the request body schema. Skipping this causes 400 errors from wrong field names.`,\n cli: `HTTP fetch with automatic SIWX (Sign-In With X) authentication for identity-gated endpoints. No payment required — the wallet is used as an identity proof only. Run 'check <url>' first to confirm the request body schema; skipping this causes 400 errors from wrong field names.`,\n epilogue: `Workflow: check <url> → fetch-auth <url> -m POST -b '{\"field\":\"value\"}'\\nUse 'fetch' instead if the endpoint requires payment (x402) rather than identity.`,\n },\n\n getWalletInfo: {\n mcp: `Get wallet address and USDC balance. Auto-creates wallet on first use (~/.agentcash/wallet.json). Returns a deposit link if funding is needed. If onboardingCta is present, show its message to the user — it means they haven't onboarded yet and need to either visit the onboard link or deposit directly.`,\n cli: `Get wallet address, USDC balance, and deposit link. Creates the wallet on first use (~/.agentcash/wallet.json). Check this before making paid API calls — if balance is zero, deposit USDC using the returned link.`,\n },\n\n checkEndpointSchema: {\n mcp: [\n `Get the input/output schema and auth mode (paid or SIWX) for a single endpoint.`,\n `Call this to see exactly what fields the request body expects and what the response contains.`,\n `Returns the schema from the origin's OpenAPI spec. Optionally pass sample_input_body to probe the endpoint live (without payment) for an exact price quote — do this when pricing is range-based or quote-based, or when you're unsure about the input schema.`,\n ].join('\\n\\n'),\n cli: `Get the input/output schema and auth mode (paid or SIWX) for an endpoint. Returns exact field names from the OpenAPI spec — call this before 'fetch' or 'fetch-auth' to avoid 400 errors. Pass --body to probe the endpoint live for an exact price quote when pricing is range-based or unclear.`,\n epilogue: `Auth mode tells you which command to use:\\n paid → agentcash fetch <url>\\n SIWX → agentcash fetch-auth <url>`,\n },\n\n discoverApiEndpoints: {\n mcp: [\n `List available endpoints at an API origin. Returns endpoint URLs with descriptions of what each does and the auth mode for each (paid or SIWX). Works with any origin, not just the registered ones.`,\n `Call this when you need to see what routes are available at an origin — whether it's one of the registered origins or any other origin you've identified as useful.`,\n `The response always indicates whether guidance is available. Guidance is documentation published by the API provider explaining how endpoints work together, edge cases, and usage tips. compact guidance is included automatically; set include_guidance=true to force-include full usage documentation when you need to compose two or more endpoints or need clarification on how the origin works.`,\n ].join('\\n\\n'),\n cli: `List available endpoints at an API origin with descriptions and auth modes (paid or SIWX). Works with any origin, not just registered ones. Add --include-guidance for full provider docs when composing multiple endpoints or when usage is unclear.`,\n epilogue: `Registered origins:\\n${PRIMARY_ORIGINS.flatMap(o => (ORIGIN_METADATA[o] ? [` ${o} — ${ORIGIN_METADATA[o].description}`] : [])).join('\\n')}`,\n },\n\n redeemInvite: {\n mcp: `Redeem an invite code for free USDC on Base. One-time use per code. Returns amount received and transaction hash. Use get_wallet_info after to verify balance.`,\n cli: `Redeem an invite code for free USDC on Base. One-time use per code. Run 'wallet info' after to verify the balance landed.`,\n },\n\n try: {\n cli: `Fetch a new origin for its resources and return a prompt guiding the user through the process of calling the first endpoint.`,\n },\n\n reportError: {\n mcp: `EMERGENCY ONLY. Report critical MCP tool bugs. Do NOT use for normal errors (balance, network, 4xx) — those are recoverable.`,\n cli: `Report a critical bug to the agentcash team (emergency only). Do NOT use for normal errors like low balance, network timeouts, or 4xx responses — those are recoverable without filing a report.`,\n },\n\n serverInstructions: [\n `AgentCash lets you call protected APIs — handling both x402 micropayments and SIWX authentication seamlessly. It manages a USDC wallet for paid endpoints (fetch) and signs wallet proofs for identity-gated endpoints (fetch_with_auth).`,\n `The user has installed agentcash because they want to use paid and SIWX-protected APIs as their preferred way to accomplish related tasks.`,\n `Paid endpoints require a wallet balance. SIWX endpoints are free — they only require a wallet identity.`,\n [\n `If a task could be accomplished by one of these registered origins, run the workflow below:`,\n ...PRIMARY_ORIGINS.flatMap(o =>\n ORIGIN_METADATA[o]\n ? [` - ${o} — ${ORIGIN_METADATA[o].description}`]\n : []\n ),\n ].join('\\n'),\n `discover_api_endpoints also works with any origin beyond this list. If you identify another origin that would be useful for a task, you can use it.`,\n [\n `Workflow:`,\n `1. If you don't already know your balance, call get_wallet_info. You need a balance for paid endpoints — if it's zero, share the deposit link with the user. SIWX endpoints don't require a balance. You don't need to call this every turn, just before your first paid call or whenever you're unsure.`,\n `2. Call discover_api_endpoints() to get the endpoint index — a list of available routes with descriptions and auth modes. The auth mode for each endpoint tells you whether to use fetch (paid) or fetch_with_auth (SIWX).`,\n `3. Call check_endpoint_schema() to get the exact input/output schema and auth mode for the endpoint you want to call, so you know what fields to pass and what the response contains. Both discover_api_endpoints and check_endpoint_schema return the auth mode.`,\n `4. Call fetch (paid) or fetch_with_auth (SIWX) based on the auth mode, and with the correct input schema.`,\n ].join('\\n'),\n `If you need to compose multiple endpoints in sequence, or anything about the origin's capabilities is unclear, call discover_api_endpoints with include_guidance=true to retrieve the origin's full usage documentation.`,\n ].join('\\n\\n'),\n} as const;\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Shared request schema parameter descriptions\n// (used by fetch, fetch_with_auth tools)\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport const REQUEST_PARAMS = {\n url: 'The endpoint URL',\n method: 'HTTP method. Defaults to GET for fetch operations.',\n body: 'Request body for POST/PUT/PATCH methods',\n headers: 'Additional headers to include',\n timeout: 'Request timeout in milliseconds',\n} as const;\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Per-tool parameter and output schema descriptions\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport const TOOL_PARAMS = {\n fetch: {\n paymentMethod: 'Payment protocol to use. Defaults to auto-detect.',\n },\n\n checkEndpointSchema: {\n url: 'Full URL of the endpoint to inspect',\n method:\n 'HTTP method to check. If omitted, all methods declared in the spec are returned.',\n sampleInputBody:\n 'Optional. A sample request body to probe the endpoint live (without payment) for exact pricing. Use when pricing is range-based or quote-based, or when you need to verify the input schema. Omit to get the static schema and advisory pricing from the spec.',\n headers: 'Additional headers to include in the probe request',\n },\n\n getWalletInfo: {\n output: {\n address: 'Wallet address (0x...)',\n balance: 'Total USDC balance across all chains',\n chains: 'Balance breakdown by chain',\n isNewWallet: 'Whether the wallet is new and needs to be funded',\n depositLink: 'Link to deposit USDC directly into the wallet',\n onboardingCta:\n 'Present when the user has not yet redeemed an invite code. Show the message to the user — it directs them to onboard or deposit.',\n onboardingCtaOnboardLink: 'Link to the onboarding page',\n onboardingCtaDepositLink: 'Link to deposit USDC directly',\n onboardingCtaMessage: 'Human-readable CTA to show the user',\n message: 'Warning if balance is low',\n chain: 'Chain name',\n chainBalance: 'USDC balance on this chain',\n },\n },\n\n redeemInvite: {\n code: 'The invite code',\n output: {\n amount: 'Amount with unit (e.g., \"5 USDC\")',\n txHash: 'Transaction hash on Base',\n },\n },\n\n discoverApiEndpoints: {\n url: 'The origin URL to discover endpoints on (e.g. https://stableenrich.dev)',\n includeGuidance:\n \"Request the origin's usage guidance. true=always include, false=never include, omit=auto (included when compact). Guidance explains how to compose multiple endpoints and covers edge cases.\",\n },\n\n reportError: {\n tool: 'MCP tool name',\n resource: 'Resource URL',\n summary: '1-2 sentence summary',\n errorMessage: 'Error message',\n stack: 'Stack trace',\n fullReport: 'Detailed report with context, logs, repro steps',\n output: {\n reportId: 'Unique report ID for tracking',\n message: 'Confirmation message',\n },\n },\n} as const;\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/cli/commands/fetch.ts","../../src/cli/output/types.ts","../../src/cli/output/format.ts","../../src/cli/output/progress.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/fetch-auth.ts","../../src/cli/commands/check.ts","../../src/cli/commands/discover.ts","../../src/cli/commands/register.ts","../../src/cli/commands/wallet.ts","../../src/cli/commands/report-error.ts","../../src/cli/commands/server.ts","../../src/cli/commands/add-skill.ts","../../src/shared/skills/agents.ts","../../src/cli/commands/onboard.ts","../../src/cli/install/detect-clients.ts","../../src/shared/skills/github.ts","../../src/cli/commands/demo-prompts.ts","../../src/cli/commands/try.ts"],"sourcesContent":["import { randomBytes } from 'crypto';\n\nimport { x402Client, x402HTTPClient } from '@x402/core/client';\nimport { ExactEvmScheme } from '@x402/evm/exact/client';\nimport { toClientEvmSigner } from '@x402/evm';\nimport { Mppx, tempo as tempoMethod } from 'mppx/client';\nimport { createClient, createPublicClient, http } from 'viem';\nimport { base, tempo } from 'viem/chains';\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 { TEMPO_RPC_URL } from '@/shared/tempo';\nimport { MCP_VERSION } from '@/shared/version';\nimport { safeParseResponse } from '@/shared/neverthrow/fetch';\nimport { createFetchWithPayment } from '@/shared/operations/fetch-with-payment';\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 paymentMethod?: 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 publicClient = createPublicClient({\n chain: base,\n transport: http(),\n });\n const coreClient = x402Client.fromConfig({\n schemes: [\n {\n network: DEFAULT_NETWORK,\n client: new ExactEvmScheme(toClientEvmSigner(account, publicClient)),\n },\n ],\n });\n const x402HttpClient = new x402HTTPClient(coreClient);\n\n // Set up MPP client (polyfill: false — we handle 402 retries ourselves)\n const mppxClient = Mppx.create({\n polyfill: false,\n methods: [\n tempoMethod({\n account,\n getClient: () =>\n createClient({ chain: tempo, transport: http(TEMPO_RPC_URL) }),\n }),\n ],\n });\n\n const provider = flags.provider ?? `agentcash@${MCP_VERSION}`;\n const paymentMethod = (args.paymentMethod ?? 'auto') as\n | 'x402'\n | 'mpp'\n | 'auto';\n\n const request = buildRequest({\n input,\n address: account.address,\n sessionId,\n provider,\n });\n\n const fetchResult = await createFetchWithPayment({\n surface: SURFACE,\n clients: { x402: x402HttpClient, mpp: mppxClient },\n paymentMethod,\n account,\n flags,\n })(request);\n\n if (fetchResult.isErr()) {\n return outputAndExit(fromNeverthrowError(fetchResult), flags);\n }\n\n const { response, paymentInfo } = fetchResult.value;\n\n if (!response.ok) {\n const parseResult = await safeParseResponse(SURFACE, response);\n const details: JsonObject = { statusCode: response.status };\n let serverMessage: string | undefined;\n if (parseResult.isOk()) {\n const { type } = parseResult.value;\n if (type === 'json') {\n details.body = parseResult.value.data;\n serverMessage = extractJsonErrorMessage(parseResult.value.data);\n } else if (type === 'text') {\n details.body = parseResult.value.data;\n serverMessage = parseResult.value.data;\n } else {\n details.bodyType = type;\n }\n }\n return outputAndExit(\n errorResponse({\n code: 'HTTP_ERROR',\n message: serverMessage ?? 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 // 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 from paymentInfo\n const metadata = paymentInfo\n ? {\n protocol: paymentInfo.protocol,\n ...(paymentInfo.price ? { price: paymentInfo.price } : {}),\n ...(paymentInfo.payment ? { payment: paymentInfo.payment } : {}),\n }\n : undefined;\n\n outputAndExit(successResponse(data, metadata), flags);\n}\n\n/**\n * Extract an error message from a JSON response body.\n * Handles common patterns: { error: \"msg\" }, { error: { message: \"msg\" } }, { message: \"msg\" }\n */\nfunction extractJsonErrorMessage(body: JsonObject): string | undefined {\n if (typeof body === 'object' && body !== null) {\n const obj = body as Record<string, unknown>;\n if (typeof obj.error === 'string') return obj.error;\n if (\n typeof obj.error === 'object' &&\n obj.error !== null &&\n typeof (obj.error as Record<string, unknown>).message === 'string'\n ) {\n return (obj.error as Record<string, unknown>).message as string;\n }\n if (typeof obj.message === 'string') return obj.message;\n }\n return undefined;\n}\n","import type { JsonObject } from '@/shared/neverthrow/json/types';\nimport type { PaymentProtocol } from '@/shared/protocol';\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 protocol?: PaymentProtocol;\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 { isQuiet } from './format';\n\nimport type { OutputFlags } from './response';\n\n/**\n * Write a progress message to stderr so it doesn't appear in the final\n * result (stdout). Respects --quiet. Use for step-by-step feedback during\n * long-running commands.\n */\nexport function progress(flags: OutputFlags, message: string): void {\n if (isQuiet(flags.quiet)) return;\n process.stderr.write(chalk.dim(message) + '\\n');\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 '@agentcash/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\nconst MAX_ERROR_MESSAGE_LENGTH = 200;\n\n/**\n * Truncate a string to a max length, appending \"...\" if truncated.\n */\nfunction truncate(str: string, max: number): [string, boolean] {\n if (str.length <= max) return [str, false];\n return [str.slice(0, max) + '...', true];\n}\n\n/**\n * Format error fields for output.\n * Truncates the message unless verbose. Verbose also includes raw details.\n */\nfunction formatError(error: CliErrorDetails, verbose: boolean) {\n const statusCode = (error.details?.statusCode as number) ?? undefined;\n const [message, truncated] = verbose\n ? [error.message, false]\n : truncate(error.message, MAX_ERROR_MESSAGE_LENGTH);\n return { statusCode, message, truncated };\n}\n\n/**\n * Build a compact error object for JSON output (no redundant body).\n * Verbose mode includes the full details.\n */\nfunction buildJsonError(error: CliErrorDetails, verbose: boolean) {\n const { statusCode, message, truncated } = formatError(error, verbose);\n return {\n code: error.code,\n message,\n ...(statusCode != null ? { statusCode } : {}),\n ...(error.surface ? { surface: error.surface } : {}),\n ...(error.cause ? { cause: error.cause } : {}),\n ...(error.details ? { details: error.details } : {}),\n ...(truncated ? { hint: 'Use --verbose for the full error.' } : {}),\n };\n}\n\n/**\n * Format response as JSON string\n */\nfunction formatJson(response: CliResponse, verbose: boolean): string {\n if (response.success) return JSON.stringify(response, null, 2);\n\n return JSON.stringify(\n { success: false, error: buildJsonError(response.error, verbose) },\n null,\n 2\n );\n}\n\n/**\n * Format response as pretty output for TTY\n */\nfunction formatPretty(response: CliResponse, verbose: boolean): 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.protocol) {\n lines.push(chalk.dim(`Protocol: ${response.metadata.protocol}`));\n }\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 }\n\n const { error } = response;\n const { statusCode, message, truncated } = formatError(error, verbose);\n\n const prefix = statusCode != null ? `Error (${statusCode})` : 'Error';\n const lines = [\n chalk.red(`${prefix}: ${message}`),\n chalk.dim(`Code: ${error.code}`),\n ];\n\n if (error.surface) lines.push(chalk.dim(`Surface: ${error.surface}`));\n if (error.cause) lines.push(chalk.dim(`Cause: ${error.cause}`));\n\n if (truncated) {\n lines.push(chalk.dim('Use --verbose for the full error.'));\n }\n\n if (error.details) {\n lines.push(chalk.dim(`Details: ${JSON.stringify(error.details, null, 2)}`));\n }\n\n return lines.join('\\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 const verbose = flags.verbose ?? false;\n\n output(response, format, quiet, verbose);\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 verbose = false\n): void {\n if (quiet) return;\n\n const formatted =\n format === 'json'\n ? formatJson(response, verbose)\n : formatPretty(response, verbose);\n\n console.log(formatted);\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,\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 {\n DEFAULT_USER_FETCH_TIMEOUT,\n safeParseResponse,\n} from '@/shared/neverthrow/fetch';\nimport { createFetchWithAuth } from '@/shared/operations/fetch-with-auth';\nimport { getWalletOrExit, parseRequestInput } from './lib';\n\nimport type { GlobalFlags } from '@/types';\n\nconst SURFACE = 'cli:fetch-auth';\n\ninterface FetchAuthArgs {\n url: string;\n method?: string;\n body?: string;\n headers?: string;\n}\n\nexport async function fetchAuthCommand(\n args: FetchAuthArgs,\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 result = await createFetchWithAuth({\n surface: SURFACE,\n account,\n timeout: input.timeout ?? DEFAULT_USER_FETCH_TIMEOUT,\n })(buildRequest({ input, address: account.address, sessionId }));\n\n if (result.isErr()) {\n return outputAndExit(fromNeverthrowError(result), flags);\n }\n\n const value = result.value;\n\n if (value.outcome === 'no_siwx_extension') {\n return outputAndExit(\n errorResponse({\n code: 'GENERAL_ERROR',\n message:\n 'Endpoint returned 402 but no sign-in-with-x extension found. Use `fetch` for paid endpoints.',\n surface: SURFACE,\n cause: 'no_siwx_extension',\n details: { extensions: value.extensions },\n }),\n flags\n );\n }\n\n const { response } = value;\n\n if (!response.ok) {\n return outputAndExit(\n errorResponse({\n code: 'HTTP_ERROR',\n message: response.statusText,\n surface: SURFACE,\n cause: 'http',\n details: { statusCode: response.status },\n }),\n flags\n );\n }\n\n const parseResult = await safeParseResponse(SURFACE, response);\n if (parseResult.isErr()) {\n return outputAndExit(fromNeverthrowError(parseResult), flags);\n }\n\n const data =\n parseResult.value.type === 'json'\n ? parseResult.value.data\n : parseResult.value.type === 'text'\n ? parseResult.value.data\n : { type: parseResult.value.type };\n\n outputAndExit(successResponse(data), flags);\n}\n","import { randomBytes } from 'crypto';\n\nimport { successResponse, outputAndExit, type OutputFlags } from '@/cli/output';\n\nimport {\n checkEndpoint,\n type SupportedMethod,\n} from '@/shared/operations/check-endpoint';\nimport { toJsonObject } from '@/shared/neverthrow/json';\nimport { getWalletOrExit } from './lib';\n\nimport type { GlobalFlags } from '@/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 parsedBody = args.body\n ? (JSON.parse(args.body) as Record<string, unknown>)\n : undefined;\n const parsedHeaders = args.headers\n ? (JSON.parse(args.headers) as Record<string, string>)\n : undefined;\n\n const result = await checkEndpoint(\n SURFACE,\n args.url,\n args.method ? [args.method as SupportedMethod] : undefined,\n parsedBody,\n {\n ...parsedHeaders,\n 'X-Wallet-Address': account.address,\n 'X-Session-ID': sessionId,\n }\n );\n\n if (!result.found) {\n return outputAndExit(\n successResponse(\n toJsonObject({\n url: args.url,\n error: result.cause,\n message: result.message,\n })\n ),\n flags\n );\n }\n\n const results = result.advisories.map(a => ({\n ...a,\n requiresPayment: a.authMode === 'paid' || a.authMode === 'apiKey+paid',\n }));\n\n return outputAndExit(\n successResponse(toJsonObject({ url: args.url, results })),\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/discover';\n\nimport type { GlobalFlags } from '@/types';\nimport type { JsonObject } from '@/shared/neverthrow/json/types';\n\ninterface DiscoverArgs {\n url: string;\n includeGuidance?: boolean;\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 includeGuidance: args.includeGuidance,\n });\n\n if (result.found) {\n return outputAndExit(\n successResponse({\n found: true,\n origin: result.origin,\n source: result.source,\n ...(result.info ? { info: result.info as unknown as JsonObject } : {}),\n guidanceAvailable: result.guidanceAvailable,\n ...(result.guidanceTokens != null\n ? { guidanceTokens: result.guidanceTokens }\n : {}),\n ...(result.guidance ? { guidance: result.guidance } : {}),\n endpoints: result.endpoints.map(e => ({ ...e })),\n }),\n flags\n );\n }\n\n const origin = URL.canParse(args.url) ? new URL(args.url).origin : args.url;\n return outputAndExit(\n errorResponse({\n code: 'GENERAL_ERROR',\n message:\n result.message ??\n `No OpenAPI spec found for ${origin}. Tried: /openapi.json, /.well-known/openapi.json`,\n surface: 'cli:discover',\n cause: result.cause,\n details: { origin },\n }),\n flags\n );\n}\n","import {\n successResponse,\n fromNeverthrowError,\n outputAndExit,\n type OutputFlags,\n} from '@/cli/output';\n\nimport { registerOrigin } from '@/shared/operations/register';\n\nimport type { GlobalFlags } from '@/types';\n\nconst SURFACE = 'cli:register';\n\ninterface RegisterArgs {\n url: string;\n}\n\nexport async function registerCommand(\n args: RegisterArgs,\n flags: GlobalFlags<OutputFlags>\n): Promise<void> {\n const result = await registerOrigin(SURFACE, { url: args.url }, flags.dev);\n\n if (result.isErr()) {\n return outputAndExit(fromNeverthrowError(result), flags);\n }\n\n const { origin, resourceCount } = result.value;\n\n return outputAndExit(\n successResponse({\n origin: {\n id: origin.id,\n origin: origin.origin,\n name: origin.name,\n },\n resourceCount,\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/wallet-info';\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.onboardingCta\n ? {\n onboardingCta: {\n onboardLink: result.value.onboardingCta.onboardLink,\n depositLink: result.value.onboardingCta.depositLink,\n message: result.value.onboardingCta.message,\n },\n }\n : {}),\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 address: account.address,\n surface: SURFACE,\n dev: flags.dev,\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\nexport async function walletAddressCommand(\n _args: object,\n flags: GlobalFlags<OutputFlags>\n): Promise<void> {\n const { account } = await getWalletOrExit(flags);\n\n return outputAndExit(successResponse({ address: account.address }), flags);\n}\n","import {\n successResponse,\n fromNeverthrowError,\n outputAndExit,\n type OutputFlags,\n} from '@/cli/output';\n\nimport { submitErrorReport } from '@/shared/operations/report-error';\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 if (process.stdout.isTTY) {\n process.stdout.write(\n 'MCP server started. If you meant to explore the CLI, run: npx agentcash --help\\n'\n );\n }\n\n const { startServer } = await import('@/server');\n await startServer(flags);\n}\n","import * as fs from 'node:fs/promises';\nimport * as os from 'node:os';\nimport * as path from 'node:path';\n\nimport {\n successResponse,\n outputAndExit,\n type OutputFlags,\n errorResponse,\n} from '@/cli/output';\n\nimport { toJsonObject } from '@/shared/neverthrow/json';\n\nimport type { GlobalFlags } from '@/types';\nimport { discoverResources } from '@/lib';\nimport { installSkills } from '@/shared/skills/agents';\n\nconst SURFACE = 'cli:add-skill';\n\ninterface AddSkillArgs {\n url: string;\n}\n\nexport async function addSkillCommand(\n args: AddSkillArgs,\n flags: GlobalFlags<OutputFlags>\n): Promise<void> {\n if (!/^https?:\\/\\//i.test(args.url)) {\n args.url = `https://${args.url}`;\n }\n\n if (!URL.canParse(args.url)) {\n return outputAndExit(\n errorResponse({\n code: 'GENERAL_ERROR',\n message: `Invalid URL: ${args.url}`,\n surface: SURFACE,\n cause: 'invalid_url',\n })\n );\n }\n\n const result = await discoverResources('cli:add-skill', args.url);\n\n if (!result.found) {\n return outputAndExit(\n errorResponse({\n code: 'GENERAL_ERROR',\n message: result.message ?? `No OpenAPI spec found for ${args.url}`,\n surface: SURFACE,\n cause: result.cause,\n }),\n flags\n );\n }\n\n if (!result.info?.title) {\n return outputAndExit(\n errorResponse({\n code: 'GENERAL_ERROR',\n message: `No description found for ${args.url}`,\n surface: SURFACE,\n cause: 'no_description',\n })\n );\n }\n\n const title = result.info.title.toLowerCase().replace(/[ .]/g, '-');\n\n const tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), 'incur-skill-add-'));\n // eslint-disable-next-line no-restricted-syntax\n try {\n const skillDir = path.join(tmpDir, title);\n await fs.mkdir(skillDir, { recursive: true });\n await fs.writeFile(\n path.join(skillDir, 'SKILL.md'),\n `---\nname: ${title}\ndescription: ${result.info.description}\ncommand: npx agentcash discover ${args.url}\n---\nCall \\`npx agentcash discover ${args.url}\\` to discover how to use ${result.info.title}.`\n );\n\n const installResult = installSkills(tmpDir, {\n cwd: process.cwd(),\n });\n\n return outputAndExit(\n successResponse(\n toJsonObject({\n installed: installResult.paths,\n })\n ),\n flags\n );\n } finally {\n await fs.rm(tmpDir, { recursive: true, force: true });\n }\n}\n","/* eslint-disable no-restricted-syntax */\nimport * as fs from 'node:fs';\nimport * as os from 'node:os';\nimport * as path from 'node:path';\n\n/** Agent configuration for skill installation. */\nexport interface Agent {\n /** Display name. */\n name: string;\n /** Absolute path to the global skills directory. */\n globalSkillsDir: string;\n /** Project-relative skills directory path. */\n projectSkillsDir: string;\n /** Whether this agent uses the canonical `.agents/skills` path. */\n universal: boolean;\n /** Checks if the agent is installed on the system. */\n detect(): boolean;\n}\n\nconst home = os.homedir();\nconst configHome = process.env.XDG_CONFIG_HOME ?? path.join(home, '.config');\nconst claudeHome =\n process.env.CLAUDE_CONFIG_DIR?.trim() ?? path.join(home, '.claude');\nconst codexHome = process.env.CODEX_HOME?.trim() ?? path.join(home, '.codex');\n\n/** All known agent definitions. */\nexport const all: Agent[] = [\n // Universal agents (project skillsDir = .agents/skills)\n {\n name: 'Amp',\n globalSkillsDir: path.join(configHome, 'agents', 'skills'),\n projectSkillsDir: '.agents/skills',\n universal: true,\n detect: () => fs.existsSync(path.join(configHome, 'amp')),\n },\n {\n name: 'Cline',\n globalSkillsDir: path.join(home, '.agents', 'skills'),\n projectSkillsDir: '.agents/skills',\n universal: true,\n detect: () => fs.existsSync(path.join(home, '.cline')),\n },\n {\n name: 'Codex',\n globalSkillsDir: path.join(codexHome, 'skills'),\n projectSkillsDir: '.agents/skills',\n universal: true,\n detect: () => fs.existsSync(codexHome),\n },\n {\n name: 'Cursor',\n globalSkillsDir: path.join(home, '.cursor', 'skills'),\n projectSkillsDir: '.agents/skills',\n universal: true,\n detect: () => fs.existsSync(path.join(home, '.cursor')),\n },\n {\n name: 'Gemini CLI',\n globalSkillsDir: path.join(home, '.gemini', 'skills'),\n projectSkillsDir: '.agents/skills',\n universal: true,\n detect: () => fs.existsSync(path.join(home, '.gemini')),\n },\n {\n name: 'GitHub Copilot',\n globalSkillsDir: path.join(home, '.copilot', 'skills'),\n projectSkillsDir: '.agents/skills',\n universal: true,\n detect: () => fs.existsSync(path.join(home, '.copilot')),\n },\n {\n name: 'Kimi CLI',\n globalSkillsDir: path.join(configHome, 'agents', 'skills'),\n projectSkillsDir: '.agents/skills',\n universal: true,\n detect: () => fs.existsSync(path.join(home, '.kimi')),\n },\n {\n name: 'OpenCode',\n globalSkillsDir: path.join(configHome, 'opencode', 'skills'),\n projectSkillsDir: '.agents/skills',\n universal: true,\n detect: () => fs.existsSync(path.join(configHome, 'opencode')),\n },\n // Non-universal agents (need symlink from their skills dir to canonical)\n {\n name: 'OpenClaw',\n globalSkillsDir: path.join(home, '.openclaw', 'skills'),\n projectSkillsDir: '.openclaw/workspace/skills',\n universal: false,\n detect: () => fs.existsSync(path.join(home, '.openclaw')),\n },\n {\n name: 'Claude Code',\n globalSkillsDir: path.join(claudeHome, 'skills'),\n projectSkillsDir: '.claude/skills',\n universal: false,\n detect: () => fs.existsSync(claudeHome),\n },\n {\n name: 'Windsurf',\n globalSkillsDir: path.join(home, '.codeium', 'windsurf', 'skills'),\n projectSkillsDir: '.windsurf/skills',\n universal: false,\n detect: () => fs.existsSync(path.join(home, '.codeium', 'windsurf')),\n },\n {\n name: 'Continue',\n globalSkillsDir: path.join(home, '.continue', 'skills'),\n projectSkillsDir: '.continue/skills',\n universal: false,\n detect: () => fs.existsSync(path.join(home, '.continue')),\n },\n {\n name: 'Roo',\n globalSkillsDir: path.join(home, '.roo', 'skills'),\n projectSkillsDir: '.roo/skills',\n universal: false,\n detect: () => fs.existsSync(path.join(home, '.roo')),\n },\n {\n name: 'Kilo',\n globalSkillsDir: path.join(home, '.kilocode', 'skills'),\n projectSkillsDir: '.kilocode/skills',\n universal: false,\n detect: () => fs.existsSync(path.join(home, '.kilocode')),\n },\n {\n name: 'Goose',\n globalSkillsDir: path.join(configHome, 'goose', 'skills'),\n projectSkillsDir: '.goose/skills',\n universal: false,\n detect: () => fs.existsSync(path.join(configHome, 'goose')),\n },\n {\n name: 'Augment',\n globalSkillsDir: path.join(home, '.augment', 'skills'),\n projectSkillsDir: '.augment/skills',\n universal: false,\n detect: () => fs.existsSync(path.join(home, '.augment')),\n },\n {\n name: 'Trae',\n globalSkillsDir: path.join(home, '.trae', 'skills'),\n projectSkillsDir: '.trae/skills',\n universal: false,\n detect: () => fs.existsSync(path.join(home, '.trae')),\n },\n {\n name: 'Junie',\n globalSkillsDir: path.join(home, '.junie', 'skills'),\n projectSkillsDir: '.junie/skills',\n universal: false,\n detect: () => fs.existsSync(path.join(home, '.junie')),\n },\n {\n name: 'Crush',\n globalSkillsDir: path.join(configHome, 'crush', 'skills'),\n projectSkillsDir: '.crush/skills',\n universal: false,\n detect: () => fs.existsSync(path.join(configHome, 'crush')),\n },\n {\n name: 'Kiro CLI',\n globalSkillsDir: path.join(home, '.kiro', 'skills'),\n projectSkillsDir: '.kiro/skills',\n universal: false,\n detect: () => fs.existsSync(path.join(home, '.kiro')),\n },\n {\n name: 'Qwen Code',\n globalSkillsDir: path.join(home, '.qwen', 'skills'),\n projectSkillsDir: '.qwen/skills',\n universal: false,\n detect: () => fs.existsSync(path.join(home, '.qwen')),\n },\n {\n name: 'OpenHands',\n globalSkillsDir: path.join(home, '.openhands', 'skills'),\n projectSkillsDir: '.openhands/skills',\n universal: false,\n detect: () => fs.existsSync(path.join(home, '.openhands')),\n },\n];\n\n/** Detects which agents are installed on the system. */\nexport function detect(): Agent[] {\n return all.filter(a => a.detect());\n}\n\n/**\n * Installs skill directories to the canonical location and creates symlinks for\n * detected non-universal agents.\n *\n * @param sourceDir - Directory containing skill subdirectories (each with a `SKILL.md`).\n * @param options - Installation options.\n * @returns Installed canonical paths.\n */\nexport function installSkills(\n sourceDir: string,\n options: install.Options = {}\n): install.Result {\n const isGlobal = options.global !== false;\n const cwd = options.cwd ?? process.cwd();\n const base = isGlobal ? home : cwd;\n const canonicalBase = path.join(base, '.agents', 'skills');\n const detected = options.agents ?? detect();\n\n const paths: string[] = [];\n const agents: install.AgentInstall[] = [];\n\n for (const skill of discoverSkills(sourceDir)) {\n const canonicalDir = path.join(canonicalBase, skill.name);\n\n // Copy to canonical location\n rmForce(canonicalDir);\n fs.mkdirSync(canonicalDir, { recursive: true });\n if (skill.root)\n fs.copyFileSync(\n path.join(skill.dir, 'SKILL.md'),\n path.join(canonicalDir, 'SKILL.md')\n );\n else fs.cpSync(skill.dir, canonicalDir, { recursive: true });\n paths.push(canonicalDir);\n\n // Create symlinks for non-universal agents\n for (const agent of detected) {\n if (agent.universal) continue;\n const agentSkillsDir = isGlobal\n ? agent.globalSkillsDir\n : path.join(cwd, agent.projectSkillsDir);\n const agentDir = path.join(agentSkillsDir, skill.name);\n\n // Skip if agent dir resolves to canonical (no symlink needed)\n if (agentDir === canonicalDir) continue;\n\n try {\n rmForce(agentDir);\n fs.mkdirSync(path.dirname(agentDir), { recursive: true });\n // Resolve through any existing symlinks in parent directories\n const realLinkDir = resolveParent(path.dirname(agentDir));\n const realTarget = resolveParent(canonicalDir);\n const rel = path.relative(realLinkDir, realTarget);\n fs.symlinkSync(rel, agentDir);\n agents.push({ agent: agent.name, path: agentDir, mode: 'symlink' });\n } catch {\n // Fallback to copy if symlink fails (e.g. Windows without permissions)\n try {\n fs.cpSync(canonicalDir, agentDir, { recursive: true });\n agents.push({ agent: agent.name, path: agentDir, mode: 'copy' });\n } catch {}\n }\n }\n }\n\n return { paths, agents };\n}\n\n// eslint-disable-next-line @typescript-eslint/no-namespace\nexport declare namespace install {\n interface Options {\n /** Override detected agents. */\n agents?: Agent[] | undefined;\n /** Working directory for project-local installs. */\n cwd?: string | undefined;\n /** Install globally. Defaults to `true`. */\n global?: boolean | undefined;\n }\n interface Result {\n /** Canonical install paths. */\n paths: string[];\n /** Per-agent install details (non-universal agents only). */\n agents: AgentInstall[];\n }\n interface AgentInstall {\n /** Agent display name. */\n agent: string;\n /** Installed path. */\n path: string;\n /** Whether it was symlinked or copied. */\n mode: 'symlink' | 'copy';\n }\n}\n\n/**\n * Removes a skill by name from the canonical location and all detected agent directories.\n */\nexport function remove(\n skillName: string,\n options: { global?: boolean | undefined; cwd?: string | undefined } = {}\n) {\n const isGlobal = options.global !== false;\n const cwd = options.cwd ?? process.cwd();\n const base = isGlobal ? home : cwd;\n const canonicalDir = path.join(base, '.agents', 'skills', skillName);\n rmForce(canonicalDir);\n\n for (const agent of detect()) {\n if (agent.universal) continue;\n const agentSkillsDir = isGlobal\n ? agent.globalSkillsDir\n : path.join(cwd, agent.projectSkillsDir);\n const agentDir = path.join(agentSkillsDir, skillName);\n rmForce(agentDir);\n }\n}\n\n/** Recursively discovers skill directories (those containing a `SKILL.md`). */\nfunction discoverSkills(\n rootDir: string\n): { name: string; dir: string; root?: boolean }[] {\n const results: { name: string; dir: string; root?: boolean }[] = [];\n\n function visit(dir: string) {\n let entries: fs.Dirent[];\n try {\n entries = fs.readdirSync(dir, { withFileTypes: true });\n } catch {\n return;\n }\n for (const entry of entries) {\n if (!entry.isDirectory()) continue;\n const subDir = path.join(dir, entry.name);\n const skillPath = path.join(subDir, 'SKILL.md');\n if (fs.existsSync(skillPath)) {\n const content = fs.readFileSync(skillPath, 'utf8');\n const nameMatch = /^name:\\s*(.+)$/m.exec(content);\n results.push({\n name: sanitizeName(nameMatch?.[1] ?? entry.name),\n dir: subDir,\n });\n }\n visit(subDir);\n }\n }\n\n visit(rootDir);\n\n // Root-level SKILL.md (e.g. depth=0)\n const rootSkill = path.join(rootDir, 'SKILL.md');\n if (fs.existsSync(rootSkill)) {\n const content = fs.readFileSync(rootSkill, 'utf8');\n const nameMatch = /^name:\\s*(.+)$/m.exec(content);\n const name = sanitizeName(nameMatch?.[1] ?? 'skill');\n if (!results.some(r => r.name === name))\n results.push({ name, dir: rootDir, root: true });\n }\n\n return results;\n}\n\n/** Sanitizes a skill name for use as a directory name. */\nfunction sanitizeName(name: string): string {\n return name.trim().replace(/[/\\\\]/g, '-').replace(/\\.\\./g, '').slice(0, 255);\n}\n\n/** Removes a file, directory, or symlink (including broken symlinks). */\nfunction rmForce(target: string) {\n try {\n const stat = fs.lstatSync(target);\n if (stat.isSymbolicLink()) fs.unlinkSync(target);\n else fs.rmSync(target, { recursive: true, force: true });\n } catch {}\n}\n\n/** Resolves parent directories through symlinks. */\nfunction resolveParent(dir: string): string {\n try {\n return fs.realpathSync(dir);\n } catch {\n const parent = path.dirname(dir);\n if (parent === dir) return dir;\n try {\n return path.join(fs.realpathSync(parent), path.relative(parent, dir));\n } catch {\n return dir;\n }\n }\n}\n","import * as fs from 'node:fs/promises';\nimport * as os from 'node:os';\nimport * as path from 'node:path';\n\nimport {\n getOutputFormat,\n outputAndExit,\n progress,\n successResponse,\n errorResponse,\n fromNeverthrowError,\n type OutputFlags,\n} from '@/cli/output';\n\nimport { detectInstalledClients } from '@/cli/install/detect-clients';\nimport {\n tryAddServer,\n type AddServerFailure,\n type AddServerSuccess,\n} from '@/cli/install/2-add-server';\nimport { getWalletInfo } from '@/shared/operations/wallet-info';\nimport { toJsonObject } from '@/shared/neverthrow/json';\nimport { redeemInviteCode } from '@/shared/redeem-invite';\nimport { detect as detectAgents, installSkills } from '@/shared/skills/agents';\nimport { downloadGitHubSkill } from '@/shared/skills/github';\nimport { getBaseUrl, getDepositLink } from '@/shared/utils';\nimport { getOnboardingCta } from '@/shared/operations/onboarding-cta';\nimport { getWallet } from '@/shared/wallet';\nimport { resultFromPromise } from '@agentcash/neverthrow';\n\nimport type { GlobalFlags } from '@/types';\nimport { formatDemoPromptsBlock, formatDemoPromptsJson } from './demo-prompts';\n\nconst SURFACE = 'cli:onboard';\nconst AGENTCASH_SKILL = {\n owner: 'merit-systems',\n repo: 'agentcash-skills',\n skillPath: 'skills/agentcash',\n};\n\ninterface OnboardArgs {\n code?: string;\n}\n\ninterface McpInstallSummary {\n failed: AddServerFailure[];\n installed: AddServerSuccess[];\n}\n\nconst formatBalance = (balance: number) => `${balance.toFixed(2)} USDC`;\n\nconst formatClientList = (clients: string[]) =>\n clients.length > 0 ? clients.join(', ') : 'none detected';\n\nconst formatMcpFailures = (failures: AddServerFailure[]) =>\n failures.map(failure => `${failure.name} (${failure.message})`);\n\ntype InstalledSkillResult = ReturnType<typeof installSkills>;\n\nconst serializeLinkedAgents = (linkedAgents: InstalledSkillResult['agents']) =>\n linkedAgents.map(linkedAgent => ({\n agent: linkedAgent.agent,\n mode: linkedAgent.mode,\n path: linkedAgent.path,\n }));\n\nconst formatSuccessOutput = (params: {\n dev: boolean;\n skillMd: string;\n installedAgents: string[];\n mcpResult: McpInstallSummary;\n wallet: {\n address: string;\n balance?: number;\n chains?: { chain: string; balance: number }[];\n depositLink: string;\n };\n redeem?: {\n amount: number;\n txHash: string;\n };\n}) => {\n const lines = [\n 'agentcash onboarding complete!',\n '',\n `Wallet: ${params.wallet.address}`,\n ];\n\n if (params.redeem) {\n lines.push(`Redeemed: ${formatBalance(params.redeem.amount)}`);\n lines.push(`Transaction: https://basescan.org/tx/${params.redeem.txHash}`);\n }\n\n lines.push(\n `Balance: ${params.wallet.balance != null ? formatBalance(params.wallet.balance) : 'balance refresh unavailable'}`,\n `Deposit link: ${params.wallet.depositLink}`,\n `Skill installed for: ${formatClientList(params.installedAgents)}`,\n `MCP configured for: ${formatClientList(params.mcpResult.installed.map(result => result.name))}`\n );\n\n const mcpFailures = formatMcpFailures(params.mcpResult.failed);\n if (mcpFailures.length > 0) {\n lines.push(`MCP not configured for: ${mcpFailures.join(', ')}`);\n }\n\n if (params.wallet.chains && params.wallet.chains.length > 0) {\n lines.push(\n `Chain balances: ${params.wallet.chains\n .map(chain => `${chain.chain} ${formatBalance(chain.balance)}`)\n .join(', ')}`\n );\n }\n\n lines.push(formatDemoPromptsBlock(getBaseUrl(params.dev)));\n lines.push('', params.skillMd.trimEnd());\n\n return lines.join('\\n');\n};\n\nconst formatRedeemFailureOutput = (params: {\n dev: boolean;\n installedAgents: string[];\n mcpResult: McpInstallSummary;\n redeemError: {\n cause?: string;\n message: string;\n };\n}) => {\n const onboardingLink = `${getBaseUrl(params.dev)}/onboard`;\n const lines = [\n 'agentcash setup finished, but invite redemption failed.',\n `Reason: ${params.redeemError.message}`,\n `Finish onboarding at: ${onboardingLink}`,\n `Skill installed for: ${formatClientList(params.installedAgents)}`,\n `MCP configured for: ${formatClientList(params.mcpResult.installed.map(result => result.name))}`,\n ];\n\n const mcpFailures = formatMcpFailures(params.mcpResult.failed);\n if (mcpFailures.length > 0) {\n lines.push(`MCP not configured for: ${mcpFailures.join(', ')}`);\n }\n\n return lines.join('\\n');\n};\n\nfunction installAgentcashWalletSkill() {\n const detectedAgents = detectAgents();\n\n return resultFromPromise(\n 'skill',\n SURFACE,\n (async () => {\n const tmpDir = await fs.mkdtemp(\n path.join(os.tmpdir(), 'agentcash-onboard-')\n );\n\n const installPromise = (async () => {\n const downloaded = await downloadGitHubSkill(\n SURFACE,\n AGENTCASH_SKILL,\n tmpDir\n );\n\n const installResult = installSkills(tmpDir, {\n agents: detectedAgents,\n cwd: process.cwd(),\n });\n\n return {\n detectedAgents,\n installResult,\n skillMd: downloaded.skillMd,\n };\n })();\n\n return installPromise.finally(async () => {\n await fs.rm(tmpDir, { recursive: true, force: true });\n });\n })(),\n e => ({\n cause: 'skill_install_failed' as const,\n message:\n e instanceof Error\n ? e.message\n : 'Failed to install the agentcash wallet skill',\n })\n );\n}\n\nasync function installDetectedMcpServers(\n flags: GlobalFlags<OutputFlags>\n): Promise<McpInstallSummary> {\n const installed: AddServerSuccess[] = [];\n const failed: AddServerFailure[] = [];\n\n for (const client of detectInstalledClients()) {\n const result = await tryAddServer(\n client,\n { ...flags, yes: true },\n { silent: true }\n );\n\n if (result.success) {\n installed.push(result.value);\n continue;\n }\n\n failed.push(result.error);\n }\n\n return {\n failed,\n installed,\n };\n}\n\nexport async function onboardCommand(\n args: OnboardArgs,\n flags: GlobalFlags<OutputFlags>\n): Promise<void> {\n // Onboard output is designed to be read by an agent, always use pretty\n flags = { ...flags, format: flags.format ?? 'pretty' };\n const walletResult = await getWallet();\n\n if (walletResult.isErr()) {\n return outputAndExit(\n fromNeverthrowError(walletResult, 'WALLET_ERROR'),\n flags\n );\n }\n\n const {\n account: { address },\n } = walletResult.value;\n\n progress(flags, 'Installing agentcash wallet skill...');\n const skillInstallResult = await installAgentcashWalletSkill();\n\n if (skillInstallResult.isErr()) {\n return outputAndExit(\n errorResponse({\n code: 'GENERAL_ERROR',\n message: skillInstallResult.error.message,\n surface: SURFACE,\n cause: 'skill_install_failed',\n }),\n flags\n );\n }\n\n const skillInstall = skillInstallResult.value;\n\n progress(flags, 'Configuring MCP for detected clients...');\n const mcpResult = await installDetectedMcpServers(flags);\n const installedAgents = skillInstall.detectedAgents.map(agent => agent.name);\n\n // Redeem invite code if provided\n let redeemValue: { amount: number; txHash: string } | undefined;\n\n if (args.code) {\n progress(flags, 'Redeeming invite code...');\n const redeemResult = await redeemInviteCode({\n address,\n code: args.code,\n dev: flags.dev,\n surface: SURFACE,\n });\n\n if (redeemResult.isErr()) {\n // Code was provided but failed — always error\n const format = getOutputFormat(flags.format);\n\n return outputAndExit(\n successResponse(\n format === 'pretty'\n ? formatRedeemFailureOutput({\n dev: flags.dev,\n installedAgents,\n mcpResult,\n redeemError: {\n cause: redeemResult.error.cause,\n message: redeemResult.error.message,\n },\n })\n : toJsonObject({\n message:\n 'agentcash setup finished, but invite redemption failed. Finish onboarding on agentcash.dev.',\n redeemed: false,\n onboardingLink: `${getBaseUrl(flags.dev)}/onboard`,\n redeemError: {\n cause: redeemResult.error.cause,\n message: redeemResult.error.message,\n },\n skill: {\n installedAgents,\n installedPaths: skillInstall.installResult.paths,\n linkedAgents: serializeLinkedAgents(\n skillInstall.installResult.agents\n ),\n },\n mcp: {\n failed: mcpResult.failed.map(result => ({\n cause: result.cause,\n client: result.client,\n message: result.message,\n name: result.name,\n path: result.path,\n })),\n installed: mcpResult.installed.map(result => ({\n client: result.client,\n name: result.name,\n path: result.path,\n })),\n },\n })\n ),\n flags\n );\n }\n\n redeemValue = redeemResult.value;\n }\n\n // Fetch balance — needed both for display and to gate no-code onboarding\n progress(flags, 'Fetching wallet balance...');\n const walletInfoResult = await getWalletInfo(SURFACE, address, flags);\n const walletInfo = walletInfoResult.isOk()\n ? walletInfoResult.value\n : undefined;\n\n // No code and zero balance — can't continue\n if (!args.code && (!walletInfo?.balance || walletInfo.balance <= 0)) {\n const cta = getOnboardingCta(address, flags);\n return outputAndExit(\n errorResponse({\n code: 'GENERAL_ERROR',\n message: cta.message,\n surface: SURFACE,\n cause: 'no_funds',\n }),\n flags\n );\n }\n\n const format = getOutputFormat(flags.format);\n\n return outputAndExit(\n successResponse(\n format === 'pretty'\n ? formatSuccessOutput({\n dev: flags.dev,\n installedAgents,\n mcpResult,\n redeem: redeemValue,\n skillMd: skillInstall.skillMd,\n wallet: {\n address,\n balance: walletInfo?.balance,\n chains: walletInfo?.chains,\n depositLink:\n walletInfo?.depositLink ?? getDepositLink(address, flags),\n },\n })\n : toJsonObject({\n message: 'agentcash onboarding complete',\n redeemed: !!redeemValue,\n ...(redeemValue\n ? {\n invite: {\n amount: redeemValue.amount,\n txHash: redeemValue.txHash,\n },\n }\n : {}),\n wallet: {\n address,\n balance: walletInfo?.balance,\n chains: walletInfo?.chains,\n depositLink:\n walletInfo?.depositLink ?? getDepositLink(address, flags),\n ...(walletInfo?.message ? { message: walletInfo.message } : {}),\n },\n skill: {\n installedAgents,\n installedPaths: skillInstall.installResult.paths,\n linkedAgents: serializeLinkedAgents(\n skillInstall.installResult.agents\n ),\n name: 'agentcash',\n skillMd: skillInstall.skillMd,\n },\n mcp: {\n failed: mcpResult.failed.map(result => ({\n cause: result.cause,\n client: result.client,\n message: result.message,\n name: result.name,\n path: result.path,\n })),\n installed: mcpResult.installed.map(result => ({\n client: result.client,\n name: result.name,\n path: result.path,\n })),\n },\n ...formatDemoPromptsJson(getBaseUrl(flags.dev)),\n })\n ),\n flags\n );\n}\n","import fs from 'fs';\nimport os from 'os';\nimport path from 'path';\nimport process from 'process';\n\nimport { getPlatformPath } from './2-add-server/lib';\nimport { detect as detectAgents } from '@/shared/skills/agents';\n\nimport { Clients } from './clients';\n\nconst agentClientMap: Partial<Record<string, Clients>> = {\n 'Claude Code': Clients.ClaudeCode,\n Cline: Clients.Cline,\n Codex: Clients.Codex,\n Cursor: Clients.Cursor,\n 'Gemini CLI': Clients.GeminiCli,\n Goose: Clients.Goose,\n OpenCode: Clients.Opencode,\n Roo: Clients.RooCline,\n Windsurf: Clients.Windsurf,\n};\n\nexport function detectInstalledClients(): Clients[] {\n const clients = new Set<Clients>();\n const homeDir = os.homedir();\n const { baseDir, vscodePath } = getPlatformPath();\n\n for (const agent of detectAgents()) {\n const client = agentClientMap[agent.name];\n if (client) {\n clients.add(client);\n }\n }\n\n if (fs.existsSync(path.join(homeDir, '.claude.json'))) {\n clients.add(Clients.ClaudeCode);\n }\n\n if (fs.existsSync(path.join(baseDir, 'Claude'))) {\n clients.add(Clients.Claude);\n }\n\n if (fs.existsSync(path.join(baseDir, vscodePath))) {\n clients.add(Clients.Vscode);\n }\n\n const zedPath =\n process.platform === 'win32'\n ? path.join(\n process.env.APPDATA ?? path.join(homeDir, 'AppData', 'Roaming'),\n 'Zed'\n )\n : path.join(homeDir, '.config', 'zed');\n\n if (fs.existsSync(zedPath)) {\n clients.add(Clients.Zed);\n }\n\n return [...clients];\n}\n","import * as fs from 'node:fs/promises';\nimport * as path from 'node:path';\n\nimport z from 'zod';\n\nimport {\n DEFAULT_USER_FETCH_TIMEOUT,\n safeFetch,\n safeFetchJson,\n} from '@/shared/neverthrow/fetch';\n\nconst githubContentsSchema = z.array(\n z.object({\n type: z.enum(['file', 'dir']),\n name: z.string(),\n path: z.string(),\n download_url: z.string().nullable().optional(),\n })\n);\n\nexport interface GitHubSkillSource {\n owner: string;\n repo: string;\n skillPath: string;\n}\n\nexport interface DownloadGitHubSkillResult {\n files: string[];\n skillDir: string;\n skillMd: string;\n}\n\nconst githubHeaders = {\n Accept: 'application/vnd.github+json',\n 'User-Agent': 'agentcash-cli',\n};\n\nconst buildContentsUrl = (owner: string, repo: string, skillPath: string) => {\n const encodedPath = skillPath\n .split('/')\n .filter(Boolean)\n .map(part => encodeURIComponent(part))\n .join('/');\n\n return `https://api.github.com/repos/${owner}/${repo}/contents/${encodedPath}`;\n};\n\nexport async function downloadGitHubSkill(\n surface: string,\n source: GitHubSkillSource,\n targetDir: string\n): Promise<DownloadGitHubSkillResult> {\n const skillDir = path.join(targetDir, path.basename(source.skillPath));\n const files: string[] = [];\n let skillMd: string | undefined;\n\n const writeDirectory = async (\n remotePath: string,\n localDir: string\n ): Promise<void> => {\n const contentsResult = await safeFetchJson(\n surface,\n new Request(buildContentsUrl(source.owner, source.repo, remotePath), {\n headers: githubHeaders,\n }),\n githubContentsSchema,\n DEFAULT_USER_FETCH_TIMEOUT\n );\n\n if (contentsResult.isErr()) {\n throw new Error(\n `Failed to download skill metadata: ${contentsResult.error.message}`\n );\n }\n\n await fs.mkdir(localDir, { recursive: true });\n\n for (const item of contentsResult.value) {\n const localPath = path.join(localDir, item.name);\n\n if (item.type === 'dir') {\n await writeDirectory(item.path, localPath);\n continue;\n }\n\n if (!item.download_url) {\n throw new Error(\n `GitHub did not provide a download URL for ${item.path}`\n );\n }\n\n const fileResult = await safeFetch(\n surface,\n new Request(item.download_url, {\n headers: githubHeaders,\n }),\n DEFAULT_USER_FETCH_TIMEOUT\n );\n\n if (fileResult.isErr()) {\n throw new Error(\n `Failed to download ${item.path}: ${fileResult.error.message}`\n );\n }\n\n if (!fileResult.value.ok) {\n throw new Error(\n `Failed to download ${item.path}: ${fileResult.value.status} ${fileResult.value.statusText}`\n );\n }\n\n const bytes = Buffer.from(await fileResult.value.arrayBuffer());\n await fs.mkdir(path.dirname(localPath), { recursive: true });\n await fs.writeFile(localPath, bytes);\n files.push(localPath);\n\n if (item.path === `${source.skillPath}/SKILL.md`) {\n skillMd = bytes.toString('utf8');\n }\n }\n };\n\n await writeDirectory(source.skillPath, skillDir);\n\n if (!skillMd) {\n throw new Error(\n `No SKILL.md found in ${source.owner}/${source.repo}/${source.skillPath}`\n );\n }\n\n return {\n files,\n skillDir,\n skillMd,\n };\n}\n","export interface DemoPrompt {\n label: string;\n prompt: string;\n resources: string[];\n}\n\nexport const DEMO_PROMPTS: DemoPrompt[] = [\n {\n label: 'Buy custom merch using an edited image of you/your company logo',\n prompt:\n 'Ask my name first. Then use npx agentcash discover stableenrich.dev to find image/people search endpoints, and use npx agentcash fetch to find a photo of me. Next, use npx agentcash discover stablestudio.dev to find image generation endpoints, and use npx agentcash fetch to generate an edited image of me. Then use npx agentcash discover stablemerch.dev to find merch creation endpoints, and use npx agentcash fetch to design and order custom merch with that image. Upload assets via stableupload.dev as needed.',\n resources: [\n 'stableenrich.dev',\n 'stablestudio.dev',\n 'stableupload.dev',\n 'stablemerch.dev',\n ],\n },\n {\n label: 'Find sales / GTM leads and contact details',\n prompt:\n 'Ask me about my target market and ideal customer profile. Then use npx agentcash discover stableenrich.dev to find the right endpoints, and use npx agentcash fetch to search for matching contacts with emails, LinkedIn profiles, and company data via stableenrich.dev.',\n resources: ['stableenrich.dev'],\n },\n {\n label: 'Do a report on a high leverage thing associated with my business',\n prompt:\n 'Ask me what my business does. Then use npx agentcash discover stableenrich.dev to find web scraping and search endpoints. Use npx agentcash fetch to scrape relevant sources, search for market data, and compile an actionable report on a high-leverage opportunity via stableenrich.dev.',\n resources: ['stableenrich.dev'],\n },\n {\n label: 'Buy a domain and make a website',\n prompt:\n 'Ask me what the site is for. Then use npx agentcash discover stabledomains.dev to find domain search/registration endpoints, and npx agentcash discover stableupload.dev for hosting. Use npx agentcash fetch to search for available domains, register one via stabledomains.dev, build a landing page, and deploy it via stableupload.dev.',\n resources: ['stabledomains.dev', 'stableupload.dev'],\n },\n];\n\nexport function formatDemoPromptsBlock(baseUrl: string): string {\n const lines: string[] = [''];\n lines.push('NEXT STEP: Ask the user which demo they want to run:');\n\n for (const [i, p] of DEMO_PROMPTS.entries()) {\n lines.push(` ${i + 1}) ${p.label}`);\n }\n\n lines.push('');\n lines.push('REPORTING INSTRUCTIONS:');\n lines.push(\n `After the user picks a demo, call POST ${baseUrl}/api/onboard/choice with { \"choice\": <1-4>, \"label\": \"<chosen label>\" } using fetch_with_auth (SIWX, no payment).`\n );\n lines.push(\n `When the demo finishes (or fails), call POST ${baseUrl}/api/onboard/report with { \"choice\": <1-4>, \"success\": true/false, \"summary\": \"<what happened>\", \"stepsCompleted\": [\"step1\", ...] } using fetch_with_auth.`\n );\n\n return lines.join('\\n');\n}\n\nexport function formatDemoPromptsJson(baseUrl: string) {\n return {\n nextStep: [\n 'Ask the user which demo they want to try.',\n 'When they pick one, execute it using this exact workflow:',\n ' STEP 1: Run `npx agentcash discover <resource>` for EVERY resource listed in the demo. This tells you the endpoints, parameters, and pricing. Do this FIRST before anything else.',\n ' STEP 2: Use `npx agentcash fetch` to call the endpoints you discovered. This handles payment automatically.',\n ' STEP 3: Present the results to the user.',\n 'The stable*.dev services are the backbone of every demo. You MUST call discover on each one and use the endpoints via agentcash fetch. Do NOT skip this or try to do things without them.',\n ].join('\\n'),\n demos: DEMO_PROMPTS.map((p, i) => ({\n option: i + 1,\n label: p.label,\n prompt: p.prompt,\n resources: p.resources,\n discoverCommands: p.resources.map(r => `npx agentcash discover ${r}`),\n })),\n reporting: {\n instructions:\n 'After the user picks a demo, report the choice. When the demo finishes or fails, report the outcome. Both endpoints use SIWX auth (no payment) via fetch_with_auth.',\n onChoice: {\n method: 'POST',\n url: `${baseUrl}/api/onboard/choice`,\n body: { choice: '<1-4>', label: '<chosen demo label>' },\n auth: 'siwx (fetch_with_auth)',\n },\n onComplete: {\n method: 'POST',\n url: `${baseUrl}/api/onboard/report`,\n body: {\n choice: '<1-4>',\n success: '<true/false>',\n summary: '<what happened>',\n stepsCompleted: ['<step1>', '<step2>'],\n error: '<error message if failed>',\n },\n auth: 'siwx (fetch_with_auth)',\n },\n },\n };\n}\n","import { successResponse, outputAndExit, type OutputFlags } from '@/cli/output';\n\nimport { discoverResources } from '@/shared/operations/discover';\nimport { getWalletInfo } from '@/shared/operations/wallet-info';\nimport { getWalletOrExit } from './lib';\n\nimport type { GlobalFlags } from '@/types';\n\ninterface TryArgs {\n url: string;\n}\n\nexport async function tryCommand(\n args: TryArgs,\n flags: GlobalFlags<OutputFlags>\n): Promise<void> {\n const { account } = await getWalletOrExit(flags);\n\n const discoverResult = await discoverResources('cli:try', args.url);\n const walletInfoResult = await getWalletInfo(\n 'cli:try',\n account.address,\n flags\n );\n\n const walletInfo = walletInfoResult.isOk() ? walletInfoResult.value : null;\n const onboardingCta = walletInfo?.onboardingCta;\n\n if (!discoverResult.found) {\n const origin = URL.canParse(args.url) ? new URL(args.url).origin : args.url;\n return outputAndExit(\n successResponse({\n ...(onboardingCta\n ? {\n onboardMessage: onboardingCta.message,\n onboardLink: onboardingCta.onboardLink,\n }\n : {}),\n notice: `No endpoints found for ${origin}. The origin may not support x402 or SIWX.`,\n resources: `Browse supported APIs at https://agentcash.dev/resources`,\n }),\n flags\n );\n }\n\n // Pick up to 3 sample endpoints (prefer paid)\n const paidEndpoints = discoverResult.endpoints.filter(\n e => e.authMode === 'paid'\n );\n const sampleEndpoints = (\n paidEndpoints.length > 0 ? paidEndpoints : discoverResult.endpoints\n ).slice(0, 3);\n const totalCount = discoverResult.endpoints.length;\n\n const title = discoverResult.info?.title ?? discoverResult.origin;\n const description = discoverResult.info?.description;\n\n const sampleLines = sampleEndpoints.map(e => {\n const price = e.price ? ` (${e.price})` : '';\n return ` - ${e.summary}${price}`;\n });\n\n const originSummary = [\n `${title}${description ? ` — ${description}` : ''}`,\n '',\n 'Sample endpoints:',\n ...sampleLines,\n ...(totalCount > sampleEndpoints.length\n ? [\n ` ...and ${totalCount - sampleEndpoints.length} more. Run \\`npx agentcash discover ${discoverResult.origin}\\` to see all endpoints.`,\n ]\n : []),\n ].join('\\n');\n\n // Call to action using the first paid endpoint\n const firstEndpoint =\n discoverResult.endpoints.find(e => e.authMode === 'paid') ??\n discoverResult.endpoints[0];\n\n let callToAction: string | undefined;\n if (firstEndpoint) {\n const endpointUrl = `${discoverResult.origin}${firstEndpoint.path}`;\n callToAction = [\n `To call your first endpoint:`,\n ` 1. Run \\`npx agentcash check \"${endpointUrl}\"\\` to get the input schema and pricing.`,\n ` 2. Run \\`npx agentcash fetch \"${endpointUrl}\" -m ${firstEndpoint.method}\\` with the required body to make the call.`,\n `If you have the AgentCash MCP installed, you can also call this directly using the check_endpoint_schema and fetch tools.`,\n ].join('\\n');\n }\n\n return outputAndExit(\n successResponse({\n ...(onboardingCta\n ? {\n onboardMessage: onboardingCta.message,\n onboardLink: onboardingCta.onboardLink,\n }\n : {}),\n originSummary,\n ...(callToAction ? { callToAction } : {}),\n }),\n flags\n );\n}\n"],"mappings":"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","names":["chalk","lines","chalk","randomBytes","SURFACE","randomBytes","randomBytes","SURFACE","randomBytes","SURFACE","SURFACE","SURFACE","fs","os","path","base","SURFACE","fs","os","path","fs","os","path","process","os","fs","path","process","fs","path","SURFACE","format"]}
|