agentcash 0.13.1 → 0.13.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.
Files changed (104) hide show
  1. package/README.md +7 -1
  2. package/dist/cjs/run-server.cjs +3912 -5574
  3. package/dist/esm/{add-skill-3SHARVQA.js → add-skill-W277MI7L.js} +16 -16
  4. package/dist/esm/{bridge-55J4MKZR.js → bridge-EXVM6MMU.js} +13 -14
  5. package/dist/esm/{bridge-55J4MKZR.js.map → bridge-EXVM6MMU.js.map} +1 -1
  6. package/dist/esm/{check-V262JV5M.js → check-LTH3BZYQ.js} +12 -13
  7. package/dist/esm/{check-V262JV5M.js.map → check-LTH3BZYQ.js.map} +1 -1
  8. package/dist/esm/{chunk-DFHVSUHX.js → chunk-5CMVFNXO.js} +3 -3
  9. package/dist/esm/{chunk-23OVF3MX.js → chunk-5JBG33QY.js} +4 -4
  10. package/dist/esm/{chunk-QOYH6AOG.js → chunk-7AT3NXJ2.js} +2 -2
  11. package/dist/esm/{chunk-DPKUB6GL.js → chunk-AWFBYDYO.js} +7 -7
  12. package/dist/esm/{chunk-HFEYSQRZ.js → chunk-F3KGAMIA.js} +34 -19
  13. package/dist/esm/chunk-F3KGAMIA.js.map +1 -0
  14. package/dist/esm/{chunk-QLW6AJTF.js → chunk-H3L6DHOH.js} +4 -4
  15. package/dist/esm/{chunk-EJDPIURX.js → chunk-IL5RGDIX.js} +9 -9
  16. package/dist/esm/{chunk-Q5SPIJGE.js → chunk-IPBR36VR.js} +48 -29
  17. package/dist/esm/chunk-IPBR36VR.js.map +1 -0
  18. package/dist/esm/{chunk-6XGAIMNK.js → chunk-ISF2WVEZ.js} +2 -2
  19. package/dist/esm/{chunk-4JNU4ZDR.js → chunk-JAA6JEF2.js} +3 -3
  20. package/dist/esm/{chunk-GYJKIBJJ.js → chunk-JOIAQY6V.js} +5 -5
  21. package/dist/esm/{chunk-GKYODP7W.js → chunk-JX2XE6FD.js} +2 -2
  22. package/dist/esm/{chunk-TVSACMMH.js → chunk-KPJJSNZO.js} +7 -7
  23. package/dist/esm/{chunk-LNQRIXFK.js → chunk-KVSTJRSJ.js} +2 -2
  24. package/dist/esm/{chunk-DJLERI6R.js → chunk-MYWE3P7R.js} +5 -5
  25. package/dist/esm/{chunk-RVJ22H4S.js → chunk-NC4UN6IF.js} +2 -2
  26. package/dist/esm/{chunk-BYLBPP4V.js → chunk-O3OVWMBY.js} +8 -8
  27. package/dist/esm/{chunk-QZBSRYSW.js → chunk-PBVLTOFS.js} +3 -3
  28. package/dist/esm/{chunk-Y4VZACTC.js → chunk-QZCSZB7E.js} +6 -8
  29. package/dist/esm/{chunk-Y4VZACTC.js.map → chunk-QZCSZB7E.js.map} +1 -1
  30. package/dist/esm/chunk-TTAO2EJK.js +10 -0
  31. package/dist/esm/chunk-TTAO2EJK.js.map +1 -0
  32. package/dist/esm/{chunk-E5SPXKCI.js → chunk-UBVHQSSW.js} +9 -9
  33. package/dist/esm/{chunk-HOGMCHWI.js → chunk-UMYAGSWZ.js} +5 -5
  34. package/dist/esm/{chunk-BQRFNAMV.js → chunk-VX6PPHSN.js} +5 -5
  35. package/dist/esm/{chunk-X5AS5G23.js → chunk-WRMSVC2R.js} +2 -2
  36. package/dist/esm/{chunk-EMQMCXIC.js → chunk-X2JUL4S3.js} +3 -10
  37. package/dist/esm/chunk-X2JUL4S3.js.map +1 -0
  38. package/dist/esm/{chunk-TX4UYXJO.js → chunk-YIU364NZ.js} +3 -3
  39. package/dist/esm/{chunk-WUNL7OYW.js → chunk-YUGBFY4H.js} +3 -3
  40. package/dist/esm/{chunk-C7KWYVS3.js → chunk-YWNBUUBR.js} +53 -2
  41. package/dist/esm/chunk-YWNBUUBR.js.map +1 -0
  42. package/dist/esm/{discover-RV2HPYM3.js → discover-63V73SKH.js} +7 -7
  43. package/dist/esm/{fetch-5H6NJNO5.js → fetch-G2C4EUTP.js} +17 -18
  44. package/dist/esm/{fetch-5H6NJNO5.js.map → fetch-G2C4EUTP.js.map} +1 -1
  45. package/dist/esm/{fund-OTAWWC7N.js → fund-YCUI5KVH.js} +9 -11
  46. package/dist/esm/{fund-OTAWWC7N.js.map → fund-YCUI5KVH.js.map} +1 -1
  47. package/dist/esm/index.js +35 -35
  48. package/dist/esm/{install-BZLMXTQ6.js → install-OK4J2KEU.js} +12 -14
  49. package/dist/esm/{install-BZLMXTQ6.js.map → install-OK4J2KEU.js.map} +1 -1
  50. package/dist/esm/{onboard-DBENGNGV.js → onboard-SLU3CNO4.js} +17 -19
  51. package/dist/esm/{onboard-DBENGNGV.js.map → onboard-SLU3CNO4.js.map} +1 -1
  52. package/dist/esm/{origins-3AA7U2VW.js → origins-7KBHPH42.js} +10 -10
  53. package/dist/esm/register-HP4VTPU7.js +150 -0
  54. package/dist/esm/register-HP4VTPU7.js.map +1 -0
  55. package/dist/esm/{report-error-F44RFQ54.js → report-error-D3RRKDEC.js} +10 -12
  56. package/dist/esm/{report-error-F44RFQ54.js.map → report-error-D3RRKDEC.js.map} +1 -1
  57. package/dist/esm/{search-WTPHS4A3.js → search-G25PLCS2.js} +14 -15
  58. package/dist/esm/{search-WTPHS4A3.js.map → search-G25PLCS2.js.map} +1 -1
  59. package/dist/esm/{server-BR4W2YCH.js → server-KWXWCPIO.js} +36 -37
  60. package/dist/esm/{server-BR4W2YCH.js.map → server-KWXWCPIO.js.map} +1 -1
  61. package/dist/esm/{server-6V4NB65Q.js → server-QJNQOPBK.js} +2 -2
  62. package/dist/esm/{settings-SEZ65YUC.js → settings-RLSKK5RM.js} +3 -4
  63. package/dist/esm/{settings-SEZ65YUC.js.map → settings-RLSKK5RM.js.map} +1 -1
  64. package/dist/esm/{try-2KUOYSRY.js → try-JK56MOLD.js} +16 -17
  65. package/dist/esm/{try-2KUOYSRY.js.map → try-JK56MOLD.js.map} +1 -1
  66. package/dist/esm/{wallet-RZVO77IB.js → wallet-RWNVHHCO.js} +17 -19
  67. package/dist/esm/{wallet-RZVO77IB.js.map → wallet-RWNVHHCO.js.map} +1 -1
  68. package/package.json +7 -7
  69. package/dist/esm/chunk-C7KWYVS3.js.map +0 -1
  70. package/dist/esm/chunk-EMQMCXIC.js.map +0 -1
  71. package/dist/esm/chunk-HFEYSQRZ.js.map +0 -1
  72. package/dist/esm/chunk-NROPRHIC.js +0 -25
  73. package/dist/esm/chunk-NROPRHIC.js.map +0 -1
  74. package/dist/esm/chunk-Q5SPIJGE.js.map +0 -1
  75. package/dist/esm/chunk-VDBUUHJF.js +0 -58
  76. package/dist/esm/chunk-VDBUUHJF.js.map +0 -1
  77. package/dist/esm/register-NAPAV4G7.js +0 -64
  78. package/dist/esm/register-NAPAV4G7.js.map +0 -1
  79. /package/dist/esm/{add-skill-3SHARVQA.js.map → add-skill-W277MI7L.js.map} +0 -0
  80. /package/dist/esm/{chunk-DFHVSUHX.js.map → chunk-5CMVFNXO.js.map} +0 -0
  81. /package/dist/esm/{chunk-23OVF3MX.js.map → chunk-5JBG33QY.js.map} +0 -0
  82. /package/dist/esm/{chunk-QOYH6AOG.js.map → chunk-7AT3NXJ2.js.map} +0 -0
  83. /package/dist/esm/{chunk-DPKUB6GL.js.map → chunk-AWFBYDYO.js.map} +0 -0
  84. /package/dist/esm/{chunk-QLW6AJTF.js.map → chunk-H3L6DHOH.js.map} +0 -0
  85. /package/dist/esm/{chunk-EJDPIURX.js.map → chunk-IL5RGDIX.js.map} +0 -0
  86. /package/dist/esm/{chunk-6XGAIMNK.js.map → chunk-ISF2WVEZ.js.map} +0 -0
  87. /package/dist/esm/{chunk-4JNU4ZDR.js.map → chunk-JAA6JEF2.js.map} +0 -0
  88. /package/dist/esm/{chunk-GYJKIBJJ.js.map → chunk-JOIAQY6V.js.map} +0 -0
  89. /package/dist/esm/{chunk-GKYODP7W.js.map → chunk-JX2XE6FD.js.map} +0 -0
  90. /package/dist/esm/{chunk-TVSACMMH.js.map → chunk-KPJJSNZO.js.map} +0 -0
  91. /package/dist/esm/{chunk-LNQRIXFK.js.map → chunk-KVSTJRSJ.js.map} +0 -0
  92. /package/dist/esm/{chunk-DJLERI6R.js.map → chunk-MYWE3P7R.js.map} +0 -0
  93. /package/dist/esm/{chunk-RVJ22H4S.js.map → chunk-NC4UN6IF.js.map} +0 -0
  94. /package/dist/esm/{chunk-BYLBPP4V.js.map → chunk-O3OVWMBY.js.map} +0 -0
  95. /package/dist/esm/{chunk-QZBSRYSW.js.map → chunk-PBVLTOFS.js.map} +0 -0
  96. /package/dist/esm/{chunk-E5SPXKCI.js.map → chunk-UBVHQSSW.js.map} +0 -0
  97. /package/dist/esm/{chunk-HOGMCHWI.js.map → chunk-UMYAGSWZ.js.map} +0 -0
  98. /package/dist/esm/{chunk-BQRFNAMV.js.map → chunk-VX6PPHSN.js.map} +0 -0
  99. /package/dist/esm/{chunk-X5AS5G23.js.map → chunk-WRMSVC2R.js.map} +0 -0
  100. /package/dist/esm/{chunk-TX4UYXJO.js.map → chunk-YIU364NZ.js.map} +0 -0
  101. /package/dist/esm/{chunk-WUNL7OYW.js.map → chunk-YUGBFY4H.js.map} +0 -0
  102. /package/dist/esm/{discover-RV2HPYM3.js.map → discover-63V73SKH.js.map} +0 -0
  103. /package/dist/esm/{origins-3AA7U2VW.js.map → origins-7KBHPH42.js.map} +0 -0
  104. /package/dist/esm/{server-6V4NB65Q.js.map → server-QJNQOPBK.js.map} +0 -0
