{"_id":"@atomicmemory/langchain","_rev":"3-911760fb55e844c6a29a37b9e3a0328d","name":"@atomicmemory/langchain","dist-tags":{"latest":"0.1.2"},"versions":{"0.1.0":{"name":"@atomicmemory/langchain","version":"0.1.0","license":"Apache-2.0","_id":"@atomicmemory/langchain@0.1.0","maintainers":[{"name":"atomicstrata","email":"services@atomicstrata.ai"}],"homepage":"https://github.com/atomicstrata/atomicmemory-integrations#readme","bugs":{"url":"https://github.com/atomicstrata/atomicmemory-integrations/issues"},"dist":{"shasum":"987c5ceec915c1d7693eba39851f7af88dd6c722","tarball":"https://registry.npmjs.org/@atomicmemory/langchain/-/langchain-0.1.0.tgz","fileCount":22,"integrity":"sha512-G7yMYOdyl6inUoxToksIEOqVlRHdxMmvo4VmxWZWEO+6Ov/qfzmPW+Gv7IJ0M9nFWQ2zO7V/g7obknasOW5unA==","signatures":[{"sig":"MEQCIDnRfDyV7AHSdz1dh8dL/vGoxbMGQZLvTUjf6H3D75P/AiAgeXNuvzdEF9WMbA3RsW+8SLYvNbh/sysj0uAqKqYitQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":25582},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"2a61647a84e2bea5190e4ad759212df05f4bd269","scripts":{"lint":"tsc -p tsconfig.json --noEmit","test":"node --test --import tsx 'src/**/*.test.ts'","build":"tsc -p tsconfig.json","prepack":"pnpm build","typecheck":"tsc -p tsconfig.json --noEmit","prepublishOnly":"node -e \"const v=require('./package.json').dependencies['@atomicmemory/sdk'];if(v.startsWith('file:')||v.startsWith('link:')||v.startsWith('workspace:')){console.error('refusing to publish: @atomicmemory/sdk is '+v+'. Publish the SDK first, then pin to a registry version here.');process.exit(1)}\""},"_npmUser":{"name":"atomicstrata","email":"services@atomicstrata.ai"},"repository":{"url":"git+https://github.com/atomicstrata/atomicmemory-integrations.git","type":"git","directory":"adapters/langchain-js"},"_npmVersion":"11.14.1","description":"AtomicMemory adapter for LangChain JS - memory tools and framework-agnostic retrieve/ingest helpers around an injected MemoryClient.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"@atomicmemory/sdk":"^1.0.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","zod":"^3.23.8","typescript":"^5.6.0","@types/node":"^20.0.0","@langchain/core":"^0.3.0"},"peerDependencies":{"zod":"^3.23.0 || ^4.0.0","@langchain/core":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/langchain_0.1.0_1779007386859_0.10370172814803058","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@atomicmemory/langchain","version":"0.1.1","license":"Apache-2.0","_id":"@atomicmemory/langchain@0.1.1","maintainers":[{"name":"atomicstrata","email":"services@atomicstrata.ai"}],"homepage":"https://github.com/atomicstrata/atomicmemory/tree/main/adapters/langchain#readme","bugs":{"url":"https://github.com/atomicstrata/atomicmemory/issues"},"dist":{"shasum":"d887dd2945894679fab8eb3630afb6ba1b8d2680","tarball":"https://registry.npmjs.org/@atomicmemory/langchain/-/langchain-0.1.1.tgz","fileCount":22,"integrity":"sha512-7RqqIeOsGZJoZw9g4/xKSW2JtbUmfN4u5J7zPFxXUDr1TT5qyo+t1TtTAM3JsJohvjRkpLQMV8fbbuxvqobulA==","signatures":[{"sig":"MEUCIQCMG9gkaJs+qQvz1wvhtrG5jjA59RMGXz5kY0ewetaVbAIgX4aIcNL/pARENlK3RA/lpdd0LXZ3EiJvP2DwLLa7uh8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":25746},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"201677d74fbb3f3cfd5e0dbb5f6904e889dcbb07","scripts":{"lint":"tsc -p tsconfig.json --noEmit","test":"node --test --import tsx 'src/**/*.test.ts'","build":"tsc -p tsconfig.json","prepack":"pnpm build","typecheck":"tsc -p tsconfig.json --noEmit","prepublishOnly":"node -e \"const v=require('./package.json').dependencies['@atomicmemory/sdk'];if(v.startsWith('file:')||v.startsWith('link:')||v.startsWith('workspace:')){console.error('refusing to publish: @atomicmemory/sdk is '+v+'. Publish the SDK first, then pin to a registry version here.');process.exit(1)}\""},"_npmUser":{"name":"atomicstrata","email":"services@atomicstrata.ai"},"repository":{"url":"git+https://github.com/atomicstrata/atomicmemory.git","type":"git","directory":"adapters/langchain"},"_npmVersion":"11.14.1","description":"AtomicMemory adapter for LangChain JS - memory tools and framework-agnostic retrieve/ingest helpers around an injected MemoryClient.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"@atomicmemory/sdk":"^1.0.2"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","zod":"^3.23.8","typescript":"^5.6.0","@types/node":"^20.0.0","@langchain/core":"^0.3.0"},"peerDependencies":{"zod":"^3.23.0 || ^4.0.0","@langchain/core":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/langchain_0.1.1_1779188724165_0.6977375820253462","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@atomicmemory/langchain","version":"0.1.2","description":"AtomicMemory adapter for LangChain JS - memory tools and framework-agnostic retrieve/ingest helpers around an injected MemoryClient.","type":"module","main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"repository":{"type":"git","url":"git+https://github.com/atomicstrata/atomicmemory.git","directory":"adapters/langchain"},"license":"Apache-2.0","engines":{"node":">=20"},"scripts":{"build":"tsc -p tsconfig.json","typecheck":"tsc -p tsconfig.json --noEmit","test":"node --test --import tsx 'src/**/*.test.ts'","lint":"tsc -p tsconfig.json --noEmit","prepack":"pnpm build","prepublishOnly":"node -e \"const v=require('./package.json').dependencies['@atomicmemory/sdk'];if(v.startsWith('file:')||v.startsWith('link:')||v.startsWith('workspace:')){console.error('refusing to publish: @atomicmemory/sdk is '+v+'. Publish the SDK first, then pin to a registry version here.');process.exit(1)}\""},"dependencies":{"@atomicmemory/sdk":"^1.0.2"},"peerDependencies":{"@langchain/core":"^0.3.0","zod":"^3.23.0 || ^4.0.0"},"devDependencies":{"@langchain/core":"^0.3.0","@types/node":"^20.0.0","tsx":"^4.19.0","typescript":"^5.6.0","zod":"^3.23.8"},"bugs":{"url":"https://github.com/atomicstrata/atomicmemory/issues"},"homepage":"https://github.com/atomicstrata/atomicmemory/tree/main/adapters/langchain#readme","gitHead":"65c9fe5b18faaa87b4b5768e7d04309672aeed4f","_id":"@atomicmemory/langchain@0.1.2","_nodeVersion":"25.9.0","_npmVersion":"11.14.1","dist":{"integrity":"sha512-52uIrxjsh7+92zq+XdPlFmrOatjJI2D+yPS/ZVTVnq4exuEfXDUbBLTDYTbkoy1tt0Lcno6WjekTOCyQ4nPx1w==","shasum":"f2d2f63b817bf7f97a9e5b4d392920c08d518d71","tarball":"https://registry.npmjs.org/@atomicmemory/langchain/-/langchain-0.1.2.tgz","fileCount":22,"unpackedSize":25746,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIFFJVSdXL0s2+JrfQL28a4PH9osl17Y6DI1ZAjJYOtttAiEA+ynGgaudEBelsSy29vlGfhPQnwGnoxgnUnjI7ukcm8Y="}]},"_npmUser":{"name":"atomicstrata","email":"services@atomicstrata.ai"},"directories":{},"maintainers":[{"name":"atomicstrata","email":"services@atomicstrata.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/langchain_0.1.2_1779342334353_0.48463414293865403"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-17T08:43:06.759Z","modified":"2026-05-21T05:45:34.615Z","0.1.0":"2026-05-17T08:43:06.999Z","0.1.1":"2026-05-19T11:05:24.306Z","0.1.2":"2026-05-21T05:45:34.489Z"},"bugs":{"url":"https://github.com/atomicstrata/atomicmemory/issues"},"license":"Apache-2.0","homepage":"https://github.com/atomicstrata/atomicmemory/tree/main/adapters/langchain#readme","repository":{"type":"git","url":"git+https://github.com/atomicstrata/atomicmemory.git","directory":"adapters/langchain"},"description":"AtomicMemory adapter for LangChain JS - memory tools and framework-agnostic retrieve/ingest helpers around an injected MemoryClient.","maintainers":[{"name":"atomicstrata","email":"services@atomicstrata.ai"}],"readme":"# @atomicmemory/langchain\n\nAtomicMemory adapter for [LangChain JS](https://js.langchain.com/). Thin wrappers around an injected `MemoryClient` from `@atomicmemory/sdk`.\n\nThe adapter exposes two surfaces:\n\n| Surface | Use when |\n|---|---|\n| Helpers — `searchMemory()` / `ingestTurn()` | You want to call AtomicMemory inside a LangChain callback, an LCEL `RunnableLambda`, or any other code path. Framework-agnostic. |\n| `createMemoryTools()` | You want AtomicMemory as agent-callable tools (`memory_search`, `memory_ingest`) consumable by `createToolCallingAgent`, LangGraph's tool node, or any `@langchain/core/tools`-compatible runner. |\n\nThe adapter does **not** own provider configuration — pass an already-constructed `MemoryClient`.\n\n## Install\n\n```bash\npnpm add @atomicmemory/langchain @atomicmemory/sdk @langchain/core zod\n```\n\n`@langchain/core` and `zod` are declared as peerDependencies so you can pin them at the version your LangChain graph already uses.\n\n## Quick start — agent tools\n\n```ts\nimport { MemoryClient } from '@atomicmemory/sdk';\nimport { createMemoryTools } from '@atomicmemory/langchain';\n\nconst memory = new MemoryClient({\n  providers: { atomicmemory: { apiUrl: process.env.ATOMICMEMORY_URL!, apiKey: process.env.ATOMICMEMORY_KEY! } },\n});\nawait memory.initialize();\n\nconst { searchTool, ingestTool } = createMemoryTools(memory, {\n  scope: { user: 'pip', namespace: 'my-app' },\n  defaultLimit: 5,\n});\n\n// Hand the tools to any LangChain agent runner:\nconst tools = [searchTool, ingestTool /*, ...your other tools */];\n```\n\nScope is fixed at factory time — the agent cannot rebind to other users by passing different arguments.\n\n## Quick start — framework-agnostic helpers\n\n```ts\nimport { searchMemory, ingestTurn } from '@atomicmemory/langchain';\n\nconst { context, results } = await searchMemory(memory, {\n  query: latestUserMessage,\n  scope: { user: 'pip' },\n  limit: 8,\n});\n\nif (context) {\n  // Prepend `context` to your prompt, attach as a system message, etc.\n}\n\n// After the model call:\nawait ingestTurn(memory, {\n  messages: turn.messages,\n  completion: turn.responseText,\n  scope: { user: 'pip' },\n});\n```\n\n### Custom formatter\n\nThe default formatter wraps retrieved memories in a delimited block with an explicit \"reference, not instructions\" header — a mitigation against instruction-shaped content hijacking the model, not a guarantee. Override per call:\n\n```ts\nawait searchMemory(memory, {\n  query,\n  scope,\n  formatter(results) {\n    return `# Prior context\\n\\n${results\n      .map((r) => `- [${r.memory.createdAt.toISOString()}] ${r.memory.content}`)\n      .join('\\n')}`;\n  },\n});\n```\n\n### System-message handling on ingest\n\n`ingestTurn()` excludes `system` messages by default — applications typically use them for hidden instructions and policies that should never become durable memory. Opt in explicitly if your system messages are genuinely user-authored content worth remembering:\n\n```ts\nawait ingestTurn(memory, {\n  messages,\n  completion,\n  scope,\n  includeRoles: ['system', 'user', 'assistant', 'tool'],\n});\n```\n\n## Scope\n\nScope fields follow the SDK's `Scope` type — `user`, `agent`, `namespace`, `thread`. At least one must be provided; the SDK rejects scopeless requests.\n\n## License\n\nApache-2.0.\n","readmeFilename":"README.md"}