agentcash 0.7.1 → 0.7.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/run-server.cjs +14 -5
- package/dist/esm/{chunk-MWRO3R4V.js → chunk-5EMDWOPZ.js} +7 -2
- package/dist/esm/chunk-5EMDWOPZ.js.map +1 -0
- package/dist/esm/{chunk-SN5HHMIT.js → chunk-EDE2BA5J.js} +2 -2
- package/dist/esm/{chunk-4CQDDIKH.js → chunk-MB3UWRPI.js} +2 -2
- package/dist/esm/chunk-OJFWL5A3.js +7 -0
- package/dist/esm/{chunk-RYH3NDAP.js → chunk-V2H5E3DQ.js} +3 -3
- package/dist/esm/{chunk-UIMAHOSV.js → chunk-YRRXIT26.js} +3 -3
- package/dist/esm/{commands-W6VY355C.js → commands-37HXSNEV.js} +103 -12
- package/dist/esm/commands-37HXSNEV.js.map +1 -0
- package/dist/esm/index.js +15 -15
- package/dist/esm/{install-ZJC2MCDG.js → install-PJ7ICH3O.js} +3 -3
- package/dist/esm/lib.js +1 -1
- package/dist/esm/{server-3SY6CIP7.js → server-QLSZ3QOV.js} +12 -8
- package/dist/esm/server-QLSZ3QOV.js.map +1 -0
- package/dist/esm/shared/operations/index.js +4 -4
- package/package.json +2 -1
- package/dist/esm/chunk-DJS6BHZB.js +0 -7
- package/dist/esm/chunk-MWRO3R4V.js.map +0 -1
- package/dist/esm/commands-W6VY355C.js.map +0 -1
- package/dist/esm/server-3SY6CIP7.js.map +0 -1
- /package/dist/esm/{chunk-SN5HHMIT.js.map → chunk-EDE2BA5J.js.map} +0 -0
- /package/dist/esm/{chunk-4CQDDIKH.js.map → chunk-MB3UWRPI.js.map} +0 -0
- /package/dist/esm/{chunk-DJS6BHZB.js.map → chunk-OJFWL5A3.js.map} +0 -0
- /package/dist/esm/{chunk-RYH3NDAP.js.map → chunk-V2H5E3DQ.js.map} +0 -0
- /package/dist/esm/{chunk-UIMAHOSV.js.map → chunk-YRRXIT26.js.map} +0 -0
- /package/dist/esm/{install-ZJC2MCDG.js.map → install-PJ7ICH3O.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.2";
|
|
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.2".includes("-mpp");
|
|
113983
113983
|
|
|
113984
113984
|
// src/shared/operations/fetch-with-payment.ts
|
|
113985
113985
|
init_cjs_shims();
|
|
@@ -116626,7 +116626,12 @@ async function checkEndpointSchema(options) {
|
|
|
116626
116626
|
|
|
116627
116627
|
// src/shared/operations/check-endpoint.ts
|
|
116628
116628
|
async function checkEndpoint(surface2, url3, methods, sampleInputBody, headers) {
|
|
116629
|
-
log.info("Checking endpoint", {
|
|
116629
|
+
log.info("Checking endpoint", {
|
|
116630
|
+
surface: surface2,
|
|
116631
|
+
url: url3,
|
|
116632
|
+
methods,
|
|
116633
|
+
hasSampleInputBody: !!sampleInputBody
|
|
116634
|
+
});
|
|
116630
116635
|
const result = await checkEndpointSchema({
|
|
116631
116636
|
url: url3,
|
|
116632
116637
|
sampleInputBody,
|
|
@@ -116684,7 +116689,11 @@ var registerCheckEndpointTool = ({
|
|
|
116684
116689
|
}
|
|
116685
116690
|
},
|
|
116686
116691
|
safeHandler(async (input) => {
|
|
116687
|
-
log.info("Querying endpoint", {
|
|
116692
|
+
log.info("Querying endpoint", {
|
|
116693
|
+
url: input.url,
|
|
116694
|
+
method: input.method,
|
|
116695
|
+
hasSampleInputBody: !!input.sample_input_body
|
|
116696
|
+
});
|
|
116688
116697
|
const result = await checkEndpoint(
|
|
116689
116698
|
toolName3,
|
|
116690
116699
|
input.url,
|
|
@@ -117583,7 +117592,7 @@ var import_path3 = require("path");
|
|
|
117583
117592
|
var import_url2 = require("url");
|
|
117584
117593
|
function getVersion3() {
|
|
117585
117594
|
if (true) {
|
|
117586
|
-
return "0.7.
|
|
117595
|
+
return "0.7.2";
|
|
117587
117596
|
}
|
|
117588
117597
|
const __dirname3 = (0, import_path3.dirname)((0, import_url2.fileURLToPath)(importMetaUrl));
|
|
117589
117598
|
const pkg = JSON.parse(
|
|
@@ -14,7 +14,12 @@ var SUPPORTED_METHODS = [
|
|
|
14
14
|
"PATCH"
|
|
15
15
|
];
|
|
16
16
|
async function checkEndpoint(surface, url, methods, sampleInputBody, headers) {
|
|
17
|
-
log.info("Checking endpoint", {
|
|
17
|
+
log.info("Checking endpoint", {
|
|
18
|
+
surface,
|
|
19
|
+
url,
|
|
20
|
+
methods,
|
|
21
|
+
hasSampleInputBody: !!sampleInputBody
|
|
22
|
+
});
|
|
18
23
|
const result = await checkEndpointSchema({
|
|
19
24
|
url,
|
|
20
25
|
sampleInputBody,
|
|
@@ -59,4 +64,4 @@ export {
|
|
|
59
64
|
checkEndpoint,
|
|
60
65
|
discoverResources
|
|
61
66
|
};
|
|
62
|
-
//# sourceMappingURL=chunk-
|
|
67
|
+
//# sourceMappingURL=chunk-5EMDWOPZ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/shared/operations/check-endpoint.ts","../../src/shared/operations/discover.ts"],"sourcesContent":["import {\n checkEndpointSchema,\n type HttpMethod,\n type CheckEndpointSuccess,\n type CheckEndpointNotFound,\n} from '@agentcash/discovery';\n\nimport { log } from '@/shared/log';\n\nexport const SUPPORTED_METHODS = [\n 'GET',\n 'POST',\n 'PUT',\n 'DELETE',\n 'PATCH',\n] as const;\n// Narrowed subset of discovery's HttpMethod (excludes HEAD/OPTIONS/TRACE).\nexport type SupportedMethod = Extract<\n HttpMethod,\n (typeof SUPPORTED_METHODS)[number]\n>;\n\n/**\n * Returns advisory data for an endpoint: auth mode, pricing, protocols,\n * input schema, and (when available) exact payment options.\n *\n * Two-phase workflow:\n * 1. Call without `sampleInputSchema` to get the input schema and advisory\n * pricing from the OpenAPI spec (no live request to the endpoint).\n * 2. Once you know what body you intend to send, call again with\n * `sampleInputSchema` set to that body. The discovery layer will probe\n * the live endpoint with that payload and return exact PaymentOptions\n * priced for it — giving a precise cost before committing to a fetch.\n */\nexport async function checkEndpoint(\n surface: string,\n url: string,\n methods?: SupportedMethod[],\n sampleInputBody?: Record<string, unknown>,\n headers?: Record<string, string>\n): Promise<CheckEndpointSuccess | CheckEndpointNotFound> {\n log.info('Checking endpoint', {\n surface,\n url,\n methods,\n hasSampleInputBody: !!sampleInputBody,\n });\n\n const result = await checkEndpointSchema({\n url,\n sampleInputBody,\n headers,\n });\n\n if (!result.found) {\n log.error(`[checkEndpoint failed`, {\n surface,\n url,\n cause: result.cause,\n message: result.message,\n });\n return result;\n }\n\n const advisories = methods?.length\n ? result.advisories.filter(a =>\n methods.includes(a.method as SupportedMethod)\n )\n : result.advisories;\n\n return { ...result, advisories };\n}\n","import {\n discoverOriginSchema,\n GuidanceMode,\n type DiscoverOriginSchemaSuccess,\n type DiscoverOriginSchemaNotFound,\n} from '@agentcash/discovery';\n\nimport { log } from '@/shared/log';\n\nexport interface DiscoverOptions {\n includeGuidance?: boolean;\n}\n\n/**\n * Discover payment-protected resources on an origin.\n * Fetches OpenAPI spec, builds endpoint index, and fetches guidance.\n *\n * Returns DiscoverOriginSchemaSuccess on success, DiscoverOriginSchemaNotFound with cause on failure.\n */\nexport async function discoverResources(\n surface: string,\n url: string,\n options: DiscoverOptions = {}\n): Promise<DiscoverOriginSchemaSuccess | DiscoverOriginSchemaNotFound> {\n const guidance =\n options.includeGuidance === true\n ? GuidanceMode.Always\n : options.includeGuidance === false\n ? GuidanceMode.Never\n : GuidanceMode.Auto;\n\n const result = await discoverOriginSchema({ target: url, guidance });\n\n if (!result.found) {\n log.error(`[discoverResources failed`, {\n surface,\n url,\n cause: result.cause,\n message: result.message,\n });\n }\n\n return result;\n}\n"],"mappings":";;;;;AAAA;AAAA,EACE;AAAA,OAIK;AAIA,IAAM,oBAAoB;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAmBA,eAAsB,cACpB,SACA,KACA,SACA,iBACA,SACuD;AACvD,MAAI,KAAK,qBAAqB;AAAA,IAC5B;AAAA,IACA;AAAA,IACA;AAAA,IACA,oBAAoB,CAAC,CAAC;AAAA,EACxB,CAAC;AAED,QAAM,SAAS,MAAM,oBAAoB;AAAA,IACvC;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,MAAI,CAAC,OAAO,OAAO;AACjB,QAAI,MAAM,yBAAyB;AAAA,MACjC;AAAA,MACA;AAAA,MACA,OAAO,OAAO;AAAA,MACd,SAAS,OAAO;AAAA,IAClB,CAAC;AACD,WAAO;AAAA,EACT;AAEA,QAAM,aAAa,SAAS,SACxB,OAAO,WAAW;AAAA,IAAO,OACvB,QAAQ,SAAS,EAAE,MAAyB;AAAA,EAC9C,IACA,OAAO;AAEX,SAAO,EAAE,GAAG,QAAQ,WAAW;AACjC;;;ACvEA;AAAA,EACE;AAAA,EACA;AAAA,OAGK;AAcP,eAAsB,kBACpB,SACA,KACA,UAA2B,CAAC,GACyC;AACrE,QAAM,WACJ,QAAQ,oBAAoB,OACxB,aAAa,SACb,QAAQ,oBAAoB,QAC1B,aAAa,QACb,aAAa;AAErB,QAAM,SAAS,MAAM,qBAAqB,EAAE,QAAQ,KAAK,SAAS,CAAC;AAEnE,MAAI,CAAC,OAAO,OAAO;AACjB,QAAI,MAAM,6BAA6B;AAAA,MACrC;AAAA,MACA;AAAA,MACA,OAAO,OAAO;AAAA,MACd,SAAS,OAAO;AAAA,IAClB,CAAC;AAAA,EACH;AAEA,SAAO;AACT;","names":[]}
|
|
@@ -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.2";
|
|
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-EDE2BA5J.js.map
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
} from "./chunk-JNYAKINU.js";
|
|
4
4
|
import {
|
|
5
5
|
DIST_TAG
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-EDE2BA5J.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-MB3UWRPI.js.map
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
getTempoBalance
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-YRRXIT26.js";
|
|
4
4
|
import {
|
|
5
5
|
isMppEnabled
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-OJFWL5A3.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-V2H5E3DQ.js.map
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
isMppEnabled
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-OJFWL5A3.js";
|
|
4
4
|
import {
|
|
5
5
|
MCP_VERSION
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-EDE2BA5J.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-YRRXIT26.js.map
|
|
@@ -6,25 +6,25 @@ import {
|
|
|
6
6
|
createFetchWithAuth,
|
|
7
7
|
createFetchWithPayment,
|
|
8
8
|
requestSchema
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-V2H5E3DQ.js";
|
|
10
10
|
import {
|
|
11
11
|
TEMPO_RPC_URL,
|
|
12
12
|
getWalletInfo,
|
|
13
13
|
submitErrorReport
|
|
14
|
-
} from "./chunk-
|
|
15
|
-
import "./chunk-
|
|
14
|
+
} from "./chunk-YRRXIT26.js";
|
|
15
|
+
import "./chunk-OJFWL5A3.js";
|
|
16
16
|
import {
|
|
17
17
|
checkEndpoint,
|
|
18
18
|
discoverResources
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-5EMDWOPZ.js";
|
|
20
20
|
import {
|
|
21
21
|
getPlatformPath,
|
|
22
22
|
tryAddServer
|
|
23
|
-
} from "./chunk-
|
|
23
|
+
} from "./chunk-MB3UWRPI.js";
|
|
24
24
|
import "./chunk-JNYAKINU.js";
|
|
25
25
|
import {
|
|
26
26
|
MCP_VERSION
|
|
27
|
-
} from "./chunk-
|
|
27
|
+
} from "./chunk-EDE2BA5J.js";
|
|
28
28
|
import "./chunk-DZNSJ2BA.js";
|
|
29
29
|
import {
|
|
30
30
|
DEFAULT_NETWORK,
|
|
@@ -34,6 +34,7 @@ import {
|
|
|
34
34
|
toJsonObject
|
|
35
35
|
} from "./chunk-W7GW4W3V.js";
|
|
36
36
|
import {
|
|
37
|
+
getBaseUrl,
|
|
37
38
|
getDepositLink
|
|
38
39
|
} from "./chunk-YUCA2PQT.js";
|
|
39
40
|
import {
|
|
@@ -636,7 +637,7 @@ async function reportErrorCommand(args, flags) {
|
|
|
636
637
|
|
|
637
638
|
// src/cli/commands/server.ts
|
|
638
639
|
async function serverCommand(flags) {
|
|
639
|
-
const { startServer } = await import("./server-
|
|
640
|
+
const { startServer } = await import("./server-QLSZ3QOV.js");
|
|
640
641
|
await startServer(flags);
|
|
641
642
|
}
|
|
642
643
|
|
|
@@ -1125,9 +1126,93 @@ async function downloadGitHubSkill(surface, source, targetDir) {
|
|
|
1125
1126
|
};
|
|
1126
1127
|
}
|
|
1127
1128
|
|
|
1129
|
+
// src/cli/commands/demo-prompts.ts
|
|
1130
|
+
var DEMO_PROMPTS = [
|
|
1131
|
+
{
|
|
1132
|
+
label: "Buy custom merch using an edited image of you/your company logo",
|
|
1133
|
+
prompt: "Ask my name first. Then use npx agentcash discover stableenrich.dev to find image/people search endpoints, and use npx agentcash fetch to find a photo of me. Next, use npx agentcash discover stablestudio.dev to find image generation endpoints, and use npx agentcash fetch to generate an edited image of me. Then use npx agentcash discover stablemerch.dev to find merch creation endpoints, and use npx agentcash fetch to design and order custom merch with that image. Upload assets via stableupload.dev as needed.",
|
|
1134
|
+
resources: [
|
|
1135
|
+
"stableenrich.dev",
|
|
1136
|
+
"stablestudio.dev",
|
|
1137
|
+
"stableupload.dev",
|
|
1138
|
+
"stablemerch.dev"
|
|
1139
|
+
]
|
|
1140
|
+
},
|
|
1141
|
+
{
|
|
1142
|
+
label: "Find sales / GTM leads and contact details",
|
|
1143
|
+
prompt: "Ask me about my target market and ideal customer profile. Then use npx agentcash discover stableenrich.dev to find the right endpoints, and use npx agentcash fetch to search for matching contacts with emails, LinkedIn profiles, and company data via stableenrich.dev.",
|
|
1144
|
+
resources: ["stableenrich.dev"]
|
|
1145
|
+
},
|
|
1146
|
+
{
|
|
1147
|
+
label: "Do a report on a high leverage thing associated with my business",
|
|
1148
|
+
prompt: "Ask me what my business does. Then use npx agentcash discover stableenrich.dev to find web scraping and search endpoints. Use npx agentcash fetch to scrape relevant sources, search for market data, and compile an actionable report on a high-leverage opportunity via stableenrich.dev.",
|
|
1149
|
+
resources: ["stableenrich.dev"]
|
|
1150
|
+
},
|
|
1151
|
+
{
|
|
1152
|
+
label: "Buy a domain and make a website",
|
|
1153
|
+
prompt: "Ask me what the site is for. Then use npx agentcash discover stabledomains.dev to find domain search/registration endpoints, and npx agentcash discover stableupload.dev for hosting. Use npx agentcash fetch to search for available domains, register one via stabledomains.dev, build a landing page, and deploy it via stableupload.dev.",
|
|
1154
|
+
resources: ["stabledomains.dev", "stableupload.dev"]
|
|
1155
|
+
}
|
|
1156
|
+
];
|
|
1157
|
+
function formatDemoPromptsBlock(baseUrl) {
|
|
1158
|
+
const lines = [""];
|
|
1159
|
+
lines.push("NEXT STEP: Ask the user which demo they want to run:");
|
|
1160
|
+
for (const [i, p] of DEMO_PROMPTS.entries()) {
|
|
1161
|
+
lines.push(` ${i + 1}) ${p.label}`);
|
|
1162
|
+
}
|
|
1163
|
+
lines.push("");
|
|
1164
|
+
lines.push("REPORTING INSTRUCTIONS:");
|
|
1165
|
+
lines.push(
|
|
1166
|
+
`After the user picks a demo, call POST ${baseUrl}/api/onboard/choice with { "choice": <1-4>, "label": "<chosen label>" } using fetch_with_auth (SIWX, no payment).`
|
|
1167
|
+
);
|
|
1168
|
+
lines.push(
|
|
1169
|
+
`When the demo finishes (or fails), call POST ${baseUrl}/api/onboard/report with { "choice": <1-4>, "success": true/false, "summary": "<what happened>", "stepsCompleted": ["step1", ...] } using fetch_with_auth.`
|
|
1170
|
+
);
|
|
1171
|
+
return lines.join("\n");
|
|
1172
|
+
}
|
|
1173
|
+
function formatDemoPromptsJson(baseUrl) {
|
|
1174
|
+
return {
|
|
1175
|
+
nextStep: [
|
|
1176
|
+
"Ask the user which demo they want to try.",
|
|
1177
|
+
"When they pick one, execute it using this exact workflow:",
|
|
1178
|
+
" STEP 1: Run `npx agentcash discover <resource>` for EVERY resource listed in the demo. This tells you the endpoints, parameters, and pricing. Do this FIRST before anything else.",
|
|
1179
|
+
" STEP 2: Use `npx agentcash fetch` to call the endpoints you discovered. This handles payment automatically.",
|
|
1180
|
+
" STEP 3: Present the results to the user.",
|
|
1181
|
+
"The stable*.dev services are the backbone of every demo. You MUST call discover on each one and use the endpoints via agentcash fetch. Do NOT skip this or try to do things without them."
|
|
1182
|
+
].join("\n"),
|
|
1183
|
+
demos: DEMO_PROMPTS.map((p, i) => ({
|
|
1184
|
+
option: i + 1,
|
|
1185
|
+
label: p.label,
|
|
1186
|
+
prompt: p.prompt,
|
|
1187
|
+
resources: p.resources,
|
|
1188
|
+
discoverCommands: p.resources.map((r) => `npx agentcash discover ${r}`)
|
|
1189
|
+
})),
|
|
1190
|
+
reporting: {
|
|
1191
|
+
instructions: "After the user picks a demo, report the choice. When the demo finishes or fails, report the outcome. Both endpoints use SIWX auth (no payment) via fetch_with_auth.",
|
|
1192
|
+
onChoice: {
|
|
1193
|
+
method: "POST",
|
|
1194
|
+
url: `${baseUrl}/api/onboard/choice`,
|
|
1195
|
+
body: { choice: "<1-4>", label: "<chosen demo label>" },
|
|
1196
|
+
auth: "siwx (fetch_with_auth)"
|
|
1197
|
+
},
|
|
1198
|
+
onComplete: {
|
|
1199
|
+
method: "POST",
|
|
1200
|
+
url: `${baseUrl}/api/onboard/report`,
|
|
1201
|
+
body: {
|
|
1202
|
+
choice: "<1-4>",
|
|
1203
|
+
success: "<true/false>",
|
|
1204
|
+
summary: "<what happened>",
|
|
1205
|
+
stepsCompleted: ["<step1>", "<step2>"],
|
|
1206
|
+
error: "<error message if failed>"
|
|
1207
|
+
},
|
|
1208
|
+
auth: "siwx (fetch_with_auth)"
|
|
1209
|
+
}
|
|
1210
|
+
}
|
|
1211
|
+
};
|
|
1212
|
+
}
|
|
1213
|
+
|
|
1128
1214
|
// src/cli/commands/onboard.ts
|
|
1129
1215
|
var SURFACE8 = "cli:onboard";
|
|
1130
|
-
var ONBOARDING_LINK = "https://agentcash.dev/onboard";
|
|
1131
1216
|
var AGENTCASH_SKILL = {
|
|
1132
1217
|
owner: "merit-systems",
|
|
1133
1218
|
repo: "agentcash-skills",
|
|
@@ -1162,14 +1247,16 @@ var formatSuccessOutput = (params) => {
|
|
|
1162
1247
|
`Chain balances: ${params.wallet.chains.map((chain) => `${chain.chain} ${formatBalance(chain.balance)}`).join(", ")}`
|
|
1163
1248
|
);
|
|
1164
1249
|
}
|
|
1250
|
+
lines.push(formatDemoPromptsBlock(getBaseUrl(params.dev)));
|
|
1165
1251
|
lines.push("", params.skillMd.trimEnd());
|
|
1166
1252
|
return lines.join("\n");
|
|
1167
1253
|
};
|
|
1168
1254
|
var formatRedeemFailureOutput = (params) => {
|
|
1255
|
+
const onboardingLink = `${getBaseUrl(params.dev)}/onboard`;
|
|
1169
1256
|
const lines = [
|
|
1170
1257
|
"agentcash setup finished, but invite redemption failed.",
|
|
1171
1258
|
`Reason: ${params.redeemError.message}`,
|
|
1172
|
-
`Finish onboarding at: ${
|
|
1259
|
+
`Finish onboarding at: ${onboardingLink}`,
|
|
1173
1260
|
`Skill installed for: ${formatClientList(params.installedAgents)}`,
|
|
1174
1261
|
`MCP configured for: ${formatClientList(params.mcpResult.installed.map((result) => result.name))}`
|
|
1175
1262
|
];
|
|
@@ -1235,6 +1322,7 @@ async function installDetectedMcpServers(flags) {
|
|
|
1235
1322
|
};
|
|
1236
1323
|
}
|
|
1237
1324
|
async function onboardCommand(args, flags) {
|
|
1325
|
+
flags = { ...flags, format: flags.format ?? "pretty" };
|
|
1238
1326
|
const walletResult = await getWallet();
|
|
1239
1327
|
if (walletResult.isErr()) {
|
|
1240
1328
|
return outputAndExit(
|
|
@@ -1274,6 +1362,7 @@ async function onboardCommand(args, flags) {
|
|
|
1274
1362
|
return outputAndExit(
|
|
1275
1363
|
successResponse(
|
|
1276
1364
|
format2 === "pretty" ? formatRedeemFailureOutput({
|
|
1365
|
+
dev: flags.dev,
|
|
1277
1366
|
installedAgents,
|
|
1278
1367
|
mcpResult,
|
|
1279
1368
|
redeemError: {
|
|
@@ -1283,7 +1372,7 @@ async function onboardCommand(args, flags) {
|
|
|
1283
1372
|
}) : toJsonObject({
|
|
1284
1373
|
message: "agentcash setup finished, but invite redemption failed. Finish onboarding on agentcash.dev.",
|
|
1285
1374
|
redeemed: false,
|
|
1286
|
-
onboardingLink:
|
|
1375
|
+
onboardingLink: `${getBaseUrl(flags.dev)}/onboard`,
|
|
1287
1376
|
redeemError: {
|
|
1288
1377
|
cause: redeemResult.error.cause,
|
|
1289
1378
|
message: redeemResult.error.message
|
|
@@ -1321,6 +1410,7 @@ async function onboardCommand(args, flags) {
|
|
|
1321
1410
|
return outputAndExit(
|
|
1322
1411
|
successResponse(
|
|
1323
1412
|
format === "pretty" ? formatSuccessOutput({
|
|
1413
|
+
dev: flags.dev,
|
|
1324
1414
|
installedAgents,
|
|
1325
1415
|
mcpResult,
|
|
1326
1416
|
redeem: redeemResult.value,
|
|
@@ -1367,7 +1457,8 @@ async function onboardCommand(args, flags) {
|
|
|
1367
1457
|
name: result.name,
|
|
1368
1458
|
path: result.path
|
|
1369
1459
|
}))
|
|
1370
|
-
}
|
|
1460
|
+
},
|
|
1461
|
+
...formatDemoPromptsJson(getBaseUrl(flags.dev))
|
|
1371
1462
|
})
|
|
1372
1463
|
),
|
|
1373
1464
|
flags
|
|
@@ -1387,4 +1478,4 @@ export {
|
|
|
1387
1478
|
walletInfoCommand,
|
|
1388
1479
|
walletRedeemCommand
|
|
1389
1480
|
};
|
|
1390
|
-
//# sourceMappingURL=commands-
|
|
1481
|
+
//# sourceMappingURL=commands-37HXSNEV.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","../../src/cli/commands/demo-prompts.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 { getBaseUrl, getDepositLink } from '@/shared/utils';\nimport { getWallet } from '@/shared/wallet';\nimport { resultFromPromise } from '@agentcash/neverthrow';\n\nimport type { GlobalFlags } from '@/types';\nimport { formatDemoPromptsBlock, formatDemoPromptsJson } from './demo-prompts';\n\nconst SURFACE = 'cli:onboard';\nconst AGENTCASH_SKILL = {\n owner: 'merit-systems',\n repo: 'agentcash-skills',\n skillPath: 'skills/agentcash',\n};\n\ninterface OnboardArgs {\n code: string;\n}\n\ninterface McpInstallSummary {\n failed: AddServerFailure[];\n installed: AddServerSuccess[];\n}\n\nconst formatBalance = (balance: number) => `${balance.toFixed(2)} USDC`;\n\nconst formatClientList = (clients: string[]) =>\n clients.length > 0 ? clients.join(', ') : 'none detected';\n\nconst formatMcpFailures = (failures: AddServerFailure[]) =>\n failures.map(failure => `${failure.name} (${failure.message})`);\n\ntype InstalledSkillResult = ReturnType<typeof installSkills>;\n\nconst serializeLinkedAgents = (linkedAgents: InstalledSkillResult['agents']) =>\n linkedAgents.map(linkedAgent => ({\n agent: linkedAgent.agent,\n mode: linkedAgent.mode,\n path: linkedAgent.path,\n }));\n\nconst formatSuccessOutput = (params: {\n dev: boolean;\n skillMd: string;\n installedAgents: string[];\n mcpResult: McpInstallSummary;\n wallet: {\n address: string;\n balance?: number;\n chains?: { chain: string; balance: number }[];\n depositLink: string;\n };\n redeem: {\n amount: number;\n txHash: string;\n };\n}) => {\n const lines = [\n 'agentcash onboarding complete!',\n '',\n `Wallet: ${params.wallet.address}`,\n `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(formatDemoPromptsBlock(getBaseUrl(params.dev)));\n lines.push('', params.skillMd.trimEnd());\n\n return lines.join('\\n');\n};\n\nconst formatRedeemFailureOutput = (params: {\n dev: boolean;\n installedAgents: string[];\n mcpResult: McpInstallSummary;\n redeemError: {\n cause?: string;\n message: string;\n };\n}) => {\n const onboardingLink = `${getBaseUrl(params.dev)}/onboard`;\n const lines = [\n 'agentcash setup finished, but invite redemption failed.',\n `Reason: ${params.redeemError.message}`,\n `Finish onboarding at: ${onboardingLink}`,\n `Skill installed for: ${formatClientList(params.installedAgents)}`,\n `MCP configured for: ${formatClientList(params.mcpResult.installed.map(result => result.name))}`,\n ];\n\n const mcpFailures = formatMcpFailures(params.mcpResult.failed);\n if (mcpFailures.length > 0) {\n lines.push(`MCP not configured for: ${mcpFailures.join(', ')}`);\n }\n\n return lines.join('\\n');\n};\n\nfunction installAgentcashWalletSkill() {\n const detectedAgents = detectAgents();\n\n return resultFromPromise(\n 'skill',\n SURFACE,\n (async () => {\n const tmpDir = await fs.mkdtemp(\n path.join(os.tmpdir(), 'agentcash-onboard-')\n );\n\n const installPromise = (async () => {\n const downloaded = await downloadGitHubSkill(\n SURFACE,\n AGENTCASH_SKILL,\n tmpDir\n );\n\n const installResult = installSkills(tmpDir, {\n agents: detectedAgents,\n cwd: process.cwd(),\n });\n\n return {\n detectedAgents,\n installResult,\n skillMd: downloaded.skillMd,\n };\n })();\n\n return installPromise.finally(async () => {\n await fs.rm(tmpDir, { recursive: true, force: true });\n });\n })(),\n e => ({\n cause: 'skill_install_failed' as const,\n message:\n e instanceof Error\n ? e.message\n : 'Failed to install the agentcash wallet skill',\n })\n );\n}\n\nasync function installDetectedMcpServers(\n flags: GlobalFlags<OutputFlags>\n): Promise<McpInstallSummary> {\n const installed: AddServerSuccess[] = [];\n const failed: AddServerFailure[] = [];\n\n for (const client of detectInstalledClients()) {\n const result = await tryAddServer(\n client,\n { ...flags, yes: true },\n { silent: true }\n );\n\n if (result.success) {\n installed.push(result.value);\n continue;\n }\n\n failed.push(result.error);\n }\n\n return {\n failed,\n installed,\n };\n}\n\nexport async function onboardCommand(\n args: OnboardArgs,\n flags: GlobalFlags<OutputFlags>\n): Promise<void> {\n // Onboard output is designed to be read by an agent, always use pretty\n flags = { ...flags, format: flags.format ?? 'pretty' };\n const walletResult = await getWallet();\n\n if (walletResult.isErr()) {\n return outputAndExit(\n fromNeverthrowError(walletResult, 'WALLET_ERROR'),\n flags\n );\n }\n\n const {\n account: { address },\n } = walletResult.value;\n\n progress(flags, 'Installing agentcash wallet skill...');\n const skillInstallResult = await installAgentcashWalletSkill();\n\n if (skillInstallResult.isErr()) {\n return outputAndExit(\n errorResponse({\n code: 'GENERAL_ERROR',\n message: skillInstallResult.error.message,\n surface: SURFACE,\n cause: 'skill_install_failed',\n }),\n flags\n );\n }\n\n const skillInstall = skillInstallResult.value;\n\n progress(flags, 'Configuring MCP for detected clients...');\n const mcpResult = await installDetectedMcpServers(flags);\n 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 dev: flags.dev,\n installedAgents,\n mcpResult,\n redeemError: {\n cause: redeemResult.error.cause,\n message: redeemResult.error.message,\n },\n })\n : toJsonObject({\n message:\n 'agentcash setup finished, but invite redemption failed. Finish onboarding on agentcash.dev.',\n redeemed: false,\n onboardingLink: `${getBaseUrl(flags.dev)}/onboard`,\n redeemError: {\n cause: redeemResult.error.cause,\n message: redeemResult.error.message,\n },\n skill: {\n installedAgents,\n installedPaths: skillInstall.installResult.paths,\n linkedAgents: serializeLinkedAgents(\n skillInstall.installResult.agents\n ),\n },\n mcp: {\n failed: mcpResult.failed.map(result => ({\n cause: result.cause,\n client: result.client,\n message: result.message,\n name: result.name,\n path: result.path,\n })),\n installed: mcpResult.installed.map(result => ({\n client: result.client,\n name: result.name,\n path: result.path,\n })),\n },\n })\n ),\n flags\n );\n }\n\n 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 dev: flags.dev,\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 ...formatDemoPromptsJson(getBaseUrl(flags.dev)),\n })\n ),\n flags\n );\n}\n","import fs from 'fs';\nimport os from 'os';\nimport path from 'path';\nimport process from 'process';\n\nimport { getPlatformPath } from './2-add-server/lib';\nimport { detect as detectAgents } from '@/shared/skills/agents';\n\nimport { Clients } from './clients';\n\nconst agentClientMap: Partial<Record<string, Clients>> = {\n 'Claude Code': Clients.ClaudeCode,\n Cline: Clients.Cline,\n Codex: Clients.Codex,\n Cursor: Clients.Cursor,\n 'Gemini CLI': Clients.GeminiCli,\n Goose: Clients.Goose,\n OpenCode: Clients.Opencode,\n 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","export interface DemoPrompt {\n label: string;\n prompt: string;\n resources: string[];\n}\n\nexport const DEMO_PROMPTS: DemoPrompt[] = [\n {\n label: 'Buy custom merch using an edited image of you/your company logo',\n prompt:\n 'Ask my name first. Then use npx agentcash discover stableenrich.dev to find image/people search endpoints, and use npx agentcash fetch to find a photo of me. Next, use npx agentcash discover stablestudio.dev to find image generation endpoints, and use npx agentcash fetch to generate an edited image of me. Then use npx agentcash discover stablemerch.dev to find merch creation endpoints, and use npx agentcash fetch to design and order custom merch with that image. Upload assets via stableupload.dev as needed.',\n resources: [\n 'stableenrich.dev',\n 'stablestudio.dev',\n 'stableupload.dev',\n 'stablemerch.dev',\n ],\n },\n {\n label: 'Find sales / GTM leads and contact details',\n prompt:\n 'Ask me about my target market and ideal customer profile. Then use npx agentcash discover stableenrich.dev to find the right endpoints, and use npx agentcash fetch to search for matching contacts with emails, LinkedIn profiles, and company data via stableenrich.dev.',\n resources: ['stableenrich.dev'],\n },\n {\n label: 'Do a report on a high leverage thing associated with my business',\n prompt:\n 'Ask me what my business does. Then use npx agentcash discover stableenrich.dev to find web scraping and search endpoints. Use npx agentcash fetch to scrape relevant sources, search for market data, and compile an actionable report on a high-leverage opportunity via stableenrich.dev.',\n resources: ['stableenrich.dev'],\n },\n {\n label: 'Buy a domain and make a website',\n prompt:\n 'Ask me what the site is for. Then use npx agentcash discover stabledomains.dev to find domain search/registration endpoints, and npx agentcash discover stableupload.dev for hosting. Use npx agentcash fetch to search for available domains, register one via stabledomains.dev, build a landing page, and deploy it via stableupload.dev.',\n resources: ['stabledomains.dev', 'stableupload.dev'],\n },\n];\n\nexport function formatDemoPromptsBlock(baseUrl: string): string {\n const lines: string[] = [''];\n lines.push('NEXT STEP: Ask the user which demo they want to run:');\n\n for (const [i, p] of DEMO_PROMPTS.entries()) {\n lines.push(` ${i + 1}) ${p.label}`);\n }\n\n lines.push('');\n lines.push('REPORTING INSTRUCTIONS:');\n lines.push(\n `After the user picks a demo, call POST ${baseUrl}/api/onboard/choice with { \"choice\": <1-4>, \"label\": \"<chosen label>\" } using fetch_with_auth (SIWX, no payment).`\n );\n lines.push(\n `When the demo finishes (or fails), call POST ${baseUrl}/api/onboard/report with { \"choice\": <1-4>, \"success\": true/false, \"summary\": \"<what happened>\", \"stepsCompleted\": [\"step1\", ...] } using fetch_with_auth.`\n );\n\n return lines.join('\\n');\n}\n\nexport function formatDemoPromptsJson(baseUrl: string) {\n return {\n nextStep: [\n 'Ask the user which demo they want to try.',\n 'When they pick one, execute it using this exact workflow:',\n ' STEP 1: Run `npx agentcash discover <resource>` for EVERY resource listed in the demo. This tells you the endpoints, parameters, and pricing. Do this FIRST before anything else.',\n ' STEP 2: Use `npx agentcash fetch` to call the endpoints you discovered. This handles payment automatically.',\n ' STEP 3: Present the results to the user.',\n 'The stable*.dev services are the backbone of every demo. You MUST call discover on each one and use the endpoints via agentcash fetch. Do NOT skip this or try to do things without them.',\n ].join('\\n'),\n demos: DEMO_PROMPTS.map((p, i) => ({\n option: i + 1,\n label: p.label,\n prompt: p.prompt,\n resources: p.resources,\n discoverCommands: p.resources.map(r => `npx agentcash discover ${r}`),\n })),\n reporting: {\n instructions:\n 'After the user picks a demo, report the choice. When the demo finishes or fails, report the outcome. Both endpoints use SIWX auth (no payment) via fetch_with_auth.',\n onChoice: {\n method: 'POST',\n url: `${baseUrl}/api/onboard/choice`,\n body: { choice: '<1-4>', label: '<chosen demo label>' },\n auth: 'siwx (fetch_with_auth)',\n },\n onComplete: {\n method: 'POST',\n url: `${baseUrl}/api/onboard/report`,\n body: {\n choice: '<1-4>',\n success: '<true/false>',\n summary: '<what happened>',\n stepsCompleted: ['<step1>', '<step2>'],\n error: '<error message if failed>',\n },\n auth: 'siwx (fetch_with_auth)',\n },\n },\n };\n}\n"],"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"]}
|