agentcash 0.7.0 → 0.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/run-server.cjs +3 -3
- package/dist/esm/{chunk-3QK7BHAH.js → chunk-4CQDDIKH.js} +2 -2
- package/dist/esm/chunk-DJS6BHZB.js +7 -0
- package/dist/esm/{chunk-JQKHVLOU.js → chunk-RYH3NDAP.js} +3 -3
- package/dist/esm/{chunk-LR7GZYVW.js → chunk-SN5HHMIT.js} +2 -2
- package/dist/esm/{chunk-ZTVQYUIG.js → chunk-UIMAHOSV.js} +3 -3
- package/dist/esm/{commands-RJ3T5JZK.js → commands-W6VY355C.js} +14 -14
- package/dist/esm/commands-W6VY355C.js.map +1 -0
- package/dist/esm/index.js +15 -15
- package/dist/esm/{install-B4XPGX4P.js → install-ZJC2MCDG.js} +3 -3
- package/dist/esm/{server-O7CRHQCI.js → server-3SY6CIP7.js} +6 -6
- package/dist/esm/shared/operations/index.js +3 -3
- package/package.json +1 -1
- package/dist/esm/chunk-XRAGDUHY.js +0 -7
- package/dist/esm/commands-RJ3T5JZK.js.map +0 -1
- /package/dist/esm/{chunk-3QK7BHAH.js.map → chunk-4CQDDIKH.js.map} +0 -0
- /package/dist/esm/{chunk-XRAGDUHY.js.map → chunk-DJS6BHZB.js.map} +0 -0
- /package/dist/esm/{chunk-JQKHVLOU.js.map → chunk-RYH3NDAP.js.map} +0 -0
- /package/dist/esm/{chunk-LR7GZYVW.js.map → chunk-SN5HHMIT.js.map} +0 -0
- /package/dist/esm/{chunk-ZTVQYUIG.js.map → chunk-UIMAHOSV.js.map} +0 -0
- /package/dist/esm/{install-B4XPGX4P.js.map → install-ZJC2MCDG.js.map} +0 -0
- /package/dist/esm/{server-O7CRHQCI.js.map → server-3SY6CIP7.js.map} +0 -0
package/dist/cjs/run-server.cjs
CHANGED
|
@@ -113816,7 +113816,7 @@ var import_path2 = require("path");
|
|
|
113816
113816
|
var import_url = require("url");
|
|
113817
113817
|
function getVersion2() {
|
|
113818
113818
|
if (true) {
|
|
113819
|
-
return "0.7.
|
|
113819
|
+
return "0.7.1";
|
|
113820
113820
|
}
|
|
113821
113821
|
const __dirname3 = (0, import_path2.dirname)((0, import_url.fileURLToPath)(importMetaUrl));
|
|
113822
113822
|
const pkg = JSON.parse(
|
|
@@ -113979,7 +113979,7 @@ var TEMPO_TOKEN_ADDRESS = "0x20c0000000000000000000000000000000000000";
|
|
|
113979
113979
|
|
|
113980
113980
|
// src/shared/mpp-enabled.ts
|
|
113981
113981
|
init_cjs_shims();
|
|
113982
|
-
var isMppEnabled = () => "0.7.
|
|
113982
|
+
var isMppEnabled = () => "0.7.1".includes("-mpp");
|
|
113983
113983
|
|
|
113984
113984
|
// src/shared/operations/fetch-with-payment.ts
|
|
113985
113985
|
init_cjs_shims();
|
|
@@ -117583,7 +117583,7 @@ var import_path3 = require("path");
|
|
|
117583
117583
|
var import_url2 = require("url");
|
|
117584
117584
|
function getVersion3() {
|
|
117585
117585
|
if (true) {
|
|
117586
|
-
return "0.7.
|
|
117586
|
+
return "0.7.1";
|
|
117587
117587
|
}
|
|
117588
117588
|
const __dirname3 = (0, import_path3.dirname)((0, import_url2.fileURLToPath)(importMetaUrl));
|
|
117589
117589
|
const pkg = JSON.parse(
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
} from "./chunk-JNYAKINU.js";
|
|
4
4
|
import {
|
|
5
5
|
DIST_TAG
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-SN5HHMIT.js";
|
|
7
7
|
import {
|
|
8
8
|
wait
|
|
9
9
|
} from "./chunk-DZNSJ2BA.js";
|
|
@@ -626,4 +626,4 @@ export {
|
|
|
626
626
|
tryAddServer,
|
|
627
627
|
addServer
|
|
628
628
|
};
|
|
629
|
-
//# sourceMappingURL=chunk-
|
|
629
|
+
//# sourceMappingURL=chunk-4CQDDIKH.js.map
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
getTempoBalance
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-UIMAHOSV.js";
|
|
4
4
|
import {
|
|
5
5
|
isMppEnabled
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-DJS6BHZB.js";
|
|
7
7
|
import {
|
|
8
8
|
getBalance
|
|
9
9
|
} from "./chunk-YUCA2PQT.js";
|
|
@@ -513,4 +513,4 @@ export {
|
|
|
513
513
|
getInputSchema,
|
|
514
514
|
createFetchWithAuth
|
|
515
515
|
};
|
|
516
|
-
//# sourceMappingURL=chunk-
|
|
516
|
+
//# sourceMappingURL=chunk-RYH3NDAP.js.map
|
|
@@ -4,7 +4,7 @@ import { dirname, join } from "path";
|
|
|
4
4
|
import { fileURLToPath } from "url";
|
|
5
5
|
function getVersion() {
|
|
6
6
|
if (true) {
|
|
7
|
-
return "0.7.
|
|
7
|
+
return "0.7.1";
|
|
8
8
|
}
|
|
9
9
|
const __dirname2 = dirname(fileURLToPath(import.meta.url));
|
|
10
10
|
const pkg = JSON.parse(
|
|
@@ -19,4 +19,4 @@ export {
|
|
|
19
19
|
MCP_VERSION,
|
|
20
20
|
DIST_TAG
|
|
21
21
|
};
|
|
22
|
-
//# sourceMappingURL=chunk-
|
|
22
|
+
//# sourceMappingURL=chunk-SN5HHMIT.js.map
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
isMppEnabled
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-DJS6BHZB.js";
|
|
4
4
|
import {
|
|
5
5
|
MCP_VERSION
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-SN5HHMIT.js";
|
|
7
7
|
import {
|
|
8
8
|
getBalance,
|
|
9
9
|
getBaseUrl,
|
|
@@ -119,4 +119,4 @@ export {
|
|
|
119
119
|
getWalletInfo,
|
|
120
120
|
submitErrorReport
|
|
121
121
|
};
|
|
122
|
-
//# sourceMappingURL=chunk-
|
|
122
|
+
//# sourceMappingURL=chunk-UIMAHOSV.js.map
|
|
@@ -6,13 +6,13 @@ import {
|
|
|
6
6
|
createFetchWithAuth,
|
|
7
7
|
createFetchWithPayment,
|
|
8
8
|
requestSchema
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-RYH3NDAP.js";
|
|
10
10
|
import {
|
|
11
11
|
TEMPO_RPC_URL,
|
|
12
12
|
getWalletInfo,
|
|
13
13
|
submitErrorReport
|
|
14
|
-
} from "./chunk-
|
|
15
|
-
import "./chunk-
|
|
14
|
+
} from "./chunk-UIMAHOSV.js";
|
|
15
|
+
import "./chunk-DJS6BHZB.js";
|
|
16
16
|
import {
|
|
17
17
|
checkEndpoint,
|
|
18
18
|
discoverResources
|
|
@@ -20,11 +20,11 @@ import {
|
|
|
20
20
|
import {
|
|
21
21
|
getPlatformPath,
|
|
22
22
|
tryAddServer
|
|
23
|
-
} from "./chunk-
|
|
23
|
+
} from "./chunk-4CQDDIKH.js";
|
|
24
24
|
import "./chunk-JNYAKINU.js";
|
|
25
25
|
import {
|
|
26
26
|
MCP_VERSION
|
|
27
|
-
} from "./chunk-
|
|
27
|
+
} from "./chunk-SN5HHMIT.js";
|
|
28
28
|
import "./chunk-DZNSJ2BA.js";
|
|
29
29
|
import {
|
|
30
30
|
DEFAULT_NETWORK,
|
|
@@ -636,7 +636,7 @@ async function reportErrorCommand(args, flags) {
|
|
|
636
636
|
|
|
637
637
|
// src/cli/commands/server.ts
|
|
638
638
|
async function serverCommand(flags) {
|
|
639
|
-
const { startServer } = await import("./server-
|
|
639
|
+
const { startServer } = await import("./server-3SY6CIP7.js");
|
|
640
640
|
await startServer(flags);
|
|
641
641
|
}
|
|
642
642
|
|
|
@@ -711,14 +711,14 @@ var all = [
|
|
|
711
711
|
universal: true,
|
|
712
712
|
detect: () => fs.existsSync(path.join(configHome, "opencode"))
|
|
713
713
|
},
|
|
714
|
+
// Non-universal agents (need symlink from their skills dir to canonical)
|
|
714
715
|
{
|
|
715
716
|
name: "OpenClaw",
|
|
716
717
|
globalSkillsDir: path.join(home, ".openclaw", "skills"),
|
|
717
|
-
projectSkillsDir: ".
|
|
718
|
-
universal:
|
|
718
|
+
projectSkillsDir: ".openclaw/workspace/skills",
|
|
719
|
+
universal: false,
|
|
719
720
|
detect: () => fs.existsSync(path.join(home, ".openclaw"))
|
|
720
721
|
},
|
|
721
|
-
// Non-universal agents (need symlink from their skills dir to canonical)
|
|
722
722
|
{
|
|
723
723
|
name: "Claude Code",
|
|
724
724
|
globalSkillsDir: path.join(claudeHome, "skills"),
|
|
@@ -1128,10 +1128,10 @@ async function downloadGitHubSkill(surface, source, targetDir) {
|
|
|
1128
1128
|
// src/cli/commands/onboard.ts
|
|
1129
1129
|
var SURFACE8 = "cli:onboard";
|
|
1130
1130
|
var ONBOARDING_LINK = "https://agentcash.dev/onboard";
|
|
1131
|
-
var
|
|
1131
|
+
var AGENTCASH_SKILL = {
|
|
1132
1132
|
owner: "merit-systems",
|
|
1133
1133
|
repo: "agentcash-skills",
|
|
1134
|
-
skillPath: "skills/agentcash
|
|
1134
|
+
skillPath: "skills/agentcash"
|
|
1135
1135
|
};
|
|
1136
1136
|
var formatBalance = (balance) => `${balance.toFixed(2)} USDC`;
|
|
1137
1137
|
var formatClientList = (clients) => clients.length > 0 ? clients.join(", ") : "none detected";
|
|
@@ -1191,7 +1191,7 @@ function installAgentcashWalletSkill() {
|
|
|
1191
1191
|
const installPromise = (async () => {
|
|
1192
1192
|
const downloaded = await downloadGitHubSkill(
|
|
1193
1193
|
SURFACE8,
|
|
1194
|
-
|
|
1194
|
+
AGENTCASH_SKILL,
|
|
1195
1195
|
tmpDir
|
|
1196
1196
|
);
|
|
1197
1197
|
const installResult = installSkills(tmpDir, {
|
|
@@ -1351,7 +1351,7 @@ async function onboardCommand(args, flags) {
|
|
|
1351
1351
|
linkedAgents: serializeLinkedAgents(
|
|
1352
1352
|
skillInstall.installResult.agents
|
|
1353
1353
|
),
|
|
1354
|
-
name: "agentcash
|
|
1354
|
+
name: "agentcash",
|
|
1355
1355
|
skillMd: skillInstall.skillMd
|
|
1356
1356
|
},
|
|
1357
1357
|
mcp: {
|
|
@@ -1387,4 +1387,4 @@ export {
|
|
|
1387
1387
|
walletInfoCommand,
|
|
1388
1388
|
walletRedeemCommand
|
|
1389
1389
|
};
|
|
1390
|
-
//# sourceMappingURL=commands-
|
|
1390
|
+
//# sourceMappingURL=commands-W6VY355C.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/cli/commands/fetch.ts","../../src/cli/output/types.ts","../../src/cli/output/format.ts","../../src/cli/output/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"],"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.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 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 { getDepositLink } from '@/shared/utils';\nimport { getWallet } from '@/shared/wallet';\nimport { resultFromPromise } from '@agentcash/neverthrow';\n\nimport type { GlobalFlags } from '@/types';\n\nconst SURFACE = 'cli:onboard';\nconst ONBOARDING_LINK = 'https://agentcash.dev/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 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 `Redeemed: ${formatBalance(params.redeem.amount)}`,\n `Balance: ${params.wallet.balance != null ? formatBalance(params.wallet.balance) : 'balance refresh unavailable'}`,\n `Deposit link: ${params.wallet.depositLink}`,\n `Transaction: https://basescan.org/tx/${params.redeem.txHash}`,\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('', params.skillMd.trimEnd());\n\n return lines.join('\\n');\n};\n\nconst formatRedeemFailureOutput = (params: {\n installedAgents: string[];\n mcpResult: McpInstallSummary;\n redeemError: {\n cause?: string;\n message: string;\n };\n}) => {\n const lines = [\n 'agentcash setup finished, but invite redemption failed.',\n `Reason: ${params.redeemError.message}`,\n `Finish onboarding at: ${ONBOARDING_LINK}`,\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 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 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 const installedAgents = skillInstall.detectedAgents.map(agent => agent.name);\n\n if (redeemResult.isErr()) {\n const format = getOutputFormat(flags.format);\n\n return outputAndExit(\n successResponse(\n format === 'pretty'\n ? formatRedeemFailureOutput({\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: ONBOARDING_LINK,\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 progress(flags, 'Fetching wallet balance...');\n const walletInfoResult = await getWalletInfo(SURFACE, address, flags);\n const format = getOutputFormat(flags.format);\n const walletInfo = walletInfoResult.isOk()\n ? walletInfoResult.value\n : undefined;\n\n return outputAndExit(\n successResponse(\n format === 'pretty'\n ? formatSuccessOutput({\n installedAgents,\n mcpResult,\n redeem: redeemResult.value,\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: true,\n invite: {\n amount: redeemResult.value.amount,\n txHash: redeemResult.value.txHash,\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 })\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 OpenClaw: Clients.Openclaw,\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"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,SAAS,mBAAmB;AAE5B,SAAS,YAAY,sBAAsB;AAC3C,SAAS,sBAAsB;AAC/B,SAAS,yBAAyB;AAClC,SAAS,MAAM,SAAS,mBAAmB;AAC3C,SAAS,cAAc,oBAAoB,YAAY;AACvD,SAAS,MAAM,aAAa;;;AC0BrB,IAAM,sBAAmD;AAAA,EAC9D,eAAe;AAAA,EACf,sBAAsB;AAAA,EACtB,eAAe;AAAA,EACf,gBAAgB;AAAA,EAChB,eAAe;AAAA,EACf,cAAc;AAAA,EACd,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,YAAY;AACd;;;ACtCA,SAAS,QAAiB;AACxB,SAAO,QAAQ,OAAO,SAAS;AACjC;AAQO,SAAS,gBAAgB,YAAmC;AACjE,MAAI,eAAe,UAAU,eAAe,UAAU;AACpD,WAAO;AAAA,EACT;AACA,SAAO,MAAM,IAAI,WAAW;AAC9B;AAKO,SAAS,QAAQ,WAA8B;AACpD,SAAO,aAAa;AACtB;;;AC3BA,OAAO,WAAW;AAWX,SAAS,SAAS,OAAoB,SAAuB;AAClE,MAAI,QAAQ,MAAM,KAAK,EAAG;AAC1B,UAAQ,OAAO,MAAM,MAAM,IAAI,OAAO,IAAI,IAAI;AAChD;;;ACdA,OAAOA,YAAW;AA8BX,SAAS,gBACd,MACA,UACoB;AACpB,SAAO;AAAA,IACL,SAAS;AAAA,IACT;AAAA,IACA,GAAI,WAAW,EAAE,SAAS,IAAI,CAAC;AAAA,EACjC;AACF;AAKO,SAAS,cAAc,OAA0C;AACtE,SAAO;AAAA,IACL,SAAS;AAAA,IACT;AAAA,EACF;AACF;AAKO,SAAS,oBACd,KACA,cACkB;AAClB,QAAM,EAAE,MAAM,IAAI;AAClB,QAAM,OAAO,gBAAgB,oBAAoB,MAAM,KAAK;AAE5D,SAAO,cAAc;AAAA,IACnB;AAAA,IACA,SAAS,MAAM;AAAA,IACf,SAAS,MAAM;AAAA,IACf,OAAO,MAAM;AAAA,EACf,CAAC;AACH;AAKA,SAAS,oBAAoB,OAA0B;AACrD,UAAQ,OAAO;AAAA,IACb,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AAAA,IACL,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AAAA,IACL,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AAAA,IACL,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EACX;AACF;AAEA,IAAM,2BAA2B;AAKjC,SAAS,SAAS,KAAa,KAAgC;AAC7D,MAAI,IAAI,UAAU,IAAK,QAAO,CAAC,KAAK,KAAK;AACzC,SAAO,CAAC,IAAI,MAAM,GAAG,GAAG,IAAI,OAAO,IAAI;AACzC;AAMA,SAAS,YAAY,OAAwB,SAAkB;AAC7D,QAAM,aAAc,MAAM,SAAS,cAAyB;AAC5D,QAAM,CAAC,SAAS,SAAS,IAAI,UACzB,CAAC,MAAM,SAAS,KAAK,IACrB,SAAS,MAAM,SAAS,wBAAwB;AACpD,SAAO,EAAE,YAAY,SAAS,UAAU;AAC1C;AAMA,SAAS,eAAe,OAAwB,SAAkB;AAChE,QAAM,EAAE,YAAY,SAAS,UAAU,IAAI,YAAY,OAAO,OAAO;AACrE,SAAO;AAAA,IACL,MAAM,MAAM;AAAA,IACZ;AAAA,IACA,GAAI,cAAc,OAAO,EAAE,WAAW,IAAI,CAAC;AAAA,IAC3C,GAAI,MAAM,UAAU,EAAE,SAAS,MAAM,QAAQ,IAAI,CAAC;AAAA,IAClD,GAAI,MAAM,QAAQ,EAAE,OAAO,MAAM,MAAM,IAAI,CAAC;AAAA,IAC5C,GAAI,MAAM,UAAU,EAAE,SAAS,MAAM,QAAQ,IAAI,CAAC;AAAA,IAClD,GAAI,YAAY,EAAE,MAAM,oCAAoC,IAAI,CAAC;AAAA,EACnE;AACF;AAKA,SAAS,WAAW,UAAuB,SAA0B;AACnE,MAAI,SAAS,QAAS,QAAO,KAAK,UAAU,UAAU,MAAM,CAAC;AAE7D,SAAO,KAAK;AAAA,IACV,EAAE,SAAS,OAAO,OAAO,eAAe,SAAS,OAAO,OAAO,EAAE;AAAA,IACjE;AAAA,IACA;AAAA,EACF;AACF;AAKA,SAAS,aAAa,UAAuB,SAA0B;AACrE,MAAI,SAAS,SAAS;AACpB,UAAMC,SAAkB,CAAC;AAGzB,QAAI,OAAO,SAAS,SAAS,UAAU;AACrC,MAAAA,OAAM,KAAK,SAAS,IAAI;AAAA,IAC1B,OAAO;AACL,MAAAA,OAAM,KAAK,KAAK,UAAU,SAAS,MAAM,MAAM,CAAC,CAAC;AAAA,IACnD;AAGA,QAAI,SAAS,UAAU;AACrB,MAAAA,OAAM,KAAK,EAAE;AACb,UAAI,SAAS,SAAS,UAAU;AAC9B,QAAAA,OAAM,KAAKC,OAAM,IAAI,aAAa,SAAS,SAAS,QAAQ,EAAE,CAAC;AAAA,MACjE;AACA,UAAI,SAAS,SAAS,OAAO;AAC3B,QAAAD,OAAM,KAAKC,OAAM,IAAI,UAAU,SAAS,SAAS,KAAK,EAAE,CAAC;AAAA,MAC3D;AACA,UAAI,SAAS,SAAS,SAAS;AAC7B,cAAM,EAAE,SAAS,gBAAgB,IAAI,SAAS,SAAS;AACvD,QAAAD,OAAM;AAAA,UACJC,OAAM;AAAA,YACJ,YAAY,UAAUA,OAAM,MAAM,QAAG,IAAIA,OAAM,IAAI,QAAG,CAAC,GAAG,kBAAkB,KAAK,gBAAgB,MAAM,GAAG,EAAE,CAAC,SAAS,EAAE;AAAA,UAC1H;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,WAAOD,OAAM,KAAK,IAAI;AAAA,EACxB;AAEA,QAAM,EAAE,MAAM,IAAI;AAClB,QAAM,EAAE,YAAY,SAAS,UAAU,IAAI,YAAY,OAAO,OAAO;AAErE,QAAM,SAAS,cAAc,OAAO,UAAU,UAAU,MAAM;AAC9D,QAAM,QAAQ;AAAA,IACZC,OAAM,IAAI,GAAG,MAAM,KAAK,OAAO,EAAE;AAAA,IACjCA,OAAM,IAAI,SAAS,MAAM,IAAI,EAAE;AAAA,EACjC;AAEA,MAAI,MAAM,QAAS,OAAM,KAAKA,OAAM,IAAI,YAAY,MAAM,OAAO,EAAE,CAAC;AACpE,MAAI,MAAM,MAAO,OAAM,KAAKA,OAAM,IAAI,UAAU,MAAM,KAAK,EAAE,CAAC;AAE9D,MAAI,WAAW;AACb,UAAM,KAAKA,OAAM,IAAI,mCAAmC,CAAC;AAAA,EAC3D;AAEA,MAAI,MAAM,SAAS;AACjB,UAAM,KAAKA,OAAM,IAAI,YAAY,KAAK,UAAU,MAAM,SAAS,MAAM,CAAC,CAAC,EAAE,CAAC;AAAA,EAC5E;AAEA,SAAO,MAAM,KAAK,IAAI;AACxB;AAKO,SAAS,cACd,UACA,QAAqB,CAAC,GACf;AACP,QAAM,SAAS,gBAAgB,MAAM,MAAM;AAC3C,QAAM,QAAQ,QAAQ,MAAM,KAAK;AACjC,QAAM,UAAU,MAAM,WAAW;AAEjC,SAAO,UAAU,QAAQ,OAAO,OAAO;AAEvC,QAAM,WAAW,SAAS,4BAEtB,oBAAoB,SAAS,MAAM,IAAI;AAE3C,UAAQ,KAAK,QAAQ;AACvB;AAKA,SAAS,OACP,UACA,SAAuB,QACvB,QAAQ,OACR,UAAU,OACJ;AACN,MAAI,MAAO;AAEX,QAAM,YACJ,WAAW,SACP,WAAW,UAAU,OAAO,IAC5B,aAAa,UAAU,OAAO;AAEpC,UAAQ,IAAI,SAAS;AACvB;;;ACjOA,eAAsB,gBACpB,OACqB;AACrB,QAAM,eAAe,MAAM,UAAU;AAErC,MAAI,aAAa,MAAM,GAAG;AACxB,kBAAc,oBAAoB,cAAc,cAAc,GAAG,KAAK;AAAA,EACxE;AAEA,SAAO,aAAa;AACtB;;;ACRO,SAAS,kBACd,SACA,MACA,OACc;AAEd,MAAI;AACJ,MAAI,KAAK,MAAM;AACb,UAAM,aAAa,cAAc,SAAS,KAAK,IAAI;AACnD,QAAI,WAAW,MAAM,GAAG;AACtB;AAAA,QACE,cAAc;AAAA,UACZ,MAAM;AAAA,UACN,SAAS,sBAAsB,KAAK,IAAI;AAAA,UACxC;AAAA,UACA,OAAO;AAAA,QACT,CAAC;AAAA,QACD;AAAA,MACF;AAAA,IACF;AACA,iBAAa,WAAW;AAAA,EAC1B;AAGA,MAAI;AACJ,MAAI,KAAK,SAAS;AAChB,UAAM,gBAAgB,cAAc,SAAS,KAAK,OAAO;AACzD,QAAI,cAAc,MAAM,GAAG;AACzB;AAAA,QACE,cAAc;AAAA,UACZ,MAAM;AAAA,UACN,SAAS,yBAAyB,KAAK,OAAO;AAAA,UAC9C;AAAA,UACA,OAAO;AAAA,QACT,CAAC;AAAA,QACD;AAAA,MACF;AAAA,IACF;AAGA,UAAM,eAAe,cAAc;AACnC,QACE,OAAO,iBAAiB,YACxB,iBAAiB,QACjB,MAAM,QAAQ,YAAY,GAC1B;AACA;AAAA,QACE,cAAc;AAAA,UACZ,MAAM;AAAA,UACN,SAAS;AAAA,UACT;AAAA,UACA,OAAO;AAAA,QACT,CAAC;AAAA,QACD;AAAA,MACF;AAAA,IACF;AAGA,UAAM,UAAkC,CAAC;AACzC,eAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,YAAY,GAAG;AACvD,UAAI,OAAO,UAAU,UAAU;AAC7B;AAAA,UACE,cAAc;AAAA,YACZ,MAAM;AAAA,YACN,SAAS,WAAW,GAAG,2BAA2B,OAAO,KAAK;AAAA,YAC9D;AAAA,YACA,OAAO;AAAA,UACT,CAAC;AAAA,UACD;AAAA,QACF;AAAA,MACF;AACA,cAAQ,GAAG,IAAI;AAAA,IACjB;AACA,oBAAgB;AAAA,EAClB;AAGA,QAAM,cAAc,cAAc,UAAU;AAAA,IAC1C,KAAK,KAAK;AAAA,IACV,QAAQ,KAAK;AAAA,IACb,MAAM;AAAA,IACN,SAAS,iBAAiB,CAAC;AAAA,EAC7B,CAAC;AAED,MAAI,CAAC,YAAY,SAAS;AACxB;AAAA,MACE,cAAc;AAAA,QACZ,MAAM;AAAA,QACN,SAAS,YAAY,MAAM;AAAA,QAC3B;AAAA,QACA,OAAO;AAAA,MACT,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAEA,SAAO,YAAY;AACrB;;;AN1FA,IAAM,UAAU;AAUhB,eAAsB,aACpB,MACA,OACe;AACf,QAAM,EAAE,QAAQ,IAAI,MAAM,gBAAgB,KAAK;AAC/C,QAAM,YAAY,YAAY,EAAE,EAAE,SAAS,KAAK;AAEhD,QAAM,QAAQ,kBAAkB,SAAS,MAAM,KAAK;AAGpD,QAAM,eAAe,mBAAmB;AAAA,IACtC,OAAO;AAAA,IACP,WAAW,KAAK;AAAA,EAClB,CAAC;AACD,QAAM,aAAa,WAAW,WAAW;AAAA,IACvC,SAAS;AAAA,MACP;AAAA,QACE,SAAS;AAAA,QACT,QAAQ,IAAI,eAAe,kBAAkB,SAAS,YAAY,CAAC;AAAA,MACrE;AAAA,IACF;AAAA,EACF,CAAC;AACD,QAAM,iBAAiB,IAAI,eAAe,UAAU;AAGpD,QAAM,aAAa,KAAK,OAAO;AAAA,IAC7B,UAAU;AAAA,IACV,SAAS;AAAA,MACP,YAAY;AAAA,QACV;AAAA,QACA,WAAW,MACT,aAAa,EAAE,OAAO,OAAO,WAAW,KAAK,aAAa,EAAE,CAAC;AAAA,MACjE,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AAED,QAAM,WAAW,MAAM,YAAY,aAAa,WAAW;AAC3D,QAAM,gBAAiB,KAAK,iBAAiB;AAK7C,QAAM,UAAU,aAAa;AAAA,IAC3B;AAAA,IACA,SAAS,QAAQ;AAAA,IACjB;AAAA,IACA;AAAA,EACF,CAAC;AAED,QAAM,cAAc,MAAM,uBAAuB;AAAA,IAC/C,SAAS;AAAA,IACT,SAAS,EAAE,MAAM,gBAAgB,KAAK,WAAW;AAAA,IACjD;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC,EAAE,OAAO;AAEV,MAAI,YAAY,MAAM,GAAG;AACvB,WAAO,cAAc,oBAAoB,WAAW,GAAG,KAAK;AAAA,EAC9D;AAEA,QAAM,EAAE,UAAU,YAAY,IAAI,YAAY;AAE9C,MAAI,CAAC,SAAS,IAAI;AAChB,UAAM,cAAc,MAAM,kBAAkB,SAAS,QAAQ;AAC7D,UAAM,UAAsB,EAAE,YAAY,SAAS,OAAO;AAC1D,QAAI;AACJ,QAAI,YAAY,KAAK,GAAG;AACtB,YAAM,EAAE,KAAK,IAAI,YAAY;AAC7B,UAAI,SAAS,QAAQ;AACnB,gBAAQ,OAAO,YAAY,MAAM;AACjC,wBAAgB,wBAAwB,YAAY,MAAM,IAAI;AAAA,MAChE,WAAW,SAAS,QAAQ;AAC1B,gBAAQ,OAAO,YAAY,MAAM;AACjC,wBAAgB,YAAY,MAAM;AAAA,MACpC,OAAO;AACL,gBAAQ,WAAW;AAAA,MACrB;AAAA,IACF;AACA,WAAO;AAAA,MACL,cAAc;AAAA,QACZ,MAAM;AAAA,QACN,SAAS,iBAAiB,SAAS;AAAA,QACnC,SAAS;AAAA,QACT,OAAO;AAAA,QACP;AAAA,MACF,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAEA,QAAM,sBAAsB,MAAM,kBAAkB,SAAS,QAAQ;AACrE,MAAI,oBAAoB,MAAM,GAAG;AAC/B,WAAO,cAAc,oBAAoB,mBAAmB,GAAG,KAAK;AAAA,EACtE;AAGA,QAAM,OACJ,oBAAoB,MAAM,SAAS,SAC/B,oBAAoB,MAAM,OAC1B,oBAAoB,MAAM,SAAS,SACjC,oBAAoB,MAAM,OAC1B,EAAE,MAAM,oBAAoB,MAAM,KAAK;AAG/C,QAAM,WAAW,cACb;AAAA,IACE,UAAU,YAAY;AAAA,IACtB,GAAI,YAAY,QAAQ,EAAE,OAAO,YAAY,MAAM,IAAI,CAAC;AAAA,IACxD,GAAI,YAAY,UAAU,EAAE,SAAS,YAAY,QAAQ,IAAI,CAAC;AAAA,EAChE,IACA;AAEJ,gBAAc,gBAAgB,MAAM,QAAQ,GAAG,KAAK;AACtD;AAMA,SAAS,wBAAwB,MAAsC;AACrE,MAAI,OAAO,SAAS,YAAY,SAAS,MAAM;AAC7C,UAAM,MAAM;AACZ,QAAI,OAAO,IAAI,UAAU,SAAU,QAAO,IAAI;AAC9C,QACE,OAAO,IAAI,UAAU,YACrB,IAAI,UAAU,QACd,OAAQ,IAAI,MAAkC,YAAY,UAC1D;AACA,aAAQ,IAAI,MAAkC;AAAA,IAChD;AACA,QAAI,OAAO,IAAI,YAAY,SAAU,QAAO,IAAI;AAAA,EAClD;AACA,SAAO;AACT;;;AO5KA,SAAS,eAAAC,oBAAmB;AAoB5B,IAAMC,WAAU;AAShB,eAAsB,iBACpB,MACA,OACe;AACf,QAAM,EAAE,QAAQ,IAAI,MAAM,gBAAgB,KAAK;AAC/C,QAAM,YAAYC,aAAY,EAAE,EAAE,SAAS,KAAK;AAEhD,QAAM,QAAQ,kBAAkBD,UAAS,MAAM,KAAK;AAEpD,QAAM,SAAS,MAAM,oBAAoB;AAAA,IACvC,SAASA;AAAA,IACT;AAAA,IACA,SAAS,MAAM,WAAW;AAAA,EAC5B,CAAC,EAAE,aAAa,EAAE,OAAO,SAAS,QAAQ,SAAS,UAAU,CAAC,CAAC;AAE/D,MAAI,OAAO,MAAM,GAAG;AAClB,WAAO,cAAc,oBAAoB,MAAM,GAAG,KAAK;AAAA,EACzD;AAEA,QAAM,QAAQ,OAAO;AAErB,MAAI,MAAM,YAAY,qBAAqB;AACzC,WAAO;AAAA,MACL,cAAc;AAAA,QACZ,MAAM;AAAA,QACN,SACE;AAAA,QACF,SAASA;AAAA,QACT,OAAO;AAAA,QACP,SAAS,EAAE,YAAY,MAAM,WAAW;AAAA,MAC1C,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAEA,QAAM,EAAE,SAAS,IAAI;AAErB,MAAI,CAAC,SAAS,IAAI;AAChB,WAAO;AAAA,MACL,cAAc;AAAA,QACZ,MAAM;AAAA,QACN,SAAS,SAAS;AAAA,QAClB,SAASA;AAAA,QACT,OAAO;AAAA,QACP,SAAS,EAAE,YAAY,SAAS,OAAO;AAAA,MACzC,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAEA,QAAM,cAAc,MAAM,kBAAkBA,UAAS,QAAQ;AAC7D,MAAI,YAAY,MAAM,GAAG;AACvB,WAAO,cAAc,oBAAoB,WAAW,GAAG,KAAK;AAAA,EAC9D;AAEA,QAAM,OACJ,YAAY,MAAM,SAAS,SACvB,YAAY,MAAM,OAClB,YAAY,MAAM,SAAS,SACzB,YAAY,MAAM,OAClB,EAAE,MAAM,YAAY,MAAM,KAAK;AAEvC,gBAAc,gBAAgB,IAAI,GAAG,KAAK;AAC5C;;;AC5FA,SAAS,eAAAE,oBAAmB;AAa5B,IAAMC,WAAU;AAShB,eAAsB,aACpB,MACA,OACe;AACf,QAAM,EAAE,QAAQ,IAAI,MAAM,gBAAgB,KAAK;AAC/C,QAAM,YAAYC,aAAY,EAAE,EAAE,SAAS,KAAK;AAEhD,QAAM,aAAa,KAAK,OACnB,KAAK,MAAM,KAAK,IAAI,IACrB;AACJ,QAAM,gBAAgB,KAAK,UACtB,KAAK,MAAM,KAAK,OAAO,IACxB;AAEJ,QAAM,SAAS,MAAM;AAAA,IACnBD;AAAA,IACA,KAAK;AAAA,IACL,KAAK,SAAS,CAAC,KAAK,MAAyB,IAAI;AAAA,IACjD;AAAA,IACA;AAAA,MACE,GAAG;AAAA,MACH,oBAAoB,QAAQ;AAAA,MAC5B,gBAAgB;AAAA,IAClB;AAAA,EACF;AAEA,MAAI,CAAC,OAAO,OAAO;AACjB,WAAO;AAAA,MACL;AAAA,QACE,aAAa;AAAA,UACX,KAAK,KAAK;AAAA,UACV,OAAO,OAAO;AAAA,UACd,SAAS,OAAO;AAAA,QAClB,CAAC;AAAA,MACH;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,QAAM,UAAU,OAAO,WAAW,IAAI,QAAM;AAAA,IAC1C,GAAG;AAAA,IACH,iBAAiB,EAAE,aAAa,UAAU,EAAE,aAAa;AAAA,EAC3D,EAAE;AAEF,SAAO;AAAA,IACL,gBAAgB,aAAa,EAAE,KAAK,KAAK,KAAK,QAAQ,CAAC,CAAC;AAAA,IACxD;AAAA,EACF;AACF;;;ACrDA,eAAsB,gBACpB,MACA,OACe;AACf,QAAM,SAAS,MAAM,kBAAkB,gBAAgB,KAAK,KAAK;AAAA,IAC/D,iBAAiB,KAAK;AAAA,EACxB,CAAC;AAED,MAAI,OAAO,OAAO;AAChB,WAAO;AAAA,MACL,gBAAgB;AAAA,QACd,OAAO;AAAA,QACP,QAAQ,OAAO;AAAA,QACf,QAAQ,OAAO;AAAA,QACf,GAAI,OAAO,OAAO,EAAE,MAAM,OAAO,KAA8B,IAAI,CAAC;AAAA,QACpE,mBAAmB,OAAO;AAAA,QAC1B,GAAI,OAAO,kBAAkB,OACzB,EAAE,gBAAgB,OAAO,eAAe,IACxC,CAAC;AAAA,QACL,GAAI,OAAO,WAAW,EAAE,UAAU,OAAO,SAAS,IAAI,CAAC;AAAA,QACvD,WAAW,OAAO,UAAU,IAAI,QAAM,EAAE,GAAG,EAAE,EAAE;AAAA,MACjD,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAEA,QAAM,SAAS,IAAI,SAAS,KAAK,GAAG,IAAI,IAAI,IAAI,KAAK,GAAG,EAAE,SAAS,KAAK;AACxE,SAAO;AAAA,IACL,cAAc;AAAA,MACZ,MAAM;AAAA,MACN,SACE,OAAO,WACP,6BAA6B,MAAM;AAAA,MACrC,SAAS;AAAA,MACT,OAAO,OAAO;AAAA,MACd,SAAS,EAAE,OAAO;AAAA,IACpB,CAAC;AAAA,IACD;AAAA,EACF;AACF;;;AC7CA,IAAME,WAAU;AAMhB,eAAsB,gBACpB,MACA,OACe;AACf,QAAM,SAAS,MAAM,eAAeA,UAAS,EAAE,KAAK,KAAK,IAAI,GAAG,MAAM,GAAG;AAEzE,MAAI,OAAO,MAAM,GAAG;AAClB,WAAO,cAAc,oBAAoB,MAAM,GAAG,KAAK;AAAA,EACzD;AAEA,QAAM,EAAE,QAAQ,cAAc,IAAI,OAAO;AAEzC,SAAO;AAAA,IACL,gBAAgB;AAAA,MACd,QAAQ;AAAA,QACN,IAAI,OAAO;AAAA,QACX,QAAQ,OAAO;AAAA,QACf,MAAM,OAAO;AAAA,MACf;AAAA,MACA;AAAA,IACF,CAAC;AAAA,IACD;AAAA,EACF;AACF;;;AC3BA,IAAMC,WAAU;AAEhB,eAAsB,kBACpB,OACA,OACe;AACf,QAAM,EAAE,QAAQ,IAAI,MAAM,gBAAgB,KAAK;AAE/C,QAAM,SAAS,MAAM,cAAcA,UAAS,QAAQ,SAAS,KAAK;AAElE,MAAI,OAAO,MAAM,GAAG;AAClB,WAAO,cAAc,oBAAoB,MAAM,GAAG,KAAK;AAAA,EACzD;AAEA,SAAO;AAAA,IACL,gBAAgB;AAAA,MACd,SAAS,OAAO,MAAM;AAAA,MACtB,SAAS,OAAO,MAAM;AAAA,MACtB,QAAQ,OAAO,MAAM,OAAO,IAAI,QAAM;AAAA,QACpC,OAAO,EAAE;AAAA,QACT,SAAS,EAAE;AAAA,MACb,EAAE;AAAA,MACF,aAAa,OAAO,MAAM;AAAA,MAC1B,aAAa,OAAO,MAAM;AAAA,MAC1B,GAAI,OAAO,MAAM,UAAU,EAAE,SAAS,OAAO,MAAM,QAAQ,IAAI,CAAC;AAAA,IAClE,CAAC;AAAA,IACD;AAAA,EACF;AACF;AAMA,eAAsB,oBACpB,MACA,OACe;AACf,QAAM,EAAE,QAAQ,IAAI,MAAM,gBAAgB,KAAK;AAE/C,QAAM,SAAS,MAAM,iBAAiB;AAAA,IACpC,MAAM,KAAK;AAAA,IACX,SAAS,QAAQ;AAAA,IACjB,SAASA;AAAA,IACT,KAAK,MAAM;AAAA,EACb,CAAC;AAED,MAAI,OAAO,MAAM,GAAG;AAClB,WAAO,cAAc,oBAAoB,MAAM,GAAG,KAAK;AAAA,EACzD;AAEA,SAAO;AAAA,IACL,gBAAgB;AAAA,MACd,UAAU;AAAA,MACV,QAAQ,GAAG,OAAO,MAAM,MAAM;AAAA,MAC9B,QAAQ,OAAO,MAAM;AAAA,IACvB,CAAC;AAAA,IACD;AAAA,EACF;AACF;AAEA,eAAsB,qBACpB,OACA,OACe;AACf,QAAM,EAAE,QAAQ,IAAI,MAAM,gBAAgB,KAAK;AAE/C,SAAO,cAAc,gBAAgB,EAAE,SAAS,QAAQ,QAAQ,CAAC,GAAG,KAAK;AAC3E;;;ACrEA,IAAMC,WAAU;AAWhB,eAAsB,mBACpB,MACA,OACe;AACf,QAAM,EAAE,QAAQ,IAAI,MAAM,gBAAgB,KAAK;AAE/C,QAAM,SAAS,MAAM;AAAA,IACnBA;AAAA,IACA;AAAA,MACE,MAAM,KAAK;AAAA,MACX,SAAS,KAAK;AAAA,MACd,cAAc,KAAK;AAAA,MACnB,UAAU,KAAK;AAAA,MACf,OAAO,KAAK;AAAA,MACZ,YAAY,KAAK;AAAA,IACnB;AAAA,IACA,QAAQ;AAAA,IACR,MAAM;AAAA,EACR;AAEA,MAAI,OAAO,MAAM,GAAG;AAClB,WAAO,cAAc,oBAAoB,MAAM,GAAG,KAAK;AAAA,EACzD;AAEA,SAAO;AAAA,IACL,gBAAgB;AAAA,MACd,WAAW,OAAO,MAAM;AAAA,MACxB,UAAU,OAAO,MAAM;AAAA,MACvB,SAAS,OAAO,MAAM;AAAA,IACxB,CAAC;AAAA,IACD;AAAA,EACF;AACF;;;ACjDA,eAAsB,cAAc,OAAmC;AACrE,QAAM,EAAE,YAAY,IAAI,MAAM,OAAO,sBAAU;AAC/C,QAAM,YAAY,KAAK;AACzB;;;ACTA,YAAYC,SAAQ;AACpB,YAAYC,SAAQ;AACpB,YAAYC,WAAU;;;ACDtB,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY,UAAU;AAgBtB,IAAM,OAAU,WAAQ;AACxB,IAAM,aAAa,QAAQ,IAAI,mBAAwB,UAAK,MAAM,SAAS;AAC3E,IAAM,aACJ,QAAQ,IAAI,mBAAmB,KAAK,KAAU,UAAK,MAAM,SAAS;AACpE,IAAM,YAAY,QAAQ,IAAI,YAAY,KAAK,KAAU,UAAK,MAAM,QAAQ;AAGrE,IAAM,MAAe;AAAA;AAAA,EAE1B;AAAA,IACE,MAAM;AAAA,IACN,iBAAsB,UAAK,YAAY,UAAU,QAAQ;AAAA,IACzD,kBAAkB;AAAA,IAClB,WAAW;AAAA,IACX,QAAQ,MAAS,cAAgB,UAAK,YAAY,KAAK,CAAC;AAAA,EAC1D;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,iBAAsB,UAAK,MAAM,WAAW,QAAQ;AAAA,IACpD,kBAAkB;AAAA,IAClB,WAAW;AAAA,IACX,QAAQ,MAAS,cAAgB,UAAK,MAAM,QAAQ,CAAC;AAAA,EACvD;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,iBAAsB,UAAK,WAAW,QAAQ;AAAA,IAC9C,kBAAkB;AAAA,IAClB,WAAW;AAAA,IACX,QAAQ,MAAS,cAAW,SAAS;AAAA,EACvC;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,iBAAsB,UAAK,MAAM,WAAW,QAAQ;AAAA,IACpD,kBAAkB;AAAA,IAClB,WAAW;AAAA,IACX,QAAQ,MAAS,cAAgB,UAAK,MAAM,SAAS,CAAC;AAAA,EACxD;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,iBAAsB,UAAK,MAAM,WAAW,QAAQ;AAAA,IACpD,kBAAkB;AAAA,IAClB,WAAW;AAAA,IACX,QAAQ,MAAS,cAAgB,UAAK,MAAM,SAAS,CAAC;AAAA,EACxD;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,iBAAsB,UAAK,MAAM,YAAY,QAAQ;AAAA,IACrD,kBAAkB;AAAA,IAClB,WAAW;AAAA,IACX,QAAQ,MAAS,cAAgB,UAAK,MAAM,UAAU,CAAC;AAAA,EACzD;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,iBAAsB,UAAK,YAAY,UAAU,QAAQ;AAAA,IACzD,kBAAkB;AAAA,IAClB,WAAW;AAAA,IACX,QAAQ,MAAS,cAAgB,UAAK,MAAM,OAAO,CAAC;AAAA,EACtD;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,iBAAsB,UAAK,YAAY,YAAY,QAAQ;AAAA,IAC3D,kBAAkB;AAAA,IAClB,WAAW;AAAA,IACX,QAAQ,MAAS,cAAgB,UAAK,YAAY,UAAU,CAAC;AAAA,EAC/D;AAAA;AAAA,EAEA;AAAA,IACE,MAAM;AAAA,IACN,iBAAsB,UAAK,MAAM,aAAa,QAAQ;AAAA,IACtD,kBAAkB;AAAA,IAClB,WAAW;AAAA,IACX,QAAQ,MAAS,cAAgB,UAAK,MAAM,WAAW,CAAC;AAAA,EAC1D;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,iBAAsB,UAAK,YAAY,QAAQ;AAAA,IAC/C,kBAAkB;AAAA,IAClB,WAAW;AAAA,IACX,QAAQ,MAAS,cAAW,UAAU;AAAA,EACxC;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,iBAAsB,UAAK,MAAM,YAAY,YAAY,QAAQ;AAAA,IACjE,kBAAkB;AAAA,IAClB,WAAW;AAAA,IACX,QAAQ,MAAS,cAAgB,UAAK,MAAM,YAAY,UAAU,CAAC;AAAA,EACrE;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,iBAAsB,UAAK,MAAM,aAAa,QAAQ;AAAA,IACtD,kBAAkB;AAAA,IAClB,WAAW;AAAA,IACX,QAAQ,MAAS,cAAgB,UAAK,MAAM,WAAW,CAAC;AAAA,EAC1D;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,iBAAsB,UAAK,MAAM,QAAQ,QAAQ;AAAA,IACjD,kBAAkB;AAAA,IAClB,WAAW;AAAA,IACX,QAAQ,MAAS,cAAgB,UAAK,MAAM,MAAM,CAAC;AAAA,EACrD;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,iBAAsB,UAAK,MAAM,aAAa,QAAQ;AAAA,IACtD,kBAAkB;AAAA,IAClB,WAAW;AAAA,IACX,QAAQ,MAAS,cAAgB,UAAK,MAAM,WAAW,CAAC;AAAA,EAC1D;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,iBAAsB,UAAK,YAAY,SAAS,QAAQ;AAAA,IACxD,kBAAkB;AAAA,IAClB,WAAW;AAAA,IACX,QAAQ,MAAS,cAAgB,UAAK,YAAY,OAAO,CAAC;AAAA,EAC5D;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,iBAAsB,UAAK,MAAM,YAAY,QAAQ;AAAA,IACrD,kBAAkB;AAAA,IAClB,WAAW;AAAA,IACX,QAAQ,MAAS,cAAgB,UAAK,MAAM,UAAU,CAAC;AAAA,EACzD;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,iBAAsB,UAAK,MAAM,SAAS,QAAQ;AAAA,IAClD,kBAAkB;AAAA,IAClB,WAAW;AAAA,IACX,QAAQ,MAAS,cAAgB,UAAK,MAAM,OAAO,CAAC;AAAA,EACtD;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,iBAAsB,UAAK,MAAM,UAAU,QAAQ;AAAA,IACnD,kBAAkB;AAAA,IAClB,WAAW;AAAA,IACX,QAAQ,MAAS,cAAgB,UAAK,MAAM,QAAQ,CAAC;AAAA,EACvD;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,iBAAsB,UAAK,YAAY,SAAS,QAAQ;AAAA,IACxD,kBAAkB;AAAA,IAClB,WAAW;AAAA,IACX,QAAQ,MAAS,cAAgB,UAAK,YAAY,OAAO,CAAC;AAAA,EAC5D;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,iBAAsB,UAAK,MAAM,SAAS,QAAQ;AAAA,IAClD,kBAAkB;AAAA,IAClB,WAAW;AAAA,IACX,QAAQ,MAAS,cAAgB,UAAK,MAAM,OAAO,CAAC;AAAA,EACtD;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,iBAAsB,UAAK,MAAM,SAAS,QAAQ;AAAA,IAClD,kBAAkB;AAAA,IAClB,WAAW;AAAA,IACX,QAAQ,MAAS,cAAgB,UAAK,MAAM,OAAO,CAAC;AAAA,EACtD;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,iBAAsB,UAAK,MAAM,cAAc,QAAQ;AAAA,IACvD,kBAAkB;AAAA,IAClB,WAAW;AAAA,IACX,QAAQ,MAAS,cAAgB,UAAK,MAAM,YAAY,CAAC;AAAA,EAC3D;AACF;AAGO,SAAS,SAAkB;AAChC,SAAO,IAAI,OAAO,OAAK,EAAE,OAAO,CAAC;AACnC;AAUO,SAAS,cACd,WACA,UAA2B,CAAC,GACZ;AAChB,QAAM,WAAW,QAAQ,WAAW;AACpC,QAAM,MAAM,QAAQ,OAAO,QAAQ,IAAI;AACvC,QAAMC,QAAO,WAAW,OAAO;AAC/B,QAAM,gBAAqB,UAAKA,OAAM,WAAW,QAAQ;AACzD,QAAM,WAAW,QAAQ,UAAU,OAAO;AAE1C,QAAM,QAAkB,CAAC;AACzB,QAAM,SAAiC,CAAC;AAExC,aAAW,SAAS,eAAe,SAAS,GAAG;AAC7C,UAAM,eAAoB,UAAK,eAAe,MAAM,IAAI;AAGxD,YAAQ,YAAY;AACpB,IAAG,aAAU,cAAc,EAAE,WAAW,KAAK,CAAC;AAC9C,QAAI,MAAM;AACR,MAAG;AAAA,QACI,UAAK,MAAM,KAAK,UAAU;AAAA,QAC1B,UAAK,cAAc,UAAU;AAAA,MACpC;AAAA,QACG,CAAG,UAAO,MAAM,KAAK,cAAc,EAAE,WAAW,KAAK,CAAC;AAC3D,UAAM,KAAK,YAAY;AAGvB,eAAW,SAAS,UAAU;AAC5B,UAAI,MAAM,UAAW;AACrB,YAAM,iBAAiB,WACnB,MAAM,kBACD,UAAK,KAAK,MAAM,gBAAgB;AACzC,YAAM,WAAgB,UAAK,gBAAgB,MAAM,IAAI;AAGrD,UAAI,aAAa,aAAc;AAE/B,UAAI;AACF,gBAAQ,QAAQ;AAChB,QAAG,aAAe,aAAQ,QAAQ,GAAG,EAAE,WAAW,KAAK,CAAC;AAExD,cAAM,cAAc,cAAmB,aAAQ,QAAQ,CAAC;AACxD,cAAM,aAAa,cAAc,YAAY;AAC7C,cAAM,MAAW,cAAS,aAAa,UAAU;AACjD,QAAG,eAAY,KAAK,QAAQ;AAC5B,eAAO,KAAK,EAAE,OAAO,MAAM,MAAM,MAAM,UAAU,MAAM,UAAU,CAAC;AAAA,MACpE,QAAQ;AAEN,YAAI;AACF,UAAG,UAAO,cAAc,UAAU,EAAE,WAAW,KAAK,CAAC;AACrD,iBAAO,KAAK,EAAE,OAAO,MAAM,MAAM,MAAM,UAAU,MAAM,OAAO,CAAC;AAAA,QACjE,QAAQ;AAAA,QAAC;AAAA,MACX;AAAA,IACF;AAAA,EACF;AAEA,SAAO,EAAE,OAAO,OAAO;AACzB;AAoDA,SAAS,eACP,SACiD;AACjD,QAAM,UAA2D,CAAC;AAElE,WAAS,MAAM,KAAa;AAC1B,QAAI;AACJ,QAAI;AACF,gBAAa,eAAY,KAAK,EAAE,eAAe,KAAK,CAAC;AAAA,IACvD,QAAQ;AACN;AAAA,IACF;AACA,eAAW,SAAS,SAAS;AAC3B,UAAI,CAAC,MAAM,YAAY,EAAG;AAC1B,YAAM,SAAc,UAAK,KAAK,MAAM,IAAI;AACxC,YAAM,YAAiB,UAAK,QAAQ,UAAU;AAC9C,UAAO,cAAW,SAAS,GAAG;AAC5B,cAAM,UAAa,gBAAa,WAAW,MAAM;AACjD,cAAM,YAAY,kBAAkB,KAAK,OAAO;AAChD,gBAAQ,KAAK;AAAA,UACX,MAAM,aAAa,YAAY,CAAC,KAAK,MAAM,IAAI;AAAA,UAC/C,KAAK;AAAA,QACP,CAAC;AAAA,MACH;AACA,YAAM,MAAM;AAAA,IACd;AAAA,EACF;AAEA,QAAM,OAAO;AAGb,QAAM,YAAiB,UAAK,SAAS,UAAU;AAC/C,MAAO,cAAW,SAAS,GAAG;AAC5B,UAAM,UAAa,gBAAa,WAAW,MAAM;AACjD,UAAM,YAAY,kBAAkB,KAAK,OAAO;AAChD,UAAM,OAAO,aAAa,YAAY,CAAC,KAAK,OAAO;AACnD,QAAI,CAAC,QAAQ,KAAK,OAAK,EAAE,SAAS,IAAI;AACpC,cAAQ,KAAK,EAAE,MAAM,KAAK,SAAS,MAAM,KAAK,CAAC;AAAA,EACnD;AAEA,SAAO;AACT;AAGA,SAAS,aAAa,MAAsB;AAC1C,SAAO,KAAK,KAAK,EAAE,QAAQ,UAAU,GAAG,EAAE,QAAQ,SAAS,EAAE,EAAE,MAAM,GAAG,GAAG;AAC7E;AAGA,SAAS,QAAQ,QAAgB;AAC/B,MAAI;AACF,UAAM,OAAU,aAAU,MAAM;AAChC,QAAI,KAAK,eAAe,EAAG,CAAG,cAAW,MAAM;AAAA,QAC1C,CAAG,UAAO,QAAQ,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AAAA,EACzD,QAAQ;AAAA,EAAC;AACX;AAGA,SAAS,cAAc,KAAqB;AAC1C,MAAI;AACF,WAAU,gBAAa,GAAG;AAAA,EAC5B,QAAQ;AACN,UAAM,SAAc,aAAQ,GAAG;AAC/B,QAAI,WAAW,IAAK,QAAO;AAC3B,QAAI;AACF,aAAY,UAAQ,gBAAa,MAAM,GAAQ,cAAS,QAAQ,GAAG,CAAC;AAAA,IACtE,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AACF;;;ADzWA,IAAMC,WAAU;AAMhB,eAAsB,gBACpB,MACA,OACe;AACf,MAAI,CAAC,gBAAgB,KAAK,KAAK,GAAG,GAAG;AACnC,SAAK,MAAM,WAAW,KAAK,GAAG;AAAA,EAChC;AAEA,MAAI,CAAC,IAAI,SAAS,KAAK,GAAG,GAAG;AAC3B,WAAO;AAAA,MACL,cAAc;AAAA,QACZ,MAAM;AAAA,QACN,SAAS,gBAAgB,KAAK,GAAG;AAAA,QACjC,SAASA;AAAA,QACT,OAAO;AAAA,MACT,CAAC;AAAA,IACH;AAAA,EACF;AAEA,QAAM,SAAS,MAAM,kBAAkB,iBAAiB,KAAK,GAAG;AAEhE,MAAI,CAAC,OAAO,OAAO;AACjB,WAAO;AAAA,MACL,cAAc;AAAA,QACZ,MAAM;AAAA,QACN,SAAS,OAAO,WAAW,6BAA6B,KAAK,GAAG;AAAA,QAChE,SAASA;AAAA,QACT,OAAO,OAAO;AAAA,MAChB,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAEA,MAAI,CAAC,OAAO,MAAM,OAAO;AACvB,WAAO;AAAA,MACL,cAAc;AAAA,QACZ,MAAM;AAAA,QACN,SAAS,4BAA4B,KAAK,GAAG;AAAA,QAC7C,SAASA;AAAA,QACT,OAAO;AAAA,MACT,CAAC;AAAA,IACH;AAAA,EACF;AAEA,QAAM,QAAQ,OAAO,KAAK,MAAM,YAAY,EAAE,QAAQ,SAAS,GAAG;AAElE,QAAM,SAAS,MAAS,YAAa,WAAQ,WAAO,GAAG,kBAAkB,CAAC;AAE1E,MAAI;AACF,UAAM,WAAgB,WAAK,QAAQ,KAAK;AACxC,UAAS,UAAM,UAAU,EAAE,WAAW,KAAK,CAAC;AAC5C,UAAS;AAAA,MACF,WAAK,UAAU,UAAU;AAAA,MAC9B;AAAA,QACE,KAAK;AAAA,eACE,OAAO,KAAK,WAAW;AAAA,kCACJ,KAAK,GAAG;AAAA;AAAA,gCAEV,KAAK,GAAG,6BAA6B,OAAO,KAAK,KAAK;AAAA,IAClF;AAEA,UAAM,gBAAgB,cAAc,QAAQ;AAAA,MAC1C,KAAK,QAAQ,IAAI;AAAA,IACnB,CAAC;AAED,WAAO;AAAA,MACL;AAAA,QACE,aAAa;AAAA,UACX,WAAW,cAAc;AAAA,QAC3B,CAAC;AAAA,MACH;AAAA,MACA;AAAA,IACF;AAAA,EACF,UAAE;AACA,UAAS,OAAG,QAAQ,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AAAA,EACtD;AACF;;;AEnGA,YAAYC,SAAQ;AACpB,YAAYC,SAAQ;AACpB,YAAYC,WAAU;;;ACFtB,OAAOC,SAAQ;AACf,OAAOC,SAAQ;AACf,OAAOC,WAAU;AACjB,OAAOC,cAAa;AAOpB,IAAM,iBAAmD;AAAA,EACvD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,SAAS,yBAAoC;AAClD,QAAM,UAAU,oBAAI,IAAa;AACjC,QAAM,UAAUC,IAAG,QAAQ;AAC3B,QAAM,EAAE,SAAS,WAAW,IAAI,gBAAgB;AAEhD,aAAW,SAAS,OAAa,GAAG;AAClC,UAAM,SAAS,eAAe,MAAM,IAAI;AACxC,QAAI,QAAQ;AACV,cAAQ,IAAI,MAAM;AAAA,IACpB;AAAA,EACF;AAEA,MAAIC,IAAG,WAAWC,MAAK,KAAK,SAAS,cAAc,CAAC,GAAG;AACrD,YAAQ,kCAAsB;AAAA,EAChC;AAEA,MAAID,IAAG,WAAWC,MAAK,KAAK,SAAS,QAAQ,CAAC,GAAG;AAC/C,YAAQ,yBAAkB;AAAA,EAC5B;AAEA,MAAID,IAAG,WAAWC,MAAK,KAAK,SAAS,UAAU,CAAC,GAAG;AACjD,YAAQ,yBAAkB;AAAA,EAC5B;AAEA,QAAM,UACJC,SAAQ,aAAa,UACjBD,MAAK;AAAA,IACHC,SAAQ,IAAI,WAAWD,MAAK,KAAK,SAAS,WAAW,SAAS;AAAA,IAC9D;AAAA,EACF,IACAA,MAAK,KAAK,SAAS,WAAW,KAAK;AAEzC,MAAID,IAAG,WAAW,OAAO,GAAG;AAC1B,YAAQ,mBAAe;AAAA,EACzB;AAEA,SAAO,CAAC,GAAG,OAAO;AACpB;;;AC5DA,YAAYG,SAAQ;AACpB,YAAYC,WAAU;AAEtB,OAAO,OAAO;AAQd,IAAM,uBAAuB,EAAE;AAAA,EAC7B,EAAE,OAAO;AAAA,IACP,MAAM,EAAE,KAAK,CAAC,QAAQ,KAAK,CAAC;AAAA,IAC5B,MAAM,EAAE,OAAO;AAAA,IACf,MAAM,EAAE,OAAO;AAAA,IACf,cAAc,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC/C,CAAC;AACH;AAcA,IAAM,gBAAgB;AAAA,EACpB,QAAQ;AAAA,EACR,cAAc;AAChB;AAEA,IAAM,mBAAmB,CAAC,OAAe,MAAc,cAAsB;AAC3E,QAAM,cAAc,UACjB,MAAM,GAAG,EACT,OAAO,OAAO,EACd,IAAI,UAAQ,mBAAmB,IAAI,CAAC,EACpC,KAAK,GAAG;AAEX,SAAO,gCAAgC,KAAK,IAAI,IAAI,aAAa,WAAW;AAC9E;AAEA,eAAsB,oBACpB,SACA,QACA,WACoC;AACpC,QAAM,WAAgB,WAAK,WAAgB,eAAS,OAAO,SAAS,CAAC;AACrE,QAAM,QAAkB,CAAC;AACzB,MAAI;AAEJ,QAAM,iBAAiB,OACrB,YACA,aACkB;AAClB,UAAM,iBAAiB,MAAM;AAAA,MAC3B;AAAA,MACA,IAAI,QAAQ,iBAAiB,OAAO,OAAO,OAAO,MAAM,UAAU,GAAG;AAAA,QACnE,SAAS;AAAA,MACX,CAAC;AAAA,MACD;AAAA,MACA;AAAA,IACF;AAEA,QAAI,eAAe,MAAM,GAAG;AAC1B,YAAM,IAAI;AAAA,QACR,sCAAsC,eAAe,MAAM,OAAO;AAAA,MACpE;AAAA,IACF;AAEA,UAAS,UAAM,UAAU,EAAE,WAAW,KAAK,CAAC;AAE5C,eAAW,QAAQ,eAAe,OAAO;AACvC,YAAM,YAAiB,WAAK,UAAU,KAAK,IAAI;AAE/C,UAAI,KAAK,SAAS,OAAO;AACvB,cAAM,eAAe,KAAK,MAAM,SAAS;AACzC;AAAA,MACF;AAEA,UAAI,CAAC,KAAK,cAAc;AACtB,cAAM,IAAI;AAAA,UACR,6CAA6C,KAAK,IAAI;AAAA,QACxD;AAAA,MACF;AAEA,YAAM,aAAa,MAAM;AAAA,QACvB;AAAA,QACA,IAAI,QAAQ,KAAK,cAAc;AAAA,UAC7B,SAAS;AAAA,QACX,CAAC;AAAA,QACD;AAAA,MACF;AAEA,UAAI,WAAW,MAAM,GAAG;AACtB,cAAM,IAAI;AAAA,UACR,sBAAsB,KAAK,IAAI,KAAK,WAAW,MAAM,OAAO;AAAA,QAC9D;AAAA,MACF;AAEA,UAAI,CAAC,WAAW,MAAM,IAAI;AACxB,cAAM,IAAI;AAAA,UACR,sBAAsB,KAAK,IAAI,KAAK,WAAW,MAAM,MAAM,IAAI,WAAW,MAAM,UAAU;AAAA,QAC5F;AAAA,MACF;AAEA,YAAM,QAAQ,OAAO,KAAK,MAAM,WAAW,MAAM,YAAY,CAAC;AAC9D,YAAS,UAAW,cAAQ,SAAS,GAAG,EAAE,WAAW,KAAK,CAAC;AAC3D,YAAS,cAAU,WAAW,KAAK;AACnC,YAAM,KAAK,SAAS;AAEpB,UAAI,KAAK,SAAS,GAAG,OAAO,SAAS,aAAa;AAChD,kBAAU,MAAM,SAAS,MAAM;AAAA,MACjC;AAAA,IACF;AAAA,EACF;AAEA,QAAM,eAAe,OAAO,WAAW,QAAQ;AAE/C,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI;AAAA,MACR,wBAAwB,OAAO,KAAK,IAAI,OAAO,IAAI,IAAI,OAAO,SAAS;AAAA,IACzE;AAAA,EACF;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;AFxGA,IAAMC,WAAU;AAChB,IAAM,kBAAkB;AACxB,IAAM,kBAAkB;AAAA,EACtB,OAAO;AAAA,EACP,MAAM;AAAA,EACN,WAAW;AACb;AAWA,IAAM,gBAAgB,CAAC,YAAoB,GAAG,QAAQ,QAAQ,CAAC,CAAC;AAEhE,IAAM,mBAAmB,CAAC,YACxB,QAAQ,SAAS,IAAI,QAAQ,KAAK,IAAI,IAAI;AAE5C,IAAM,oBAAoB,CAAC,aACzB,SAAS,IAAI,aAAW,GAAG,QAAQ,IAAI,KAAK,QAAQ,OAAO,GAAG;AAIhE,IAAM,wBAAwB,CAAC,iBAC7B,aAAa,IAAI,kBAAgB;AAAA,EAC/B,OAAO,YAAY;AAAA,EACnB,MAAM,YAAY;AAAA,EAClB,MAAM,YAAY;AACpB,EAAE;AAEJ,IAAM,sBAAsB,CAAC,WAcvB;AACJ,QAAM,QAAQ;AAAA,IACZ;AAAA,IACA;AAAA,IACA,WAAW,OAAO,OAAO,OAAO;AAAA,IAChC,aAAa,cAAc,OAAO,OAAO,MAAM,CAAC;AAAA,IAChD,YAAY,OAAO,OAAO,WAAW,OAAO,cAAc,OAAO,OAAO,OAAO,IAAI,6BAA6B;AAAA,IAChH,iBAAiB,OAAO,OAAO,WAAW;AAAA,IAC1C,wCAAwC,OAAO,OAAO,MAAM;AAAA,IAC5D,wBAAwB,iBAAiB,OAAO,eAAe,CAAC;AAAA,IAChE,uBAAuB,iBAAiB,OAAO,UAAU,UAAU,IAAI,YAAU,OAAO,IAAI,CAAC,CAAC;AAAA,EAChG;AAEA,QAAM,cAAc,kBAAkB,OAAO,UAAU,MAAM;AAC7D,MAAI,YAAY,SAAS,GAAG;AAC1B,UAAM,KAAK,2BAA2B,YAAY,KAAK,IAAI,CAAC,EAAE;AAAA,EAChE;AAEA,MAAI,OAAO,OAAO,UAAU,OAAO,OAAO,OAAO,SAAS,GAAG;AAC3D,UAAM;AAAA,MACJ,mBAAmB,OAAO,OAAO,OAC9B,IAAI,WAAS,GAAG,MAAM,KAAK,IAAI,cAAc,MAAM,OAAO,CAAC,EAAE,EAC7D,KAAK,IAAI,CAAC;AAAA,IACf;AAAA,EACF;AAEA,QAAM,KAAK,IAAI,OAAO,QAAQ,QAAQ,CAAC;AAEvC,SAAO,MAAM,KAAK,IAAI;AACxB;AAEA,IAAM,4BAA4B,CAAC,WAO7B;AACJ,QAAM,QAAQ;AAAA,IACZ;AAAA,IACA,WAAW,OAAO,YAAY,OAAO;AAAA,IACrC,yBAAyB,eAAe;AAAA,IACxC,wBAAwB,iBAAiB,OAAO,eAAe,CAAC;AAAA,IAChE,uBAAuB,iBAAiB,OAAO,UAAU,UAAU,IAAI,YAAU,OAAO,IAAI,CAAC,CAAC;AAAA,EAChG;AAEA,QAAM,cAAc,kBAAkB,OAAO,UAAU,MAAM;AAC7D,MAAI,YAAY,SAAS,GAAG;AAC1B,UAAM,KAAK,2BAA2B,YAAY,KAAK,IAAI,CAAC,EAAE;AAAA,EAChE;AAEA,SAAO,MAAM,KAAK,IAAI;AACxB;AAEA,SAAS,8BAA8B;AACrC,QAAM,iBAAiB,OAAa;AAEpC,SAAO;AAAA,IACL;AAAA,IACAA;AAAA,KACC,YAAY;AACX,YAAM,SAAS,MAAS;AAAA,QACjB,WAAQ,WAAO,GAAG,oBAAoB;AAAA,MAC7C;AAEA,YAAM,kBAAkB,YAAY;AAClC,cAAM,aAAa,MAAM;AAAA,UACvBA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAEA,cAAM,gBAAgB,cAAc,QAAQ;AAAA,UAC1C,QAAQ;AAAA,UACR,KAAK,QAAQ,IAAI;AAAA,QACnB,CAAC;AAED,eAAO;AAAA,UACL;AAAA,UACA;AAAA,UACA,SAAS,WAAW;AAAA,QACtB;AAAA,MACF,GAAG;AAEH,aAAO,eAAe,QAAQ,YAAY;AACxC,cAAS,OAAG,QAAQ,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AAAA,MACtD,CAAC;AAAA,IACH,GAAG;AAAA,IACH,QAAM;AAAA,MACJ,OAAO;AAAA,MACP,SACE,aAAa,QACT,EAAE,UACF;AAAA,IACR;AAAA,EACF;AACF;AAEA,eAAe,0BACb,OAC4B;AAC5B,QAAM,YAAgC,CAAC;AACvC,QAAM,SAA6B,CAAC;AAEpC,aAAW,UAAU,uBAAuB,GAAG;AAC7C,UAAM,SAAS,MAAM;AAAA,MACnB;AAAA,MACA,EAAE,GAAG,OAAO,KAAK,KAAK;AAAA,MACtB,EAAE,QAAQ,KAAK;AAAA,IACjB;AAEA,QAAI,OAAO,SAAS;AAClB,gBAAU,KAAK,OAAO,KAAK;AAC3B;AAAA,IACF;AAEA,WAAO,KAAK,OAAO,KAAK;AAAA,EAC1B;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;AAEA,eAAsB,eACpB,MACA,OACe;AACf,QAAM,eAAe,MAAM,UAAU;AAErC,MAAI,aAAa,MAAM,GAAG;AACxB,WAAO;AAAA,MACL,oBAAoB,cAAc,cAAc;AAAA,MAChD;AAAA,IACF;AAAA,EACF;AAEA,QAAM;AAAA,IACJ,SAAS,EAAE,QAAQ;AAAA,EACrB,IAAI,aAAa;AAEjB,WAAS,OAAO,sCAAsC;AACtD,QAAM,qBAAqB,MAAM,4BAA4B;AAE7D,MAAI,mBAAmB,MAAM,GAAG;AAC9B,WAAO;AAAA,MACL,cAAc;AAAA,QACZ,MAAM;AAAA,QACN,SAAS,mBAAmB,MAAM;AAAA,QAClC,SAASA;AAAA,QACT,OAAO;AAAA,MACT,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAEA,QAAM,eAAe,mBAAmB;AAExC,WAAS,OAAO,yCAAyC;AACzD,QAAM,YAAY,MAAM,0BAA0B,KAAK;AACvD,WAAS,OAAO,0BAA0B;AAC1C,QAAM,eAAe,MAAM,iBAAiB;AAAA,IAC1C;AAAA,IACA,MAAM,KAAK;AAAA,IACX,KAAK,MAAM;AAAA,IACX,SAASA;AAAA,EACX,CAAC;AAED,QAAM,kBAAkB,aAAa,eAAe,IAAI,WAAS,MAAM,IAAI;AAE3E,MAAI,aAAa,MAAM,GAAG;AACxB,UAAMC,UAAS,gBAAgB,MAAM,MAAM;AAE3C,WAAO;AAAA,MACL;AAAA,QACEA,YAAW,WACP,0BAA0B;AAAA,UACxB;AAAA,UACA;AAAA,UACA,aAAa;AAAA,YACX,OAAO,aAAa,MAAM;AAAA,YAC1B,SAAS,aAAa,MAAM;AAAA,UAC9B;AAAA,QACF,CAAC,IACD,aAAa;AAAA,UACX,SACE;AAAA,UACF,UAAU;AAAA,UACV,gBAAgB;AAAA,UAChB,aAAa;AAAA,YACX,OAAO,aAAa,MAAM;AAAA,YAC1B,SAAS,aAAa,MAAM;AAAA,UAC9B;AAAA,UACA,OAAO;AAAA,YACL;AAAA,YACA,gBAAgB,aAAa,cAAc;AAAA,YAC3C,cAAc;AAAA,cACZ,aAAa,cAAc;AAAA,YAC7B;AAAA,UACF;AAAA,UACA,KAAK;AAAA,YACH,QAAQ,UAAU,OAAO,IAAI,aAAW;AAAA,cACtC,OAAO,OAAO;AAAA,cACd,QAAQ,OAAO;AAAA,cACf,SAAS,OAAO;AAAA,cAChB,MAAM,OAAO;AAAA,cACb,MAAM,OAAO;AAAA,YACf,EAAE;AAAA,YACF,WAAW,UAAU,UAAU,IAAI,aAAW;AAAA,cAC5C,QAAQ,OAAO;AAAA,cACf,MAAM,OAAO;AAAA,cACb,MAAM,OAAO;AAAA,YACf,EAAE;AAAA,UACJ;AAAA,QACF,CAAC;AAAA,MACP;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,WAAS,OAAO,4BAA4B;AAC5C,QAAM,mBAAmB,MAAM,cAAcD,UAAS,SAAS,KAAK;AACpE,QAAM,SAAS,gBAAgB,MAAM,MAAM;AAC3C,QAAM,aAAa,iBAAiB,KAAK,IACrC,iBAAiB,QACjB;AAEJ,SAAO;AAAA,IACL;AAAA,MACE,WAAW,WACP,oBAAoB;AAAA,QAClB;AAAA,QACA;AAAA,QACA,QAAQ,aAAa;AAAA,QACrB,SAAS,aAAa;AAAA,QACtB,QAAQ;AAAA,UACN;AAAA,UACA,SAAS,YAAY;AAAA,UACrB,QAAQ,YAAY;AAAA,UACpB,aACE,YAAY,eAAe,eAAe,SAAS,KAAK;AAAA,QAC5D;AAAA,MACF,CAAC,IACD,aAAa;AAAA,QACX,SAAS;AAAA,QACT,UAAU;AAAA,QACV,QAAQ;AAAA,UACN,QAAQ,aAAa,MAAM;AAAA,UAC3B,QAAQ,aAAa,MAAM;AAAA,QAC7B;AAAA,QACA,QAAQ;AAAA,UACN;AAAA,UACA,SAAS,YAAY;AAAA,UACrB,QAAQ,YAAY;AAAA,UACpB,aACE,YAAY,eAAe,eAAe,SAAS,KAAK;AAAA,UAC1D,GAAI,YAAY,UAAU,EAAE,SAAS,WAAW,QAAQ,IAAI,CAAC;AAAA,QAC/D;AAAA,QACA,OAAO;AAAA,UACL;AAAA,UACA,gBAAgB,aAAa,cAAc;AAAA,UAC3C,cAAc;AAAA,YACZ,aAAa,cAAc;AAAA,UAC7B;AAAA,UACA,MAAM;AAAA,UACN,SAAS,aAAa;AAAA,QACxB;AAAA,QACA,KAAK;AAAA,UACH,QAAQ,UAAU,OAAO,IAAI,aAAW;AAAA,YACtC,OAAO,OAAO;AAAA,YACd,QAAQ,OAAO;AAAA,YACf,SAAS,OAAO;AAAA,YAChB,MAAM,OAAO;AAAA,YACb,MAAM,OAAO;AAAA,UACf,EAAE;AAAA,UACF,WAAW,UAAU,UAAU,IAAI,aAAW;AAAA,YAC5C,QAAQ,OAAO;AAAA,YACf,MAAM,OAAO;AAAA,YACb,MAAM,OAAO;AAAA,UACf,EAAE;AAAA,QACJ;AAAA,MACF,CAAC;AAAA,IACP;AAAA,IACA;AAAA,EACF;AACF;","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"]}
|
package/dist/esm/index.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
isMppEnabled
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-DJS6BHZB.js";
|
|
5
5
|
import "./chunk-JNYAKINU.js";
|
|
6
6
|
import {
|
|
7
7
|
MCP_VERSION
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-SN5HHMIT.js";
|
|
9
9
|
|
|
10
10
|
// src/index.ts
|
|
11
11
|
import yargs from "yargs";
|
|
@@ -81,7 +81,7 @@ void yargs(hideBin(process.argv)).scriptName("agentcash").usage("$0 [command] [o
|
|
|
81
81
|
default: "auto"
|
|
82
82
|
}),
|
|
83
83
|
async (args) => {
|
|
84
|
-
const { fetchCommand } = await import("./commands-
|
|
84
|
+
const { fetchCommand } = await import("./commands-W6VY355C.js");
|
|
85
85
|
await fetchCommand(
|
|
86
86
|
{
|
|
87
87
|
url: args.url,
|
|
@@ -116,7 +116,7 @@ void yargs(hideBin(process.argv)).scriptName("agentcash").usage("$0 [command] [o
|
|
|
116
116
|
description: "Additional headers as JSON object"
|
|
117
117
|
}),
|
|
118
118
|
async (args) => {
|
|
119
|
-
const { fetchAuthCommand } = await import("./commands-
|
|
119
|
+
const { fetchAuthCommand } = await import("./commands-W6VY355C.js");
|
|
120
120
|
await fetchAuthCommand(
|
|
121
121
|
{
|
|
122
122
|
url: args.url,
|
|
@@ -149,7 +149,7 @@ void yargs(hideBin(process.argv)).scriptName("agentcash").usage("$0 [command] [o
|
|
|
149
149
|
description: "Additional headers as JSON object"
|
|
150
150
|
}),
|
|
151
151
|
async (args) => {
|
|
152
|
-
const { checkCommand } = await import("./commands-
|
|
152
|
+
const { checkCommand } = await import("./commands-W6VY355C.js");
|
|
153
153
|
await checkCommand(
|
|
154
154
|
{
|
|
155
155
|
url: args.url,
|
|
@@ -172,7 +172,7 @@ void yargs(hideBin(process.argv)).scriptName("agentcash").usage("$0 [command] [o
|
|
|
172
172
|
description: "Guidance override: true=always include, false=never include, omitted=auto by threshold"
|
|
173
173
|
}),
|
|
174
174
|
async (args) => {
|
|
175
|
-
const { discoverCommand } = await import("./commands-
|
|
175
|
+
const { discoverCommand } = await import("./commands-W6VY355C.js");
|
|
176
176
|
await discoverCommand(
|
|
177
177
|
{ url: args.url, includeGuidance: args.includeGuidance },
|
|
178
178
|
args
|
|
@@ -187,7 +187,7 @@ void yargs(hideBin(process.argv)).scriptName("agentcash").usage("$0 [command] [o
|
|
|
187
187
|
demandOption: true
|
|
188
188
|
}),
|
|
189
189
|
async (args) => {
|
|
190
|
-
const { registerCommand } = await import("./commands-
|
|
190
|
+
const { registerCommand } = await import("./commands-W6VY355C.js");
|
|
191
191
|
await registerCommand({ url: args.url }, args);
|
|
192
192
|
}
|
|
193
193
|
).command(
|
|
@@ -199,7 +199,7 @@ void yargs(hideBin(process.argv)).scriptName("agentcash").usage("$0 [command] [o
|
|
|
199
199
|
demandOption: true
|
|
200
200
|
}),
|
|
201
201
|
async (args) => {
|
|
202
|
-
const { addSkillCommand } = await import("./commands-
|
|
202
|
+
const { addSkillCommand } = await import("./commands-W6VY355C.js");
|
|
203
203
|
await addSkillCommand({ url: args.url }, args);
|
|
204
204
|
}
|
|
205
205
|
).command(
|
|
@@ -217,7 +217,7 @@ void yargs(hideBin(process.argv)).scriptName("agentcash").usage("$0 [command] [o
|
|
|
217
217
|
);
|
|
218
218
|
}),
|
|
219
219
|
async (args) => {
|
|
220
|
-
const { onboardCommand } = await import("./commands-
|
|
220
|
+
const { onboardCommand } = await import("./commands-W6VY355C.js");
|
|
221
221
|
await onboardCommand({ code: args.code ?? args.invite }, args);
|
|
222
222
|
}
|
|
223
223
|
).command(
|
|
@@ -228,7 +228,7 @@ void yargs(hideBin(process.argv)).scriptName("agentcash").usage("$0 [command] [o
|
|
|
228
228
|
"Get wallet address, balance, and deposit link",
|
|
229
229
|
(yargs3) => yargs3,
|
|
230
230
|
async (args) => {
|
|
231
|
-
const { walletInfoCommand } = await import("./commands-
|
|
231
|
+
const { walletInfoCommand } = await import("./commands-W6VY355C.js");
|
|
232
232
|
await walletInfoCommand({}, args);
|
|
233
233
|
}
|
|
234
234
|
).command(
|
|
@@ -240,7 +240,7 @@ void yargs(hideBin(process.argv)).scriptName("agentcash").usage("$0 [command] [o
|
|
|
240
240
|
demandOption: true
|
|
241
241
|
}),
|
|
242
242
|
async (args) => {
|
|
243
|
-
const { walletRedeemCommand } = await import("./commands-
|
|
243
|
+
const { walletRedeemCommand } = await import("./commands-W6VY355C.js");
|
|
244
244
|
await walletRedeemCommand({ code: args.code }, args);
|
|
245
245
|
}
|
|
246
246
|
).command(
|
|
@@ -248,7 +248,7 @@ void yargs(hideBin(process.argv)).scriptName("agentcash").usage("$0 [command] [o
|
|
|
248
248
|
"Get wallet address",
|
|
249
249
|
(yargs3) => yargs3,
|
|
250
250
|
async (args) => {
|
|
251
|
-
const { walletAddressCommand } = await import("./commands-
|
|
251
|
+
const { walletAddressCommand } = await import("./commands-W6VY355C.js");
|
|
252
252
|
await walletAddressCommand({}, args);
|
|
253
253
|
}
|
|
254
254
|
).demandCommand(1, "You must specify a wallet subcommand").strict(),
|
|
@@ -280,7 +280,7 @@ void yargs(hideBin(process.argv)).scriptName("agentcash").usage("$0 [command] [o
|
|
|
280
280
|
description: "Detailed report with context and repro steps"
|
|
281
281
|
}),
|
|
282
282
|
async (args) => {
|
|
283
|
-
const { reportErrorCommand } = await import("./commands-
|
|
283
|
+
const { reportErrorCommand } = await import("./commands-W6VY355C.js");
|
|
284
284
|
await reportErrorCommand(
|
|
285
285
|
{
|
|
286
286
|
tool: args.tool,
|
|
@@ -298,7 +298,7 @@ void yargs(hideBin(process.argv)).scriptName("agentcash").usage("$0 [command] [o
|
|
|
298
298
|
"Start the MCP server (default when no command specified)",
|
|
299
299
|
(yargs2) => yargs2,
|
|
300
300
|
async (args) => {
|
|
301
|
-
const { serverCommand } = await import("./commands-
|
|
301
|
+
const { serverCommand } = await import("./commands-W6VY355C.js");
|
|
302
302
|
await serverCommand(args);
|
|
303
303
|
}
|
|
304
304
|
).command(
|
|
@@ -311,7 +311,7 @@ void yargs(hideBin(process.argv)).scriptName("agentcash").usage("$0 [command] [o
|
|
|
311
311
|
default: isClaudeCode ? "claude-code" /* ClaudeCode */ : void 0
|
|
312
312
|
}),
|
|
313
313
|
async (args) => {
|
|
314
|
-
const { installMcpServer } = await import("./install-
|
|
314
|
+
const { installMcpServer } = await import("./install-ZJC2MCDG.js");
|
|
315
315
|
await installMcpServer(args);
|
|
316
316
|
}
|
|
317
317
|
).command(
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
2
|
addServer
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-4CQDDIKH.js";
|
|
4
4
|
import {
|
|
5
5
|
Clients,
|
|
6
6
|
clientMetadata
|
|
7
7
|
} from "./chunk-JNYAKINU.js";
|
|
8
|
-
import "./chunk-
|
|
8
|
+
import "./chunk-SN5HHMIT.js";
|
|
9
9
|
import {
|
|
10
10
|
promptDeposit
|
|
11
11
|
} from "./chunk-KOMAKKV3.js";
|
|
@@ -176,4 +176,4 @@ var installMcpServer = async (flags) => {
|
|
|
176
176
|
export {
|
|
177
177
|
installMcpServer
|
|
178
178
|
};
|
|
179
|
-
//# sourceMappingURL=install-
|
|
179
|
+
//# sourceMappingURL=install-ZJC2MCDG.js.map
|
|
@@ -7,23 +7,23 @@ import {
|
|
|
7
7
|
requestSchema,
|
|
8
8
|
safeGetMppChallenge,
|
|
9
9
|
safeGetPaymentRequired
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-RYH3NDAP.js";
|
|
11
11
|
import {
|
|
12
12
|
TEMPO_RPC_URL,
|
|
13
13
|
getTempoBalance,
|
|
14
14
|
getWalletInfo,
|
|
15
15
|
submitErrorReport
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-UIMAHOSV.js";
|
|
17
17
|
import {
|
|
18
18
|
isMppEnabled
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-DJS6BHZB.js";
|
|
20
20
|
import {
|
|
21
21
|
checkEndpoint,
|
|
22
22
|
discoverResources
|
|
23
23
|
} from "./chunk-MWRO3R4V.js";
|
|
24
24
|
import {
|
|
25
25
|
MCP_VERSION
|
|
26
|
-
} from "./chunk-
|
|
26
|
+
} from "./chunk-SN5HHMIT.js";
|
|
27
27
|
import {
|
|
28
28
|
DEFAULT_NETWORK,
|
|
29
29
|
getWallet,
|
|
@@ -1276,7 +1276,7 @@ import { dirname, join } from "path";
|
|
|
1276
1276
|
import { fileURLToPath } from "url";
|
|
1277
1277
|
function getVersion() {
|
|
1278
1278
|
if (true) {
|
|
1279
|
-
return "0.7.
|
|
1279
|
+
return "0.7.1";
|
|
1280
1280
|
}
|
|
1281
1281
|
const __dirname2 = dirname(fileURLToPath(import.meta.url));
|
|
1282
1282
|
const pkg = JSON.parse(
|
|
@@ -1372,4 +1372,4 @@ var startServer = async (flags) => {
|
|
|
1372
1372
|
export {
|
|
1373
1373
|
startServer
|
|
1374
1374
|
};
|
|
1375
|
-
//# sourceMappingURL=server-
|
|
1375
|
+
//# sourceMappingURL=server-3SY6CIP7.js.map
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import {
|
|
2
2
|
getWalletInfo,
|
|
3
3
|
submitErrorReport
|
|
4
|
-
} from "../../chunk-
|
|
5
|
-
import "../../chunk-
|
|
4
|
+
} from "../../chunk-UIMAHOSV.js";
|
|
5
|
+
import "../../chunk-DJS6BHZB.js";
|
|
6
6
|
import {
|
|
7
7
|
SUPPORTED_METHODS,
|
|
8
8
|
checkEndpoint,
|
|
9
9
|
discoverResources
|
|
10
10
|
} from "../../chunk-MWRO3R4V.js";
|
|
11
|
-
import "../../chunk-
|
|
11
|
+
import "../../chunk-SN5HHMIT.js";
|
|
12
12
|
import "../../chunk-YUCA2PQT.js";
|
|
13
13
|
import "../../chunk-TRPO7BKD.js";
|
|
14
14
|
import "../../chunk-ISR6DJ53.js";
|
package/package.json
CHANGED
|
@@ -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"],"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.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 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 {\n name: 'OpenClaw',\n globalSkillsDir: path.join(home, '.openclaw', 'skills'),\n projectSkillsDir: '.agents/skills',\n universal: true,\n detect: () => fs.existsSync(path.join(home, '.openclaw')),\n },\n\n // Non-universal agents (need symlink from their skills dir to canonical)\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 { getDepositLink } from '@/shared/utils';\nimport { getWallet } from '@/shared/wallet';\nimport { resultFromPromise } from '@agentcash/neverthrow';\n\nimport type { GlobalFlags } from '@/types';\n\nconst SURFACE = 'cli:onboard';\nconst ONBOARDING_LINK = 'https://agentcash.dev/onboard';\nconst AGENTCASH_WALLET_SKILL = {\n owner: 'merit-systems',\n repo: 'agentcash-skills',\n skillPath: 'skills/agentcash-wallet',\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 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 `Redeemed: ${formatBalance(params.redeem.amount)}`,\n `Balance: ${params.wallet.balance != null ? formatBalance(params.wallet.balance) : 'balance refresh unavailable'}`,\n `Deposit link: ${params.wallet.depositLink}`,\n `Transaction: https://basescan.org/tx/${params.redeem.txHash}`,\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('', params.skillMd.trimEnd());\n\n return lines.join('\\n');\n};\n\nconst formatRedeemFailureOutput = (params: {\n installedAgents: string[];\n mcpResult: McpInstallSummary;\n redeemError: {\n cause?: string;\n message: string;\n };\n}) => {\n const lines = [\n 'agentcash setup finished, but invite redemption failed.',\n `Reason: ${params.redeemError.message}`,\n `Finish onboarding at: ${ONBOARDING_LINK}`,\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_WALLET_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 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 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 const installedAgents = skillInstall.detectedAgents.map(agent => agent.name);\n\n if (redeemResult.isErr()) {\n const format = getOutputFormat(flags.format);\n\n return outputAndExit(\n successResponse(\n format === 'pretty'\n ? formatRedeemFailureOutput({\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: ONBOARDING_LINK,\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 progress(flags, 'Fetching wallet balance...');\n const walletInfoResult = await getWalletInfo(SURFACE, address, flags);\n const format = getOutputFormat(flags.format);\n const walletInfo = walletInfoResult.isOk()\n ? walletInfoResult.value\n : undefined;\n\n return outputAndExit(\n successResponse(\n format === 'pretty'\n ? formatSuccessOutput({\n installedAgents,\n mcpResult,\n redeem: redeemResult.value,\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: true,\n invite: {\n amount: redeemResult.value.amount,\n txHash: redeemResult.value.txHash,\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-wallet',\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 })\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 OpenClaw: Clients.Openclaw,\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"],"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"]}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|