{"_id":"@aether-ai/sdk","_rev":"11-6d2fc4214294749cdf26f89ed7b682b1","name":"@aether-ai/sdk","dist-tags":{"rc":"0.1.0-rc.3","latest":"0.5.0"},"versions":{"0.1.0-rc.3":{"name":"@aether-ai/sdk","version":"0.1.0-rc.3","keywords":["aether","rag","decentralized","sdk","ai","vector-search"],"author":{"name":"Aether Contributors"},"license":"MIT","_id":"@aether-ai/sdk@0.1.0-rc.3","maintainers":[{"name":"nathan-aether","email":"nathan@aetherdb.ai"}],"homepage":"https://github.com/quintessence-group/aether-sdk-typescript#readme","bugs":{"url":"https://github.com/quintessence-group/aether-sdk-typescript/issues"},"dist":{"shasum":"423bcd174df0547a3684f7c07e69deb6d4905191","tarball":"https://registry.npmjs.org/@aether-ai/sdk/-/sdk-0.1.0-rc.3.tgz","fileCount":7,"integrity":"sha512-9Uq36R2A8kSVUukMwJKeVymGug444u45ifD705rHpHVfA+XdmP3/bh7Vz7LllU/TR3CJCnJCnhhPHMz+BpTyoA==","signatures":[{"sig":"MEUCIG87rhoMrTeGrnGPflCs3swxb0/cBCZUgbEOvaVYqhueAiEA6EZaKIcBF6SgyFsEUwIgkhzVi36E5BWgScK5DA+5zpo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":124848},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"gitHead":"db043d614f956018a664ed198e01b5f0a489cfbe","scripts":{"lint":"tsc --noEmit","test":"vitest run","build":"tsup","test:watch":"vitest","prepublishOnly":"npm run build && npm run check:packaging","check:packaging":"publint --strict && attw --pack ."},"_npmUser":{"name":"nathan-aether","email":"nathan@aetherdb.ai"},"repository":{"url":"git+https://github.com/quintessence-group/aether-sdk-typescript.git","type":"git"},"_npmVersion":"11.7.0","description":"TypeScript SDK for Aether decentralized RAG","directories":{},"sideEffects":false,"_nodeVersion":"25.3.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^2.0.0","publint":"^0.3.21","typescript":"^5.4.0","@types/node":"^25.5.2","@arethetypeswrong/cli":"^0.18.3"},"_npmOperationalInternal":{"tmp":"tmp/sdk_0.1.0-rc.3_1780982611289_0.3037216860924754","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@aether-ai/sdk","version":"0.3.0","keywords":["aether","rag","decentralized","sdk","ai","vector-search"],"author":{"name":"Aether Contributors"},"license":"MIT","_id":"@aether-ai/sdk@0.3.0","maintainers":[{"name":"nathan-aether","email":"nathan@aetherdb.ai"}],"homepage":"https://github.com/quintessence-group/aether-sdk-typescript#readme","bugs":{"url":"https://github.com/quintessence-group/aether-sdk-typescript/issues"},"dist":{"shasum":"2b0d5bfb0017027584b215e1d86dcfcf2ef4b493","tarball":"https://registry.npmjs.org/@aether-ai/sdk/-/sdk-0.3.0.tgz","fileCount":7,"integrity":"sha512-p0KIBrNHAKmb6z5tBs78nK/oQJSgM1iPjFyROhg8I47Hq9RITmyhoz3gHLxk3fyvPElvXP+cKvSRhZ0lg7lK1w==","signatures":[{"sig":"MEUCIHvMQWo99wHFXDej0hwUdLqDS+9R4awglBJ6cjAUW2rUAiEAgP+dKVpDxyvByBX3mAu3Um0jusBof3SmPJYPOVFbqpE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":143551},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"scripts":{"lint":"tsc --noEmit","test":"vitest run","build":"tsup","test:watch":"vitest","prepublishOnly":"npm run build && npm run check:packaging","check:packaging":"publint --strict && attw --pack ."},"_npmUser":{"name":"nathan-aether","email":"nathan@aetherdb.ai"},"repository":{"url":"git+https://github.com/quintessence-group/aether-sdk-typescript.git","type":"git"},"_npmVersion":"11.7.0","description":"TypeScript SDK for Aether decentralized RAG","directories":{},"sideEffects":false,"_nodeVersion":"25.3.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^2.0.0","publint":"^0.3.21","typescript":"^5.4.0","@types/node":"^25.5.2","@arethetypeswrong/cli":"^0.18.3"},"_npmOperationalInternal":{"tmp":"tmp/sdk_0.3.0_1781988824913_0.7039303170636635","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"name":"@aether-ai/sdk","version":"0.3.2","keywords":["aether","rag","decentralized","sdk","ai","vector-search"],"author":{"name":"Aether Contributors"},"license":"MIT","_id":"@aether-ai/sdk@0.3.2","maintainers":[{"name":"nathan-aether","email":"nathan@aetherdb.ai"}],"homepage":"https://github.com/quintessence-group/aether-sdk-typescript#readme","bugs":{"url":"https://github.com/quintessence-group/aether-sdk-typescript/issues"},"dist":{"shasum":"87b146c9ba17552b05480e6d0ce229db94b29096","tarball":"https://registry.npmjs.org/@aether-ai/sdk/-/sdk-0.3.2.tgz","fileCount":7,"integrity":"sha512-y1oujBTofmlVLJpUJQ/B+UOp6hNvV8+vnuLpoSD+HlsIew0xzJ05MknGDk81N6/abNyWGdCDvew4moGr6uJpUg==","signatures":[{"sig":"MEYCIQDM/nI6sJ18jgODkgsFUrUeKLcnVJOeWzDwFHsZOR9HlgIhAMIzNRlLRaLInj/m05mqDlRfeOMYurM+mqm4CPl0R9fd","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":185448},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"gitHead":"854ada0524eb5c3ef7ac9bab50f41faa2602c9a9","scripts":{"lint":"tsc --noEmit","test":"vitest run","build":"tsup","test:watch":"vitest","prepublishOnly":"npm run build && npm run check:packaging","check:packaging":"publint --strict && attw --pack ."},"_npmUser":{"name":"nathan-aether","email":"nathan@aetherdb.ai"},"repository":{"url":"git+https://github.com/quintessence-group/aether-sdk-typescript.git","type":"git"},"_npmVersion":"11.7.0","description":"TypeScript SDK for Aether decentralized RAG","directories":{},"sideEffects":false,"_nodeVersion":"25.3.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^2.0.0","publint":"^0.3.21","typescript":"^5.4.0","@types/node":"^25.5.2","@arethetypeswrong/cli":"^0.18.3"},"_npmOperationalInternal":{"tmp":"tmp/sdk_0.3.2_1782112848491_0.75433084638669","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@aether-ai/sdk","version":"0.4.0","keywords":["aether","rag","decentralized","sdk","ai","vector-search"],"author":{"name":"Aether Contributors"},"license":"MIT","_id":"@aether-ai/sdk@0.4.0","maintainers":[{"name":"nathan-aether","email":"nathan@aetherdb.ai"}],"homepage":"https://github.com/quintessence-group/aether-sdk-typescript#readme","bugs":{"url":"https://github.com/quintessence-group/aether-sdk-typescript/issues"},"dist":{"shasum":"7cd583d2a2d9376589836e074d3c6c251cb6e6ec","tarball":"https://registry.npmjs.org/@aether-ai/sdk/-/sdk-0.4.0.tgz","fileCount":17,"integrity":"sha512-ot6UR/53x3IeBmAnnRQr4vOLQIbbKNQ82ii38Mh6TqkGk38kt6PIpEzRiW9XHAoLeesf8MO1mTBz4x9u0f0IxQ==","signatures":[{"sig":"MEUCIAJuyUXZnEChf/HwFKsIIEAcMJtNC+lwzMoAHAunMJtLAiEArf7gds+arZYEbNLS39O6m4EmuKl4RH11HixApbwqIwE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":426201},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.cts","module":"./dist/index.mjs","engines":{"node":">=18"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./integrations/langchain":{"import":{"types":"./dist/integrations/langchain.d.ts","default":"./dist/integrations/langchain.mjs"},"require":{"types":"./dist/integrations/langchain.d.cts","default":"./dist/integrations/langchain.cjs"}},"./integrations/llamaindex":{"import":{"types":"./dist/integrations/llamaindex.d.ts","default":"./dist/integrations/llamaindex.mjs"},"require":{"types":"./dist/integrations/llamaindex.d.cts","default":"./dist/integrations/llamaindex.cjs"}}},"gitHead":"fa4ac1c1050ff8de0cabdec73c770c0eb223fee5","scripts":{"lint":"tsc --noEmit","test":"vitest run","build":"tsup","test:watch":"vitest","prepublishOnly":"npm run build && npm run check:packaging","check:packaging":"publint --strict && attw --pack ."},"_npmUser":{"name":"nathan-aether","email":"nathan@aetherdb.ai"},"overrides":{"esbuild":"^0.28.1"},"repository":{"url":"git+https://github.com/quintessence-group/aether-sdk-typescript.git","type":"git"},"_npmVersion":"11.7.0","description":"TypeScript SDK for Aether decentralized RAG","directories":{},"sideEffects":false,"_nodeVersion":"25.3.0","publishConfig":{"access":"public"},"typesVersions":{"*":{"integrations/langchain":["./dist/integrations/langchain.d.cts"],"integrations/llamaindex":["./dist/integrations/llamaindex.d.cts"]}},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^3.2.4","publint":"^0.3.21","typescript":"^5.4.0","@types/node":"^25.5.2","@langchain/core":"^1.2.1","@llamaindex/core":"^0.6.22","@arethetypeswrong/cli":"^0.18.3"},"peerDependencies":{"@langchain/core":">=0.2.0 <2","@llamaindex/core":">=0.6.0 <1"},"peerDependenciesMeta":{"@langchain/core":{"optional":true},"@llamaindex/core":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/sdk_0.4.0_1783436623054_0.6366303614195172","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@aether-ai/sdk","version":"0.5.0","description":"TypeScript SDK for Aether decentralized RAG","type":"module","sideEffects":false,"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./integrations/langchain":{"import":{"types":"./dist/integrations/langchain.d.ts","default":"./dist/integrations/langchain.mjs"},"require":{"types":"./dist/integrations/langchain.d.cts","default":"./dist/integrations/langchain.cjs"}},"./integrations/llamaindex":{"import":{"types":"./dist/integrations/llamaindex.d.ts","default":"./dist/integrations/llamaindex.mjs"},"require":{"types":"./dist/integrations/llamaindex.d.cts","default":"./dist/integrations/llamaindex.cjs"}}},"main":"./dist/index.cjs","module":"./dist/index.mjs","types":"./dist/index.d.cts","typesVersions":{"*":{"integrations/langchain":["./dist/integrations/langchain.d.cts"],"integrations/llamaindex":["./dist/integrations/llamaindex.d.cts"]}},"scripts":{"build":"tsup","test":"vitest run","test:watch":"vitest","lint":"tsc --noEmit","check:packaging":"publint --strict && attw --pack .","prepublishOnly":"npm run build && npm run check:packaging"},"license":"MIT","author":{"name":"Aether Contributors"},"repository":{"type":"git","url":"git+https://github.com/quintessence-group/aether-sdk-typescript.git"},"homepage":"https://github.com/quintessence-group/aether-sdk-typescript#readme","bugs":{"url":"https://github.com/quintessence-group/aether-sdk-typescript/issues"},"keywords":["aether","rag","decentralized","sdk","ai","vector-search"],"publishConfig":{"access":"public"},"engines":{"node":">=18"},"peerDependencies":{"@langchain/core":">=0.2.0 <2","@llamaindex/core":">=0.6.0 <1"},"peerDependenciesMeta":{"@langchain/core":{"optional":true},"@llamaindex/core":{"optional":true}},"devDependencies":{"@arethetypeswrong/cli":"^0.18.3","@langchain/core":"^1.2.1","@llamaindex/core":"^0.6.22","@types/node":"^25.5.2","publint":"^0.3.21","tsup":"^8.0.0","typescript":"^5.4.0","vitest":"^3.2.4"},"overrides":{"esbuild":"^0.28.1"},"gitHead":"36ec6af3a2c426e37e7d416759134ebe9f5aa727","_id":"@aether-ai/sdk@0.5.0","_nodeVersion":"20.20.2","_npmVersion":"11.18.0","dist":{"integrity":"sha512-4iOGlQ3IUxyXkRzsLlR/A3h50/Kd7qQJswDBpVmB/MT23z4LUTwiXOHh9UrOqbRPIzpcGFFspewGpUmgPcmKjQ==","shasum":"c0ec0339a94fc0f84ef22ee57c2732b270e94b10","tarball":"https://registry.npmjs.org/@aether-ai/sdk/-/sdk-0.5.0.tgz","fileCount":17,"unpackedSize":520286,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDH0dZJp/PvalQlHnO9GlWqqBc3ZoBaP9/c70ZgrecgpQIhAOb/EYINc8V6UCzw80oeA3t2BU3S/lFhWwi06qgtjEhh"}]},"_npmUser":{"name":"nathan-aether","email":"nathan@aetherdb.ai"},"directories":{},"maintainers":[{"name":"nathan-aether","email":"nathan@aetherdb.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/sdk_0.5.0_1784593094000_0.8434512927571605"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-01T05:03:24.992Z","modified":"2026-07-21T00:18:14.346Z","0.1.0-rc.1":"2026-05-01T05:03:25.555Z","0.1.0-rc.2":"2026-05-01T06:14:56.960Z","0.1.0-rc.3":"2026-06-09T05:23:31.496Z","0.3.0":"2026-06-20T20:53:45.049Z","0.3.2":"2026-06-22T07:20:48.637Z","0.4.0":"2026-07-07T15:03:43.180Z","0.5.0":"2026-07-21T00:18:14.165Z"},"bugs":{"url":"https://github.com/quintessence-group/aether-sdk-typescript/issues"},"author":{"name":"Aether Contributors"},"license":"MIT","homepage":"https://github.com/quintessence-group/aether-sdk-typescript#readme","keywords":["aether","rag","decentralized","sdk","ai","vector-search"],"repository":{"type":"git","url":"git+https://github.com/quintessence-group/aether-sdk-typescript.git"},"description":"TypeScript SDK for Aether decentralized RAG","maintainers":[{"name":"nathan-aether","email":"nathan@aetherdb.ai"}],"readme":"# @aether-ai/sdk\n\nTypeScript SDK for [Aether](https://aetherdb.ai) — the decentralized RAG API.\n\n## Installation\n\n```bash\nnpm install @aether-ai/sdk\n```\n\n## Memory\n\n`Memory` is the recommended way to give an agent, assistant, or per-user feature\na durable memory. Construct it once with an **entity id** — a user, customer,\npatient, or agent session — and every call is automatically scoped to that\nentity. It is a thin facade over the raw [`AetherClient`](#quick-start): it adds\nno new HTTP routes and inherits all transport, retry, timeout, and error\nsemantics unchanged.\n\n```typescript\nimport { Memory } from \"@aether-ai/sdk\";\n\nconst mem = new Memory(\"patient-john\", { apiKey: \"aether_your_key_here\" });\n\n// Remember something (one HTTP call). Optional metadata is stored as tags.\nawait mem.remember(\"Anxious about flying; uses 4-7-8 breathing\", {\n  topic: \"anxiety\",\n});\n\n// Recall by meaning. `score` is higher = more relevant, relative to this call.\nconst hits = await mem.recall(\"anxiety coping\", { k: 3 });\nfor (const h of hits) {\n  console.log(`${h.score?.toFixed(2)}  ${h.text}`);\n}\n\n// Blend semantic relevance with recency (recent memories rank higher).\nconst recent = await mem.recall(\"what did we discuss\", {\n  k: 5,\n  recencyWeight: 0.5,\n});\n\n// Chronological view, newest first.\nconst all = await mem.list({ limit: 20 });\n\n// Forget one memory, or wipe the entity entirely.\nawait mem.forget(hits[0].id);\nconst removed = await mem.forgetAll();\n```\n\nEach result is a `MemoryItem`:\n\n```typescript\ninterface MemoryItem {\n  id: string;          // underlying doc_id\n  text: string;        // the remembered text\n  createdAt?: string;  // RFC 3339; set by remember/list, and by recall when recencyWeight > 0\n  entityId?: string;   // always this Memory's entity\n  metadata: Metadata;  // structured metadata, echoed back on recall/list\n  score?: number;      // relevance signal (recall only); higher = more relevant\n}\n```\n\n> **Note:** `metadata` (`Record<string, string | number | boolean>`) is stored\n> with each memory and echoed back on `recall` and `list`. You can also filter\n> on it at query time via `recall(query, { filter })`.\n\nFor lower-level control — raw documents, BYO embeddings, batching, async jobs —\nuse the [`AetherClient`](#quick-start) directly.\n\n## Quick Start\n\n```typescript\nimport { AetherClient } from \"@aether-ai/sdk\";\nimport { readFileSync } from \"fs\";\n\nconst client = new AetherClient({\n  apiKey: \"aether_your_key_here\",\n});\n\n// Insert a file — content type is auto-detected from the filename\nconst data = readFileSync(\"report.pdf\");\nconst doc = await client.insert(new Uint8Array(data), {\n  filename: \"report.pdf\",\n});\nconsole.log(`Inserted: ${doc.doc_id}`);\n\n// Insert raw text\nawait client.insertText(\"Some text content to index\");\n\n// Search\nconst results = await client.search(\"machine learning\", 5);\nfor (const r of results) {\n  console.log(`  ${r.doc_id} (score: ${r.score}) - ${r.passage}`);\n}\n```\n\n## Per-user permissions & audit\n\nRestrict who can read a document, then scope a client to act on behalf of a\nprincipal so reads are filtered by each document's ACL:\n\n```typescript\nimport { AetherClient, PrincipalPinMismatchError } from \"@aether-ai/sdk\";\n\nconst client = new AetherClient({ apiKey: \"aether_your_key_here\" });\n\n// Write with a read-ACL — only alice and the eng group can read this document.\n// Omit aclReaders (or pass []) for the admin-only default.\nawait client.insertText(\"Q3 board deck notes\", {\n  aclReaders: [\"user:alice\", \"group:eng\"],\n});\n\n// Act as a principal: searches and reads only surface documents this principal\n// is allowed to see. Composes with client.partition(...).\nconst alice = client.asPrincipal(\"user:alice\", { groups: [\"group:eng\"] });\nconst hits = await alice.search(\"board deck\", 5);\n\n// Query the tenant's access-audit log (requires audit capture to be enabled).\nconst page = await client.audit.access({ action: \"read\", limit: 100 });\nconsole.log(`${page.total} read events`);\nfor (const rec of page.records) {\n  console.log(rec.at, rec.actor, rec.action, rec.resource);\n}\n```\n\nA principal-pinned API key that is asked to assert a different principal throws\n`PrincipalPinMismatchError`.\n\n## Supported File Formats\n\nContent type is auto-detected from the filename extension. No need to specify `contentType` manually.\n\n| Format | Extensions |\n|--------|-----------|\n| PDF | .pdf |\n| Word | .docx, .doc |\n| PowerPoint | .pptx, .ppt |\n| Excel | .xlsx, .xls |\n| HTML | .html, .htm |\n| CSV | .csv |\n| Plain text | .txt, .md, .json, .xml |\n\nBinary-format parsing is handled automatically server-side — no setup required.\n\n## RAG Quick Start\n\nUse `retrieve()` to search and get document content in one call:\n\n```typescript\nimport { AetherClient } from \"@aether-ai/sdk\";\n\nconst aether = new AetherClient();\n\n// Insert documents\nawait aether.insertText(\"All employees receive 20 days PTO per year...\");\n\n// Retrieve relevant context for your LLM\nconst results = await aether.retrieve(\"How much PTO do I get?\", 3);\nconst context = results\n  .map((r) => `[${r.title ?? r.doc_id}]\\n${r.content}`)\n  .join(\"\\n\\n\");\n```\n\nFor complete RAG examples with Anthropic, OpenAI, Vercel AI SDK, and more, see the [Aether docs](https://docs.aetherdb.ai).\n\n## Async Processing\n\nFor large files, use the async methods for non-blocking inserts:\n\n```typescript\nimport { readFileSync } from \"fs\";\n\n// Submit for background processing\nconst data = readFileSync(\"report.pdf\");\nconst job = await client.insertAsync(new Uint8Array(data), {\n  filename: \"report.pdf\",\n});\n\n// Poll until the job reaches a terminal state\nconst result = await client.waitForJob(job.job_id);\nconsole.log(`Status: ${result.status} (doc: ${result.doc_id})`);\n```\n\n## License\n\nMIT\n","readmeFilename":"README.md"}