@@ -1,58 +0,0 @@
1
- import {
2
- resultFromThrowable
3
- } from "./chunk-C7KWYVS3.js";
4
-
5
- // src/shared/fs.ts
6
- import { join } from "path";
7
- import { homedir } from "os";
8
- import * as fs from "fs";
9
- var BASE_DIRECTORY = join(homedir(), ".agentcash");
10
- var LEGACY_DIRECTORY = join(homedir(), ".x402scan-mcp");
11
- function migrateFromLegacy() {
12
- if (!fs.existsSync(LEGACY_DIRECTORY)) return;
13
- const result = resultFromThrowable(
14
- "migration",
15
- "fs",
16
- () => {
17
- const files = fs.readdirSync(LEGACY_DIRECTORY);
18
- for (const file of files) {
19
- if (file.endsWith(".log")) continue;
20
- const src = join(LEGACY_DIRECTORY, file);
21
- const dest = join(BASE_DIRECTORY, file);
22
- if (!fs.existsSync(dest) && fs.statSync(src).isFile()) {
23
- fs.copyFileSync(src, dest);
24
- const { mode } = fs.statSync(src);
25
- fs.chmodSync(dest, mode);
26
- }
27
- }
28
- },
29
- (e) => ({
30
- cause: "migration_failed",
31
- message: `Failed to migrate: ${e instanceof Error ? e.message : String(e)}`
32
- })
33
- );
34
- if (result.isErr()) {
35
- console.error(
36
- `[agentcash] Warning: failed to migrate files from ${LEGACY_DIRECTORY} to ${BASE_DIRECTORY}. Your wallet may still be at ${join(LEGACY_DIRECTORY, "wallet.json")} \u2014 copy it manually to ${join(BASE_DIRECTORY, "wallet.json")}. Error: ${result.error.message}`
37
- );
38
- }
39
- }
40
- var initialized = false;
41
- function ensureBaseDir() {
42
- if (initialized) return;
43
- if (!fs.existsSync(BASE_DIRECTORY)) {
44
- fs.mkdirSync(BASE_DIRECTORY, { recursive: true });
45
- }
46
- migrateFromLegacy();
47
- initialized = true;
48
- }
49
- var configFile = (name) => {
50
- ensureBaseDir();
51
- const filePath = join(BASE_DIRECTORY, name);
52
- return filePath;
53
- };
54
-
55
- export {
56
- configFile
57
- };
58
- //# sourceMappingURL=chunk-VDBUUHJF.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/shared/fs.ts"],"sourcesContent":["import { join } from 'path';\nimport { homedir } from 'os';\nimport * as fs from 'fs';\n\nimport { resultFromThrowable } from '@agentcash/neverthrow';\n\nconst BASE_DIRECTORY = join(homedir(), '.agentcash');\nconst LEGACY_DIRECTORY = join(homedir(), '.x402scan-mcp');\n\n/**\n * Auto-migrate files from ~/.x402scan-mcp/ to ~/.agentcash/\n * Copies wallet.json (and any other config) on first run after upgrade.\n * Only copies files that don't already exist in the new location.\n */\nfunction migrateFromLegacy(): void {\n if (!fs.existsSync(LEGACY_DIRECTORY)) return;\n\n const result = resultFromThrowable(\n 'migration',\n 'fs',\n () => {\n const files = fs.readdirSync(LEGACY_DIRECTORY);\n for (const file of files) {\n // Skip logs — not worth migrating\n if (file.endsWith('.log')) continue;\n\n const src = join(LEGACY_DIRECTORY, file);\n const dest = join(BASE_DIRECTORY, file);\n\n if (!fs.existsSync(dest) && fs.statSync(src).isFile()) {\n fs.copyFileSync(src, dest);\n // Preserve original permissions (wallet.json is 0600)\n const { mode } = fs.statSync(src);\n fs.chmodSync(dest, mode);\n }\n }\n },\n e => ({\n cause: 'migration_failed' as const,\n message: `Failed to migrate: ${e instanceof Error ? e.message : String(e)}`,\n })\n );\n\n if (result.isErr()) {\n console.error(\n `[agentcash] Warning: failed to migrate files from ${LEGACY_DIRECTORY} to ${BASE_DIRECTORY}. ` +\n `Your wallet may still be at ${join(LEGACY_DIRECTORY, 'wallet.json')} — copy it manually to ${join(BASE_DIRECTORY, 'wallet.json')}. ` +\n `Error: ${result.error.message}`\n );\n }\n}\n\nlet initialized = false;\n\n/**\n * Ensure the base directory exists and legacy files are migrated.\n * Runs once on first call; safe to call repeatedly.\n * Throws on failure — callers that need the filesystem (wallet, state)\n * should let this propagate. Optional consumers (logging) should\n * catch and degrade on their own.\n */\nfunction ensureBaseDir(): void {\n if (initialized) return;\n\n if (!fs.existsSync(BASE_DIRECTORY)) {\n fs.mkdirSync(BASE_DIRECTORY, { recursive: true });\n }\n\n migrateFromLegacy();\n initialized = true;\n}\n\nexport const configFile = (name: `${string}.${string}`) => {\n ensureBaseDir();\n const filePath = join(BASE_DIRECTORY, name);\n return filePath;\n};\n"],"mappings":";;;;;AAAA,SAAS,YAAY;AACrB,SAAS,eAAe;AACxB,YAAY,QAAQ;AAIpB,IAAM,iBAAiB,KAAK,QAAQ,GAAG,YAAY;AACnD,IAAM,mBAAmB,KAAK,QAAQ,GAAG,eAAe;AAOxD,SAAS,oBAA0B;AACjC,MAAI,CAAI,cAAW,gBAAgB,EAAG;AAEtC,QAAM,SAAS;AAAA,IACb;AAAA,IACA;AAAA,IACA,MAAM;AACJ,YAAM,QAAW,eAAY,gBAAgB;AAC7C,iBAAW,QAAQ,OAAO;AAExB,YAAI,KAAK,SAAS,MAAM,EAAG;AAE3B,cAAM,MAAM,KAAK,kBAAkB,IAAI;AACvC,cAAM,OAAO,KAAK,gBAAgB,IAAI;AAEtC,YAAI,CAAI,cAAW,IAAI,KAAQ,YAAS,GAAG,EAAE,OAAO,GAAG;AACrD,UAAG,gBAAa,KAAK,IAAI;AAEzB,gBAAM,EAAE,KAAK,IAAO,YAAS,GAAG;AAChC,UAAG,aAAU,MAAM,IAAI;AAAA,QACzB;AAAA,MACF;AAAA,IACF;AAAA,IACA,QAAM;AAAA,MACJ,OAAO;AAAA,MACP,SAAS,sBAAsB,aAAa,QAAQ,EAAE,UAAU,OAAO,CAAC,CAAC;AAAA,IAC3E;AAAA,EACF;AAEA,MAAI,OAAO,MAAM,GAAG;AAClB,YAAQ;AAAA,MACN,qDAAqD,gBAAgB,OAAO,cAAc,iCACzD,KAAK,kBAAkB,aAAa,CAAC,+BAA0B,KAAK,gBAAgB,aAAa,CAAC,YACvH,OAAO,MAAM,OAAO;AAAA,IAClC;AAAA,EACF;AACF;AAEA,IAAI,cAAc;AASlB,SAAS,gBAAsB;AAC7B,MAAI,YAAa;AAEjB,MAAI,CAAI,cAAW,cAAc,GAAG;AAClC,IAAG,aAAU,gBAAgB,EAAE,WAAW,KAAK,CAAC;AAAA,EAClD;AAEA,oBAAkB;AAClB,gBAAc;AAChB;AAEO,IAAM,aAAa,CAAC,SAAgC;AACzD,gBAAc;AACd,QAAM,WAAW,KAAK,gBAAgB,IAAI;AAC1C,SAAO;AACT;","names":[]}
@@ -1,64 +0,0 @@
1
- import {
2
- getBaseUrl,
3
- safeFetchJson
4
- } from "./chunk-QZBSRYSW.js";
5
- import "./chunk-NROPRHIC.js";
6
- import {
7
- ensureProtocol
8
- } from "./chunk-FB5CMO3J.js";
9
- import {
10
- fromNeverthrowError,
11
- outputAndExit,
12
- successResponse
13
- } from "./chunk-7EBJ4BCH.js";
14
- import {
15
- ok
16
- } from "./chunk-C7KWYVS3.js";
17
-
18
- // src/operations/register.ts
19
- import { z } from "zod";
20
- var registerResponseSchema = z.object({
21
- origin: z.object({
22
- id: z.string(),
23
- origin: z.string(),
24
- name: z.string()
25
- }),
26
- resourceCount: z.number()
27
- });
28
- async function registerOrigin(surface, input, flags) {
29
- const url = ensureProtocol(input.url);
30
- const result = await safeFetchJson(
31
- surface,
32
- new Request(`${getBaseUrl(flags.dev)}/api/register`, {
33
- method: "POST",
34
- headers: { "Content-Type": "application/json" },
35
- body: JSON.stringify({ url })
36
- }),
37
- registerResponseSchema
38
- );
39
- if (result.isErr()) {
40
- return result;
41
- }
42
- return ok(result.value);
43
- }
44
-
45
- // src/cli/commands/register.ts
46
- var SURFACE = "cli:register";
47
- var registerCommand = async (args) => {
48
- const result = await registerOrigin(SURFACE, args, args);
49
- if (result.isErr()) {
50
- return outputAndExit(fromNeverthrowError(result), args);
51
- }
52
- const { origin, resourceCount } = result.value;
53
- return outputAndExit(
54
- successResponse({
55
- origin,
56
- resourceCount
57
- }),
58
- args
59
- );
60
- };
61
- export {
62
- registerCommand
63
- };
64
- //# sourceMappingURL=register-NAPAV4G7.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/operations/register.ts","../../src/cli/commands/register.ts"],"sourcesContent":["import { z } from 'zod';\nimport { ok } from '@agentcash/neverthrow';\n\nimport { safeFetchJson } from '@/shared/neverthrow/fetch';\nimport { getBaseUrl } from '@/shared/utils';\nimport { ensureProtocol } from '@/shared/url';\nimport type { GlobalFlags } from '@/types';\n\n/**\n * Input for registering an origin with agentcash.\n */\nexport interface RegisterInput {\n url: string;\n}\n\nconst registerResponseSchema = z.object({\n origin: z.object({\n id: z.string(),\n origin: z.string(),\n name: z.string(),\n }),\n resourceCount: z.number(),\n});\n\n/**\n * Register an origin with agentcash by POSTing to agentcash.dev/api/register.\n */\nexport async function registerOrigin(\n surface: string,\n input: RegisterInput,\n flags: GlobalFlags\n) {\n const url = ensureProtocol(input.url);\n\n const result = await safeFetchJson(\n surface,\n new Request(`${getBaseUrl(flags.dev)}/api/register`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ url }),\n }),\n registerResponseSchema\n );\n\n if (result.isErr()) {\n return result;\n }\n\n return ok(result.value);\n}\n","import {\n successResponse,\n fromNeverthrowError,\n outputAndExit,\n} from '@/cli/output';\n\nimport { registerOrigin } from '@/operations/register';\n\nimport type { RegisterInput } from '@/operations/register';\nimport type { Command } from '@/types';\n\nconst SURFACE = 'cli:register';\n\nexport const registerCommand: Command<RegisterInput> = async args => {\n const result = await registerOrigin(SURFACE, args, args);\n\n if (result.isErr()) {\n return outputAndExit(fromNeverthrowError(result), args);\n }\n\n const { origin, resourceCount } = result.value;\n\n return outputAndExit(\n successResponse({\n origin,\n resourceCount,\n }),\n args\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA,SAAS,SAAS;AAelB,IAAM,yBAAyB,EAAE,OAAO;AAAA,EACtC,QAAQ,EAAE,OAAO;AAAA,IACf,IAAI,EAAE,OAAO;AAAA,IACb,QAAQ,EAAE,OAAO;AAAA,IACjB,MAAM,EAAE,OAAO;AAAA,EACjB,CAAC;AAAA,EACD,eAAe,EAAE,OAAO;AAC1B,CAAC;AAKD,eAAsB,eACpB,SACA,OACA,OACA;AACA,QAAM,MAAM,eAAe,MAAM,GAAG;AAEpC,QAAM,SAAS,MAAM;AAAA,IACnB;AAAA,IACA,IAAI,QAAQ,GAAG,WAAW,MAAM,GAAG,CAAC,iBAAiB;AAAA,MACnD,QAAQ;AAAA,MACR,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,MAC9C,MAAM,KAAK,UAAU,EAAE,IAAI,CAAC;AAAA,IAC9B,CAAC;AAAA,IACD;AAAA,EACF;AAEA,MAAI,OAAO,MAAM,GAAG;AAClB,WAAO;AAAA,EACT;AAEA,SAAO,GAAG,OAAO,KAAK;AACxB;;;ACtCA,IAAM,UAAU;AAET,IAAM,kBAA0C,OAAM,SAAQ;AACnE,QAAM,SAAS,MAAM,eAAe,SAAS,MAAM,IAAI;AAEvD,MAAI,OAAO,MAAM,GAAG;AAClB,WAAO,cAAc,oBAAoB,MAAM,GAAG,IAAI;AAAA,EACxD;AAEA,QAAM,EAAE,QAAQ,cAAc,IAAI,OAAO;AAEzC,SAAO;AAAA,IACL,gBAAgB;AAAA,MACd;AAAA,MACA;AAAA,IACF,CAAC;AAAA,IACD;AAAA,EACF;AACF;","names":[]}