{"_id":"@dongkseo/store","_rev":"7-a5f2e3e5a0e86b6d5f0083363610b4bd","name":"@dongkseo/store","dist-tags":{"latest":"0.1.6"},"versions":{"0.1.0":{"name":"@dongkseo/store","version":"0.1.0","_id":"@dongkseo/store@0.1.0","maintainers":[{"name":"dongkseo","email":"ssddgg99@daum.net"}],"dist":{"shasum":"5b3bc97a749daeec3bbf7a47e0f302f631c9ab21","tarball":"https://registry.npmjs.org/@dongkseo/store/-/store-0.1.0.tgz","fileCount":10,"integrity":"sha512-q/FgJnNRoD+jyw0T/G0dNPLjqQ7CDdTg6MGgnQ/M5ZPA06/63+niwKq33jUBIyDALYghHzhLIZ5dhU6G68bf7g==","signatures":[{"sig":"MEUCIBKdVjtfL/AEquylNP3f3xXlNCnObir+g9pIO3HgW904AiEAqFwXRRjhGhSi3O8VB8pk/Ohpgw03DiT0Hhl2fZyZ0t0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8359},"main":"./dist/index.js","type":"module","_from":"file:dongkseo-store-0.1.0.tgz","types":"./dist/index.d.ts","nexora":{"stability":"advanced"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"build":"tsc","clean":"rm -rf dist .tsbuildinfo"},"_npmUser":{"name":"dongkseo","email":"ssddgg99@daum.net"},"_resolved":"/private/var/folders/lw/t8yfg__j2nxd25m53gt8840h0000gn/T/71536c7952bcdc7ed4cb90fa44a691d5/dongkseo-store-0.1.0.tgz","_integrity":"sha512-q/FgJnNRoD+jyw0T/G0dNPLjqQ7CDdTg6MGgnQ/M5ZPA06/63+niwKq33jUBIyDALYghHzhLIZ5dhU6G68bf7g==","_npmVersion":"11.12.1","description":"**Stability: stable**","directories":{},"_nodeVersion":"26.0.0","dependencies":{"@dongkseo/contracts":"0.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.8.0"},"_npmOperationalInternal":{"tmp":"tmp/store_0.1.0_1781668542292_0.02374336238544439","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@dongkseo/store","version":"0.1.1","_id":"@dongkseo/store@0.1.1","maintainers":[{"name":"dongkseo","email":"ssddgg99@daum.net"}],"dist":{"shasum":"e2a9b19303472cfe38ea363347aae615d4098ac5","tarball":"https://registry.npmjs.org/@dongkseo/store/-/store-0.1.1.tgz","fileCount":10,"integrity":"sha512-LU4x3TwbAMEewe1xiIWx5vfgyZJG1gYsHu869rmV6vcn06866Ce5kvy4gW7S41ekMfruLcXa3zHtdsL1vVj4kg==","signatures":[{"sig":"MEUCIBbB2tTs+xGJKtHDu6MxODY0kHSkvR/8HyP4jSOe46+5AiEA9IpBViiuTxcSXAKvT64loLUDXXKtV8uJl0ox4swNgzk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8629},"main":"./dist/index.js","type":"module","_from":"file:dongkseo-store-0.1.1.tgz","types":"./dist/index.d.ts","nexora":{"stability":"advanced"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"build":"tsc","clean":"rm -rf dist .tsbuildinfo"},"_npmUser":{"name":"dongkseo","email":"ssddgg99@daum.net"},"_resolved":"/private/var/folders/f6/dfc3mm717vx9xjh0vbgqnddr0000gn/T/172f3058c245cdf896bfb879f73b0f6b/dongkseo-store-0.1.1.tgz","_integrity":"sha512-LU4x3TwbAMEewe1xiIWx5vfgyZJG1gYsHu869rmV6vcn06866Ce5kvy4gW7S41ekMfruLcXa3zHtdsL1vVj4kg==","_npmVersion":"11.12.1","description":"**Stability: stable**","directories":{},"_nodeVersion":"26.0.0","dependencies":{"@dongkseo/contracts":"0.1.6"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.8.0"},"_npmOperationalInternal":{"tmp":"tmp/store_0.1.1_1782111935261_0.15170447828755074","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@dongkseo/store","version":"0.1.2","_id":"@dongkseo/store@0.1.2","maintainers":[{"name":"dongkseo","email":"ssddgg99@daum.net"}],"dist":{"shasum":"083b42624eb74dd54377293b8812f1b89d677712","tarball":"https://registry.npmjs.org/@dongkseo/store/-/store-0.1.2.tgz","fileCount":10,"integrity":"sha512-xtBOEA2kO2umBIblNuQFtSCFW/ZoBYIzzCo39/wCX9lAzCP8oSE55pCrMBAmXwb25jH38FUGd1WyL37U/h26ZA==","signatures":[{"sig":"MEUCIQD+56T2zaLy0rZvKpRD3vMDq5243rlo8rjk1hloJr77bwIgDy6QEoiS/UelWyr3A+b+4XatU13+d3NTq4WnSyT9Blg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8630},"main":"./dist/index.js","type":"module","_from":"file:dongkseo-store-0.1.2.tgz","types":"./dist/index.d.ts","nexora":{"stability":"advanced"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"build":"tsc","clean":"rm -rf dist .tsbuildinfo"},"_npmUser":{"name":"dongkseo","email":"ssddgg99@daum.net"},"_resolved":"/private/var/folders/f6/dfc3mm717vx9xjh0vbgqnddr0000gn/T/27d0a2e063684a3d8d971d5b58acb004/dongkseo-store-0.1.2.tgz","_integrity":"sha512-xtBOEA2kO2umBIblNuQFtSCFW/ZoBYIzzCo39/wCX9lAzCP8oSE55pCrMBAmXwb25jH38FUGd1WyL37U/h26ZA==","_npmVersion":"11.12.1","description":"**Stability: stable**","directories":{},"_nodeVersion":"26.0.0","dependencies":{"@dongkseo/contracts":"^0.1.8"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.8.0"},"_npmOperationalInternal":{"tmp":"tmp/store_0.1.2_1782200182668_0.8369031649796579","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@dongkseo/store","version":"0.1.3","_id":"@dongkseo/store@0.1.3","maintainers":[{"name":"dongkseo","email":"ssddgg99@daum.net"}],"dist":{"shasum":"5bb5b1d2e7927145e1110a5c0dc9f43a2e6060c1","tarball":"https://registry.npmjs.org/@dongkseo/store/-/store-0.1.3.tgz","fileCount":10,"integrity":"sha512-23kFDC6hv/+xg0LN4na+rorSxEbhyC4VV71J5wPYfVpLHYYMQ1OtH7lWTefoceAtrwM7XH5YoqE5+0B2wSnh7g==","signatures":[{"sig":"MEUCIArmF7mPgEOcPb8TDTiKwQiQHEbHH9MJHhJzgjar9YsSAiEAzpKImERrQaT5MdJnmZdbopz+5prdZgXXBLlHAzwkn1c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":13360},"main":"./dist/index.js","type":"module","_from":"file:dongkseo-store-0.1.3.tgz","types":"./dist/index.d.ts","nexora":{"stability":"advanced"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"build":"tsc","clean":"rm -rf dist .tsbuildinfo"},"_npmUser":{"name":"dongkseo","email":"ssddgg99@daum.net"},"_resolved":"/private/var/folders/lw/t8yfg__j2nxd25m53gt8840h0000gn/T/9a06795cde81babe6b5466d732b2f250/dongkseo-store-0.1.3.tgz","_integrity":"sha512-23kFDC6hv/+xg0LN4na+rorSxEbhyC4VV71J5wPYfVpLHYYMQ1OtH7lWTefoceAtrwM7XH5YoqE5+0B2wSnh7g==","_npmVersion":"11.12.1","description":"**Stability: advanced** · `pnpm add @dongkseo/store`","directories":{},"_nodeVersion":"26.0.0","dependencies":{"@dongkseo/contracts":"^0.1.10"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.8.0"},"_npmOperationalInternal":{"tmp":"tmp/store_0.1.3_1782319772815_0.4655761133938643","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@dongkseo/store","version":"0.1.4","_id":"@dongkseo/store@0.1.4","maintainers":[{"name":"dongkseo","email":"ssddgg99@daum.net"}],"dist":{"shasum":"c9a6cb4c18f75cccb45114e6fce57941911e1af1","tarball":"https://registry.npmjs.org/@dongkseo/store/-/store-0.1.4.tgz","fileCount":10,"integrity":"sha512-IbA0B6qnhgjuuTwuVH76v+FQbNQe1A18L/SS6bJUiGeVlZOF0lTh0RcfcDJx+GIAfBoX/coBpXzLtDBWn70+3A==","signatures":[{"sig":"MEYCIQDGvcEab1vYDwlTDHbrXf8R7y0V96izF2RHPwPdlp5t7wIhAKzULQM86NZ8J77SwjLYlG7se45e/mQK6r1rlxb4zAGt","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":13572},"main":"./dist/index.js","type":"module","_from":"file:dongkseo-store-0.1.4.tgz","types":"./dist/index.d.ts","nexora":{"stability":"advanced"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"build":"tsc","clean":"rm -rf dist .tsbuildinfo"},"_npmUser":{"name":"dongkseo","email":"ssddgg99@daum.net"},"_resolved":"/private/var/folders/lw/t8yfg__j2nxd25m53gt8840h0000gn/T/608a65f3800def3cddb40160682f2dbd/dongkseo-store-0.1.4.tgz","_integrity":"sha512-IbA0B6qnhgjuuTwuVH76v+FQbNQe1A18L/SS6bJUiGeVlZOF0lTh0RcfcDJx+GIAfBoX/coBpXzLtDBWn70+3A==","_npmVersion":"11.16.0","description":"**Stability: advanced** · `pnpm add @dongkseo/store`","directories":{},"_nodeVersion":"26.3.1","dependencies":{"@dongkseo/contracts":"^0.1.11"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.8.0"},"_npmOperationalInternal":{"tmp":"tmp/store_0.1.4_1782389350999_0.35925758137360053","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@dongkseo/store","version":"0.1.5","_id":"@dongkseo/store@0.1.5","maintainers":[{"name":"dongkseo","email":"ssddgg99@daum.net"}],"dist":{"shasum":"4d8e4d9e6e545971f385925ff692e1d8c0f72d80","tarball":"https://registry.npmjs.org/@dongkseo/store/-/store-0.1.5.tgz","fileCount":10,"integrity":"sha512-73x8ZEcll1j1fDSzb/YJEDVGmS2J1xz+ZePR0x31FqGqi4fwxjg3eWtF4LtNdyMf4N0ulcuVMVOjcufDRA9r+w==","signatures":[{"sig":"MEUCIQCiQsklG1ktVTchukWMpfnvsuVa+mwb1t6vHbqNt3kmUgIgccvMMS7ICSEf/h0tnnJML/LIqAC7re8UHtSLLqPQclk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":13947},"main":"./dist/index.js","type":"module","_from":"file:dongkseo-store-0.1.5.tgz","types":"./dist/index.d.ts","nexora":{"stability":"advanced"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"build":"tsc","clean":"rm -rf dist .tsbuildinfo"},"_npmUser":{"name":"dongkseo","email":"ssddgg99@daum.net"},"_resolved":"/private/var/folders/lw/t8yfg__j2nxd25m53gt8840h0000gn/T/647ad49fc474488d07057eae77e3e109/dongkseo-store-0.1.5.tgz","_integrity":"sha512-73x8ZEcll1j1fDSzb/YJEDVGmS2J1xz+ZePR0x31FqGqi4fwxjg3eWtF4LtNdyMf4N0ulcuVMVOjcufDRA9r+w==","_npmVersion":"11.16.0","description":"**Stability: advanced** · `pnpm add @dongkseo/store`","directories":{},"_nodeVersion":"26.3.1","dependencies":{"@dongkseo/contracts":"^0.1.12"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.8.0"},"_npmOperationalInternal":{"tmp":"tmp/store_0.1.5_1782395401743_0.1715573963455419","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"@dongkseo/store","version":"0.1.6","type":"module","main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"dependencies":{"@dongkseo/contracts":"^0.1.32"},"devDependencies":{"@types/node":"^26.1.2","typescript":"^7.0.2"},"nexora":{"stability":"advanced"},"publishConfig":{"access":"public"},"scripts":{"build":"tsc","clean":"rm -rf dist .tsbuildinfo"},"_nodeVersion":"26.7.0","_id":"@dongkseo/store@0.1.6","dist":{"integrity":"sha512-smFLCCl/dcQAXYUIK+vzGbHRepC+jFeL/lMmSfrlGQeXaGYlPVxr3OCsDFRExbFuJKliOP4LXJq5atdmzWPEFg==","shasum":"87a785ca746cc0e8fe4cd983043663294626d075","tarball":"https://registry.npmjs.org/@dongkseo/store/-/store-0.1.6.tgz","fileCount":10,"unpackedSize":14749,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDBI2AcNZ7w4fEcmeAgE824CpZsaIZUnt+/qbuIv0XHbQIgalV/vyCxixToAIv57QuM/IkOe41BHaNzwCkqdRXll80="}]},"_npmUser":{"name":"dongkseo","email":"ssddgg99@daum.net"},"directories":{},"maintainers":[{"name":"dongkseo","email":"ssddgg99@daum.net"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/store_0.1.6_1786622524323_0.8933707483551658"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-17T03:55:42.172Z","modified":"2026-08-13T12:02:04.577Z","0.1.0":"2026-06-17T03:55:42.427Z","0.1.1":"2026-06-22T07:05:35.496Z","0.1.2":"2026-06-23T07:36:22.823Z","0.1.3":"2026-06-24T16:49:32.966Z","0.1.4":"2026-06-25T12:09:11.121Z","0.1.5":"2026-06-25T13:50:01.911Z","0.1.6":"2026-08-13T12:02:04.457Z"},"maintainers":[{"name":"dongkseo","email":"ssddgg99@daum.net"}],"readme":"# @dongkseo/store\n\n**Stability: advanced** · `pnpm add @dongkseo/store`\n\n> 이 파일은 에이전트(사람·LLM)가 **소스를 열지 않고도** 이 패키지를 쓸 수 있게 하는 오리엔테이션 문서다.\n> 정확한 API 타입은 \"API 표면\" 섹션의 방법으로 `signatures`만 읽어라 — 본문을 베끼지 말 것.\n\n## 무엇인가 / 무엇이 아닌가\n\nNexora의 **영속화(store) 진입점** 패키지다. `contracts`가 정의한 store 인터페이스를 편의상 re-export하고,\n설정 한 줄로 **올바른 백엔드 구현체를 묶어주는 팩토리**(`createStoreProvider`)를 제공한다.\n실제 저장 로직은 이 패키지가 아니라 구현 패키지들이 가진다.\n\n- ✅ 담는 것: store 인터페이스 re-export, 설정→구현 연결 팩토리(`createStoreProvider`), dev 백엔드 경고(`warnDevStores`)\n- ❌ 안 담는 것: 실제 DB/파일 I/O, 스키마, 쿼리 — 그건 구현 패키지 몫\n  - `@dongkseo/store-json` — 파일(JSON) 백엔드. `createStoreProvider({ type: 'json' })`가 동적 import\n  - `@dongkseo/store-pg` — PostgreSQL 백엔드. `createStoreProvider({ type: 'pg' })`가 동적 import\n  - `@dongkseo/store-memory` — 인메모리(메모리 그래프/임베딩) 백엔드. 팩토리 외부에서 직접 사용\n\n의존 방향은 **소비자 → store → contracts**. 구현 패키지는 **런타임 동적 import**로만 연결되므로\n이 패키지가 `store-json`/`store-pg`에 정적 의존하지 않는다(쓰는 백엔드만 설치하면 됨).\n\n## 핵심 개념\n\n| 개념 | 무엇 | 대표 export |\n| --- | --- | --- |\n| **StoreProvider** | 한 테넌트가 쓰는 모든 store를 묶은 번들(conversation·knowledge·schedule·ctx·audit·toolContext·suspendedTurn, 옵션 sessionTree) | `StoreProvider` |\n| **StoreConfig** | 백엔드 선택 설정. `{ type: 'json'; dataDir }` 또는 `{ type: 'pg'; connectionString }` | `StoreConfig` |\n| **팩토리** | 설정을 받아 구현 패키지를 동적 import하고 `StoreProvider`를 조립 | `createStoreProvider` |\n| **dev 경고** | 비영속/단일프로세스 등 prod 부적합 백엔드를 부팅 시 로그로 경고 | `warnDevStores` |\n| **store 인터페이스** | contracts에서 정의한 각 store 계약을 그대로 re-export | `ConversationStore`, `KnowledgeStore`, `ScheduleStore`, `ContextStore`, `AuditStore`, `ToolContextStore`, `SuspendedTurnStore` |\n\n## 사용 레시피\n\n설정 한 줄로 store 번들을 만든다 (`createStoreProvider`는 백엔드 패키지를 **동적 import**하므로 `await` 필요):\n\n```ts\nimport { createStoreProvider, warnDevStores } from '@dongkseo/store';\nimport type { StoreConfig } from '@dongkseo/store';\n\n// 개발: 파일(JSON) 백엔드 — @dongkseo/store-json 설치 필요\nconst config: StoreConfig = { type: 'json', dataDir: './.data' };\n\n// 운영: PostgreSQL 백엔드 — @dongkseo/store-pg 설치 필요\n// const config: StoreConfig = { type: 'pg', connectionString: process.env.DATABASE_URL! };\n\nconst stores = await createStoreProvider(config);\n\n// 부팅 시 dev 전용 백엔드 경고 (logger는 AgentLogger)\nwarnDevStores(stores, logger);\n\n// 이후 개별 store 사용\nawait stores.conversation.append(/* ... */);\nawait stores.knowledge.upsert(/* ... */);\n```\n\n정확한 store 메서드 시그니처는 아래 \"API 표면\"에서 `contracts/src/store.ts`를 `signatures` 모드로 읽어라.\n\n## API 표면 (소스 안 열고 타입만)\n\n`index.ts`는 store 인터페이스 re-export + 팩토리 두 줄로 구성되며 파일 맨 위에 **섹션 맵 주석**이 있다.\n정확한 시그니처가 필요하면 구현 본문 대신 **signatures 모드**로만 읽어라:\n\n```\nctx_read(path=\"packages/store/src/index.ts\",            mode=\"map\")          # 전체 export 목록\nctx_read(path=\"packages/store/src/factory.ts\",          mode=\"signatures\")   # createStoreProvider / StoreProvider / StoreConfig\nctx_read(path=\"packages/contracts/src/store.ts\",        mode=\"signatures\")   # 각 store 인터페이스 메서드\n```\n\n어떤 export가 어디서 오는지는 `src/index.ts` 상단 주석 맵을 먼저 보면 된다.\n\n## 유지보수 (drift 방지)\n\n- 이 README = **목적·개념·레시피** 만. 거의 안 변하므로 손으로 관리.\n- **API 정본은 각 소스의 TSDoc** (`/** … */`). API가 바뀌면 코드 옆 TSDoc만 고치면 됨 — 여기 표는 복제하지 말 것.\n- 새 백엔드/export가 생기면 `factory.ts`의 `StoreConfig`와 `index.ts` 상단 섹션 맵에 한 줄만 추가.\n\n## Tests\n\n```bash\ncd packages/store && pnpm test\n```\n\nPart of the [Nexora](../../README.md) multi-tenant agent framework. · [Package map](../../docs/architecture/packages-map.md)\n","readmeFilename":""}