{"_id":"turnlog","_rev":"35-5b4a4f33764dc7209077be889b0710fb","name":"turnlog","dist-tags":{"latest":"0.13.1"},"versions":{"0.2.5":{"name":"turnlog","version":"0.2.5","keywords":["claude-code","search","replay","sessions","local","cli","jsonl","fts5"],"license":"MIT","_id":"turnlog@0.2.5","maintainers":[{"name":"turnlogmate","email":"turnlogdev@gmail.com"}],"homepage":"https://turnlog.dev","bugs":{"url":"https://github.com/turnlog/turnlog/issues"},"bin":{"turnlog":"bin/turnlog.cjs"},"dist":{"shasum":"bf3954790b7467be1da988dd3480504d7b2ab4b8","tarball":"https://registry.npmjs.org/turnlog/-/turnlog-0.2.5.tgz","fileCount":48,"integrity":"sha512-Xsn6mHpVbCW1VafDq57bGBM/Nj/MbmRvQ96nVL4tvk4IeAtCmtPzhql/6H4oKONWj+Nqpz6CZAHBVmx8pJYdBg==","signatures":[{"sig":"MEUCIQCncRen7IOA7b9KeYkIFJ3FNKcw1BMgyUL+vWuuEqtoTgIgFPADXYpKtDWO/h3cDmEwELEt5pg+2qEMajydQS3UJGs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2056254},"type":"module","engines":{"node":">=22"},"gitHead":"a44ee0b279adb7e151a9fa7bb04f9db63082a5cf","scripts":{"dev":"node scripts/dev.mjs","lint":"eslint src test","test":"vitest run","build":"tsc -p tsconfig.json && npm run build -w web","dev:web":"npm run dev -w web","prepack":"npm run build","typecheck":"tsc -p tsconfig.json --noEmit && npm run typecheck -w web","test:watch":"vitest","build:server":"tsc -p tsconfig.json","golden:update":"UPDATE_GOLDEN=1 vitest run test/adapter.test.ts"},"_npmUser":{"name":"turnlogmate","email":"turnlogdev@gmail.com"},"repository":{"url":"git+https://github.com/turnlog/turnlog.git","type":"git"},"workspaces":["web"],"_npmVersion":"10.9.8","description":"Search and replay every Claude Code session you've ever run — locally.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"chokidar":"^4.0.0","better-sqlite3":"^12.0.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.0.0","vitest":"^3.0.0","typescript":"^5.5.0","@types/node":"^22.0.0","typescript-eslint":"^8.0.0","@types/better-sqlite3":"^7.6.11"},"_npmOperationalInternal":{"tmp":"tmp/turnlog_0.2.5_1784695552338_0.3113710603737141","host":"s3://npm-registry-packages-npm-production"}},"0.2.6":{"name":"turnlog","version":"0.2.6","keywords":["claude-code","search","replay","sessions","local","cli","jsonl","fts5"],"license":"MIT","_id":"turnlog@0.2.6","maintainers":[{"name":"turnlogmate","email":"turnlogdev@gmail.com"}],"homepage":"https://turnlog.dev","bugs":{"url":"https://github.com/turnlog/turnlog/issues"},"bin":{"turnlog":"bin/turnlog.cjs"},"dist":{"shasum":"1747b9319b1c0d6625dd0112118797ed959c4194","tarball":"https://registry.npmjs.org/turnlog/-/turnlog-0.2.6.tgz","fileCount":48,"integrity":"sha512-hMDlTRn38+yOaiWYEb2qC296vCanrz+qjhTNuez2qxdpWYslJWZltRI6h4fK0xcd8fR0VfZao+HeLn47G7G06Q==","signatures":[{"sig":"MEQCIEpzcbsw8CwKmkmIZM4P67JWrY9qpBSwUPPMGEEOj5NkAiAN9gNJzpc8Uwc5j0z6hjLY7CPJ5nGEzIZJX7quAwto8A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turnlog@0.2.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2056255},"type":"module","engines":{"node":">=22"},"gitHead":"26ec5f5e27a092f2db1947142bde98efcf8820c8","scripts":{"dev":"node scripts/dev.mjs","lint":"eslint src test","test":"vitest run","build":"tsc -p tsconfig.json && npm run build -w web","dev:web":"npm run dev -w web","prepack":"npm run build","typecheck":"tsc -p tsconfig.json --noEmit && npm run typecheck -w web","test:watch":"vitest","build:server":"tsc -p tsconfig.json","golden:update":"UPDATE_GOLDEN=1 vitest run test/adapter.test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1db2db42-fcc7-4ab5-8969-461be0df97a3"}},"repository":{"url":"git+https://github.com/turnlog/turnlog.git","type":"git"},"workspaces":["web"],"_npmVersion":"12.0.1","description":"Search and replay every Claude Code session you've ever run — locally.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"chokidar":"^4.0.0","better-sqlite3":"^12.0.0"},"publishConfig":{"access":"public","provenance":false},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.0.0","vitest":"^3.0.0","typescript":"^5.5.0","@types/node":"^22.0.0","typescript-eslint":"^8.0.0","@types/better-sqlite3":"^7.6.11"},"_npmOperationalInternal":{"tmp":"tmp/turnlog_0.2.6_1784707549583_0.6923048751561793","host":"s3://npm-registry-packages-npm-production"}},"0.2.7":{"name":"turnlog","version":"0.2.7","keywords":["claude-code","search","replay","sessions","local","cli","jsonl","fts5"],"license":"MIT","_id":"turnlog@0.2.7","maintainers":[{"name":"turnlogmate","email":"turnlogdev@gmail.com"}],"homepage":"https://turnlog.dev","bugs":{"url":"https://github.com/turnlog/turnlog/issues"},"bin":{"turnlog":"bin/turnlog.cjs"},"dist":{"shasum":"8e9cdeb51b600251280c1f17484218dd9fc1e6d6","tarball":"https://registry.npmjs.org/turnlog/-/turnlog-0.2.7.tgz","fileCount":48,"integrity":"sha512-IaWz0Pq1DlBi7RPhwJiBv7LnRoTbgrFpeCECYdx/Pe9HdBNh0yWV8jibGe3o+N3RgoavSpt0Qgtr9q8aR8n41A==","signatures":[{"sig":"MEUCIQC40CTUqiwlFLnhBrSgX+bjvo9D5wCiSKzkA9e47w28WgIgRhBZMwMvpHSyIzP4ZR5/TqPjYBoXRbOJUkEMbH3puVM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turnlog@0.2.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2058060},"type":"module","engines":{"node":">=22"},"gitHead":"5621456af699477c7bab7e417e8518c4ca23baef","scripts":{"dev":"node scripts/dev.mjs","lint":"eslint src test","test":"vitest run","build":"tsc -p tsconfig.json && npm run build -w web","dev:web":"npm run dev -w web","prepack":"npm run build","typecheck":"tsc -p tsconfig.json --noEmit && npm run typecheck -w web","test:watch":"vitest","build:server":"tsc -p tsconfig.json","golden:update":"UPDATE_GOLDEN=1 vitest run test/adapter.test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1db2db42-fcc7-4ab5-8969-461be0df97a3"}},"repository":{"url":"git+https://github.com/turnlog/turnlog.git","type":"git"},"workspaces":["web"],"_npmVersion":"12.0.1","description":"Search and replay every Claude Code session you've ever run — locally.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"chokidar":"^4.0.0","better-sqlite3":"^12.0.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.0.0","vitest":"^3.0.0","typescript":"^5.5.0","@types/node":"^22.0.0","typescript-eslint":"^8.0.0","@types/better-sqlite3":"^7.6.11"},"_npmOperationalInternal":{"tmp":"tmp/turnlog_0.2.7_1784724092780_0.8828245946562847","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"turnlog","version":"0.3.0","keywords":["claude-code","search","replay","sessions","local","cli","jsonl","fts5"],"license":"MIT","_id":"turnlog@0.3.0","maintainers":[{"name":"turnlogmate","email":"turnlogdev@gmail.com"}],"homepage":"https://turnlog.dev","bugs":{"url":"https://github.com/turnlog/turnlog/issues"},"bin":{"turnlog":"bin/turnlog.cjs"},"dist":{"shasum":"3298547ccfd0cca9a6f32f44218f066564d7ea5f","tarball":"https://registry.npmjs.org/turnlog/-/turnlog-0.3.0.tgz","fileCount":48,"integrity":"sha512-rf+yfDxRBG17+KMEgyFJswnuvz6wYOFW8BSbKRVeIH9D0K0crV6zOW7oQFW30YHsKHxHWTWuZmpgQzSZ9rVGCA==","signatures":[{"sig":"MEUCIH+8gHaPLQvzXPQB1/zc85QDJ8n/NazGvEuUfz/s8Na/AiEA8owXlCJ/TdycNuKoE4WXpuptGyc052BroAlumwsUUEI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turnlog@0.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2083276},"type":"module","engines":{"node":">=22"},"gitHead":"4c5310302644f212789a435305374d834b774c13","scripts":{"dev":"node scripts/dev.mjs","lint":"eslint src test","test":"vitest run","build":"tsc -p tsconfig.json && npm run build -w web","dev:web":"npm run dev -w web","prepack":"npm run build","typecheck":"tsc -p tsconfig.json --noEmit && npm run typecheck -w web","test:watch":"vitest","build:server":"tsc -p tsconfig.json","golden:update":"UPDATE_GOLDEN=1 vitest run test/adapter.test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1db2db42-fcc7-4ab5-8969-461be0df97a3"}},"repository":{"url":"git+https://github.com/turnlog/turnlog.git","type":"git"},"workspaces":["web"],"_npmVersion":"12.0.1","description":"Search and replay every Claude Code session you've ever run — locally.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"chokidar":"^4.0.0","better-sqlite3":"^12.0.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.0.0","vitest":"^3.0.0","typescript":"^5.5.0","@types/node":"^22.0.0","typescript-eslint":"^8.0.0","@types/better-sqlite3":"^7.6.11"},"_npmOperationalInternal":{"tmp":"tmp/turnlog_0.3.0_1784730226113_0.5771058672133738","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"turnlog","version":"0.3.1","keywords":["claude-code","search","replay","sessions","local","cli","jsonl","fts5"],"license":"MIT","_id":"turnlog@0.3.1","maintainers":[{"name":"turnlogmate","email":"turnlogdev@gmail.com"}],"homepage":"https://turnlog.dev","bugs":{"url":"https://github.com/turnlog/turnlog/issues"},"bin":{"turnlog":"bin/turnlog.cjs"},"dist":{"shasum":"9d252dd2eee465c3d0db06e8ee1a9555daa6a6d3","tarball":"https://registry.npmjs.org/turnlog/-/turnlog-0.3.1.tgz","fileCount":48,"integrity":"sha512-4DJ3MvRXD6hCrN6MnKJ2zuShFcM8dGyj7Lv/PFFty5MFVeFJN4S7o7UcgWgMwB6WTUuXw1/Tqq/4sowywMNVVA==","signatures":[{"sig":"MEYCIQCyCbK03+OhprM7Yav21oL4x5nGTEmZ+aOZvqg8UojG2AIhALWzh1ozI2x2HPSa/dMLhPcd3SQo53hoN2z/3ZWGWC2l","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turnlog@0.3.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2084532},"type":"module","engines":{"node":">=22"},"gitHead":"5bc61ede9dfcba58ff37eb298cb1bafffd48e65b","scripts":{"dev":"node scripts/dev.mjs","lint":"eslint src test","test":"vitest run","build":"tsc -p tsconfig.json && npm run build -w web","dev:web":"npm run dev -w web","prepack":"npm run build","typecheck":"tsc -p tsconfig.json --noEmit && npm run typecheck -w web","test:watch":"vitest","build:server":"tsc -p tsconfig.json","golden:update":"UPDATE_GOLDEN=1 vitest run test/adapter.test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1db2db42-fcc7-4ab5-8969-461be0df97a3"}},"repository":{"url":"git+https://github.com/turnlog/turnlog.git","type":"git"},"workspaces":["web"],"_npmVersion":"12.0.1","description":"Search and replay every Claude Code session you've ever run — locally.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"chokidar":"^4.0.0","better-sqlite3":"^12.0.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.0.0","vitest":"^3.0.0","typescript":"^5.5.0","@types/node":"^22.0.0","typescript-eslint":"^8.0.0","@types/better-sqlite3":"^7.6.11"},"_npmOperationalInternal":{"tmp":"tmp/turnlog_0.3.1_1784834509417_0.20784033760402054","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"turnlog","version":"0.4.0","keywords":["claude-code","search","replay","sessions","local","cli","jsonl","fts5"],"license":"MIT","_id":"turnlog@0.4.0","maintainers":[{"name":"turnlogmate","email":"turnlogdev@gmail.com"}],"homepage":"https://turnlog.dev","bugs":{"url":"https://github.com/turnlog/turnlog/issues"},"bin":{"turnlog":"bin/turnlog.cjs"},"dist":{"shasum":"1315498632d7b9c7901d1eba488e94e6bfc7bf0f","tarball":"https://registry.npmjs.org/turnlog/-/turnlog-0.4.0.tgz","fileCount":48,"integrity":"sha512-Tcr5m7sv7f3nyNXUgH9eRnviFgO9uVnpaKO2Y60zmDNTDcZDM1XgDndkr5sA7NeieVC8WTZutZscqIh1KjUulA==","signatures":[{"sig":"MEUCIQC+1kn2KKnXQpB+BvZIKB332eHdfNFucC4hXFU4d8ZkvQIgH8R2vgwd+v/utL9oDhbN3Mdx1nGectyGiOzL/YWZ6ZM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turnlog@0.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2112452},"type":"module","engines":{"node":">=22"},"gitHead":"012d730f244b765b7fb7606b3400760711ecefae","scripts":{"dev":"node scripts/dev.mjs","lint":"eslint src test","test":"vitest run","build":"tsc -p tsconfig.json && npm run build -w web","dev:web":"npm run dev -w web","prepack":"npm run build","typecheck":"tsc -p tsconfig.json --noEmit && npm run typecheck -w web","test:watch":"vitest","build:server":"tsc -p tsconfig.json","golden:update":"UPDATE_GOLDEN=1 vitest run test/adapter.test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1db2db42-fcc7-4ab5-8969-461be0df97a3"}},"repository":{"url":"git+https://github.com/turnlog/turnlog.git","type":"git"},"workspaces":["web"],"_npmVersion":"12.0.1","description":"Search and replay every Claude Code session you've ever run — locally.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"chokidar":"^4.0.0","better-sqlite3":"^12.0.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.0.0","vitest":"^3.0.0","typescript":"^5.5.0","@types/node":"^22.0.0","typescript-eslint":"^8.0.0","@types/better-sqlite3":"^7.6.11"},"_npmOperationalInternal":{"tmp":"tmp/turnlog_0.4.0_1784837050614_0.8949011388562709","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"turnlog","version":"0.5.0","keywords":["claude-code","search","replay","sessions","local","cli","jsonl","fts5"],"license":"MIT","_id":"turnlog@0.5.0","maintainers":[{"name":"turnlogmate","email":"turnlogdev@gmail.com"}],"homepage":"https://turnlog.dev","bugs":{"url":"https://github.com/turnlog/turnlog/issues"},"bin":{"turnlog":"bin/turnlog.cjs"},"dist":{"shasum":"4936b8b3f1682f86f41fa6db139acb391096b28a","tarball":"https://registry.npmjs.org/turnlog/-/turnlog-0.5.0.tgz","fileCount":50,"integrity":"sha512-W+c8RXMcLACNt3yhtkOSCLwRPRFX9DYXUIoZICDiLlhOQfQFgti1g1Lf6n/S7HPT+DQ8s2zXdsjxo08qaYodHw==","signatures":[{"sig":"MEUCIQCAX8m5EM6bALtXNLcZK4rxQ5iRT+fr0CHPZThoBC7fhgIgBYwtOVKCIVI27uwUUu61CtvUB3GOFA37AMW4limELFc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turnlog@0.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2148081},"type":"module","engines":{"node":">=22"},"gitHead":"c867a67505f1449e7f791e128b043098335d9ee8","scripts":{"dev":"node scripts/dev.mjs","lint":"eslint src test","test":"vitest run","build":"tsc -p tsconfig.json && npm run build -w web","dev:web":"npm run dev -w web","prepack":"npm run build","typecheck":"tsc -p tsconfig.json --noEmit && npm run typecheck -w web","test:watch":"vitest","build:server":"tsc -p tsconfig.json","golden:update":"UPDATE_GOLDEN=1 vitest run test/adapter.test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1db2db42-fcc7-4ab5-8969-461be0df97a3"}},"repository":{"url":"git+https://github.com/turnlog/turnlog.git","type":"git"},"workspaces":["web"],"_npmVersion":"12.0.1","description":"Search and replay every Claude Code session you've ever run — locally.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"chokidar":"^4.0.0","better-sqlite3":"^12.0.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.0.0","vitest":"^3.0.0","typescript":"^5.5.0","@types/node":"^22.0.0","typescript-eslint":"^8.0.0","@types/better-sqlite3":"^7.6.11"},"_npmOperationalInternal":{"tmp":"tmp/turnlog_0.5.0_1784917916258_0.19593644686175282","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"turnlog","version":"0.6.0","keywords":["claude-code","search","replay","sessions","local","cli","jsonl","fts5"],"license":"MIT","_id":"turnlog@0.6.0","maintainers":[{"name":"turnlogmate","email":"turnlogdev@gmail.com"}],"homepage":"https://turnlog.dev","bugs":{"url":"https://github.com/turnlog/turnlog/issues"},"bin":{"turnlog":"bin/turnlog.cjs"},"dist":{"shasum":"a41cb86a3a44a4e0069f4a83a8b68059a33a054c","tarball":"https://registry.npmjs.org/turnlog/-/turnlog-0.6.0.tgz","fileCount":52,"integrity":"sha512-Ya1g+suw6Kw02jWzmJO2JHzNQfSUSkPO4mnJnkRYTVc7bG7VLONWmoN8KOurQ+dK9BwL3LHMJxdw+T/6h8NhZQ==","signatures":[{"sig":"MEYCIQDIAPN8UXazGUByamY1bWxLuuawjBSU1ruJbCEAaROGXQIhAOTgJJg8eRmFdJ6orRW8FTRSkpAE6WKdIAob8YKkeK2j","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turnlog@0.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2185134},"type":"module","engines":{"node":">=22"},"gitHead":"53f0758649bfddd4887fc9bf3a09575df1e62b79","scripts":{"dev":"node scripts/dev.mjs","lint":"eslint src test","test":"vitest run","build":"tsc -p tsconfig.json && npm run build -w web","dev:web":"npm run dev -w web","prepack":"npm run build","typecheck":"tsc -p tsconfig.json --noEmit && npm run typecheck -w web","test:watch":"vitest","build:server":"tsc -p tsconfig.json","golden:update":"UPDATE_GOLDEN=1 vitest run test/adapter.test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1db2db42-fcc7-4ab5-8969-461be0df97a3"}},"repository":{"url":"git+https://github.com/turnlog/turnlog.git","type":"git"},"workspaces":["web"],"_npmVersion":"12.0.1","description":"Search and replay every Claude Code session you've ever run — locally.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"chokidar":"^4.0.0","better-sqlite3":"^12.0.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.0.0","vitest":"^3.0.0","typescript":"^5.5.0","@types/node":"^22.0.0","typescript-eslint":"^8.0.0","@types/better-sqlite3":"^7.6.11"},"_npmOperationalInternal":{"tmp":"tmp/turnlog_0.6.0_1785094267309_0.565328577721107","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"turnlog","version":"0.7.0","keywords":["claude-code","search","replay","sessions","local","cli","jsonl","fts5"],"license":"MIT","_id":"turnlog@0.7.0","maintainers":[{"name":"turnlogmate","email":"turnlogdev@gmail.com"}],"homepage":"https://turnlog.dev","bugs":{"url":"https://github.com/turnlog/turnlog/issues"},"bin":{"turnlog":"bin/turnlog.cjs"},"dist":{"shasum":"84cbb0910067b39e4df42baff3cc737ee70d6694","tarball":"https://registry.npmjs.org/turnlog/-/turnlog-0.7.0.tgz","fileCount":52,"integrity":"sha512-5So8joGtxArzmRiYZsgQQX1CBgAkaNvzE61ThRdHFLgPijHE8fCdH/OXaBuwyzTMlCNfBxiSW8wAUIg5sTDHtQ==","signatures":[{"sig":"MEYCIQC458cPDVTngPKynmtqkhd+7Jj/ykrj3O67mLWLIr480gIhANCQi5qYNJwBDPV+Glu/oi6nclcvRVGq3USW4s2DGdtN","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turnlog@0.7.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2212806},"type":"module","engines":{"node":">=22"},"gitHead":"a758e900f934381245bcc3af721407a6e30665fb","scripts":{"dev":"node scripts/dev.mjs","lint":"eslint src test","test":"vitest run","build":"tsc -p tsconfig.json && npm run build -w web","dev:web":"npm run dev -w web","prepack":"npm run build","typecheck":"tsc -p tsconfig.json --noEmit && npm run typecheck -w web","test:watch":"vitest","build:server":"tsc -p tsconfig.json","golden:update":"UPDATE_GOLDEN=1 vitest run test/adapter.test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1db2db42-fcc7-4ab5-8969-461be0df97a3"}},"repository":{"url":"git+https://github.com/turnlog/turnlog.git","type":"git"},"workspaces":["web"],"_npmVersion":"12.0.1","description":"Search and replay every Claude Code session you've ever run — locally.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"chokidar":"^4.0.0","better-sqlite3":"^12.0.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.0.0","vitest":"^3.0.0","typescript":"^5.5.0","@types/node":"^22.0.0","typescript-eslint":"^8.0.0","@types/better-sqlite3":"^7.6.11"},"_npmOperationalInternal":{"tmp":"tmp/turnlog_0.7.0_1785176943943_0.39091430358028556","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"turnlog","version":"0.8.0","keywords":["claude-code","search","replay","sessions","local","cli","jsonl","fts5"],"license":"MIT","_id":"turnlog@0.8.0","maintainers":[{"name":"turnlogmate","email":"turnlogdev@gmail.com"}],"homepage":"https://turnlog.dev","bugs":{"url":"https://github.com/turnlog/turnlog/issues"},"bin":{"turnlog":"bin/turnlog.cjs"},"dist":{"shasum":"1fd9c8ceb48fe60a1e812b943e439355f6c5c76f","tarball":"https://registry.npmjs.org/turnlog/-/turnlog-0.8.0.tgz","fileCount":53,"integrity":"sha512-7BoYAX6OEvstqyccYhFz2GY2Bwfcy6gnr0bVDX267jT+j6iGJ96G+fLF4DVFhIzODXjlzUodeLoRKp1HGj0K+w==","signatures":[{"sig":"MEUCIQCa4Bsww9VlfPPLDpqRZRBzv/onQdtEI14WGaZSpUJ4KgIgTCDbWSy2XrSyEfIdjr3AqdBGHnzQjcCkZy2ctcAYMFk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turnlog@0.8.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2258185},"type":"module","engines":{"node":">=22"},"gitHead":"91454676a751bc6af6c1509d3491995ab9903f01","scripts":{"dev":"node scripts/dev.mjs","lint":"eslint src test","test":"vitest run","build":"tsc -p tsconfig.json && npm run build -w web","dev:web":"npm run dev -w web","prepack":"npm run build","typecheck":"tsc -p tsconfig.json --noEmit && npm run typecheck -w web","test:watch":"vitest","build:server":"tsc -p tsconfig.json","golden:update":"UPDATE_GOLDEN=1 vitest run test/adapter.test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1db2db42-fcc7-4ab5-8969-461be0df97a3"}},"repository":{"url":"git+https://github.com/turnlog/turnlog.git","type":"git"},"workspaces":["web"],"_npmVersion":"12.0.1","description":"Search and replay every Claude Code session you've ever run — locally.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"chokidar":"^4.0.0","better-sqlite3":"^12.0.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.0.0","vitest":"^3.0.0","typescript":"^5.5.0","@types/node":"^22.0.0","typescript-eslint":"^8.0.0","@types/better-sqlite3":"^7.6.11"},"_npmOperationalInternal":{"tmp":"tmp/turnlog_0.8.0_1785343077996_0.3354518798673678","host":"s3://npm-registry-packages-npm-production"}},"0.9.0":{"name":"turnlog","version":"0.9.0","keywords":["claude-code","search","replay","sessions","local","cli","jsonl","fts5"],"license":"MIT","_id":"turnlog@0.9.0","maintainers":[{"name":"turnlogmate","email":"turnlogdev@gmail.com"}],"homepage":"https://turnlog.dev","bugs":{"url":"https://github.com/turnlog/turnlog/issues"},"bin":{"turnlog":"bin/turnlog.cjs"},"dist":{"shasum":"f3b2a135e744fd41ae83ac1b1e07eb3081bd0929","tarball":"https://registry.npmjs.org/turnlog/-/turnlog-0.9.0.tgz","fileCount":55,"integrity":"sha512-XuCail0dQ+HEqDnUvzqbdsRDEVcHRDtw9XOSYoEcb7E3/furWjZb5FMrgjDZIxsfzxEJ9LTMcZNUBFQMdsGvWQ==","signatures":[{"sig":"MEQCIFVmVd3OC/H/8Mx6X8n/zfGEpqQuoYGV3VIeV2dGw6KCAiAsi7i++7SqvNEde1d7rUCK1KFKQUNyrJiXZ7uqkn1jVw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turnlog@0.9.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2339610},"type":"module","engines":{"node":">=22"},"gitHead":"458fd03a7e31d8b9c629d0003dd6218e5fbb1889","scripts":{"dev":"node scripts/dev.mjs","lint":"eslint src test","test":"vitest run","build":"tsc -p tsconfig.json && npm run build -w web","dev:web":"npm run dev -w web","prepack":"npm run build","typecheck":"tsc -p tsconfig.json --noEmit && npm run typecheck -w web","test:watch":"vitest","build:server":"tsc -p tsconfig.json","golden:update":"UPDATE_GOLDEN=1 vitest run test/adapter.test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1db2db42-fcc7-4ab5-8969-461be0df97a3"}},"repository":{"url":"git+https://github.com/turnlog/turnlog.git","type":"git"},"workspaces":["web"],"_npmVersion":"12.0.2","description":"Search and replay every Claude Code session you've ever run — locally.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"chokidar":"^4.0.0","better-sqlite3":"^12.0.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.0.0","vitest":"^3.0.0","typescript":"^5.5.0","@types/node":"^22.0.0","typescript-eslint":"^8.0.0","@types/better-sqlite3":"^7.6.11"},"_npmOperationalInternal":{"tmp":"tmp/turnlog_0.9.0_1785779682396_0.6277374164775054","host":"s3://npm-registry-packages-npm-production"}},"0.9.1":{"name":"turnlog","version":"0.9.1","keywords":["claude-code","search","replay","sessions","local","cli","jsonl","fts5"],"license":"MIT","_id":"turnlog@0.9.1","maintainers":[{"name":"turnlogmate","email":"turnlogdev@gmail.com"}],"homepage":"https://turnlog.dev","bugs":{"url":"https://github.com/turnlog/turnlog/issues"},"bin":{"turnlog":"bin/turnlog.cjs"},"dist":{"shasum":"8632c7c8e6652841ded0cc6d866f3f04e86e00bd","tarball":"https://registry.npmjs.org/turnlog/-/turnlog-0.9.1.tgz","fileCount":55,"integrity":"sha512-LY6TpTD/nEbbJSp1Vy0fsoQdPxUoSFcJbUjdA1p+FhtLub1PAM2MkfIm6cIXIuJT19dvyxW+caRnH8mnV4GDPA==","signatures":[{"sig":"MEUCIQCB2NcGFUtBiho2Pr2EUccKhYHsl6g78iMxW6r0zjhIwAIgFJdhdPMSsLMJ4i0Mh1zmS7sVccXQp5lA5zaP77h6uQs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turnlog@0.9.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2342351},"type":"module","engines":{"node":">=22"},"gitHead":"9ab5896caa32249696b2527faf2a6e6ca2bac1d1","scripts":{"dev":"node scripts/dev.mjs","lint":"eslint src test","test":"vitest run","build":"tsc -p tsconfig.json && npm run build -w web","dev:web":"npm run dev -w web","prepack":"npm run build","typecheck":"tsc -p tsconfig.json --noEmit && npm run typecheck -w web","test:watch":"vitest","build:server":"tsc -p tsconfig.json","golden:update":"UPDATE_GOLDEN=1 vitest run test/adapter.test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1db2db42-fcc7-4ab5-8969-461be0df97a3"}},"repository":{"url":"git+https://github.com/turnlog/turnlog.git","type":"git"},"workspaces":["web"],"_npmVersion":"12.0.2","description":"Search and replay every Claude Code session you've ever run — locally.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"chokidar":"^4.0.0","better-sqlite3":"^12.0.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.0.0","vitest":"^3.0.0","typescript":"^5.5.0","@types/node":"^22.0.0","typescript-eslint":"^8.0.0","@types/better-sqlite3":"^7.6.11"},"_npmOperationalInternal":{"tmp":"tmp/turnlog_0.9.1_1785780429485_0.6356700787331759","host":"s3://npm-registry-packages-npm-production"}},"0.10.0":{"name":"turnlog","version":"0.10.0","keywords":["claude-code","search","replay","sessions","local","cli","jsonl","fts5"],"license":"MIT","_id":"turnlog@0.10.0","maintainers":[{"name":"turnlogmate","email":"turnlogdev@gmail.com"}],"homepage":"https://turnlog.dev","bugs":{"url":"https://github.com/turnlog/turnlog/issues"},"bin":{"turnlog":"bin/turnlog.cjs"},"dist":{"shasum":"86470cdb8eef851c47c5d460e46376598b5ad03a","tarball":"https://registry.npmjs.org/turnlog/-/turnlog-0.10.0.tgz","fileCount":63,"integrity":"sha512-emE1wwNE5a8wwx8cHdXOhdmUmxP+8vEV7FKSXwdgJN95q0Rdn5XeKiPDGeY4hG9g6CyJNRI16sZl+w6zoqoSpA==","signatures":[{"sig":"MEUCIQClFcDDdBsKmodYJRk1+qYUkvMvH28v8hs2SzqD83fDzQIgLVr2FW6d34W7nr6KWGvYl5e9FmZsBT6U5U0B7gMInMY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turnlog@0.10.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2410121},"type":"module","engines":{"node":">=22"},"gitHead":"22156b3cbb1dd505fd3cf260b876d898eeca306a","scripts":{"dev":"node scripts/dev.mjs","lint":"eslint src test","test":"vitest run","build":"tsc -p tsconfig.json && npm run build -w web","dev:web":"npm run dev -w web","prepack":"npm run build","typecheck":"tsc -p tsconfig.json --noEmit && npm run typecheck -w web","test:watch":"vitest","build:server":"tsc -p tsconfig.json","golden:update":"UPDATE_GOLDEN=1 vitest run test/adapter.test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1db2db42-fcc7-4ab5-8969-461be0df97a3"}},"repository":{"url":"git+https://github.com/turnlog/turnlog.git","type":"git"},"workspaces":["web"],"_npmVersion":"12.0.2","description":"Search and replay every Claude Code session you've ever run — locally.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"chokidar":"^4.0.0","better-sqlite3":"^12.0.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.0.0","vitest":"^3.0.0","typescript":"^5.5.0","@types/node":"^22.0.0","typescript-eslint":"^8.0.0","@types/better-sqlite3":"^7.6.11"},"_npmOperationalInternal":{"tmp":"tmp/turnlog_0.10.0_1785869324059_0.5515569607944719","host":"s3://npm-registry-packages-npm-production"}},"0.10.1":{"name":"turnlog","version":"0.10.1","keywords":["claude-code","search","replay","sessions","local","cli","jsonl","fts5"],"license":"MIT","_id":"turnlog@0.10.1","maintainers":[{"name":"turnlogmate","email":"turnlogdev@gmail.com"}],"homepage":"https://turnlog.dev","bugs":{"url":"https://github.com/turnlog/turnlog/issues"},"bin":{"turnlog":"bin/turnlog.cjs"},"dist":{"shasum":"0bf389a6b3d3682014e663c0f831130416b03a19","tarball":"https://registry.npmjs.org/turnlog/-/turnlog-0.10.1.tgz","fileCount":63,"integrity":"sha512-e9d7MsYB0z244YxSQi2NgFtW0jLA9wTrnnbrTpb2mrd8gfX282AoZhQVvs7qwwaSxbk+R6SBa1Xi8UbgDfsDXQ==","signatures":[{"sig":"MEUCIQDLntzwM/y7dU0/1io25YrI1Wm9FrehOeLh5FUFnvAa/wIgV1m2CVq/U9Yo0SJbRzicu6gF+fbNl/Qik9nHjmglgDA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turnlog@0.10.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2410607},"type":"module","engines":{"node":">=22"},"gitHead":"a7f729cceecc7d96fa83e2d38c3ff733d0c1e00d","scripts":{"dev":"node scripts/dev.mjs","lint":"eslint src test","test":"vitest run","build":"tsc -p tsconfig.json && npm run build -w web","dev:web":"npm run dev -w web","prepack":"npm run build","typecheck":"tsc -p tsconfig.json --noEmit && npm run typecheck -w web","test:watch":"vitest","build:server":"tsc -p tsconfig.json","golden:update":"UPDATE_GOLDEN=1 vitest run test/adapter.test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1db2db42-fcc7-4ab5-8969-461be0df97a3"}},"repository":{"url":"git+https://github.com/turnlog/turnlog.git","type":"git"},"workspaces":["web"],"_npmVersion":"12.0.2","description":"Search and replay every Claude Code session you've ever run — locally.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"chokidar":"^4.0.0","better-sqlite3":"^12.0.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.0.0","vitest":"^3.0.0","typescript":"^5.5.0","@types/node":"^22.0.0","typescript-eslint":"^8.0.0","@types/better-sqlite3":"^7.6.11"},"_npmOperationalInternal":{"tmp":"tmp/turnlog_0.10.1_1785870062014_0.03574202333596155","host":"s3://npm-registry-packages-npm-production"}},"0.11.0":{"name":"turnlog","version":"0.11.0","keywords":["turnlog","claude-code","codex","cursor","search","replay","sessions","local","cli","jsonl","fts5"],"license":"MIT","_id":"turnlog@0.11.0","maintainers":[{"name":"turnlogmate","email":"turnlogdev@gmail.com"}],"homepage":"https://turnlog.dev","bugs":{"url":"https://github.com/turnlog/turnlog/issues"},"bin":{"turnlog":"bin/turnlog.cjs"},"dist":{"shasum":"3f17a9a9a817efe2dfdf80133e9f9051a2e27421","tarball":"https://registry.npmjs.org/turnlog/-/turnlog-0.11.0.tgz","fileCount":70,"integrity":"sha512-yoQFLNkeHZUqjz1hQSr6p9s26B4zLaD62Kyx/8vzW0CngqdYcqAtBAxrMSOqfp30DJ4yrlCqMX0vHuUAxlJvuw==","signatures":[{"sig":"MEYCIQDM/kaTOtiUS/gSYi3j5DubGP1JxgunaGENWQi016hCcAIhAKV9JaENat8cWbBaeSW3CqvSW0bN8evRbSgdffNTqA1e","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turnlog@0.11.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2468505},"type":"module","engines":{"node":">=22"},"gitHead":"453249492e00daec03b906ff81c6b830135e6cf0","scripts":{"dev":"node scripts/dev.mjs","lint":"eslint src test","test":"vitest run","build":"tsc -p tsconfig.json && npm run build -w web","dev:web":"npm run dev -w web","prepack":"npm run build","preflight":"npm run typecheck && npm run lint && npm run build && npm test","typecheck":"tsc -p tsconfig.json --noEmit && npm run typecheck -w web","test:watch":"vitest","build:server":"tsc -p tsconfig.json","golden:update":"UPDATE_GOLDEN=1 vitest run test/adapter.test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1db2db42-fcc7-4ab5-8969-461be0df97a3"}},"repository":{"url":"git+https://github.com/turnlog/turnlog.git","type":"git"},"workspaces":["web"],"_npmVersion":"12.0.2","description":"Search and replay every Claude Code session you've ever run — locally.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"chokidar":"^4.0.0","better-sqlite3":"^12.0.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.0.0","vitest":"^3.0.0","typescript":"^5.5.0","@types/node":"^22.0.0","typescript-eslint":"^8.0.0","@types/better-sqlite3":"^7.6.11"},"_npmOperationalInternal":{"tmp":"tmp/turnlog_0.11.0_1786076153033_0.2823017494390445","host":"s3://npm-registry-packages-npm-production"}},"0.12.0":{"name":"turnlog","version":"0.12.0","keywords":["turnlog","claude-code","codex","cursor","search","replay","sessions","local","cli","jsonl","fts5"],"license":"MIT","_id":"turnlog@0.12.0","maintainers":[{"name":"turnlogmate","email":"turnlogdev@gmail.com"}],"homepage":"https://turnlog.dev","bugs":{"url":"https://github.com/turnlog/turnlog/issues"},"bin":{"turnlog":"bin/turnlog.cjs"},"dist":{"shasum":"0c1cdf7126cda5b1b25d6637bfb40b9ea3b2c65e","tarball":"https://registry.npmjs.org/turnlog/-/turnlog-0.12.0.tgz","fileCount":70,"integrity":"sha512-tGxK37cPZfzT92l2do4FGAv/Gy79J3ecALOLyEHmEE9ALglr/5qiXWqOVn0tR+l8lDYSIzSMAAlWU+8c/fWtHQ==","signatures":[{"sig":"MEQCIFVxZuSBGvpQvt0S+RjlJ1W/RbdzEnpiTOdlR8mHwLJbAiBDCzdMlLmMByFK9CDIYW01izENqzp1irkvkElkHfGVJw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turnlog@0.12.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2518782},"type":"module","engines":{"node":">=22"},"gitHead":"bafb40dc34123b258dfc38429c0defaa96e9953d","scripts":{"dev":"node scripts/dev.mjs","lint":"eslint src test","test":"vitest run","build":"tsc -p tsconfig.json && npm run build -w web","dev:web":"npm run dev -w web","prepack":"npm run build","preflight":"npm run typecheck && npm run lint && npm run build && npm test","typecheck":"tsc -p tsconfig.json --noEmit && npm run typecheck -w web","test:watch":"vitest","build:server":"tsc -p tsconfig.json","golden:update":"UPDATE_GOLDEN=1 vitest run test/adapter.test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1db2db42-fcc7-4ab5-8969-461be0df97a3"}},"repository":{"url":"git+https://github.com/turnlog/turnlog.git","type":"git"},"workspaces":["web"],"_npmVersion":"12.0.2","description":"Search and replay every Claude Code session you've ever run — locally.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"chokidar":"^4.0.0","better-sqlite3":"^12.0.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.0.0","vitest":"^3.0.0","typescript":"^5.5.0","@types/node":"^22.0.0","typescript-eslint":"^8.0.0","@types/better-sqlite3":"^7.6.11"},"_npmOperationalInternal":{"tmp":"tmp/turnlog_0.12.0_1786275783952_0.4643233539344165","host":"s3://npm-registry-packages-npm-production"}},"0.12.1":{"name":"turnlog","version":"0.12.1","keywords":["turnlog","claude-code","codex","cursor","search","replay","sessions","local","cli","jsonl","fts5"],"license":"MIT","_id":"turnlog@0.12.1","maintainers":[{"name":"turnlogmate","email":"turnlogdev@gmail.com"}],"homepage":"https://turnlog.dev","bugs":{"url":"https://github.com/turnlog/turnlog/issues"},"bin":{"turnlog":"bin/turnlog.cjs"},"dist":{"shasum":"bd389a1c93545d2b4bb0b1fd15ff045b4fa0cd26","tarball":"https://registry.npmjs.org/turnlog/-/turnlog-0.12.1.tgz","fileCount":71,"integrity":"sha512-5v3cTkyg5Fd0x4dl/Ro5iAfIUG3K+X/0dsPmp247vDk/DammEx6i1wKIu1BtP+pkNeeE0hD65xfj918MsLzzTg==","signatures":[{"sig":"MEYCIQD9zYjeCp+zxTeZJx6OdiFxUDaSZbrdlo2Ob6Z13LYpOwIhAIkCCwzrEq5BdE7IyR4f+h5j7jf1uqpTN1h1tKzzatDO","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turnlog@0.12.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2611081},"type":"module","engines":{"node":">=22"},"gitHead":"6c6d18318080af32af78be27dd05225e05efc5f0","scripts":{"dev":"node scripts/dev.mjs","lint":"eslint src test","test":"vitest run","build":"tsc -p tsconfig.json && npm run build -w web","dev:web":"npm run dev -w web","prepack":"npm run build","preflight":"npm run typecheck && npm run lint && npm run build && npm test","typecheck":"tsc -p tsconfig.json --noEmit && npm run typecheck -w web","test:watch":"vitest","build:server":"tsc -p tsconfig.json","golden:update":"UPDATE_GOLDEN=1 vitest run test/adapter.test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1db2db42-fcc7-4ab5-8969-461be0df97a3"}},"repository":{"url":"git+https://github.com/turnlog/turnlog.git","type":"git"},"workspaces":["web"],"_npmVersion":"12.0.2","description":"Search and replay every Claude Code session you've ever run — locally.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"chokidar":"^4.0.0","better-sqlite3":"^12.0.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.0.0","vitest":"^3.0.0","typescript":"^5.5.0","@types/node":"^22.0.0","typescript-eslint":"^8.0.0","@types/better-sqlite3":"^7.6.11"},"_npmOperationalInternal":{"tmp":"tmp/turnlog_0.12.1_1786315398432_0.38193922164769756","host":"s3://npm-registry-packages-npm-production"}},"0.12.2":{"name":"turnlog","version":"0.12.2","keywords":["turnlog","claude-code","codex","cursor","search","replay","sessions","local","cli","jsonl","fts5"],"license":"MIT","_id":"turnlog@0.12.2","maintainers":[{"name":"turnlogmate","email":"turnlogdev@gmail.com"}],"homepage":"https://turnlog.dev","bugs":{"url":"https://github.com/turnlog/turnlog/issues"},"bin":{"turnlog":"bin/turnlog.cjs"},"dist":{"shasum":"8e6e925d2831f90d49fec3c9fd234e167da318bf","tarball":"https://registry.npmjs.org/turnlog/-/turnlog-0.12.2.tgz","fileCount":71,"integrity":"sha512-6z9MopqHtWnBb3p5XTg9fjjfaLjnvUYigZAXEOzxegvzOFUkaYYp3tC3Y4Ub5TzOe8aofKHt/gNbnsHjfRxldw==","signatures":[{"sig":"MEYCIQDbZi1S+5jkYQsEwrVNuxGFd2naQm2UewPJhr47JSTcSwIhAJTPxR+JEMY4/ObHKSuQTSanpXe3KwZrDnQRuAcFzSNT","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turnlog@0.12.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2614871},"type":"module","engines":{"node":">=22"},"gitHead":"52e59280cc5de1fdbc4d2a7979acc7e1094c3dba","scripts":{"dev":"node scripts/dev.mjs","lint":"eslint src test","test":"vitest run","build":"tsc -p tsconfig.json && npm run build -w web","dev:web":"npm run dev -w web","prepack":"npm run build","preflight":"npm run typecheck && npm run lint && npm run build && npm test","typecheck":"tsc -p tsconfig.json --noEmit && npm run typecheck -w web","test:watch":"vitest","build:server":"tsc -p tsconfig.json","golden:update":"UPDATE_GOLDEN=1 vitest run test/adapter.test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1db2db42-fcc7-4ab5-8969-461be0df97a3"}},"repository":{"url":"git+https://github.com/turnlog/turnlog.git","type":"git"},"workspaces":["web"],"_npmVersion":"12.0.2","description":"Search and replay every Claude Code session you've ever run — locally.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"chokidar":"^4.0.0","better-sqlite3":"^12.0.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.0.0","vitest":"^3.0.0","typescript":"^5.5.0","@types/node":"^22.0.0","typescript-eslint":"^8.0.0","@types/better-sqlite3":"^7.6.11"},"_npmOperationalInternal":{"tmp":"tmp/turnlog_0.12.2_1786380770675_0.35335735799865153","host":"s3://npm-registry-packages-npm-production"}},"0.13.0":{"name":"turnlog","version":"0.13.0","keywords":["turnlog","claude-code","codex","cursor","search","replay","sessions","local","cli","jsonl","fts5"],"license":"MIT","_id":"turnlog@0.13.0","maintainers":[{"name":"turnlogmate","email":"turnlogdev@gmail.com"}],"homepage":"https://turnlog.dev","bugs":{"url":"https://github.com/turnlog/turnlog/issues"},"bin":{"turnlog":"bin/turnlog.cjs"},"dist":{"shasum":"1bc2e8576adf2b40ff0fdfda81bf6fb71be2288d","tarball":"https://registry.npmjs.org/turnlog/-/turnlog-0.13.0.tgz","fileCount":73,"integrity":"sha512-/Ud58TpKcghEBXWPG9kZ+rFEpFaKQn+JkKtdB+EVzmWgBJ2Eebp33TbniBkdN451lm+CqjBBZBV+WQFAh/hTTQ==","signatures":[{"sig":"MEUCIQDmPpogZUl08pK52MRdzmMpcHqveZL/Tjr+BnlzfWRyNwIgM2EtuTUR0PrikETInt9IBxDoTxl+TsKzuy5v1unMA9Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turnlog@0.13.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2651218},"type":"module","engines":{"node":">=22"},"gitHead":"89c5fa5b388ddacfa0b3f2f539e20f5dd9accc11","scripts":{"dev":"node scripts/dev.mjs","lint":"eslint src test","test":"vitest run","build":"tsc -p tsconfig.json && npm run build -w web","dev:web":"npm run dev -w web","prepack":"npm run build","preflight":"npm run typecheck && npm run lint && npm run build && npm test","typecheck":"tsc -p tsconfig.json --noEmit && npm run typecheck -w web","test:watch":"vitest","build:server":"tsc -p tsconfig.json","golden:update":"UPDATE_GOLDEN=1 vitest run test/adapter.test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1db2db42-fcc7-4ab5-8969-461be0df97a3"}},"repository":{"url":"git+https://github.com/turnlog/turnlog.git","type":"git"},"workspaces":["web"],"_npmVersion":"12.0.2","description":"Search and replay every Claude Code session you've ever run — locally.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"chokidar":"^4.0.0","better-sqlite3":"^12.0.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.0.0","vitest":"^3.0.0","typescript":"^5.5.0","@types/node":"^22.0.0","typescript-eslint":"^8.0.0","@types/better-sqlite3":"^7.6.11"},"_npmOperationalInternal":{"tmp":"tmp/turnlog_0.13.0_1786542180392_0.5219748178627619","host":"s3://npm-registry-packages-npm-production"}},"0.13.1":{"name":"turnlog","version":"0.13.1","description":"Search and replay every Claude Code session you've ever run — locally.","license":"MIT","type":"module","homepage":"https://turnlog.dev","repository":{"type":"git","url":"git+https://github.com/turnlog/turnlog.git"},"bugs":{"url":"https://github.com/turnlog/turnlog/issues"},"keywords":["turnlog","claude-code","codex","cursor","search","replay","sessions","local","cli","jsonl","fts5"],"engines":{"node":">=22.13"},"bin":{"turnlog":"bin/turnlog.cjs"},"publishConfig":{"access":"public","provenance":true},"workspaces":["web"],"scripts":{"build":"tsc -p tsconfig.json && npm run build -w web","build:server":"tsc -p tsconfig.json","typecheck":"tsc -p tsconfig.json --noEmit && npm run typecheck -w web","dev":"node scripts/dev.mjs","dev:web":"npm run dev -w web","test":"vitest run","test:watch":"vitest","lint":"eslint src test","preflight":"npm run typecheck && npm run lint && npm run build && npm test","golden:update":"UPDATE_GOLDEN=1 vitest run test/adapter.test.ts","prepack":"npm run build"},"dependencies":{"chokidar":"^4.0.0"},"devDependencies":{"@types/node":"^22.0.0","eslint":"^9.0.0","typescript":"^5.5.0","typescript-eslint":"^8.0.0","vitest":"^3.0.0"},"gitHead":"c0aa1a3c4c108ec05022d771e80ebd93da75e63e","_id":"turnlog@0.13.1","_nodeVersion":"22.23.2","_npmVersion":"12.0.2","dist":{"integrity":"sha512-L19DP/UCu0dql+jdM6k8slKG+k6hV7mZPzWvXh/Ab+zSHyjqUvYWAg4QZIuXZQrKdB2t88WxocL96w/Hfsx4rQ==","shasum":"4e79a8ed0c8c10230601911585378994915f6741","tarball":"https://registry.npmjs.org/turnlog/-/turnlog-0.13.1.tgz","fileCount":75,"unpackedSize":2656980,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turnlog@0.13.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIAhsdnce87XXay2a4IgMipNhzI6M7bMeprcwDGEw7RhZAiBzBGPfP6AbNrT3iTCFp7QMsh8KMymZuBnQspoVj3jCiw=="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1db2db42-fcc7-4ab5-8969-461be0df97a3"}},"directories":{},"maintainers":[{"name":"turnlogmate","email":"turnlogdev@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/turnlog_0.13.1_1789283621554_0.17615426094543363"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-22T04:45:52.136Z","modified":"2026-09-13T07:13:42.003Z","0.1.0":"2026-07-07T20:06:07.251Z","0.2.0":"2026-07-09T18:14:47.882Z","0.2.1":"2026-07-09T19:40:32.517Z","0.2.2":"2026-07-10T05:06:00.848Z","0.2.3":"2026-07-10T07:47:27.768Z","0.2.4":"2026-07-11T20:01:04.046Z","0.2.5":"2026-07-22T04:45:52.501Z","0.2.6":"2026-07-22T08:05:49.784Z","0.2.7":"2026-07-22T12:41:32.989Z","0.3.0":"2026-07-22T14:23:46.294Z","0.3.1":"2026-07-23T19:21:49.597Z","0.4.0":"2026-07-23T20:04:10.865Z","0.5.0":"2026-07-24T18:31:56.515Z","0.6.0":"2026-07-26T19:31:07.477Z","0.7.0":"2026-07-27T18:29:04.109Z","0.8.0":"2026-07-29T16:37:58.168Z","0.9.0":"2026-08-03T17:54:42.579Z","0.9.1":"2026-08-03T18:07:09.677Z","0.10.0":"2026-08-04T18:48:44.179Z","0.10.1":"2026-08-04T19:01:02.204Z","0.11.0":"2026-08-07T04:15:53.188Z","0.12.0":"2026-08-09T11:43:04.121Z","0.12.1":"2026-08-09T22:43:18.595Z","0.12.2":"2026-08-10T16:52:50.871Z","0.13.0":"2026-08-12T13:43:00.583Z","0.13.1":"2026-09-13T07:13:41.711Z"},"bugs":{"url":"https://github.com/turnlog/turnlog/issues"},"license":"MIT","homepage":"https://turnlog.dev","keywords":["turnlog","claude-code","codex","cursor","search","replay","sessions","local","cli","jsonl","fts5"],"repository":{"type":"git","url":"git+https://github.com/turnlog/turnlog.git"},"description":"Search and replay every Claude Code session you've ever run — locally.","maintainers":[{"name":"turnlogmate","email":"turnlogdev@gmail.com"}],"readme":"<div align=\"center\">\n\n# Turnlog\n\n**Search and replay every coding-agent session you've ever run — locally.**\n\n```sh\nnpx turnlog\n```\n\n[![npm](https://img.shields.io/npm/v/turnlog?color=e8542f&label=npm)](https://www.npmjs.com/package/turnlog)\n\n[turnlog.dev](https://turnlog.dev) · [npm](https://www.npmjs.com/package/turnlog) · MIT\n\n<img src=\"https://turnlog.dev/media/turnlog-demo.gif\" alt=\"Searching every indexed session for &quot;reconnect&quot;, then landing inside the matching session at the moment it was said\" width=\"1000\">\n\n</div>\n\nTurnlog indexes your Claude Code, OpenAI Codex, and Cursor history into\nfull-text search and turn-by-turn replay, then opens a local web UI. Find that\nsession from three weeks ago in two seconds. **100% local — no accounts, no\ntelemetry, no cloud.**\n\nWork on the same repo lands in one project timeline whichever agent you pointed\nat it — so a repo reads as a single history, not two.\n\n## Install & run\n\n```sh\nnpx turnlog          # try it now — indexes everything, opens the UI\nnpm i -g turnlog     # or install globally\n```\n\nRequires **Node.js 22.13+** (the runtime your agent CLI already runs on).\nmacOS, Linux, Windows. No build step, no installer, no install scripts, no\nnative modules: the index lives in the SQLite that ships inside Node, so\nthere is nothing to compile, download, or approve.\n\n### Opening the UI\n\n`turnlog` starts the local server and prints a URL, then opens your browser to it:\n\n```\nturnlog <version>\n  UI:          http://127.0.0.1:<port>/?token=a1b2c3…\n  Claude Code: /Users/you/.claude/projects (read-only)\n  Codex:       /Users/you/.codex/sessions (read-only)\n  Cursor:      /Users/you/.cursor/projects (read-only)\n  Index:       /Users/you/.config/turnlog/index.sqlite\n```\n\nThe Codex and Cursor lines appear only if those histories exist; there is\nnothing to configure either way. Cursor comes in two flavors and both are\nread: cursor-agent CLI transcripts, and the IDE's own chats — the IDE's\nstate database is copied before it is read, so the original is never even\nopened.\n\nTurnlog picks a random free port each run, so the URL is different every time.\n**If the browser doesn't open** — over SSH, on a headless box, or with no default\nbrowser — copy that `UI:` line into a browser yourself. The `?token=…` is\ngenerated fresh each launch and is required on every request, so open the whole\nURL, not just `127.0.0.1:<port>`.\n\n- `--port <n>` — pin the port instead of choosing a random one.\n- `--no-open` — start the server without launching a browser (handy when\n  port-forwarding from a remote machine: `ssh -L 52431:127.0.0.1:52431 …`).\n- `Ctrl-C` stops the server.\n\n### Updating from 0.13.0 or older on Windows\n\nThose versions carried a native SQLite module, and Windows won't delete a\nloaded library: if a Turnlog (or the MCP process your agent keeps alive) was\nrunning, `npm i -g turnlog@latest` prints an `EPERM … better_sqlite3.node`\ncleanup warning. The update still succeeded. npm leaves the old copy behind\nas a `.turnlog-<random>` directory, and Turnlog removes it automatically the\nnext time it starts. Newer versions have no native module, so that was the\nlast time.\n\n## What it does\n\n- **Every agent, one history** — Claude Code, OpenAI Codex, and Cursor\n  sessions are all indexed, read-only, and appear side by side. Every session\n  says which agent wrote it, and a repo you worked on with several reads as\n  one timeline. A **Projects screen** lists every repo you've worked in, and\n  each gets its own **project page**: every agent's\n  sessions interleaved, who worked there, what it cost, the files it touched\n  most, and a live row when something is running in it right now.\n- **Search everything** — full-text FTS5 across your whole history, grouped by\n  session, jump straight to the match. Identifiers and `snake_case` included.\n  Subagent transcripts (the separate files newer Claude Code versions write per\n  Task run) are indexed too, as is everything the run actually saw — including\n  files you attached with `@` and edits you made by hand while it was running.\n  Filter by file (`path:api.ts`), by command (`cmd:\"npm test\"`), by date in\n  plain words (`after:7d`), by agent (`agent:codex`), by git branch\n  (`branch:feature/auth`), by MCP server (`server:playwright`), by your own\n  tags (`tag:billing`), by tool, model, project or error — or click a\n  **refine chip** to narrow by what the results actually contain. MCP calls\n  read as \"server · tool\" everywhere, not their mangled wire names, and\n  `tool:` matches the bare tool half without you typing the `mcp__` prefix. Flip to a\n  **timeline** to see when a topic kept coming up, or build the opt-in **deep\n  search** index to match inside words — `eWebSock` finds `useWebSocket`.\n  Also from the terminal: `turnlog search <query>` prints hits with deep\n  links into the running UI. Search `is:error` and you also get **recurring\n  failures**: the same error grouped across runs, ranked by how many sessions\n  hit it — \"this happened in 13 sessions across 3 projects\".\n- **Related sessions** — \"have I solved this before?\" Every replay carries a\n  quiet **related** row: the other times this problem came up, one click from\n  the message where they came up. Also an operator — `like:<session-id>` —\n  so it composes with everything else, and your agent gets it over MCP for\n  free. Computed from your index alone: the session's own rarest words, no\n  model, nothing leaving the machine.\n- **Rich replay, every agent** — tool calls show the command or arguments\n  they actually ran and pair with their output, and thinking folds away,\n  whichever agent wrote the session.\n- **Turn spine** — a 5,000-message session collapses to ten scannable turns,\n  each with a mechanical summary (reads, edits, commands, errors). Any prompt\n  copies with one click, because finding what you asked is usually the first\n  half of asking it again.\n- **Lenses & files** — collapse a session to just its diffs, commands, or\n  errors; or pivot to a file and read every change it made, in order. Diffs\n  read **unified or side-by-side**, your choice, everywhere they appear.\n- **Commands** — 40% of everything your agents do is run commands, so they get\n  their own screen: every command any agent ever ran, grouped across sessions\n  (paths, ids and numbers normalized away, so reruns fold together), with run\n  and failure counts and every verbatim run one click from its place in the\n  replay. \"What was that ffmpeg invocation I finally got working in March\" is\n  now `cmd:ffmpeg` — an operator like any other, composable with the whole\n  grammar, in the UI, the CLI and over MCP.\n- **Bookmarks** — mark any moment in a replay, give it a caption in your own\n  words, and find every marked moment later on one page.\n- **Notable sessions, derived** — a sidebar sort that ranks your history by\n  what the index already knows: length, cost, errors hit, and how many other\n  sessions touched the same files. \"My important sessions\" without the\n  homework of pinning them — and pins still outrank it when you do.\n- **Screenshots** — images you pasted to an agent, and screenshots tools\n  handed back, render inline in the replay. They were always in your logs;\n  now you can see them.\n- **Spend tracker** — cost by day, model, or project — and, uniquely, cost\n  filtered by a search query (\"what did *this kind of work* cost me\"). Usage is\n  counted once per API response (the logs repeat it per line), priced from a\n  shipped table covering Anthropic and OpenAI rates, and always labeled an\n  estimate. Cursor IDE sessions use the cost Cursor itself recorded. Rates\n  wrong for you (Bedrock, Vertex, enterprise)? Override any model via\n  `modelPricing` in settings.json.\n- **Calendar** — your sessions placed in time: a week timeline (days as rows,\n  sessions as blocks at their real hours) or a month heat-map, coloured by\n  project or by agent.\n- **Live** — the UI refreshes within about a second as your agent writes, over\n  a local event stream. No reloads, no polling loops.\n- **Context window** — the replay's stats panel draws how full the context was\n  at every response, with compaction points marked on the curve and on the turn\n  where they happened.\n- **Keyboard-first** — `⌘K` opens a command palette over every session, screen\n  and saved search; `?` shows the cheat sheet. Collapse the sidebar and it\n  keeps a rail of your sessions — same order, same filters — so the list is\n  never more than a click away.\n- **Export** — `turnlog export <id>` prints a session as markdown, HTML or JSON,\n  optionally redacted; a share panel does the same from the UI. Your pins,\n  names, notes, **tags** and bookmarks travel with\n  `turnlog annotations export|import`.\n- **Agent memory (MCP)** — `turnlog mcp` serves your history to any MCP-capable\n  agent as a read-only server, so it can search its own past sessions mid-task\n  (\"how did we fix this last month?\").\n\n**Full documentation:** [turnlog.dev/docs](https://turnlog.dev/docs) — a tour of\nevery screen, guides for search, annotation, MCP setup and sharing, and reference\npages for every search operator, CLI flag, settings key and MCP tool.\n\n## Give your agent memory (MCP)\n\n`turnlog mcp` is a plain stdio MCP server — **any MCP-capable client can use\nit**, not just the one that wrote the sessions. In Claude Code that is one\ncommand:\n\n```sh\nclaude mcp add turnlog -- npx turnlog mcp\n```\n\nAnywhere else, register the same command however your client takes MCP\nservers — `npx` with the arguments `turnlog mcp`, no port and no URL, because\nit speaks over stdio rather than a socket.\n\nFrom then on the agent can consult your session history mid-task through six\nread-only tools: `search` (same operators as the UI — `tool:`, `agent:`,\n`tag:`, `is:error`, `is:pinned`, `has:note`, `project:`, `before:`/`after:`…),\n`list_sessions`, `get_session` (the turn spine), `get_messages` (read the\ncontext around a hit), `get_context` (how full the window was, and where it\nwas compacted — worth checking before trusting a session's late-conversation\nmemory), and `file_history` (every session that ever touched a file).\n\nIt runs on your machine — no server port, no network — and is **strictly\nread-only, with no flag that changes that**: an agent can read your history\nbut never write to it. It reads the same index the app builds, so run\n`turnlog` or `turnlog index` once first; on each start it does a quick\nincremental catch-up so recent sessions are included.\n\nRegistering the server hands the agent the tools, but not the habit — it will\nstill wait to be asked. `turnlog skill` prints a skill file that supplies the\nmissing half: when to look (you referenced past work, an error looks familiar,\nan unfamiliar file is about to change), the query grammar, and the rule to cite\nthe session id so you can check it.\n\n```sh\nmkdir -p ~/.claude/skills/turnlog\nnpx turnlog skill > ~/.claude/skills/turnlog/SKILL.md\n```\n\nIt prints rather than installs, on purpose: Turnlog does not write into your\nagent's directory, and every agent keeps its instructions somewhere different —\nsend it wherever yours reads them.\n\n## Privacy\n\nTurnlog binds to `127.0.0.1` only, with `Host`-header validation (DNS-rebinding\ndefense) and a per-launch token required on every request. It makes **no\noutbound connections** — verify it yourself:\n\n```sh\nlsof -iTCP -sTCP:LISTEN | grep node\n```\n\nThe single optional network touch is a version-check against the npm registry\non startup — surfaced as a subtle \"update available\" notice in the terminal and\na dismissible banner in the web UI. The browser never contacts npm itself; the\nresult rides along on the local status API. Turn it off with\n`TURNLOG_NO_UPDATE_CHECK=1` or `\"checkUpdates\": false` in\n`~/.config/turnlog/settings.json`.\n\n## Commands\n\n```\nturnlog                     Start the local server and open the UI\nturnlog index               Incrementally index your agent history and exit\nturnlog index --rebuild     Drop the index and rebuild from scratch\nturnlog export <id>         Print a session as markdown (id or unique prefix);\n                            --format html|json, --redact to scrub keys, emails\n                            and home paths, --from/--to for a message range\nturnlog search <query>      Search from the terminal (--limit n, --json);\n                            same operators as the UI: tool: kind: is:error\n                            is:pinned has:note has:bookmark tag: agent:\n                            project: model: path: branch: cmd: server:\n                            like:<session-id> before: after:\nturnlog annotations export  Print pins, names, notes, bookmarks and saved\n                            searches as one JSON document\nturnlog annotations import <file>\n                            Merge a previous export back in\nturnlog doctor              Print a diagnostic report for a bug thread:\n                            versions, paths, settings, index facts per agent,\n                            integrity, index-vs-disk drift\nturnlog demo                Run against bundled sample sessions in a scratch\n                            index — your own history is never read\nturnlog mcp                 Serve the index to your agent over MCP (stdio, read-only)\nturnlog skill               Print a skill file that teaches your agent when to\n                            search its history — save it where your agent reads\n                            skills (see the MCP section)\n```\n\nTurnlog reads `~/.claude/projects`, `~/.codex/sessions`, `~/.cursor/projects`,\nand the Cursor IDE's state databases (via a copy — the originals are never\nopened), and never writes to any of them. The index lives in\n`~/.config/turnlog/` (`%APPDATA%\\turnlog` on Windows); override with\n`TURNLOG_DATA_DIR`.\n\nThe size shown on the home screen's index card is the whole footprint —\nthe database plus SQLite's write-ahead log beside it. Turnlog truncates the\nlog after every indexing pass, so the number goes down on its own; the\n**repack** action on the same card reclaims the rest after a prune.\n\n## Settings\n\nOptional, and there is no settings UI on purpose — create\n`~/.config/turnlog/settings.json` (`%APPDATA%\\turnlog\\settings.json` on\nWindows) only if you want one of these:\n\n```jsonc\n{\n  // Correct the shipped price table for your rates — Bedrock, Vertex,\n  // enterprise agreements, or simple disagreement. USD per million tokens;\n  // any field you omit keeps the shipped value. Matched by model id.\n  \"modelPricing\": {\n    \"claude-sonnet-4-5-20250929\": { \"input\": 2.4, \"output\": 12 }\n  },\n\n  // Open-in-editor buttons in the web UI. Unset, they don't render.\n  // `{path}` is replaced with the file's absolute path; never run through a\n  // shell. Try \"code -g {path}\" or \"webstorm {path}\".\n  \"editorCommand\": \"code -g {path}\",\n\n  // Skip the npm version check on startup (same as TURNLOG_NO_UPDATE_CHECK=1).\n  \"checkUpdates\": false,\n\n  // Drop the \"Exported with Turnlog\" footer from markdown exports.\n  \"exportFooter\": false\n}\n```\n\nCosts stay labeled estimates either way — they are computed from the token\ncounts in your own logs, not from a bill.\n\n## License\n\n[MIT](LICENSE) — free and open source. Index and open every session, no limits.\nFork it, ship it, build on it.\n\n## Development\n\n```sh\nnpm install\nnpm test               # vitest suite incl. golden-file parser snapshots\nnpm run build          # tsc → dist/ + Vite → web/dist/\nnpm run dev            # server + Vite together (scripts/dev.mjs)\n```\n\nEvery agent's log format is undocumented and changes without notice. The\nparser's rule is *never crash, never drop*: unrecognized records are stored as\n`kind='unknown'` with the raw line preserved. Adapter changes ship with corpus\nfixtures and regenerated golden files (`npm run golden:update`).\n\nArchitecture and conventions live in `AGENTS.md` — `CLAUDE.md` is a symlink to\nthe same file, so whichever name your agent looks for, it finds the one\ndocument.\n\n---\n\n*For Claude Code, OpenAI Codex, and Cursor. Not affiliated with Anthropic,\nOpenAI, or Anysphere; product names and marks belong to their owners and are\nused only to say whose sessions Turnlog reads.*\n","readmeFilename":"README.md"}