[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6H41E4WXGRC57R42M9VC4WE":3,"skill-same:01M6H41E4WXGRC57R42M9VC4WE":69},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":22,"publishedAt":43,"linkOnly":44,"markdownContent":45,"markdownBody":46,"frontMatter":47,"refName":48,"commitSha":49,"skillDirectory":50,"forksCount":51,"repositoryHtmlUrl":52,"repositoryHomepageUrl":6,"ownerHtmlUrl":53,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":54,"install":55,"resources":68},"01M6H41E4WXGRC57R42M9VC4WE","dmk-speculos-browser",null,"Drive Ledger DMK browser tests against Speculos, Ledger's device emulator, using @soulvault\u002Fdmk-speculos-browser. Use when a developer needs to run browser-based Ledger signing tests (Playwright + Chromium), wire the emulated transport into DMK, control the emulated device screen and buttons from a test, or record a reproducible proof of a device-signed flow. Covers the transport registration, the test controller, the Playwright fixture, required environment variables, and the concurrency rule that tests must never auto-approve device actions.","nacmonad\u002Fsoulvault","nacmonad","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F13107516?v=4","01M6H4102Q4SWX6ZSPAAV7VAEQ","01M6H41071DDN3K145AH11494V",1,"MIT","https:\u002F\u002Fgithub.com\u002Fnacmonad\u002Fsoulvault\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fdmk-speculos-browser\u002FSKILL.md",[17],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",[23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42],"dmk speculos browser","browser","auto","signing","Variables","tests","control","fixture","record","registration","never","chromium","use","environment","concurrency","controller","Reproducible","actions","test","playwright","2026-11-10 10:12:30",false,"---\nname: dmk-speculos-browser\ndescription: \"Drive Ledger DMK browser tests against Speculos, Ledger's device emulator, using @soulvault\u002Fdmk-speculos-browser. Use when a developer needs to run browser-based Ledger signing tests (Playwright + Chromium), wire the emulated transport into DMK, control the emulated device screen and buttons from a test, or record a reproducible proof of a device-signed flow. Covers the transport registration, the test controller, the Playwright fixture, required environment variables, and the concurrency rule that tests must never auto-approve device actions.\"\n---\n\n# Speculos browser testing with `@soulvault\u002Fdmk-speculos-browser`\n\nThis skill explains how to run Ledger DMK flows in a real browser against an\nemulated device. Speculos stands in for the physical Nano S Plus; the browser\ntalks to it over HTTP, so no USB hardware is needed and the whole flow runs in\nCI. Load `ledger-dmk-implementation` for the DMK session flow itself — this\nskill only covers the emulation layer underneath it.\n\n## Connectors\n\n**Sibling skills:**\n- `ledger-dmk-implementation` — the DMK signing flow (init, session, state, app, operation). The speculos transport plugs in at its Step 1\u002F2 as a drop-in replacement for WebHID.\n- `dmk-business-logic` — conceptual background on transports and device actions.\n\n**Reference files in the package:**\n- `packages\u002Fdmk-speculos-browser\u002FREADME.md` — commands, topology, security boundaries.\n- `packages\u002Fdmk-speculos-browser\u002FTRANSPORT-CONTRACT.md` — transport behavior contract.\n- `packages\u002Fdmk-speculos-browser\u002Fexamples\u002Fvanilla.ts` — framework-neutral DMK registration example.\n- `packages\u002Fdmk-speculos-browser\u002Ftest\u002Fplaywright-fixture.ts` — the fixture consumed by browser tests.\n\n## The three exports\n\n| Import | Gives you | Use it for |\n|---|---|---|\n| `@soulvault\u002Fdmk-speculos-browser` | `createSpeculosTransport(options)` → `{ identifier, factory, metadata: { emulated: true } }` | Registering the emulated transport with DMK so `dmk.startDiscovering()` \u002F `dmk.connect()` find a fake Nano S Plus. `options` requires `apduUrl`; optional `fetch`, `requestTimeoutMs` (default 10s). |\n| `@soulvault\u002Fdmk-speculos-browser\u002Ftest` | `createSpeculosController({ apiUrl })` | Driving the emulated device from test code: `pollScreen`, `waitForScreen(matcher)`, `pressLeft\u002FRight\u002FBoth`, `approve(matcher?)`, `reject(matcher?)`, `getTranscript()`. |\n| `@soulvault\u002Fdmk-speculos-browser\u002Fplaywright` | Worker-scoped `test`\u002F`expect` fixture exposing `{ apiUrl, apduUrl, eventsUrl, controller, emulated }` | Playwright suites. The fixture reuses a reachable Speculos or starts the pinned container, mounts the app ELF, and starts the APDU\u002Fevents bridge with teardown in `finally`. |\n\n## The concurrency rule (most common mistake)\n\nThe DMK action promise blocks while the device waits for user confirmation.\nThe controller's `approve()` \u002F `reject()` must run **concurrently** with that\npending promise, never after awaiting it:\n\n```ts\n\u002F\u002F Correct — controller approval races the pending device action\nconst [wallet] = await Promise.all([\n  connectSpeculos(apduUrl),                     \u002F\u002F blocks on device review\n  controller.approve(),                         \u002F\u002F waits for approve screen, presses both buttons\n]);\n\n\u002F\u002F Wrong — the action promise never resolves, test hangs until timeout\nconst wallet = await connectSpeculos(apduUrl);  \u002F\u002F deadlock\nawait controller.approve();\n```\n\nIn Playwright the same rule applies: never `await` the DMK-driven page action\nbefore issuing `controller.approve()`. Kick off the action, then approve.\n\n**Never auto-approve.** Approval is always an explicit controller call waiting\nfor the real screen text. The package has no \"press through anything\" mode by\ndesign; do not add one.\n\n## Why the bridge exists\n\nBrowsers cannot reach Speculos' loopback HTTP API directly because of CORS and\nPrivate Network Access restrictions. The Playwright worker therefore starts an\nAPDU\u002Fevents bridge (`test\u002Fapdu-bridge.ts`) with explicit CORS\u002FPNA headers.\nTests talk to the bridge URLs (`apduUrl`, `eventsUrl`); the controller talks\nto `apiUrl` directly from the worker process, which has no browser\nrestrictions.\n\n## Environment\n\nThe fixture needs one of these setups:\n\n- **Existing Speculos:** `SOULVAULT_SPECULOS_API_URL` pointing at a reachable instance.\n- **Managed container (full proof):**\n  - `SOULVAULT_SPECULOS_APP_ELF` — absolute path to a lawfully obtained Ledger\n    Ethereum app ELF. Never commit or redistribute it.\n  - `SOULVAULT_SPECULOS_IMAGE` — official Speculos image pinned by full\n    `@sha256:` digest. The fixture refuses a tag that is not digest-pinned.\n  - `SOULVAULT_SPECULOS_EXPECTED_ADDRESS` (optional) — deterministic address check.\n\n## Commands\n\n```sh\npnpm --filter @soulvault\u002Fdmk-speculos-browser test              # unit tests, no Speculos needed\npnpm --filter @soulvault\u002Fdmk-speculos-browser typecheck         # no Speculos needed\npnpm --filter @soulvault\u002Fdmk-speculos-browser test:integration  # needs Speculos + ELF\npnpm --filter @soulvault\u002Fdmk-speculos-browser test:browser      # Playwright, needs Speculos + ELF\npnpm --filter @soulvault\u002Fdmk-speculos-browser proof:browser     # full recorded proof (video, trace, transcript)\n```\n\nOnly the unit tests and typecheck run without Speculos and the ELF. The\nbrowser transport is a dev\u002Ftest tool — it is not a production wallet connector\nand should never ship in the app bundle.\n\n## Writing a browser test\n\n1. Import `test, expect` from `@soulvault\u002Fdmk-speculos-browser\u002Fplaywright`, not `@playwright\u002Ftest` directly.\n2. Use the `speculos` fixture to get `apduUrl` (for the app's transport) and `controller` (for device input).\n3. In the page, register `createSpeculosTransport({ apduUrl })` with DMK in place of the WebHID transport.\n4. Start the DMK action, then call `controller.approve()` concurrently (see the rule above).\n5. Assert on results in the page, and use `controller.getTranscript()` when you need evidence of what the device displayed and which buttons were pressed.\n\nThe default approve\u002Freject matcher is `\u002Fapprove|accept and send|sign\u002Fi`.\nPass a custom matcher when the flow shows different screen text.\n\n## Boundaries\n\nSpeculos proves browser integration and the device-action state machine. It\ndoes **not** prove WebHID discovery, physical possession, secure-element\nbehavior, or hardware attestation. Validate connect, verified address,\nrejection, disconnect, and reconnect on real hardware before any release.\n","# Speculos browser testing with `@soulvault\u002Fdmk-speculos-browser`\n\nThis skill explains how to run Ledger DMK flows in a real browser against an\nemulated device. Speculos stands in for the physical Nano S Plus; the browser\ntalks to it over HTTP, so no USB hardware is needed and the whole flow runs in\nCI. Load `ledger-dmk-implementation` for the DMK session flow itself — this\nskill only covers the emulation layer underneath it.\n\n## Connectors\n\n**Sibling skills:**\n- `ledger-dmk-implementation` — the DMK signing flow (init, session, state, app, operation). The speculos transport plugs in at its Step 1\u002F2 as a drop-in replacement for WebHID.\n- `dmk-business-logic` — conceptual background on transports and device actions.\n\n**Reference files in the package:**\n- `packages\u002Fdmk-speculos-browser\u002FREADME.md` — commands, topology, security boundaries.\n- `packages\u002Fdmk-speculos-browser\u002FTRANSPORT-CONTRACT.md` — transport behavior contract.\n- `packages\u002Fdmk-speculos-browser\u002Fexamples\u002Fvanilla.ts` — framework-neutral DMK registration example.\n- `packages\u002Fdmk-speculos-browser\u002Ftest\u002Fplaywright-fixture.ts` — the fixture consumed by browser tests.\n\n## The three exports\n\n| Import | Gives you | Use it for |\n|---|---|---|\n| `@soulvault\u002Fdmk-speculos-browser` | `createSpeculosTransport(options)` → `{ identifier, factory, metadata: { emulated: true } }` | Registering the emulated transport with DMK so `dmk.startDiscovering()` \u002F `dmk.connect()` find a fake Nano S Plus. `options` requires `apduUrl`; optional `fetch`, `requestTimeoutMs` (default 10s). |\n| `@soulvault\u002Fdmk-speculos-browser\u002Ftest` | `createSpeculosController({ apiUrl })` | Driving the emulated device from test code: `pollScreen`, `waitForScreen(matcher)`, `pressLeft\u002FRight\u002FBoth`, `approve(matcher?)`, `reject(matcher?)`, `getTranscript()`. |\n| `@soulvault\u002Fdmk-speculos-browser\u002Fplaywright` | Worker-scoped `test`\u002F`expect` fixture exposing `{ apiUrl, apduUrl, eventsUrl, controller, emulated }` | Playwright suites. The fixture reuses a reachable Speculos or starts the pinned container, mounts the app ELF, and starts the APDU\u002Fevents bridge with teardown in `finally`. |\n\n## The concurrency rule (most common mistake)\n\nThe DMK action promise blocks while the device waits for user confirmation.\nThe controller's `approve()` \u002F `reject()` must run **concurrently** with that\npending promise, never after awaiting it:\n\n```ts\n\u002F\u002F Correct — controller approval races the pending device action\nconst [wallet] = await Promise.all([\n  connectSpeculos(apduUrl),                     \u002F\u002F blocks on device review\n  controller.approve(),                         \u002F\u002F waits for approve screen, presses both buttons\n]);\n\n\u002F\u002F Wrong — the action promise never resolves, test hangs until timeout\nconst wallet = await connectSpeculos(apduUrl);  \u002F\u002F deadlock\nawait controller.approve();\n```\n\nIn Playwright the same rule applies: never `await` the DMK-driven page action\nbefore issuing `controller.approve()`. Kick off the action, then approve.\n\n**Never auto-approve.** Approval is always an explicit controller call waiting\nfor the real screen text. The package has no \"press through anything\" mode by\ndesign; do not add one.\n\n## Why the bridge exists\n\nBrowsers cannot reach Speculos' loopback HTTP API directly because of CORS and\nPrivate Network Access restrictions. The Playwright worker therefore starts an\nAPDU\u002Fevents bridge (`test\u002Fapdu-bridge.ts`) with explicit CORS\u002FPNA headers.\nTests talk to the bridge URLs (`apduUrl`, `eventsUrl`); the controller talks\nto `apiUrl` directly from the worker process, which has no browser\nrestrictions.\n\n## Environment\n\nThe fixture needs one of these setups:\n\n- **Existing Speculos:** `SOULVAULT_SPECULOS_API_URL` pointing at a reachable instance.\n- **Managed container (full proof):**\n  - `SOULVAULT_SPECULOS_APP_ELF` — absolute path to a lawfully obtained Ledger\n    Ethereum app ELF. Never commit or redistribute it.\n  - `SOULVAULT_SPECULOS_IMAGE` — official Speculos image pinned by full\n    `@sha256:` digest. The fixture refuses a tag that is not digest-pinned.\n  - `SOULVAULT_SPECULOS_EXPECTED_ADDRESS` (optional) — deterministic address check.\n\n## Commands\n\n```sh\npnpm --filter @soulvault\u002Fdmk-speculos-browser test              # unit tests, no Speculos needed\npnpm --filter @soulvault\u002Fdmk-speculos-browser typecheck         # no Speculos needed\npnpm --filter @soulvault\u002Fdmk-speculos-browser test:integration  # needs Speculos + ELF\npnpm --filter @soulvault\u002Fdmk-speculos-browser test:browser      # Playwright, needs Speculos + ELF\npnpm --filter @soulvault\u002Fdmk-speculos-browser proof:browser     # full recorded proof (video, trace, transcript)\n```\n\nOnly the unit tests and typecheck run without Speculos and the ELF. The\nbrowser transport is a dev\u002Ftest tool — it is not a production wallet connector\nand should never ship in the app bundle.\n\n## Writing a browser test\n\n1. Import `test, expect` from `@soulvault\u002Fdmk-speculos-browser\u002Fplaywright`, not `@playwright\u002Ftest` directly.\n2. Use the `speculos` fixture to get `apduUrl` (for the app's transport) and `controller` (for device input).\n3. In the page, register `createSpeculosTransport({ apduUrl })` with DMK in place of the WebHID transport.\n4. Start the DMK action, then call `controller.approve()` concurrently (see the rule above).\n5. Assert on results in the page, and use `controller.getTranscript()` when you need evidence of what the device displayed and which buttons were pressed.\n\nThe default approve\u002Freject matcher is `\u002Fapprove|accept and send|sign\u002Fi`.\nPass a custom matcher when the flow shows different screen text.\n\n## Boundaries\n\nSpeculos proves browser integration and the device-action state machine. It\ndoes **not** prove WebHID discovery, physical possession, secure-element\nbehavior, or hardware attestation. Validate connect, verified address,\nrejection, disconnect, and reconnect on real hardware before any release.\n",{"name":5,"description":7},"main","c8f4cf0617435584bebec29395be208f2e717994",".agents\u002Fskills\u002Fdmk-speculos-browser",0,"https:\u002F\u002Fgithub.com\u002Fnacmonad\u002Fsoulvault","https:\u002F\u002Fgithub.com\u002Fnacmonad","2026-09-15 01:22:14",{"source":8,"skillName":5,"commands":56,"prompt":66,"zipAvailable":67},[57,60,63],{"tool":58,"command":59},"npx","npx skills add nacmonad\u002Fsoulvault --skill dmk-speculos-browser",{"tool":61,"command":62},"bunx","bunx skills add nacmonad\u002Fsoulvault --skill dmk-speculos-browser",{"tool":64,"command":65},"pnpm","pnpm dlx skills add nacmonad\u002Fsoulvault --skill dmk-speculos-browser","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fnacmonad\u002Fsoulvault\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fdmk-speculos-browser\u002FSKILL.md",true,[],[70,99,104,127,152,174],{"skillNo":71,"name":72,"nameZh":6,"description":73,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":74,"categories":75,"keywords":81,"publishedAt":43},"01M6H41SQQTYRCRNFX7TKJNCTE","soulvault","Operate SoulVault swarms and agent identities. Use when working with the SoulVault CLI, swarm membership, epoch rotation, backup\u002Frestore, historical key grants, 0G-backed encrypted state publication, ERC-8004 agent identity registration, or when an agent needs to watch\u002Frespond to SoulVault swarm contract events such as JoinApproved, EpochRotated, BackupRequested, MemberFileMappingUpdated, HistoricalKeyBundleGranted, or AgentMessagePosted.","https:\u002F\u002Fgithub.com\u002Fnacmonad\u002Fsoulvault\u002Fblob\u002Fmain\u002Fskills\u002Fsoulvault\u002FSKILL.md",[76],{"categoryNo":77,"categoryName":78,"taxonomyType":79,"taxonomyTypeDesc":80},"01JBSEEDCAT000000000000037","律师与法务","PROFESSION","适用职业",[72,82,83,84,85,86,35,87,32,88,89,90,91,92,93,94,95,96,97,98],"cli","state","backup","swarm","grants","restore","erc-8004","contract","as","epoch","respond","with","encrypted","operate","8004 agent","rotation","8004",{"skillNo":100,"name":5,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":101,"categories":102,"keywords":103,"publishedAt":43},"01M6H41PG1XVNCC7VS2DJW1KDF","https:\u002F\u002Fgithub.com\u002Fnacmonad\u002Fsoulvault\u002Fblob\u002Fmain\u002Fpackages\u002Fdmk-speculos-browser\u002FSKILL.md",[],[24,23],{"skillNo":105,"name":106,"nameZh":6,"description":107,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":108,"categories":109,"keywords":110,"publishedAt":43},"01M6H41JDQPF6XPPMCV4QNWYEF","ledger-dmk-implementation","Execute Ledger Device Management Kit (DMK) signing operations safely: initialize the SDK, establish a device session, verify device state, open the correct chain app, perform signing or device management operations, and return the result. Use when a developer needs to implement a signing operation (transaction, message, typed data), derive or retrieve an address from a Ledger device, send any command to a Ledger device, or perform device management operations such as genuine check, app install, or app uninstall.","https:\u002F\u002Fgithub.com\u002Fnacmonad\u002Fsoulvault\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fledger-dmk-implementation\u002FSKILL.md",[],[111,112,113,114,115,83,116,117,118,119,120,35,121,90,122,123,124,125,126,26],"implementation","ledger","ledger dmk implementation","uninstall","implement","open","correct","check","initialize","session","transaction","app","chain","operation","device management","kit",{"skillNo":128,"name":129,"nameZh":6,"description":130,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":131,"categories":132,"keywords":136,"publishedAt":43},"01M6H41A77HPQS3VVFY65A1C8N","dmk-intent-vocabulary","Map developer intent and natural language to the correct Ledger Device Management Kit (DMK) components, operations, and API methods. Use when a developer's request is phrased informally, incompletely, or in terms of outcomes rather than API methods, when the intent is ambiguous and needs mapping to a specific DMK component or operation, or when a developer asks 'how do I...', 'what's the difference between...', or describes a symptom rather than an API.","https:\u002F\u002Fgithub.com\u002Fnacmonad\u002Fsoulvault\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fdmk-intent-vocabulary\u002FSKILL.md",[133],{"categoryNo":134,"categoryName":135,"taxonomyType":79,"taxonomyTypeDesc":80},"01JBSEEDCAT000000000000030","开发工程师",[137,138,139,140,141,142,143,144,117,145,35,146,147,148,149,150,151,124,125,126],"intent","vocabulary","dmk intent vocabulary","components","component","developer","api","how","operations","outcomes","methods","do","natural language","map","mapping",{"skillNo":153,"name":154,"nameZh":6,"description":155,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":156,"categories":157,"keywords":159,"publishedAt":43},"01M6H4164305CKMZQKKRPBQCTY","dmk-business-logic","Explain the design rationale and domain concepts behind the Ledger Device Management Kit (DMK) API, including Clear Signing, Secure Channel, Ledger OS (BOLOS), Device Actions vs Commands, sessions, transports, derivation paths, and Genuine Check. Use when a developer asks 'what is X?' about a DMK concept, 'why does X work this way?' about an API design decision, or 'what's the difference between X and Y?' for DMK components.","https:\u002F\u002Fgithub.com\u002Fnacmonad\u002Fsoulvault\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fdmk-business-logic\u002FSKILL.md",[158],{"categoryNo":134,"categoryName":135,"taxonomyType":79,"taxonomyTypeDesc":80},[160,161,162,163,140,164,40,142,143,165,166,167,168,169,170,171,125,172,126,173],"business","logic","dmk business logic","design","secure","why","decision","work","domain","commands","os","paths","concepts","concept",{"skillNo":175,"name":176,"nameZh":6,"description":177,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":178,"categories":179,"keywords":181,"publishedAt":43},"01M6H4120VTX0YEP6HES0BDHMZ","agentkit-x402","Use this skill when you receive a 402 Payment Required response that contains an `agentkit` extension. Covers checking 402 responses for the AgentKit extension before paying, constructing and signing a CAIP-122 challenge (SIWE for EVM), sending the signed `agentkit` HTTP header, and interpreting access modes (free, free-trial, discount). Supports both EOA wallets (EIP-191) and Smart Contract Wallets (ERC-1271, e.g. Coinbase Smart Wallet, Safe).","https:\u002F\u002Fgithub.com\u002Fnacmonad\u002Fsoulvault\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fagentkit-x402\u002FSKILL.md",[180],{"categoryNo":77,"categoryName":78,"taxonomyType":79,"taxonomyTypeDesc":80},[182,183,184,185,186,187,188,35,189,190,191,192,89,193,194,195,26,196,197,198],"x402","agentkit","agentkit x402","safe","http","access","challenge","Wallet","payment","evm","coinbase","free","extension","you","wallets","siwe","for"]