agentcash 0.13.8 → 0.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/dist/cjs/run-server.cjs +76 -19
  2. package/dist/esm/{add-skill-5O3R2PAD.js → add-skill-JHBOH5SG.js} +4 -3
  3. package/dist/esm/{add-skill-5O3R2PAD.js.map → add-skill-JHBOH5SG.js.map} +1 -1
  4. package/dist/esm/{bridge-3T5NWKDE.js → bridge-YU2PE54M.js} +4 -3
  5. package/dist/esm/{bridge-3T5NWKDE.js.map → bridge-YU2PE54M.js.map} +1 -1
  6. package/dist/esm/{chunk-THSTTUNV.js → chunk-6I5J7IHC.js} +2 -2
  7. package/dist/esm/{chunk-DBP743M5.js → chunk-7ZLVTQTS.js} +24 -6
  8. package/dist/esm/chunk-7ZLVTQTS.js.map +1 -0
  9. package/dist/esm/{chunk-QCP7Q6UF.js → chunk-BFOYXXLG.js} +2 -27
  10. package/dist/esm/chunk-BFOYXXLG.js.map +1 -0
  11. package/dist/esm/{chunk-54KBJ4F6.js → chunk-BNFMFAEF.js} +5 -5
  12. package/dist/esm/{chunk-UNG335FG.js → chunk-E52LAD7Z.js} +6 -4
  13. package/dist/esm/{chunk-UNG335FG.js.map → chunk-E52LAD7Z.js.map} +1 -1
  14. package/dist/esm/{chunk-2NMSPXMD.js → chunk-G5FHPXQL.js} +9 -7
  15. package/dist/esm/{chunk-2NMSPXMD.js.map → chunk-G5FHPXQL.js.map} +1 -1
  16. package/dist/esm/{chunk-NQ7OJNSO.js → chunk-KJCWPVQE.js} +5 -3
  17. package/dist/esm/{chunk-NQ7OJNSO.js.map → chunk-KJCWPVQE.js.map} +1 -1
  18. package/dist/esm/{chunk-CWU2QWNS.js → chunk-MSNAPI5G.js} +5 -3
  19. package/dist/esm/{chunk-CWU2QWNS.js.map → chunk-MSNAPI5G.js.map} +1 -1
  20. package/dist/esm/chunk-U6FRXL3X.js +28 -0
  21. package/dist/esm/chunk-U6FRXL3X.js.map +1 -0
  22. package/dist/esm/{chunk-OJGYNAKF.js → chunk-UCADMHNP.js} +2 -2
  23. package/dist/esm/{chunk-PZNRMIWW.js → chunk-V3HBA7NZ.js} +3 -3
  24. package/dist/esm/{chunk-TCXITLKU.js → chunk-XC5JT2NQ.js} +2 -2
  25. package/dist/esm/chunk-Y2J274RB.js +109 -0
  26. package/dist/esm/chunk-Y2J274RB.js.map +1 -0
  27. package/dist/esm/{chunk-FYEDHLYF.js → chunk-Y4BYJBYU.js} +5 -3
  28. package/dist/esm/{chunk-FYEDHLYF.js.map → chunk-Y4BYJBYU.js.map} +1 -1
  29. package/dist/esm/{chunk-63TCLGO6.js → chunk-YUPRVVFP.js} +6 -6
  30. package/dist/esm/{discover-PMVCPMAP.js → discover-654M2PZ3.js} +4 -3
  31. package/dist/esm/discover-654M2PZ3.js.map +1 -0
  32. package/dist/esm/{fetch-WACX4GKY.js → fetch-GPYZNSPB.js} +5 -4
  33. package/dist/esm/{fetch-WACX4GKY.js.map → fetch-GPYZNSPB.js.map} +1 -1
  34. package/dist/esm/{fund-QLGZGIUE.js → fund-HHL4QEU5.js} +5 -4
  35. package/dist/esm/{fund-QLGZGIUE.js.map → fund-HHL4QEU5.js.map} +1 -1
  36. package/dist/esm/index.js +24 -24
  37. package/dist/esm/{install-KTU4GOMT.js → install-D2IVOSIS.js} +8 -7
  38. package/dist/esm/{install-KTU4GOMT.js.map → install-D2IVOSIS.js.map} +1 -1
  39. package/dist/esm/{onboard-YNZPSS34.js → onboard-5SZ6ZCM5.js} +11 -10
  40. package/dist/esm/{onboard-YNZPSS34.js.map → onboard-5SZ6ZCM5.js.map} +1 -1
  41. package/dist/esm/{origins-UCEONL2Q.js → origins-JAC2K5A4.js} +4 -3
  42. package/dist/esm/{origins-UCEONL2Q.js.map → origins-JAC2K5A4.js.map} +1 -1
  43. package/dist/esm/{register-UN5RG5QY.js → register-AD43YD5O.js} +5 -4
  44. package/dist/esm/{register-UN5RG5QY.js.map → register-AD43YD5O.js.map} +1 -1
  45. package/dist/esm/{report-error-PIRP6TAE.js → report-error-V2J7LNUZ.js} +5 -4
  46. package/dist/esm/{report-error-PIRP6TAE.js.map → report-error-V2J7LNUZ.js.map} +1 -1
  47. package/dist/esm/{search-FDAGE4G3.js → search-WV2FO7OG.js} +6 -5
  48. package/dist/esm/{search-FDAGE4G3.js.map → search-WV2FO7OG.js.map} +1 -1
  49. package/dist/esm/{server-RHNWYLER.js → server-ADTFQX5M.js} +20 -16
  50. package/dist/esm/server-ADTFQX5M.js.map +1 -0
  51. package/dist/esm/{server-PEG4DEHG.js → server-RHVPZZ4R.js} +2 -2
  52. package/dist/esm/{try-2JMNINOB.js → try-36SR5JEG.js} +7 -6
  53. package/dist/esm/try-36SR5JEG.js.map +1 -0
  54. package/dist/esm/{wallet-IWRIAD6V.js → wallet-QOS3FPSF.js} +7 -6
  55. package/dist/esm/{wallet-IWRIAD6V.js.map → wallet-QOS3FPSF.js.map} +1 -1
  56. package/package.json +3 -3
  57. package/dist/esm/chunk-CR6PFCYR.js +0 -49
  58. package/dist/esm/chunk-CR6PFCYR.js.map +0 -1
  59. package/dist/esm/chunk-DBP743M5.js.map +0 -1
  60. package/dist/esm/chunk-QCP7Q6UF.js.map +0 -1
  61. package/dist/esm/discover-PMVCPMAP.js.map +0 -1
  62. package/dist/esm/server-RHNWYLER.js.map +0 -1
  63. package/dist/esm/try-2JMNINOB.js.map +0 -1
  64. /package/dist/esm/{chunk-THSTTUNV.js.map → chunk-6I5J7IHC.js.map} +0 -0
  65. /package/dist/esm/{chunk-54KBJ4F6.js.map → chunk-BNFMFAEF.js.map} +0 -0
  66. /package/dist/esm/{chunk-OJGYNAKF.js.map → chunk-UCADMHNP.js.map} +0 -0
  67. /package/dist/esm/{chunk-PZNRMIWW.js.map → chunk-V3HBA7NZ.js.map} +0 -0
  68. /package/dist/esm/{chunk-TCXITLKU.js.map → chunk-XC5JT2NQ.js.map} +0 -0
  69. /package/dist/esm/{chunk-63TCLGO6.js.map → chunk-YUPRVVFP.js.map} +0 -0
  70. /package/dist/esm/{server-PEG4DEHG.js.map → server-RHVPZZ4R.js.map} +0 -0
@@ -162325,7 +162325,7 @@ var import_path2 = require("path");
162325
162325
  var import_url2 = require("url");
