{"_id":"@dongkseo/store-pg","_rev":"9-b95b0268dd4b4cd91e6249d64cd62470","name":"@dongkseo/store-pg","dist-tags":{"latest":"0.1.8"},"versions":{"0.1.0":{"name":"@dongkseo/store-pg","version":"0.1.0","_id":"@dongkseo/store-pg@0.1.0","maintainers":[{"name":"dongkseo","email":"ssddgg99@daum.net"}],"dist":{"shasum":"20f17dd3c77e73a3dd1861e243cacc09a7da62ce","tarball":"https://registry.npmjs.org/@dongkseo/store-pg/-/store-pg-0.1.0.tgz","fileCount":53,"integrity":"sha512-S+D6Po12Mi8QvmcPOZh/y/lM21nLrj7F9gPzOwYSOHFaAKsIkIPXOcpbxiPIos6H/tIE4XQgTXhbUOB36NtaRA==","signatures":[{"sig":"MEUCIQCZyP1KLF+WKCDQKvntZzlEq6jZrCrXXxXh8Blt/6A8JgIgUhpKYQz03hCM2Q7YMsH4YcoV1Qw7ppCT/IkgqJRTU38=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":64945},"main":"./dist/index.js","type":"module","_from":"file:dongkseo-store-pg-0.1.0.tgz","types":"./dist/index.d.ts","nexora":{"stability":"experimental"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"test":"echo 'store-pg: integration tests require PostgreSQL — run with: DATABASE_URL=... vitest run'","build":"tsc","clean":"rm -rf dist .tsbuildinfo","test:integration":"vitest run"},"_npmUser":{"name":"dongkseo","email":"ssddgg99@daum.net"},"_resolved":"/private/var/folders/lw/t8yfg__j2nxd25m53gt8840h0000gn/T/0bc1c430f483cd0c5d51ccc41b251927/dongkseo-store-pg-0.1.0.tgz","_integrity":"sha512-S+D6Po12Mi8QvmcPOZh/y/lM21nLrj7F9gPzOwYSOHFaAKsIkIPXOcpbxiPIos6H/tIE4XQgTXhbUOB36NtaRA==","_npmVersion":"11.12.1","directories":{},"_nodeVersion":"26.0.0","dependencies":{"postgres":"^3.4.0","@dongkseo/contracts":"0.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.8.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/store-pg_0.1.0_1781668547257_0.252976357518377","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@dongkseo/store-pg","version":"0.1.1","_id":"@dongkseo/store-pg@0.1.1","maintainers":[{"name":"dongkseo","email":"ssddgg99@daum.net"}],"dist":{"shasum":"0b095bcbc5e98ac2eb5b2ca0d9a29565089aac9b","tarball":"https://registry.npmjs.org/@dongkseo/store-pg/-/store-pg-0.1.1.tgz","fileCount":53,"integrity":"sha512-DFgPVzi8uZ2I7djntAzg9c1P4ZYceQsOXYGKm03qHK+RCmMbCYFs+QPgPkF1SV0iL5/XTP5TXDKm3E0FOQ4VEg==","signatures":[{"sig":"MEUCIBqmtD/nLTVakd1x514rkdPxdLfAN+/hAXaxMd3JuUhvAiEAoGvhQv70qJrKI5fU7QH0FZOKbfL6tISsJlziJsmCqmU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":64945},"main":"./dist/index.js","type":"module","_from":"file:dongkseo-store-pg-0.1.1.tgz","types":"./dist/index.d.ts","nexora":{"stability":"experimental"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"test":"echo 'store-pg: integration tests require PostgreSQL — run with: DATABASE_URL=... vitest run'","build":"tsc","clean":"rm -rf dist .tsbuildinfo","test:integration":"vitest run"},"_npmUser":{"name":"dongkseo","email":"ssddgg99@daum.net"},"_resolved":"/private/var/folders/f6/dfc3mm717vx9xjh0vbgqnddr0000gn/T/3e33da48638e4b584647cb1b6bd040de/dongkseo-store-pg-0.1.1.tgz","_integrity":"sha512-DFgPVzi8uZ2I7djntAzg9c1P4ZYceQsOXYGKm03qHK+RCmMbCYFs+QPgPkF1SV0iL5/XTP5TXDKm3E0FOQ4VEg==","_npmVersion":"11.12.1","directories":{},"_nodeVersion":"26.0.0","dependencies":{"postgres":"^3.4.0","@dongkseo/contracts":"0.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.8.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/store-pg_0.1.1_1781693219073_0.18484513531035018","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@dongkseo/store-pg","version":"0.1.2","_id":"@dongkseo/store-pg@0.1.2","maintainers":[{"name":"dongkseo","email":"ssddgg99@daum.net"}],"dist":{"shasum":"8328256b2d4af8fd38d4b7d5305bf834ca14eeb4","tarball":"https://registry.npmjs.org/@dongkseo/store-pg/-/store-pg-0.1.2.tgz","fileCount":57,"integrity":"sha512-dZS+rMQ0IRs4dDMyX78TZAFjxahKqEvZ4blYqLUoVCmGCbfSLsl+lXeP4eFycobzhFr1CFvzg/QchkZJ+B8vXg==","signatures":[{"sig":"MEUCID84XfJELbYmGlRMCE3IHIb0qSATfP35KJeotuPcd9y4AiEAlp0fyq+uA4CswIojeueeEA3SQiYAu72TTt7P8/HGYJA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":69259},"main":"./dist/index.js","type":"module","_from":"file:dongkseo-store-pg-0.1.2.tgz","types":"./dist/index.d.ts","nexora":{"stability":"experimental"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"test":"echo 'store-pg: integration tests require PostgreSQL — run with: DATABASE_URL=... vitest run'","build":"tsc","clean":"rm -rf dist .tsbuildinfo","test:integration":"vitest run"},"_npmUser":{"name":"dongkseo","email":"ssddgg99@daum.net"},"_resolved":"/private/var/folders/f6/dfc3mm717vx9xjh0vbgqnddr0000gn/T/d900cd3f3dc368fe7457a25b25109cb4/dongkseo-store-pg-0.1.2.tgz","_integrity":"sha512-dZS+rMQ0IRs4dDMyX78TZAFjxahKqEvZ4blYqLUoVCmGCbfSLsl+lXeP4eFycobzhFr1CFvzg/QchkZJ+B8vXg==","_npmVersion":"11.12.1","directories":{},"_nodeVersion":"26.0.0","dependencies":{"postgres":"^3.4.0","@dongkseo/contracts":"0.1.6"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.8.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/store-pg_0.1.2_1782111938445_0.08766131266195143","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@dongkseo/store-pg","version":"0.1.3","_id":"@dongkseo/store-pg@0.1.3","maintainers":[{"name":"dongkseo","email":"ssddgg99@daum.net"}],"dist":{"shasum":"0460523b365b15badb89e5f7a16fdae9e3d39275","tarball":"https://registry.npmjs.org/@dongkseo/store-pg/-/store-pg-0.1.3.tgz","fileCount":57,"integrity":"sha512-U09h+sVF0p4CHl0IKO8a6gABmk2lKRll0raKgkAtfnPqs3pdcmZK+M9YR+1w1FjOFqCOgZWQgzpOIHRzO9Q7WQ==","signatures":[{"sig":"MEUCIQDtzBuTVunjIc63YOk7gXUJ/Vr7CDYkwkOkkkPb4CHAygIgEbVvXZcGGYxDiosc5uYjS3l6sG7+UlGDZdyruJ1ntQ4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":69260},"main":"./dist/index.js","type":"module","_from":"file:dongkseo-store-pg-0.1.3.tgz","types":"./dist/index.d.ts","nexora":{"stability":"experimental"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"test":"echo 'store-pg: integration tests require PostgreSQL — run with: DATABASE_URL=... vitest run'","build":"tsc","clean":"rm -rf dist .tsbuildinfo","test:integration":"vitest run"},"_npmUser":{"name":"dongkseo","email":"ssddgg99@daum.net"},"_resolved":"/private/var/folders/f6/dfc3mm717vx9xjh0vbgqnddr0000gn/T/899df31e2c1bde071765603ec3803600/dongkseo-store-pg-0.1.3.tgz","_integrity":"sha512-U09h+sVF0p4CHl0IKO8a6gABmk2lKRll0raKgkAtfnPqs3pdcmZK+M9YR+1w1FjOFqCOgZWQgzpOIHRzO9Q7WQ==","_npmVersion":"11.12.1","directories":{},"_nodeVersion":"26.0.0","dependencies":{"postgres":"^3.4.0","@dongkseo/contracts":"^0.1.8"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.8.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/store-pg_0.1.3_1782200187616_0.9909459302205883","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@dongkseo/store-pg","version":"0.1.4","_id":"@dongkseo/store-pg@0.1.4","maintainers":[{"name":"dongkseo","email":"ssddgg99@daum.net"}],"dist":{"shasum":"57bac644029a10c83fd2dfbb3bdc02a48eb09000","tarball":"https://registry.npmjs.org/@dongkseo/store-pg/-/store-pg-0.1.4.tgz","fileCount":62,"integrity":"sha512-1w7W7JyTrjrSxDr+P+d1ChVX7OfVcVch1uEXIZHPRDV8h1CIxdQ4dNzM61oC2AaFHqBtAYHkzPK34ixQ7pg45Q==","signatures":[{"sig":"MEUCIAOqea2p3Sn1BSGLR0qIhd0tDWRAMq0WxN5A4Sci3JqMAiEAjgnDDhcQDEiZ+MspvfXbygXlR90t4+NB2rWKNAYnZKc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":83797},"main":"./dist/index.js","type":"module","_from":"file:dongkseo-store-pg-0.1.4.tgz","types":"./dist/index.d.ts","nexora":{"stability":"experimental"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"test":"echo 'store-pg: integration tests require PostgreSQL — run with: DATABASE_URL=... vitest run'","build":"tsc","clean":"rm -rf dist .tsbuildinfo","test:integration":"vitest run"},"_npmUser":{"name":"dongkseo","email":"ssddgg99@daum.net"},"_resolved":"/private/var/folders/lw/t8yfg__j2nxd25m53gt8840h0000gn/T/d323910809c747bc54277cafc190f015/dongkseo-store-pg-0.1.4.tgz","_integrity":"sha512-1w7W7JyTrjrSxDr+P+d1ChVX7OfVcVch1uEXIZHPRDV8h1CIxdQ4dNzM61oC2AaFHqBtAYHkzPK34ixQ7pg45Q==","_npmVersion":"11.12.1","description":"**Stability: experimental** · `pnpm add @dongkseo/store-pg`","directories":{},"_nodeVersion":"26.0.0","dependencies":{"postgres":"^3.4.0","@dongkseo/contracts":"^0.1.10"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.8.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/store-pg_0.1.4_1782319775735_0.358089640755459","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@dongkseo/store-pg","version":"0.1.5","_id":"@dongkseo/store-pg@0.1.5","maintainers":[{"name":"dongkseo","email":"ssddgg99@daum.net"}],"dist":{"shasum":"dbdfdc11baad67fae19a451a4f353eaf03b02015","tarball":"https://registry.npmjs.org/@dongkseo/store-pg/-/store-pg-0.1.5.tgz","fileCount":66,"integrity":"sha512-MBesCpUQkFG9eP4CQaal6SmJHo1EjzVT82M2TqJA0x+4MdHPBDvVc5yjCf6aY2P36i0IwKKFpHwkxn+N+geFjw==","signatures":[{"sig":"MEQCIDU6rHbJbKkNVZLwlPwo0hse0P4s7fpjaVKcggaSKcX9AiBJBv8q5A6EOY9n3MxWKJeP356Z44maHBNEerGo3vccrQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":87942},"main":"./dist/index.js","type":"module","_from":"file:dongkseo-store-pg-0.1.5.tgz","types":"./dist/index.d.ts","nexora":{"stability":"experimental"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"test":"echo 'store-pg: integration tests require PostgreSQL — run with: DATABASE_URL=... vitest run'","build":"tsc","clean":"rm -rf dist .tsbuildinfo","test:integration":"vitest run"},"_npmUser":{"name":"dongkseo","email":"ssddgg99@daum.net"},"_resolved":"/private/var/folders/lw/t8yfg__j2nxd25m53gt8840h0000gn/T/7ca3d6394cf56ae89e9715d9ba3819c1/dongkseo-store-pg-0.1.5.tgz","_integrity":"sha512-MBesCpUQkFG9eP4CQaal6SmJHo1EjzVT82M2TqJA0x+4MdHPBDvVc5yjCf6aY2P36i0IwKKFpHwkxn+N+geFjw==","_npmVersion":"11.16.0","description":"**Stability: experimental** · `pnpm add @dongkseo/store-pg`","directories":{},"_nodeVersion":"26.3.1","dependencies":{"postgres":"^3.4.0","@dongkseo/contracts":"^0.1.12"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.8.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/store-pg_0.1.5_1782395404972_0.26994733890453015","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"@dongkseo/store-pg","version":"0.1.6","_id":"@dongkseo/store-pg@0.1.6","maintainers":[{"name":"dongkseo","email":"ssddgg99@daum.net"}],"dist":{"shasum":"fce72d8b8352d00c25de0568efc0b65aebd30a08","tarball":"https://registry.npmjs.org/@dongkseo/store-pg/-/store-pg-0.1.6.tgz","fileCount":66,"integrity":"sha512-CxfWIHg+2ZEbMJuVZiEaWoYpopD1jeqbSYLGx6iRTP4ON1kX3X8zZJNpSwWiSiD4XEQHzf50E9/s/iwILBd/lg==","signatures":[{"sig":"MEUCIQCkaklSNkCd6ipT9s/p2JhMWDuV6rvhaG6bZvoNhVxpnAIgLAimmzvXP3sOsYy37Zat4tSfq518xhcp8fQLgtmKEdg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":87994},"main":"./dist/index.js","type":"module","_from":"file:dongkseo-store-pg-0.1.6.tgz","types":"./dist/index.d.ts","nexora":{"stability":"experimental"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"test":"echo 'store-pg: integration tests require PostgreSQL — run with: DATABASE_URL=... vitest run'","build":"tsc","clean":"rm -rf dist .tsbuildinfo","test:integration":"vitest run"},"_npmUser":{"name":"dongkseo","email":"ssddgg99@daum.net"},"_resolved":"/private/var/folders/f6/dfc3mm717vx9xjh0vbgqnddr0000gn/T/51d0fc173b6970313b62e0e967ba575f/dongkseo-store-pg-0.1.6.tgz","_integrity":"sha512-CxfWIHg+2ZEbMJuVZiEaWoYpopD1jeqbSYLGx6iRTP4ON1kX3X8zZJNpSwWiSiD4XEQHzf50E9/s/iwILBd/lg==","_npmVersion":"11.16.0","description":"**Stability: experimental** · `pnpm add @dongkseo/store-pg`","directories":{},"_nodeVersion":"26.3.1","dependencies":{"postgres":"^3.4.0","@dongkseo/contracts":"^0.1.25"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^6.0.3","@types/node":"^26.0.1"},"_npmOperationalInternal":{"tmp":"tmp/store-pg_0.1.6_1783067403600_0.3673632482680975","host":"s3://npm-registry-packages-npm-production"}},"0.1.7":{"name":"@dongkseo/store-pg","version":"0.1.7","_id":"@dongkseo/store-pg@0.1.7","maintainers":[{"name":"dongkseo","email":"ssddgg99@daum.net"}],"dist":{"shasum":"874b5e311514d34d993aca528224c9128f9d78ea","tarball":"https://registry.npmjs.org/@dongkseo/store-pg/-/store-pg-0.1.7.tgz","fileCount":66,"integrity":"sha512-nG5AXcDpxQ4Wr8o6TDiOzpzvUjFO+O0g3ohrIEwepcCE5PqOSwhtkk36ypxw4bRlMyYksDSCpSqbUsTIOU3WXw==","signatures":[{"sig":"MEUCIQDTk5M+mkdjVNt4i4lRA8M7JOwxBLW4jHM/0VLZHeRw8gIgfoq4jZrRNuioD9AOHC+myJ3BRnM/4vCFJ5rbKKXJ8jw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":89264},"main":"./dist/index.js","type":"module","_from":"file:dongkseo-store-pg-0.1.7.tgz","types":"./dist/index.d.ts","nexora":{"stability":"experimental"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"test":"echo 'store-pg: integration tests require PostgreSQL — run with: DATABASE_URL=... vitest run'","build":"tsc","clean":"rm -rf dist .tsbuildinfo","test:integration":"vitest run"},"_npmUser":{"name":"dongkseo","email":"ssddgg99@daum.net"},"_resolved":"/private/var/folders/f6/dfc3mm717vx9xjh0vbgqnddr0000gn/T/5a0de03e0d806393aa9c7b1f6ab43146/dongkseo-store-pg-0.1.7.tgz","_integrity":"sha512-nG5AXcDpxQ4Wr8o6TDiOzpzvUjFO+O0g3ohrIEwepcCE5PqOSwhtkk36ypxw4bRlMyYksDSCpSqbUsTIOU3WXw==","_npmVersion":"11.17.0","description":"**Stability: experimental** · `pnpm add @dongkseo/store-pg`","directories":{},"_nodeVersion":"26.4.0","dependencies":{"postgres":"^3.4.0","@dongkseo/contracts":"^0.1.31"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^6.0.3","@types/node":"^26.0.1"},"_npmOperationalInternal":{"tmp":"tmp/store-pg_0.1.7_1785308100646_0.08023825150564479","host":"s3://npm-registry-packages-npm-production"}},"0.1.8":{"name":"@dongkseo/store-pg","version":"0.1.8","type":"module","main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"dependencies":{"postgres":"^3.4.9","@dongkseo/contracts":"^0.1.32"},"devDependencies":{"@types/node":"^26.1.2","typescript":"^7.0.2"},"nexora":{"stability":"experimental"},"publishConfig":{"access":"public"},"scripts":{"build":"tsc","test":"echo 'store-pg: integration tests require PostgreSQL — run with: DATABASE_URL=... vitest run'","test:integration":"vitest run","clean":"rm -rf dist .tsbuildinfo"},"_nodeVersion":"26.7.0","_id":"@dongkseo/store-pg@0.1.8","dist":{"integrity":"sha512-QA5XkQNSxXxmJDLWp98a5dqYV5iGBk7fjH3zbeq/lgp6/+8fj7UlBN4SVneZO0NPFTC6mFWjvzqmWRse5M+RVg==","shasum":"78a265a8ef4653782b0288f95c0ce93f13915e4d","tarball":"https://registry.npmjs.org/@dongkseo/store-pg/-/store-pg-0.1.8.tgz","fileCount":70,"unpackedSize":105681,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCcG18ywamfsFCy5i29hqCqNdvJRbM6UsHsGslPfQBCXgIgOrpsJlPJXlsjqduGz9HEsOYmLF9A1UdtJNi86B6G1+A="}]},"_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-pg_0.1.8_1786622528694_0.7813899723000453"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-17T03:55:47.067Z","modified":"2026-08-13T12:02:09.270Z","0.1.0":"2026-06-17T03:55:47.402Z","0.1.1":"2026-06-17T10:46:59.226Z","0.1.2":"2026-06-22T07:05:38.594Z","0.1.3":"2026-06-23T07:36:27.765Z","0.1.4":"2026-06-24T16:49:35.862Z","0.1.5":"2026-06-25T13:50:05.130Z","0.1.6":"2026-07-03T08:30:03.736Z","0.1.7":"2026-07-29T06:55:00.800Z","0.1.8":"2026-08-13T12:02:08.837Z"},"maintainers":[{"name":"dongkseo","email":"ssddgg99@daum.net"}],"readme":"# @dongkseo/store-pg\n\n**Stability: experimental** · `pnpm add @dongkseo/store-pg`\n\n> 이 파일은 에이전트(사람·LLM)가 **소스를 열지 않고도** 이 패키지를 쓸 수 있게 하는 오리엔테이션 문서다.\n> 정확한 API 타입은 \"API 표면\" 섹션의 방법으로 `signatures`만 읽어라 — 본문을 베끼지 말 것.\n\n## 무엇인가 / 무엇이 아닌가\n\n`@dongkseo/contracts`가 정의한 **Store 백엔드 계약의 PostgreSQL 구현체**다. `ConversationStore`,\n`KnowledgeStore`, `AuditStore`, `ScheduleStore`, `ContextStore`, `ToolContextStore`,\n`SuspendedTurnStore`, 세션 트리(분기 대화)를 Postgres 위에 영속화하고, Redis 기반 분산\n레이트리미터·버짓 트래커도 함께 제공한다. `store-json`(JSON 파일) 대비 **재시작에도 살아남고,\n멀티프로세스 동시 접근에 안전하며, Redis로 공유 상태를 분산**한다.\n\n- ✅ 담는 것: 계약 인터페이스의 PG 구현 클래스(`ConversationStorePg` …), 한 번에 전부 생성하는 `createPgStoreProvider`, 커넥션 헬퍼 `createPgClient`, Redis 분산 유틸\n- ❌ 안 담는 것: Store **인터페이스 정의**(그건 `contracts` 몫), 오케스트레이션/LLM 호출, 개발용 인메모리/파일 구현(`store-memory`/`store-json`)\n- 의존 방향은 **store-pg → contracts** 단방향. 계약을 구현할 뿐 계약을 정의하지 않는다.\n\n런타임 의존: `postgres`(postgres.js 드라이버)에 의존하며 PostgreSQL 서버 연결이 필요하다.\nRedis 유틸을 쓸 때는 `RedisLike` 호환 클라이언트를 직접 주입한다(특정 redis 패키지를 강제하지 않음).\n\n## 핵심 개념\n\n| 개념 | 무엇 | 대표 export |\n| **PG 커넥션** | postgres.js 풀 생성·스키마 초기화·종료 핸들 | `createPgClient`, `PgOptions`, `Sql` |\n| **Store 구현** | 계약 인터페이스별 PG 구현 클래스 | `ConversationStorePg`, `KnowledgeStorePg`, `AuditStorePg`, `ScheduleStorePg`, `ContextStorePg`, `ToolContextStorePg`, `TranscriptStorePg`, `SuspendedTurnStorePg` |\n| **Effect ledger** | transactional intent/result와 멀티프로세스 run lease/fencing | `EffectLedgerPg` |\n| **Runtime input queue** | idempotent enqueue와 fenced admission 상태 전이 | `provider.inputQueue` |\n| **세션 트리** | 분기 가능한 대화 트리 PG 구현 | `TreeConversationStorePg` |\n| **Provider 번들** | 하나의 커넥션으로 6개 코어 스토어 전부 생성 | `createPgStoreProvider`, `PgStoreProvider` |\n| **분산 레이트리미터** | Redis 기반 분산 처리율 제한 | `createRedisRateLimiter`, `DistributedRateLimiter`, `RedisRateLimiterOptions` |\n| **분산 버짓** | Redis 기반 분산 예산 추적 | `createRedisBudgetTracker`, `DistributedBudgetTracker`, `RedisBudgetOptions` |\n\n## 사용 레시피\n\n커넥션을 열고 전체 스토어 번들을 만든다 (`@dongkseo/store` 팩토리의 `pg` 분기와 동일한 경로):\n\n```ts\nimport { createPgClient, createPgStoreProvider } from '@dongkseo/store-pg';\n\n// 1) 커넥션 풀 + 스키마 초기화 (autoMigrate 기본 true)\nconst { sql, close } = await createPgClient({\n  connectionString: 'postgres://user:pass@host:5432/db',\n  maxConnections: 10, // 선택 (기본 10)\n});\n\n// 2) 6개 코어 스토어를 한 번에 생성\nconst store = createPgStoreProvider(sql);\nawait store.conversation.append(/* ... 계약 시그니처대로 ... */);\n// AgentRunner durability에는 store.effectLedger를 주입한다.\n\n// 3) 종료\nawait close();\n```\n\n개별 스토어만 쓰려면 클래스를 직접 인스턴스화한다 (`sql`은 `createPgClient`가 돌려준 핸들):\n\n```ts\nimport { createPgClient, ConversationStorePg } from '@dongkseo/store-pg';\n\nconst { sql } = await createPgClient({ connectionString: process.env.DATABASE_URL! });\nconst conversations = new ConversationStorePg(sql);\n```\n\n`@dongkseo/store`의 `createStoreProvider({ kind: 'pg', connectionString })`를 쓰면 이 패키지를\n동적 import해서 위 과정을 대신 해 준다 — 직접 구성할 필요가 없으면 그 팩토리를 통하는 것이 표준이다.\n\n## API 표면 (소스 안 열고 타입만)\n\n`index.ts`는 도메인별로 그룹핑돼 있고 파일 맨 위에 **섹션 맵 주석**이 있다. 정확한 시그니처가 필요하면\n구현 본문 대신 **signatures 모드**로만 읽어라:\n\n```bash\nctx_read(path=\"packages/store-pg/src/index.ts\",      mode=\"map\")          # 전체 export 목록\nctx_read(path=\"packages/store-pg/src/pg-client.ts\",  mode=\"signatures\")   # createPgClient / PgOptions / Sql\nctx_read(path=\"packages/store-pg/src/conversation.ts\", mode=\"signatures\") # 한 스토어 구현 예시\nctx_read(path=\"packages/store-pg/src/effect-ledger.ts\", mode=\"signatures\") # durable effects\n```\n\n각 스토어가 만족하는 인터페이스(메서드 시그니처)의 정본은 `@dongkseo/contracts`의 store 타입이다:\n\n```bash\nctx_read(path=\"packages/contracts/src/store.ts\", mode=\"signatures\")\n```\n\n어떤 파일에 뭐가 있는지는 `src/index.ts` 상단 주석 맵을 먼저 보면 된다.\n\n## 유지보수 (drift 방지)\n\n- 이 README = **목적·개념·레시피** 만. 거의 안 변하므로 손으로 관리.\n- **API 정본은 각 소스의 TSDoc** (`/** … */`)과 `@dongkseo/contracts`의 store 인터페이스. API가 바뀌면 코드 옆 TSDoc만 고치면 됨 — 여기 표는 복제하지 말 것.\n- 새 모듈을 export하면 `index.ts` 상단 섹션 맵에 한 줄만 추가.\n\n## Tests\n\n통합 테스트는 실제 PostgreSQL이 필요하다:\n\n```bash\ncd packages/store-pg && DATABASE_URL=postgres://... pnpm test:integration\n```\n\nPart of the [Nexora](../../README.md) multi-tenant agent framework. · [Package map](../../docs/architecture/packages-map.md)\n","readmeFilename":""}