{"_id":"@cassette-meetings/cli","_rev":"12-816c7f74606983feef86c0d72bb1f6ad","name":"@cassette-meetings/cli","dist-tags":{"latest":"0.6.2"},"versions":{"0.1.0":{"name":"@cassette-meetings/cli","version":"0.1.0","keywords":["meeting","transcript","llm","cli","vtt","openai"],"author":{"name":"cassette-meetings"},"license":"MIT","_id":"@cassette-meetings/cli@0.1.0","maintainers":[{"name":"adawalli","email":"adam.wallis@gmail.com"}],"homepage":"https://github.com/adawalli/cassette#readme","bugs":{"url":"https://github.com/adawalli/cassette/issues"},"bin":{"cassette":"dist/index.js"},"dist":{"shasum":"d6bf379e63bd1d503ae6eb68c4b43e5991747fdb","tarball":"https://registry.npmjs.org/@cassette-meetings/cli/-/cli-0.1.0.tgz","fileCount":4,"integrity":"sha512-Lo1QAKIw4U9guwM0AQEyRR2tDkawSqBe0GUreRtYJZBqGBZ5MdUcg/c5f5+vW4Cy4VJumEU8+8x+eqX+A4JE0w==","signatures":[{"sig":"MEUCIQDY6DKsdih3coDhPi5dQWgH9d1MHGfuaUedqWi025dE1wIgKy5dyi3YY5ifcMLBTJDnkwvLuinMtEGHMGvba4p2n20=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":870063},"type":"module","module":"dist/index.js","engines":{"bun":">=1.0.0"},"gitHead":"809ff1a8d374b337783fc28d8fe16f4e5ce2f3a1","scripts":{"build":"bun build index.ts --outdir dist --target bun --banner '#!/usr/bin/env bun' && chmod +x dist/index.js","prepare":"husky || true","release":"npm publish --access public","prepublishOnly":"bun test && bun run build"},"_npmUser":{"name":"adawalli","email":"adam.wallis@gmail.com"},"repository":{"url":"git+https://github.com/adawalli/cassette.git","type":"git"},"_npmVersion":"11.9.0","description":"CLI tool that watches a directory for meeting transcripts and produces clean Markdown summaries using an LLM","directories":{},"lint-staged":{"*.{json,md,yaml,yml}":["prettier --write"]},"_nodeVersion":"25.6.1","dependencies":{"zod":"^4.3.6","openai":"^6.22.0","p-retry":"^7.1.1","picomatch":"^4.0.3","jsonpath-plus":"^10.4.0"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","prettier":"^3.8.1","@types/bun":"latest","@types/node":"^25.3.0","lint-staged":"^16.2.7"},"peerDependencies":{"typescript":"^5"},"_npmOperationalInternal":{"tmp":"tmp/cli_0.1.0_1772308569065_0.2796965004043026","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"@cassette-meetings/cli","version":"0.2.3","keywords":["meeting","transcript","llm","cli","vtt","openai"],"author":{"name":"cassette-meetings"},"license":"MIT","_id":"@cassette-meetings/cli@0.2.3","maintainers":[{"name":"adawalli","email":"adam.wallis@gmail.com"}],"homepage":"https://github.com/adawalli/cassette#readme","bugs":{"url":"https://github.com/adawalli/cassette/issues"},"bin":{"cassette":"dist/index.js"},"dist":{"shasum":"480aa8004ae603ff0ea921137b523ff836804c76","tarball":"https://registry.npmjs.org/@cassette-meetings/cli/-/cli-0.2.3.tgz","fileCount":4,"integrity":"sha512-EWIqF44J4mIOMepkgNGSLoilFFMLqoqMo+Ss7k3ymieVGkZvRpAUZJ+baU3mC3V7o0Ojr10DOKfzhNXwtm/+zw==","signatures":[{"sig":"MEYCIQCsk3DjMNWHbhSCr27+wz3uy/u66KhMFe/7CPiNgkuQPQIhAL2TFXHutecaKpdTsTlllWp/XVWIrWw/e9HdxW5llDNI","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@cassette-meetings%2fcli@0.2.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":870775},"type":"module","module":"dist/index.js","engines":{"bun":">=1.1.0"},"gitHead":"4d6b447349970df0811d0cf840ede7102dfd4ce4","scripts":{"build":"bun build index.ts --outdir dist --target bun --banner '#!/usr/bin/env bun' && chmod +x dist/index.js","prepare":"husky || true","prepublishOnly":"bun test && bun run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:50cf8649-a23b-49e7-a223-92b761598039"}},"repository":{"url":"git+https://github.com/adawalli/cassette.git","type":"git"},"_npmVersion":"11.11.0","description":"CLI tool that watches a directory for meeting transcripts and produces clean Markdown summaries using an LLM","directories":{},"lint-staged":{"*.{json,md,yaml,yml}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"zod":"^4.3.6","openai":"^6.22.0","p-retry":"^7.1.1","picomatch":"^4.0.3","jsonpath-plus":"^10.4.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","prettier":"^3.8.1","@types/bun":"latest","@types/node":"^25.3.0","lint-staged":"^16.2.7"},"peerDependencies":{"typescript":"^5"},"_npmOperationalInternal":{"tmp":"tmp/cli_0.2.3_1772315163368_0.25458020250183067","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@cassette-meetings/cli","version":"0.3.0","keywords":["meeting","transcript","llm","cli","vtt","openai"],"author":{"name":"cassette-meetings"},"license":"MIT","_id":"@cassette-meetings/cli@0.3.0","maintainers":[{"name":"adawalli","email":"adam.wallis@gmail.com"}],"homepage":"https://github.com/adawalli/cassette#readme","bugs":{"url":"https://github.com/adawalli/cassette/issues"},"bin":{"cassette":"dist/index.js"},"dist":{"shasum":"2a69ffcfc533fb880403c2702ec3f1ee038c3270","tarball":"https://registry.npmjs.org/@cassette-meetings/cli/-/cli-0.3.0.tgz","fileCount":4,"integrity":"sha512-lN0x8SHgfrvmG8ciukoAadgZ+XR1beVU76gwv97rdmRjmFVh27PERRgLAaVMJKqVXDcVEQWGmdef2NU+cfaeBA==","signatures":[{"sig":"MEUCIQDb9y3zulTO+A4SU2LSTR4UP412CMSmtR9Z3JKATbkg4QIgZi7ik7uQJXRSkklScQ5AGB/ul1Yd/AXAL5zQan7cllA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@cassette-meetings%2fcli@0.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1055005},"type":"module","module":"dist/index.js","engines":{"bun":">=1.1.0","node":">=18.0.0"},"gitHead":"13db0ad26c6f1ba90d57b487c38309824a5d2f2f","scripts":{"build":"bun build index.ts --outdir dist --target node --banner '#!/usr/bin/env node' && chmod +x dist/index.js","prepare":"husky || true","prepublishOnly":"bun test && bun run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:50cf8649-a23b-49e7-a223-92b761598039"}},"repository":{"url":"git+https://github.com/adawalli/cassette.git","type":"git"},"_npmVersion":"11.11.0","description":"CLI tool that watches a directory for meeting transcripts and produces clean Markdown summaries using an LLM","directories":{},"lint-staged":{"*.{json,md,yaml,yml}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"zod":"^4.3.6","yaml":"^2.8.2","openai":"^6.22.0","p-retry":"^7.1.1","picomatch":"^4.0.3","jsonpath-plus":"^10.4.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","prettier":"^3.8.1","@types/bun":"latest","@types/node":"^25.3.0","lint-staged":"^16.2.7"},"peerDependencies":{"typescript":"^5"},"_npmOperationalInternal":{"tmp":"tmp/cli_0.3.0_1772335732539_0.09830419065844342","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@cassette-meetings/cli","version":"0.3.1","keywords":["meeting","transcript","llm","cli","vtt","openai"],"author":{"name":"cassette-meetings"},"license":"MIT","_id":"@cassette-meetings/cli@0.3.1","maintainers":[{"name":"adawalli","email":"adam.wallis@gmail.com"}],"homepage":"https://github.com/adawalli/cassette#readme","bugs":{"url":"https://github.com/adawalli/cassette/issues"},"bin":{"cassette":"dist/index.js"},"dist":{"shasum":"72056f039d46567f7a235dcbbe86b12241555af0","tarball":"https://registry.npmjs.org/@cassette-meetings/cli/-/cli-0.3.1.tgz","fileCount":4,"integrity":"sha512-/cy9PpTODcHno6YoHjJD4vRgMzUTVwporfpNULoj/I6QtjcM7bv249imcxTItlm26lwMLqkSmeV8I+J0UEqVBA==","signatures":[{"sig":"MEQCIG0ryz6lI7/PSlkDq+uO3GTNjz4OJFNdV6788ua/8u3yAiByKOdDXrV0/7Dqwdu14vPCGgTbVVa46v5U72T2AxC+fw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@cassette-meetings%2fcli@0.3.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1055269},"type":"module","module":"dist/index.js","engines":{"bun":">=1.1.0","node":">=18.0.0"},"gitHead":"16d4f302e47915722b4ace1d222a341ded046c7f","scripts":{"test":"bun test","build":"bun build index.ts --outdir dist --target node --banner '#!/usr/bin/env node' && chmod +x dist/index.js","prepare":"husky || true","test:coverage":"bun test --coverage","prepublishOnly":"bun test --coverage && bun run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:50cf8649-a23b-49e7-a223-92b761598039"}},"repository":{"url":"git+https://github.com/adawalli/cassette.git","type":"git"},"_npmVersion":"11.11.0","description":"CLI tool that watches a directory for meeting transcripts and produces clean Markdown summaries using an LLM","directories":{},"lint-staged":{"*.{json,md,yaml,yml}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"zod":"^4.3.6","yaml":"^2.8.2","openai":"^6.22.0","p-retry":"^7.1.1","picomatch":"^4.0.3","jsonpath-plus":"^10.4.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","prettier":"^3.8.1","@types/bun":"latest","@types/node":"^25.3.0","lint-staged":"^16.2.7"},"peerDependencies":{"typescript":"^5"},"_npmOperationalInternal":{"tmp":"tmp/cli_0.3.1_1772396614330_0.45532199171779064","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"name":"@cassette-meetings/cli","version":"0.3.2","keywords":["meeting","transcript","llm","cli","vtt","openai"],"author":{"name":"cassette-meetings"},"license":"MIT","_id":"@cassette-meetings/cli@0.3.2","maintainers":[{"name":"adawalli","email":"adam.wallis@gmail.com"}],"homepage":"https://github.com/adawalli/cassette#readme","bugs":{"url":"https://github.com/adawalli/cassette/issues"},"bin":{"cassette":"dist/index.js"},"dist":{"shasum":"4ea430aeadb21fcb17995da206f8fb9279f7fbaa","tarball":"https://registry.npmjs.org/@cassette-meetings/cli/-/cli-0.3.2.tgz","fileCount":4,"integrity":"sha512-VHI6lPQeeIN3tYxfhAnsfUjw70D81kOP5R587SwPMslzRcTiSxa77niUhMoki3HmFYmmxNdPpjeL3xzmStxtWA==","signatures":[{"sig":"MEUCIQDbt3DUnizDZoULApCa/wBbBODnT+zL7dkRWWxDAfBruwIgSRWn4VHPQGaP0iFV288tOvU5v5m2w5GjQ9hS9HQi9Fk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@cassette-meetings%2fcli@0.3.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1055295},"type":"module","module":"dist/index.js","engines":{"bun":">=1.1.0","node":">=18.0.0"},"gitHead":"b0249cbbe96150351d9d0a5a1639167b9f5fd14c","scripts":{"test":"bun test","build":"bun build index.ts --outdir dist --target node --banner '#!/usr/bin/env node' && chmod +x dist/index.js","prepare":"husky || true","test:coverage":"bun test --coverage","prepublishOnly":"bun test --coverage && bun run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:50cf8649-a23b-49e7-a223-92b761598039"}},"repository":{"url":"git+https://github.com/adawalli/cassette.git","type":"git"},"_npmVersion":"11.11.0","description":"CLI tool that watches a directory for meeting transcripts and produces clean Markdown summaries using an LLM","directories":{},"lint-staged":{"*.{json,md,yaml,yml}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"zod":"^4.3.6","yaml":"^2.8.2","openai":"^6.22.0","p-retry":"^7.1.1","picomatch":"^4.0.3","jsonpath-plus":"^10.4.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","prettier":"^3.8.1","@types/bun":"latest","@types/node":"^25.3.0","lint-staged":"^16.2.7"},"peerDependencies":{"typescript":"^5"},"_npmOperationalInternal":{"tmp":"tmp/cli_0.3.2_1773091331041_0.4078939334901448","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@cassette-meetings/cli","version":"0.4.0","keywords":["meeting","transcript","llm","cli","vtt","openai"],"author":{"name":"cassette-meetings"},"license":"MIT","_id":"@cassette-meetings/cli@0.4.0","maintainers":[{"name":"adawalli","email":"adam.wallis@gmail.com"}],"homepage":"https://github.com/adawalli/cassette#readme","bugs":{"url":"https://github.com/adawalli/cassette/issues"},"bin":{"cassette":"dist/index.js"},"dist":{"shasum":"4bb46e16017794f188f565024101227ea54cef13","tarball":"https://registry.npmjs.org/@cassette-meetings/cli/-/cli-0.4.0.tgz","fileCount":4,"integrity":"sha512-V47yrV6NPXfUfCmXEWAs8dduQH+SodBXpfsHcnv9YkCi9kllmneKS13j5yIB9rgpr34+ol69x37KdzQ7TvusLQ==","signatures":[{"sig":"MEUCICT/w+ID/3nCk8aqTXwLF86wF2A2Vo3RXFcLz60Y9I65AiEA0SpVLnV26mSClG225CJHM9Zq4TpFlpcFH0+LxVWPfAY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@cassette-meetings%2fcli@0.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1057229},"type":"module","module":"dist/index.js","engines":{"bun":">=1.1.0","node":">=18.0.0"},"gitHead":"11ef93575edc8b7862b4f47ec34dc47a583d628a","scripts":{"test":"bun test","build":"bun build index.ts --outdir dist --target node --banner '#!/usr/bin/env node' && chmod +x dist/index.js","prepare":"husky || true","test:coverage":"bun test --coverage","prepublishOnly":"bun test --coverage && bun run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:50cf8649-a23b-49e7-a223-92b761598039"}},"repository":{"url":"git+https://github.com/adawalli/cassette.git","type":"git"},"_npmVersion":"11.11.0","description":"CLI tool that watches a directory for meeting transcripts and produces clean Markdown summaries using an LLM","directories":{},"lint-staged":{"*.{json,md,yaml,yml}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"zod":"^4.3.6","yaml":"^2.8.2","openai":"^6.22.0","p-retry":"^7.1.1","picomatch":"^4.0.3","jsonpath-plus":"^10.4.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","prettier":"^3.8.1","@types/bun":"latest","@types/node":"^25.3.0","lint-staged":"^16.2.7"},"peerDependencies":{"typescript":"^5"},"_npmOperationalInternal":{"tmp":"tmp/cli_0.4.0_1773092845331_0.4317312821756105","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"@cassette-meetings/cli","version":"0.4.1","keywords":["meeting","transcript","llm","cli","vtt","openai"],"author":{"name":"cassette-meetings"},"license":"MIT","_id":"@cassette-meetings/cli@0.4.1","maintainers":[{"name":"adawalli","email":"adam.wallis@gmail.com"}],"homepage":"https://github.com/adawalli/cassette#readme","bugs":{"url":"https://github.com/adawalli/cassette/issues"},"bin":{"cassette":"dist/index.js"},"dist":{"shasum":"b989b7f856f7b9bc01047513311a4d41b063b3d8","tarball":"https://registry.npmjs.org/@cassette-meetings/cli/-/cli-0.4.1.tgz","fileCount":4,"integrity":"sha512-x8NZwHZqWYuKBGRuYt32onIfjf++qVG5c/UyiKi8bFHAkH9bhXMI3xdNLkivS4ySJt8DOEhen/XPql0F/ZQ2Mg==","signatures":[{"sig":"MEUCIFyljMdRcjSuAbXlK+cIIKqstcdnmsT9c/LnWwJ7IpfHAiEAiSTKooP77AsbXAS32h3Rh3Cdg6QGjcD1L/7fQjuNSL4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@cassette-meetings%2fcli@0.4.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1058343},"type":"module","module":"dist/index.js","engines":{"bun":">=1.1.0","node":">=18.0.0"},"gitHead":"843fff7a7f12274554ae2e6ea95688bfc4e4eae4","scripts":{"test":"bun test","build":"bun build index.ts --outdir dist --target node --banner '#!/usr/bin/env node' && chmod +x dist/index.js","prepare":"husky || true","test:coverage":"bun test --coverage","prepublishOnly":"bun test --coverage && bun run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:50cf8649-a23b-49e7-a223-92b761598039"}},"repository":{"url":"git+https://github.com/adawalli/cassette.git","type":"git"},"_npmVersion":"11.11.0","description":"CLI tool that watches a directory for meeting transcripts and produces clean Markdown summaries using an LLM","directories":{},"lint-staged":{"*.{json,md,yaml,yml}":["prettier --write"]},"_nodeVersion":"22.22.0","dependencies":{"zod":"^4.3.6","yaml":"^2.8.2","openai":"^6.22.0","p-retry":"^7.1.1","picomatch":"^4.0.3","jsonpath-plus":"^10.4.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","prettier":"^3.8.1","@types/bun":"latest","@types/node":"^25.3.0","lint-staged":"^16.2.7"},"peerDependencies":{"typescript":"^5"},"_npmOperationalInternal":{"tmp":"tmp/cli_0.4.1_1773174465387_0.8516685279644354","host":"s3://npm-registry-packages-npm-production"}},"0.4.2":{"name":"@cassette-meetings/cli","version":"0.4.2","keywords":["meeting","transcript","llm","cli","vtt","openai"],"author":{"name":"cassette-meetings"},"license":"MIT","_id":"@cassette-meetings/cli@0.4.2","maintainers":[{"name":"adawalli","email":"adam.wallis@gmail.com"}],"homepage":"https://github.com/adawalli/cassette#readme","bugs":{"url":"https://github.com/adawalli/cassette/issues"},"bin":{"cassette":"dist/index.js"},"dist":{"shasum":"59498622515d4d3114fef754ba2461e8f8bfd1be","tarball":"https://registry.npmjs.org/@cassette-meetings/cli/-/cli-0.4.2.tgz","fileCount":4,"integrity":"sha512-XSzuYMY3ftKcvoSEyn9Sv7jwAoUT/PbHDboVlNW8iINPil4pnXjxXJcv6qLV4OpZApmfwPfs9B5zmvet/SLwdA==","signatures":[{"sig":"MEUCICaYzSuUo/ssvEic9yBnZkMAkB5ox8x8nECqdph47sphAiEAq29iuWsSwBoHkFJxFzkivzFu/6V4tizVkhPCB/NH1/s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@cassette-meetings%2fcli@0.4.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1058021},"type":"module","module":"dist/index.js","engines":{"bun":">=1.1.0","node":">=18.0.0"},"gitHead":"944174e0d286a894a5dc5b22543c522a10d2e163","scripts":{"test":"bun test","build":"bun build index.ts --outdir dist --target node --banner '#!/usr/bin/env node' && chmod +x dist/index.js","prepare":"husky || true","test:coverage":"bun test --coverage","prepublishOnly":"bun test --coverage && bun run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:50cf8649-a23b-49e7-a223-92b761598039"}},"repository":{"url":"git+https://github.com/adawalli/cassette.git","type":"git"},"_npmVersion":"11.12.0","description":"CLI tool that watches a directory for meeting transcripts and produces clean Markdown summaries using an LLM","directories":{},"lint-staged":{"*.{json,md,yaml,yml}":["prettier --write"]},"_nodeVersion":"22.22.1","dependencies":{"zod":"^4.3.6","yaml":"^2.8.2","openai":"^6.22.0","p-retry":"^7.1.1","picomatch":"^4.0.3","jsonpath-plus":"^10.4.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","prettier":"^3.8.1","@types/bun":"latest","@types/node":"^25.3.0","lint-staged":"^16.2.7"},"peerDependencies":{"typescript":"^5"},"_npmOperationalInternal":{"tmp":"tmp/cli_0.4.2_1774214062415_0.21365479887279548","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@cassette-meetings/cli","version":"0.5.0","keywords":["meeting","transcript","llm","cli","vtt","openai"],"author":{"name":"cassette-meetings"},"license":"MIT","_id":"@cassette-meetings/cli@0.5.0","maintainers":[{"name":"adawalli","email":"adam.wallis@gmail.com"}],"homepage":"https://github.com/adawalli/cassette#readme","bugs":{"url":"https://github.com/adawalli/cassette/issues"},"bin":{"cassette":"dist/index.js"},"dist":{"shasum":"cff14494fc854247984c212ae2df0c9106ec3a32","tarball":"https://registry.npmjs.org/@cassette-meetings/cli/-/cli-0.5.0.tgz","fileCount":4,"integrity":"sha512-502PH0/vy9HJBRafmwh9hDhNp4mIegXfPx5a/ndredYSDWUGnldbNU2khWuqrEqqvzqCi017F+LPslZstS2epw==","signatures":[{"sig":"MEUCICQfwYTZJl+xYSdu/fm55hQkZ0AE3ykV0AV17ntuSK+iAiEAwJdEdySr/cBBi7vr8Am2cPt4+w0nRvwbUTYjbsrHllM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@cassette-meetings%2fcli@0.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1060532},"type":"module","module":"dist/index.js","engines":{"bun":">=1.1.0","node":">=18.0.0"},"gitHead":"a7abd9e1c9645e339094a675cb2c12a3003803ef","scripts":{"test":"bun test","build":"bun build index.ts --outdir dist --target node --banner '#!/usr/bin/env node' && chmod +x dist/index.js","prepare":"husky || true","test:coverage":"bun test --coverage","prepublishOnly":"bun test --coverage && bun run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:50cf8649-a23b-49e7-a223-92b761598039"}},"repository":{"url":"git+https://github.com/adawalli/cassette.git","type":"git"},"_npmVersion":"11.12.0","description":"CLI tool that watches a directory for meeting transcripts and produces clean Markdown summaries using an LLM","directories":{},"lint-staged":{"*.{json,md,yaml,yml}":["prettier --write"]},"_nodeVersion":"22.22.1","dependencies":{"zod":"^4.3.6","yaml":"^2.8.2","openai":"^6.22.0","p-retry":"^7.1.1","picomatch":"^4.0.3","jsonpath-plus":"^10.4.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","prettier":"^3.8.1","@types/bun":"latest","@types/node":"^25.3.0","lint-staged":"^16.2.7"},"peerDependencies":{"typescript":"^5"},"_npmOperationalInternal":{"tmp":"tmp/cli_0.5.0_1774284737678_0.6161277114853474","host":"s3://npm-registry-packages-npm-production"}},"0.5.1":{"name":"@cassette-meetings/cli","version":"0.5.1","keywords":["meeting","transcript","llm","cli","vtt","openai"],"author":{"name":"cassette-meetings"},"license":"MIT","_id":"@cassette-meetings/cli@0.5.1","maintainers":[{"name":"adawalli","email":"adam.wallis@gmail.com"}],"homepage":"https://github.com/adawalli/cassette#readme","bugs":{"url":"https://github.com/adawalli/cassette/issues"},"bin":{"cassette":"dist/index.js"},"dist":{"shasum":"d9cd8dd08a89ab544339ecf32fd7f1b1edfa301f","tarball":"https://registry.npmjs.org/@cassette-meetings/cli/-/cli-0.5.1.tgz","fileCount":4,"integrity":"sha512-DMs3wl2qZdSmUbe9+zBh7OpGU+RCFPcVQxh2JWOiPGhS0B1TKS+HOdNMMDmucT4bCJ4okWaXZxmpcuge3RlUwA==","signatures":[{"sig":"MEUCIGFPNlygbYOGELgz5EkAjgHFZa12MRpj2Zhmh2X3H/DYAiEAjKnYu4INQhNTffQ8Ls/BtyH3qZPbl9p0m9iD5mnbCYI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@cassette-meetings%2fcli@0.5.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1061106},"type":"module","module":"dist/index.js","engines":{"bun":">=1.1.0","node":">=18.0.0"},"gitHead":"82a11c994d010c843e13d3da7e78786cd2074a19","scripts":{"test":"bun test","build":"bun build index.ts --outdir dist --target node --banner '#!/usr/bin/env node' && chmod +x dist/index.js","prepare":"husky || true","test:coverage":"bun test --coverage","prepublishOnly":"bun test --coverage && bun run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:50cf8649-a23b-49e7-a223-92b761598039"}},"repository":{"url":"git+https://github.com/adawalli/cassette.git","type":"git"},"_npmVersion":"11.12.0","description":"CLI tool that watches a directory for meeting transcripts and produces clean Markdown summaries using an LLM","directories":{},"lint-staged":{"*.{json,md,yaml,yml}":["prettier --write"]},"_nodeVersion":"22.22.1","dependencies":{"zod":"^4.3.6","yaml":"^2.8.2","openai":"^6.22.0","p-retry":"^7.1.1","picomatch":"^4.0.3","jsonpath-plus":"^10.4.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","prettier":"^3.8.1","@types/bun":"latest","@types/node":"^25.3.0","lint-staged":"^16.2.7"},"peerDependencies":{"typescript":"^5"},"_npmOperationalInternal":{"tmp":"tmp/cli_0.5.1_1774287484164_0.07949929176609594","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@cassette-meetings/cli","version":"0.6.0","keywords":["meeting","transcript","llm","cli","vtt","openai"],"author":{"name":"cassette-meetings"},"license":"MIT","_id":"@cassette-meetings/cli@0.6.0","maintainers":[{"name":"adawalli","email":"adam.wallis@gmail.com"}],"homepage":"https://github.com/adawalli/cassette#readme","bugs":{"url":"https://github.com/adawalli/cassette/issues"},"bin":{"cassette":"dist/index.js"},"dist":{"shasum":"cfc5d8918e6fddb60484490506ea3ec823b9bb5c","tarball":"https://registry.npmjs.org/@cassette-meetings/cli/-/cli-0.6.0.tgz","fileCount":4,"integrity":"sha512-eXuxIX+6QMDPBVE5Cu9JYZAue+Pu7R1ywDFhvY5blgjzkPaZaYgUQKU7qMq2cz5p6+9w9idVobHwQXJ7rIm9Qw==","signatures":[{"sig":"MEQCIDOLEa5Rbky4y1N7nFG/A1Qg/8QoYBgsk3kbxM+or3qtAiBhpuCMia/yS41WalbmgQD0Ggjiu/iTo+nlNI3Yc8dE/w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@cassette-meetings%2fcli@0.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1062933},"type":"module","module":"dist/index.js","engines":{"bun":">=1.1.0","node":">=18.0.0"},"gitHead":"0027d4d286811a47aab4ec7d936e5f207eab9519","scripts":{"test":"bun test","build":"bun build index.ts --outdir dist --target node --banner '#!/usr/bin/env node' && chmod +x dist/index.js","prepare":"husky || true","test:coverage":"bun test --coverage","prepublishOnly":"bun test --coverage && bun run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:50cf8649-a23b-49e7-a223-92b761598039"}},"repository":{"url":"git+https://github.com/adawalli/cassette.git","type":"git"},"_npmVersion":"11.12.0","description":"CLI tool that watches a directory for meeting transcripts and produces clean Markdown summaries using an LLM","directories":{},"lint-staged":{"*.{json,md,yaml,yml}":["prettier --write"]},"_nodeVersion":"22.22.1","dependencies":{"zod":"^4.3.6","yaml":"^2.8.2","openai":"^6.22.0","p-retry":"^7.1.1","picomatch":"^4.0.3","jsonpath-plus":"^10.4.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","prettier":"^3.8.1","@types/bun":"latest","@types/node":"^25.3.0","lint-staged":"^16.2.7"},"peerDependencies":{"typescript":"^5"},"_npmOperationalInternal":{"tmp":"tmp/cli_0.6.0_1774290466142_0.12725997961643376","host":"s3://npm-registry-packages-npm-production"}},"0.6.2":{"name":"@cassette-meetings/cli","version":"0.6.2","description":"CLI tool that watches a directory for meeting transcripts and produces clean Markdown summaries using an LLM","module":"dist/index.js","type":"module","license":"MIT","author":{"name":"cassette-meetings"},"keywords":["meeting","transcript","llm","cli","vtt","openai"],"repository":{"type":"git","url":"git+https://github.com/adawalli/cassette.git"},"homepage":"https://github.com/adawalli/cassette#readme","bugs":{"url":"https://github.com/adawalli/cassette/issues"},"engines":{"node":">=18.0.0","bun":">=1.1.0"},"bin":{"cassette":"dist/index.js"},"publishConfig":{"access":"public","provenance":true},"scripts":{"build":"bun build index.ts --outdir dist --target node --banner '#!/usr/bin/env node' && chmod +x dist/index.js","test":"bun test","test:coverage":"bun test --coverage","prepare":"husky || true","prepublishOnly":"bun test --coverage && bun run build"},"lint-staged":{"*.{json,md,yaml,yml}":["prettier --write"]},"devDependencies":{"@types/bun":"latest","@types/node":"^25.5.0","husky":"^9.1.7","lint-staged":"^16.4.0","prettier":"^3.8.1"},"peerDependencies":{"typescript":"^5.9.3"},"dependencies":{"jsonpath-plus":"^10.4.0","openai":"^6.33.0","p-retry":"^7.1.1","picomatch":"^4.0.4","yaml":"^2.8.3","zod":"^4.3.6"},"gitHead":"a1198314d0b235464f0414a46e04a5532a1533e1","_id":"@cassette-meetings/cli@0.6.2","_nodeVersion":"22.22.1","_npmVersion":"11.12.1","dist":{"integrity":"sha512-XrFeR+p2DYbRNQTqw6JH/eTyOuApq+57f6nwv4CjxswKoZ5CpW1UCOn8uPioUISV2DGtqKNrXdkBrAjUDEUEnA==","shasum":"bc573850fbe255d710d8707a4d8cb1baea0283da","tarball":"https://registry.npmjs.org/@cassette-meetings/cli/-/cli-0.6.2.tgz","fileCount":4,"unpackedSize":1072246,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@cassette-meetings%2fcli@0.6.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIFKfUX1gsJXJCf1HHEWBB+PZ4IlQnB0wG9wKXDZHOpWuAiEArcjMqgR46jhGGHPdBiveaeJeDiYGhTB4cNWwz4GQNro="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:50cf8649-a23b-49e7-a223-92b761598039"}},"directories":{},"maintainers":[{"name":"adawalli","email":"adam.wallis@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/cli_0.6.2_1774974503083_0.8761751337759922"},"_hasShrinkwrap":false}},"time":{"created":"2026-02-28T19:56:08.929Z","modified":"2026-03-31T16:28:23.536Z","0.1.0":"2026-02-28T19:56:09.250Z","0.2.3":"2026-02-28T21:46:03.577Z","0.3.0":"2026-03-01T03:28:52.739Z","0.3.1":"2026-03-01T20:23:34.522Z","0.3.2":"2026-03-09T21:22:11.274Z","0.4.0":"2026-03-09T21:47:25.566Z","0.4.1":"2026-03-10T20:27:45.534Z","0.4.2":"2026-03-22T21:14:22.545Z","0.5.0":"2026-03-23T16:52:17.837Z","0.5.1":"2026-03-23T17:38:04.313Z","0.6.0":"2026-03-23T18:27:46.339Z","0.6.2":"2026-03-31T16:28:23.233Z"},"bugs":{"url":"https://github.com/adawalli/cassette/issues"},"author":{"name":"cassette-meetings"},"license":"MIT","homepage":"https://github.com/adawalli/cassette#readme","keywords":["meeting","transcript","llm","cli","vtt","openai"],"repository":{"type":"git","url":"git+https://github.com/adawalli/cassette.git"},"description":"CLI tool that watches a directory for meeting transcripts and produces clean Markdown summaries using an LLM","maintainers":[{"name":"adawalli","email":"adam.wallis@gmail.com"}],"readme":"# cassette\n\n[![npm version](https://img.shields.io/npm/v/@cassette-meetings/cli)](https://www.npmjs.com/package/@cassette-meetings/cli)\n[![Coverage](https://codecov.io/gh/adawalli/cassette/graph/badge.svg)](https://codecov.io/gh/adawalli/cassette)\n\n<img src=\"scorecard.png\" width=\"100%\">\n\nAutomatically watches a meeting transcript directory for JSON and VTT files, sends transcript content to an OpenAI-compatible endpoint, and writes cleaned Markdown next to each input file.\n\n## Flow\n\n```mermaid\nsequenceDiagram\n    participant CLI as index.ts (CLI)\n    participant Svc as service.ts\n    participant Watcher as watcher.ts\n    participant Queue as SerialQueue\n    participant Proc as processor.ts\n    participant Extract as extract.ts / vtt-extract.ts\n    participant LLM as llm.ts (OpenAI)\n    participant FS as Filesystem\n\n    CLI->>CLI: parse args, load config\n    CLI->>Svc: runService() or runBackfill()\n\n    Note over Svc: Backfill phase\n    Svc->>FS: scan root_dir for *.json and *.vtt\n    FS-->>Svc: existing input files\n    Svc->>Queue: enqueue each file\n\n    Note over Svc: Watch phase (watch mode only)\n    Svc->>Watcher: start fs.watch(root_dir)\n    Watcher-->>Svc: new/changed .json/.vtt detected\n    Svc->>Queue: enqueue file (deduplicated)\n\n    Note over Queue: Serial processing (one at a time)\n    Queue->>Proc: processFile(path)\n    Proc->>FS: skip if .md already exists\n    Proc->>Proc: poll until file size+mtime stable\n    Proc->>FS: read input file (JSON or VTT)\n    FS-->>Proc: raw content\n    Proc->>Extract: extract segments (JSONPath or VTT parser)\n    Extract-->>Proc: \"Speaker: text\" lines\n    loop for each step (single prompt or chained steps)\n        Proc->>LLM: send input + step prompt\n        LLM-->>Proc: output Markdown (with retries)\n        Proc->>FS: write step output file (e.g. meeting.cleaned.md)\n        Note over Proc: step output becomes next step's input\n    end\n\n    alt on failure\n        Proc->>FS: move source to _failed/\n        Proc->>FS: write .error.log\n    end\n```\n\n## Install\n\nTry it without installing:\n\n```bash\nnpx @cassette-meetings/cli --help\nbunx @cassette-meetings/cli --help\n```\n\nFor regular use, install globally so `cassette` is available as a command:\n\n```bash\nbun add -g @cassette-meetings/cli   # recommended\n# or, if you prefer npm:\nnpm install -g @cassette-meetings/cli\n```\n\n## Configure\n\nCreate config at:\n\n- `$XDG_CONFIG_HOME/cassette/config.yaml`, or\n- `~/.config/cassette/config.yaml`\n\nExample:\n\n```yaml\nwatch:\n  root_dir: ~/Documents/meetings\n  stable_window_ms: 3000\n\noutput:\n  copy_to: ~/notes/meetings\n  # copy_filename: \"{{date}} {{title}}\"  # optional template for copied filenames\n  # stem_strip: \"_[a-f0-9]{4,8}$\"       # regex to clean unwanted suffixes from {{stem}}\n\n# transcript.path is optional (defaults to \"$[*]\"), only used for JSON files.\n# VTT files are parsed natively and ignore this section.\ntranscript:\n  path: \"$[*]\" # MacWhisper exports a root-level array\n  speaker_field: speaker\n  text_field: text\n\nprompt: |\n  You are a meeting transcript editor. Clean up this raw transcript...\n```\n\nWhen `copy_to` is set, processed files are copied to that directory. The optional `copy_filename` field controls the copied filename using template variables:\n\n| Variable | Description |\n|----------|-------------|\n| `{{date}}` | Recording date in `YYYY-MM-DD` format |\n| `{{stem}}` | Filename without extension and leading date |\n| `{{title}}` | YAML front matter `title` field (falls back to `{{stem}}`) |\n\nThe `.md` extension is appended automatically. Do not include it in the template - `\"{{date}} {{title}}\"` produces `2026-03-20 Weekly Standup.md`. If the template already ends with `.md` it won't be doubled.\n\nWithout `copy_filename`, files are named `{{date}} {{stem}}.md` by default.\n\n### Cleaning up `{{stem}}`\n\nSome transcript tools append uniqueness hashes to filenames (e.g. `weekly-standup_36f1f8.vtt`). The `stem_strip` option removes unwanted patterns from the stem using regex before it's used in templates or default naming.\n\n```yaml\noutput:\n  stem_strip: \"_[a-f0-9]{4,8}$\"\n```\n\nThis turns `weekly-standup_36f1f8` into `weekly-standup`. You can also pass an array of patterns - they're applied in order:\n\n```yaml\noutput:\n  stem_strip:\n    - \"_[a-f0-9]{4,8}$\"\n    - \"-copy$\"\n```\n\nPatterns are applied after the leading/trailing date is removed from the stem, so they don't need to account for the date portion. If stripping removes the entire stem, the original value is kept as a safety net.\n\nFor `{{title}}` to resolve, the final step's output must contain a YAML front matter block with a `title` field. If the title is missing, empty, or the front matter is malformed, `{{title}}` falls back to `{{stem}}`.\n\n### Prompt chaining\n\nYou can chain multiple LLM calls with `steps:` instead of a single `prompt:`. Each step's output becomes the next step's input, and each step writes its own output file.\n\n```yaml\nsteps:\n  - name: clean\n    suffix: \".cleaned.md\"\n    prompt: |\n      You are a transcript editor. Clean up this raw transcript...\n\n  - name: summarize\n    suffix: \".summary.md\"\n    prompt: |\n      Summarize the cleaned transcript below...\n```\n\nGiven `meeting-2024-01-15.json` (or `meeting-2024-01-15.vtt`), this produces:\n\n- `meeting-2024-01-15.cleaned.md` - output of the clean step\n- `meeting-2024-01-15.summary.md` - output of the summarize step (input: cleaned transcript)\n\nEach step accepts:\n\n- `name` (required) - identifies the step in logs and error reports\n- `prompt` (required) - the prompt sent to the LLM along with the current input\n- `suffix` (optional) - output filename suffix; defaults to `output.markdown_suffix`\n- `llm` (optional) - per-step LLM overrides (any field from the top-level `llm:` block)\n\nYou must use either `prompt:` or `steps:`, not both.\n\nFull example with all options: [config.example.yaml](config.example.yaml)\n\nGenerate starter config automatically:\n\n```bash\ncassette init\n```\n\nForce overwrite existing config:\n\n```bash\ncassette init --force\n```\n\nSet credentials:\n\n```bash\ncp .env.example .env\n# then edit .env and fill in your key\n```\n\nIf you run via Bun, it loads `.env` automatically. If you run via Node/npx, export the variable manually:\n\n```bash\nexport OPENAI_API_KEY=\"...\"\n```\n\n## Run\n\nOne-off backfill:\n\n```bash\ncassette --once\n```\n\nLong-running watch mode:\n\n```bash\ncassette\n```\n\nCustom config path:\n\n```bash\ncassette --config /path/to/config.yaml\n```\n\nShow help:\n\n```bash\ncassette --help\n```\n\n## macOS LaunchAgent\n\nSee [docs/launchagent.md](docs/launchagent.md).\n\n## Contributing\n\nSee [DEVELOPER.md](DEVELOPER.md) for setup, development workflow, and publishing instructions.\n","readmeFilename":"README.md"}