162326
162326
  function getVersion3() {
162327
162327
  if (true) {
162328
- return "0.13.8";
162328
+ return "0.14.0";
162329
162329
  }
162330
162330
  const __dirname2 = (0, import_path2.dirname)((0, import_url2.fileURLToPath)(importMetaUrl));
162331
162331
  const pkg2 = JSON.parse(
@@ -162448,7 +162448,7 @@ var discoverResourcesSchema = zod_default.object({
162448
162448
  url: zodUrl.describe(TOOL_PARAMS.discoverApiEndpoints.url),
162449
162449
  includeGuidance: zod_default.boolean().optional().describe(TOOL_PARAMS.discoverApiEndpoints.includeGuidance)
162450
162450
  });
162451
- async function discoverResources(surface, args) {
162451
+ async function discoverResources(surface, args, options) {
162452
162452
  const parsedArgs = discoverResourcesSchema.safeParse(args);
162453
162453
  if (!parsedArgs.success) {
162454
162454
  return {
@@ -162460,25 +162460,82 @@ async function discoverResources(surface, args) {
162460
162460
  const { url: url5, includeGuidance } = parsedArgs.data;
162461
162461
  const guidance = includeGuidance === true ? GuidanceMode.Always : includeGuidance === false ? GuidanceMode.Never : GuidanceMode.Auto;
162462
162462
  const result = await discoverOriginSchema({ target: url5, guidance });
162463
- if (!result.found) {
162464
- log.error(`[discoverResources failed`, {
162465
- surface,
162466
- url: url5,
162467
- cause: result.cause,
162468
- message: result.message
162469
- });
162470
- return result;
162463
+ if (result.found) {
162464
+ return {
162465
+ ...result,
162466
+ endpoints: result.endpoints.map((e5) => ({ ...e5 }))
162467
+ };
162471
162468
  }
162472
- return {
162473
- ...result,
162474
- endpoints: result.endpoints.map((e5) => ({ ...e5 }))
162475
- };
162469
+ const scanResult = await fetchScanEndpoints(
162470
+ url5,
162471
+ options?.flags?.dev ?? false
162472
+ );
162473
+ if (scanResult) {
162474
+ log.info(
162475
+ `[discoverResources] scan fallback found ${scanResult.endpoints.length} endpoints for ${url5}`
162476
+ );
162477
+ return scanResult;
162478
+ }
162479
+ log.error(`[discoverResources] failed`, {
162480
+ surface,
162481
+ url: url5,
162482
+ cause: result.cause,
162483
+ message: result.message
162484
+ });
162485
+ return result;
162486
+ }
162487
+ var scanEndpointSchema = zod_default.object({
162488
+ method: zod_default.string(),
162489
+ path: zod_default.string(),
162490
+ summary: zod_default.string().optional().default(""),
162491
+ authMode: zod_default.string().optional(),
162492
+ price: zod_default.string().optional()
162493
+ });
162494
+ var scanResponseSchema = zod_default.object({
162495
+ origin: zod_default.string(),
162496
+ title: zod_default.string().optional().default(""),
162497
+ description: zod_default.string().optional().default(""),
162498
+ endpoints: zod_default.array(scanEndpointSchema)
162499
+ });
162500
+ async function fetchScanEndpoints(origin2, dev) {
162501
+ const baseUrl = getBaseUrl(dev);
162502
+ const url5 = `${baseUrl}/api/discover/scan?origin=${encodeURIComponent(origin2)}`;
162503
+ return fetch(url5, {
162504
+ signal: AbortSignal.timeout(5e3)
162505
+ }).then(async (res) => {
162506
+ if (!res.ok) return null;
162507
+ const data = scanResponseSchema.safeParse(await res.json());
162508
+ if (!data.success || data.data.endpoints.length === 0) return null;
162509
+ return {
162510
+ found: true,
162511
+ origin: data.data.origin,
162512
+ source: "scan",
162513
+ info: {
162514
+ title: data.data.title,
162515
+ description: data.data.description
162516
+ },
162517
+ endpoints: data.data.endpoints.map((e5) => ({
162518
+ path: e5.path,
162519
+ method: (e5.method || "GET").toUpperCase(),
162520
+ summary: e5.summary,
162521
+ authMode: e5.authMode ?? void 0,
162522
+ protocols: ["x402"],
162523
+ price: e5.price
162524
+ })),
162525
+ guidanceAvailable: false,
162526
+ guidanceTokens: 0,
162527
+ guidance: void 0
162528
+ };
162529
+ }).catch(() => null);
162476
162530
  }
162477
162531
 
162478
162532
  // src/server/tools/discover-resources.ts
162479
162533
  var toolName3 = "discover_api_endpoints";
162480
162534
  var OPENAPI_TRIED_PATHS = "/openapi.json, /.well-known/x402";
162481
- function registerDiscoveryTools(server) {
162535
+ var registerDiscoveryTools = ({
162536
+ server,
162537
+ flags
162538
+ }) => {
162482
162539
  server.registerTool(
162483
162540
  toolName3,
162484
162541
  {
@@ -162497,7 +162554,7 @@ function registerDiscoveryTools(server) {
162497
162554
  const discoverResult = await resultFromPromise(
162498
162555
  "discover",
162499
162556
  toolName3,
162500
- discoverResources(toolName3, args),
162557
+ discoverResources(toolName3, args, { flags }),
162501
162558
  (e5) => ({
162502
162559
  cause: "discover",
162503
162560
  message: e5 instanceof Error ? e5.message : String(e5)
@@ -162525,7 +162582,7 @@ function registerDiscoveryTools(server) {
162525
162582
  });
162526
162583
  })
162527
162584
  );
162528
- }
162585
+ };
162529
162586
  var hintMap = {
162530
162587
  timeout: "The server may be slow or unreachable. Try again later.",
162531
162588
  network: "Could not reach the server. Check the network connection and try again.",
@@ -169792,7 +169849,7 @@ var import_path3 = require("path");
169792
169849
  var import_url5 = require("url");
169793
169850
  function getVersion4() {
169794
169851
  if (true) {
169795
- return "0.13.8";
169852
+ return "0.14.0";
169796
169853
  }
169797
169854
  const __dirname2 = (0, import_path3.dirname)((0, import_url5.fileURLToPath)(importMetaUrl));
169798
169855
  const pkg2 = JSON.parse(
@@ -170181,7 +170238,7 @@ var startServer = async (flags) => {
170181
170238
  registerWalletTools(props);
170182
170239
  registerCheckEndpointTool(props);
170183
170240
  registerRedeemInviteTool(props);
170184
- registerDiscoveryTools(server);
170241
+ registerDiscoveryTools(props);
170185
170242
  registerTelemetryTools(props);
170186
170243
  registerSettingsTools(props);
170187
170244
  registerBridgeTool(props);
@@ -1,16 +1,17 @@
1
1
  import {
2
2
  resolveOrigin
3
- } from "./chunk-THSTTUNV.js";
3
+ } from "./chunk-6I5J7IHC.js";
4
4
  import {
5
5
  installSkills
6
6
  } from "./chunk-FVVSNDQR.js";
7
7
  import {
8
8
  addUserOrigin
9
9
  } from "./chunk-YIU364NZ.js";
10
- import "./chunk-CR6PFCYR.js";
10
+ import "./chunk-Y2J274RB.js";
11
11
  import "./chunk-CR2YGI3I.js";
12
12
  import "./chunk-KVSTJRSJ.js";
13
13
  import "./chunk-FB5CMO3J.js";
14
+ import "./chunk-U6FRXL3X.js";
14
15
  import {
15
16
  errorResponse,
16
17
  outputAndExit,
@@ -96,4 +97,4 @@ var addSkillCommand = async (input) => {
96
97
  export {
97
98
  addSkillCommand
98
99
  };
99
- //# sourceMappingURL=add-skill-5O3R2PAD.js.map
100
+ //# sourceMappingURL=add-skill-JHBOH5SG.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/shared/skills/origin.ts","../../src/cli/commands/add-skill.ts"],"sourcesContent":["import * as os from 'node:os';\nimport * as path from 'node:path';\n\nimport {\n safeMkdir,\n safeMkdtemp,\n safeRm,\n safeWriteFile,\n} from '@/shared/neverthrow/fs';\nimport { installSkills } from '@/shared/skills/core/install';\n\nimport type { InstallSkillsOptions } from './core/install';\nimport type { ResolvedOrigin } from '@/cli/lib/resolve-origin';\n\nexport async function addOriginSkill(\n origin: ResolvedOrigin,\n surface: string,\n options?: InstallSkillsOptions\n) {\n const tmpDirResult = await safeMkdtemp(\n surface,\n path.join(os.tmpdir(), 'agentcash-skill-add')\n );\n if (tmpDirResult.isErr()) {\n return tmpDirResult;\n }\n\n const tmpDir = tmpDirResult.value;\n\n const skillDir = path.join(tmpDir, originSkillTitle(origin));\n const mkdirResult = await safeMkdir(surface, skillDir, { recursive: true });\n\n if (mkdirResult.isErr()) {\n return mkdirResult;\n }\n\n const writeResult = await safeWriteFile(\n surface,\n path.join(skillDir, 'SKILL.md'),\n originSkillContent(origin)\n );\n\n if (writeResult.isErr()) {\n await safeRm(surface, tmpDir, { recursive: true, force: true });\n return writeResult;\n }\n\n const result = await installSkills(skillDir, options);\n\n await safeRm(surface, tmpDir, { recursive: true, force: true });\n\n return result;\n}\n\nconst originSkillTitle = (origin: ResolvedOrigin) =>\n origin.title.toLowerCase().replace(/[ .]/g, '-');\n\nconst originSkillContent = (origin: ResolvedOrigin) => `---\nname: ${originSkillTitle(origin)}\ndescription: ${origin.description}\ncommand: npx agentcash discover ${origin.url}\n---\nCall \\`npx agentcash discover ${origin.url}\\` to discover how to use ${origin.title}.`;\n","import { successResponse, outputAndExit, errorResponse } from '@/cli/output';\nimport { addUserOrigin } from '@/shared/user-origins';\n\nimport { resolveOrigin } from '../lib/resolve-origin';\nimport { addOriginSkill } from '@/shared/skills/origin';\n\nimport type { Command } from '@/types';\nimport type { DiscoverResourcesInput } from '@/operations/discover';\n\nconst SURFACE = 'cli:add-skill';\n\nexport const addSkillCommand: Command<DiscoverResourcesInput> = async input => {\n const resolved = await resolveOrigin(SURFACE, input);\n if (!resolved.ok) return outputAndExit(resolved.error, input);\n\n const { origin } = resolved;\n addUserOrigin(origin);\n\n const skillResult = await addOriginSkill(origin, SURFACE);\n\n if (!skillResult.isOk()) {\n return outputAndExit(\n errorResponse({\n code: 'GENERAL_ERROR',\n message: skillResult.error.message,\n surface: SURFACE,\n cause: 'skill_install_failed',\n }),\n input\n );\n }\n\n return outputAndExit(\n successResponse({\n ...origin,\n installed: skillResult.value.path,\n linkedAgents: skillResult.value.agents,\n note: 'Restart your MCP server for this origin to appear in the model context.',\n }),\n input\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,YAAY,QAAQ;AACpB,YAAY,UAAU;AAatB,eAAsB,eACpB,QACA,SACA,SACA;AACA,QAAM,eAAe,MAAM;AAAA,IACzB;AAAA,IACK,UAAQ,UAAO,GAAG,qBAAqB;AAAA,EAC9C;AACA,MAAI,aAAa,MAAM,GAAG;AACxB,WAAO;AAAA,EACT;AAEA,QAAM,SAAS,aAAa;AAE5B,QAAM,WAAgB,UAAK,QAAQ,iBAAiB,MAAM,CAAC;AAC3D,QAAM,cAAc,MAAM,UAAU,SAAS,UAAU,EAAE,WAAW,KAAK,CAAC;AAE1E,MAAI,YAAY,MAAM,GAAG;AACvB,WAAO;AAAA,EACT;AAEA,QAAM,cAAc,MAAM;AAAA,IACxB;AAAA,IACK,UAAK,UAAU,UAAU;AAAA,IAC9B,mBAAmB,MAAM;AAAA,EAC3B;AAEA,MAAI,YAAY,MAAM,GAAG;AACvB,UAAM,OAAO,SAAS,QAAQ,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AAC9D,WAAO;AAAA,EACT;AAEA,QAAM,SAAS,MAAM,cAAc,UAAU,OAAO;AAEpD,QAAM,OAAO,SAAS,QAAQ,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AAE9D,SAAO;AACT;AAEA,IAAM,mBAAmB,CAAC,WACxB,OAAO,MAAM,YAAY,EAAE,QAAQ,SAAS,GAAG;AAEjD,IAAM,qBAAqB,CAAC,WAA2B;AAAA,QAC/C,iBAAiB,MAAM,CAAC;AAAA,eACjB,OAAO,WAAW;AAAA,kCACC,OAAO,GAAG;AAAA;AAAA,gCAEZ,OAAO,GAAG,6BAA6B,OAAO,KAAK;;;ACrDnF,IAAM,UAAU;AAET,IAAM,kBAAmD,OAAM,UAAS;AAC7E,QAAM,WAAW,MAAM,cAAc,SAAS,KAAK;AACnD,MAAI,CAAC,SAAS,GAAI,QAAO,cAAc,SAAS,OAAO,KAAK;AAE5D,QAAM,EAAE,OAAO,IAAI;AACnB,gBAAc,MAAM;AAEpB,QAAM,cAAc,MAAM,eAAe,QAAQ,OAAO;AAExD,MAAI,CAAC,YAAY,KAAK,GAAG;AACvB,WAAO;AAAA,MACL,cAAc;AAAA,QACZ,MAAM;AAAA,QACN,SAAS,YAAY,MAAM;AAAA,QAC3B,SAAS;AAAA,QACT,OAAO;AAAA,MACT,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAAA,IACL,gBAAgB;AAAA,MACd,GAAG;AAAA,MACH,WAAW,YAAY,MAAM;AAAA,MAC7B,cAAc,YAAY,MAAM;AAAA,MAChC,MAAM;AAAA,IACR,CAAC;AAAA,IACD;AAAA,EACF;AACF;","names":[]}
1
+ {"version":3,"sources":["../../src/shared/skills/origin.ts","../../src/cli/commands/add-skill.ts"],"sourcesContent":["import * as os from 'node:os';\nimport * as path from 'node:path';\n\nimport {\n safeMkdir,\n safeMkdtemp,\n safeRm,\n safeWriteFile,\n} from '@/shared/neverthrow/fs';\nimport { installSkills } from '@/shared/skills/core/install';\n\nimport type { InstallSkillsOptions } from './core/install';\nimport type { ResolvedOrigin } from '@/cli/lib/resolve-origin';\n\nexport async function addOriginSkill(\n origin: ResolvedOrigin,\n surface: string,\n options?: InstallSkillsOptions\n) {\n const tmpDirResult = await safeMkdtemp(\n surface,\n path.join(os.tmpdir(), 'agentcash-skill-add')\n );\n if (tmpDirResult.isErr()) {\n return tmpDirResult;\n }\n\n const tmpDir = tmpDirResult.value;\n\n const skillDir = path.join(tmpDir, originSkillTitle(origin));\n const mkdirResult = await safeMkdir(surface, skillDir, { recursive: true });\n\n if (mkdirResult.isErr()) {\n return mkdirResult;\n }\n\n const writeResult = await safeWriteFile(\n surface,\n path.join(skillDir, 'SKILL.md'),\n originSkillContent(origin)\n );\n\n if (writeResult.isErr()) {\n await safeRm(surface, tmpDir, { recursive: true, force: true });\n return writeResult;\n }\n\n const result = await installSkills(skillDir, options);\n\n await safeRm(surface, tmpDir, { recursive: true, force: true });\n\n return result;\n}\n\nconst originSkillTitle = (origin: ResolvedOrigin) =>\n origin.title.toLowerCase().replace(/[ .]/g, '-');\n\nconst originSkillContent = (origin: ResolvedOrigin) => `---\nname: ${originSkillTitle(origin)}\ndescription: ${origin.description}\ncommand: npx agentcash discover ${origin.url}\n---\nCall \\`npx agentcash discover ${origin.url}\\` to discover how to use ${origin.title}.`;\n","import { successResponse, outputAndExit, errorResponse } from '@/cli/output';\nimport { addUserOrigin } from '@/shared/user-origins';\n\nimport { resolveOrigin } from '../lib/resolve-origin';\nimport { addOriginSkill } from '@/shared/skills/origin';\n\nimport type { Command } from '@/types';\nimport type { DiscoverResourcesInput } from '@/operations/discover';\n\nconst SURFACE = 'cli:add-skill';\n\nexport const addSkillCommand: Command<DiscoverResourcesInput> = async input => {\n const resolved = await resolveOrigin(SURFACE, input);\n if (!resolved.ok) return outputAndExit(resolved.error, input);\n\n const { origin } = resolved;\n addUserOrigin(origin);\n\n const skillResult = await addOriginSkill(origin, SURFACE);\n\n if (!skillResult.isOk()) {\n return outputAndExit(\n errorResponse({\n code: 'GENERAL_ERROR',\n message: skillResult.error.message,\n surface: SURFACE,\n cause: 'skill_install_failed',\n }),\n input\n );\n }\n\n return outputAndExit(\n successResponse({\n ...origin,\n installed: skillResult.value.path,\n linkedAgents: skillResult.value.agents,\n note: 'Restart your MCP server for this origin to appear in the model context.',\n }),\n input\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,YAAY,QAAQ;AACpB,YAAY,UAAU;AAatB,eAAsB,eACpB,QACA,SACA,SACA;AACA,QAAM,eAAe,MAAM;AAAA,IACzB;AAAA,IACK,UAAQ,UAAO,GAAG,qBAAqB;AAAA,EAC9C;AACA,MAAI,aAAa,MAAM,GAAG;AACxB,WAAO;AAAA,EACT;AAEA,QAAM,SAAS,aAAa;AAE5B,QAAM,WAAgB,UAAK,QAAQ,iBAAiB,MAAM,CAAC;AAC3D,QAAM,cAAc,MAAM,UAAU,SAAS,UAAU,EAAE,WAAW,KAAK,CAAC;AAE1E,MAAI,YAAY,MAAM,GAAG;AACvB,WAAO;AAAA,EACT;AAEA,QAAM,cAAc,MAAM;AAAA,IACxB;AAAA,IACK,UAAK,UAAU,UAAU;AAAA,IAC9B,mBAAmB,MAAM;AAAA,EAC3B;AAEA,MAAI,YAAY,MAAM,GAAG;AACvB,UAAM,OAAO,SAAS,QAAQ,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AAC9D,WAAO;AAAA,EACT;AAEA,QAAM,SAAS,MAAM,cAAc,UAAU,OAAO;AAEpD,QAAM,OAAO,SAAS,QAAQ,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AAE9D,SAAO;AACT;AAEA,IAAM,mBAAmB,CAAC,WACxB,OAAO,MAAM,YAAY,EAAE,QAAQ,SAAS,GAAG;AAEjD,IAAM,qBAAqB,CAAC,WAA2B;AAAA,QAC/C,iBAAiB,MAAM,CAAC;AAAA,eACjB,OAAO,WAAW;AAAA,kCACC,OAAO,GAAG;AAAA;AAAA,gCAEZ,OAAO,GAAG,6BAA6B,OAAO,KAAK;;;ACrDnF,IAAM,UAAU;AAET,IAAM,kBAAmD,OAAM,UAAS;AAC7E,QAAM,WAAW,MAAM,cAAc,SAAS,KAAK;AACnD,MAAI,CAAC,SAAS,GAAI,QAAO,cAAc,SAAS,OAAO,KAAK;AAE5D,QAAM,EAAE,OAAO,IAAI;AACnB,gBAAc,MAAM;AAEpB,QAAM,cAAc,MAAM,eAAe,QAAQ,OAAO;AAExD,MAAI,CAAC,YAAY,KAAK,GAAG;AACvB,WAAO;AAAA,MACL,cAAc;AAAA,QACZ,MAAM;AAAA,QACN,SAAS,YAAY,MAAM;AAAA,QAC3B,SAAS;AAAA,QACT,OAAO;AAAA,MACT,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAAA,IACL,gBAAgB;AAAA,MACd,GAAG;AAAA,MACH,WAAW,YAAY,MAAM;AAAA,MAC7B,cAAc,YAAY,MAAM;AAAA,MAChC,MAAM;AAAA,IACR,CAAC;AAAA,IACD;AAAA,EACF;AACF;","names":[]}
@@ -1,17 +1,18 @@
1
1
  import {
2
2
  bridge,
3
3
  bridgeSchema
4
- } from "./chunk-FYEDHLYF.js";
4
+ } from "./chunk-Y4BYJBYU.js";
5
5
  import {
6
6
  DESCRIPTIONS
7
7
  } from "./chunk-CR2YGI3I.js";
8
- import "./chunk-QCP7Q6UF.js";
8
+ import "./chunk-BFOYXXLG.js";
9
9
  import {
10
10
  getWalletOrExit
11
11
  } from "./chunk-7AT3NXJ2.js";
12
12
  import "./chunk-F3KGAMIA.js";
13
13
  import "./chunk-NPJV7AMV.js";
14
14
  import "./chunk-KVSTJRSJ.js";
15
+ import "./chunk-U6FRXL3X.js";
15
16
  import {
16
17
  errorResponse,
17
18
  fromNeverthrowError,
@@ -53,4 +54,4 @@ var bridgeCommand = async (args) => {
53
54
  export {
54
55
  bridgeCommand
55
56
  };
56
- //# sourceMappingURL=bridge-3T5NWKDE.js.map
57
+ //# sourceMappingURL=bridge-YU2PE54M.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/cli/commands/bridge.ts"],"sourcesContent":["import {\n successResponse,\n fromNeverthrowError,\n outputAndExit,\n errorResponse,\n} from '@/cli/output';\n\nimport { bridge, bridgeSchema, type BridgeInput } from '@/operations/bridge';\nimport { DESCRIPTIONS } from '@/shared/descriptions';\nimport type { Command } from '@/types';\nimport { getWalletOrExit } from '../lib/get-wallet-or-exit';\n\nconst SURFACE = `cli:${DESCRIPTIONS.bridge.toolNames.cli}`;\n\nexport const bridgeCommand: Command<BridgeInput> = async args => {\n const wallets = await getWalletOrExit(args);\n\n const parsedArgs = bridgeSchema.safeParse(args);\n\n if (!parsedArgs.success) {\n return outputAndExit(\n errorResponse({\n code: 'INVALID_INPUT',\n message: parsedArgs.error.message,\n surface: SURFACE,\n cause: 'validation',\n }),\n args\n );\n }\n\n const bridgeResult = await bridge({ ...args, ...parsedArgs.data }, wallets);\n\n if (bridgeResult.isErr()) {\n return outputAndExit(fromNeverthrowError(bridgeResult), args);\n }\n\n return outputAndExit(\n successResponse({\n success: true,\n }),\n args\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAYA,IAAM,UAAU,OAAO,aAAa,OAAO,UAAU,GAAG;AAEjD,IAAM,gBAAsC,OAAM,SAAQ;AAC/D,QAAM,UAAU,MAAM,gBAAgB,IAAI;AAE1C,QAAM,aAAa,aAAa,UAAU,IAAI;AAE9C,MAAI,CAAC,WAAW,SAAS;AACvB,WAAO;AAAA,MACL,cAAc;AAAA,QACZ,MAAM;AAAA,QACN,SAAS,WAAW,MAAM;AAAA,QAC1B,SAAS;AAAA,QACT,OAAO;AAAA,MACT,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAEA,QAAM,eAAe,MAAM,OAAO,EAAE,GAAG,MAAM,GAAG,WAAW,KAAK,GAAG,OAAO;AAE1E,MAAI,aAAa,MAAM,GAAG;AACxB,WAAO,cAAc,oBAAoB,YAAY,GAAG,IAAI;AAAA,EAC9D;AAEA,SAAO;AAAA,IACL,gBAAgB;AAAA,MACd,SAAS;AAAA,IACX,CAAC;AAAA,IACD;AAAA,EACF;AACF;","names":[]}
1
+ {"version":3,"sources":["../../src/cli/commands/bridge.ts"],"sourcesContent":["import {\n successResponse,\n fromNeverthrowError,\n outputAndExit,\n errorResponse,\n} from '@/cli/output';\n\nimport { bridge, bridgeSchema, type BridgeInput } from '@/operations/bridge';\nimport { DESCRIPTIONS } from '@/shared/descriptions';\nimport type { Command } from '@/types';\nimport { getWalletOrExit } from '../lib/get-wallet-or-exit';\n\nconst SURFACE = `cli:${DESCRIPTIONS.bridge.toolNames.cli}`;\n\nexport const bridgeCommand: Command<BridgeInput> = async args => {\n const wallets = await getWalletOrExit(args);\n\n const parsedArgs = bridgeSchema.safeParse(args);\n\n if (!parsedArgs.success) {\n return outputAndExit(\n errorResponse({\n code: 'INVALID_INPUT',\n message: parsedArgs.error.message,\n surface: SURFACE,\n cause: 'validation',\n }),\n args\n );\n }\n\n const bridgeResult = await bridge({ ...args, ...parsedArgs.data }, wallets);\n\n if (bridgeResult.isErr()) {\n return outputAndExit(fromNeverthrowError(bridgeResult), args);\n }\n\n return outputAndExit(\n successResponse({\n success: true,\n }),\n args\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAYA,IAAM,UAAU,OAAO,aAAa,OAAO,UAAU,GAAG;AAEjD,IAAM,gBAAsC,OAAM,SAAQ;AAC/D,QAAM,UAAU,MAAM,gBAAgB,IAAI;AAE1C,QAAM,aAAa,aAAa,UAAU,IAAI;AAE9C,MAAI,CAAC,WAAW,SAAS;AACvB,WAAO;AAAA,MACL,cAAc;AAAA,QACZ,MAAM;AAAA,QACN,SAAS,WAAW,MAAM;AAAA,QAC1B,SAAS;AAAA,QACT,OAAO;AAAA,MACT,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAEA,QAAM,eAAe,MAAM,OAAO,EAAE,GAAG,MAAM,GAAG,WAAW,KAAK,GAAG,OAAO;AAE1E,MAAI,aAAa,MAAM,GAAG;AACxB,WAAO,cAAc,oBAAoB,YAAY,GAAG,IAAI;AAAA,EAC9D;AAEA,SAAO;AAAA,IACL,gBAAgB;AAAA,MACd,SAAS;AAAA,IACX,CAAC;AAAA,IACD;AAAA,EACF;AACF;","names":[]}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  discoverResources
3
- } from "./chunk-CR6PFCYR.js";
3
+ } from "./chunk-Y2J274RB.js";
4
4
  import {
5
5
  errorResponse
6
6
  } from "./chunk-7EBJ4BCH.js";
@@ -52,4 +52,4 @@ function resolveDescription(result) {
52
52
  export {
53
53
  resolveOrigin
54
54
  };
55
- //# sourceMappingURL=chunk-THSTTUNV.js.map
55
+ //# sourceMappingURL=chunk-6I5J7IHC.js.map
@@ -6,7 +6,7 @@ import {
6
6
  } from "./chunk-27DZCYDB.js";
7
7
  import {
8
8
  INSTALL_PACKAGE_SPECIFIER
9
- } from "./chunk-TCXITLKU.js";
9
+ } from "./chunk-XC5JT2NQ.js";
10
10
  import {
11
11
  log,
12
12
  safeReadFile,
@@ -19,6 +19,7 @@ import {
19
19
  // src/cli/commands/install/2-add-server/index.ts
20
20
  import fs2 from "fs";
21
21
  import path3 from "path";
22
+ import { fileURLToPath } from "url";
22
23
  import chalk from "chalk";
23
24
  import { log as clackLog, confirm, outro, stream } from "@clack/prompts";
24
25
 
@@ -295,23 +296,40 @@ var setNestedValue = (obj, path4, value) => {
295
296
  };
296
297
 
297
298
  // src/cli/commands/install/2-add-server/index.ts
299
+ var getDevPackageRoot = () => {
300
+ let current = path3.dirname(fileURLToPath(import.meta.url));
301
+ while (true) {
302
+ const packageJson = path3.join(current, "package.json");
303
+ const tsconfig = path3.join(current, "tsconfig.json");
304
+ const entrypoint = path3.join(current, "src", "index.ts");
305
+ if (fs2.existsSync(packageJson) && fs2.existsSync(tsconfig) && fs2.existsSync(entrypoint)) {
306
+ return current;
307
+ }
308
+ const parent = path3.dirname(current);
309
+ if (parent === current) {
310
+ break;
311
+ }
312
+ current = parent;
313
+ }
314
+ return process.cwd();
315
+ };
298
316
  var getMcpConfig = (globalFlags) => {
299
317
  if (globalFlags.dev) {
300
- const cwd = process.cwd();
318
+ const packageRoot = getDevPackageRoot();
301
319
  return {
302
320
  serverName: "agentcash",
303
321
  // MCP clients may launch this from outside the package directory, so
304
322
  // pass the package tsconfig explicitly to keep path aliases working.
305
323
  command: path3.join(
306
- cwd,
324
+ packageRoot,
307
325
  "node_modules",
308
326
  ".bin",
309
327
  process.platform === "win32" ? "tsx.cmd" : "tsx"
310
328
  ),
311
329
  args: [
312
330
  "--tsconfig",
313
- path3.join(cwd, "tsconfig.json"),
314
- path3.join(cwd, "src", "index.ts"),
331
+ path3.join(packageRoot, "tsconfig.json"),
332
+ path3.join(packageRoot, "src", "index.ts"),
315
333
  "--dev"
316
334
  ]
317
335
  };
@@ -610,4 +628,4 @@ export {
610
628
  tryAddServer,
611
629
  addServer
612
630
  };
613
- //# sourceMappingURL=chunk-DBP743M5.js.map
631
+ //# sourceMappingURL=chunk-7ZLVTQTS.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/cli/commands/install/2-add-server/index.ts","../../src/cli/commands/install/2-add-server/lib/client-config-file.ts","../../src/cli/commands/install/2-add-server/lib/platforms.ts","../../src/cli/commands/install/2-add-server/lib/file-types.ts","../../src/cli/commands/install/2-add-server/lib/result.ts","../../src/cli/commands/install/2-add-server/lib/nested-values.ts"],"sourcesContent":["import fs from 'fs';\nimport path from 'path';\nimport { fileURLToPath } from 'url';\n\nimport chalk from 'chalk';\n\nimport { log as clackLog, confirm, outro, stream } from '@clack/prompts';\n\nimport { safeWriteFile } from '@/shared/neverthrow/fs';\nimport { log } from '@/shared/log';\n\nimport { clientMetadata, Clients } from '../clients';\nimport {\n FileFormat,\n parseClientConfig,\n serializeClientConfig,\n stringifyObject,\n getClientConfigFile,\n getNestedValue,\n setNestedValue,\n} from './lib';\n\nimport { INSTALL_PACKAGE_SPECIFIER } from '@/shared/version';\n\nimport { wait } from '@/cli/lib/wait';\n\nimport type { ClientConfigObject } from './types';\nimport type { GlobalFlags } from '@/types';\n\n// eslint-disable-next-line @typescript-eslint/consistent-type-definitions\nexport type AddServerSuccess = {\n client: Clients;\n name: string;\n path: string;\n};\n\n// eslint-disable-next-line @typescript-eslint/consistent-type-definitions\nexport type AddServerFailure = {\n client: Clients;\n name: string;\n path?: string;\n cause: string;\n message: string;\n};\n\ntype AddServerResult =\n | {\n success: true;\n value: AddServerSuccess;\n }\n | {\n success: false;\n error: AddServerFailure;\n };\n\ninterface AddServerOptions {\n silent?: boolean;\n}\n\nconst getDevPackageRoot = () => {\n let current = path.dirname(fileURLToPath(import.meta.url));\n\n while (true) {\n const packageJson = path.join(current, 'package.json');\n const tsconfig = path.join(current, 'tsconfig.json');\n const entrypoint = path.join(current, 'src', 'index.ts');\n\n if (\n fs.existsSync(packageJson) &&\n fs.existsSync(tsconfig) &&\n fs.existsSync(entrypoint)\n ) {\n return current;\n }\n\n const parent = path.dirname(current);\n if (parent === current) {\n break;\n }\n current = parent;\n }\n\n return process.cwd();\n};\n\nconst getMcpConfig = (globalFlags: GlobalFlags) => {\n if (globalFlags.dev) {\n const packageRoot = getDevPackageRoot();\n return {\n serverName: 'agentcash',\n // MCP clients may launch this from outside the package directory, so\n // pass the package tsconfig explicitly to keep path aliases working.\n command: path.join(\n packageRoot,\n 'node_modules',\n '.bin',\n process.platform === 'win32' ? 'tsx.cmd' : 'tsx'\n ),\n args: [\n '--tsconfig',\n path.join(packageRoot, 'tsconfig.json'),\n path.join(packageRoot, 'src', 'index.ts'),\n '--dev',\n ],\n };\n }\n return {\n serverName: 'agentcash',\n command: 'npx',\n args: ['-y', `agentcash@${INSTALL_PACKAGE_SPECIFIER}`],\n };\n};\n\nexport const tryAddServer = async (\n client: Clients,\n globalFlags: GlobalFlags,\n options: AddServerOptions = {}\n): Promise<AddServerResult> => {\n const { serverName, command, args } = getMcpConfig(globalFlags);\n const { name } = clientMetadata[client];\n\n if (client === Clients.Warp) {\n if (globalFlags.yes || options.silent) {\n return {\n success: false,\n error: {\n client,\n name,\n path: 'no-local-config',\n cause: 'manual_install_required',\n message: 'Warp requires a manual MCP installation through its UI',\n },\n };\n }\n\n clackLog.info(\n chalk.bold.yellow('Warp requires a manual installation through their UI.')\n );\n clackLog.message(\n 'Please copy the following configuration object and add it to your Warp MCP config:'\n );\n console.log();\n console.log(\n JSON.stringify(\n {\n [serverName]: {\n command,\n args,\n working_directory: null,\n start_on_launch: true,\n },\n },\n null,\n 2\n )\n );\n console.log();\n clackLog.message(\n `Read Warp's documentation at https://docs.warp.dev/knowledge-and-collaboration/mcp`\n );\n const addedToWarp = await confirm({\n message: 'Did you add the MCP server to your Warp config?',\n });\n if (!addedToWarp) {\n return {\n success: false,\n error: {\n client,\n name,\n path: 'no-local-config',\n cause: 'warp_mcp_server_not_added',\n message: 'Warp MCP server not added',\n },\n };\n }\n\n return {\n success: true,\n value: {\n client,\n name,\n path: 'no-local-config',\n },\n };\n }\n\n const clientFileTarget = getClientConfigFile(client);\n\n let config: ClientConfigObject = {};\n let content: string | undefined = undefined;\n\n log.info(`Checking if config file exists at: ${clientFileTarget.path}`);\n if (!fs.existsSync(clientFileTarget.path)) {\n log.info('Config file not found, creating default empty config');\n setNestedValue(config, clientFileTarget.configKey, {});\n log.info('Config created successfully');\n if (!globalFlags.yes) {\n await wait({\n startText: 'Locating config file',\n stopText: `No config found, creating default empty config`,\n ms: 1000,\n });\n }\n } else {\n log.info('Config file found, reading config file content');\n const parseResult = await parseClientConfig(clientFileTarget);\n\n if (parseResult.isErr()) {\n return {\n success: false,\n error: {\n client,\n name,\n path: clientFileTarget.path,\n cause: parseResult.error.cause,\n message: `Error reading config: ${parseResult.error.message}`,\n },\n };\n }\n\n const { config: rawConfig, fileContent } = parseResult.value;\n config = rawConfig;\n content = fileContent;\n const existingValue = getNestedValue(rawConfig, clientFileTarget.configKey);\n if (!existingValue) {\n setNestedValue(rawConfig, clientFileTarget.configKey, {});\n }\n if (!globalFlags.yes) {\n await wait({\n startText: `Locating config file`,\n stopText: `Config loaded from ${clientFileTarget.path}`,\n ms: 1000,\n });\n }\n }\n\n const servers = getNestedValue(config, clientFileTarget.configKey);\n if (!servers || typeof servers !== 'object') {\n log.error(`Invalid ${clientFileTarget.configKey} structure in config`);\n return {\n success: false,\n error: {\n client,\n name,\n path: clientFileTarget.path,\n cause: 'invalid_config',\n message: `Invalid ${clientFileTarget.configKey} structure in config`,\n },\n };\n }\n\n if (client === Clients.Goose) {\n servers[serverName] = {\n name: serverName,\n cmd: command,\n args,\n enabled: true,\n envs: {},\n type: 'stdio',\n timeout: 300,\n };\n } else if (client === Clients.Zed) {\n // Zed has a different config structure\n servers[serverName] = {\n source: 'custom',\n command,\n args,\n env: {},\n };\n } else if (client === Clients.OpenCode) {\n servers[serverName] = {\n type: 'local',\n command: [command, ...args],\n enabled: true,\n environment: {},\n };\n } else {\n servers[serverName] = {\n command,\n args,\n };\n }\n\n if (!globalFlags.yes) {\n await new Promise(resolve => setTimeout(resolve, 1000));\n\n clackLog.step(\n `The following will be added to ${chalk.bold.underline(clientFileTarget.path)}`\n );\n }\n\n const configStr = formatDiffByFormat(\n {\n [clientFileTarget.configKey]: {\n [serverName]: servers[serverName] as object,\n },\n },\n clientFileTarget.format\n );\n\n if (!globalFlags.yes) {\n await stream.message(\n (async function* () {\n for (const num of Array.from(\n { length: configStr.length },\n (_, i) => i\n )) {\n const char = configStr[num]!;\n yield char;\n if (!['\\n', ' ', '─', '╮', '╭', '╰', '╯', '│'].includes(char)) {\n await new Promise(resolve => setTimeout(resolve, 5));\n } else {\n await new Promise(resolve => setTimeout(resolve, 2));\n }\n }\n })()\n );\n\n await new Promise(resolve => setTimeout(resolve, 1000));\n }\n\n const isConfirmed = globalFlags.yes\n ? true\n : await confirm({\n message: `Would you like to proceed?`,\n active: 'Install MCP',\n inactive: 'Cancel',\n });\n if (isConfirmed !== true) {\n return {\n success: false,\n error: {\n client,\n name,\n path: clientFileTarget.path,\n cause: 'cancelled',\n message: 'Installation cancelled',\n },\n };\n }\n\n const configContent = serializeClientConfig(\n clientFileTarget,\n config,\n content\n );\n\n const writeResult = await safeWriteFile(\n 'config_file',\n clientFileTarget.path,\n configContent\n );\n\n if (writeResult.isErr()) {\n return {\n success: false,\n error: {\n client,\n name,\n path: clientFileTarget.path,\n cause: writeResult.error.cause,\n message: `Error writing config: ${writeResult.error.message}`,\n },\n };\n }\n\n if (!options.silent) {\n clackLog.success(chalk.bold.green(`Added agentcash MCP to ${name}`));\n }\n\n return {\n success: true,\n value: {\n client,\n name,\n path: clientFileTarget.path,\n },\n };\n};\n\nexport const addServer = async (client: Clients, globalFlags: GlobalFlags) => {\n const result = await tryAddServer(client, globalFlags);\n\n if (result.success) {\n return;\n }\n\n if (result.error.cause === 'cancelled') {\n outro(chalk.bold.red(result.error.message));\n process.exit(0);\n }\n\n clackLog.error(chalk.bold.red(result.error.message));\n outro(chalk.bold.red(`Error adding agentcash MCP to ${result.error.name}`));\n process.exit(1);\n};\n\nconst formatDiffByFormat = (obj: object, format: FileFormat) => {\n const str = stringifyObject(obj, format);\n switch (format) {\n case FileFormat.JSON: {\n const numLines = str.split('\\n').length;\n return str\n .split('\\n')\n .map((line, index) => {\n const diffLines = [0, 1, numLines - 2, numLines - 1];\n const isDiffLine = !diffLines.includes(index);\n if (isDiffLine) {\n return `${chalk.bold.green(`+ ${line.slice(2)}`)}`;\n }\n return line;\n })\n .join('\\n');\n }\n case FileFormat.YAML: {\n return str\n .split('\\n')\n .map((line, index) => {\n const diffLines = [0, 1, str.length - 2, str.length - 1];\n const isDiffLine = !diffLines.includes(index);\n if (isDiffLine) {\n return `${chalk.bold.green(`+ ${line.slice(2)}`)}`;\n }\n return line;\n })\n .join('\\n');\n }\n case FileFormat.TOML: {\n return str\n .split('\\n')\n .filter(line => line.trim() !== '')\n .map(line => {\n return `${chalk.bold.green(`+ ${line.trim()}`)}`;\n })\n .join('\\n');\n }\n }\n};\n","import os from 'os';\nimport path from 'path';\nimport process from 'process';\nimport fs from 'fs';\n\nimport { getPlatformPath } from './platforms';\nimport { log } from '@/shared/log';\n\nimport { Clients } from '../../clients';\n\nimport type { ClientConfigFile } from '../types';\nimport { FileFormat } from './file-types';\n\nexport const getClientConfigFile = (client: Clients): ClientConfigFile => {\n const homeDir = os.homedir();\n const { baseDir, vscodePath } = getPlatformPath();\n\n switch (client) {\n case Clients.Claude:\n return {\n path: path.join(baseDir, 'Claude', 'claude_desktop_config.json'),\n configKey: 'mcpServers',\n format: FileFormat.JSON,\n };\n case Clients.Cline:\n return {\n path: path.join(\n baseDir,\n vscodePath,\n 'globalStorage',\n 'saoudrizwan.claude-dev',\n 'settings',\n 'cline_mcp_settings.json'\n ),\n configKey: 'mcpServers',\n format: FileFormat.JSON,\n };\n case Clients.Windsurf:\n return {\n path: path.join(homeDir, '.codeium', 'windsurf', 'mcp_config.json'),\n configKey: 'mcpServers',\n format: FileFormat.JSON,\n };\n case Clients.Cursor:\n return {\n path: path.join(homeDir, '.cursor', 'mcp.json'),\n configKey: 'mcpServers',\n format: FileFormat.JSON,\n };\n case Clients.Warp:\n return {\n path: 'no-local-config', // it's okay this isn't a real path, we never use it\n configKey: 'mcpServers',\n format: FileFormat.JSON,\n };\n case Clients.GeminiCli:\n return {\n path: path.join(homeDir, '.gemini', 'settings.json'),\n configKey: 'mcpServers',\n format: FileFormat.JSON,\n };\n case Clients.ClaudeCode:\n return {\n path: path.join(homeDir, '.claude.json'),\n configKey: 'mcpServers',\n format: FileFormat.JSON,\n };\n case Clients.Goose:\n return {\n path: path.join(homeDir, '.config', 'goose', 'config.yaml'),\n configKey: 'extensions',\n format: FileFormat.YAML,\n };\n case Clients.Zed:\n return {\n path:\n process.platform === 'win32'\n ? path.join(\n process.env.APPDATA ?? path.join(homeDir, 'AppData', 'Roaming'),\n 'Zed',\n 'settings.json'\n )\n : path.join(homeDir, '.config', 'zed', 'settings.json'),\n configKey: 'context_servers',\n format: FileFormat.JSON,\n };\n case Clients.Codex:\n return {\n path: path.join(\n process.env.CODEX_HOME ?? path.join(homeDir, '.codex'),\n 'config.toml'\n ),\n configKey: 'mcp_servers',\n format: FileFormat.TOML,\n };\n case Clients.OpenCode: {\n const jsonPath = path.join(\n homeDir,\n '.config',\n 'opencode',\n 'opencode.json'\n );\n const jsoncPath = jsonPath.replace('.json', '.jsonc');\n\n // For OpenCode, check if .jsonc exists and prefer it over .json\n if (fs.existsSync(jsoncPath)) {\n log.info(`Found .jsonc file for OpenCode, using: ${jsoncPath}`);\n return {\n path: jsoncPath,\n configKey: 'mcp',\n format: FileFormat.JSON,\n };\n }\n\n return {\n path: jsonPath,\n configKey: 'mcp',\n format: FileFormat.JSON,\n };\n }\n default:\n throw new Error(`Unknown client: ${String(client)}`);\n }\n};\n","import os from 'os';\nimport path from 'path';\nimport process from 'process';\nimport z from 'zod';\n\nenum Platforms {\n Windows = 'win32',\n MacOS = 'darwin',\n Linux = 'linux',\n}\n\nexport const getPlatformPath = () => {\n const platform = z.enum(Platforms).safeParse(process.platform);\n if (!platform.success) {\n throw new Error(`Invalid platform: ${process.platform}`);\n }\n\n const homeDir = os.homedir();\n\n switch (platform.data) {\n case Platforms.Windows:\n return {\n baseDir:\n process.env.APPDATA ?? path.join(homeDir, 'AppData', 'Roaming'),\n vscodePath: path.join('Code', 'User'),\n };\n case Platforms.MacOS:\n return {\n baseDir: path.join(homeDir, 'Library', 'Application Support'),\n vscodePath: path.join('Code', 'User'),\n };\n case Platforms.Linux:\n return {\n baseDir: process.env.XDG_CONFIG_HOME ?? path.join(homeDir, '.config'),\n vscodePath: path.join('Code/User'),\n };\n default:\n throw new Error(`Invalid platform: ${process.platform}`);\n }\n};\n","import * as TOML from '@iarna/toml';\nimport yaml from 'js-yaml';\nimport * as jsonc from 'jsonc-parser';\n\nimport { safeReadFile } from '@/shared/neverthrow/fs';\nimport { configResultFromThrowable } from './result';\n\nimport type { ClientConfigFile, ClientConfigObject } from '../types';\n\nexport enum FileFormat {\n JSON = 'json',\n YAML = 'yaml',\n TOML = 'toml',\n}\n\nconst parseContent = (\n fileContent: string,\n format: FileFormat,\n path: string\n) => {\n return configResultFromThrowable(\n () => {\n let config: ClientConfigObject;\n if (format === FileFormat.YAML) {\n config = yaml.load(fileContent) as ClientConfigObject;\n } else if (format === FileFormat.TOML) {\n config = TOML.parse(fileContent) as ClientConfigObject;\n } else if (path.endsWith('.jsonc')) {\n config = jsonc.parse(fileContent) as ClientConfigObject;\n } else {\n config = JSON.parse(fileContent) as ClientConfigObject;\n }\n return {\n config,\n fileContent,\n };\n },\n e => ({\n cause: 'parse_config',\n message: e instanceof Error ? e.message : 'Failed to parse config file',\n })\n );\n};\n\n/**\n * Parse file content based on format\n */\nexport const parseClientConfig = async ({ format, path }: ClientConfigFile) => {\n const readResult = await safeReadFile('config_file', path);\n\n if (readResult.isErr()) return readResult;\n\n const parseResult = parseContent(readResult.value, format, path);\n\n if (parseResult.isErr()) return parseResult;\n\n return parseResult;\n};\n\nconst serializeJsonc = (\n config: ClientConfigObject,\n originalContent: string\n) => {\n return configResultFromThrowable<string>(\n () => {\n const modifications: jsonc.Edit[] = [];\n\n for (const key of Object.keys(config)) {\n const keyPath = [key];\n const edits = jsonc.modify(originalContent, keyPath, config[key], {\n formattingOptions: { tabSize: 2, insertSpaces: true },\n });\n modifications.push(...edits);\n }\n\n return jsonc.applyEdits(originalContent, modifications);\n },\n e => ({\n cause: 'serialize_config',\n message: e instanceof Error ? e.message : 'Failed to serialize JSONC',\n })\n );\n};\n\nexport const serializeClientConfig = (\n { format, path }: ClientConfigFile,\n config: ClientConfigObject,\n originalContent?: string\n): string => {\n if (format === FileFormat.YAML) {\n return yaml.dump(config, {\n indent: 2,\n lineWidth: -1,\n noRefs: true,\n });\n }\n if (format === FileFormat.TOML) {\n return TOML.stringify(config);\n }\n if (path.endsWith('.jsonc') && originalContent) {\n const result = serializeJsonc(config, originalContent);\n if (result.isOk()) {\n return result.value;\n }\n // Fallback to standard JSON.stringify if edit fails\n console.log(`Error applying JSONC edits: ${result.error.message}`);\n console.log('Falling back to JSON.stringify (comments will be lost)');\n return JSON.stringify(config, null, 2);\n }\n // Default to JSON\n return JSON.stringify(config, null, 2);\n};\n\nexport const stringifyObject = (\n config: ClientConfigObject,\n format: FileFormat\n) => {\n if (format === FileFormat.YAML) {\n return yaml.dump(config, {\n indent: 2,\n lineWidth: -1,\n noRefs: true,\n });\n }\n if (format === FileFormat.TOML) {\n return TOML.stringify(config);\n }\n return JSON.stringify(config, null, 2);\n};\n","import { resultFromThrowable } from '@agentcash/neverthrow';\n\nimport type { BaseConfigError } from '../types';\n\nconst errorType = 'config';\nconst surface = 'config_file';\n\nexport const configResultFromThrowable = <T>(\n fn: () => T,\n error: (e: unknown) => BaseConfigError\n) => resultFromThrowable(errorType, surface, fn, error);\n","import type { ClientConfigObject } from '../types';\n\nexport const getNestedValue = (obj: ClientConfigObject, path: string) => {\n const keys = path.split('.');\n let current: ClientConfigObject | undefined = obj;\n for (const key of keys) {\n if (current && typeof current === 'object' && key in current) {\n current = current[key] as ClientConfigObject;\n } else {\n return undefined;\n }\n }\n return current;\n};\n\nexport const setNestedValue = (\n obj: ClientConfigObject,\n path: string,\n value: ClientConfigObject\n) => {\n const keys = path.split('.');\n const lastKey = keys.pop();\n if (!lastKey) return;\n const target = keys.reduce((current, key) => {\n current[key] ??= {};\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return current[key];\n }, obj);\n target[lastKey] = value;\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA,OAAOA,SAAQ;AACf,OAAOC,WAAU;AACjB,SAAS,qBAAqB;AAE9B,OAAO,WAAW;AAElB,SAAS,OAAO,UAAU,SAAS,OAAO,cAAc;;;ACNxD,OAAOC,SAAQ;AACf,OAAOC,WAAU;AACjB,OAAOC,cAAa;AACpB,OAAO,QAAQ;;;ACHf,OAAO,QAAQ;AACf,OAAO,UAAU;AACjB,OAAOC,cAAa;AACpB,OAAO,OAAO;AAEd,IAAK,YAAL,kBAAKC,eAAL;AACE,EAAAA,WAAA,aAAU;AACV,EAAAA,WAAA,WAAQ;AACR,EAAAA,WAAA,WAAQ;AAHL,SAAAA;AAAA,GAAA;AAME,IAAM,kBAAkB,MAAM;AACnC,QAAM,WAAW,EAAE,KAAK,SAAS,EAAE,UAAUD,SAAQ,QAAQ;AAC7D,MAAI,CAAC,SAAS,SAAS;AACrB,UAAM,IAAI,MAAM,qBAAqBA,SAAQ,QAAQ,EAAE;AAAA,EACzD;AAEA,QAAM,UAAU,GAAG,QAAQ;AAE3B,UAAQ,SAAS,MAAM;AAAA,IACrB,KAAK;AACH,aAAO;AAAA,QACL,SACEA,SAAQ,IAAI,WAAW,KAAK,KAAK,SAAS,WAAW,SAAS;AAAA,QAChE,YAAY,KAAK,KAAK,QAAQ,MAAM;AAAA,MACtC;AAAA,IACF,KAAK;AACH,aAAO;AAAA,QACL,SAAS,KAAK,KAAK,SAAS,WAAW,qBAAqB;AAAA,QAC5D,YAAY,KAAK,KAAK,QAAQ,MAAM;AAAA,MACtC;AAAA,IACF,KAAK;AACH,aAAO;AAAA,QACL,SAASA,SAAQ,IAAI,mBAAmB,KAAK,KAAK,SAAS,SAAS;AAAA,QACpE,YAAY,KAAK,KAAK,WAAW;AAAA,MACnC;AAAA,IACF;AACE,YAAM,IAAI,MAAM,qBAAqBA,SAAQ,QAAQ,EAAE;AAAA,EAC3D;AACF;;;ACvCA,YAAY,UAAU;AACtB,OAAO,UAAU;AACjB,YAAY,WAAW;;;ACEvB,IAAM,YAAY;AAClB,IAAM,UAAU;AAET,IAAM,4BAA4B,CACvC,IACA,UACG,oBAAoB,WAAW,SAAS,IAAI,KAAK;;;ADKtD,IAAM,eAAe,CACnB,aACA,QACAE,UACG;AACH,SAAO;AAAA,IACL,MAAM;AACJ,UAAI;AACJ,UAAI,WAAW,mBAAiB;AAC9B,iBAAS,KAAK,KAAK,WAAW;AAAA,MAChC,WAAW,WAAW,mBAAiB;AACrC,iBAAc,WAAM,WAAW;AAAA,MACjC,WAAWA,MAAK,SAAS,QAAQ,GAAG;AAClC,iBAAe,YAAM,WAAW;AAAA,MAClC,OAAO;AACL,iBAAS,KAAK,MAAM,WAAW;AAAA,MACjC;AACA,aAAO;AAAA,QACL;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA,QAAM;AAAA,MACJ,OAAO;AAAA,MACP,SAAS,aAAa,QAAQ,EAAE,UAAU;AAAA,IAC5C;AAAA,EACF;AACF;AAKO,IAAM,oBAAoB,OAAO,EAAE,QAAQ,MAAAA,MAAK,MAAwB;AAC7E,QAAM,aAAa,MAAM,aAAa,eAAeA,KAAI;AAEzD,MAAI,WAAW,MAAM,EAAG,QAAO;AAE/B,QAAM,cAAc,aAAa,WAAW,OAAO,QAAQA,KAAI;AAE/D,MAAI,YAAY,MAAM,EAAG,QAAO;AAEhC,SAAO;AACT;AAEA,IAAM,iBAAiB,CACrB,QACA,oBACG;AACH,SAAO;AAAA,IACL,MAAM;AACJ,YAAM,gBAA8B,CAAC;AAErC,iBAAW,OAAO,OAAO,KAAK,MAAM,GAAG;AACrC,cAAM,UAAU,CAAC,GAAG;AACpB,cAAM,QAAc,aAAO,iBAAiB,SAAS,OAAO,GAAG,GAAG;AAAA,UAChE,mBAAmB,EAAE,SAAS,GAAG,cAAc,KAAK;AAAA,QACtD,CAAC;AACD,sBAAc,KAAK,GAAG,KAAK;AAAA,MAC7B;AAEA,aAAa,iBAAW,iBAAiB,aAAa;AAAA,IACxD;AAAA,IACA,QAAM;AAAA,MACJ,OAAO;AAAA,MACP,SAAS,aAAa,QAAQ,EAAE,UAAU;AAAA,IAC5C;AAAA,EACF;AACF;AAEO,IAAM,wBAAwB,CACnC,EAAE,QAAQ,MAAAA,MAAK,GACf,QACA,oBACW;AACX,MAAI,WAAW,mBAAiB;AAC9B,WAAO,KAAK,KAAK,QAAQ;AAAA,MACvB,QAAQ;AAAA,MACR,WAAW;AAAA,MACX,QAAQ;AAAA,IACV,CAAC;AAAA,EACH;AACA,MAAI,WAAW,mBAAiB;AAC9B,WAAY,eAAU,MAAM;AAAA,EAC9B;AACA,MAAIA,MAAK,SAAS,QAAQ,KAAK,iBAAiB;AAC9C,UAAM,SAAS,eAAe,QAAQ,eAAe;AACrD,QAAI,OAAO,KAAK,GAAG;AACjB,aAAO,OAAO;AAAA,IAChB;AAEA,YAAQ,IAAI,+BAA+B,OAAO,MAAM,OAAO,EAAE;AACjE,YAAQ,IAAI,wDAAwD;AACpE,WAAO,KAAK,UAAU,QAAQ,MAAM,CAAC;AAAA,EACvC;AAEA,SAAO,KAAK,UAAU,QAAQ,MAAM,CAAC;AACvC;AAEO,IAAM,kBAAkB,CAC7B,QACA,WACG;AACH,MAAI,WAAW,mBAAiB;AAC9B,WAAO,KAAK,KAAK,QAAQ;AAAA,MACvB,QAAQ;AAAA,MACR,WAAW;AAAA,MACX,QAAQ;AAAA,IACV,CAAC;AAAA,EACH;AACA,MAAI,WAAW,mBAAiB;AAC9B,WAAY,eAAU,MAAM;AAAA,EAC9B;AACA,SAAO,KAAK,UAAU,QAAQ,MAAM,CAAC;AACvC;;;AFnHO,IAAM,sBAAsB,CAAC,WAAsC;AACxE,QAAM,UAAUC,IAAG,QAAQ;AAC3B,QAAM,EAAE,SAAS,WAAW,IAAI,gBAAgB;AAEhD,UAAQ,QAAQ;AAAA,IACd;AACE,aAAO;AAAA,QACL,MAAMC,MAAK,KAAK,SAAS,UAAU,4BAA4B;AAAA,QAC/D,WAAW;AAAA,QACX;AAAA,MACF;AAAA,IACF;AACE,aAAO;AAAA,QACL,MAAMA,MAAK;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA,WAAW;AAAA,QACX;AAAA,MACF;AAAA,IACF;AACE,aAAO;AAAA,QACL,MAAMA,MAAK,KAAK,SAAS,YAAY,YAAY,iBAAiB;AAAA,QAClE,WAAW;AAAA,QACX;AAAA,MACF;AAAA,IACF;AACE,aAAO;AAAA,QACL,MAAMA,MAAK,KAAK,SAAS,WAAW,UAAU;AAAA,QAC9C,WAAW;AAAA,QACX;AAAA,MACF;AAAA,IACF;AACE,aAAO;AAAA,QACL,MAAM;AAAA;AAAA,QACN,WAAW;AAAA,QACX;AAAA,MACF;AAAA,IACF;AACE,aAAO;AAAA,QACL,MAAMA,MAAK,KAAK,SAAS,WAAW,eAAe;AAAA,QACnD,WAAW;AAAA,QACX;AAAA,MACF;AAAA,IACF;AACE,aAAO;AAAA,QACL,MAAMA,MAAK,KAAK,SAAS,cAAc;AAAA,QACvC,WAAW;AAAA,QACX;AAAA,MACF;AAAA,IACF;AACE,aAAO;AAAA,QACL,MAAMA,MAAK,KAAK,SAAS,WAAW,SAAS,aAAa;AAAA,QAC1D,WAAW;AAAA,QACX;AAAA,MACF;AAAA,IACF;AACE,aAAO;AAAA,QACL,MACEC,SAAQ,aAAa,UACjBD,MAAK;AAAA,UACHC,SAAQ,IAAI,WAAWD,MAAK,KAAK,SAAS,WAAW,SAAS;AAAA,UAC9D;AAAA,UACA;AAAA,QACF,IACAA,MAAK,KAAK,SAAS,WAAW,OAAO,eAAe;AAAA,QAC1D,WAAW;AAAA,QACX;AAAA,MACF;AAAA,IACF;AACE,aAAO;AAAA,QACL,MAAMA,MAAK;AAAA,UACTC,SAAQ,IAAI,cAAcD,MAAK,KAAK,SAAS,QAAQ;AAAA,UACrD;AAAA,QACF;AAAA,QACA,WAAW;AAAA,QACX;AAAA,MACF;AAAA,IACF,gCAAuB;AACrB,YAAM,WAAWA,MAAK;AAAA,QACpB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AACA,YAAM,YAAY,SAAS,QAAQ,SAAS,QAAQ;AAGpD,UAAI,GAAG,WAAW,SAAS,GAAG;AAC5B,YAAI,KAAK,0CAA0C,SAAS,EAAE;AAC9D,eAAO;AAAA,UACL,MAAM;AAAA,UACN,WAAW;AAAA,UACX;AAAA,QACF;AAAA,MACF;AAEA,aAAO;AAAA,QACL,MAAM;AAAA,QACN,WAAW;AAAA,QACX;AAAA,MACF;AAAA,IACF;AAAA,IACA;AACE,YAAM,IAAI,MAAM,mBAAmB,OAAO,MAAM,CAAC,EAAE;AAAA,EACvD;AACF;;;AIzHO,IAAM,iBAAiB,CAAC,KAAyBE,UAAiB;AACvE,QAAM,OAAOA,MAAK,MAAM,GAAG;AAC3B,MAAI,UAA0C;AAC9C,aAAW,OAAO,MAAM;AACtB,QAAI,WAAW,OAAO,YAAY,YAAY,OAAO,SAAS;AAC5D,gBAAU,QAAQ,GAAG;AAAA,IACvB,OAAO;AACL,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;AAEO,IAAM,iBAAiB,CAC5B,KACAA,OACA,UACG;AACH,QAAM,OAAOA,MAAK,MAAM,GAAG;AAC3B,QAAM,UAAU,KAAK,IAAI;AACzB,MAAI,CAAC,QAAS;AACd,QAAM,SAAS,KAAK,OAAO,CAAC,SAAS,QAAQ;AAC3C,YAAQ,GAAG,MAAM,CAAC;AAElB,WAAO,QAAQ,GAAG;AAAA,EACpB,GAAG,GAAG;AACN,SAAO,OAAO,IAAI;AACpB;;;AL8BA,IAAM,oBAAoB,MAAM;AAC9B,MAAI,UAAUC,MAAK,QAAQ,cAAc,YAAY,GAAG,CAAC;AAEzD,SAAO,MAAM;AACX,UAAM,cAAcA,MAAK,KAAK,SAAS,cAAc;AACrD,UAAM,WAAWA,MAAK,KAAK,SAAS,eAAe;AACnD,UAAM,aAAaA,MAAK,KAAK,SAAS,OAAO,UAAU;AAEvD,QACEC,IAAG,WAAW,WAAW,KACzBA,IAAG,WAAW,QAAQ,KACtBA,IAAG,WAAW,UAAU,GACxB;AACA,aAAO;AAAA,IACT;AAEA,UAAM,SAASD,MAAK,QAAQ,OAAO;AACnC,QAAI,WAAW,SAAS;AACtB;AAAA,IACF;AACA,cAAU;AAAA,EACZ;AAEA,SAAO,QAAQ,IAAI;AACrB;AAEA,IAAM,eAAe,CAAC,gBAA6B;AACjD,MAAI,YAAY,KAAK;AACnB,UAAM,cAAc,kBAAkB;AACtC,WAAO;AAAA,MACL,YAAY;AAAA;AAAA;AAAA,MAGZ,SAASA,MAAK;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA,QAAQ,aAAa,UAAU,YAAY;AAAA,MAC7C;AAAA,MACA,MAAM;AAAA,QACJ;AAAA,QACAA,MAAK,KAAK,aAAa,eAAe;AAAA,QACtCA,MAAK,KAAK,aAAa,OAAO,UAAU;AAAA,QACxC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,SAAO;AAAA,IACL,YAAY;AAAA,IACZ,SAAS;AAAA,IACT,MAAM,CAAC,MAAM,aAAa,yBAAyB,EAAE;AAAA,EACvD;AACF;AAEO,IAAM,eAAe,OAC1B,QACA,aACA,UAA4B,CAAC,MACA;AAC7B,QAAM,EAAE,YAAY,SAAS,KAAK,IAAI,aAAa,WAAW;AAC9D,QAAM,EAAE,KAAK,IAAI,eAAe,MAAM;AAEtC,MAAI,8BAAyB;AAC3B,QAAI,YAAY,OAAO,QAAQ,QAAQ;AACrC,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,UACL;AAAA,UACA;AAAA,UACA,MAAM;AAAA,UACN,OAAO;AAAA,UACP,SAAS;AAAA,QACX;AAAA,MACF;AAAA,IACF;AAEA,aAAS;AAAA,MACP,MAAM,KAAK,OAAO,uDAAuD;AAAA,IAC3E;AACA,aAAS;AAAA,MACP;AAAA,IACF;AACA,YAAQ,IAAI;AACZ,YAAQ;AAAA,MACN,KAAK;AAAA,QACH;AAAA,UACE,CAAC,UAAU,GAAG;AAAA,YACZ;AAAA,YACA;AAAA,YACA,mBAAmB;AAAA,YACnB,iBAAiB;AAAA,UACnB;AAAA,QACF;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,YAAQ,IAAI;AACZ,aAAS;AAAA,MACP;AAAA,IACF;AACA,UAAM,cAAc,MAAM,QAAQ;AAAA,MAChC,SAAS;AAAA,IACX,CAAC;AACD,QAAI,CAAC,aAAa;AAChB,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,UACL;AAAA,UACA;AAAA,UACA,MAAM;AAAA,UACN,OAAO;AAAA,UACP,SAAS;AAAA,QACX;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,MACL,SAAS;AAAA,MACT,OAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA,MAAM;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAEA,QAAM,mBAAmB,oBAAoB,MAAM;AAEnD,MAAI,SAA6B,CAAC;AAClC,MAAI,UAA8B;AAElC,MAAI,KAAK,sCAAsC,iBAAiB,IAAI,EAAE;AACtE,MAAI,CAACC,IAAG,WAAW,iBAAiB,IAAI,GAAG;AACzC,QAAI,KAAK,sDAAsD;AAC/D,mBAAe,QAAQ,iBAAiB,WAAW,CAAC,CAAC;AACrD,QAAI,KAAK,6BAA6B;AACtC,QAAI,CAAC,YAAY,KAAK;AACpB,YAAM,KAAK;AAAA,QACT,WAAW;AAAA,QACX,UAAU;AAAA,QACV,IAAI;AAAA,MACN,CAAC;AAAA,IACH;AAAA,EACF,OAAO;AACL,QAAI,KAAK,gDAAgD;AACzD,UAAM,cAAc,MAAM,kBAAkB,gBAAgB;AAE5D,QAAI,YAAY,MAAM,GAAG;AACvB,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,UACL;AAAA,UACA;AAAA,UACA,MAAM,iBAAiB;AAAA,UACvB,OAAO,YAAY,MAAM;AAAA,UACzB,SAAS,yBAAyB,YAAY,MAAM,OAAO;AAAA,QAC7D;AAAA,MACF;AAAA,IACF;AAEA,UAAM,EAAE,QAAQ,WAAW,YAAY,IAAI,YAAY;AACvD,aAAS;AACT,cAAU;AACV,UAAM,gBAAgB,eAAe,WAAW,iBAAiB,SAAS;AAC1E,QAAI,CAAC,eAAe;AAClB,qBAAe,WAAW,iBAAiB,WAAW,CAAC,CAAC;AAAA,IAC1D;AACA,QAAI,CAAC,YAAY,KAAK;AACpB,YAAM,KAAK;AAAA,QACT,WAAW;AAAA,QACX,UAAU,sBAAsB,iBAAiB,IAAI;AAAA,QACrD,IAAI;AAAA,MACN,CAAC;AAAA,IACH;AAAA,EACF;AAEA,QAAM,UAAU,eAAe,QAAQ,iBAAiB,SAAS;AACjE,MAAI,CAAC,WAAW,OAAO,YAAY,UAAU;AAC3C,QAAI,MAAM,WAAW,iBAAiB,SAAS,sBAAsB;AACrE,WAAO;AAAA,MACL,SAAS;AAAA,MACT,OAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA,MAAM,iBAAiB;AAAA,QACvB,OAAO;AAAA,QACP,SAAS,WAAW,iBAAiB,SAAS;AAAA,MAChD;AAAA,IACF;AAAA,EACF;AAEA,MAAI,gCAA0B;AAC5B,YAAQ,UAAU,IAAI;AAAA,MACpB,MAAM;AAAA,MACN,KAAK;AAAA,MACL;AAAA,MACA,SAAS;AAAA,MACT,MAAM,CAAC;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,EACF,WAAW,4BAAwB;AAEjC,YAAQ,UAAU,IAAI;AAAA,MACpB,QAAQ;AAAA,MACR;AAAA,MACA;AAAA,MACA,KAAK,CAAC;AAAA,IACR;AAAA,EACF,WAAW,sCAA6B;AACtC,YAAQ,UAAU,IAAI;AAAA,MACpB,MAAM;AAAA,MACN,SAAS,CAAC,SAAS,GAAG,IAAI;AAAA,MAC1B,SAAS;AAAA,MACT,aAAa,CAAC;AAAA,IAChB;AAAA,EACF,OAAO;AACL,YAAQ,UAAU,IAAI;AAAA,MACpB;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,MAAI,CAAC,YAAY,KAAK;AACpB,UAAM,IAAI,QAAQ,aAAW,WAAW,SAAS,GAAI,CAAC;AAEtD,aAAS;AAAA,MACP,kCAAkC,MAAM,KAAK,UAAU,iBAAiB,IAAI,CAAC;AAAA,IAC/E;AAAA,EACF;AAEA,QAAM,YAAY;AAAA,IAChB;AAAA,MACE,CAAC,iBAAiB,SAAS,GAAG;AAAA,QAC5B,CAAC,UAAU,GAAG,QAAQ,UAAU;AAAA,MAClC;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,EACnB;AAEA,MAAI,CAAC,YAAY,KAAK;AACpB,UAAM,OAAO;AAAA,OACV,mBAAmB;AAClB,mBAAW,OAAO,MAAM;AAAA,UACtB,EAAE,QAAQ,UAAU,OAAO;AAAA,UAC3B,CAAC,GAAG,MAAM;AAAA,QACZ,GAAG;AACD,gBAAM,OAAO,UAAU,GAAG;AAC1B,gBAAM;AACN,cAAI,CAAC,CAAC,MAAM,KAAK,UAAK,UAAK,UAAK,UAAK,UAAK,QAAG,EAAE,SAAS,IAAI,GAAG;AAC7D,kBAAM,IAAI,QAAQ,aAAW,WAAW,SAAS,CAAC,CAAC;AAAA,UACrD,OAAO;AACL,kBAAM,IAAI,QAAQ,aAAW,WAAW,SAAS,CAAC,CAAC;AAAA,UACrD;AAAA,QACF;AAAA,MACF,GAAG;AAAA,IACL;AAEA,UAAM,IAAI,QAAQ,aAAW,WAAW,SAAS,GAAI,CAAC;AAAA,EACxD;AAEA,QAAM,cAAc,YAAY,MAC5B,OACA,MAAM,QAAQ;AAAA,IACZ,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,UAAU;AAAA,EACZ,CAAC;AACL,MAAI,gBAAgB,MAAM;AACxB,WAAO;AAAA,MACL,SAAS;AAAA,MACT,OAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA,MAAM,iBAAiB;AAAA,QACvB,OAAO;AAAA,QACP,SAAS;AAAA,MACX;AAAA,IACF;AAAA,EACF;AAEA,QAAM,gBAAgB;AAAA,IACpB;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,QAAM,cAAc,MAAM;AAAA,IACxB;AAAA,IACA,iBAAiB;AAAA,IACjB;AAAA,EACF;AAEA,MAAI,YAAY,MAAM,GAAG;AACvB,WAAO;AAAA,MACL,SAAS;AAAA,MACT,OAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA,MAAM,iBAAiB;AAAA,QACvB,OAAO,YAAY,MAAM;AAAA,QACzB,SAAS,yBAAyB,YAAY,MAAM,OAAO;AAAA,MAC7D;AAAA,IACF;AAAA,EACF;AAEA,MAAI,CAAC,QAAQ,QAAQ;AACnB,aAAS,QAAQ,MAAM,KAAK,MAAM,0BAA0B,IAAI,EAAE,CAAC;AAAA,EACrE;AAEA,SAAO;AAAA,IACL,SAAS;AAAA,IACT,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA,MAAM,iBAAiB;AAAA,IACzB;AAAA,EACF;AACF;AAEO,IAAM,YAAY,OAAO,QAAiB,gBAA6B;AAC5E,QAAM,SAAS,MAAM,aAAa,QAAQ,WAAW;AAErD,MAAI,OAAO,SAAS;AAClB;AAAA,EACF;AAEA,MAAI,OAAO,MAAM,UAAU,aAAa;AACtC,UAAM,MAAM,KAAK,IAAI,OAAO,MAAM,OAAO,CAAC;AAC1C,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,WAAS,MAAM,MAAM,KAAK,IAAI,OAAO,MAAM,OAAO,CAAC;AACnD,QAAM,MAAM,KAAK,IAAI,iCAAiC,OAAO,MAAM,IAAI,EAAE,CAAC;AAC1E,UAAQ,KAAK,CAAC;AAChB;AAEA,IAAM,qBAAqB,CAAC,KAAa,WAAuB;AAC9D,QAAM,MAAM,gBAAgB,KAAK,MAAM;AACvC,UAAQ,QAAQ;AAAA,IACd,wBAAsB;AACpB,YAAM,WAAW,IAAI,MAAM,IAAI,EAAE;AACjC,aAAO,IACJ,MAAM,IAAI,EACV,IAAI,CAAC,MAAM,UAAU;AACpB,cAAM,YAAY,CAAC,GAAG,GAAG,WAAW,GAAG,WAAW,CAAC;AACnD,cAAM,aAAa,CAAC,UAAU,SAAS,KAAK;AAC5C,YAAI,YAAY;AACd,iBAAO,GAAG,MAAM,KAAK,MAAM,KAAK,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC;AAAA,QAClD;AACA,eAAO;AAAA,MACT,CAAC,EACA,KAAK,IAAI;AAAA,IACd;AAAA,IACA,wBAAsB;AACpB,aAAO,IACJ,MAAM,IAAI,EACV,IAAI,CAAC,MAAM,UAAU;AACpB,cAAM,YAAY,CAAC,GAAG,GAAG,IAAI,SAAS,GAAG,IAAI,SAAS,CAAC;AACvD,cAAM,aAAa,CAAC,UAAU,SAAS,KAAK;AAC5C,YAAI,YAAY;AACd,iBAAO,GAAG,MAAM,KAAK,MAAM,KAAK,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC;AAAA,QAClD;AACA,eAAO;AAAA,MACT,CAAC,EACA,KAAK,IAAI;AAAA,IACd;AAAA,IACA,wBAAsB;AACpB,aAAO,IACJ,MAAM,IAAI,EACV,OAAO,UAAQ,KAAK,KAAK,MAAM,EAAE,EACjC,IAAI,UAAQ;AACX,eAAO,GAAG,MAAM,KAAK,MAAM,KAAK,KAAK,KAAK,CAAC,EAAE,CAAC;AAAA,MAChD,CAAC,EACA,KAAK,IAAI;AAAA,IACd;AAAA,EACF;AACF;","names":["fs","path","os","path","process","process","Platforms","path","os","path","process","path","path","fs"]}
@@ -128,27 +128,6 @@ var isFetchError = (error) => {
128
128
  return error.type === errorType;
129
129
  };
130
130
 
131
- // src/shared/utils.ts
132
- import { formatUnits } from "viem";
133
- var getBaseUrl = (dev) => {
134
- return dev ? "http://localhost:3000" : "https://agentcash.dev";
135
- };
136
- var getDepositLink = (address, flags, network) => {
137
- return `${getBaseUrl(flags.dev)}/deposit/${address}${network ? `?network=${network}` : ""}`;
138
- };
139
- var tokenStringToNumber = (amount, decimals = 6) => {
140
- return Number(formatUnits(BigInt(amount), decimals));
141
- };
142
- var formatUsd = (amount) => {
143
- const fractionDigits = amount < 0.01 && amount > 0 ? 4 : 2;
144
- return amount.toLocaleString("en-US", {
145
- style: "currency",
146
- currency: "USD",
147
- minimumFractionDigits: 2,
148
- maximumFractionDigits: fractionDigits
149
- });
150
- };
151
-
152
131
  export {
153
132
  fetchErr,
154
133
  fetchOk,
@@ -156,10 +135,6 @@ export {
156
135
  safeFetch,
157
136
  safeFetchJson,
158
137
  safeParseResponse,
159
- isFetchError,
160
- getBaseUrl,
161
- getDepositLink,
162
- tokenStringToNumber,
163
- formatUsd
138
+ isFetchError
164
139
  };
165
- //# sourceMappingURL=chunk-QCP7Q6UF.js.map
140
+ //# sourceMappingURL=chunk-BFOYXXLG.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/shared/neverthrow/fetch/index.ts"],"sourcesContent":["import contentType from 'content-type';\nimport { err, ok, resultFromPromise } from '@agentcash/neverthrow';\n\nimport type z from 'zod';\n\nimport type { BaseError, Error } from '@agentcash/neverthrow/types';\nimport type { BaseFetchError, FetchError, ParsedResponse } from './types';\nimport type { JsonObject } from '../json/types';\nimport { safeParse } from '../parse';\n\nconst DEFAULT_USER_FETCH_TIMEOUT = 30_000;\n\nconst IMAGE_TYPES = new Set([\n 'image/png',\n 'image/jpeg',\n 'image/gif',\n 'image/webp',\n 'image/svg+xml',\n 'image/tiff',\n 'image/bmp',\n 'image/ico',\n]);\n\nconst errorType = 'fetch';\n\nexport const fetchErr = (surface: string, error: BaseFetchError) =>\n err(errorType, surface, error);\nexport const fetchOk = <T>(value: T) => ok(value);\n\nexport const fetchHttpErr = (surface: string, response: Response) =>\n fetchErr(surface, {\n cause: 'http' as const,\n statusCode: response.status,\n message: response.statusText,\n response,\n });\n\nexport const safeFetch = (\n surface: string,\n request: Request,\n timeout = DEFAULT_USER_FETCH_TIMEOUT\n) => {\n const signal = AbortSignal.timeout(timeout);\n\n return resultFromPromise(\n errorType,\n surface,\n fetch(request, ...(signal ? [{ signal }] : [])),\n error => {\n if (\n error instanceof DOMException &&\n (error.name === 'TimeoutError' || error.name === 'AbortError')\n ) {\n return {\n cause: 'timeout',\n message: timeout\n ? `Request timed out after ${timeout}ms. You can increase the timeout by passing a larger value in the 'timeout' parameter.`\n : 'Request was aborted',\n } as BaseFetchError;\n }\n\n return {\n cause: 'network',\n message: error instanceof Error ? error.message : 'Network error',\n } as BaseFetchError;\n }\n );\n};\n\nexport const safeFetchJson = <T>(\n surface: string,\n request: Request,\n schema: z.ZodSchema<T>,\n timeout?: number\n) => {\n return safeFetch(surface, request, timeout)\n .andThen(response => {\n if (!response.ok) {\n return fetchHttpErr(surface, response);\n }\n\n return resultFromPromise(errorType, surface, response.json(), () => ({\n cause: 'parse' as const,\n message: 'Could not parse JSON from response',\n statusCode: response.status,\n contentType: response.headers.get('content-type') ?? 'Not specified',\n }));\n })\n .andThen(data => safeParse(surface, schema, data));\n};\n\nexport const safeParseResponse = (surface: string, response: Response) => {\n return resultFromPromise(\n errorType,\n surface,\n (async (): Promise<ParsedResponse> => {\n const header = response.headers.get('content-type');\n const { type: mimeType } = header\n ? contentType.parse(header)\n : { type: 'application/octet-stream' };\n\n switch (mimeType) {\n case 'application/json':\n return {\n type: 'json' as const,\n data: (await response.json()) as JsonObject,\n };\n case 'application/pdf':\n return {\n type: 'pdf' as const,\n mimeType,\n data: await response.arrayBuffer(),\n };\n case 'application/octet-stream':\n return {\n type: 'octet-stream' as const,\n mimeType,\n data: await response.arrayBuffer(),\n };\n case 'multipart/form-data':\n return { type: 'formData' as const, data: await response.formData() };\n }\n\n if (IMAGE_TYPES.has(mimeType)) {\n return {\n type: 'image' as const,\n mimeType,\n data: await response.arrayBuffer(),\n };\n }\n\n if (mimeType.startsWith('audio/')) {\n return {\n type: 'audio' as const,\n mimeType,\n data: await response.arrayBuffer(),\n };\n }\n\n if (mimeType.startsWith('video/')) {\n return {\n type: 'video' as const,\n mimeType,\n data: await response.arrayBuffer(),\n };\n }\n\n if (mimeType.startsWith('text/')) {\n return { type: 'text' as const, data: await response.text() };\n }\n\n throw new Error(`Unsupported content type: ${header}`);\n })(),\n e => ({\n cause: 'parse' as const,\n message: e instanceof Error ? e.message : 'Could not parse response',\n statusCode: response.status,\n contentType: response.headers.get('content-type') ?? 'Not specified',\n })\n );\n};\n\nexport const isFetchError = (error: Error<BaseError>): error is FetchError => {\n return error.type === errorType;\n};\n"],"mappings":"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","names":[]}
@@ -3,14 +3,14 @@ import {
3
3
  } from "./chunk-DZNSJ2BA.js";
4
4
  import {
5
5
  redeemInviteCode
6
- } from "./chunk-CWU2QWNS.js";
7
- import {
8
- getDepositLink
9
- } from "./chunk-QCP7Q6UF.js";
6
+ } from "./chunk-MSNAPI5G.js";
10
7
  import {
11
8
  EVM_CONFIGS,
12
9
  getTxExplorerUrl
13
10
  } from "./chunk-NPJV7AMV.js";
11
+ import {
12
+ getDepositLink
13
+ } from "./chunk-U6FRXL3X.js";
14
14
 
15
15
  // src/cli/lib/deposit.ts
16
16
  import chalk from "chalk";
@@ -106,4 +106,4 @@ var promptDeposit = async (surface, args, wallets) => {
106
106
  export {
107
107
  promptDeposit
108
108
  };
109
- //# sourceMappingURL=chunk-54KBJ4F6.js.map
109
+ //# sourceMappingURL=chunk-BNFMFAEF.js.map
@@ -1,10 +1,12 @@
1
1
  import {
2
2
  MCP_VERSION
3
- } from "./chunk-TCXITLKU.js";
3
+ } from "./chunk-XC5JT2NQ.js";
4
4
  import {
5
- getBaseUrl,
6
5
  safeFetchJson
7
- } from "./chunk-QCP7Q6UF.js";
6
+ } from "./chunk-BFOYXXLG.js";
7
+ import {
8
+ getBaseUrl
9
+ } from "./chunk-U6FRXL3X.js";
8
10
  import {
9
11
  ok
10
12
  } from "./chunk-YWNBUUBR.js";
@@ -49,4 +51,4 @@ async function submitErrorReport(surface, input, address, dev) {
49
51
  export {
50
52
  submitErrorReport
51
53
  };
52
- //# sourceMappingURL=chunk-UNG335FG.js.map
54
+ //# sourceMappingURL=chunk-E52LAD7Z.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/operations/report-error.ts"],"sourcesContent":["import { z } from 'zod';\nimport { ok } from '@agentcash/neverthrow';\n\nimport { safeFetchJson } from '@/shared/neverthrow/fetch';\nimport { getBaseUrl } from '@/shared/utils';\nimport { MCP_VERSION } from '@/shared/version';\n\nimport type { Address } from 'viem';\n\n/**\n * Error report input\n */\nexport interface ErrorReportInput {\n tool: string;\n summary: string;\n errorMessage: string;\n resource?: string;\n stack?: string;\n fullReport?: string;\n}\n\n/**\n * Submit an error report to agentcash telemetry.\n */\nexport async function submitErrorReport(\n surface: string,\n input: ErrorReportInput,\n address: Address,\n dev: boolean\n) {\n const telemetryResult = await safeFetchJson(\n surface,\n new Request(`${getBaseUrl(dev)}/api/telemetry`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n tool: input.tool,\n summary: input.summary,\n errorMessage: input.errorMessage,\n resource: input.resource,\n stack: input.stack,\n fullReport: input.fullReport,\n walletAddress: address,\n mcpVersion: MCP_VERSION,\n reportedAt: new Date().toISOString(),\n }),\n }),\n z.object({\n reportId: z.string(),\n })\n );\n\n if (telemetryResult.isErr()) {\n return telemetryResult;\n }\n\n const { reportId } = telemetryResult.value;\n\n return ok({\n submitted: true,\n reportId,\n message:\n 'Error report submitted successfully. The agentcash team will investigate.',\n });\n}\n"],"mappings":";;;;;;;;;;;;AAAA,SAAS,SAAS;AAwBlB,eAAsB,kBACpB,SACA,OACA,SACA,KACA;AACA,QAAM,kBAAkB,MAAM;AAAA,IAC5B;AAAA,IACA,IAAI,QAAQ,GAAG,WAAW,GAAG,CAAC,kBAAkB;AAAA,MAC9C,QAAQ;AAAA,MACR,SAAS;AAAA,QACP,gBAAgB;AAAA,MAClB;AAAA,MACA,MAAM,KAAK,UAAU;AAAA,QACnB,MAAM,MAAM;AAAA,QACZ,SAAS,MAAM;AAAA,QACf,cAAc,MAAM;AAAA,QACpB,UAAU,MAAM;AAAA,QAChB,OAAO,MAAM;AAAA,QACb,YAAY,MAAM;AAAA,QAClB,eAAe;AAAA,QACf,YAAY;AAAA,QACZ,aAAY,oBAAI,KAAK,GAAE,YAAY;AAAA,MACrC,CAAC;AAAA,IACH,CAAC;AAAA,IACD,EAAE,OAAO;AAAA,MACP,UAAU,EAAE,OAAO;AAAA,IACrB,CAAC;AAAA,EACH;AAEA,MAAI,gBAAgB,MAAM,GAAG;AAC3B,WAAO;AAAA,EACT;AAEA,QAAM,EAAE,SAAS,IAAI,gBAAgB;AAErC,SAAO,GAAG;AAAA,IACR,WAAW;AAAA,IACX;AAAA,IACA,SACE;AAAA,EACJ,CAAC;AACH;","names":[]}
1
+ {"version":3,"sources":["../../src/operations/report-error.ts"],"sourcesContent":["import { z } from 'zod';\nimport { ok } from '@agentcash/neverthrow';\n\nimport { safeFetchJson } from '@/shared/neverthrow/fetch';\nimport { getBaseUrl } from '@/shared/utils';\nimport { MCP_VERSION } from '@/shared/version';\n\nimport type { Address } from 'viem';\n\n/**\n * Error report input\n */\nexport interface ErrorReportInput {\n tool: string;\n summary: string;\n errorMessage: string;\n resource?: string;\n stack?: string;\n fullReport?: string;\n}\n\n/**\n * Submit an error report to agentcash telemetry.\n */\nexport async function submitErrorReport(\n surface: string,\n input: ErrorReportInput,\n address: Address,\n dev: boolean\n) {\n const telemetryResult = await safeFetchJson(\n surface,\n new Request(`${getBaseUrl(dev)}/api/telemetry`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n tool: input.tool,\n summary: input.summary,\n errorMessage: input.errorMessage,\n resource: input.resource,\n stack: input.stack,\n fullReport: input.fullReport,\n walletAddress: address,\n mcpVersion: MCP_VERSION,\n reportedAt: new Date().toISOString(),\n }),\n }),\n z.object({\n reportId: z.string(),\n })\n );\n\n if (telemetryResult.isErr()) {\n return telemetryResult;\n }\n\n const { reportId } = telemetryResult.value;\n\n return ok({\n submitted: true,\n reportId,\n message:\n 'Error report submitted successfully. The agentcash team will investigate.',\n });\n}\n"],"mappings":";;;;;;;;;;;;;;AAAA,SAAS,SAAS;AAwBlB,eAAsB,kBACpB,SACA,OACA,SACA,KACA;AACA,QAAM,kBAAkB,MAAM;AAAA,IAC5B;AAAA,IACA,IAAI,QAAQ,GAAG,WAAW,GAAG,CAAC,kBAAkB;AAAA,MAC9C,QAAQ;AAAA,MACR,SAAS;AAAA,QACP,gBAAgB;AAAA,MAClB;AAAA,MACA,MAAM,KAAK,UAAU;AAAA,QACnB,MAAM,MAAM;AAAA,QACZ,SAAS,MAAM;AAAA,QACf,cAAc,MAAM;AAAA,QACpB,UAAU,MAAM;AAAA,QAChB,OAAO,MAAM;AAAA,QACb,YAAY,MAAM;AAAA,QAClB,eAAe;AAAA,QACf,YAAY;AAAA,QACZ,aAAY,oBAAI,KAAK,GAAE,YAAY;AAAA,MACrC,CAAC;AAAA,IACH,CAAC;AAAA,IACD,EAAE,OAAO;AAAA,MACP,UAAU,EAAE,OAAO;AAAA,IACrB,CAAC;AAAA,EACH;AAEA,MAAI,gBAAgB,MAAM,GAAG;AAC3B,WAAO;AAAA,EACT;AAEA,QAAM,EAAE,SAAS,IAAI,gBAAgB;AAErC,SAAO,GAAG;AAAA,IACR,WAAW;AAAA,IACX;AAAA,IACA,SACE;AAAA,EACJ,CAAC;AACH;","names":[]}
@@ -7,20 +7,22 @@ import {
7
7
  } from "./chunk-IKPLMFAK.js";
8
8
  import {
9
9
  getBalance
10
- } from "./chunk-NQ7OJNSO.js";
10
+ } from "./chunk-KJCWPVQE.js";
11
11
  import {
12
12
  fetchErr,
13
13
  fetchOk,
14
- formatUsd,
15
- getDepositLink,
16
- safeFetch,
17
- tokenStringToNumber
18
- } from "./chunk-QCP7Q6UF.js";
14
+ safeFetch
15
+ } from "./chunk-BFOYXXLG.js";
19
16
  import {
20
17
  EVM_CONFIGS,
21
18
  caip2ToNetwork,
22
19
  networkToCaip2
23
20
  } from "./chunk-NPJV7AMV.js";
21
+ import {
22
+ formatUsd,
23
+ getDepositLink,
24
+ tokenStringToNumber
25
+ } from "./chunk-U6FRXL3X.js";
24
26
  import {
25
27
  log
26
28
  } from "./chunk-QZCSZB7E.js";
@@ -824,4 +826,4 @@ async function executeFetch(input, options) {
824
826
  export {
825
827
  executeFetch
826
828
  };
827
- //# sourceMappingURL=chunk-2NMSPXMD.js.map
829
+ //# sourceMappingURL=chunk-G5FHPXQL.js.map