The visualizer's PCM cache decoded the entire episode into RAM (22050 Hz mono s16 ~160 MB/hr of audio) and held it until stop() — a 3-hour episode pinned ~500 MB and long-form content hit 2.5 GB. The 4x decode also pulled the whole remote file even when only minutes were listened to. - audio-pcm-cache: sliding window around the playback position — the decode head caps at maxAheadSec (600s) ahead of the cursor, segments older than keepBehindSec (300s) are pruned, and the tail refills as playback advances. Steady state ~40 MB regardless of episode length; a backward seek past the window restarts a segment there (the existing seek-hole mechanism, no new failure mode). - feed: cap the full-parse episode cache at 1000 episodes/feed so archive-heavy subscriptions can't pin their entire history in RAM; the visible list stays bounded by the user's cache preference and fetch-more keeps working within the ceiling. - tests: pin the new head-cap and prune contracts (8/8 in audio-pcm-cache.test.ts; full suite 193 pass). Also includes the in-flight cleanup/refactor pass (cover-art resolve helper, page and comment tightening, ESLint config removal).
30 lines
729 B
JSON
30 lines
729 B
JSON
{
|
|
"name": "podcast-tui-app",
|
|
"version": "0.1.0",
|
|
"module": "src/index.tsx",
|
|
"type": "module",
|
|
"private": true,
|
|
"bin": {
|
|
"podtui": "./dist/index.js"
|
|
},
|
|
"scripts": {
|
|
"start": "bun --preload @opentui/solid/preload src/index.tsx",
|
|
"dev": "bun --preload @opentui/solid/preload --watch src/index.tsx",
|
|
"build:native": "bash scripts/build-cavacore.sh",
|
|
"build": "bun run build.ts",
|
|
"dist": "bun dist/index.js",
|
|
"test": "bun test",
|
|
"lint": "bun tsc --noEmit"
|
|
},
|
|
"devDependencies": {
|
|
"@types/bun": "latest",
|
|
"typescript": "^5.9.3"
|
|
},
|
|
"dependencies": {
|
|
"@opentui/core": "^0.1.77",
|
|
"@opentui/solid": "^0.1.77",
|
|
"date-fns": "^4.1.0",
|
|
"solid-js": "^1.9.9"
|
|
}
|
|
}
|