{"_id":"@arysenai/agent-sdk","_rev":"6-02a0f96f725381b609daa1086d21b5af","name":"@arysenai/agent-sdk","dist-tags":{"latest":"0.3.1"},"versions":{"0.1.0":{"name":"@arysenai/agent-sdk","version":"0.1.0","_id":"@arysenai/agent-sdk@0.1.0","maintainers":[{"name":"ravensun87","email":"ravensunv587@gmail.com"},{"name":"lucaspan","email":"lucaspan27@gmail.com"},{"name":"langerrr","email":"alexjlan8@gmail.com"}],"dist":{"shasum":"bd53bd9317c3b0cad0c7e6ab71cb600ddc13bd6a","tarball":"https://registry.npmjs.org/@arysenai/agent-sdk/-/agent-sdk-0.1.0.tgz","fileCount":44,"integrity":"sha512-uXhDVsieFPelxC7Ez2RNWDGWX/w3G0yDGoI/0KPElmXJ05qFukbBkpzJLRtZ5pKSYcRko2wG+Q5WOPbKDpUPug==","signatures":[{"sig":"MEUCIBwOBxQVs8SeJ9y01IOEMLI0PUO059q69rCC6N7M6cFUAiEAzBVCrSy5N+NN3prSTr39DdwMHBdEdcUTCESCmcGMApo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":174372},"main":"dist/keymod/index.js","type":"module","_from":"file:arysenai-agent-sdk-0.1.0.tgz","types":"dist/keymod/index.d.ts","exports":{"./keymod":{"types":"./dist/keymod/index.d.ts","import":"./dist/keymod/index.js"}},"scripts":{"test":"vitest run","build":"tsc","test:watch":"vitest"},"_npmUser":{"name":"lucaspan","email":"lucaspan27@gmail.com"},"_resolved":"/private/var/folders/7b/cczhq4fx4sl4dcdw69cvhw2h0000gn/T/f76a9e3d204c00f42e202221c6e925b1/arysenai-agent-sdk-0.1.0.tgz","_integrity":"sha512-uXhDVsieFPelxC7Ez2RNWDGWX/w3G0yDGoI/0KPElmXJ05qFukbBkpzJLRtZ5pKSYcRko2wG+Q5WOPbKDpUPug==","_npmVersion":"10.9.2","description":"Arysen Agent SDK — TypeScript wrapper for keymod WASM modules","directories":{},"_nodeVersion":"22.15.0","dependencies":{"@arysenai/arysen-wallet":"^0.1.0","@arysenai/arysen-mandate":"^0.1.0"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.0.0","typescript":"^5.7.0","@types/node":"^25.3.3"},"_npmOperationalInternal":{"tmp":"tmp/agent-sdk_0.1.0_1773807579324_0.01457191925742607","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@arysenai/agent-sdk","version":"0.2.1","_id":"@arysenai/agent-sdk@0.2.1","maintainers":[{"name":"ravensun87","email":"ravensunv587@gmail.com"},{"name":"lucaspan","email":"lucaspan27@gmail.com"},{"name":"langerrr","email":"alexjlan8@gmail.com"}],"dist":{"shasum":"b476c4edd2058ea8929e378d6515e4b5ccc3c434","tarball":"https://registry.npmjs.org/@arysenai/agent-sdk/-/agent-sdk-0.2.1.tgz","fileCount":49,"integrity":"sha512-I3ka7rh9idHL/hSPEVq0SCyjItleTj8CmcCMi2jRxX31u2uNUVQpOgNa/+0erM79p5056wFA3Js9Kc3+nL0zXA==","signatures":[{"sig":"MEQCIALLzpTwNf/kGAbDBRQXRnq5nnRYZG/zSTOW/KTLJqh2AiBRjt2Wf9qhr7Rh2vfnYQsXZepCY7mD3N9P4Fbo07B7sg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":195201},"main":"dist/keymod/index.js","type":"module","_from":"file:arysenai-agent-sdk-0.2.1.tgz","types":"dist/keymod/index.d.ts","exports":{"./keymod":{"types":"./dist/keymod/index.d.ts","import":"./dist/keymod/index.js"}},"scripts":{"test":"vitest run","build":"tsc","test:watch":"vitest"},"_npmUser":{"name":"lucaspan","email":"lucaspan27@gmail.com"},"_resolved":"/private/var/folders/7b/cczhq4fx4sl4dcdw69cvhw2h0000gn/T/3158d730fd8c6d364c0431ec3c2b36d2/arysenai-agent-sdk-0.2.1.tgz","_integrity":"sha512-I3ka7rh9idHL/hSPEVq0SCyjItleTj8CmcCMi2jRxX31u2uNUVQpOgNa/+0erM79p5056wFA3Js9Kc3+nL0zXA==","_npmVersion":"10.9.2","description":"Arysen Agent SDK — TypeScript wrapper for keymod WASM modules","directories":{},"_nodeVersion":"22.15.0","dependencies":{"@arysenai/arysen-wallet":"^0.2.0","@arysenai/arysen-mandate":"^0.2.0"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.0.0","typescript":"^5.7.0","@types/node":"^25.3.3"},"_npmOperationalInternal":{"tmp":"tmp/agent-sdk_0.2.1_1774289736316_0.945271581199155","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@arysenai/agent-sdk","version":"0.3.0","_id":"@arysenai/agent-sdk@0.3.0","maintainers":[{"name":"ravensun87","email":"ravensunv587@gmail.com"},{"name":"lucaspan","email":"lucaspan27@gmail.com"},{"name":"langerrr","email":"alexjlan8@gmail.com"}],"dist":{"shasum":"f2d80bc97c62140f82e4df31b64ea2b17a5cab5f","tarball":"https://registry.npmjs.org/@arysenai/agent-sdk/-/agent-sdk-0.3.0.tgz","fileCount":49,"integrity":"sha512-GMiBVzSNGRlyCh0Her91m+y3JdkTI6uET63SjM8U3Fn+48A9rgKLrnxZwYKYa+5Ua+RadL8KewPSHxSpf0z5Rw==","signatures":[{"sig":"MEQCIH8uWjt+QFpuK4EusG5aYnmp5eUp5aJ2KO/JVUa6JXMTAiBdYw6cJD2o4VHHON/PQbqrHs53DJqalOsFYrqT+4DzZA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":196637},"main":"dist/keymod/index.js","pnpm":{"onlyBuiltDependencies":["esbuild"]},"type":"module","types":"dist/keymod/index.d.ts","exports":{"./keymod":{"types":"./dist/keymod/index.d.ts","import":"./dist/keymod/index.js"}},"gitHead":"9df393dce7ad0402bf75e9579f8d7e27482fe411","scripts":{"test":"vitest run","build":"tsc","test:watch":"vitest"},"_npmUser":{"name":"lucaspan","email":"lucaspan27@gmail.com"},"_npmVersion":"10.9.2","description":"Arysen Agent SDK — TypeScript wrapper for keymod WASM modules","directories":{},"_nodeVersion":"22.15.0","dependencies":{"@arysenai/arysen-wallet":"^0.3.1","@arysenai/arysen-mandate":"^0.3.1"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.27.0","devDependencies":{"vitest":"^3.0.0","typescript":"^5.7.0","@types/node":"^25.3.3"},"_npmOperationalInternal":{"tmp":"tmp/agent-sdk_0.3.0_1775072362378_0.5109249790735007","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@arysenai/agent-sdk","version":"0.3.1","description":"Arysen Agent SDK — TypeScript wrapper for keymod WASM modules","type":"module","main":"dist/keymod/index.js","types":"dist/keymod/index.d.ts","exports":{"./keymod":{"import":"./dist/keymod/index.js","types":"./dist/keymod/index.d.ts"}},"scripts":{"build":"tsc","test":"vitest run","test:watch":"vitest","test:keychain":"tsx test-keychain-persistence.ts"},"dependencies":{"@arysenai/arysen-mandate":"^0.3.2","@arysenai/arysen-wallet":"^0.3.1"},"devDependencies":{"@types/node":"^25.3.3","tsx":"^4.19.2","typescript":"^5.7.0","vitest":"^3.0.0"},"packageManager":"pnpm@10.27.0","pnpm":{"onlyBuiltDependencies":["esbuild"],"overrides":{"@arysenai/arysen-mandate":"file:../keymod/mandate/pkg"}},"_id":"@arysenai/agent-sdk@0.3.1","gitHead":"d46abbb8a94d5e60153d338e2d5f4201b4d99cb7","_nodeVersion":"22.15.0","_npmVersion":"10.9.2","dist":{"integrity":"sha512-3KO+UuIJwqf3Cf95FIIIdzY/YXgISt8bmZmO8TsDi0SfjNbu0SwJRwiMVZddK8cl5PeioyyuC5nyo+AdvKfDew==","shasum":"209c795b1abfa5a63760daf3456856f5a03e913b","tarball":"https://registry.npmjs.org/@arysenai/agent-sdk/-/agent-sdk-0.3.1.tgz","fileCount":50,"unpackedSize":220189,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCkCHiKcXiW54OTTQk3IUu+erVnHvm4PTcwDyh7wcCjiwIhALiEZP3M3X4v2DjZWdlTkWh1AtwRhBZ+eBC2WFrufXLZ"}]},"_npmUser":{"name":"lucaspan","email":"lucaspan27@gmail.com"},"directories":{},"maintainers":[{"name":"ravensun87","email":"ravensunv587@gmail.com"},{"name":"lucaspan","email":"lucaspan27@gmail.com"},{"name":"langerrr","email":"alexjlan8@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/agent-sdk_0.3.1_1775333770310_0.17658303293086508"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-18T04:19:39.245Z","modified":"2026-04-04T20:16:10.597Z","0.1.0":"2026-03-18T04:19:39.474Z","0.2.0":"2026-03-23T18:10:55.636Z","0.2.1":"2026-03-23T18:15:36.458Z","0.3.0":"2026-04-01T19:39:22.529Z","0.3.1":"2026-04-04T20:16:10.451Z"},"description":"Arysen Agent SDK — TypeScript wrapper for keymod WASM modules","maintainers":[{"name":"ravensun87","email":"ravensunv587@gmail.com"},{"name":"lucaspan","email":"lucaspan27@gmail.com"},{"name":"langerrr","email":"alexjlan8@gmail.com"}],"readme":"# agent-sdk\n\nTypeScript SDK for Arysen agents. Wraps the [`keymod`](../keymod) WASM modules into a single `ArysenKeymod` class providing cryptographic signing, credential management, policy enforcement, and on-chain transaction execution.\n\n## Install\n\n```bash\npnpm install\n```\n\nRequires the WASM packages to be built first:\n\n```bash\ncd ../keymod/wallet && wasm-pack build --target nodejs\ncd ../keymod/mandate && wasm-pack build --target nodejs\ncd ../../agent-sdk && pnpm install\n```\n\n## Quick Start\n\n```ts\nimport { ArysenKeymod } from 'agent-sdk/keymod';\n\n// Initialize WASM modules\nconst keymod = await ArysenKeymod.init();\n\n// Generate keys\nconst workerKey = keymod.generateWorkerKey();\nconst sessionKey = keymod.generateSessionKey();\n\n// Sign and verify\nconst message = new TextEncoder().encode('hello');\nconst signature = keymod.signWorker(message, workerKey.key_id);\nconst pubBytes = hexToBytes(workerKey.pub_key);\nkeymod.verifyWorker(message, signature, pubBytes); // true\n```\n\n## API\n\n### Key Generation\n\n```ts\nkeymod.generateWorkerKey(): KeyPairResult        // Ed25519\nkeymod.generateSessionKey(): KeyPairResult       // secp256k1\nkeymod.generateWorkerKeyWithSecret(): KeyPairWithSecret\nkeymod.generateSessionKeyWithSecret(): KeyPairWithSecret\n```\n\n### Signing & Verification\n\n```ts\nkeymod.signWorker(message: Uint8Array, keyId: string): Uint8Array   // 64-byte Ed25519\nkeymod.signSession(message: Uint8Array, keyId: string): Uint8Array  // 65-byte secp256k1\nkeymod.verifyWorker(message, signature, pubKey): boolean\nkeymod.verifySession(message, signature, pubKey): boolean\n```\n\n### Secret Management\n\nSecrets are encrypted with AES-256-GCM and stored persistently in:\n- **macOS**: Keychain Services\n- **Windows**: DPAPI\n- **Linux**: libsecret or encrypted files at `~/.arysen/keys/`\n\nSecrets survive application restarts.\n\n```ts\nkeymod.depositSecret(name: string, value: string): boolean\nkeymod.removeSecret(name: string): boolean\nkeymod.listSecrets(): string[]  // names only, values never exposed\n```\n\n### Credential-Injected Requests\n\n```ts\nkeymod.executeRequest({\n  method: 'GET',\n  url: 'https://api.example.com/data',\n  headers: { Authorization: 'Bearer {API_KEY}' },\n}): HttpResponse\n// {API_KEY} is replaced with the deposited secret value.\n// Response is scrubbed of injected values before return.\n```\n\n### Policy Enforcement\n\n```ts\nkeymod.setPolicy(policy: Policy): boolean\nkeymod.checkPolicy(action: string, params: Record<string, unknown>): PolicyResult\nkeymod.getSpendingSummary(): SpendingSummary\n```\n\n### Backend Integration\n\nRequires initialization with backend credentials:\n\n```ts\nconst workerKey = keymod.generateWorkerKeyWithSecret();\nconst sessionKey = keymod.generateSessionKeyWithSecret();\n\nconst mandate = keymod.initMandate({\n  base_url: 'https://api.arysen.ai',\n  agent_id: 'your-agent-uuid',\n  worker_key_id: workerKey.key_id,\n  session_key_id: sessionKey.key_id,\n  worker_private_key_hex: workerKey.private_key,\n  session_private_key_hex: sessionKey.private_key,\n});\n\n// mandate: { mandate_id, max_per_tx, max_daily, wallet_address, ... }\n```\n\n### Transactions\n\n```ts\n// USDC transfer (5-step flow: preflight → check → prepare → sign → submit)\nconst result = keymod.transferUsdc('0xRecipient', '10.00');\n// result: { tx_hash: '0x...' }\n\n// Escrowed deal order\nconst deal = keymod.createDealOrder({\n  executor_agent_id: 'agent-uuid',\n  bounty_amount: '5.00',\n  task_cid: 'QmTaskCID',\n  delivery_deadline: 1735689600,\n});\n```\n\n## Types\n\n| Type | Description |\n|------|-------------|\n| `KeyPairResult` | `{ pub_key: string, key_id: string }` |\n| `KeyPairWithSecret` | Extends with `private_key: string` |\n| `Policy` | `{ spending: SpendingPolicy, secrets: Record<string, SecretPolicy> }` |\n| `SpendingPolicy` | `{ max_per_tx, max_daily, expires_at? }` |\n| `SecretPolicy` | `{ rate_limit, daily_limit, allowed_domains }` |\n| `InitConfig` | Backend config + worker/session private keys |\n| `MandateInfo` | On-chain mandate details from backend |\n| `TransferResult` | `{ tx_hash: string }` |\n| `DealOrderParams` | `{ executor_agent_id, bounty_amount, task_cid, delivery_deadline }` |\n\n## Testing\n\n```bash\npnpm test             # 38 unit/integration tests (vitest)\npnpm test:watch       # watch mode\npnpm test:keychain    # macOS keychain persistence integration test\n```\n\n### Keychain Integration Test (macOS only)\n\nThe `test:keychain` script verifies real keychain persistence:\n- Deposits secrets and verifies they're written to macOS Keychain\n- Destroys and recreates `ArysenKeymod` to simulate process restart\n- Verifies secrets persist across restarts\n- Tests multiple secrets and removal\n- Cleans up test data automatically\n\nThis test uses the actual `security` CLI and reads/writes to your macOS Keychain under the service name `arysen`.\n\n## Architecture\n\n```\nArysenKeymod (TypeScript)\n├── Wallet WASM ─── Ed25519 + secp256k1 signing\n└── Mandate WASM ── Secrets + Policy + Backend + Transactions\n    └── depends on Wallet (statically linked)\n```\n\nThe SDK loads both WASM modules via `wasm-pack`'s Node.js CJS target, bridging to ESM with `createRequire`. Host imports (`get_time`, `http_execute`, etc.) are provided via an auto-generated env shim.\n","readmeFilename":"README.md"}